Hive的架構設計和建表語義

2021-10-11 18:47:16 字數 2242 閱讀 1069

apache hive是基於hadoop的乙個資料倉儲工具,可以將結構化的資料檔案對映為一張資料庫表,並提供一種hql語言進行查詢,具有擴充套件性好、延展性好、高容錯等特點,多應用於脫機數倉建設。

儲存:hive底層儲存依賴於hdfs,因此也支援hdfs所支援的資料儲存格式,如text、json、parquet等。當我們將乙個檔案對映為hive中一張表時,只需在建表的時告訴hive,資料中的列名、列分隔符、行分隔符等,hive就可以自動解析資料。

支援計算引擎:原生支援引擎為mapreduce。但也支援其他計算引擎,如spark、tez

元資料儲存:derby是hive內建的元資料儲存庫,但是derby併發效能差且目前不支援多會話。實際生產中,更多的是採用mysql多為hive的元資料儲存庫。

hql語句執行:解析器、編譯器、優化器完成hql查詢語句從詞法分析、語法分析、編譯、優化以及查詢計畫的生成。生成的查詢計畫儲存在hdfs中,並在隨後轉化為mapreduce任務執行。

1)create [external] table …

create [external] table [if not exists] table_name

[(col_name data_type[comment col_comment],...)]

[comment table_comment]

[partitioned by (col_name data_type[comment col_comment],...)]

[clustered by (col_name,col_name,...)

[sorted by (col_name[asc|desc],...)] into num_buckets buckets]

[row formatrow_format]

[stored as file_format]

[location hdfs_path];

create、if not exists等跟傳統的關係型資料庫含義類似,就不贅述了。筆者這裡主要說一下hive建表時的幾個特殊關鍵字:

external:建立外部表時需要指定該關鍵字,並通過location指定資料儲存的路徑

partitioned by:建立分割槽表時,指定分割槽列。

clustered by和sort by:通常連用,用來建立分桶表,下文會具體闡述。

row format delimited [fields terminated by char] [collection items terminated by char] [map keys terminated by char] [lines terminated by char] serde serde_name [with serdeproperties (property_name=property_value, property_name=property_value, …)]:指定行、字段、集合型別資料分割符、map型別資料key的分隔符等。使用者在建表的時候可以使用hive自帶的serde或者自定義serde,hive通過serde確定表具體列的資料。

stored as file_format:指定表資料儲存格式,如textfile,sequencefile,rcfile。預設textfile即文字格式,該方式支援通過load方式載入資料。如果資料需要壓縮,則採用sequencefile方式,但這種儲存方式不能通過load方式載入資料,必須從乙個表中查詢出資料再寫入到乙個表中insert overwrite table t1 select * from t1;

2) create table t_x as select …

即ctas語句,複製資料但不複製表結構,建立的為普通表。如果複製的是分割槽表則新建立的不是分割槽表但有分割槽字段。

ctas語句是原子性的,如果select失敗,將不再執行create操作。

3) create table t_x like t_y

like允許使用者複製源表結構,但不複製資料。如,create table t2 like t1;

hive建表語句(包括txt Orc和分割槽)

txt格式 無分割槽 use an pafc safe create table an pafc safe.sx ela bp info id ela bp info string,code string,agent no string,operation time string,product n...

hive建表語法和引數說明

create external table if not exists table name col name data type comment 字段描述資訊 col name data type comment 字段描述資訊 comment 表的描述資訊 partitioned by col n...

Hive 資料型別和建表語法

tinyint 1byte有符號整數 20 smallint 2byte有符號整數 20 int 有符號整數 20 bigint 8byte有符號整數 20 boolean 布林型別,true或者false true false float 單精度浮點數 3.14159 double 雙精度浮點數 ...