Hive 基礎你需要掌握這些

2021-09-10 09:14:01 字數 3854 閱讀 9328

hdfs 中乙個簡單的 join查詢,是否需要擼一大串**?我只會sql語句 能不能入坑大資料?這裡我們就來聊一聊 hive。

hive 是一種資料倉儲工具,不提供資料儲存(資料還是儲存在 hdfs 上),它能讓你通過 sql語句實現 mapreduce 統計。

hive 是乙個sql解析引擎,是將sql語句轉譯成 mapreduce 作業,然後在 hadoop 平台上執行。

hive 中的表是純邏輯表,只有表的元資料,本質就是 hadoop 的目錄或檔案。

hive 一般讀多寫少,不支援對資料的改寫和刪除,它沒有定義專門的資料格式,需要由使用者指定,通常包括三個屬性:

hiveql

sql資料儲存

hdfs、hbase

local file system

資料格式

使用者自定義

系統決定

資料更新

不支援,支援資料覆蓋

支援索引

有(0.8之後)有執行

mapreduce 計算模型

executor

可擴充套件性

高(udf、udaf、udtf)

低資料規模大小

執行延遲高低

資料檢查

讀時模式

寫時模式

我們通過 hive 的 client(hive 的命令列工具,jdbc等)向hive 提交 sql 命令,如果是建立資料表的資料定義語言(ddl),hive 通過執行引擎 driver 將資料表的資訊記錄在 metastore 元資料元件中。

如果提交的是查詢分析資料的資料查詢語句(dql),driver 會將該語句提交給自己的編譯器 compiler 進行語法分析、語法解析、語法優化等一系列操作,最後生成 mapreduce 執行計畫,然後根據執行計畫生成乙個 mapreduce 作業,提交給mapreduce 計算框架進行處理。

一次執行多條查詢語句,可以將這些查詢語句儲存在字尾為 hql 的檔案中,然後通過下面的命令一次執行。

hive -f xx.hql
使用 hive 時,有時需要檢視 hdfs,可以在 hive 命令下,執行dfs 命令,如下:

dfs -ls /
hive 支援兩種資料型別:原生型別復合型別。原生型別包括:tinyint、smallint、int、bigint、boolean、float、double、string、binary(0.8以上才可用)、timestamp(0.8以上才可用)。復合資料型別包括:array、map、struct、union。

hive 支援的檔案儲存格式有

乙個 student 表的建立例項:

create

table student (

name string,

age int

,cource array

,body map

float

>

,address struct

)row format delimited

fields

terminated

by'\001'

--指定列分隔符

--collection items terminated by '\002' -- 指定集合元素間的分割符

--map keys terminated by '\003' -- 指定型別為 map 的字段的鍵值對分隔符

--lines terminated by '\n' -- 指定行分隔符

--stored as textfile -- 儲存的檔案格式

hive 預設建立的是內部表,外部表建立語句如下:

create external table..

.location '/***/xx/x'

關鍵字 external 指定了該錶為外部表,location 指明了資料存放在 hdfs 的 『/***/xx/x』 目錄下。

當要刪除外部表時,hive 會認為沒有完全擁有這份資料,只會刪除該外部表的元資料資訊,而不會刪除該錶的資料。

分割槽表的建立語句如下:

create

table..

.partitioned by..

.

在分割槽表中,乙個 partition 對應表下的乙個目錄。

hive 支援對每乙個表或分割槽,進一步分桶,其建立語句示例如下:

create

table bucket_user(

id int

,name string

)clustered

by(id)

into

4 buckets;

bucket 的主要作用包括:資料取樣和提公升某些查詢操作效率。資料取樣的語法示例如下:

select

*from bucket_user tablesample(bucket 1

outof

2on id)

;

tablesample(bucket x out of y) 中y必須是表中總bucket 數的倍數或因子,x表示從哪個bucket 開始抽。例如:表中總bucket 數為32,tablesample(bucket 3 out of 16),表示總共抽取2個(32/16)桶的資料,是第三個bucket 和第19(3+16)個bucket中的資料。

一條常見的sql語句,按照 mapreduce 程式設計模型,其 map 和 reduce 端輸入和輸出分別是什麼?我們分析常見的兩種:

pageid, age 形成key,count(1) 形成value,經過統計後在reduce輸出端重新將 key 拆開與value生成三列。

join 中將 userid 作為key,value 為二元組《表編號,pageid/age>,shuffle 階段,將相同的key 合併,reduce 輸出是將 二元組《表編號,pageid/age>中ageid和age做笛卡爾積。

parseexception line 2:0 cannot recognize input near 『』 『』 『』

可能分號後面有空格導致的。

JS基礎,你需要掌握的要點!

迴圈控制語句 1 break 終止本層迴圈,繼續執行迴圈後面的語句 當迴圈有多層時,break只會跳過一層迴圈 對於for,continue執行後,繼續執行迴圈變數更新語句n 對於while,do while,continue執行後,繼續執行迴圈條件,判斷 所以使用這兩個迴圈時必須注意 contin...

介面自動化測試之前,這些基礎是你需要掌握的

什麼是介面測試 測試人員通常所說的 介面測試 是針對系統各元件之間介面的一種測試,它屬於功能測試。介面能測出普通介面操作難以發現的問題。如,我們都知道系統是由前端後端組成,一些資料在前端做了校驗,後端同樣也需要校驗才能保證安全,介面操作顯然只能檢查到前端校驗這一層,只有直接面對前後端之間的該介面才能...

英語速成的竅門 你需要掌握這些 膠水詞

連線詞 非常高頻率的出現在各類英語文章 對話中,像膠水 一樣將相關聯的句子連線起來,因此它又被稱之為 膠水詞 膠水詞就像英語的骨架,學會了膠水詞,同時擁有片語的累積,你就可以輕鬆靈活的造出任何需要的長句,讓你的英文交流如魚得水。因此先學膠水詞,也是英語速成的竅門之一。一 連線詞 1 表選擇關係或對等...