如何在ClickHouse中实现自增?

10

我希望在每次插入时列具有唯一值。在SQL中,我们可以使用自增来实现这一点,在Clickhouse中,我们是否可以使用类似于自增或其他任何类型的功能来实现这个要求呢?由于我是Clickhouse的新手,所以可能会出现术语错误。


3
ClickHouse 中没有外键。它不是传统的关系型数据库。 - Tigran Saluev
2个回答

9

ClickHouse 中没有服务器提供的自增功能。

如其他答案所述,UUID 是可行的方法。

可以使用 generateUUIDv4()(请参见此处的文档链接

输出示例

SELECT generateUUIDv4();

插入时使用

INSERT INTO t VALUES (generateUUIDv4(), ...);

7

ClickHouse中没有像自动递增这样的功能。

如果您需要唯一值,请使用UUID。对于分布式系统,它比仅递增的值更有效

因此,您可以简单地生成随机Uint64并将其转换为UUID。

SELECT toUUID(rand64());

使用插入语句,代码将类似于以下内容。
INSERT INTO t VALUES (toUUID(rand64()), ...);

不起作用。错误信息为:DB::Exception: IN 或 VALUES 中的 set 元素不是常量表达式:toUUID。 - Sakezzz
@Sakezzz 刚刚测试了,可以运行。请提供更多信息,以便我能够帮助您。 - simPod
可能会在新版本中出现。 - Sakezzz
已在最新版本(2018年10月)进行了测试(不确定是哪个版本),现在在v20.12中进行测试。 - simPod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接