Hive中的表及其建立

2021-10-02 03:27:37 字數 3629 閱讀 7629

內部表也稱之為managed_table;預設儲存在/user/hive/warehouse下,也可以通過location指定;刪除表時,會刪除表資料以及元資料

create table if not exists t_user(

id int,

name string,

*** boolean,

age int,

salary double,

hobbies array,

card map,

address structcountry:string,city:string

)row format delimited

fields terminated by 『,』

collection items terminated by 『|』

map keys terminated by 『>』

lines terminated by 『\n』

stored as textfile;

外部表稱之為external_table;在建立表時可以自己指定目錄位置(location);刪除表時,只會刪除元資料不會刪除表資料;

create external table if not exists t_user1(

id int,

name string,

*** boolean,

age int,

salary double,

hobbies array,

card map,

address structcountry:string,city:string

)row format delimited

fields terminated by 『,』

collection items terminated by 『|』

map keys terminated by 『>』

lines terminated by 『\n』

stored as textfile

location 『hdfs:///hive_db/t_user』;

hive中的表對應為hdfs上的指定目錄,在查詢資料時候,缺省會對全表進行掃瞄,這樣時間和效能的消耗都非常大。分割槽為hdfs上表目錄的子目錄,資料按照分割槽儲存在子目錄中。如果查詢的where子句的中包含分割槽條件,則直接從該分割槽去查詢,而不是掃瞄整個表目錄,合理的分割槽設計可以極大提高查詢速度和效能。這裡說明一下分割槽表並非hive獨有的概念,實際上這個概念非常常見。比如在我們常用的oracle資料庫中,當表中的資料量不斷增大,查詢資料的速度就會下降,這時也可以對錶進行分割槽。表進行分割槽後,邏輯上表仍然是一張完整的表,只是將表中的資料存放到多個表空間(物理檔案上),這樣查詢資料時,就不必要每次都掃瞄整張表,從而提公升查詢效能。在hive中可以使用partitioned by子句建立分割槽表。表可以包含乙個或多個分割槽列,程式會為分割槽列中的每個不同值組合建立單獨的資料目錄。

create external table t_employee(

id int,

name string,

job string,

manager int,

hiredate timestamp,

salary decimal(7,2)

) partitioned by (deptno int)

row format delimited

fields terminated by "\t"

location '/hive/t_employee'

;

7369	smith	clerk	7902	1980-12-17 00:00:00	800.00

7499 allen salesman 7698 1981-02-20 00:00:00 1600.00 300.00

7521 ward salesman 7698 1981-02-22 00:00:00 1250.00 500.00

7566 jones manager 7839 1981-04-02 00:00:00 2975.00

7654 martin salesman 7698 1981-09-28 00:00:00 1250.00 1400.00

7698 blake manager 7839 1981-05-01 00:00:00 2850.00

7782 clark manager 7839 1981-06-09 00:00:00 2450.00

7788 scott analyst 7566 1987-04-19 00:00:00 1500.00

7839 king president 1981-11-17 00:00:00 5000.00

7844 turner salesman 7698 1981-09-08 00:00:00 1500.00 0.00

7876 adams clerk 7788 1987-05-23 00:00:00 1100.00

7900 james clerk 7698 1981-12-03 00:00:00 950.00

7902 ford analyst 7566 1981-12-03 00:00:00 3000.00

7934 miller clerk 7782 1982-01-23 00:00:00 1300.00

0: jdbc:hive2://centos:10000> load data local inpath '/root/baizhi/t_employee' overwrite into table t_employee partition(deptno=10)

;

分割槽表是為了將檔案按照分割槽資料夾進行粗粒度檔案隔離,但是分桶表是將資料按照某個字段進行hash計算出所屬的桶,然後在對桶內的資料進行排序 。

create external table t_employee_bucket(

id int,

name string,

job string,

manager int,

hiredate timestamp,

salary decimal(7,2),

deptno int)

clustered by(id) sorted by(salary asc) into 6 buckets

row format delimited

fields terminated by "\t"

location '/hive/employee_bucket'

;

0: jdbc:hive2://centos:10000>

set hive.enforce.bucketing =

true

;no rows affected (0.024 seconds)

0: jdbc:hive2://centos:10000> insert into table t_employee_bucket(id,name,job,manager,hiredate,salary,deptno) select id,name,job,manager,hiredate,salary,deptno from t_employee where deptno=10;

Hive表型別及其操作

create database demo use demo create table table 1 id int,name varchar 8 create external table table 2 id int,name varchar 8 row format delimited fiel...

hive創標 hive建立表

一 為什麼要建立分割槽表 1 select查詢中會掃瞄整個表內容,會消耗大量時間。由於相當多的時候人們只關心表中的一部分資料,故建表時引入了分割槽概念。2 hive分割槽表 是指在建立表時指定的partition的分割槽空間,若需要建立有分割槽的表,需要在create表的時候呼叫可選引數partit...

hive中建立hive json格式的表及查詢

在hive中對於json的資料格式,可以使用get json object或json tuple先解析然後查詢。也可以直接在hive中建立json格式的表結構,這樣就可以直接查詢,實戰如下 hive 2.3.0版本 1.準備資料來源 將以下內容儲存為test.txt class teacher cl...