2016-10-03 38 views
-1

我在將SQL Server表映射到實木複合地板表時出現錯誤。我已經制作了鑲木桌來使SQL Server表與相應的列數據類型相匹配。sqoop導入錯誤的時間戳coulmn在實木複合地板

但sqoop推斷時間戳列一樣長。這在將數據加載到鑲木地板時產生問題。將數據加載到實木複合地板似乎很成功,但提取是一個問題。

錯誤消息:

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 
+0

你用'--map-column-hive'標籤試過了嗎? –

回答

0

Sqoop實木複合地板進口日期解釋和時間戳甲骨文的數據類型爲Long。哪個試圖以unix epoc格式獲取日期。所以,進口可以像下面這樣處理,

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 
+0

這個問題提到「SQL Server」,我認爲它是指Microsoft SQL Server(MSSQL)而不是Oracle。在MSSQL中,timestamp數據類型是rowversion的別名,如果爲空,則可以是binary(8)或varbinary(8)。這些不是日期,它們用於更改跟蹤目的。雖然這個問題對於列是時間戳還是日期時間很模糊。如果Oracle將這些時間映射到很長時間,那麼從MSSQL的日期時間也可以做到這一點 – Davos