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

anu*_*anu 7 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/
Run Code Online (Sandbox Code Playgroud)

deb*_*eba 8

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

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

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

/04/19 09:37:58 ERROR orm.ClassWriter: Cannot resolve SQL type
Run Code Online (Sandbox Code Playgroud)

对于二进制列,导入到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
Run Code Online (Sandbox Code Playgroud)

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

--map-column-java column1_json=String,column2_json=String,featured_binary=String --map-column-hive column1_json=STRING,column2_json=STRING,featured_binary=STRING
Run Code Online (Sandbox Code Playgroud)

总之,我们可能必须提供

--map-column-java 
Run Code Online (Sandbox Code Playgroud)

要么

--map-column-hive
Run Code Online (Sandbox Code Playgroud)

取决于失败.


Chr*_*tta 5

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

sqoop import \
  ...
  --hive-import \
  --map-column-hive id=STRING,price=DECIMAL
Run Code Online (Sandbox Code Playgroud)


小智 5

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

--map-column-hive 'TESTDOLLAR_AMT=DECIMAL(20%2C2)'
Run Code Online (Sandbox Code Playgroud)

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

我尝试不加修改地使用 Decimal,我得到了Decimal(10,0)一个默认值。

  • “在 map-column-hive 选项中定义 Decimal(n,p) 数据类型”在 1.4.7 版中可用 (3认同)