CREATE TABLE
注意事项
- PARTITION BY中出现的列不能出现在表的普通列描述中,分区列始终排在普通列的后面。
- PARTITION BY中支持的最大分区键数目是4。
- CLUSTERED BY语法适用范围:ORC、PARQUET
- PARTITION BY语法适用范围:ORC、PARQUET、Hudi、Iceberg
- 不支持用户将ctid、xc_node_id作为列名。
- 当前实现的表达式分区的主要约束,请参见约束与限制。
语法格式
1 2 3 4 5 6 7 8 9 | CREATE [ EXTERNAL ] TABLE [ IF NOT EXISTS ] [schema_name.]table_name [ ( col_name col_type [ COMMENT col_comment ] [, ... ] ) ] [ COMMENT table_comment ] [ PARTITION BY ( col_name col_type COMMENT col_comment | year(col_name) | month(col_name) | day(col_name) | hour(col_name)| truncate(width, col_name) | bucket(bucket_num, col_name)[, ... ] ) ] [ CLUSTERED BY (col_name [,...]) INTO ( bucket_num ) BUCKETS ] [ TABLEPROPERTIES ( option_key = option_value [, ... ] ) ] [ STORE AS table_format ] [ LOCATION table_path ] AS select_stmt; |
参数说明
- EXTERNAL
如果指定该关键字,则创建EXTERNAL表;如果无该关键字,则默认创建MANAGED表,文件,元数据和统计信息都由Aura管理。
- IF NOT EXISTS
如果存在同名表,则发出一个notice而不是抛出一个错误。
- schema_name
表所属的数据库名,如果未指定数据库名时,则将在current_schema下建表。
- table_name
创建表的表名,表名长度不可超过63个字符。
- col_name
创建表的列名,列名长度不可超过63个字符。普通列和分区列的数量总和不可超过5000个。
- col_type
创建表的列类型,列类型支持范围如下:
列类型
是否可以声明为分区列
是否支持ORC格式
是否支持PARQUET格式
是否支持Iceberg格式
是否支持Lance格式
SmallInt
√
√
√
√
√
Int
√
√
√
√
√
BigInt
√
√
√
√
√
Float
×
√
√
√
√
Double
×
√
√
√
√
Decimal
√
√
√
√
√
Numeric
√
√
√
√
√
Timestamp
√
√
√
√
√
Date
√
√
√
√
√
Varchar
√
√
√
√
√
Char
√
√
√
√
√
Bool
×
√
√
√
√
Bytea
×
√
√
√
√
Text
√
√
√
√
√
Array
×
√
√
√
√
Struct
×
√
√
√
√
- col_comment
列注释信息,可指定为任意字符串。
- table_comment
表注释信息,可指定为任意字符串。
- bucket_num
bucket个数。
- option_key = option_value
表级别参数设置,支持参数范围如下:
表1 option_key参数支持范围 option_key
option_value
说明
适用范围
orc.compress
zstd、snappy、lz4、uncompressed
ORC文件压缩方式。
ORC
orc.stripe.byte.size
整数,取值范围大于等于1000000
ORC文件stripe大小。
parquet.compression
zstd、snappy、lz4、uncompressed
PARQUET文件压缩方式。
PARQUET
parquet.compression-level
整数,取值范围为-131072~22
指定PARQUET表下次写入数据时的压缩方式。仅当使用zstd算法时,可以指定压缩等级,取值范围为-131072~22,默认值为1。
parquet.row.group.byte.size
整数,取值范围大于等于1000000
Parquet文件RowGroup大小。
parquet.page.size
整数
Parquet文件page大小。
parquet.dictionary.page.size
整数
Parquet文件字典大小。
julian_adjust
true、false
是否转换为Julian日期。
parquet.bloom.filter.enabled.column.col
true、false
col1列是否写入Bloom Filter索引。
checkencoding
high、low、no
是否检查字符编码。
ORC、PARQUET
column_index_access
true、false
读取时表定义列和文件列匹配方式,默认true为列索引匹配,false为列名匹配。
filesize
1~1024的整数
生成外表文件大小。
write.delete.mode
copy-on-write、merge-on-read
设置delete时的模式:cow或mor。
Iceberg
write.update.mode
copy-on-write、merge-on-read
设置update时的模式:cow或mor。
write.merge.mode
copy-on-write、merge-on-read
设置merge时的模式:cow或mor。
format-version
2,3
设置Iceberg表版本。
write.parquet.compression-codec
zstd、lz4、snappy、gzip、uncompressed
parquet文件的压缩方式。
write.parquet.compression-level
整数,取值范围为-131072~22
指定Iceberg表PARQUET文件下次以zstd算法压缩写入数据时的压缩等级。仅当使用zstd算法时,可以指定压缩等级,取值范围为-131072~22,默认为1。
当前此选项行为与Iceberg默认行为不一致时,Iceberg不支持的格式默认不生效且支持gzip指定压缩等级。
write.merge.isolation-level
snapshot、serializable
merge命令的隔离级别。
write.metadata.delete-after-commit.enabled
true、false
控制提交后是否删除最旧的跟踪版本元数据文件。
write.update.isolation-level
snapshot、serializable
update命令的隔离级别。
write.delete.isolation-level
snapshot、serializable
delete命令的隔离级别。
write.metadata.previous-versions-max
大于0的整数
要保留的旧元数据文件的数量。
write.parquet.bloom-filter-enabled.column.col1
true、false
col1列是否写入bloom filter索引。
metafile_location
metadata.json路径
创建External Iceberg表时,指定的metadata.json路径。
commit.retry.num-retries
大于0的整数
提交失败重试次数。
commit.retry.min-wait-ms
大于0的整数
提交失败最小等待时间。
commit.retry.max-wait-ms
大于0的整数
提交失败最大等待时间。
commit.retry.total-timeout-ms
大于0的整数
提交失败最长等待时间。
write.parquet.row-group-size-bytes
大于0的整数
Parquet文件RowGroup大小。
write.parquet.page-size-bytes
大于0的整数
Parquet文件页大小。
write.parquet.page-row-limit
大于0的整数
Parquet文件页最大行数。
write.parquet.dict-size-bytes
大于0的整数
Parquet文件字典大小。
write.parquet.bloom-filter-max-bytes
大于0的整数
布隆过滤器位集的最大字节数。
write.target-file-size-bytes
大于0的整数
Parquet文件大小。
write.delete.target-file-size-bytes
大于0的整数
delete文件大小。
write.format.default
parquet
Iceberg写入数据的格式,仅支持parquet。
header
true、false
CSV文件是否带有描述列名的header行。
CSV
separatorChar
单字节字符,不能是\r和\n
指定CSV数据文件行数据的字段分隔符,不指定则使用默认分隔符“,”。
quoteChar
单字节字符,不能与分隔符、null参数相同
用于设置将CSV格式数据源文件中什么字符识别为引号字符,缺省值为双引号。
escapeChar
单字节字符
用于指定CSV格式数据源文件中的逃逸字符,其缺省值与quoteChar相同。
field.delim
单字节字符,不能是\r和\n
指定TEXT数据文件行数据的字段分隔符,不指定则使用默认分隔符“|”。
TEXT
serialization.null.format
单字节字符
用来指定数据文件中空值的表示,缺省值是\n
escape.delim
单字节字符
用于指定TEXT格式数据源文件中的逃逸字符,其缺省值与quoteChar相同。
line.delim
单字节字符
指定数据文件换行符样式,默认\n。
enable.blob
true、false
指定该列使用BLOB存储。
Lance
arrow.fixed-size-list
整数,取值范围1~2147483647
指定该列存储为arrow中的FixedSizeList。
max.rows.per.file
整数,取值范围1~9223372036854775807
指定一个文件写入最大行数。
max.bytes.per.file
整数,取值范围1~9223372036854775807
指定一个文件写入最大字节数。
lance.encoding.compression
字符串,取值范围为zstd、lz4、fsst
指定Lance表下次写入数据时的压缩方式。当使用zstd算法时,可以指定压缩等级,取值范围为0~22,例如zstd:22。
lance.batch.readahead
整数,取值范围为1~9223372036854775807
指定预读的Batch数目。
lance.fragment.readahead
整数,取值范围为1~9223372036854775807
指定预读的Fragment数目。
lance.storage.version
字符串,取值范围为0.1、2.0、2.1、2.2
指定储存的Lance格式版本。
lance.block.size
整数,取值范围为1~34359738368
指定向存储层发起单次IO请求最小字节数。
metadata.cache.size
整数,取值范围为1~34359738368
指定元数据缓存大小字节数。
io.buffer.size
整数,取值范围为1~34359738368
指定IO缓冲区大小字节数。
index.cache.size
整数,取值范围为1~34359738368
指定索引缓存大小字节数。
- table_format
表存储格式,支持ORC、PARQUET、ICEBERG、TEXT、CSV、LANCE六种存储格式。
TEXT、CSV仅支持基础的数据导入导出,不支持高阶功能,例如分区、Analyze操作等;不建议作为数据存储、加工介质使用。
- table_path
表存储路径,必须为合法OBS路径,支持OBS对象桶和并行文件系统。如果该路径为OBS对象桶路径,则该表只读,否则该表支持读写。如果创建表类型为托管表(Managed Table),则不允许指定表存储路径,表存储路径由系统指定为Schema路径下与表名同名路径,且要求该路径在建表时为空。
- select_stmt
查询语句。外部表(External Table)不支持CTAS语句。
- table_format
示例
创建ORC表:
1 | CREATE TABLE test_table1 (a int, b bool, c text) store as orc; |
创建Iceberg表达式分区表示例,请参见创建表达式分区表。