Inceptor命令04-表


ORC表與其他表的區別
1. 只有TEXT、CSV、基於定寬文本文件外表這三種表支持對 字段類型 的修改以及增、刪
字段。
2. 禁止修改ORC表的字段類型
3. 禁止對ORC表增、刪字段

ORC表建立的原則
ORC非事務表的建表只需在建表語句中用 STORED AS ORC 指定存儲格式爲ORC即可。
ORC事務表的建表則
需要幾個額外的重點步驟:
    1. 爲表分桶:爲了保證增刪改過程中的性能,我們要求ORC事務表必須是部分排序或者全局排序的,但是全局排序又過於耗費計算資源,因此我們要求ORC表必須是分桶表。
    2. 在 TBLPROPERTIES 裏需要加上 "transactional"="true",以標識這是一個要用作事務操作的表。
    3. 如果表的數據量特別大,建議在分桶的基礎上再分區,ORC事務表支持單值分區和範圍分區。

ORC表創建
-- 非分區表
CREATE TABLE <table_name> (<column> <data_type>, <column> <data_type>, ...)
CLUSTERED BY (<bucket_key>) INTO <n> BUCKETS
STORED AS ORC
TBLPROPERTIES ("transactional"="true");

-- 創建非分區ORC表。
DROP TABLE IF EXISTS ta;
CREATE TABLE ta (name STRING, age INT)
CLUSTERED BY (age) INTO 2 BUCKETS
STORED AS ORC TBLPROPERTIES ("transactional"="true");

-- 單值分區表(Unique Value Partition)
CREATE TABLE <table_name> (<column> <data_type>, <column> <data_type>, ...)
PARTITIONED BY (<partition_key> <data_type>)
CLUSTERED BY (<bucket_key>) INTO <n> BUCKETS
STORED AS ORC
TBLPROPERTIES ("transactional"="true");
-- 範圍分區表(Range Partition)
CREATE TABLE <table_name> (<column> <data_type>, <column> <data_type>, ...)
PARTITIONED BY RANGE(<partition_key1> <data_type>, <partition_key2> <data_type>, ...) (
PARTITION [<partition_name_1>] VALUE LESS THAN(<key1_bound_value1>, <key2_bound_value1>, ...),
PARTITION [partition_name_2] VALUE LESS THAN(key1_bound_value2, key2_bound_value2, ...),
...
)
CLUSTERED BY (<bucket_key>) INTO <n> BUCKETS
STORED AS ORC
TBLPROPERTIES ("transactional"="true");
注意
1. 分區表中的分區鍵partition_key不能和表中的列重複。
2. 在表結構中,分區鍵被系統排在非分區鍵之後。

-- 創建非分區ORC表。
DROP TABLE IF EXISTS tg;
CREATE TABLE tg (name STRING, gpa DOUBLE) CLUSTERED BY (name) INTO 4 BUCKETS STORED AS ORC
TBLPROPERTIES ("transactional"="true");
-- 創建單值分區ORC表。
DROP TABLE IF EXISTS test;
CREATE TABLE test (a INT, b STRING, c DOUBLE) PARTITIONED BY (date STRING) CLUSTERED BY (c) INTO 8
BUCKETS STORED AS ORC TBLPROPERTIES ("transactional"="true");
-- 創建範圍分區ORC表。
DROP TABLE IF EXISTS t5;
CREATE TABLE t5(id INT, value INT) PARTITIONED BY RANGE(amount INT)
(
PARTITION less1 VALUES LESS THAN (1),
PARTITION less10 VALUES LESS THAN (10),
PARTITION less100 VALUES LESS THAN (100)
)
CLUSTERED BY (id) INTO 5 BUCKETS STORED AS ORC TBLPROPERTIES ("transactional"="true");






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章