Hive的資料模型 桶表

2021-07-22 23:47:47 字數 3940 閱讀 3553

桶表是對資料進行雜湊取值,然後放到不同檔案中儲存。

資料載入到桶表時,會對字段取hash值,然後與桶的數量取模。把資料放到對應的檔案中。

物理上,每個桶就是表(或分割槽)目錄裡的乙個檔案,乙個作業產生的桶(輸出檔案)和reduce任務個數相同。

桶表專門用於抽樣查詢,是很專業性的,不是日常用來儲存資料的表,需要抽樣查詢時,才建立和使用桶表。

[22:39:03]hive (zmgdb)> create table bucket_t1(id string)

[22:39:26]            > clustered by(id) into 6 buckets;

[22:39:27]ok

[22:39:27]time taken: 0.546 seconds

clustered by:以哪個欄位分桶。對id進行雜湊取值,隨機  地放到4個桶裡。

-----------------------------

[root@hello110 data]# vi bucket_test12

3456

.............

.........

[21:27:45]hive (zmgdb)> create table t2(id string);

[21:27:45]ok

[21:27:45]time taken: 0.073 seconds

[21:28:24]hive (zmgdb)> load data local inpath '/data/bucket_test' into table t2;

[21:28:24]loading data to table zmgdb.t2

[21:28:25]ok

從日常表匯入

[22:39:47]hive (zmgdb)> insert overwrite table bucket_t1 select id from t2;

hive會啟動mapreduce

沒有啟動mapreduce對資料進行雜湊取值,只是簡單的原樣匯入,沒有起到抽樣查詢的目的。通過select * from 比較會發現bucket_t1的資料和bucket_t2的資料順序是不同的,bucket_t2的表順序與原資料檔案順序一致,沒有做過雜湊取值。

select * from bucket_table tablesample(bucket x out of y on column);

tablesample是抽樣語句

語法解析:tablesample(bucket x out of y on 字段)

y必須是table總bucket數的倍數或者因子。

hive根據y的大小,決定抽樣的比例。

例如,table總共分了64份,當y=32時,抽取(64/32=)2個bucket的資料,當y=128時,抽取(64/128=)1/2個bucket的資料。x表示從哪個bucket開始抽取。

例如,table總bucket數為32,tablesample(bucket 3 out of 16),表示總共抽取(32/16=)2個bucket的資料,分別為第3個bucket和第(3+16=)19個bucket的資料。如果是y=64,則抽取半個第3個桶的值。

[22:44:31]hive (zmgdb)> select * from bucket_t1 tablesample (bucket 1 out of 6 on id);

[22:44:31]ok

[22:44:31]bucket_t1.id

[22:44:31]6

[22:44:31]iu

[22:44:31]0

[22:44:31]6

[22:44:31]hj

[22:44:31]6

[22:44:31]6

[22:44:31]51

[22:44:31]

[22:44:31]

[22:44:31]r

[22:44:31]99

[22:44:31]0

[22:44:31]57

[22:44:31]loo

[22:44:31]r

[22:44:31]r

[22:44:31]r

[22:44:31]60

[22:44:31]66

[22:44:31]75

[22:44:31]6

[22:44:31]84

[22:44:31]x

[22:44:31]24

[22:44:31]93

[22:44:31]99

[22:44:31]105

[22:44:31]f

[22:44:31]r

[22:44:31]114

[22:44:31]0

[22:44:31]123

[22:44:31]129

[22:44:31]132

[22:44:31]x

[22:44:31]138

[22:44:31]141

[22:44:31]147

[22:44:31]33

[22:44:31]150

[22:44:31]156

[22:44:31]r

[22:44:31]f

[22:44:31]39

[22:44:31]15

[22:44:31]r

[22:44:31]ddd

[22:44:31]

[22:44:31]06

[22:44:31]hj

[22:44:31]f

[22:44:31]l

[22:44:31]f

[22:44:31]f

[22:44:31]f

[22:44:31]f

[22:44:31]42

[22:44:31]f

[22:44:31]r

[22:44:31]r

[22:44:31]f

[22:44:31]f

[22:44:31]r

[22:44:31]48

[22:44:31]6

[22:44:31]time taken: 0.142 seconds,fetched:66 row(s)

[22:44:43]hive (zmgdb)> select * from bucket_t1 tablesample (bucket 1 out of 60 on id);

[22:44:43]ok

[22:44:43]bucket_t1.id

[22:44:43]

[22:44:43]

[22:44:43]loo

[22:44:43]x

[22:44:43]114

[22:44:43]132

[22:44:43]x

[22:44:43]150

[22:44:43]ddd

[22:44:43]

[22:44:43]time taken: 0.064 seconds, fetched:10 row(s)

hive資料模型之桶表

hive的桶表類似於hash分割槽,桶表在hdfs中儲存是以檔案形式儲存的 與其他分割槽表不同,桶表的分割槽條件是從表中列名選取的,然後做hash運算,如果hash值相同那麼就放入乙個桶表中 建立桶表的示例 create table emp5 empno int,ename string,job s...

Hive 資料模型

hive 資料模型 hive 資料表有五種型別 內部表,外部表,分割槽表,桶表,檢視表,預設以 tab 分隔 mysql oracle 表預設以逗號分隔,因此,要想匯入 mysql oracle 資料,需要設定分隔符,在建表語句後加 row format delimited fields termi...

HIVE的資料模型

hive 中所有的資料都儲存在 hdfs 中,hive 中包含以下資料模型 示例 建立表 level string,leader string,dep string,ips array row format delimited fields terminated by collection item...