10

ハイブクエリがあります:

insert override directory /x
select ...

次に、sqoop でデータをエクスポートしようとしています

sqoop export --connect jdbc:mysql://mysqlm/site --username site --password site --table x_data --export-dir /x  --input-fields-terminated-by 0x01 --lines-terminated-by '\n'

しかし、これは区切り文字に従ってフィールドを解析できないようです --input-fields-terminated-by 0x01部分が期待どおりに機能しないと思いますか?

クエリ結果を含む追加のテーブルをハイブに作成したくありません。

スタックトレース:

 2013-09-24 05:39:21,705 ERROR org.apache.sqoop.mapreduce.TextExportMapper: Exception: 
 java.lang.NumberFormatException: For input string: "9-2"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:458)
 ...

出力の vi ビュー

16-09-2013 23^A1182^A-1^APub_X^A21782^AIT^A1^A0^A0^A0^A0^A0.0^A0.0^A0.0
16-09-2013 23^A1182^A6975^ASoMo Audience  Corp^A2336143^AUS^A1^A1^A0^A0^A0^A0.2^A0.0^A0.0
16-09-2013 23^A1183^A-1^APub_UK, Inc.^A1564001^AGB^A1^A0^A0^A0^A0^A0.0^A0.0^A0.0
17-09-2013 00^A1120^A-1^APub_US^A911^A--^A181^A0^A0^A0^A0^A0.0^A0.0^A0.0
4

4 に答える 4

4

使用する

--input-fields-terminated-by '\001' --lines-terminated-by '\n'

sqoop export コマンドのフラグがうまくいくようです。

したがって、あなたの例では、完全なコマンドは次のようになります。

sqoop export --connect jdbc:mysql://mysqlm/site --username site --password site --table x_data --export-dir /x  --input-fields-terminated-by '\001' --lines-terminated-by '\n'
于 2015-03-01T23:53:28.577 に答える
0

sqoop は区切り文字として '0' を使用しているようです。エラーが発生する理由:- mysql テーブルの最初の列が varchar で、2 番目の列が数値である可能性があります。以下の文字列のとおり:-

16- 0 9-2 0 13 23^A1182^A-1^APub_X^A21782^AIT^A1^A0^A0^A0^A0^A0.0^A0.0^A0.0

sqoop によって解析された最初の列は:- 16- で、2 番目の列は:- 9-2です。

そのため、区切り文字を引用符 ('0x01') で指定するか、

(常に簡単で、より適切に制御できます) hive create tableコマンドを次のように使用します。

于 2013-09-28T16:27:10.183 に答える