2016-10-03 5 views
-1

SQL Serverテーブルを寄木張りテーブルにマッピングする際にエラーが発生しました。 SQL Serverテーブルと対応する列データ型を一致させるために寄木張りテーブルを作成しました。寄木張りテーブルのtimestamp coulmnのsqoopインポートエラー

しかし、sqoopはタイムスタンプの列を長く推測します。寄木張りテーブルにデータをロードする際に問題が発生します。寄木細工へのデータのロードは成功したようですが、フェッチが問題です。

エラーメッセージ:あなたはすでに掲載以下の質問を見てすることができます

hive> select updated_at from bkfs.address_par1; 
OK 
Failed with exception java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.hive.serde2.io.TimestampWritable 
Time taken: 0.146 seconds 
+0

'--map-column-hive'タグで試したことがありますか? –

答えて

0

Sqoopの寄木細工のインポートはロングとして日付とタイムスタンプのOracleデータ型を解釈します。 Unixのepoc形式で日付を取得しようとしています。ですから、インポートは以下のように扱うことができます。

sqoop import \ 
--connect [connection string] \ 
--username [username] \ 
--password [password] \ 
--query "select to_char(date_col,'YYYY-MM-DD HH:mi:SS.SS') as date_col from test_table where \$CONDITIONS" \ 
--as-parquetfile \ 
-m 1 \ 
--delete-target-dir \ 
--target-dir /sample/dir/path/hive_table 
+0

「SQL Server」とは、OracleではなくMicrosoft SQL Server(MSSQL)を意味します。 MSSQLでは、timestampデータ型はrowversionのエイリアスであり、ヌル値の場合はバイナリ(8)またはvarbinary(8)です。これらは日付ではなく、変更追跡の目的で使用されます。列がタイムスタンプであるのか、おそらくそれがdatetimeであるのかはかなり疑問ですが。 Oracleがそれらを長い間マップしていれば、おそらくMSSQLのdatetimesも同じことをします。 – Davos

関連する問題