2017-04-23 11 views
-1

Big Data/Hadoopエコシステムを初めて使用し、日付が常に技術間で標準的な方法で処理されるとは限らないことに気付きました。私はOracleからのデータをAvroとParquetファイル形式のSqoopを使ってHDFSのHiveテーブルに取り込む予定です。ハイブは私の日付をBIGINT値にインポートし続けます。私はTIMESTAMPSを好むでしょう。私は "--map-column-hive"オーバーライドを使ってみました...しかしそれでも動作しません。Hadoopの日付の処理

このユースケースの日付を処理する最適な方法をお探しの場合は、こちらをご覧ください。

+0

ですStackOverflowは、問題に関するアイデアや提案を収集するための適切なサイトではありません。問題を具体的な問題で再提示して、これまでに試したこととプロセスの中でどこにいらっしゃったのかを示してください。 –

+0

[Hadoop - テーブル作成時の日付の書式設定]の可能な複製(http://stackoverflow.com/questions/41400094/hadoop-formatting-dates-when-creating-tables) – Pushkr

答えて

0

Parquet File Format

あなたは寄木細工のRDBMSデータを変換するために、Sqoopを使用している場合は、DATE、DATETIME、またはTIMESTAMP列から任意の結果の値の解釈には注意してください。基礎となる値は、寄木張りINT64型として表され、ImpalaテーブルのBIGINTとして表されます。 Parquetの値はミリ秒単位の時間を表し、ImpalaはBIGINTを秒単位の時間として解釈します。したがって、Sqoopからこの方法でインポートされたParquetテーブルにBIGINTカラムがある場合は、TIMESTAMPタイプとして解釈するときに値を1000で割ります。

Avro File Format

現在、アブロテーブルは、TIMESTAMP列を含めることはできません。回避策として、日付と時刻の値をAvroテーブルに格納する必要がある場合は、値のSTRING表現を使用したり、UNIX_TIMESTAMP()関数を使用して値をBIGINTに変換したり、 EXTRACT()関数

このようなHiveクエリを使用して、目的のTIMESTAMP形式で結果を取得することもできます。

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

他の回避策は、タイムスタンプ形式に列をキャストすることができますsqoopコマンドで--queryを使用してデータをインポートすることです。

--query 'SELECT CAST (INSERTION_DATE AS TIMESTAMP) FROM tablename WHERE $CONDITIONS' 

あなたのSELECTクエリが少し長くなる場合は、コマンドライン呼び出しの長さを短くするために、構成ファイルを使用することができます。ここでは、reference

関連する問題