sqoop配置单元表导入,表数据类型与数据库不匹配

v1uwarro  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(365)

使用sqoop将数据从oracle导入到hive,虽然工作正常,但它在hive中创建的表只有两种数据类型string和double。我想使用时间戳作为某些列的数据类型。我该怎么做呢。

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

iyfamqjs1#

除上述答案外,我们可能还必须观察错误何时出现,例如。
在我的例子中,有两种类型的数据列导致了错误:json和binary
对于json列,在导入过程的最开始执行java类时出现错误:

/04/19 09:37:58 ERROR orm.ClassWriter: Cannot resolve SQL type

对于二进制列,导入到配置单元表时抛出错误(在数据导入并放入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

取决于故障。

4ioopgfo

4ioopgfo2#

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

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

r9f1avp53#

sqoop-2103/sqoop1.4.5中添加了一个新特性,允许您使用map column hive参数调用十进制精度。例子:

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

此语法将字段定义为 DECIMAL(20,2) . 这个 %2C 用作逗号,如果从bashshell提交,则参数必须用单引号括起来。
我试着不加修改地使用十进制,结果得到了一个好结果 Decimal(10,0) 作为默认值。

相关问题