Clickhouse 创建表查询抛出语法错误
Posted
技术标签:
【中文标题】Clickhouse 创建表查询抛出语法错误【英文标题】:Clickhouse create table query throwing syntax error 【发布时间】:2021-10-14 15:29:46 【问题描述】:我正在执行下面给出的查询,但它抛出了一个错误。我是 Clickhouse 的新手,您能帮我解决一下吗?
CREATE TABLE rapidTax.mutualFund (
`id` varchar(255),
`mutualFundId` varchar(255) DEFAULT NULL,
`date` date DEFAULT NULL,
`nav` float DEFAULT NULL,
INDEX mutualFundIdIndex mutualFundId,
INDEX dateIndex date
) ENGINE = MergeTree(),
PRIMARY KEY id
抛出错误:
代码:62。DB::Exception:语法错误:在位置 247 ('dateIndex') 失败(第 8 行,第 11 列):dateIndex 日期 ) 引擎 = MergeTree(), 主键 ID。预期之一:逗号、箭头、标记。 (SYNTAX_ERROR) (版本 21.9.4.35 (正式版))
【问题讨论】:
【参考方案1】:阅读文档。应该是
CREATE TABLE mutualFund (
`id` String,
`mutualFundId` Nullable(String) DEFAULT NULL,
`date` Nullable(Date) DEFAULT NULL,
`nav` Nullable(Float64) DEFAULT NULL,
INDEX mutualFundIdIndex(mutualFundId) TYPE bloom_filter GRANULARITY 3,
INDEX dateIndex date TYPE minmax GRANULARITY 1
)
ENGINE = MergeTree()
Partition by toYYYYMM(ifNull(date,toDate(0)))
ORDER BY id
PRIMARY KEY id
实际上它将无法使用。
使用这个
CREATE TABLE mutualFund (
`id` String,
`mutualFundId` LowCardinality(String),
`date` Date,
`nav` Nullable(Float64) DEFAULT NULL
)
ENGINE = MergeTree()
Partition by toYYYYMM(date)
ORDER BY (mutualFundId,date)
PRIMARY KEY (mutualFundId,date)
为字符串列存储空字符串而不是 Null。 为日期列存储 0(1970-01-01) 而不是 Null。
Clickhouse 中没有逆索引,但是有跳过索引和 orderby 投影。
PRIMARY KEY === 主索引(不是 KEY)。 CH 中没有唯一约束。
【讨论】:
以上是关于Clickhouse 创建表查询抛出语法错误的主要内容,如果未能解决你的问题,请参考以下文章
大数据ClickHouse(十五):ClickHouse SQL语法之DDL 操作讲解