ClickHouse SQL Reference (四)数据类型

Tuple(T1, T2, …)

元素元组,每个元素都有一个单独的类型。元组必须至少包含一个元素

元组用于临时列分组。在查询中使用IN表达式时,以及指定lambda函数的某些形式参数时,可以对列进行分组。有关更多信息,请参阅IN操作符高阶函数部分。

元组可以是查询的结果。在这种情况下,对于JSON以外的文本格式,值在括号中以逗号分隔。在JSON格式中,元组作为数组输出(在方括号中)。

FixedString(N)

固定长度的N字节字符串(既不是字符也不是码点)。

要声明FixedString类型的列,请使用以下语法:

<column_name> FixedString(N)

Map(key, value)

Map(key, value) 数据类型存储 key:value 键值对。

Date

自1970-01-01以来的天数存储在两个字节中(unsigned)。允许在Unix时代开始后将值存储到编译阶段的常量(目前,这是在2149年之前,但最终完全支持的年份为2148)。

支持的取值范围:[1970-01-01,2149-06-06]

存储日期值时不带时区。

Date32

一个日期。支持与DateTime64相同的日期范围。以本机字节顺序存储为有符号32位整数,其值表示自1970-01-01以来的天数(0表示1970-01-01,负值表示1970年之前的天数)。

DateTime

允许存储瞬间的时间,可以表示为日历日期和一天的时间。

DateTime([timezone])

支持的取值范围:[1970-01-01 00:00:00,2106-02-07 06:28:15]

精度:1秒。

使用摘要

时间点被保存为Unix时间戳,与时区或夏令时无关。时区影响DateTime类型的值如何以文本格式显示,以及如何解析指定为字符串的值(’ 2020-01-01 05:00:01 ')

与时区无关的Unix时间戳存储在表中,时区用于在数据导入/导出期间将其转换为文本格式或返回文本格式,或者用于对值进行日历计算(例如:toDate, toHour函数等)。时区不存储在表的行中(或结果集中),而是存储在列元数据中

支持的时区列表可以在IANA时区数据库中找到,也可以通过SELECT * FROM system.time_zones查询。这份列表也可以在维基百科上找到。

在创建表时,可以显式地为DateTime类型列设置时区。例如:DateTime('UTC')。如果没有设置时区,ClickHouse将使用服务器设置或ClickHouse服务器启动时操作系统设置中的时区参数值。

如果在初始化数据类型时没有显式设置时区,则clickhouse-client默认应用服务器时区。要使用客户端时区,请使用--use_client_time_zone参数运行clickhouse-client

ClickHouse根据date_time_output_format设置的值输出值。默认为YYYY-MM-DD hh:mm:ss文本格式。此外,还可以使用formatDateTime函数更改输出。

在向ClickHouse插入数据时,可以根据date_time_input_format设置的值,使用不同格式的日期和时间字符串。

DateTime64

允许存储时间上的瞬间,可以表示为日历日期和一天的时间,具有定义的亚秒精度

精度大小(precision):10^-precision精度秒。取值范围:[0,9]。通常使用- 3(毫秒),6(微秒),9(纳秒)。

DateTime64(precision, [timezone])

在内部,将数据存储为自epoch start (1970-01-01 00:00:00 UTC)以来的一些’ ticks '作为Int64。刻度分辨率由precision参数决定。此外,DateTime64类型可以存储整个列相同的时区,这会影响DateTime64类型的值如何以文本格式显示,以及如何解析指定为字符串的值(’ 2020-01-01 05:00:01.000 ')。时区不存储在表的行中(或结果集中),而是存储在列元数据中。具体请参见DateTime

支持的取值范围:[1900-01-01 00:00:00,2299-12-31 23:59:59.99999999]

注:最大值精度为8。如果使用9位(纳秒)的最大精度,则支持的最大值为UTC时间的222-04-11 23:47:16

Enum

由命名值(named values)组成的枚举类型。

命名值可以声明为'string' = integer 对或'string'名称。ClickHouse仅存储数字,但支持通过名称对值进行操作。

ClickHouse支持:

  • 8 bit Enum。最多可以包含256个[- 128,127]范围内的枚举值。
  • 16-bit Enum。它最多可以包含65536个在[-32768,32767]范围内枚举的值。

ClickHouse在插入数据时自动选择Enum类型。您还可以使用Enum8Enum16类型来确定存储的大小。

用例

下面我们创建一个列类型为Enum8('hello' = 1, 'world' = 2)的表:

CREATE TABLE t_enum
(
    x Enum('hello' = 1, 'world' = 2)
)
ENGINE = TinyLog

类似地,您可以省略数字。ClickHouse将自动分配连续的数字。默认从1开始分配号码。

CREATE TABLE t_enum
(
    x Enum('hello', 'world')
)
ENGINE = TinyLog

您还可以为名字指定合法的起始编号。

CREATE TABLE t_enum
(
    x Enum('hello' = 1, 'world')
)
ENGINE = TinyLog

CREATE TABLE t_enum
(
    `x` Enum8('hello' = -129, 'world')
)
ENGINE = TinyLog

Query id: d68d56f5-1aa9-4d5b-8b34-a9dfef6b84a6


Elapsed: 0.287 sec. 

Received exception from server (version 24.2.1):
Code: 69. DB::Exception: Received from localhost:9000. DB::Exception: Value -129 for element 'hello' exceeds range of Enum8. (ARGUMENT_OUT_OF_BOUND)

x只能存储类型定义中列出的值:'hello''world'。如果您尝试保存任何其他值,ClickHouse将引发异常。自动选择此Enum的8位大小

INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello')
INSERT INTO t_enum FORMAT Values

Query id: b73e8f46-02e5-4196-832f-17f5353eecfe

Ok.
Exception on client:
Code: 691. DB::Exception: Unknown element 'a' for enum: while executing 'FUNCTION if(isNull(_dummy_0) : 3, defaultValueOfTypeName('Enum8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值