Hive数据操作
Hive执行命令方式
- cli,jdbc,hwi,beeline
- cli shell
- hive -help
- hive --help
- list,source
- 注:命令脚本必须在集群的节点或hiveclient执行
Hive操作-变量
- 配置变量
- set val='';
- ${hiveconf:val}
- select * from text where name=${hiveconf:val}
- 环境变量
- ${env:HOME},注env查看所有环境变量
Hive数据加载
- 内表数据加载
- 创建表时加载
- create table newtable as select col1,col2 from oldtable
- 创建表时指定数据位置
- create table tablename() location ''
- 本地数据加载
- Load data local inpath 'localpath' [overwrite] into table tablename
- 加载hdfs数据
- Load data inpath 'hdfspath' [overwrite] into table tablename
- 使用Hadoop命令拷贝数据到指定位置(hive的shell中执行和Linux的shell执行)
- 创建表时加载
- 由查询语句加载数据
- insert [overwrite|into] table tablename
select col1,col2 from table where.. - from table
insert [overwrite|into] table tablename
select col1,col2
where... - 注意字段对应不同于一些关系型数据库
- insert [overwrite|into] table tablename
- 外表数据加载
- 创建表时指定数据位置
- create external table tablename () location ''
- 查询插入,同内表
- 使用Hadoop命令拷贝数据到指定位置(hive的shell中执行和Linux的shell执行)
- 创建表时指定数据位置
- 分区表数据加载
- 内部分区表和外部分区表数据加载
- 内部分区表数据加载方式类似于内表
- 外部分区表数据加载方式类似于外表
- 注意:数据存放的路径层次要和表的分区一致
- 如果分区表没有新增分区,即使目标路径下已经有数据了,但依然查不到数据
- 不同之处
- 加载数据指定目标表的同事,需要指定分区
- 本地数据加载
- load data local inpath 'localpath' [overwrite] into table tablename partition(pn='')
- 加载hdfs数据
- load data inpath 'hdfspath' [overwrite] into table tablename partition(pn='')
- 由查询语句加载数据
- insert [overwrite] into table tablename partition(pn='')
select col1,col2 from table where...
- insert [overwrite] into table tablename partition(pn='')
- 内部分区表和外部分区表数据加载
- Hive数据加载注意问题
- 分隔符问题,且分隔符默认只有单个字符
- 数据类型对应问题
- Load数据,字段类型不能互相转化时,查询返回NULL
- select查询插入,字段类型不能相互转化时,插入数据为NULL
- select查询插入数据,字段值顺序要与表中字段顺序一致,名称可不一致
- Hive在数据加载时不做检查,查询时检查
- 外部分区表需要添加分区才能看到数据
- alter table add partition(dt='11111')