Parquet表中timestamp coulmn的sqoop导入错误

wlp8pajw  于 2021-06-03  发布在  Sqoop
关注(0)|答案(2)|浏览(293)

将sql server表Map到parquet表时出错。我制作了parquet表来匹配sqlserver表和相应的列数据类型。
但sqoop将timestamp列推断为long。这会在将数据加载到Parquet表时产生问题。将数据加载到parquet似乎是成功的,但获取是一个问题。
错误消息:

hive> select updated_at from bkfs.address_par1;
OK
Failed with exception java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.hive.serde2.io.TimestampWritable
Time taken: 0.146 seconds
b91juud3

b91juud31#

sqoop parquet import将日期和时间戳oracle数据类型解释为long。它试图以unix epoch格式获取日期。所以,导入可以如下处理,

sqoop import \
--connect [connection string] \
--username [username] \
--password [password] \
--query "select to_char(date_col,'YYYY-MM-DD HH:mi:SS.SS') as date_col from test_table where \$CONDITIONS" \
--as-parquetfile \
-m 1 \
--delete-target-dir \
--target-dir /sample/dir/path/hive_table
km0tfn4u

km0tfn4u2#

你可以看看下面已经贴出来的问题,
{sqoop函数--map column hive'被忽略}

相关问题