跳到主要内容
跳到主要内容

操作UUID的函数

generateUUIDv4

生成一个 版本 4 UUID

语法

参数

  • expr — 一个任意的 表达式,用于在查询中多次调用该函数时绕过 常见子表达式消除。表达式的值对返回的UUID没有影响。可选。

返回值

UUIDv4 类型的值。

示例

首先,创建一个类型为 UUID 的列的表,然后将生成的 UUIDv4 插入到表中。

结果:

每行生成多个UUID的示例

generateUUIDv7

生成一个 版本 7 UUID

生成的UUID包含当前的Unix时间戳(毫秒,48位),后跟版本 "7"(4位),一个计数器(42位)用于区分毫秒内的UUID(包括变体字段 "2",2位),以及一个随机字段(32位)。 对于任何给定的时间戳(unix_ts_ms),计数器从一个随机值开始,并在每次生成新UUID时加1,直到时间戳改变。 如果计数器溢出,时间戳字段加1,计数器重置为一个新的随机起始值。

函数 generateUUIDv7 确保在并发运行的线程和查询中,时间戳内的计数器字段在所有函数调用中的增加是单调的。

备注

截至2024年4月,版本7的UUID处于草案状态,其布局可能会在未来发生改变。

语法

参数

  • expr — 一个任意的 表达式,用于在查询中多次调用该函数时绕过 常见子表达式消除。表达式的值对返回的UUID没有影响。可选。

返回值

UUIDv7 类型的值。

示例

首先,创建一个类型为 UUID 的列的表,然后将生成的 UUIDv7 插入到表中。

结果:

每行生成多个UUID的示例

empty

检查输入UUID是否为空。

语法

如果UUID包含所有零(零UUID),则视为 empty。

该函数也适用于 数组字符串

参数

  • x — UUID。 UUID

返回值

  • 对于空UUID返回 1,对于非空UUID返回 0UInt8

示例

要生成UUID值,ClickHouse提供了 generateUUIDv4 函数。

查询:

结果:

notEmpty

检查输入UUID是否非空。

语法

如果UUID包含所有零(零UUID),则视为 empty。

该函数也适用于 数组字符串

参数

  • x — UUID。 UUID

返回值

  • 对于非空UUID返回 1,对于空UUID返回 0UInt8

示例

要生成UUID值,ClickHouse提供了 generateUUIDv4 函数。

查询:

结果:

toUUID

将类型为字符串的值转换为UUID。

返回值

UUID类型的值。

使用示例

结果:

toUUIDOrDefault

参数

  • string — 36个字符的字符串或 FixedString(36)。 字符串
  • default — 如果第一个参数无法转换为UUID类型,则使用此UUID作为默认值。 UUID

返回值

UUID

返回值

UUID类型的值。

使用示例

第一个示例将返回第一个参数转换为UUID类型,因为可以转换:

结果:

第二个示例将返回第二个参数(提供的默认UUID),因为第一个参数无法转换为UUID类型:

结果:

toUUIDOrNull

接受字符串类型的参数,并尝试将其解析为UUID。如果失败,则返回NULL。

返回值

Nullable(UUID)类型的值。

使用示例

结果:

toUUIDOrZero

接受字符串类型的参数,并尝试将其解析为UUID。如果失败,则返回零UUID。

返回值

UUID类型的值。

使用示例

结果:

UUIDStringToNum

接受包含36个字符的 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 格式的 string,并返回 FixedString(16) 作为其二进制表示,格式可以由variant指明(默认是 Big-endian)。

语法

参数

  • string — 一个含有36个字符的 字符串FixedString
  • variant — 整数,表示由 RFC4122 指定的变体。1 = Big-endian(默认),2 = Microsoft

返回值

FixedString(16)

使用示例

结果:

结果:

UUIDNumToString

接受 binary,其包含UUID的二进制表示,格式可以由variant指明(默认是 Big-endian),并返回一个包含36个字符的文本格式字符串。

语法

参数

  • binaryFixedString(16),作为UUID的二进制表示。
  • variant — 整数,表示由 RFC4122 指定的变体。1 = Big-endian(默认),2 = Microsoft

返回值

字符串。

使用示例

结果:

结果:

UUIDToNum

接受一个 UUID,并将其二进制表示返回为 FixedString(16),格式可以由variant指明(默认是 Big-endian)。这个函数替代了两个独立调用的函数 UUIDStringToNum(toString(uuid)),因此无需从UUID到字符串的中间转换以提取UUID的字节。

语法

参数

  • uuidUUID
  • variant — 整数,表示由 RFC4122 指定的变体。1 = Big-endian(默认),2 = Microsoft

返回值

UUID的二进制表示。

使用示例

结果:

结果:

UUIDv7ToDateTime

返回UUID版本7的时间戳组件。

语法

参数

返回值

  • 具有毫秒精度的时间戳。如果UUID不是有效的版本7 UUID,则返回 1970-01-01 00:00:00.000。 DateTime64(3)

使用示例

结果:

结果:

serverUUID

返回在ClickHouse服务器首次启动时生成的随机UUID。UUID存储在ClickHouse服务器目录中的 uuid 文件中(例如 /var/lib/clickhouse/),并在服务器重启时保留。

语法

返回值

  • 服务器的UUID。 UUID

generateSnowflakeID

生成一个 Snowflake ID

