1. 程式人生 > >hive中null和'','NULL'

hive中null和'','NULL'

說下hive中的null。
employee表
hive>desc employee;
empid   string
deptid   string
salary   string
查詢employee
hive>select * from employee
1 NULL NULL
hive 中null實際在HDFS中預設儲存為'\N'
即employee中的資料在HDFS中為
1 \N \N
驗證,插入'\N'
hive>insert into table employee select '2','\\N','\\N' from employee limit 1;
其中多一個斜槓是轉義的作用
查詢employee
hive>select * from employee
1 NULL NULL
2 NULL NULL
此時hive中與null有關的函式,如nvl,coalesce,is null等判斷是否為null是為true
hive>select nvl(empid,'A'),nvl(deptid,'B'),nvl(salary,'C') from employee
1 B C
2 B C
但是null或NULL和''會被hive當做字串處理。
hive>insert into table employee select '3','','' from employee limit 1;
查詢:
hive>select * from employee;
1 NULL NULL
2 NULL NULL
3    
hive>insert into table employee select '4','null','NULL' from employee limit 1;
查詢
hive>select * from employee;
1 NULL NULL
2 NULL NULL
3    
4 null NULL
注意:1,2同一行的NULL與4行的NULL或null不一樣。4行的NULL或null為字串
此時hive中與null有關的函式,如nvl,coalesce,is null等判斷''和null(字串)或NULL(字串)是否為null是為false
hive> select empid ,nvl(deptid,'E'),nvl(salary,'F') from employee;
1 E F
2 E F
3    
4 null NULL
hive>select * from employee where deptid='';
3    
hive>select * from employee where deptid='null' and salary ='NULL';
4 null NULL
hive>select * from employee where deptid is null;
1 NULL NULL
2 NULL NULL
可以通過
ALTER TABLE table_name SET SERDEPROPERTIES('serialization.null.format' = 定義描述符);
修改空值描述符
如果將''定義為NULL
ALTER TABLE employee SET SERDEPROPERTIES('serialization.null.format' = '');
查詢employee
hive>select * from employee;
1 \N \N
2 \N \N
3 NULL NULL
4 null NULL
和前面的select比較發現''變成了NULL,而\N露出了真面目,4行的NULL或null為字串沒變化
驗證,將''插入到emloyee
hive> insert into table employee select '5','','' from employee limit 1;
查詢
hive>select * from employee;
1 \N \N
2 \N \N
3 NULL NULL
4 null NULL
5 NULL NULL
注意:3,5同一行的NULL與4行的NULL或null不一樣。4行的NULL或null為字串
此時HDFS中如此儲存
1 \N \N
2 \N \N
3  
4 null NULL
5  
此時
hive> select empid ,nvl(deptid,'E'),nvl(salary,'F') from employee;
1 \N \N
2 \N \N
3 E F
4 null NULL
5 E F
總結hive中null的定義的意義在於:oracle資料匯出後原表中的null會變成'',然後匯入到hive中也變成了''。但是hive中關於NULL的一些函式如nvl,coalesce和is null卻無法使用,因為hive預設\N才代表NULL。在hive中通過
ALTER TABLE SET SERDEPROPERTIES('serialization.null.format' = '');修改''代表NULL,改造儲存過程中就不需要改nvl等語句。

相關推薦

hiveifcoalesce 去除null值,case when

ref http://blog.csdn.net/mtj66/article/details/52629876 ###################################### if usage select * from (select *,if (b.nam

hivenull'','NULL'

說下hive中的null。 employee表 hive>desc employee; empid   string deptid   string salary   string 查詢employee hive>select * from employee 1

hive使用is nullis not null問題

   在使用HQL時如果有空值喜歡追隨SQL99的規範使用IS NULL 和IS NOT NULL來判斷,這個是一般的思維習慣。但是在hive中跟傳統的資料庫不一樣的地方在於NULL的解讀。 在傳統資料庫中欄位沒有值或者為空即表示為NULL,但是在hive中預設的NULL值

jsundefinednull的區別

常常 html exist tex 輸出 output 為什麽 hive 存在 轉自:http://www.cnblogs.com/eastday/archive/2010/03/03/1677324.html 在JavaScript中存在這樣兩種原始類型:Null與Und

JavaScriptUndefined Null的區別

efi null undefine java AR javascrip IT 例如 style Undefined 這個值表示變量不含有值。 可以通過將變量的值設置為 null 來清空變量。 例如: <script> var person; var car="V

js 0 null 、"" 的邏輯關係

