使用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/
答案 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)
作为默认值。