create
CREATE DATABASE
该查询用于根据指定名称创建数据库。
CREATE DATABASE [IF NOT EXISTS] db_name
数据库其实只是用于存放表的一个目录。
如果查询中存在IF NOT EXISTS
,则当数据库已经存在时,该查询不会返回任何错误。
CREATE TABLE
对于CREATE TABLE
,存在以下几种方式。
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
) ENGINE = engine
在指定的’db’数据库中创建一个名为’name’的表,如果查询中没有包含’db’,则默认使用当前选择的数据库作为’db’。后面的是包含在括号中的表结构以及表引擎的声明。 其中表结构声明是一个包含一组列描述声明的组合。如果表引擎是支持索引的,那么可以在表引擎的参数中对其进行说明。
在最简单的情况下,列描述是指名称 类型
这样的子句。例如: RegionID UInt32
。
但是也可以为列另外定义默认值表达式(见后文)。
CREATE TABLE [IF NOT EXISTS] [db.]table_name AS [db2.]name2 [ENGINE = engine]
创建一个与db2.name2
具有相同结构的表,同时你可以对其指定不同的表引擎声明。如果没有表引擎声明,则创建的表将与db2.name2
使用相同的表引擎。
CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT ...
使用指定的引擎创建一个与SELECT
子句的结果具有相同结构的表,并使用SELECT
子句的结果填充它。
以上所有情况,如果指定了IF NOT EXISTS
,那么在该表已经存在的情况下,查询不会返回任何错误。在这种情况下,查询几乎不会做任何事情。
在ENGINE
子句后还可能存在一些其他的子句,更详细的信息可以参考 表引擎 中关于建表的描述。
默认值
在列描述中你可以通过以下方式之一为列指定默认表达式:DEFAULT expr
,MATERIALIZED expr
,ALIAS expr
。
示例:URLDomain String DEFAULT domain(URL)
。
如果在列描述中未定义任何默认表达式,那么系统将会根据类型设置对应的默认值,如:数值类型为零、字符串类型为空字符串、数组类型为空数组、日期类型为’1970-01-01’以及时间类型为 zero unix timestamp。
如果定义了默认表达式,则可以不定义列的类型。如果没有明确的定义类的类型,则使用默认表达式的类型。例如:EventDate DEFAULT toDate(EventTime)
- 最终’EventDate’将使用’Date’作为类型。