我使用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多分区问题。
内容来源于网络,如有侵权,请联系作者删除!