2017-04-20 50 views
1

我試圖從Oracle加載數據到Hive作爲實木複合地板。每次我加載一個包含日期/時間戳列的表格來配置單元時,它都會自動將這些列轉換爲BIGINT。是可以加載時間戳/日期格式配置單元使用sqoop和作爲parquet文件?HIVE表上的TIMESTAMP

已經嘗試在配置單元中首先創建表,然後使用impala來LOAD DATA INPATH實木複合地板文件。
還是失敗,錯誤

「文件XX沒有列XX列不兼容的架構實木複合地板: TIMESTAMP」

順便說一句,我使用Cloudera的快速啓動虛擬機。由於

回答

2

的配置從Cloudera documentation:

,小心從DATE,DATETIME,或TIMESTAMP列解釋由此產生的任何值。基礎值表示爲Parquet INT64類型,在Impala表中表示爲BIGINT。 Parquet值表示以毫秒爲單位的時間,而Impala將BIGINT解釋爲以秒爲單位的時間。因此,如果在從Sqoop以這種方式導入的Parquet表中有BIGINT列,請在解釋爲TIMESTAMP類型時將值除以1000。

或者,您也可以使用您的Hive查詢來獲得所需的TIMESTAMP格式的結果。

FROM_UNIXTIME(CAST(SUBSTR(timestamp_column, 1,10) AS INT)) AS timestamp_column; 
+0

謝謝,似乎沒有辦法,我可以導入日期/時間戳格式從實木複合地板。 – askdk

+0

此問題與現在的鑲木地板文件有關。您可以使用ORC格式導入帶有選項'--map-column-hive = TIMESTAMP'的時間戳。 ORC文件格式有更好的表現然後實木複合地板。 –

+0

@SandeepSingh是否直接導入ORC格式的sqoop導入?我認爲我們必須首先導入文本,然後創建蜂巢表以ORC格式存儲? –

0

嘗試,如果你使用Sqoop到RDBMS的數據轉換爲實木複合地板使用sqoop

--map-column-hive 
<cols_name>=TIMESTAMP 
+0

已經嘗試過,但似乎一旦我們使用sqoop忽略配置--as-parquetfile選項 – askdk

+0

我找不到任何選項爲「--as-parquetfile」 只有3個類型: ' - -as-avrodatafile \t進口數據阿夫羅數據文件 --as-sequencefile \t進口數據SequenceFiles --as-文本文件\t進口數據爲純文本(默認)' https://sqoop.apache.org/ docs/1.4.1-incubating/SqoopUserGuide.html –

+0

試試這個:https://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_microsoft_sql_connector – askdk