创建表

概要

CREATE TABLE [ IF NOT EXISTS ]
table_name (
  { column_name data_type [NOT NULL] [ COMMENT comment ] [ WITH ( property_name = expression [, ...] ) ]
  | LIKE existing_table_name [ { INCLUDING | EXCLUDING } PROPERTIES ]
  | [ CONSTRAINT constraint_name ] { PRIMARY KEY | UNIQUE } ( { column_name [, ...] } ) [ { ENABLED | DISABLED } ] [ [ NOT ] RELY ] [ [ NOT ] ENFORCED ] }
  [, ...]
)
[ COMMENT table_comment ]
[ WITH ( property_name = expression [, ...] ) ]

描述

创建一个新的、空表,其中包含指定的列。 使用 CREATE TABLE AS 创建包含数据的表。

可选的 IF NOT EXISTS 子句会使表已存在时产生的错误被抑制。

可选的 WITH 子句可用于在新建表或单个列上设置属性。 要列出所有可用的表属性,请运行以下查询

SELECT * FROM system.metadata.table_properties

要列出所有可用的列属性,请运行以下查询

SELECT * FROM system.metadata.column_properties

可以使用 LIKE 子句将现有表中的所有列定义包含到新表中。 可以指定多个 LIKE 子句,这允许从多个表复制列。

如果指定了 INCLUDING PROPERTIES,则所有表属性都会复制到新表。 如果 WITH 子句指定了与复制属性相同的属性名称,则将使用来自 WITH 子句的值。 默认行为是 EXCLUDING PROPERTIES。 最多可以为一个表指定 INCLUDING PROPERTIES 选项。

示例

创建一个新表 orders

CREATE TABLE orders (
  orderkey bigint,
  orderstatus varchar,
  totalprice double,
  orderdate date
)
WITH (format = 'ORC')

如果表 orders 不存在,则创建它,添加表注释、列注释,对列 orderstatus 添加非空约束,以及对列 orderkey 添加主键约束

CREATE TABLE IF NOT EXISTS orders (
  orderkey bigint,
  orderstatus varchar NOT NULL,
  totalprice double COMMENT 'Price in cents.',
  orderdate date,
  PRIMARY KEY (orderkey)
)
COMMENT 'A table to keep track of orders.'

使用来自 orders 的列以及在开头和结尾添加其他列来创建表 bigger_orders

CREATE TABLE bigger_orders (
  another_orderkey bigint,
  LIKE orders,
  another_orderdate date
)

另请参阅

ALTER TABLE, DROP TABLE, CREATE TABLE AS, SHOW CREATE TABLE