腾讯云数据仓库 TCHouse-X CREATE TABLE USING HIVE

这篇说说腾讯云 Hive 格式 CREATE TABLE 语法,支持 EXTERNAL、分区、分桶、CTAS 等参数,用于定义新表。 参数说明: 列出 PARTITIONED BY、CLUSTERED BY、STORED AS 等关键子句的用途与约束。 示例: 展示 ORC/PARQUET 存储、分区表、分桶表及 CTAS 建表等实际用法。

相关产品
腾讯云数据仓库 TCHouse-X 产品页,含版本规格、价格与购买入口。

一、描述

CREATE TABLE 语句使用 Hive 格式定义一个新表。

二、语法

CREATE [ EXTERNAL ] TABLE [ IF NOT EXISTS ] table_identifier [ ( col_name1[:] col_type1 [ COMMENT col_comment1 ], … ) ] [ COMMENT table_comment ] [ PARTITIONED BY ( col_name2[:] col_type2 [ COMMENT col_comment2 ], … ) | ( col_name1, col_name2, … ) ] [ CLUSTERED BY ( col_name1, col_name2, …) [ SORTED BY ( col_name1 [ ASC | DESC ], col_name2 [ ASC | DESC ], … ) ] INTO num_buckets BUCKETS ] [ ROW FORMAT row_format ] [ STORED AS file_format ] [ LOCATION path ] [ TBLPROPERTIES ( key1=val1, key2=val2, … ) ] [ AS select_statement ]

注意:列定义子句和 AS SELECT 子句之间的子句可以以任意顺序出现。

三、参数说明

子句/关键字 用途 说明
table_identifier 表名定义 指定表名,可选择性地用数据库名限定。语法:[database_name.]table_name
EXTERNAL 存储方式 使用 LOCATION 提供的路径定义表,不使用默认仓库路径;DROP TABLE 时不会删除实际数据
PARTITIONED BY 分区 根据指定的列对表进行分区,支持单列或多列分区,用于分区裁剪优化
CLUSTERED BY 分桶 将创建的分区内的数据按指定列散列为固定桶数;注意:分桶是一种优化技术
SORTED BY 桶内排序 指定桶内数据的排序顺序,通常配合 CLUSTERED BY 使用以减少桶内数据扫描量
INTO num_buckets BUCKETS 桶数量 指定分桶的数量;必须与 CLUSTERED BY 一起使用
row_format 行格式 指定输入和输出的行格式,如分隔符、SerDe 序列化/反序列化规则等
STORED AS 文件格式 表底层存储的文件格式,支持 TEXTFILE、ORC、PARQUET、ICEBERG 等
LOCATION 存储路径 表数据存储的目录路径,常与 EXTERNAL 联合使用指向外部存储位置
COMMENT 表注释 用于描述表的字符串字面量,方便元数据管理和团队协作理解表用途
TBLPROPERTIES 表属性 用于标记/配置表定义的键值对列表(如 Iceberg format-version、压缩算法等)
AS select_statement CTAS 建表 使用 SELECT 语句查询结果的数据直接填充并创建表(Create Table As Select)

四、示例

— STORED AS ORCCREATE EXTERNAL TABLE hive_t1 (id INT, name STRING, age INT) STORED AS ORC LOCATION 'cosn://<your_cos_bucket>/test_create_table_hive/hive_t1';– STORED AS PARQUETCREATE EXTERNAL TABLE hive_t2 (id INT, name STRING, age INT) STORED AS PARQUET LOCATION 'cosn://<your_cos_bucket>/test_create_table_hive/hive_t2';– COMMENT + TBLPROPERTIESCREATE EXTERNAL TABLE hive_t3 (id INT, name STRING, age INT) COMMENT 'test hive format table' STORED AS ORC TBLPROPERTIES ('foo'='bar') LOCATION 'cosn://<your_cos_bucket>/test_create_table_hive/hive_t3';– PARTITIONED BYCREATE EXTERNAL TABLE hive_t4 (id INT, name STRING) PARTITIONED BY (age INT) STORED AS ORC LOCATION 'cosn://<your_cos_bucket>/test_create_table_hive/hive_t4';– ROW FORMAT + TEXTFILECREATE EXTERNAL TABLE hive_t5 (id INT, name STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION 'cosn://<your_cos_bucket>/test_create_table_hive/hive_t5';– 复杂数据类型(ARRAY / MAP / STRUCT)CREATE EXTERNAL TABLE hive_family ( name STRING, friends ARRAY<STRING>, children MAP<STRING, INT>, address STRUCT<street: STRING, city: STRING>) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' COLLECTION ITEMS TERMINATED BY '_' MAP KEYS TERMINATED BY ':' STORED AS TEXTFILE LOCATION 'cosn://<your_cos_bucket>/test_create_table_hive/hive_family';– CLUSTERED BYCREATE EXTERNAL TABLE hive_clustered1 (ID INT, AGE STRING) CLUSTERED BY (ID) INTO 4 BUCKETS STORED AS ORC LOCATION 'cosn://<your_cos_bucket>/test_create_table_hive/hive_clustered1';– CLUSTERED BY + SORTED BY + PARTITIONED BYCREATE EXTERNAL TABLE hive_clustered2 (ID INT, NAME STRING) PARTITIONED BY (YEAR STRING) CLUSTERED BY (ID, NAME) SORTED BY (ID ASC) INTO 3 BUCKETS STORED AS PARQUET LOCATION 'cosn://<your_cos_bucket>/test_create_table_hive/hive_clustered2';– INSERT 数据并验证INSERT INTO hive_t2 VALUES (1, 'Alice', 20), (2, 'Bob', 22);SELECT * FROM hive_t2;– CTAS + LOCATION Hive 格式CREATE TABLE hive_t6 STORED AS PARQUET LOCATION 'cosn://<your_cos_bucket>/test_create_table_hive/hive_t6_v2' AS SELECT * FROM hive_t2;– IF NOT EXISTSCREATE EXTERNAL TABLE IF NOT EXISTS hive_t1 (id INT, name STRING, age INT) STORED AS ORC LOCATION 'cosn://<your_cos_bucket>/test_create_table_hive/hive_t1';– DESC TABLEDESC TABLE EXTENDED hive_t1;

赞 (0)
上一篇 4天前
下一篇 4天前