欧美一区2区三区4区公司二百,国产精品婷婷午夜在线观看,自拍偷拍亚洲精品,国产美女诱惑一区二区

歡迎來到云服務器

大數(shù)據(jù)技術

大數(shù)據(jù)開發(fā)之路:hive篇,你看了嗎?

數(shù)據(jù)開發(fā)之路漫漫其修遠兮,吾將上下而求索。很多入門大數(shù)據(jù)的小伙伴,可能第一個接觸到的,就是一只可愛的“小象”,也就是我們的大數(shù)據(jù)領域的數(shù)據(jù)倉庫工具hive。

這只小象給我們提供了方便類SQL查詢語言HQL來操縱數(shù)據(jù)歐洲服務器,使得我們一開始不用編寫復雜的代碼,就可以輕松的探索數(shù)據(jù)。Hive對于熟悉傳統(tǒng)數(shù)據(jù)庫的同學來說,算是很友好的一個入門工具。

原理

在大數(shù)據(jù)生態(tài)中,hive一般作為數(shù)據(jù)倉庫來使用。什么是數(shù)據(jù)倉庫呢? 簡單來說就像一個大糧倉,里邊堆著各種各樣的糧食,比如小麥、玉米、土豆、大米等等。數(shù)據(jù)倉庫里是一個數(shù)據(jù)集合體,把不同數(shù)據(jù)源按照一定的形式集合統(tǒng)一起來。 Hive本身是不做數(shù)據(jù)存儲的,它是構建在分布式存儲系統(tǒng)HDFS之上,我們平常看到的表數(shù)據(jù)其實本質上來說還是HDFS的文件。 Hive把這些HDFS數(shù)據(jù)文件,通過元數(shù)據(jù)規(guī)則映射為數(shù)據(jù)庫的表,并且可以提供SQL操作的功能。 Hive總體結構比較簡單,下方是整體的hive架構圖,我們可以看到,總體有三個組件:用戶接口、元數(shù)據(jù)系統(tǒng)、驅動器。

用戶通過用戶接口來輸入操作指令。一般接口有三種形式:

CLI端:一般在linux服務器直接輸入hive即可進入; WEB模式:通過命令bin/hive --service hwi啟動,默認訪問9999端口; 遠程模式:一般是JDBC之類的編程接口;

Hive的核心在于驅動器,一般驅動器接收到用戶接口傳遞的一條SQL之后,會進行下面的一系列操作:

驅動器開始進行語法和語義分析 生成邏輯計劃并且邏輯優(yōu)化 生成物理計劃 發(fā)送計劃到執(zhí)行引擎(常用引擎有mapredue和sprk)執(zhí)行

結果返回

而元數(shù)據(jù)系統(tǒng)一般傳統(tǒng)數(shù)據(jù)庫來承載,主要記錄了包括hive表的名字,表的列和分區(qū)及其屬性,表的屬性(是否為外部表等),表的數(shù)據(jù)所在目錄等。

常用hive語法

了解了hive的基礎原理之后呢,我們這里結合工作中一些需求,來介紹下開發(fā)同學常用的hive操作。

分組統(tǒng)計

作為一名SQL仔,經常會要去統(tǒng)計一些奇奇怪怪的指標,比如不同年齡段的UV,下單數(shù)的小時分布之類的。一般常用的分組就是group by了,然后配合上一些窗口函數(shù), SUM、AVG、MIN、MAX、COUNT等,就可以實現(xiàn)我們很多統(tǒng)計需求了。比如下邊的統(tǒng)計時間段的獨立用戶數(shù),查詢結果如下圖所示:

關聯(lián)查詢

有時候我們查詢的數(shù)據(jù)存放在不同的表中,那關聯(lián)查詢就派上用場了。所謂關聯(lián)查詢,一般就是通過兩張表相同的字段值關聯(lián)起來,同時查詢兩張表的記錄。Hive中常用關聯(lián)分內外關聯(lián)。

我們先建立兩張簡單的表tab_a和tab_b,用實例來說明關聯(lián)機制。表結構和表數(shù)據(jù)如下圖所示:

內關聯(lián)一般使用 關鍵字Join或inner join ,內關聯(lián)只返回關聯(lián)上的結果。

外關聯(lián)的形式就比較多樣化了,又分為:

左外關聯(lián):關鍵字為left [outer] join,以前邊的表為主表,返回記錄數(shù)和主表記錄一致,關聯(lián)不上的字段為null; 右外關聯(lián):關鍵字為right [outer] join,和左外關聯(lián)相反,則是以后邊的表為主表。 全外關聯(lián):full [outer] join,返回兩個表的去重之和,關聯(lián)不上的字段為null。

行列轉換

有時候我們會遇到這樣的需求,需要把多列的數(shù)據(jù)平鋪到一行上輸出。比如查詢用戶的訪問軌跡,這時候有兩個函數(shù)就起上作用了。還是讓我們先來看看效果。

這兩個sql的作用都是把每個用戶的點擊軌跡拼接暫展示出來,其中collect_set和collect_set能夠把列數(shù)據(jù)合并,轉為一行。而兩個的唯一區(qū)別就是collect_set會進行去重。

上述講的是行轉列,還有些需求,希望我們能把列數(shù)據(jù)拆分成多行,比如數(shù)據(jù)結構如下,

Page_id StringAd_id Array

A[1,2,3] B[3,5,6] C[2,4,5]

要統(tǒng)計每個廣告在所有頁面出現(xiàn)的次數(shù),這時候,我們可以先把同一列的數(shù)據(jù)線拆成多行,hive提供了explode展開函數(shù),具體效果如下圖:

騰訊云代理

Copyright © 2003-2021 MFISP.COM. 國外vps服務器租用 夢飛云服務器租用 版權所有 ? 粵ICP備11019662號

主站蜘蛛池模板: 若尔盖县| 湘阴县| 永寿县| 岳阳市| 韩城市| 勐海县| 齐河县| 密山市| 宣武区| 丰都县| 旌德县| 承德县| 普格县| 闻喜县| 囊谦县| 邵武市| 兴安县| 嵊泗县| 徐闻县| 石嘴山市| 怀仁县| 上虞市| 临澧县| 崇仁县| 开封市| 罗定市| 茶陵县| 莱阳市| 庆元县| 公主岭市| 本溪市| 鲜城| 米脂县| 肇庆市| 静海县| 都匀市| 闽清县| 都兰县| 明水县| 麻栗坡县| 宁都县|