美文网首页我爱编程
Hive的基本操作

Hive的基本操作

作者: 有一束阳光叫温暖 | 来源:发表于2018-03-28 21:36 被阅读0次

    一、hive指令基本操作

    清屏:Ctrl+L 或者 !clear

    查看数据仓库中的表:show tables;

    查看数据仓库中内置的函数:show functions;

    查看表结构:desc 表名

    查看HDFS上文件:dfs -ls

    执行linux指令:!+指令

    执行HQL语句:select 

    执行SQL的脚本:source SQL文件

    二、hive的DDL操作、

    a.分割符

    create table jiametest(uid string,name string)row format delimited fields terminated by ',';

    b.单分区

    create table jiametest1(uid string,name string)partitioned by (country String)row format delimited fields terminated by ',';

    LOAD DATA local INPATH  'path' INTO TABLE tablename partition(country='USA');

    c.双分区

    create table jiametest1(uid string,name string)partitioned by (sex String,hour String);

    LOAD DATA local INPATH 'path' INTO TABLE tablename partition(sex='男',hour='01');

    d.分桶

    #指定开启分桶

    set hive.enforce.bucketing = true;

    set  mapreduce.job.reduces = 4 ;

     先创建 一个学生表

    create table students(Sno int,Sname String,Sex String,Sage int, Sdept String)row format delimited fields terminated by ',';

    导入数据

    LOAD DATA local INPATH ' /home/linwentao/desktop/hivedata/students.txt' INTO TABLE students;

    e.外部表

    EXTERNAL 关键子可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION)

    Hive 创建内部表时,会将数据移动到数据仓库指向的路径,若创建外表表,仅仅记录数据所在的路径,不对数据的位置做任何改变,在删除表时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据

    LIKE 允许用户复制现有的表结构,但是不复制数据

    f.修改表

    //一次添加一个分区

    增加分区:ALTER TABLE tablename ADD PARTITION(dt='20170101')location 'path';

    //一次添加多个个分区

    ALTER TABLE tablename ADD PARTTITION(dt='2008-08-08',country='us')location

    'path' PARTITION(dt='2008-08-09',country='us')location 'path';

    删除分区

    ALTER TABLE tablename DROP IF EXISTS PARTITION(dt='2008-08-08');

    ALTER TABLE tablename DROP IF EXISTS PARTITION(dt='2008-08-08',country='us');

    修改分区

    ALTER TABLE tablename PARTITION(dt='2008-08-08')RENAME TO PARTITION(dt='20080808');

    添加列

    ALTER TABLE tablename ADD | REPLACE COLUMNS(col_name STRING);

    修改列

    test(a int,b int,c int);

    //修改a 字段名

    ALTER TABLE test CHANGE a a1 INT;

    //修改a 的字段并且在b的后面

    ALTER TBALE test CHANGE a a1 STRING AFTER b;

    //修改b位置

    ALTER TABLE test CHANGE b b1 INT  FIRST;

    // 表重命名

    ALTER TABLE test RENAME TO new_test;

    三 、hive的DML操作

    3.1.Load

    在将数据加载到表中时,hive不会进行任何转换。加载操作是将数据文件移动到与hive表对应的位置的纯复制、移动操作

    语法结构

          LOAD DATA [LOCAL] INPATH 'filename' [OVERWRITE] INTO TABLE table [PARTITION (partcol=val1,partcol2=val2...)]

    说明:

    a.filepath

    相对路径,例如:project/datal

    绝对路径, 例如:/user/hive/project/datal

    完整UIR,  例如:hdfs://namenode:9000/user/hive/project/datal

        filepath 可以引用一个文件(在这种情况下,hive将文件移动到表中)或者它可以一个目录(在这种情况下,hive将吧目录中的所有文件移动到表中)

    b.LOCAL

    如果指定了local,load命令将在本地文件系统中查找文件路径

    load 命令会将filepath中的文件复制到目标文件系统中目标文件系统由表的位置性决定,被复制的数据文件移动到表的数据对应的位置。

    如果没有指定LOCAL关键字,如果filepath指向的是一个完整的URI,hive会直接使用这个URI。否则:如果没有指定schama或者authority,hive会使用在hadoop配置文件定义的schama和authority,fs.default.name指定了namenode的url

    c.OVERWRITE

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

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

    3.2.insert

    hive中insert主要结合select查询语句使用,将查询结果插入到表中,例如:

    insert overwrite table stu_buck select * from student cluster by(Sno);

    需要保证查询结果列的数目和需要插入数据表格的列数目一致,如果查询出来的数据类型和插入表格对应的列数据类型不一致,将会进行转换,但不能保证转换一定成功,转换失败的数据将会为null.

    可以将一个表查询出来的数据插入原表中,结果相对于自我复制一份数据。

    a.multo inserts 多重插入:

    from source_table

    insert overwrite table tablename1 [partition (partcol1=val1,partcol2=val2)]

    select_statement1

    insert overwirte table tablename2 [partition (partcol1=val1,partcol2=val2)]

    select_statement2...

    b.Dynamic partition inserts 动态分区插入:

    INSERT OVERWRITE TABLE tablename PARTITION (partcol1=[val1],partcol=[val2]...)

    select_statement FROM from_statement

    动态分区是通过位置来对应区值的。原始表select出发的值和输出partition的值的关系仅仅是通过位置来确定的和名字并没有关系。

    c.导出表数据

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

    multiple inserts"

    FROM from_statement

    INSERT OVERWEITE [LOCAL]DIRECTORY directory1 select_statement1

    [INSERT OVERWRITE[LOCAL]DIRECTORY directory2 select_statement2]..

    3.3 select

    SELECT [ALL | DISTINCT] select_expr, select_expr, ...

    FROM table_reference

    [WHERE where_condition]

    [GROUP BY col_list]

    [HAVING having_condition]

    [CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY col_list]]

    [LIMIT number];

    相关文章

      网友评论

        本文标题:Hive的基本操作

        本文链接:https://www.haomeiwen.com/subject/wxzucftx.html