HiveQL:数据操作

通过导入本地文件来装载数据(overwrite关键字表示重写,即会覆盖掉原来的数据,如果没有overwrite,或者用into关键字来替换它的话,数据将以追加的方式写入):

hive> load data local inpath '/usr/my/database/Chinese-employees'
overwrite into table employees;

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

hive> insert overwrite table employees
partition (country='US',state='OR')
select * from staged_employees se where se.country='US' and se.st="OR";

以下这三种insert语句执行效率会更高一点:

hive> from staged_employees se
insert overwrite table employees
partition(country='US',state='OR')
select * where se.cnty='US' and se.st='OR';

hive> insert overwrite table employees
partition(country='US',state='CA')
select * where se.cnty='US' and se.st='CA';

hive> insert overwrite table employees
partition(country='US' and state='IL')
select * where se.cnty='US' and se.st='IL';

动态分区插入(基于查询参数推断出需要创建的分区名称),以下的例子是根据select语句中的最后2列来确定分区字段country和state的值(...表示的是该表的其他列,此处省略不写):

hive> insert overwrite table employees
partition(country,state)
select ...,se.cnty,se.st
from staged_employees se;

当然,你也可以混合使用动态和静态分区,以下的例子就是指定了country字段的值为静态的US,而分区字段state是动态值(静态分区键必须要出现在动态分区键之前):

hive> insert overwrite table employees
partition(country='US',state)
select ...,se.cnty,se.st
from staged_employees se
where se.cnty='US';

动态分区功能默认情况是没有开启的。开启后,默认是以“严格”模式执行的,在这种模式下要求至少有一列分区字段是静态的。

动态分区属性

属性名称缺省值描述
hive.exec.dynamic.partitionfalse设置为true,表示开启动态分区功能
hive.exec.dynamic.partition.modestrict设置为nonstrict,表示允许所有分区都是动态的
hive.exec.max.dynamic.partitions.pernode100每个mapper或reducer可以创建的最大动态分区的个数。如果某个mapper或reducer尝试创建大于这个值的分区的话则会抛出一个致命错误信息
hive.exec.max.dynamic.partitions+1000一个动态分区创建语句可以创建的最大动态分区个数。如果超过这个值则会抛出一个致命错误信息
hive.exec.max.created.files100000全局可以创建的最大文件个数。有一个Hadoop计数器会跟踪记录创建了多少个文件,如果超过这个值则会抛出一个致命错误信息

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

hive> create table ca_employees
as select name,salary,address
from employees
where se.state='CA';

导出数据:

hive> insert overwrite local directory 'tmp/ca_employees'
select name,salary,address
from employees
where se.state='CA';

 

转载于:https://my.oschina.net/lonelycode/blog/834989

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值