知识点-Hive进阶

知识点-Hive的数据操作及开发

Hive的数据导入

load命令【filepath可以是目录,导入目录下的所有文件】
local为本地文件,否则默认为远程文件,如默认HDFS
partition为分区表
注意表的分隔符和文件中数据的分隔符要保持一致

1
2
load data [local] inpath 'filepath' [overwrite]
into table tablename [partition (partcol1=val1, partcol2=val2 ...)]

Sqoop组件
用于数据导入导出 HDFS - 关系数据库等
需要用到Hadoop的部分jar包-配置环境、JDBCjar包放入lib
最终提交MR执行-配置环境
业务系统 sqoop import to hive
hive数据分析和处理
hive sqoop export to 业务系统
insert语句【仅支持insert into select 略】
创建外部表与HDFS数据映射

使用sqoop将数据从RDBMS导入到HDFS中

1
./sqoop import --connect jdbc连接的url --username xx --password 123456 --table test --columns 'id, tname' -m 1 --target-dir '/sqoop/test'

使用sqoop将数据从RDBMS导入到Hive中

1
./sqoop import --hive-import --connect jdbc连接的url --username xx --password 123456 --table test --columns 'id, tname' -m 1

使用sqoop将数据从RDBMS导入到Hive中,并且指定Hive表的名字

1
./sqoop import --hive-import --connect jdbc连接的url --username xx --password 123456 --table test --columns 'id, tname' -m 1 --hive-table test

使用sqoop将数据从RDBMS导入到Hive中,并使用where条件

1
./sqoop import --hive-import --connect jdbc连接的url --username xx --password 123456 --table test --columns 'id, tname' -m 1 --hive-table test --where 'id=8'

使用sqoop将数据从RDBMS导入到Hive中,并使用查询语句

1
2
./sqoop import --hive-import --connect jdbc连接的url --username xx --password 123456 -m 1 --query 'select * from test where ... AND $CONDITIONS' --target-dir '/sqoop/test' --hive-table test
./sqoop import --hive-import --connect jdbc连接的url --username xx --password 123456 --table test --columns 'id, tname' -m 1 --hive-table test --where 'id=8'

使用sqoop将数据从Hive中导入到RDBMS中【还可以使用临时函数UDF的方式-org.apache.hadoop.hive.contrib.genericudf.example.GenericUDFDBOutput】

1
./sqoop export --connect jdbc连接的url --username xx --password 123456 -m 1 --table test --export-dir '/sqoop/test'

Hive的数据查询

使用HQL语句
impala presto等
简单查询
机器配置
nvl(comm, ‘’) 空值转换
is null | is not null
distinct x,y
Fetch Task功能 Hive0.10.0开始支持,简单的查询语句,不走MR

1
select * from ...

Fetch Task配置方式,修改hive-site.xml【永久生效】

1
2
set hive.fetch.task.conversion=more;
hive --hiveconf hive.fetch.task.conversion=more

过滤和排序

where
and
or
explain查看执行计划
like %_%
order by 列名 表达式 asc desc【MR】

set hive.groupy.orderby.position.alias=true 【使用列序号代替列名】

Hive的函数

Hive的内置函数

数学函数 round ceil floor
字符函数 lower upper length concat substr trim lpad rpad
收集函数和转换函数 size(map) cast(as)
日期函数 to_date year month day weekofyear datediff date_add date_sub
条件函数 coalesce case..when..
聚合函数和表生成函数 count sum min max avg explode【map array生成行】

Hive的自定义函数UDF

继承org.apache.hadoop.hive.ql.UDF
重写evaluate方法
打包jar上传 add jar /../..jar
创建临时函数 create temporary function xx as yy_class_name
select xx from table
drop temporary function xx

Hive的表连接

等值连接 a, b where a=b
不等值连接 a, b where a.x between b.y1 and b.y2
外连接 left nvl
自连接

Hive中的子查询

只支持from和where子句中的子查询

Hive的JDBC客户端API

1
2
# hive --service hiverserver
Starting Hive Thrift Server

JDBC 10000
Thrift Client TSocket(open) TProtocol

邵志鹏 wechat
扫一扫上面的二维码关注我的公众号
0%