Hive编程(五)【HiveQL:数据操作】

5.1 向管理表中装载数据

LOAD DATA LOCAL INPATH '${env:HOME}/california-employees'
OVERWRITE INTO TABLE employees
PARTITION (country = 'US', state = 'CA');

在上述例子中,如果分区目录不存在的话,会先创建分区目录。然后再将数据拷贝到该目录下.

如果目标表是非分区表,省略掉PARTITION子句.

通常情况下指定的路径应该是一个目录,而不是独立的文件。

使用LOCAL关键字表示数据从本地文件系统路径拷贝数据。省略掉LOCAL表示从分布式文件系统中拷贝。

LOAD DATA LOCAL 拷贝本地数据文件到分布式文件系统上的目标位置

LOAD DATA 移动数据到目标位置

指定全路径具有良好的可读性。同样支持相对路径。在本地模式执行时,相对路径是指当前Hive CLI启动时用户的工作目录。对于分布式或者伪分布式,该路径相对于分布式文件系统中用户的根目录。

若指定了OVERWRITE,目标文件中存在的数据将会被删除。否则仅仅将把新增的文件增加到目标文件夹中而不会删除之前的数据。

如果目标表是分区表,需要使用PARTITION,且必须为每个分区的键指定一个值

5.2 通过查询语句向表中插入数据

关键字INSERT允许通过查询语句向目标表中插入数据.

INSERT OVERWRITE TABLE employees
PARTITION (country = 'US', state = 'OR')
SELECT * FROM staged_employees se
WHERE se.cnty = 'US' AND se.st = 'OR';

不使用OVERWRITE或者使用INTO替换OVERWRITE的话,Hive将会以追加的方式写入数据而不会覆盖之前的内容。

动态分区插入

INSERT OVERWRITE TABLE employees
PARTITION (country, state)
SELECT ..., se.cnty, se.st
FROM staged_employees se;

混合使用动态和静态分区

INSERT OVERWRITE TABLE employees
PARTITION (country = 'US', state)
SELECT ..., se.cnty, se.st
FROM staged_employees se
WHERE se.cnty = 'US';

静态分区键必须出现在动态分区键之前。动态分区默认没有开启。默认以"严格"模式执行。该模式下要求至少有一列分区字段是静态的。

动态分区属性

hive.exec.dynamic.partition 默认false,设置成true表示开启动态分区功能

hive.exec.dynamic.partition.mode 默认strict 设置成nonstrict表示允许所有分区都是动态的

hive.exec.max.dynamic.partitions.pernode 默认100 每个mapper或reducer可创建的最大动态分区个数

hive.exec.max.dynamic.partitions 默认1000 一个动态分区创建语句可创建的最大动态分区个数

hive.exec.max.created.files 默认100000 全局可以创建的最大文件个数
hive> set hive.exec.dynamic.partition=true;
hive> set hive.exec.dynamic.partition.mode=nonstrict;
hive> set hive.exec.max.dynamic.partitions.pernode=1000;

5.3 单个查询语句中创建表并加载数据

CREATE TABLE ca_employees
AS SELECT name, salary, address
FROM employees
WHERE se.state = 'CA';

5.4 导出数据

INSERT OVERWRITE LOCAL DIRECTORY '/tmp/ca_employees'
SELECT name, salary, address
FROM employees
WHERE se.state = 'CA';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值