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形式来导入数据:
- 向分桶表插入数据
- 如果指定表中的数据,不是以纯文本模式存储,须要应用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 psninsert overwrite table psn9select id,name insert into table psn10select 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'