である必要があります。Oracleの日付列はSparkとScalaを使用してHiveにインポートする必要があります。 Hiveのdt_skey形式(YYYYMMDD)に変換します。 Hiveのテーブル形式はParquetです。どうやってやるの?私はそれをたくさんのグーグルで見つけましたが、解決策は見つかりませんでした。事前にハイブでスパーク・ハイブ・コンテキスト・フォーマットを使用してOracleからハイブにインポートする日付はYYYYMMDD(dt_skey)
おかげで
である必要があります。Oracleの日付列はSparkとScalaを使用してHiveにインポートする必要があります。 Hiveのdt_skey形式(YYYYMMDD)に変換します。 Hiveのテーブル形式はParquetです。どうやってやるの?私はそれをたくさんのグーグルで見つけましたが、解決策は見つかりませんでした。事前にハイブでスパーク・ハイブ・コンテキスト・フォーマットを使用してOracleからハイブにインポートする日付はYYYYMMDD(dt_skey)
おかげで
あなたは、おそらくこのような変換を必要とする(そう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 ...
です。これは、入力が文字列の形式であるようだ、とあなたは、文字列の形式でも出力を必要としています。 INPUTは大きな問題です。それ以上の情報がない場合、16-09-15は何を意味しますか? 2015年9月16日、または2016年9月15日? Oracleの表では、日付を文字列として決して格納しないでください。これは多くの理由の1つに過ぎません。 – mathguy
Sqoopを使ってみましたか? – tbone
YY-MM-DDはoracleの形式で、oracleのデータ型はDATE、入力はDATEデータ型です。これをyyyymmdd形式に変更する必要があり、そのデータ型はハイブにint型になります。 – roh