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");






posted @ 2020-04-30 15:52  Tim&Blog  阅读(849)  评论(0编辑  收藏  举报