2016-10-27 63 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

是工作嗎? –