CREATE TABLE
功能
该语句用于创建表。
该操作需要有在对应数据库内的建表权限 (CREATE TABLE)。
语法
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [database.]table_name
(column_definition1[, column_definition2, ...]
[, index_definition1[, index_definition2, ...]])
[ENGINE = [olap|mysql|elasticsearch|hive|iceberg|hudi|jdbc]]
[key_desc]
[COMMENT "table comment"]
[partition_desc]
[distribution_desc]
[rollup_index]
[ORDER BY (column_name1,...)]
[PROPERTIES ("key"="value", ...)]
[BROKER PROPERTIES ("key"="value", ...)]
参数说明
column_definition
语法:
col_name col_type [agg_type] [NULL | NOT NULL] [DEFAULT "default_value"] [AUTO_INCREMENT] [AS generation_expr]
说 明:
col_name:列名称。
注意,在一般情况下,不能直接创建以以 __op
或 __row
开头命名的列,因为此类列名被 StarRocks 保留用于特殊目的,创建这样的列可能导致未知行为。如需创建这样的列,必须将 FE 动态参数 allow_system_reserved_names
设置为 TRUE
。
col_type:列数据类型
支持的列类型以及取值范围等信息如下:
-
TINYINT(1字节) 范围:-2^7 + 1 ~ 2^7 - 1
-
SMALLINT(2字节) 范围:-2^15 + 1 ~ 2^15 - 1
-
INT(4字节) 范围:-2^31 + 1 ~ 2^31 - 1
-
BIGINT(8字节) 范围:-2^63 + 1 ~ 2^63 - 1
-
LARGEINT(16字节) 范围:-2^127 + 1 ~ 2^127 - 1
-
FLOAT(4字节) 支持科学计数法。
-
DOUBLE(8字节) 支持科学计数法。
-
DECIMAL[(precision, scale)] (16字节) 保证精度的小数类型。默认是 DECIMAL(10, 0) precision: 1 ~ 38 scale: 0 ~ precision 其中整数部分为:precision - scale 不支持科学计数法。
-
DATE(3字节) 范围:0000-01-01 ~ 9999-12-31
-
DATETIME(8字节) 范围:0000-01-01 00:00:00 ~ 9999-12-31 23:59:59
-
CHAR[(length)]
定长字符串。长度范围:1 ~ 255。默认为 1。
-
VARCHAR[(length)]
变长字符串。单位:字节,默认取值为
1
。- StarRocks 2.1.0 之前的版本,
length
的取值范围为 1~65533。 - 【公测中】自 StarRocks 2.1.0 版本开始,
length
的取值范围为 1~1048576。
- StarRocks 2.1.0 之前的版本,
-
HLL (1~16385个字节)
HLL 列类型,不需要指定长度和默认值,长度根据数据的聚合程度系统内控制,并且 HLL 列只能通过配套的 hll_union_agg、hll_cardinality、hll_hash进行查询或使用。
-
BITMAP BITMAP 列类型,不需要指定长度和默认值。表示整型的集合,元素个数最大支持到 2^64 - 1。
-
ARRAY 支持在一个数组中嵌套子数组,最多可嵌套 14 层。您必须使用尖括号( < 和 > )来声明 ARRAY 的元素类型,如 ARRAY < INT >。目前不支持将数组中的元素声明为 Fast Decimal 类型。
agg_type:聚合类型,如果不指定,则该列为 key 列。否则,该列为 value 列。
支持的聚合类型如下:
- SUM、MAX、MIN、REPLACE
- HLL_UNION(仅用于 HLL列,为 HLL 独有的聚合方式)。
- BITMAP_UNION(仅用于 BITMAP 列,为 BITMAP 独有的聚合方式)。
- REPLACE_IF_NOT_NULL:这个聚合类型的含义是当且仅当新导入数据是非 NULL 值时会发生替换行为。如果新导入的数据是 NULL,那么 StarRocks 仍然会保留原值。
注意:
- BITMAP_UNION 聚合类型列在导入时的原始数据类型必须是
TINYINT, SMALLINT, INT, BIGINT
。 - 如果在建表时
REPLACE_IF_NOT_NULL
列指定了 NOT NULL,那么 StarRocks 仍然会将其转化 NULL,不会向用户报错。用户可以借助这个类型完成「部分列导入」的功能。 该类型只对聚合表有用 (key_desc
的type
为AGGREGATE KEY
)。自 3.1.9 起,REPLACE_IF_NOT_NULL
新增支持 BITMAP 类型的列。
NULL | NOT NULL:列数据是否允许为 NULL
。其中明细表、聚合表和更新表中所有列都默认指定 NULL
。主键表的指标列默认指定 NULL
,维度列默认指定 NOT NULL