Hive與SQL的區別

2021-10-23 02:45:18 字數 1705 閱讀 5112

hive中在建立表時,一般會根據匯入的資料格式來指定字段分隔符和列分隔符。

一般匯入的文字資料字段分隔符多為逗號分隔符或者製表符(但是實際開發中一般不用著這種容易在文字內容**現的的符號作為分隔符),當然也有一些別的分隔符,也可以自定義分隔符。有時候也會使用hive預設的分隔符來儲存資料。

分隔符詳解:

hive中把不相等的情況拿出來時,無法直接寫字段a<>欄位b,否則會報錯。

想從乙個訂單表中,剔除測試使用者的訂單,該如何實現呢?使用left join

select a.uid,a.orderid

from table1 a --訂單表

left

join table2 b --測試使用者id表

on a.uid = b.uid

where b.uid is

null

比如 sql中對兩表內聯可以寫成:

select

*from dual a,dual b where a.

key= b.

key;

hive中應為:

select

*from dual a join dual b on a.

key= b.

key;

在傳統資料庫中欄位沒有值或者為空即表示為null,但是在hive中預設的null值是\n。

在hive中會把文字的\n解析為null。在使用is null 或者is not null時會過濾資料。

如果想延續傳統資料庫中對於空值為null,可以通過alter語句來修改hive表的資訊,保證解析時是按照空值來解析null值。語句如下:

alter

table ljn005

setserdeproperties(

'serialization.null.format'=''

);

這樣就可以修改預設的null值的定義了。比如這裡定義

alter

table ljn005

setserdeproperties(

'serialization.null.format'

='abc'

);

則以後出現』abc』,hive都會把這個解析為null值。

分號是sql語句結束標記,在hiveql中也是,但是在hiveql中,對分號的識別沒有那麼智慧型,例如:

select concat(

key,concat(

';',

key)

)from dual;

failed: parse error: line 0:-

1 mismatched input '' expecting )

infunction specification

解決的辦法是,使用分號的八進位制的ascii碼進行轉義,那麼上述語句應寫成:

select concat(

key,concat(

'\073'

,key))

from dual;

關於這個很多人都寫了不支援,但是在hive的之前版本已經新增了這幾個命令,現在是可以使用的

Hadoop Pig與Hive的區別

請允許我很無聊的把飛機和火車拿來做比較,因為2者根本沒有深入的可比性,雖然兩者都是一種高速的交通工具,但是具體的作用範圍是截然不同的,就像hive和pig都是hadoop中的專案,並且hive和pig有很多共同點,但hive還似乎有點資料庫的影子,而pig基本就是乙個對mapreduce實現的工具 ...

Hive與Hbase的區別

以下 由網上內容 整理 hive是為了簡化編寫mapreduce程式而生的,使用mapreduce做過資料分析的人都知道,很多分析程式除業務邏輯不同外,程式流程基本一樣。在這種情況下,就需要hive這樣的使用者程式設計介面。hive本身不儲存和計算資料,它完全依賴於hdfs和mapreduce,hi...

hive與hbase的區別

hive與hbase的區別 hive 核心將sql轉換為mapreduce 將儲存在hdfs上的結構化的資料對映成一張表,並提供類sql語句進行查詢 hive的特點 高延遲儲存的是結構化的資料 hive是面向分析,使用的hql語言 hive不能接入業務使用 hive是面向行儲存的資料倉儲工具,是一種...