2016-12-14 3 views
0

私はSqoopを使用してSQL ServerからHiveにデータをインポートし、その後、そのデータを別のSQL Serverにエクスポートします。 Sqoopのインポートは正常に動作し、VCHAR/NVARCHARデータ型をStringに変換します。SqoopハイブストリングデータタイプからMS SQL Serverタイプ

私の質問は、現在、ハイブは現在Stringとしてデータ型を保持しているので、Targetテーブルで定義するのに最適なカラムタイプは何ですか?私はもともとVARCHAR(100)としてターゲット表上で最も私の列を定義し、それが働いているが、それは輸出時に失敗した今、いくつかの文字列と私は得る:

SQL状態:22001、エラーコード:8152

"java.sql.BatchUpdateException:文字列またはバイナリデータが が切り捨てられます。"

サンプル文字列に失敗しました:

"HEALTH SITE PROVIDERS LLC"|" "|"3435673"|"UHGID0000547777"|"906225"|"\\N"|"\\N"|"\\N" 

は明らかに、このデータは、各列(で区切らコラム|)のために100よりもはるかに少ない文字を持っている、だから私はハイブ/ Sqoopは、この変換された方法として混乱しています文字列か、エクスポート中に変換をまったく行いませんか?

私はターゲットテーブルの列をNVARCHAR(max)として定義することを考えていましたが、これは少し極端ですか?また、私はいくつかの列のインデックスを持つ必要がありますとNVARCHAR(最大)はSQL Serverで許可されていません。

よろしく、

答えて

1

あなたは、ほとんどのデータはタイプVARCHAR(100)であるため。それを保存する必要はありませんハイブのストリングです。 VARCHARNVARCHARをHiveのVARCHARに保存することができます。

sqoop importコマンドで--map-column-hive <column-name,hive-type....>を使用してください。

例:

セイのCOL1はVARCHAR(100)あるとcol2は今、あなたは列VARCHAR/NVARCHARを持つSQL Serverテーブルに戻って、それをエクスポートすることができNVARCHAR(100)

--map-column-hive col1='varchar(100)',col2='varchar(100)',....


です。

関連する問題