hive學習筆記

2021-06-18 17:11:13 字數 1409 閱讀 2346

在使用hive進行開發時,我們往往需要獲得乙個已存在hive表的建表語句(ddl),然而hive本身並沒有提供這樣乙個工具。

要想還原建表ddl就必須從元資料入手,我們知道,hive的元資料並不存放在hdfs上,而是存放在傳統的rdbms中,典型的如mysql,derby等,這裡我們以mysql為元資料庫,結合0.4.2版本的hive為例進行研究。

連線上mysql後可以看到hive元資料對應的表約有20個,其中和表結構資訊有關的有9張,其餘的10多張或為空,或只有簡單的幾條記錄,以下是部分主要表的簡要說明。

表名說明

關聯鍵tbls

所有hive表的基本資訊

tbl_id,sd_id

table_param

表級屬性,如是否外部表,表注釋等

tbl_id

columns

hive表字段資訊(字段注釋,欄位名,字段型別,字段序號)

sd_id

sds所有hive表、表分割槽所對應的hdfs資料目錄和資料格式

sd_id,serde_id

serde_param

序列化反序列化資訊,如行分隔符、列分隔符、null的表示字元等

serde_id

partitions

hive表分割槽資訊

part_id,sd_id,tbl_id

partition_keys

hive分割槽表分割槽鍵

tbl_id

partition_key_vals

hive表分割槽名(鍵值)

part_id

除了上面幾張表外,還有兩張表非常有趣:nucleus_tables和sequence_table

從上面兩張表的內容來看,hive表建立表的過程已經比較清楚了

解析使用者提交hive語句,對其進行解析,分解為表、字段、分割槽等hive物件

根據解析到的資訊構建對應的表、字段、分割槽等物件,從sequence_table中獲取構建物件的最新id,與構建物件資訊(名稱,型別等)一同通過dao方法寫入到元資料表中去,成功後將sequence_table中對應的最新id+5。

實際上我們常見的rdbms都是通過這種方法進行組織的,典型的如postgresql,其系統表中和hive元資料一樣裸露了這些id資訊(oid,cid等),而oracle等商業化的系統則隱藏了這些具體的id。

有了上面的資訊,再想獲得hive的建表語句已經是易如反掌了,這裡提供乙個已經開發好的指令碼,使用shell開發,大家可以自由修改。注意:其中mysql連線資訊請根據實際環境進行配置。

使用方法如下:

如果需要多天分割槽ddl還可以這樣用(前提是分割槽中含有日期資訊,如pt=20100720):

hivesql synctab和hivesql sql一樣支援上述日期限定功能。

此外,還提供了兩個附加的功能(也很有用呃)

分享到:

Hive學習筆記 Hive 引數

第一部分 hive 引數 hive.exec.max.created.files 說明 所有hive執行的map與reduce任務可以產生的檔案的和 預設值 100000 hive.exec.dynamic.partition 說明 是否為自動分割槽 預設值 false hive.mapred.re...

Hive學習筆記 Hive概述

1.1 資料倉儲 可以利用資料倉儲來儲存我們的資料,但是資料倉儲有別於我們常見的一般資料庫。資料倉儲是乙個面向主題的 整合的 不可更新的 隨時間不變化的資料整合,它用於支援企業或組織的決策分析處理。物件導向的 倉庫中的資料是按照一定的主題進行組織的。主題即使用者使用資料倉儲進行決策時所關心的重點方面...

hive學習筆記

今年剛畢業的我就進入了資料探勘這行,沒過多久開始使用hadoop寫了零星幾個mapreduce,現在開始使用hive,並且在可預見的未來若干一段時間內還會一直用,可是網上關於hive的文章太雜亂,所以現在就讀過的文章和知識點進行梳理和記錄,希望經過一段時間的積累和學習後能夠將hive歸檔,把hive...