2016-10-27 64 views
1

当查询配置单元外部表时,Null值显示为'\ N'。Sqoop导入空字符串

下面是sqoop导入脚本:

sqoop进口-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 $用户--password $ PWD --query “

选择COL1,COL2,COL3从$ db.xxx

其中\ $条件” \ --null-string'\ N'--null-non-string'\ N'\ - 字段终止由'\ t'--num-mappers 6 \ - 分割作业号\ --delete-目标目录\ --target-DIR $ hdfs_loc

请告知应该做哪些改变了脚本,以便当外部蜂巢查询表空值显示为空值。

回答

4

Sathiyan-下面是我发现许多试验

  1. 后,如果没有sqoop导入过程中包括(空字符串)属性,那么在HDFS中,NULL被存储为[空白用于整数列]和[空白用于字符串列]。 2.如果在HDFS顶部的HIVE查询表,我们将看到[整数列NULL]和[空白对于字符串列]
  2. 如果sqoop导入过程中包含的(--null-string '\N')属性,则是空值存储为['\ N'为整数和字符串列]。
  3. 如果HDFS顶部的HIVE查询表,我们将看到[NULL整数和字符串列不'\ n']
+0

用'--null-string'\ N''向我提供空 - 非字符串值作为“空”写入HDFS,但是你的指导原则使它工作:)它们被正确读取为空值。 –

1

在你提到--null-string '\N' --null-non-string '\N这意味着你的sqoop脚本,

--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 
+0

是啊。这就是空值如何存储在HDFS中。但是,当查询配置单元表时,空值应该显示为实际的空值而不是'\\ N' – Bagavathi

+0

不,你在这里给出的字符串会存储在HDFS中,所以存储在HDFS中的数据将反映在配置单元中查询。 –

+0

是工作吗? –