Sqoop拉取数据到hive数据库的Parquet格式分区表

Sqoop拉取数据到hive数据库的Parquet格式分区表

问题

在使用sqoop拉取数据到hive数据库时,如果hive中的表是parquet格式的分区表,那么虽然显示拉取数据成功,但查询数据时会出问题

sqoop拉取语句

/opt/cloudera/parcels/CDH/bin/sqoop import  \
--username xxxx \
--password 'xxx' \
--connect "jdbc:oracle:thin:@255.255.255.255:1521/db"  \
--bindir /var/log/sqoop_bin/ \
--table oracle.tablename \
--hive-database hive_dbname \
--hive-table hive_tablename \
--as-parquetfile \
--fields-terminated-by '\0001' \
--lines-terminated-by '\n' \
--hive-drop-import-delims \
--null-string '\\N' \
--null-non-string '\\N' \
-m 1

查询结果

ERROR: File 'hdfs://nameservice1/user/hive/warehouse/xxxxxx/part-m-00000' has an invalid version number: N1

This could be due to stale metadata. Try running "refresh xxxxx".

解决

使用Hcatalog参数拉取数据

Hcatalog

HCatalog是一个用于Hadoop的表和存储管理服务,它使用户使用不同的数据处理工具Pig、MapReduce和Hive时更容易读写数据。HCatalog的“表抽象”向用户展示了Hadoop分布式文件系统(HDFS)中的数据相关的视图,并确保用户无需担心他们的数据被存储在哪里或以什么格式存储,例如:RCFile格式,文本文件,或SequenceFiles。

HCatalog支持以任何可以编写SerDe(序列化器-反序列化器)的格式读写文件。默认情况下,HCatalog支持RCFile、CSV、JSON和SequenceFile格式。要使用一个自定义的格式,你必须提供InputFormat和OutputFormat以及SerDe。

sqoop使用Hcatalog参数

/opt/cloudera/parcels/CDH/bin/sqoop import  \
--username xxxx \
--password 'xxx' \
--connect "jdbc:oracle:thin:@255.255.255.255:1521/db"  \
--bindir /var/log/sqoop_bin/ \
--table oracle.tablename \
--hcatalog-database hive_dbname \
--hcatalog-table hive_tablename \
--hcatalog-partition-keys dt \
--hcatalog-partition-values '20220114' \
--fields-terminated-by '\0001' \
--lines-terminated-by '\n' \
--hive-drop-import-delims \
--null-string '\\N' \
--null-non-string '\\N' \
-m 1

参数解释

--table                      源库中的表名
--hcatalog-database          Hive中的库名
--hcatalog-table             Hive库中的表名,需要抽取的表
--hcatalog-partition-keys    分区字段
--hcatalog-partition-values  分区值
--fields-terminated-by       字段间的分隔符
--lines-terminated-by        表示行尾的字符
--hive-drop-import-delims    当导入到hive中时,去掉字符串字段中的'\n''\r''\01'
--null-string                指定当字符串字段为空时的字符
--null-non-string            指定当非字符串字段为空时的字符
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值