Bucketed Hive ORC 表的 sqoop 导入失败
sqoop Import Failing for Bucketed Hive ORC tables
我使用以下 DDL 在 Hive 中创建了 ORC Bucketed table:
create table Employee( EmpID STRING , EmpName STRING)
clustered by (EmpID) into 10 buckets
stored as orc
TBLPROPERTIES('transactional'='true');
然后 运行 Sqoop 导入:
sqoop import --verbose \
--connect 'RDBMS_JDBC_URL' \
--driver JDBC_DRIVER \
--table Employee \
--null-string '\N' \
--null-non-string '\N' \
--username USER \
--password PASSWPRD \
--hcatalog-database hive_test_trans \
--hcatalog-table Employee \
--hcatalog-storage-stanza \
"storedas orc" -m 1
失败并出现以下异常:
22/12/17 03:28:59 ERROR
tool.ImportTool: Encountered IOException running import job:
org.apache.hive.hcatalog.common.HCatException : 2016 : **Error
operation not supported : Store into a partition with bucket
definition from Pig/Mapreduce is not supported**
at org.apache.hive.hcatalog.mapreduce.HCatOutputFormat.setOutput(HCatOutputFormat.java:109)
at org.apache.hive.hcatalog.mapreduce.HCatOutputFormat.setOutput(HCatOutputFormat.java:70)
at org.apache.sqoop.mapreduce.hcat.SqoopHCatUtilities.configureHCat(SqoopHCatUtilities.java:339)
at org.apache.sqoop.mapreduce.hcat.SqoopHCatUtilities.configureImportOutputFormat(SqoopHCatUtilities.java:753)
at org.apache.sqoop.mapreduce.ImportJobBase.configureOutputFormat(ImportJobBase.java:98)
at org.apache.sqoop.mapreduce.ImportJobBase.runImport(ImportJobBase.java:240)
at org.apache.sqoop.manager.SqlManager.importTable(SqlManager.java:665)
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:497)
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:601)
我们可以通过创建临时 table 来解决这个问题,但我不想再添加一个步骤。
我可以不使用临时 table 直接将数据从 Oracle 导入到 ORC Bucketed table 吗?
Hive 仍然不支持将数据导入到事务性 Hive tables,您必须有一个解决方法。
Here is the link 用于修复它的公开 JIRA 票证。在此之前,您必须执行一些中间操作才能将数据写入 Hive。您在问题中提到的临时 table 选项是一个很好的开始选项。
我使用以下 DDL 在 Hive 中创建了 ORC Bucketed table:
create table Employee( EmpID STRING , EmpName STRING)
clustered by (EmpID) into 10 buckets
stored as orc
TBLPROPERTIES('transactional'='true');
然后 运行 Sqoop 导入:
sqoop import --verbose \
--connect 'RDBMS_JDBC_URL' \
--driver JDBC_DRIVER \
--table Employee \
--null-string '\N' \
--null-non-string '\N' \
--username USER \
--password PASSWPRD \
--hcatalog-database hive_test_trans \
--hcatalog-table Employee \
--hcatalog-storage-stanza \
"storedas orc" -m 1
失败并出现以下异常:
22/12/17 03:28:59 ERROR
tool.ImportTool: Encountered IOException running import job:
org.apache.hive.hcatalog.common.HCatException : 2016 : **Error
operation not supported : Store into a partition with bucket
definition from Pig/Mapreduce is not supported**
at org.apache.hive.hcatalog.mapreduce.HCatOutputFormat.setOutput(HCatOutputFormat.java:109)
at org.apache.hive.hcatalog.mapreduce.HCatOutputFormat.setOutput(HCatOutputFormat.java:70)
at org.apache.sqoop.mapreduce.hcat.SqoopHCatUtilities.configureHCat(SqoopHCatUtilities.java:339)
at org.apache.sqoop.mapreduce.hcat.SqoopHCatUtilities.configureImportOutputFormat(SqoopHCatUtilities.java:753)
at org.apache.sqoop.mapreduce.ImportJobBase.configureOutputFormat(ImportJobBase.java:98)
at org.apache.sqoop.mapreduce.ImportJobBase.runImport(ImportJobBase.java:240)
at org.apache.sqoop.manager.SqlManager.importTable(SqlManager.java:665)
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:497)
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:601)
我们可以通过创建临时 table 来解决这个问题,但我不想再添加一个步骤。
我可以不使用临时 table 直接将数据从 Oracle 导入到 ORC Bucketed table 吗?
Hive 仍然不支持将数据导入到事务性 Hive tables,您必须有一个解决方法。
Here is the link 用于修复它的公开 JIRA 票证。在此之前,您必须执行一些中间操作才能将数据写入 Hive。您在问题中提到的临时 table 选项是一个很好的开始选项。