更新时间:2026-10-16 GMT+08:00
分享

CREATE TABLE

功能描述

CREATE TABLE为Aura服务下特有语法,该语法功能是在LakeFormation上创建指定名称的表。

关于表达式分区表的详细说明,请参考表达式分区。

注意事项

  • 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

    √

    √

    √

    √

    √

    Timestamptz

    √

    √

    √

    √

    √

    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列是否写入BloomFilter索引。

    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

    单字节字符,不能是'\\.abcdefghijklmnopqrstuvwxyz0123456789'

    指定TEXT数据文件行数据的字段分隔符,不指定则使用默认分隔符“\t”。

    TEXT

    serialization.null.format

    单字节字符

    用来指定数据文件中空值的表示,缺省值是\n

    escape.delim

    单字节字符

    用于指定TEXT格式数据源文件中的逃逸字符,其缺省值与quoteChar相同。

    line.delim

    单字节字符

    指定数据文件换行符样式,默认\n。

    drop.empty.lines

    true、false

    是否丢弃文本中的空行或单行的\n 、\r、\t。

    fill_missing_fields

    true、false

    当行按照field.delim进行分隔时,是否在分隔结果小于列数时报错。

    ignore_extra_data

    true、false

    当行按照field.delim进行分隔时,是否在分隔结果多于列数时报错。

    skip.empty.files

    true、false

    是否读取内容为 '{}' 的JSON对象,默认为false。

    JSON

    nested.separator

    单字节字符,不能是#

    设置嵌套JSON key拼接分隔符,比如:设置'_'后,{"a":{"b":1}}映射到列a_b,列a_b值为1;默认不支持JSON嵌套读写。

    ignore.nul.fields

    true、false

    写入JSON对象时是否跳过值为NULL的key写入,默认为false。

    max.rows.per.file

    整数,取值范围1~9223372036854775807

    指定一个文件写入最大行数。

    Lance、TEXT、CSV、JSON

    enable.blob

    true、false

    指定该列使用BLOB存储。

    Lance

    arrow.fixed-size-list

    整数,取值范围1~2147483647

    指定该列存储为arrow中的FixedSizeList。

    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、JSON、CSV、LANCE七种存储格式。

      TEXT、JSON、CSV仅支持基础的数据导入导出,不支持高阶功能,例如分区、Analyze操作等;不建议作为数据存储、加工介质使用。

    • table_path

      表存储路径,必须为合法OBS路径,支持OBS对象桶和并行文件系统。如果该路径为OBS对象桶路径,则该表只读,否则该表支持读写。如果创建表类型为托管表(Managed Table),则不允许指定表存储路径,表存储路径由系统指定为Schema路径下与表名同名路径,且要求该路径在建表时为空。

    • select_stmt

      查询语句。外部表(External Table)不支持CTAS语句。

示例

创建ORC表:

1
CREATE TABLE test_table1 (a int, b bool, c text) store as orc;

创建Iceberg表达式分区表示例,请参见创建表达式分区表。

相关文档