1.建表
正常按照如下语句进行建表,但会报错说缺少ORDER BY 或 PRIMARY KEY
sql
CREATE TABLE omds.a
(
`x` String COMMENT '',
`y` String COMMENT '',
`z` String
)
ENGINE = MergeTree();
若我们仅需建一个没有主键的表,直接使用如下建表语句即可:
sql
CREATE TABLE omds.a
(
`x` String COMMENT '',
`y` String COMMENT '',
`z` String
)
ENGINE = MergeTree()
ORDER BY tuple()
因为在 ClickHouse 中,ORDER BY tuple() 是用来定义表的主键的。tuple() 函数创建了一个空的元组,这意味着表没有主键,即使用 ORDER BY tuple() 可以避免定义不必要的主键。
在 ClickHouse 中,主键用于优化数据读取,如果表没有主键,那么在执行查询时可能需要全表扫描,这可能会影响查询性能。但有些情况下可能不需要主键,例如,如果我们的表是一个临时表或者数据量非常小。在这些情况下,使用 ORDER BY tuple() 可以避免定义不必要的主键。
若要设置主键,则可以先对主键进行PRIMARY KEY指定,再ORDER BY排序即可:
sql
CREATE TABLE omds.b
(
`x` String COMMENT '',
`y` String COMMENT '',
`z` String
)
ENGINE = MergeTree()
PRIMARY KEY x
ORDER BY x ;