生成的Snowflake ID包含当前的Unix时间戳(毫秒,41 + 1个顶部零位),后跟一个机器ID(10位),以及一个计数器(12位)以区分毫秒内的ID。 对于任何给定的时间戳(unix_ts_ms),计数器从0开始,并在每次生成新Snowflake ID时加1,直到时间戳变化。 如果计数器溢出,时间戳字段加1,计数器重置为0。

函数 generateSnowflakeID 确保在并发运行的线程和查询中,时间戳内的计数器字段在所有函数调用中的增加是单调的。

备注

生成的Snowflake ID基于UNIX纪元1970-01-01。 虽然Snowflake ID的纪元没有标准或建议,但其他系统中的实现可能使用不同的纪元,例如Twitter/X(2010-11-04)或Mastodon(2015-01-01)。

语法

参数

  • expr — 一个任意的 表达式,用于在查询中多次调用该函数时绕过 常见子表达式消除。表达式的值对返回的Snowflake ID没有影响。可选。
  • machine_id — 机器ID,使用最低的10位。 Int64。可选。

返回值

UInt64 类型的值。

示例

首先,创建一个类型为UInt64的列的表,然后将生成的Snowflake ID插入到表中。

结果:

每行生成多个Snowflake ID的示例

带有表达式和机器ID的示例

snowflakeToDateTime

Deprecated feature
危险

此函数已弃用,仅在设置 allow_deprecated_snowflake_conversion_functions 启用时可以使用。 该函数将在未来某个时候被移除。

提取 Snowflake ID 的时间戳组件,以 DateTime 格式返回。

语法

参数

  • value — Snowflake ID。 Int64
  • time_zone时区。该函数根据时区解析 time_string。可选。 字符串

返回值

  • value 的时间戳组件作为 DateTime 值。

示例

查询:

结果:

snowflakeToDateTime64

Deprecated feature
危险

此函数已弃用,仅在设置 allow_deprecated_snowflake_conversion_functions 启用时可以使用。 该函数将在未来某个时候被移除。

提取 Snowflake ID 的时间戳组件,以 DateTime64 格式返回。

语法

参数

  • value — Snowflake ID。 Int64
  • time_zone时区。该函数根据时区解析 time_string。可选。 字符串

返回值

  • value 的时间戳组件作为 DateTime64,其刻度 = 3,即毫秒精度。

示例

查询:

结果:

dateTimeToSnowflake

Deprecated feature
危险

此函数已弃用,仅在设置 allow_deprecated_snowflake_conversion_functions 启用时可以使用。 该函数将在未来某个时候被移除。

DateTime 值转换为给定时间的第一个 Snowflake ID

语法

参数

  • value — 带有时间的日期。 DateTime

返回值

  • 输入值转换为 Int64 数据类型,作为该时间的第一个Snowflake ID。

示例

查询:

结果:

dateTime64ToSnowflake

Deprecated feature
危险

此函数已弃用,仅在设置 allow_deprecated_snowflake_conversion_functions 启用时可以使用。 该函数将在未来某个时候被移除。

DateTime64 转换为给定时间的第一个 Snowflake ID

语法

参数

  • value — 带有时间的日期。 DateTime64

返回值

  • 输入值转换为 Int64 数据类型,作为该时间的第一个Snowflake ID。

示例

查询:

结果:

snowflakeIDToDateTime

返回 Snowflake ID 的时间戳组件,作为 DateTime 类型的值。

语法

参数

  • value — Snowflake ID。 UInt64
  • epoch - Snowflake ID的纪元,自1970-01-01以来的毫秒。默认为0(1970-01-01)。对于Twitter/X纪元(2015-01-01),提供1288834974657。可选。 UInt*
  • time_zone时区。该函数根据时区解析 time_string。可选。 字符串

返回值

  • value 的时间戳组件作为 DateTime 值。

示例

查询:

结果:

snowflakeIDToDateTime64

返回 Snowflake ID 的时间戳组件,作为 DateTime64 类型的值。

语法

参数

  • value — Snowflake ID。 UInt64
  • epoch - Snowflake ID的纪元,自1970-01-01以来的毫秒。默认为0(1970-01-01)。对于Twitter/X纪元(2015-01-01),提供1288834974657。可选。 UInt*
  • time_zone时区。该函数根据时区解析 time_string。可选。 字符串

返回值

  • value 的时间戳组件作为 DateTime64,其刻度 = 3,即毫秒精度。

示例

查询:

结果:

dateTimeToSnowflakeID

DateTime 值转换为给定时间的第一个 Snowflake ID

语法

参数

  • value — 带有时间的日期。 DateTime
  • epoch - Snowflake ID的纪元,自1970-01-01以来的毫秒。默认为0(1970-01-01)。对于Twitter/X纪元(2015-01-01),提供1288834974657。可选。 UInt*

返回值

  • 输入值转换为 UInt64,作为该时间的第一个Snowflake ID。

示例

查询:

结果:

dateTime64ToSnowflakeID

DateTime64 转换为给定时间的第一个 Snowflake ID

语法

参数

  • value — 带有时间的日期。 DateTime64
  • epoch - Snowflake ID的纪元,自1970-01-01以来的毫秒。默认为0(1970-01-01)。对于Twitter/X纪元(2015-01-01),提供1288834974657。可选。 UInt*

返回值

  • 输入值转换为 UInt64,作为该时间的第一个Snowflake ID。

示例

查询:

结果:

另见