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 表選擇關係或對等...