2016-05-06 18 views
1

に変換私は、Sqoopマニュアルでこれを気づいた:負荷テーブル列

24.5。ハイブのスキーマ定義

ハイブユーザは、SQLタイプとハイブタイプの間に1対1のマッピングがないことに注意してください。通常、直接マッピングを持たないSQL型(DATE、TIME、およびTIMESTAMPなど)は、HiveのSTRINGに強制的に変換されます。 NUMERICおよびDECIMAL SQL型はDOUBLEに変換されます。このような場合、Sqoopはログメッセージに警告メッセージを出して精度の低下を通知します。

そして私はSqoopが列を指定することができます知っている -

  • --map-column-java
  • --map-column-hive

を使用して型マッピングしかし、私の場合は、私はRDBMSから、マッピングを入力するための一般的なタイプが必要ですdateまたはdatetimeを必要とするHIVE型マッピングに型を渡し、日付またはタイムスタンプに変換します。

解決策はありますか?

+0

に**ハイブ内とRDBMSデータベースの**同じではありません日付とタイムスタンプの書式を日付に変換します寄木細工。だから、あなたはそれのための一般的な解決策を作ることはできません。各RDBMSに対して '--map-column-hive'を使って手動で変換する必要があります –

+0

HiveとRDBMSの日付とタイムスタンプの違いと一般的な解決策がない理由について詳しく説明できますか? – cdhit

答えて

0

Sqoop + ORC + hcatalogは正しいマッピングに役立ちます。 Sqoop +は、それが文字列

mysqlHostname=ip-172-31-2-124.us-west-2.compute.internal       
mysqlDBName=employees                
mysqlUsername=hive                 


sqoop import \ 
     --connect jdbc:mysql://$mysqlHostname/$mysqlDBName \ 
     --table salaries \ 
     --username $mysqlUsername \ 
     -P \ 
     --hcatalog-table orc_salaries \ 
     --create-hcatalog-table \ 
     --map-column-hive from_date=date,to_date=date\ 
     --hcatalog-storage-stanza 'stored as orcfile tblproperties ("orc.compress"="ZLIB")'