2017-04-20 3 views
1

OracleからHiveへのデータを寄木張りとしてロードしようとしています。日付/タイムスタンプ列を含むテーブルをハイブにロードするたびに、これらの列は自動的にBIGINTに変換されます。 sqoopを使ってハイブにタイムスタンプ/日付形式を読み込むことはできますか?TIMESTAMP on HIVEテーブル

すでにハイブで表を作成してから、インパラを使用して寄木細工ファイルLOAD DATA INPATHを作成しようとしました。ところで、私はClouderaのクイックスタートのVMを使用してい


はまだ

" TIMESTAMPファイルXXは、列XX列の互換性のない寄せ木スキーマを持っている" というエラーで失敗しました。おかげ

答えて

2

の構成を使用してみてください。基礎となる値は、寄木張り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

あなたは寄木細工のRDBMSデータを変換するために、Sqoopを使用している場合は、DATE、DATETIME、またはTIMESTAMP列から任意の結果の値の解釈には注意がCloudera documentation:

から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

関連する問題