2016-10-21 25 views
0

我必須使用Spark和Scala從Oracle導入表格到Hive,Oracle中的日期列看起來像這樣Oracle column date,我必須施放它轉換爲Hive中的dt_skey格式(YYYYMMDD)。 Hive中的表格格式爲Parquet。我怎樣才能做到這一點?我GOOGLE了很多,但我沒有找到任何解決方案。提前使用Spark配置單元在Hive中使用Spark配置單元格上下文格式的日期應該是YYYYMMDD(dt_skey)

+0

看來是輸入字符串格式,和你需要的輸出也字符串格式。 INPUT是一個大問題。沒有進一步的信息,16-09-15是什麼意思? 2015年9月16日或2016年9月15日?在Oracle表格中,你絕不應該把日期存儲爲字符串 - 這只是其中的一個原因。 – mathguy

+0

您是否嘗試過使用Sqoop? – tbone

+0

YY-MM-DD是oracle中的格式,oracle中的數據類型是DATE,輸入是DATE數據類型,我必須將其更改爲yyyymmdd格式,並且數據類型爲int。 – roh

回答

0

假設輸入數據

感謝的解釋是:YY-MM-DD(所以16-09-15意味着2016年09月15日),你可能需要一個轉變是這樣的:

select to_char(to_date (dt, 'yy-mm-dd'), 'yyyymmdd') from ... 

例子:

with my_table (dt) as (select '16-09-15' from dual) 
    -- this creates a test table my_table with column dt and value as shown 
select dt, 
     to_char(to_date (dt, 'yy-mm-dd'), 'yyyymmdd') as dt_skey 
from my_table 
; 


DT  DT_SKEY 
-------- -------- 
16-09-15 20160915 

你也可以直接操縱輸入字符串,但我強烈建議針對。在嘗試將它們推送到應用程序之前,翻譯日期和返回會在數據中捕獲無效的「日期」。另外,如果輸入字符串不一致(例如,如果允許類似16-9-15和16-09-15一樣),則字符串操作會變得複雜。

編輯:在對其原始問題的評論中,OP聲明dt在Oracle中已經是DATE格式。在這種情況下,它不應該被包裝在to_date()之內 - 這將導致錯誤。相反,解決的辦法是更簡單,所有需要的是

select to_char(dt, 'yyyymmdd') from ...

+0

感謝您的回答,我可以知道這是否會在火花中工作?我確信這將與獨家新聞一起工作。 – roh

+0

什麼是Spark?另外,如果你有權訪問它,你可以試試嗎?我不知道那是什麼。 – mathguy

相關問題