首页 > 学院 > 开发设计 > 正文

Hive编程指南04---Hive数据操作

2019-11-06 06:06:05
字体:
来源:转载
供稿:网友

Hive数据操作

1.装载数据

        LOAD DATA [LOCAL] INPATH '/.../...'//INPATH这个路径下不可以包含任何文件夹

        OVERWRITE INTO TABLE <table>

        PARTITOIN(...); //若分区不存在,会先创建分区,再拷贝数据;非分区表,则省略

2.通过查询语句向表中插入数据

        INSERT OVERWRITE TABLE <table> //OVERWRITE覆盖,INTO追加

        PARTITION (partition1 = '', parttiion2 = '')

        SELECT * FROM <table> t

        WHERE t.par1 = '' AND t.par2 = '';

        //若源数据表非常大,分区也很多,使用以下语句,只扫描一次输入数据,然后按多种方式进行划分

        FROM <from_table> f

        INSERT OVERWRITE TABLE <to_table>

            PARTITION (par1 = '1', par2 = '1')

            SELECT * FROM WHERE f.par1 = '1' AND f.par2 = '1'

        INSERT OVERWRITE TABLE <to_table>

            PARTITION (par1 = '1', par2 = '2')

            SELECT * FROM WHERE f.par1 = '1' AND f.par2 = '2'

        INSERT OVERWRITE TABLE <to_table>

            PARTITION (par1 = '1', par2 = '3')

            SELECT * FROM WHERE f.par1 = '1' AND f.par2 = '3';

3.动态分区插入

    如果分区很多,就需要动态分区功能,基于查询参数推断出需要创建的分区名称,即源表字段值和输出分区值之间关系是根据位置而不是根据命名来匹配的

        INSERT OVERWRITE TABLE <to_table>

        PARTITION(par1, par2)

        SELECT ..., f.par1, f.par2

        FROM <from_table> f;

        //静态分区键必须出现在动态分区键之前

        INSERT OVERWRITE TABLE <to_table>

        PARTITION(par1 = '1', par2)

        SELECT ..., f.par1, f.par2

        FROM <from_table> f

        WHERE f.par1 = '1';

        动态分区默认情况没有开启,开启后,默认是以"严格"模式执行的,在这种模式下要求至少有一列分区字段是静态的。

        

4.单个查询语句中创建表并加载数据

    //不能用于外部表

    CREATE TABLE <table>

    AS SELECT col1, col2

    FROM <from_table> f

    WHERE s.col = '';

5.导出数据

    hadoop fs -cp source_path target_path

    也可以使用 INSERT ...DIRECTORY ...

    INSERT OVERWRITE LOCAL DIRECTORY '/tmp/...'

    SELECT col1, col2, col3

    FROM <table> t

    WHERE t.par1 = '...';

    指定多个输入文件夹目录

    FROM staged_table st

    INSERT OVERWRITE DIRECTORY '/tmp/1'

        SELECT * FROM st.par1 = '1' AND st.par2='1'

    INSERT OVERWRITE DIRECTORY '/tmp/2'

        SELECT * FROM st.par1 = '1' AND st.par2='2';

    


上一篇:什么时候选择LinkedList?

下一篇:PAT 1023

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表