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として表示されるように、スクリプトにどのような変更を加える必要があるかをアドバイスしてください。
サシヤン-以下は多くの試行の後の私の発見です
(--null-string '\N')
プロパティはsqoopインポート中に含まれ、NULLは['\ N'整数列と文字列列の両方]として格納されます。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
テーブル内のいずれかの値が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/