更新时间:2026-07-03 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

    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语句。

示例

创建ORC表:

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

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

相关文档