关于hive:Hive基本操作

34次阅读

共计 2668 个字符,预计需要花费 7 分钟才能阅读完成。

Hive DML

1、插入数据

1.1. Loading files into tables
-- 加载本地数据到 hive 表
    load data local inpath '/root/data/data' into table psn;--(/root/data/data 指的是本地        linux 目录)
-- 加载 hdfs 数据文件到 hive 表
    load data inpath '/data/data' into table psn;--(/data/data 指的是 hdfs 的目录)

留神:
1、load 操作不会对数据做任何的转换批改操作
2、从本地 linux load 数据文件是复制文件的过程
3、从 hdfs load 数据文件是挪动文件的过程
4、load 操作也反对向分区表中 load 数据,只不过须要增加分区列的值

1.2. Insert

insert 形式运行 MR 程序,通过程序将数据输入到表目录!
在某些场景,必须应用 insert 形式来导入数据:

  1. 向分桶表插入数据
  2. 如果指定表中的数据,不是以纯文本模式存储,须要应用 insert 形式导入

语法:
insert into|overwrite table 表名 select xxx | values(),(),()
insert into: 向表中追加新的数据
insert overwrite:先清空表中所有的数据,再向表中增加新的数据

            
非凡状况:多插入模式 (从一张源表查问,向多个指标表插入)
    from 源表
    insert xxxx  指标表  select xxx
    insert xxxx  指标表  select xxx
    insert xxxx  指标表  select xxx

举例:from deptpart2
       insert into table deptpart1 partition(area='huaxi') select deptno,dname,loc
        insert into table deptpart1 partition(area='huaxinan') select deptno,dname,loc 
        
从查问语句中获取数据插入某张表
语法:Standard syntax:
    INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)             [IF NOT EXISTS]] select_statement1 FROM from_statement;
    INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)]                 select_statement1 FROM from_statement;

    Hive extension (multiple inserts):
    FROM from_statement
    INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)             [IF NOT EXISTS]] select_statement1
    [INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]]                             select_statement2]
    [INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2] ...;
        FROM from_statement
    INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)]                 select_statement1
    [INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2]
    [INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]]                             select_statement2] ...;

    Hive extension (dynamic partition inserts):
        INSERT OVERWRITE TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2]                 ...) select_statement FROM from_statement;
        INSERT INTO TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...)                 select_statement FROM from_statement;

– 留神:这种形式插入数据的时候须要事后创立好后果表
– 从表中查问数据插入后果表

INSERT OVERWRITE TABLE psn9 SELECT id,name FROM psn

– 从表中获取局部列插入到新表中

from psn
insert overwrite table psn9
select id,name 
insert into table psn10
select id
1.3. location

在建表时,指定表的 location 为数据寄存的目录

1.4. import

不仅能够导入数据还能够顺便导入元数据 (表构造)。Import 只能导入 export 输入的内容!

IMPORT [[EXTERNAL] TABLE 表名 (新表或曾经存在的表) [PARTITION (part_column="value"[, ...])]]
  FROM 'source_path'
  [LOCATION 'import_target_path']
1. 如果向一个新表中导入数据,hive 会依据要导入表的元数据主动创立表
2. 如果向一个曾经存在的表导入数据,在导入之前会先检查表的构造和属性是否统一
只有在表的构造和属性统一时,才会执行导入
3. 不论表是否为空,要导入的分区必须是不存在的
import external table importtable1  from '/export1'

2、DML 之导出

2.1. insert

将一条 sql 运算的后果,插入到指定的门路

 语法:insert overwrite [local] directory '/opt/module/datas/export/student'
               row format xxxx
               select * from student;
               
2.2. export

既能导出数据,还能够导出元数据 (表构造)!

export 会在 hdfs 的导出目录中,生成数据和元数据!导出的元数据是和 RDMS 无关!如果是分区表,能够抉择将分区表的局部分区进行导出!语法:export table 表名 [partiton( 分区信息) ] to 'hdfspath'

正文完
 0