ByteHouse CDW 为您提供自增 ID 函数generateSnowflakeID,可实现类似 MySQL 方言系统下 auto_increment 函数的自增 ID 效果,如果数据源无法提供 ID,或是需要直写的场景,ByteHouse 推荐您使用generateSnowflakeID函数。本文为您介绍自增函数的实现逻辑和使用方法。
ByteHouse CDW 的 ClickHouse 方言系统下,generateSnowflakeID函数基于 SnowflakeID 来提供自增、唯一的 ID(不保证连续和紧凑)。
MySQL 方言系统下,ByteHouse CDW 的默认会忽略 auto_increment 关键词,您可通过手动设置 set enable_auto_increment=1 可以打开。启用后,系统会在 DDL 中将 auto_increment 改写成generateSnowflakeID();您也可以手动将列的函数改成 generateSnowflakeID(),具体使用方法请参见下文使用方法。
注意
auto_increment 是 generateSnowflakeID 的改写,自增 ID 并不是从 1 开始的自增 ID,如1, 2, 3等,只能保证自增。generateSnowflakeID生成的序列,能保证递增和唯一,但不保证按序增长。SnowflakeID 的结构是一个 64 位的二进制数字(实际使用 63 位,以便适应有符号整数),组成如下:
SnowflakeID 是按时间排序的,因为它是基于生成时的时间。此外,可以从 SnowflakeID 中提取其生成时间,用于获取在特定日期之前或之后创建的 SnowflakeID(及其关联对象)。
命令格式
generateSnowflakeID();
命令说明
按照上文实现逻辑,返回一串十进制序列化后的自增 ID 数据。
使用示例
查询
SELECT generateSnowflakeID();
建表
ClickHouse方言系统:
set dialect_type='CLICKHOUSE'; CREATE TABLE t1(id Int64 DEFAULT generateSnowflakeID(), val1 String) Engine=CnchMergeTree() Order by id;
MySQL方言系统:
正确示例 | 错误示例 |
|---|---|
ByteHouse 引擎改写前:
ByteHouse 引擎改写后:
|
|
写入
正确示例 | 错误示例 |
|---|---|
|
|