在做字串非空判斷時,無意發現一個問題,記錄下以便以後回顧。 問題描述:非空判斷,只是校驗傳值的內容是否為""、null 、undefined。當變數 賦值的字串內容為 0,此時做非空校驗竟然返回true,說當前變數值為空。 程式碼如下: 1 //模擬賦值 0 2 var str = "0";

【知識筆記】jsundefinednull的區別聯絡

在JavaScript中存在這樣兩種原始型別:Null與Undefined。這兩種型別常常會使JavaScript的開發人員產生疑惑,在什麼時候是Null,什麼時候又是Undefined?Undefined型別只有一個值,即undefined。當宣告的變數還未被初始化時,變數的預設值為undefined。Nu

js 0 null 、"" 的邏輯關係

在做字串非空判斷時,無意發現一個問題,記錄下以便以後回顧。 問題描述:非空判斷,只是校驗傳值的內容是否為""、null 、undefined。當變數 賦值的字串內容為 0,此時做非空校驗竟然返回true,說當前變數值為空。 程式碼如下: 1 //模擬賦值 0 2 var str = "0"; 3

JS undefinednull的區別

在JavaScript中存在這樣兩種原始型別:Null與Undefined。這兩種型別常常會使JavaScript的開發人員產生疑惑,在什麼時候是Null,什麼時候又是Undefined? Undefined型別只有一個值,即undefined。當宣告的變數還未被初始化

JAVAisEmptynull以及""的區別

這是一個比較容易混淆的概念,為了弄清楚這個問題,最好的方法當然是寫程式來驗證,上程式碼吧~~: /** * */ package JavaTest; /** * @author wxwevenpc * @version 1.0 2012-11-25 */ pu

C#的???,nullNullable

不能 ron repl 編譯器 提示 data- 外行 date 如果 1.單問號(?) 1.1 單問號運算符可以表示:可為Null類型,C#2.0裏面實現了Nullable數據類型 //A.比如下面一句,直接定義int為null是錯誤的,錯誤提示為無法將null轉

HIVELIKERLIKE的區別

看書的過程中發現hive有兩個用於通配的操作符,LIKE和RLIKE,查了些資料總結一點二者的區別 LIKE 語法格式為A [NOT] LIKE B,B是sql下的簡單正則表示式,也叫萬用字元模式,如_匹配一個字元,%可以匹配任意多個字元,A會對錶達式B做匹

HivedistinctGroup by效率對比及處理方式

select res.flag AS flag ,res.source AS source ,res.template AS template ,SUM(res.click_user)

Hive建立呼叫儲存過程及自定義函式

前面的文章《在Hive中實現儲存過程–HQL/SQL》中介紹瞭如何使用HPL/SQL在Hive中實現儲存過程,執行類似Oracle PL/SQL的功能。 一般的業務場景是資料開發人員開發好一個儲存過程,然後週期性的呼叫,傳入不同的引數即可。 本文繼續介紹如何在Hive中利

HiveUDFUDAF的使用

UDF使用者自定義函式(user defined function)–針對單條記錄。 建立函式流程 1、自定義一個Java類2、繼承UDF類 3、重寫evaluate方法 4、打成jar包 6、在hive執行add jar方法7、在hive執行建立模板函式 8、hql中使用D

nullNULLnullptr””區別

突然想到這個有趣的問題:C語言和C++對大小寫是敏感的,也就是說null和NULL是區別對待的。NULL代表空地址,null只是一個符號。便來深究,看了很多資料,總結如下: 其實null和NULL都是字串(沒啥區別,歡迎高手糾錯!),具體看它們巨集定義被定義成為什麼值。

hive 日期轉換】Hiveyyyymmddyyyy-mm-dd日期之間的切換

方法1: from_unixtime+ unix_timestamp --20171205轉成2017-12-05 select from_unixtime(unix_timestamp('20171

hiveUDFUDAF使用說明

Hive進行UDF開發十分簡單,此處所說UDF為Temporary的function,所以需要hive版本在0.4.0以上才可以。 一、背景:Hive是基於Hadoop中的MapReduce,提供HQL查詢的資料倉庫。Hive是一個很開放的系統,很多內容都支援使用者定製,包括

Linux系統有關/dev/null/dev/zero文件說明及實踐

linux /dev/null 特殊文件 /dev/zero Linux系統中有關/dev/null和/dev/zero文件說明提示:這個題目完全可以作為一個面試題考考運維的應聘者:面試題:請解釋Linux中/dev/null和/dev/zero兩個文件的作用和區別。在類Unix操作系統中,

JavaScriptNullundefind區別

cdc 如何 undefine 只有一個 som pre cnblogs 定義 報錯 公眾號原文 Javascript有5種基本類型:Boolean,Number,Null,Undefined,String;和一種復雜類型:Object(對象); undef