Sqoop Hive表导入,Table dataType与数据库不匹配

时间:2014-01-24 04:46:56

标签: hadoop hive hdfs sqoop

使用Sqoop将数据从oracle导入到hive,它的工作正常,但它在hive中只创建了2个dataTypes String和Double。我想使用timeStamp作为某些列的数据类型。 我怎么能这样做。

bin/sqoop import --table TEST_TABLE --connect jdbc:oracle:thin:@HOST:PORT:orcl --username USER1 -password password -hive-import --hive-home /user/lib/Hive/

3 个答案:

答案 0 :(得分:8)

除了上述答案之外,我们还可能需要观察错误何时发生,例如

在我的情况下,我有两种类型的数据列导致错误:json和binary

对于json列,在执行Java类时,在导入过程的最开始时出现错误:

/04/19 09:37:58 ERROR orm.ClassWriter: Cannot resolve SQL type
对于二进制列

,导入到hive表时抛出错误(导入数据并将其放入HDFS文件后)

16/04/19 09:51:22 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Hive does not support the SQL type for column featured_binary
  

为了摆脱这两个错误,我必须提供以下选项

--map-column-java column1_json=String,column2_json=String,featured_binary=String --map-column-hive column1_json=STRING,column2_json=STRING,featured_binary=STRING

总之,我们可能必须提供

--map-column-java 

--map-column-hive

取决于失败。

答案 1 :(得分:5)

您可以使用参数--map-column-hive覆盖默认映射。此参数需要以 = 分隔的以逗号分隔的键值对列表,以指定哪个列应与Hive中的哪个类型匹配。

sqoop import \
  ...
  --hive-import \
  --map-column-hive id=STRING,price=DECIMAL

答案 2 :(得分:3)

使用sqoop-2103 / sqoop 1.4.5添加了一个新功能,可以使用map-column-hive参数调出小数精度。例如:

--map-column-hive 'TESTDOLLAR_AMT=DECIMAL(20%2C2)'

此语法将字段定义为DECIMAL(20,2)%2C用作逗号,如果从bash shell提交,则参数需要用单引号。

我尝试使用Decimal而不做任何修改,我得到了一个Decimal(10,0)作为默认值。