创建表
引入或更新: v1.2.339
COMPUTED COLUMN是企业版功能。 如需获取许可证,请联系 Databend 支持团队。
创建表是许多数据库中最复杂的操作之一,因为您可能需要:
- 手动指定引擎
- 手动指定索引
- 甚至指定数据分区或数据分片
Databend旨在通过设计变得易于使用,并且在创建表时不需要任何这些操作。此外,CREATE TABLE语句提供了这些选项,使您在各种场景下创建表变得更加容易:
- CREATE TABLE: 从头开始创建一个表。
- CREATE TABLE ... LIKE: 创建一个与现有表具有相同列定义的表。
- CREATE TABLE ... AS: 创建一个表并使用SELECT查询的结果插入数据。
- CREATE TRANSIENT TABLE: 创建一个不存储历史数据以进行时间回溯的表。
- CREATE TABLE ... EXTERNAL_LOCATION: 创建一个表并指定一个S3桶用于数据存储,而不是FUSE引擎。
CREATE TABLE
CREATE [ OR REPLACE ] [ TRANSIENT ] TABLE [ IF NOT EXISTS ] [ <database_name>. ]<table_name>
(
<column_name> <data_type> [ NOT NULL | NULL ]
[ { DEFAULT <expr> } ]
[ AS (<expr>) STORED | VIRTUAL ]
[ COMMENT '<comment>' ],
<column_name> <data_type> ...
...
)
备注
-
有关Databend中可用的数据类型,请参阅数据类型。
-
Databend建议在命名列时尽量避免使用特殊字符。然而,在某些情况下,如果需要使用特殊字符,别名应使用反引号括起来,例如:CREATE TABLE price(`$CA` int);
-
Databend会自动将列名转换为小写。例如,如果您将列命名为Total,它将在结果中显示为total。
CREATE TABLE ... LIKE
创建一个与现有表具有相同列定义的表。现有表的列名、数据类型及其非空约束将被复制到新表中。
语法:
CREATE TABLE [IF NOT EXISTS] [db.]table_name
LIKE [db.]origin_table_name
此命令不包括原始表中的任何数据或属性(如CLUSTER BY
、TRANSIENT
和COMPRESSION
),而是使用默认的系统设置创建一个新表。
解决方法
- 在使用此命令创建新表时,可以显式指定
TRANSIENT
和COMPRESSION
。例如,
create transient table t_new like t_old;
create table t_new compression='lz4' like t_old;
CREATE TABLE ... AS
创建一个表并使用SELECT命令计算的数据填充它。
语法:
CREATE TABLE [IF NOT EXISTS] [db.]table_name
AS SELECT query
此命令不包括原始表中的任何属性(如CLUSTER BY、TRANSIENT和COMPRESSION),而是使用默认的系统设置创建一个新表。
解决方法
- 在使用此命令创建新表时,可以显式指定
TRANSIENT
和COMPRESSION
。例如,
create transient table t_new as select * from t_old;
create table t_new compression='lz4' as select * from t_old;