HIVE数据操作
Hive数据操作
混合使用语法:
INSERT OVERWRITE TABLE employees
PARTITION (country='US',state)
SELECT ..., se.cnty,se.st
FROM staged_employees se;
WHERE se.cnty='US';
动态分区键必须在静态分区键之后。
3.单个查询语句创建并加载数据
CREATE TABLE ca_employees
AS SELECT name,salary,address
FROM employees
WHERE se.state ='CA';
1.向管理表中装载数据
hive没有行级别数据插入、数据更新和删除操作。
采用“大量”的数据装载操作,或者通过其它方式仅仅将文件写入到正确目录下。
LOAD DATA LOCAL INPATH '${env:HOME}/california-employees' OVERWRITE INTO TABLE employees PARTITION (country='US', state='CA'); 关于PARTITION:- 如果分区目录不存在,该命令会先创建分区,然后将数据拷贝到该分区目录。
- 如果目标表为非分区表,需要省略PARTITION子句。
- LOAD DATA LOCAL......拷贝本地数据到位于分布式文件系统上的目标位置。
- LOAD DATA......转移数据到目标位置。
- 若有该关键字,目标文件夹中之前存在的数据会先被删除。
- 若没有该关键字,会把新增的文件增加到目标文件夹中而不会删除之前的。
- 若目标文件夹中存在和装载的文件同名文件,旧的文件将会被覆盖重写。
- 若使用了该关键字,之前 分区中内内容(或无分区表中内容)将会被覆盖掉。
- 若未使用该关键字或者使用了INTO关键字,hive将会以追加的方式写入数据。
- HIVE根据SELECT语句中最后2列确定分区字段country和state的值。这就是为什么在表staged_employees中我们使用了不同的命名,是为了强调源表字段值和输出分区值之间的关系是根据位置而不是根据命名来匹配的。
- 假设表staged_employees中有100个国家和州的话,执行完上述语句后,表employees就会有100个分区。
- 该功能常用于从一个大的宽表中选取部分需要的数据集。
- 该功能不能用于外部表。