Sqoop向hive多分区表导入数据问题

x33g5p2x  于2020-11-24 发布在 Hive  
字(1.3k)|赞(0)|评价(0)|浏览(1831)

我使用sqoop导入数据到Hive多分区表时发生了问题,并找到了解决方法,分享给大家。

首先让我们创建hive分区表,并使用Sqoop导入数据:

sqoop  import --create-hive-table \
--connect jdbc:oracle:thin:@localhost:1521/hr.com   \
--username xx \
--password yyy  \
--table t_test_emp  \
--hive-import \
--columns EMPNO,ENAME,JOB \
--hive-partition-key DEPTNO \
--split-by DEPTNO \
--hive-table hr_hive.emps -m1

对应hive单分区表没有什么问题,接下来我们试试多分区表

sqoop  import --create-hive-table \
--connect jdbc:oracle:thin:@localhost:1521/hr.com  \
--username xxx \
--password yyy \
--table t_test_emp2  \
--hive-import \
--columns EMPNO,ENAME,JOB \
--hive-partition-key DEPTNO,JOB \
--split-by DEPTNO \
--hive-table hr_hive.emps -m1

这个时候就会发生错误,如何解决这个问题呢?我们可以使用Hcatlog。

HCatalog是Hadoop的表存储管理工具。它将Hive Metastore的表格数据公开给其他Hadoop应用程序。使得具有不同数据处理工具(Pig,MapReduce)的用户能够轻松将数据写入网格。它确保用户不必担心数据存储在何处或以何种格式存储。
主要步骤如下:

a)创建表(多级分区表)

sqoop import \
--connect jdbc:oracle:thin:@localhost:1521/hr.com \
--username xxx \
--password yyy \
--query  'select ENAME,JOB,MGR,HIREDATE,SAL,COMM from  t_test_emp  where  $CONDITIONS AND 1=2' \
--create-hcatalog-table \
--hcatalog-database hr_hive \
--hcatalog-table test_part3 \
--hcatalog-partition-keys  DEPTNO,EMPNO \
--hcatalog-partition-values   1,1  -m 1

b)将数据导入到之前创建的表中,例如test_part3

sqoop \
--connect jdbc:oracle:thin:@localhost:1521/hr.com \
--username xxx \
--password yyy \
--table t_test_emp \
--columns EMPNO,DEPTNO,ENAME,JOB \
--hcatalog-database dev_hce_cs \
--hcatalog-table test_part3 \
--split-by DEPTNO

这样就能解决Sqoop导入Hive多分区问题。

相关文章

最新文章

更多