• Hive DDL及DML操作


     

    一.修改表

    增加/删除分区

    语法结构


    ALTER TABLE table_name ADD [IF NOT EXISTS] partition_spec [ LOCATION 'location1' ] partition_spec [ LOCATION 'location2' ] ...

    partition_spec:

    : PARTITION (partition_col = partition_col_value, partition_col = partiton_col_value, ...)

     

    ALTER TABLE table_name DROP partition_spec, partition_spec,...


    ü  具体实例

    alter table student_p add partition(part='a') partition(part='b');

     

     

     

     

     

     

    重命名表

    ü  语法结构


    ALTER TABLE table_name RENAME TO new_table_name


    ü  具体实例

     

     

    增加/更新列

    ü  语法结构


    ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)


     

    注:ADD是代表新增一字段,字段位置在所有列后面(partition列前),REPLACE则是表示替换表中所有字段。

     


    ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]


    ü  具体实例

     

    二.显示命令


    show tables
    show databases
    show partitions
    show functions
    desc extended t_name;
    desc formatted table_name;


    三. Load命令

    Load基础语法


    LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO
    TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]



    Load语法关键字
    Load 操作只是单纯的复制/移动操作,将数据文件移动到 Hive 表对应的位置。

    有如下关键字:


    Filepath
    LOCAL关键字
    OVERWRITE 关键字


    filepath


    相对路径,例如:project/data1
    绝对路径,例如:/user/hive/project/data1
    包含模式的完整 URI,列如:
    hdfs://namenode:9000/user/hive/project/data1

    LOCAL关键字

    如果指定了 LOCAL, load 命令会去查找本地文件系统中的 filepath。如果没有指定 LOCAL 关键字,则根据inpath中的uri查找文件

    OVERWRITE 关键字
    如果使用了 OVERWRITE 关键字,则目标表(或者分区)中的内容会被删除,然后再将 filepath 指向的文件/目录中的内容添加到表/分区中。

    如果目标表(分区)已经有一个文件,并且文件名和 filepath 中的文件名冲突,那么现有的文件会被新文件所替代。

    加载数据
    直接将数据文本复制到/user/hive/warehouse/目录

    通过load data指令
    Hive(版本0.14以前)不支持一条一条的用insert语句进行插入操作,也不支持update的操作。数据是以load的方式,加载到建立好的表中。

    数据一旦导入,则不可修改。要么drop掉整个表,要么建立新的表,导入新的数据。

    LOAD DATA格式


    LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]



     关键字[OVERWRITE]意思是是覆盖原表里的数据,不写则不会覆盖。     关键字[LOCAL]是指你加载文件的来源为本地文件,不写则为hdfs的文件。
    实例:


    load data local inpath '/home/hadoop/user_info_data.txt' into table t_user_info;
    load data inpath '/home/hadoop/student.txt' into table t_user;



    LOAD DATA实例


    load data local inpath '/home/hadoop/student.txt' into table t_user;

    load data inpath '/home/hadoop/student.txt' into table t_user;



    load到指定表的分区
    直接将file,加载到指定表的指定分区。表本身必须是分区表,如果是普通表,导入会成功,但是数据实际不会被导入。具体sql如下:


    LOAD DATA LOCAL INPATH '/home/admin/test/test.txt' OVERWRITE INTO TABLE test_1 PARTITION(pt=’xxxx)


     

    四.Insert语句


    查询结果插入Hive表


    INSERT OVERWRITE [INTO] TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement


     

     

    Multi Inserts多重插入


    FROM from_statement
    INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select statement1
    [INSERT OVERWRITE TABLE tablename2 [PARTITION ...]
    Select statement2] ...


     

     

    动态分区插入


    INSERT OVERWRITE TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_statement


    使用了非严格模式


    set hive.exec.dynamic.partition.mode=nonstrict


    导出表数据


    INSERT OVERWRITE [LOCAL] DIRECTORY directory1 SELECT ... FROM ...


    multiple inserts:
    FROM from_statement
    INSERT OVERWRITE [LOCAL] DIRECTORY directory1 select_statement1
    [INSERT OVERWRITE [LOCAL] DIRECTORY directory2 select_statement2] ...


     导出文件到本地

     

     

    导出文件到HDFS

     

  • 相关阅读:
    编程为谁?
    Nokia S60编程环境的建立(转自彩酷玩家)
    你可以是一个机器吗?
    无法在web服务器上启动调试的解决
    VB.NET和VB6.0有什么区别(转)
    短信3
    短信2
    短信(转自天极)
    短信4
    函数递归调用
  • 原文地址:https://www.cnblogs.com/Transkai/p/10590655.html
Copyright © 2020-2023  润新知