2016-10-21 6 views
0

である必要があります。Oracleの日付列はSparkとScalaを使用してHiveにインポートする必要があります。 Hiveのdt_skey形式(YYYYMMDD)に変換します。 Hiveのテーブル形式はParquetです。どうやってやるの?私はそれをたくさんのグーグルで見つけましたが、解決策は見つかりませんでした。事前にハイブでスパーク・ハイブ・コンテキスト・フォーマットを使用してOracleからハイブにインポートする日付はYYYYMMDD(dt_skey)

おかげで

+0

です。これは、入力が文字列の形式であるようだ、とあなたは、文字列の形式でも出力を必要としています。 INPUTは大きな問題です。それ以上の情報がない場合、16-09-15は何を意味しますか? 2015年9月16日、または2016年9月15日? Oracleの表では、日付を文字列として決して格納しないでください。これは多くの理由の1つに過ぎません。 – mathguy

+0

Sqoopを使ってみましたか? – tbone

+0

YY-MM-DDはoracleの形式で、oracleのデータ型はDATE、入力はDATEデータ型です。これをyyyymmdd形式に変更する必要があり、そのデータ型はハイブにint型になります。 – roh

答えて

0

あなたは、おそらくこのような変換を必要とする(そう16-09-15は2016年、月09、15日を意味します)、あなたの入力データはYY-MM-DDを意味することになっていると仮定すると:

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 

また、直接入力文字列を操作することができますが、私は強く反対をお勧めします。 dateとbackに翻訳すると、データをアプリケーションにプッシュしようとする前に無効な "日付"がキャッチされます。また、入力文字列が矛盾していると、文字列の操作が複雑になります(たとえば、16-9-15のようなものが16-09-15と一緒に使用できる場合など)。

EDIT:元の質問に対するコメントで、OPは、dtがすでにOracleではDATE形式であると述べていました。その場合、それはエラーにつながるto_date()の中にラップするべきではありません。むしろ、溶液は全てが必要とされ、はるかに簡単です

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

+0

答えがありがとう、私はこれが火花で動作するかどうかを知ることができますか?私はそれがスクープで動作すると確信しています。 – roh

+0

スパークとは何ですか?また、あなたはそれにアクセスできる場合は試してみることができますか?私はそれが何であるか分かりません。 – mathguy