Sqoop导入Null字符串

时间:2016-10-27 17:01:02

标签: hadoop null hive teradata sqoop

当查询配置单元外部表时,Null值显示为'\ 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

请告知应对脚本进行哪些更改,以便在查询外部配置单元表时将空值显示为空。

4 个答案:

答案 0 :(得分:7)

Sathiyan-以下是经过多次试验后的调查结果

  1. 如果在sqoop导入期间未包含(null字符串)属性,则在HDFS中将NULL存储为[空白用于整数列]和[空白用于字符串列] 。 2.如果查询HDFS顶部的HIVE表,我们会看到[ NULL 表示整数列]和[空白表示字符串列]
  2. 如果在sqoop导入期间包含(--null-string '\N')属性,则NULL将存储为整数和字符串列的[' \ N' ]。
  3. 如果查询HDFS顶部的HIVE表,我们会看到整数和字符串列的[ NULL > ' \ N' ]

答案 1 :(得分:2)

在您的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

答案 2 :(得分:1)

如果表中的任何值为NULL,而我们要对该表进行sqoop,则sqoop将在HDFS中将NULL值作为字符串( SELECT 'choose' label, '' id FROM table_events LIMIT 1 ) UNION ( SELECT CONCAT( title_clang_1, ' - ', street, ' ', zip, ' ', district, ' ', town, ' ', additional ) label, id FROM table_events WHERE offline IS NULL || offline = '|0|' ) 导入。因此,使用蜂巢在查询中使用空条件会产生问题

例如:–将NULL值插入mysql表“ city”。

null

默认情况下,Sqoop会将NULL值作为字符串mysql> insert into cities values(6,7,NULL); 导入HDFS中。

让我们蹲下来看看会发生什么:–

null

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

答案 3 :(得分:0)

在 sqoop 导入命令中删除 --null-string 和 --null-non-string '\N' 选项。 默认情况下,系统将为字符串和非字符串值分配 null。

我尝试过 --null-string '\N' 和 --null-string '' 和其他选项,但得到空白和不同的问题。