web-dev-qa-db-ja.com

Sqoopインポートヌル文字列

Null値は、Hive外部テーブルが照会されると「\ N」として表示されます。

以下は、sqoopインポートスクリプトです。

sqoop import -libjars /usr/lib/sqoop/lib/tdgssconfig.jar,/usr/lib/sqoop/lib/terajdbc4.jar -Dmapred.job.queue.name = xxxxxx\--connect jdbc:teradata:// xxx .xx.xxx.xx/DATABASE = $ db、LOGMECH = LDAP --connection-manager org.Apache.sqoop.teradata.TeradataConnManager\--username $ user --password $ pwd --query "

$ db.xxxからcol1、col2、col3を選択します

ここで、\ $ CONDITIONS "\ --null-string '\ N'-null-non-string '\ N'\--fields-terminated-by '\ t'-num-mappers 6\--split-by job_number\--delete-target-dir\--target-dir $ hdfs_loc

外部Hiveテーブルが照会されたときにnullがnullとして表示されるように、スクリプトにどのような変更を加える必要があるかをアドバイスしてください。

5
Bagavathi

サシヤン-以下は多くの試行の後の私の発見です

  1. Sqoopのインポート中に(null文字列)プロパティが含まれていない場合、NULLはHDFSに[空白整数列の場合]および[空白文字列列の場合]として格納されます。 2. HDFSの上にあるHiveテーブルを照会すると、[[〜#〜] null [〜#〜]整数列の場合]および[空白の場合文字列列]
  2. (--null-string '\N')プロパティはsqoopインポート中に含まれ、NULLは['\ N'整数列と文字列列の両方]として格納されます。
  3. HDFSの上にあるHiveテーブルを照会すると、整数列と文字列列の両方で[[〜#〜] null [〜#〜]が表示されますが、'\ N'ではありません。 =]
7
Bagavathi

Sqoopスクリプトで、--null-string '\N' --null-non-string '\Nつまり、

--null-string '\N'  = The string to be written for a null value for string columns 

--null-non-string '\N' = The string to be written for a null value for non-string columns
4
Sathiyan S

テーブル内のいずれかの値がNULLであり、そのテーブルをsqoopする場合、sqoopはNULL値を文字列nullとしてHDFSにインポートします。したがって、Hiveを使用したクエリでNull条件を使用すると問題が発生します

次に例を示します。–mysqlテーブルの「cities」にNULL値を挿入します。

mysql> insert into cities values(6,7,NULL);

デフォルトでは、SqoopはNULL値を文字列nullとしてHDFSにインポートします。

Sqoopして、何が起こるかを見てみましょう。–

sqoop import –connect jdbc:mysql://localhost:3306/sqoop –username sqoop -P –table cities –Hive-import –Hive-overwrite –Hive-table vikas.cities -m 1

http://deltafrog.com/how-to-handle-null-value-during-sqoop-import-export/

2
Sumit Kumar