目录
向管理表中装载数据
下例中语句从一个本地目录($HOME/employees)载入数据到表中将会创建一个 us 和 ca 分区,注意 HiveQL 是如何应用 HOME 环境变量的
overwrite,如果分区目录不存在,先回创建分区目录,再将数据拷贝到该目录下,存在覆盖原来的
如果目标是非分区表,那应该省略 partition 子句
local 代表本地数据弄到分布式文件系统目标位置,没有的话就代表转移数据到目标位置
load data local inpath '${env:HOME}/employees'
overwrite into table employee
partition (country = 'us',state = 'ca');
转载 csv 数据
https://blog.csdn.net/duyuanhai/article/details/52840717
查询语句插入数据
静态的
分区指定值
insert overwrite table employees
partition (country = 'us,state = 'or')
select * from staged se
where se.centy = 'us and se.st = 'or';
overwrite 之前分区的内容会被覆盖掉
into 代替 overwrite,那是以追加的方式
动态的:有分区没有指定具体指,扫描所有
insert overwrite table employees
partition (country = 'us,state)
select * from staged se
where se.centy = 'us';
静态分区键必须出现在动态分区键之前,动态分区默认是没开启的,开启后默认是以“严格”模式执行的,这种模式至少有一列分区字段是静态的,还有一些属性:
属性 缺省值 描述
hive.exec.dynamic.partition false 设置成 true,表示启动动态分区功能
hive.exec.dynamic.partition.mode strict 设置为 nonstrict,表示允许所有分区都是动态的
hive.exec.max.dynamic.partitions.pernode 100 每个 mapper 或 reduce 可以创建的最大动态分区个数
hive.exec.max.dynamic.partitions +1000 一个动态分区语句可以创建的最大动态分区个数
hive.exec.max.created.files 100000 全局可以创建的最大文件数
查询语句创建表并加载数据
create table ca_employees
as select name,salary
from employees se
where se.statr='us';
不能用于外部表,alter table 语句可以为外部表 “引用” 到一个分区
导出数据
如果是刚好需要的格式,直接拷贝到本地
hadoop fs -cp source_path target_path
否则使用:
insert overwrite local directory '/usr/employees'
select name,salary
from employees se
where se.state='ca';
可以写多条 select 输出不不通目录