From 9aa6c7053f71df9d393d67153a094b0117f60d90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E7=A3=8A?= <2217232293@qq.com> Date: Fri, 19 Oct 2018 16:02:26 +0800 Subject: [PATCH] finish dataTypes zh translate (#3417) * add dataTypes zh translate --> init docs * add dataTypes zh translate * finish dataTypes zh translate * fix punctuation in dataTypes zh translate --- docs/zh/data_types/array.md | 84 ++++++++++++- docs/zh/data_types/boolean.md | 6 +- docs/zh/data_types/date.md | 7 +- docs/zh/data_types/datetime.md | 17 ++- docs/zh/data_types/decimal.md | 43 +++---- docs/zh/data_types/enum.md | 114 +++++++++++++++--- docs/zh/data_types/fixedstring.md | 8 +- docs/zh/data_types/float.md | 88 +++++++------- docs/zh/data_types/index.md | 4 +- docs/zh/data_types/int_uint.md | 3 - .../aggregatefunction.md | 2 - .../nested_data_structures/index.md | 5 +- .../nested_data_structures/nested.md | 8 +- docs/zh/data_types/nullable.md | 16 ++- .../special_data_types/expression.md | 4 +- .../zh/data_types/special_data_types/index.md | 4 +- .../data_types/special_data_types/nothing.md | 9 +- docs/zh/data_types/special_data_types/set.md | 3 +- docs/zh/data_types/string.md | 8 +- docs/zh/data_types/tuple.md | 18 +-- 20 files changed, 288 insertions(+), 163 deletions(-) diff --git a/docs/zh/data_types/array.md b/docs/zh/data_types/array.md index 155d32500da..0dc89baf3c7 100644 --- a/docs/zh/data_types/array.md +++ b/docs/zh/data_types/array.md @@ -1,8 +1,84 @@ -# Array(T) +# Array(T) -一个包含类型 T 的 数组(Array)。T 类型可以是任意类型,包括数组类型。 -我们不推荐使用多维数组,因为多维数组并没有得到很好支持(比如,不能在 MergeTree 引擎的表中存储多维数组)。 +由 `T` 类型元素组成的数组。 -[来源文章](https://clickhouse.yandex/docs/en/data_types/array/) \ No newline at end of file +`T` 可以是任意类型,包含数组类型。不推荐使用多维数组,ClickHouse 对多维数组的支持有限。例如,不能存储在 `MergeTree` 表中存储多维数组。 + +## 创建数组 + +您可以使用一个函数创建数组: + +``` +array(T) +``` + +您也可以使用方括号: + +``` +[] +``` + +创建数组示例: + +``` +:) SELECT array(1, 2) AS x, toTypeName(x) + +SELECT + [1, 2] AS x, + toTypeName(x) + +┌─x─────┬─toTypeName(array(1, 2))─┐ +│ [1,2] │ Array(UInt8) │ +└───────┴─────────────────────────┘ + +1 rows in set. Elapsed: 0.002 sec. + +:) SELECT [1, 2] AS x, toTypeName(x) + +SELECT + [1, 2] AS x, + toTypeName(x) + +┌─x─────┬─toTypeName([1, 2])─┐ +│ [1,2] │ Array(UInt8) │ +└───────┴────────────────────┘ + +1 rows in set. Elapsed: 0.002 sec. +``` + +## 使用数据类型 + +当动态创建数组时,ClickHouse 自动将参数类型定义为可以存储所有列出的参数的最窄的数据类型。如果存在任何 [NULL](../query_language/syntax.md#null-literal) 或者 [Nullable](nullable.md#data_type-nullable) 类型参数,那么数组元素的类型是 [Nullable](nullable.md#data_type-nullable)。 + +如果 ClickHouse 无法确定数据类型,它将产生异常。当尝试同时创建一个包含字符串和数字的数组时会发生这种情况 (`SELECT array(1, 'a')`)。 + +自动数据类型检测示例: + +``` +:) SELECT array(1, 2, NULL) AS x, toTypeName(x) + +SELECT + [1, 2, NULL] AS x, + toTypeName(x) + +┌─x──────────┬─toTypeName(array(1, 2, NULL))─┐ +│ [1,2,NULL] │ Array(Nullable(UInt8)) │ +└────────────┴───────────────────────────────┘ + +1 rows in set. Elapsed: 0.002 sec. +``` + +如果您尝试创建不兼容的数据类型数组,ClickHouse 将引发异常: + +``` +:) SELECT array(1, 'a') + +SELECT [1, 'a'] + +Received exception from server (version 1.1.54388): +Code: 386. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: There is no supertype for types UInt8, String because some of them are String/FixedString and some of them are not. + +0 rows in set. Elapsed: 0.246 sec. +``` diff --git a/docs/zh/data_types/boolean.md b/docs/zh/data_types/boolean.md index 26485028358..3a71691cdf4 100644 --- a/docs/zh/data_types/boolean.md +++ b/docs/zh/data_types/boolean.md @@ -1,5 +1,3 @@ -# Boolean values +# Boolean Values -没有单独的类型来存储 boolean 值。可以使用 UInt8 类型,取值限制为 0 或 1。 - -[来源文章](https://clickhouse.yandex/docs/en/data_types/boolean/) +没有单独的类型来存储布尔值。可以使用 UInt8 类型,取值限制为 0 或 1。 diff --git a/docs/zh/data_types/date.md b/docs/zh/data_types/date.md index 39475a6558a..42fb124af9c 100644 --- a/docs/zh/data_types/date.md +++ b/docs/zh/data_types/date.md @@ -1,8 +1,5 @@ # Date -Date 用两个字节来存储从 1970-01-01 到现在的日期值(无符号的值)。Date 允许存储的值 UNIX 纪元开始后的时间值,这个值上限会在编译阶段作为一个常量存储(当前只能到 2038 年,但可以拓展到 2106 年)。 -Date 最小的值为 0000-00-00 00:00:00。 +日期类型,用两个字节存储,表示从 1970-01-01 (无符号) 到当前的日期值。允许存储从 Unix 纪元开始到编译阶段定义的上限阈值常量(目前上限是2106年,但最终完全支持的年份为2105)。最小值输出为0000-00-00。 -Date 中没有存储时区信息。 - -[来源文章](https://clickhouse.yandex/docs/en/data_types/date/) +日期中没有存储时区信息。 diff --git a/docs/zh/data_types/datetime.md b/docs/zh/data_types/datetime.md index 4cf8661e218..4a5a8095f0a 100644 --- a/docs/zh/data_types/datetime.md +++ b/docs/zh/data_types/datetime.md @@ -1,16 +1,13 @@ + + # DateTime -包含时间和日期。用4个字节来存储 Unix 时间戳(无符号的值)。允许存储的时间范围同 Date 类型。最小的值为 0000-00-00 00:00:00。 -DateTime 类型值精确到秒(不考虑闰秒) +时间戳类型。用四个字节存储 Unix 时间戳(无符号的)。允许存储与日期类型相同的范围内的值。最小值为 0000-00-00 00:00:00。时间戳类型值精确到秒(没有闰秒)。 -## Time zones +## 时区 -在客户端或服务器启动时,会使用系统的时区来将时间日期从文本(划分成多个部分)到二进制之间相互转化。在文本格式中,有关夏令时信息不作存储。 +使用启动客户端或服务器时的系统时区,时间戳是从文本(分解为组件)转换为二进制并返回。在文本格式中,有关夏令时的信息会丢失。 -默认情况下,客户端连接到服务的时候会使用服务端时区。可以通过客户端命令行参数 `--use_client_time_zone` 来设置使用客户端时区。 +默认情况下,客户端连接到服务的时候会使用服务端时区。您可以通过启用客户端命令行选项 `--use_client_time_zone` 来设置使用客户端时间。 -在所有的时区内,只支持部分与UTC相差整数小时(不考虑闰秒)的时区。 - -因此,在处理文本日期时(例如,在保存文本转储时),请记住在夏时制期间可能会出现歧义,如果时区发生变化,可能会出现与数据匹配的问题。 - -[来源文章](https://clickhouse.yandex/docs/en/data_types/datetime/) +因此,在处理文本日期时(例如,在保存文本转储时),请记住在夏令时更改期间可能存在歧义,如果时区发生更改,则可能存在匹配数据的问题。 diff --git a/docs/zh/data_types/decimal.md b/docs/zh/data_types/decimal.md index a18394409fd..373543c2c2e 100644 --- a/docs/zh/data_types/decimal.md +++ b/docs/zh/data_types/decimal.md @@ -2,17 +2,17 @@ # Decimal(P, S), Decimal32(S), Decimal64(S), Decimal128(S) -有符号的定点数,在进行加减乘操作的过程中都会保留精度。对于除法,最低有效数字被丢弃(不舍入)。 +有符号的定点数,可在加、减和乘法运算过程中保持精度。对于除法,最低有效数字会被丢弃(不舍入)。 ## 参数 -- P - 精度。范围值: [ 1 : 38 ],决定可以有多少个十进制数字(包括分数)。 -- S - 范围。范围值: [ 0 : P ],决定小数的位数。 +- P - 精度。有效范围:[1:38],决定可以有多少个十进制数字(包括分数)。 +- S - 规模。有效范围:[0:P],决定数字的小数部分中包含的小数位数。 对于不同的 P 参数值 Decimal 表示,以下例子都是同义的: -- [ 1 : 9 ] 的 P - for Decimal32(S) -- [ 10 : 18 ] 的 P - for Decimal64(S) -- [ 19 : 38 ] 的 P - for Decimal128(S) +- P from [ 1 : 9 ] - for Decimal32(S) +- P from [ 10 : 18 ] - for Decimal64(S) +- P from [ 19 : 38 ] - for Decimal128(S) ## 十进制值范围 @@ -20,38 +20,37 @@ - Decimal64(S) - ( -1 * 10^(18 - S), 1 * 10^(18 - S) ) - Decimal128(S) - ( -1 * 10^(38 - S), 1 * 10^(38 - S) ) -例如, Decimal32(4) 可以表示 -99999.9999 到 99999.9999 范围内步数为 0.0001 的值。 +例如,Decimal32(4) 可以表示 -99999.9999 至 99999.9999 的数值,步长为0.0001。 ## 内部表示方式 数据采用与自身位宽相同的有符号整数存储。这个数在内存中实际范围会高于上述范围,从 String 转换到十进制数的时候会做对应的检查。 -Decimal32/Decimal64 通常处理速度要高于Decimal128,这是因为当前通用CPU不支持128位的操作导致的。 +由于现代CPU不支持128位数字,因此 Decimal128 上的操作由软件模拟。所以 Decimal128 的运算速度明显慢于 Decimal32/Decimal64。 -## 运算以及结果的类型 +## 运算和结果类型 -对Decimal的二进制运算导致更宽的结果类型(具有任何参数顺序)。 +对Decimal的二进制运算导致更宽的结果类型(无论参数的顺序如何)。 - Decimal64(S1) Decimal32(S2) -> Decimal64(S) - Decimal128(S1) Decimal32(S2) -> Decimal128(S) - Decimal128(S1) Decimal64(S2) -> Decimal128(S) -精度变化的规则: +精度变化的规则: -- 加,减: S = max(S1, S2). -- 相乘: S = S1 + S2. -- 相除:S = S1. +- 加法,减法:S = max(S1, S2)。 +- 乘法:S = S1 + S2。 +- 除法:S = S1。 -对于 Decimal 和整数之间的类似操作,结果为一样参数值的 Decimal。 +对于 Decimal 和整数之间的类似操作,结果是与参数大小相同的十进制。 -没有定义 Decimal 和 Float32/Float64 的操作。如果你真的需要他们,你可以某一个参数明确地转换为 toDecimal32,toDecimal64, toDecimal128 或 toFloat32, toFloat64。注意这个操作会丢失精度,并且类型转换是一个代价昂贵的操作。 - -有一些函数对 Decimal 进行操作后是返回 Float64 的(例如,var 或 stddev)。计算的结果可能仍在 Decimal 中执行,这可能导致 Float64 和具有相同值的 Decimal 输入计算后的结果不同。 +未定义Decimal和Float32/Float64之间的函数。要执行此类操作,您可以使用:toDecimal32、toDecimal64、toDecimal128 或 toFloat32,toFloat64,需要显式地转换其中一个参数。注意,结果将失去精度,类型转换是昂贵的操作。 +Decimal上的一些函数返回结果为Float64(例如,var或stddev)。对于其中一些,中间计算发生在Decimal中。对于此类函数,尽管结果类型相同,但Float64和Decimal中相同数据的结果可能不同。 ## 溢出检查 -在对 Decimal 计算的过程中,数值会有可能溢出。分数中的过多数字被丢弃(不是舍入的)。 整数中的过多数字将导致异常。 +在对 Decimal 类型执行操作时,数值可能会发生溢出。分数中的过多数字被丢弃(不是舍入的)。整数中的过多数字将导致异常。 ``` SELECT toDecimal32(2, 4) AS x, x / 3 @@ -76,7 +75,7 @@ SELECT toDecimal32(4.2, 8) AS x, 6 * x DB::Exception: Decimal math overflow. ``` -溢出检查会导致操作减慢。 如果已知溢出不可能,则使用`decimal_check_overflow`设置禁用检查是有意义的。 禁用检查并发生溢出时,结果将不正确: +检查溢出会导致计算变慢。如果已知溢出不可能,则可以通过设置`decimal_check_overflow`来禁用溢出检查,在这种情况下,溢出将导致结果不正确: ``` SET decimal_check_overflow = 0; @@ -88,7 +87,7 @@ SELECT toDecimal32(4.2, 8) AS x, 6 * x └────────────┴──────────────────────────────────┘ ``` -溢出检查不仅会在数学运算中进行,还会在值比较中进行: +溢出检查不仅发生在算术运算上,还发生在比较运算上: ``` SELECT toDecimal32(1, 8) < 100 @@ -96,5 +95,3 @@ SELECT toDecimal32(1, 8) < 100 ``` DB::Exception: Can't compare. ``` - -[来源文章](https://clickhouse.yandex/docs/en/data_types/decimal/) diff --git a/docs/zh/data_types/enum.md b/docs/zh/data_types/enum.md index 48ab4e0d130..5a4347aeb9a 100644 --- a/docs/zh/data_types/enum.md +++ b/docs/zh/data_types/enum.md @@ -1,34 +1,116 @@ -# Enum + -`Enum8` 或者 `Enum16`。 一组有限的字符串值,比 `String` 类型的存储更加有效。 +# Enum8, Enum16 -示例: +包括 `Enum8` 和 `Enum16` 类型。`Enum` 保存 `'string'= integer` 的对应关系。在 ClickHouse 中,尽管用户使用的是字符串常量,但所有含有 `Enum` 数据类型的操作都是按照包含整数的值来执行。这在性能方面比使用 `String` 数据类型更有效。 -```text -Enum8('hello' = 1, 'world' = 2) +- `Enum8` 用 `'String'= Int8` 对描述。 +- `Enum16` 用 `'String'= Int16` 对描述。 + +## 用法示例 + +创建一个带有一个枚举 `Enum8('hello' = 1, 'world' = 2)` 类型的列: + +``` +CREATE TABLE t_enum +( + x Enum8('hello' = 1, 'world' = 2) +) +ENGINE = TinyLog ``` -- 一个类型可以表示两个值: 'hello' and 'world'。 +这个 `x` 列只能存储类型定义中列出的值:`'hello'`或`'world'`。如果您尝试保存任何其他值,ClickHouse 抛出异常。 + +``` +:) INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello') + +INSERT INTO t_enum VALUES + +Ok. + +3 rows in set. Elapsed: 0.002 sec. + +:) insert into t_enum values('a') + +INSERT INTO t_enum VALUES + + +Exception on client: +Code: 49. DB::Exception: Unknown element 'a' for type Enum8('hello' = 1, 'world' = 2) +``` + +当您从表中查询数据时,ClickHouse 从 `Enum` 中输出字符串值。 + +``` +SELECT * FROM t_enum + +┌─x─────┐ +│ hello │ +│ world │ +│ hello │ +└───────┘ +``` + +如果需要看到对应行的数值,则必须将 `Enum` 值转换为整数类型。 + +``` +SELECT CAST(x, 'Int8') FROM t_enum + +┌─CAST(x, 'Int8')─┐ +│ 1 │ +│ 2 │ +│ 1 │ +└─────────────────┘ +``` + +在查询中创建枚举值,您还需要使用 `CAST`。 + +``` +SELECT toTypeName(CAST('a', 'Enum8(\'a\' = 1, \'b\' = 2)')) + +┌─toTypeName(CAST('a', 'Enum8(\'a\' = 1, \'b\' = 2)'))─┐ +│ Enum8('a' = 1, 'b' = 2) │ +└──────────────────────────────────────────────────────┘ +``` + +## 规则及用法 `Enum8` 类型的每个值范围是 `-128 ... 127`,`Enum16` 类型的每个值范围是 `-32768 ... 32767`。所有的字符串或者数字都必须是不一样的。允许存在空字符串。如果某个 Enum 类型被指定了(在表定义的时候),数字可以是任意顺序。然而,顺序并不重要。 -(译者注:如 `Enum8('he o' = 3, 'wld' = 1)` 也是合法的) -在内存中,Enum 类型当做 `Int8` or `Int16` 对应的数值来存储。 -当以文本方式读取的时候,ClickHouse 将值解析成字符串然后去 Enum 值的集合中搜索对应字符串。如果没有找到,会抛出异常。当读取文本格式的时候,会根据读取到的字符串去找对应的数值。如果没有找到,会抛出异常。 +`Enum` 中的字符串和数值都不能是 [NULL](../query_language/syntax.md#null-literal)。 -当以文本方式写入的时候,ClickHouse 将值解析成字符串写入。如果 column 数据包含垃圾(不是从有用集合含有的数值),会抛弃异常。Enum 类型以二进制读取和写入的方式与 Int8 和 Int16 类型一样的。 -隐式默认值是对应类型的最小值。 +`Enum` 包含在 [Nullable](nullable.md#data_type-nullable) 类型中。因此,如果您使用此查询创建一个表 -在 `ORDER BY`, `GROUP BY`, `IN`, `DISTINCT` 中,Enums 和对应数值是一样的工作方式。比如, ORDER BY 会将它们按数值排序。对 Enums 类型使用相同和比较操作符都与操作它们隐含的数值是一样的。 +``` +CREATE TABLE t_enum_nullable +( + x Nullable( Enum8('hello' = 1, 'world' = 2) ) +) +ENGINE = TinyLog +``` -Enum 值不能和数值比较大小。Enums 可以和一个常量字符串比较大小。如果字符串不是一个可用的 Enum 值,会抛出异常。可以使用 IN 运算符来判断一个 Enum 是否存在于某个 Enum 集合中,其中集合中的 Enum 需要用字符串表示。 +不仅可以存储 `'hello'` 和 `'world'` ,还可以存储 `NULL`。 -大部分数字运算和字符串运算都没有给 Enum 类型定义,比如,Enum 类型不能和一个数相加,或进行字符串连接的操作,但是可以通过 toString 方法返回它对应的字符串。 +``` +INSERT INTO t_enum_null Values('hello'),('world'),(NULL) +``` + +在内存中,`Enum` 列的存储方式与相应数值的 `Int8` 或 `Int16` 相同。 + +当以文本方式读取的时候,ClickHouse 将值解析成字符串然后去枚举值的集合中搜索对应字符串。如果没有找到,会抛出异常。当读取文本格式的时候,会根据读取到的字符串去找对应的数值。如果没有找到,会抛出异常。 + +当以文本形式写入时,ClickHouse 将值解析成字符串写入。如果列数据包含垃圾数据(不是来自有效集合的数字),则抛出异常。Enum 类型以二进制读取和写入的方式与 `Int8` 和 `Int16` 类型一样的。 + +隐式默认值是数值最小的值。 + +在 `ORDER BY`,`GROUP BY`,`IN`,`DISTINCT` 等等中,Enum 的行为与相应的数字相同。例如,按数字排序。对于等式运算符和比较运算符,Enum 的工作机制与它们在底层数值上的工作机制相同。 + +枚举值不能与数字进行比较。枚举可以与常量字符串进行比较。如果与之比较的字符串不是有效Enum值,则将引发异常。可以使用 IN 运算符来判断一个 Enum 是否存在于某个 Enum 集合中,其中集合中的 Enum 需要用字符串表示。 + +大多数具有数字和字符串的运算并不适用于Enums;例如,Enum 类型不能和一个数值相加。但是,Enum有一个原生的 `toString` 函数,它返回它的字符串值。 Enum 值使用 `toT` 函数可以转换成数值类型,其中 T 是一个数值类型。若 `T` 恰好对应 Enum 的底层数值类型,这个转换是零消耗的。 Enum 类型可以被 `ALTER` 无成本地修改对应集合的值。可以通过 `ALTER` 操作来增加或删除 Enum 的成员(只要表没有用到该值,删除都是安全的)。作为安全保障,改变之前使用过的 Enum 成员将抛出异常。 通过 `ALTER` 操作,可以将 `Enum8` 转成 `Enum16`,反之亦然,就像 `Int8` 转 `Int16`一样。 - -[来源文章](https://clickhouse.yandex/docs/en/data_types/enum/) diff --git a/docs/zh/data_types/fixedstring.md b/docs/zh/data_types/fixedstring.md index 1d8a4982e48..050f0a582a2 100644 --- a/docs/zh/data_types/fixedstring.md +++ b/docs/zh/data_types/fixedstring.md @@ -1,9 +1,9 @@ # FixedString(N) 固定长度 N 的字符串。N 必须是严格的正自然数。 -当服务端读取长度小于 N 的字符串时候(譬如解析插入的数据),字符串通过在末尾添加空字节来达到 N 字节长度。 -当服务端读取长度大于 N 的字符串时候,会返回一个错误。 -当服务端写入一个字符串的时候(譬如写入数据到 SELECT 查询结果中),末尾的空字节会被修剪掉。 +当服务端读取长度小于 N 的字符串时候(例如解析 INSERT 数据时),通过在字符串末尾添加空字节来达到 N 字节长度。 +当服务端读取长度大于 N 的字符串时候,将返回错误消息。 +当服务器写入一个字符串(例如,当输出 SELECT 查询的结果)时,NULL字节不会从字符串的末尾被移除,而是被输出。 注意这种方式与 MYSQL 的 CHAR 类型是不一样的(MYSQL 的字符串会以空格填充,然后输出的时候空格会被修剪)。 -很少函数会使用 `FixedString(N)` 来代替 `String`,因此它并不是很方便。 +与 `String` 类型相比,极少的函数会使用 `FixedString(N)`,因此使用起来不太方便。 diff --git a/docs/zh/data_types/float.md b/docs/zh/data_types/float.md index 6fb6b9eec40..f66cb698365 100644 --- a/docs/zh/data_types/float.md +++ b/docs/zh/data_types/float.md @@ -2,71 +2,71 @@ [浮点数](https://en.wikipedia.org/wiki/IEEE_754)。 -类型与以下 C 类型是相同的: +类型与以下 C 语言中类型是相同的: - `Float32` - `float` -- `Float64` - ` double` +- `Float64` - `double` -我们建议,如果可能的话尽量用整形来存储数据。比如,将一定精度的浮点数转换成整形,譬如货币金额或者毫秒单位的加载时间。 +我们建议您尽可能以整数形式存储数据。例如,将固定精度的数字转换为整数值,例如货币数量或页面加载时间用毫秒为单位表示 ## 使用浮点数 - 对浮点数进行计算可能引起四舍五入的误差。 - ```sql - SELECT 1 - 0.9 - ``` +```sql +SELECT 1 - 0.9 +``` - ``` - ┌───────minus(1, 0.9)─┐ - │ 0.09999999999999998 │ - └─────────────────────┘ - ``` +``` +┌───────minus(1, 0.9)─┐ +│ 0.09999999999999998 │ +└─────────────────────┘ +``` -- 计算的结果取决于计算方式(处理器类型和计算机系统架构) +- 计算的结果取决于计算方法(计算机系统的处理器类型和体系结构) -- 浮点数计算可能出现这样的结果,比如 "infinity" (`Inf`) 和 "not-a-number" (`NaN`)。对浮点数计算的时候应该考虑到这点。 +- 浮点计算结果可能是诸如无穷大(`INF`)和"非数字"(`NaN`)。对浮点数计算的时候应该考虑到这点。 - 当一行行阅读浮点数的时候,浮点数的结果可能不是机器最近显示的数值。 -## NaN 和 Inf +## NaN and Inf -相比于 SQL,ClickHouse 支持以下几种浮点数分类: +与标准SQL相比,ClickHouse 支持以下类别的浮点数: -- `Inf` – 正无穷。 +- `Inf` – 正无穷 - ```sql - SELECT 0.5 / 0 - ``` +```sql +SELECT 0.5 / 0 +``` - ``` - ┌─divide(0.5, 0)─┐ - │ inf │ - └────────────────┘ - ``` -- `-Inf` – 负无穷。 +``` +┌─divide(0.5, 0)─┐ +│ inf │ +└────────────────┘ +``` - ```sql - SELECT -0.5 / 0 - ``` +- `-Inf` – 负无穷 - ``` - ┌─divide(-0.5, 0)─┐ - │ -inf │ - └─────────────────┘ - ``` -- `NaN` – 非数字。 +```sql +SELECT -0.5 / 0 +``` - ``` - SELECT 0 / 0 - ``` +``` +┌─divide(-0.5, 0)─┐ +│ -inf │ +└─────────────────┘ +``` - ``` - ┌─divide(0, 0)─┐ - │ nan │ - └──────────────┘ - ``` +- `NaN` – 非数字 + +``` +SELECT 0 / 0 +``` + +``` +┌─divide(0, 0)─┐ +│ nan │ +└──────────────┘ +``` 可以在[ORDER BY 子句](../query_language/select.md#query_language-queries-order_by) 查看更多关于 ` NaN` 排序的规则。 - -[来源文章](https://clickhouse.yandex/docs/en/data_types/float/) diff --git a/docs/zh/data_types/index.md b/docs/zh/data_types/index.md index 785216a22a9..42fc574aa2e 100644 --- a/docs/zh/data_types/index.md +++ b/docs/zh/data_types/index.md @@ -4,6 +4,4 @@ ClickHouse 可以在数据表中存储多种数据类型。 -本节将描述 ClickHouse 支持的数据类型以及在使用 与/或 运算实现他们时候的特殊考虑(如果有)。 - -[来源文章](https://clickhouse.yandex/docs/en/data_types/) +本节描述 ClickHouse 支持的数据类型,以及使用或者实现它们时(如果有的话)的注意事项。 diff --git a/docs/zh/data_types/int_uint.md b/docs/zh/data_types/int_uint.md index c142cf50106..a74d11cbc20 100644 --- a/docs/zh/data_types/int_uint.md +++ b/docs/zh/data_types/int_uint.md @@ -17,6 +17,3 @@ - UInt16 - [0 : 65535] - UInt32 - [0 : 4294967295] - UInt64 - [0 : 18446744073709551615] - - -[来源文章](https://clickhouse.yandex/docs/en/data_types/int_uint/) diff --git a/docs/zh/data_types/nested_data_structures/aggregatefunction.md b/docs/zh/data_types/nested_data_structures/aggregatefunction.md index bb9d57274ec..fb453fb9a62 100644 --- a/docs/zh/data_types/nested_data_structures/aggregatefunction.md +++ b/docs/zh/data_types/nested_data_structures/aggregatefunction.md @@ -1,5 +1,3 @@ # AggregateFunction(name, types_of_arguments...) 表示聚合函数中的中间状态。可以在聚合函数中通过 '-State' 后缀来访问它。更多信息,参考 "AggregatingMergeTree"。 - -[来源文章](https://clickhouse.yandex/docs/en/data_types/nested_data_structures/aggregatefunction/) \ No newline at end of file diff --git a/docs/zh/data_types/nested_data_structures/index.md b/docs/zh/data_types/nested_data_structures/index.md index fcb01993389..5f8d9839943 100644 --- a/docs/zh/data_types/nested_data_structures/index.md +++ b/docs/zh/data_types/nested_data_structures/index.md @@ -1,4 +1 @@ -# 嵌套数据类型 - - -[来源文章](https://clickhouse.yandex/docs/en/data_types/nested_data_structures/) +# 嵌套数据结构 diff --git a/docs/zh/data_types/nested_data_structures/nested.md b/docs/zh/data_types/nested_data_structures/nested.md index 2ab6d06cbdc..e1a882ecfe1 100644 --- a/docs/zh/data_types/nested_data_structures/nested.md +++ b/docs/zh/data_types/nested_data_structures/nested.md @@ -1,6 +1,6 @@ # Nested(Name1 Type1, Name2 Type2, ...) -类似嵌套表的嵌套数据结构。嵌套数据结构的参数(列名和列类型)与 CREATE 查询类似。每个表可以对应任意多行嵌套数据结构。 +嵌套数据结构类似于嵌套表。嵌套数据结构的参数(列名和类型)与 CREATE 查询类似。每个表可以包含任意多行嵌套数据结构。 示例: @@ -88,12 +88,10 @@ LIMIT 10 └─────────┴─────────────────────┘ ``` -不能对整个嵌套数据结构进行 SELECT 。只能显式地列出它的一部分列。 +不能对整个嵌套数据结构执行 SELECT。只能明确列出属于它一部分列。 对于 INSERT 查询,可以单独地传入所有嵌套数据结构中的列数组(假如它们是单独的列数组)。在插入过程中,系统会检查它们是否有相同的长度。 对于 DESCRIBE 查询,嵌套数据结构中的列会以相同的方式分别列出来。 -ALTER 查询对嵌套数据结构的操作非常局限。 - -[来源文章](https://clickhouse.yandex/docs/en/data_types/nested_data_structures/nested/) +ALTER 查询对嵌套数据结构的操作非常有限。 diff --git a/docs/zh/data_types/nullable.md b/docs/zh/data_types/nullable.md index 00c24c26c3a..95db5ead679 100644 --- a/docs/zh/data_types/nullable.md +++ b/docs/zh/data_types/nullable.md @@ -2,10 +2,9 @@ # Nullable(TypeName) -允许加上一个符号 ([NULL](../query_language/syntax.md#null-literal)) 表示“缺失值”和 `TypeName` 允许的正常值。 例如,`Nullable(Int8)` 类型列可以存储 `Int8` 类型值,而没有值的行将存储 `NULL` 。 - -对于`TypeName`,您不能使用复合数据类型 [Array](array.md#data_type is array) 和 [Tuple](tuple.md#data_type-tuple)。 复合数据类型可以包含 `Nullable` 类型值,例如 `Array (Nullable(Int8))`。 +允许用特殊标记 ([NULL](../query_language/syntax.md#null-literal)) 表示"缺失值",可以与 `TypeName` 的正常值存放一起。例如,`Nullable(Int8)` 类型的列可以存储 `Int8` 类型值,而没有值的行将存储 `NULL`。 +对于 `TypeName`,不能使用复合数据类型 [Array](array.md#data_type is array) 和 [Tuple](tuple.md#data_type-tuple)。复合数据类型可以包含 `Nullable` 类型值,例如`Array(Nullable(Int8))`。 `Nullable` 类型字段不能包含在表索引中。 @@ -15,11 +14,12 @@ 要在表的列中存储 `Nullable` 类型值,ClickHouse 除了使用带有值的普通文件外,还使用带有 `NULL` 掩码的单独文件。 掩码文件中的条目允许 ClickHouse 区分每个表行的 `NULL` 和相应数据类型的默认值。 由于附加了新文件,`Nullable` 列与类似的普通文件相比消耗额外的存储空间。 -!!! info "Note" - 使用 `Nullable` 几乎总是会对性能产生负面影响,在设计数据库时请记住这一点。 - +!!! 注意点 + 使用 `Nullable` 几乎总是对性能产生负面影响,在设计数据库时请记住这一点 -## 使用案例 +掩码文件中的条目允许ClickHouse区分每个表行的对应数据类型的"NULL"和默认值由于有额外的文件,"Nullable"列比普通列消耗更多的存储空间 + +## 用法示例 ``` :) CREATE TABLE t_null(x Int8, y Nullable(Int8)) ENGINE TinyLog @@ -55,5 +55,3 @@ FROM t_null 2 rows in set. Elapsed: 0.144 sec. ``` - -[来源文章](https://clickhouse.yandex/docs/en/data_types/nullable/) diff --git a/docs/zh/data_types/special_data_types/expression.md b/docs/zh/data_types/special_data_types/expression.md index 14e8aaf5362..d135b2478ff 100644 --- a/docs/zh/data_types/special_data_types/expression.md +++ b/docs/zh/data_types/special_data_types/expression.md @@ -1,5 +1,3 @@ # Expression -用在高阶函数中的 lambda 表达式中。 - -[来源文章](https://clickhouse.yandex/docs/en/data_types/special_data_types/expression/) +用于表示高阶函数中的Lambd表达式。 \ No newline at end of file diff --git a/docs/zh/data_types/special_data_types/index.md b/docs/zh/data_types/special_data_types/index.md index 03f66e36189..efcd141e2e1 100644 --- a/docs/zh/data_types/special_data_types/index.md +++ b/docs/zh/data_types/special_data_types/index.md @@ -1,5 +1,3 @@ # Special Data Types -特殊数据类型的值既不能存在表中也不能在结果中输出,但是可以被用于表示查询过程中的中间结果。 - -[来源文章](https://clickhouse.yandex/docs/en/data_types/special_data_types/) +特殊数据类型的值既不能存在表中也不能在结果中输出,但可用于查询的中间结果。 diff --git a/docs/zh/data_types/special_data_types/nothing.md b/docs/zh/data_types/special_data_types/nothing.md index dd7f51cca0f..5f282df761e 100644 --- a/docs/zh/data_types/special_data_types/nothing.md +++ b/docs/zh/data_types/special_data_types/nothing.md @@ -2,11 +2,11 @@ # Nothing -此数据类型的唯一目的是表示不是期望值的情况。 所以你不能创建一个` Nothing` 类型的值。 +此数据类型的唯一目的是表示不是期望值的情况。 所以不能创建一个 `Nothing` 类型的值。 -例如, [NULL](../../query_language/syntax.md#null-literal) 有 `Nullable(Nothing)`。更多参见[Nullable](../../data_types/nullable.md#data_type-nullable). +例如,文本 [NULL](../../query_language/syntax.md#null-literal) 的类型为 `Nullable(Nothing)`。详情请见 [Nullable](../../data_types/nullable.md#data_type-nullable)。 -`Nothing` 类型也可用于表示空数组: +`Nothing` 类型也可以用来表示空数组: ```bash :) SELECT toTypeName(array()) @@ -19,6 +19,3 @@ SELECT toTypeName([]) 1 rows in set. Elapsed: 0.062 sec. ``` - - -[来源文章](https://clickhouse.yandex/docs/en/data_types/special_data_types/nothing/) diff --git a/docs/zh/data_types/special_data_types/set.md b/docs/zh/data_types/special_data_types/set.md index 0e62f64f540..5c8264b0aea 100644 --- a/docs/zh/data_types/special_data_types/set.md +++ b/docs/zh/data_types/special_data_types/set.md @@ -1,5 +1,4 @@ # Set -可以用在 IN 表达式的右半边。 +可以用在 IN 表达式的右半部分。 -[来源文章](https://clickhouse.yandex/docs/en/data_types/special_data_types/set/) diff --git a/docs/zh/data_types/string.md b/docs/zh/data_types/string.md index 6d45b8f4741..5d7374eb56f 100644 --- a/docs/zh/data_types/string.md +++ b/docs/zh/data_types/string.md @@ -1,13 +1,13 @@ + + # String -字符串可以任意长度的。它可以包含任意的字节组合,包括空字符。 -String 类型替代了其他 DBMSs 中的 VARCHAR, BLOB, CLOB 等类型。 +字符串可以任意长度的。它可以包含任意的字节集,包含空字节。因此,字符串类型可以代替其他 DBMSs 中的 VARCHAR、BLOB、CLOB 等类型。 ## 编码 -ClickHouse 没有编码的概念。字符串可以是任意的字节组合,按它们原本的方式进行存储和输出。 +ClickHouse 没有编码的概念。字符串可以是任意的字节集,按它们原本的方式进行存储和输出。 若需存储文本,我们建议使用 UTF-8 编码。至少,如果你的终端使用UTF-8(推荐),这样读写就不需要进行任何的转换了。 同样,对不同的编码文本 ClickHouse 会有不同处理字符串的函数。 比如,`length` 函数可以计算字符串包含的字节数组的长度,然而 `lengthUTF8` 函数是假设字符串以 UTF-8 编码,计算的是字符串包含的 Unicode 字符的长度。 -[来源文章](https://clickhouse.yandex/docs/en/data_types/string/) diff --git a/docs/zh/data_types/tuple.md b/docs/zh/data_types/tuple.md index 02320a4be73..0eb3b9a9259 100644 --- a/docs/zh/data_types/tuple.md +++ b/docs/zh/data_types/tuple.md @@ -1,12 +1,16 @@ + + # Tuple(T1, T2, ...) -元组,元组中的每个元素都有独立的[类型](index.md#data_types)。 +元组,其中每个元素都有单独的 [类型](index.md#data_types)。 -元组不能写入表中(除 Memory 表外)。它们会用于临时列分组。在某个查询中,IN 表达式和带特定参数的 lambda 函数可以来对临时列进行分组。更多信息,参见 [IN 操作符] (../query_language/select.md#in_operators) 和 [高阶函数](../query_language/functions/higher_order_functions.md#higher_order_functions)。 +不能在表中存储元组(除了内存表)。它们可以用于临时列分组。在查询中,IN 表达式和带特定参数的 lambda 函数可以来对临时列进行分组。更多信息,请参阅 [IN 操作符](../query_language/select.md#in_operators) and [Higher order functions](../query_language/functions/higher_order_functions.md#higher_order_functions)。 + +元组可以是查询的结果。在这种情况下,对于JSON以外的文本格式,括号中的值是逗号分隔的。在JSON格式中,元组作为数组输出(在方括号中)。 ## 创建元组 -可以用下面函数来创建元组: +可以使用函数来创建元组: ``` tuple(T1, T2, ...) @@ -30,9 +34,9 @@ SELECT ## 元组中的数据类型 -当动态创建元组时,ClickHouse 会自动为元组的每一个参数赋予最小可表达的类型。如果该参数是 [NULL](../query_language/syntax.md#null-literal),那么这个元组对应元素就是 [Nullable](nullable.md#data_type-nullable)。 +在动态创建元组时,ClickHouse 会自动为元组的每一个参数赋予最小可表达的类型。如果参数为 [NULL](../query_language/syntax.md#null-literal),那这个元组对应元素是 [Nullable](nullable.md#data_type-nullable)。 -自动识别数据类型的示例: +自动数据类型检测示例: ``` SELECT tuple(1, NULL) AS x, toTypeName(x) @@ -47,7 +51,3 @@ SELECT 1 rows in set. Elapsed: 0.002 sec. ``` - - -[来源文章](https://clickhouse.yandex/docs/en/data_types/tuple/) -