https://blog.csdn.net/qq_35995514/article/details/108542495
目录
一、Parquet+Snappy 压缩格式的数据export
1.创建表 dwd_report_site_hour
2.解决方式
二、Sqoop export columns 参数说明
1.Hive字段顺序和MySQL保持一致
2. Sqoop export columns 中的字段顺序调整
3.测试 Sqoop export columns 中 减少一个字段
三、总结
一、Parquet+Snappy 压缩格式的数据export
1.创建表 dwd_report_site_hour
创建分区 外部表 采用 parquet 格式 ,SNAPPY压缩
create external table if not exists dwd_report_site_hour(
sitetype string,
sitename string,
innum int,
outnum int,
datatime string,
inserttime timestamp,
modifyTime timestamp
)
partitioned by(dt string)
row format delimited
fields terminated by '\001'
stored as parquet TBLPROPERTIES('parquet.compression'='SNAPPY');
分区外部表,使用 parquet 文本格式加 SNAPPY 压缩方式存储,将 指标数据 由 Hive 数仓导入 MySQL job任务失败。
目前通过Sqoop从Hive的parquet抽数到关系型数据库的时候会报kitesdk找不到文件的错,这是Sqoop已知的问题,参考SQOOP-2907(参考):
https://issues.apache.org/jira/browse/SQOOP-2907
2.解决方式
sqoop-export --connect jdbc:mysql://192.168.2.226:3306/kangll \
--username root \
--password winner@001 \
--table dwd_report_site_hour \
--update-key sitetype,sitename \
--update-mode allowinsert \
--input-fields-terminated-by '\001' \
--hcatalog-database kangll \
--hcatalog-table dwd_report_site_hour \
--hcatalog-partition-keys dt \
--hcatalog-partition-values '20200910' \
--num-mappers 1 \
--input-null-string '\\N' \
--input-null-non-string '\\N'
参数说明:
--table MySQL库中的表名
--hcatalog-database Hive中的库名
--hcatalog-table Hive库中的表名,需要抽数的表
--hcatalog-partition-keys 分区字段
--hcatalog-partition-values 分区值
--num-mappers 执行作业的Map数
二、Sqoop export columns 参数说明
如果不使用 column 参数,就要默认Hive 表中的字段顺序和个数和MySQL表保持一致,如果字段顺序或个数不一致可以加 columns 参数进行导出控制。
1、hive中的表字段数目和目标mysql表字段数目可以不一致,加 columns 参数
2、 hive中的表字段和目标mysql表字段名称顺序可以调整,加 columns 参数
1.Hive字段顺序和MySQL保持一致
1.添加 id 字段
2.MySQL 中插入两条记录
3. Hive表中添加一条记录
4.指定 columns
# Sqoop从Hive的parquet格式存储 抽数到关系型数据库
sqoop-export --connect jdbc:mysql://192.168.2.226:3306/kangll \
--username root \
--password kangll \
--table dwd_report_site_hour \
--update-key sitetype,sitename \
--update-mode allowinsert \
--input-fields-terminated-by '\001' \
--hcatalog-database kangll \
--hcatalog-table dwd_report_site_hour \
--hcatalog-partition-keys dt \
--hcatalog-partition-values '20200910' \
--num-mappers 1 \
--columns sitetype,sitename,innum,outnum,datatime,inserttime,modifyTime
5.查看MySQL 表 导出是否成功
2. Sqoop export columns 中的字段顺序调整
下面我调整 export 中的 columns 的顺序看能不能成功导出到MySQL
1.Hive表中插入一条记录
2.调整 colums 中 sitetype, sitename 的字段顺序
# 与 MySQL 的字段顺序保持一致
--columns sitetype,sitename,innum,outnum,datatime,inserttime,modifyTime
# 将 sitetype, sitename 字段顺序调换
--columns sitename,sitetype,innum,outnum,datatime,inserttime,modifyTime
3.查看MySQL
3.测试 Sqoop export columns 中 减少一个字段
1.去掉 dataTime 字段
# 与 MySQL 的字段顺序保持一致
--columns sitetype,sitename,innum,outnum,datatime,inserttime,modifyTime
# 将 sitetype, sitename 字段顺序调换
--columns sitename,sitetype,innum,outnum,datatime,inserttime,modifyTime
# 将 datatime 字段 去掉
--columns sitename,sitetype,innum,outnum,inserttime,modifyTime
2. Sqoop export columns 去掉
sqoop-export --connect jdbc:mysql://192.168.2.226:3306/kangll \
--username root \
--password winner@001 \
--table dwd_report_site_hour \
--update-key sitetype,sitename \
--update-mode allowinsert \
--input-fields-terminated-by '\001' \
--hcatalog-database kangll \
--hcatalog-table dwd_report_site_hour \
--hcatalog-partition-keys dt \
--hcatalog-partition-values '20200910' \
--num-mappers 1 \
--columns sitename,sitetype,innum,outnum,inserttime,modifyTime
3.hive 表中再插入一条数据
三、总结
1.对于 hive Parquet+Snappy 格式的数据导出 ,使用 hcatalog 参数, 如果不使用 ,可以采用 另外一种方式解决,将 Hive 表数据查询出来放到 HDFS 临时目录,然后 get 到 本地,使用 MySQL load file 方式,这种方式 显然比较麻烦,但SQL 对表字段内容处理支持很好,更灵活。
2.Sqoop export 中 columns 参数 可以让 Hive表中的字段 和MySQL 表中的字段对应,如果 Hive导入的 某个字段缺少,则默认给 NULL。
————————————————
版权声明:本文为CSDN博主「开着拖拉机回家」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35995514/article/details/108542495