From 483d415b24077590c12d5477484ecd4938fe00bc Mon Sep 17 00:00:00 2001 From: George Date: Mon, 7 Jun 2021 21:24:26 +0300 Subject: [PATCH 01/30] First draft --- docs/en/sql-reference/data-types/array.md | 21 +++++++++++++++ .../nested-data-structures/nested.md | 2 +- docs/en/sql-reference/data-types/nullable.md | 21 +++++++++++++++ docs/en/sql-reference/data-types/tuple.md | 26 +++++++++++++++++++ 4 files changed, 69 insertions(+), 1 deletion(-) diff --git a/docs/en/sql-reference/data-types/array.md b/docs/en/sql-reference/data-types/array.md index 41e35aaa96f..ced7e399f45 100644 --- a/docs/en/sql-reference/data-types/array.md +++ b/docs/en/sql-reference/data-types/array.md @@ -74,4 +74,25 @@ 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. ``` +It is possible to use `size0` subcolumns that can be read without reading the whole column: + +```sql +CREATE TABLE t_arr (a Array(UInt32)) ENGINE = MergeTree ORDER BY tuple() SETTINGS min_bytes_for_wide_part = 0; + +INSERT INTO t_arr VALUES ([1]) ([]) ([1, 2, 3]) ([1, 2]); + +SELECT a.size0 FROM t_arr; +``` + +Result: + +``` text +┌─a.size0─┐ +│ 1 │ +│ 0 │ +│ 3 │ +│ 2 │ +└─────────┘ +``` + [Original article](https://clickhouse.tech/docs/en/data_types/array/) diff --git a/docs/en/sql-reference/data-types/nested-data-structures/nested.md b/docs/en/sql-reference/data-types/nested-data-structures/nested.md index 302d41c1357..902ae8ef715 100644 --- a/docs/en/sql-reference/data-types/nested-data-structures/nested.md +++ b/docs/en/sql-reference/data-types/nested-data-structures/nested.md @@ -34,7 +34,7 @@ CREATE TABLE test.visits This example declares the `Goals` nested data structure, which contains data about conversions (goals reached). Each row in the ‘visits’ table can correspond to zero or any number of conversions. -Only a single nesting level is supported. Columns of nested structures containing arrays are equivalent to multidimensional arrays, so they have limited support (there is no support for storing these columns in tables with the MergeTree engine). +Arbitrary levels of nesting are supported. Columns of nested structures containing arrays are equivalent to multidimensional arrays, so they have limited support (there is no support for storing these columns in tables with the MergeTree engine). In most cases, when working with a nested data structure, its columns are specified with column names separated by a dot. These columns make up an array of matching types. All the column arrays of a single nested data structure have the same length. diff --git a/docs/en/sql-reference/data-types/nullable.md b/docs/en/sql-reference/data-types/nullable.md index 4207e389734..247129a0cf3 100644 --- a/docs/en/sql-reference/data-types/nullable.md +++ b/docs/en/sql-reference/data-types/nullable.md @@ -41,4 +41,25 @@ SELECT x + y FROM t_null └────────────┘ ``` +It is possible to use `null` subcolumns that can be read without reading the whole column: + +``` sql +CREATE TABLE nullable (`n` Nullable(UInt32)) ENGINE = MergeTree ORDER BY tuple(); + +INSERT INTO nullable VALUES (1) (NULL) (2) (NULL); + +SELECT n.null FROM nullable; +``` + +Result: + +``` text +┌─n.null─┐ +│ 0 │ +│ 1 │ +│ 0 │ +│ 1 │ +└────────┘ +``` + [Original article](https://clickhouse.tech/docs/en/data_types/nullable/) diff --git a/docs/en/sql-reference/data-types/tuple.md b/docs/en/sql-reference/data-types/tuple.md index e396006d957..21b4cc7e0d8 100644 --- a/docs/en/sql-reference/data-types/tuple.md +++ b/docs/en/sql-reference/data-types/tuple.md @@ -47,4 +47,30 @@ SELECT tuple(1, NULL) AS x, toTypeName(x) └──────────┴─────────────────────────────────┘ ``` +It is possible to read elements of named tuples using indexes and names: + +``` sql +CREATE TABLE named_tuples (`a` Tuple(s String, i Int64)) ENGINE = Memory; + +INSERT INTO named_tuples VALUES (('y', 10)), (('x',-10)); + +SELECT a.s FROM named_tuples; + +SELECT a.2 FROM named_tuples; +``` + +Result: + +``` text +┌─a.s─┐ +│ y │ +│ x │ +└─────┘ + +┌─tupleElement(a, 2)─┐ +│ 10 │ +│ -10 │ +└────────────────────┘ +``` + [Original article](https://clickhouse.tech/docs/en/data_types/tuple/) From 2613aee85661fb62737fe823873fbc1392eeaab8 Mon Sep 17 00:00:00 2001 From: George Date: Fri, 11 Jun 2021 01:56:32 +0300 Subject: [PATCH 02/30] Some changes --- docs/en/sql-reference/data-types/array.md | 23 ++++++----- docs/en/sql-reference/data-types/nullable.md | 42 ++++++++++---------- docs/en/sql-reference/data-types/tuple.md | 2 + 3 files changed, 36 insertions(+), 31 deletions(-) diff --git a/docs/en/sql-reference/data-types/array.md b/docs/en/sql-reference/data-types/array.md index ced7e399f45..ac9cbdd9a6e 100644 --- a/docs/en/sql-reference/data-types/array.md +++ b/docs/en/sql-reference/data-types/array.md @@ -74,25 +74,28 @@ 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. ``` -It is possible to use `size0` subcolumns that can be read without reading the whole column: +## Array Size {#array-size} + +It is possible to find the size of an array by using the `size0` subcolumn without reading the whole column. For multi-dimensional arrays you can use size`n-1`, where `n` is the wanted dimension. + +Query: ```sql -CREATE TABLE t_arr (a Array(UInt32)) ENGINE = MergeTree ORDER BY tuple() SETTINGS min_bytes_for_wide_part = 0; +CREATE TABLE t_arr (a Array(UInt32)) ENGINE = MergeTree ORDER BY tuple(); -INSERT INTO t_arr VALUES ([1]) ([]) ([1, 2, 3]) ([1, 2]); +CREATE TABLE t_arr (`arr` Array(Array(Array(UInt32)))) ENGINE = MergeTree ORDER BY tuple(); -SELECT a.size0 FROM t_arr; +insert into t_arr values ([[[12, 13, 0, 1],[12]]]); + +SELECT arr.size0, arr.size1, arr.size2 FROM t_arr; ``` Result: ``` text -┌─a.size0─┐ -│ 1 │ -│ 0 │ -│ 3 │ -│ 2 │ -└─────────┘ +┌─arr.size0─┬─arr.size1─┬─arr.size2─┐ +│ 1 │ [2] │ [[4,1]] │ +└───────────┴───────────┴───────────┘ ``` [Original article](https://clickhouse.tech/docs/en/data_types/array/) diff --git a/docs/en/sql-reference/data-types/nullable.md b/docs/en/sql-reference/data-types/nullable.md index 247129a0cf3..a526a99d9a8 100644 --- a/docs/en/sql-reference/data-types/nullable.md +++ b/docs/en/sql-reference/data-types/nullable.md @@ -20,6 +20,27 @@ To store `Nullable` type values in a table column, ClickHouse uses a separate fi !!! info "Note" Using `Nullable` almost always negatively affects performance, keep this in mind when designing your databases. +It is possible to find `NULL` values in a column by using `null` subcolumn without reading the whole column. + +``` sql +CREATE TABLE nullable ( `n` Nullable(UInt32)) ENGINE = MergeTree ORDER BY tuple(); + +INSERT INTO nullable VALUES (1) (NULL) (2) (NULL); + +SELECT n.null FROM nullable; +``` + +Result: + +``` text +┌─n.null─┐ +│ 0 │ +│ 1 │ +│ 0 │ +│ 1 │ +└────────┘ +``` + ## Usage Example {#usage-example} ``` sql @@ -41,25 +62,4 @@ SELECT x + y FROM t_null └────────────┘ ``` -It is possible to use `null` subcolumns that can be read without reading the whole column: - -``` sql -CREATE TABLE nullable (`n` Nullable(UInt32)) ENGINE = MergeTree ORDER BY tuple(); - -INSERT INTO nullable VALUES (1) (NULL) (2) (NULL); - -SELECT n.null FROM nullable; -``` - -Result: - -``` text -┌─n.null─┐ -│ 0 │ -│ 1 │ -│ 0 │ -│ 1 │ -└────────┘ -``` - [Original article](https://clickhouse.tech/docs/en/data_types/nullable/) diff --git a/docs/en/sql-reference/data-types/tuple.md b/docs/en/sql-reference/data-types/tuple.md index 21b4cc7e0d8..9092643ed42 100644 --- a/docs/en/sql-reference/data-types/tuple.md +++ b/docs/en/sql-reference/data-types/tuple.md @@ -47,6 +47,8 @@ SELECT tuple(1, NULL) AS x, toTypeName(x) └──────────┴─────────────────────────────────┘ ``` +## Addressing Tuple Element {#addressing-tuple-element} + It is possible to read elements of named tuples using indexes and names: ``` sql From 70b8758bde69f723dd48eeca90f7df487b9e480b Mon Sep 17 00:00:00 2001 From: gyuton <40863448+gyuton@users.noreply.github.com> Date: Tue, 15 Jun 2021 17:05:43 +0300 Subject: [PATCH 03/30] Apply suggestions from code review Co-authored-by: olgarev <56617294+olgarev@users.noreply.github.com> --- docs/en/sql-reference/data-types/array.md | 4 +--- docs/en/sql-reference/data-types/tuple.md | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/en/sql-reference/data-types/array.md b/docs/en/sql-reference/data-types/array.md index ac9cbdd9a6e..76ed8beb5eb 100644 --- a/docs/en/sql-reference/data-types/array.md +++ b/docs/en/sql-reference/data-types/array.md @@ -81,11 +81,9 @@ It is possible to find the size of an array by using the `size0` subcolumn witho Query: ```sql -CREATE TABLE t_arr (a Array(UInt32)) ENGINE = MergeTree ORDER BY tuple(); - CREATE TABLE t_arr (`arr` Array(Array(Array(UInt32)))) ENGINE = MergeTree ORDER BY tuple(); -insert into t_arr values ([[[12, 13, 0, 1],[12]]]); +INSERT INTO t_arr VALUES ([[[12, 13, 0, 1],[12]]]); SELECT arr.size0, arr.size1, arr.size2 FROM t_arr; ``` diff --git a/docs/en/sql-reference/data-types/tuple.md b/docs/en/sql-reference/data-types/tuple.md index 9092643ed42..dea5e10365f 100644 --- a/docs/en/sql-reference/data-types/tuple.md +++ b/docs/en/sql-reference/data-types/tuple.md @@ -47,7 +47,7 @@ SELECT tuple(1, NULL) AS x, toTypeName(x) └──────────┴─────────────────────────────────┘ ``` -## Addressing Tuple Element {#addressing-tuple-element} +## Addressing Tuple Elements {#addressing-tuple-elements} It is possible to read elements of named tuples using indexes and names: From c50eb7881971adb081f22068105626ca4b1224fb Mon Sep 17 00:00:00 2001 From: George Date: Tue, 15 Jun 2021 17:38:08 +0300 Subject: [PATCH 04/30] Updated EN version --- docs/en/sql-reference/data-types/array.md | 2 -- docs/en/sql-reference/data-types/nullable.md | 6 +++++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/en/sql-reference/data-types/array.md b/docs/en/sql-reference/data-types/array.md index 76ed8beb5eb..741bbd4e153 100644 --- a/docs/en/sql-reference/data-types/array.md +++ b/docs/en/sql-reference/data-types/array.md @@ -95,5 +95,3 @@ Result: │ 1 │ [2] │ [[4,1]] │ └───────────┴───────────┴───────────┘ ``` - -[Original article](https://clickhouse.tech/docs/en/data_types/array/) diff --git a/docs/en/sql-reference/data-types/nullable.md b/docs/en/sql-reference/data-types/nullable.md index a526a99d9a8..3c7b53d1e56 100644 --- a/docs/en/sql-reference/data-types/nullable.md +++ b/docs/en/sql-reference/data-types/nullable.md @@ -20,7 +20,11 @@ To store `Nullable` type values in a table column, ClickHouse uses a separate fi !!! info "Note" Using `Nullable` almost always negatively affects performance, keep this in mind when designing your databases. -It is possible to find `NULL` values in a column by using `null` subcolumn without reading the whole column. +## Finding NULL {#finding-null} + +It is possible to find `NULL` values in a column by using `null` subcolumn without reading the whole column. It returns `1` if the corresponding value is `NULL` and `0` otherwise. + +Query: ``` sql CREATE TABLE nullable ( `n` Nullable(UInt32)) ENGINE = MergeTree ORDER BY tuple(); From 3ee64dc629fc8d7458c3968ad61786fceb6d0a14 Mon Sep 17 00:00:00 2001 From: George Date: Tue, 15 Jun 2021 17:39:31 +0300 Subject: [PATCH 05/30] Added translation --- docs/ru/sql-reference/data-types/array.md | 25 ++++++++++++++--- .../nested-data-structures/nested.md | 2 +- docs/ru/sql-reference/data-types/nullable.md | 25 +++++++++++++++++ docs/ru/sql-reference/data-types/tuple.md | 27 +++++++++++++++++++ 4 files changed, 75 insertions(+), 4 deletions(-) diff --git a/docs/ru/sql-reference/data-types/array.md b/docs/ru/sql-reference/data-types/array.md index 30952d6e126..345a294e9a2 100644 --- a/docs/ru/sql-reference/data-types/array.md +++ b/docs/ru/sql-reference/data-types/array.md @@ -5,9 +5,7 @@ toc_title: Array(T) # Array(T) {#data-type-array} -Массив из элементов типа `T`. - -`T` может любым, в том числе, массивом. Таким образом поддержаны многомерные массивы. +Массив из элементов типа `T`. `T` может любым, в том числе, массивом. Таким образом поддержаны многомерные массивы. ## Создание массива {#sozdanie-massiva} @@ -76,3 +74,24 @@ 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. ``` +## Размер массива {#array-size} + +Узнать размер массива можно с помощью подстолбца `size0` без чтения всего столбца. Для многомерных массивов можно использовать подстолбец size`n-1`, где `n` — требуемое измерение. + +Запрос: + +```sql +CREATE TABLE t_arr (`arr` Array(Array(Array(UInt32)))) ENGINE = MergeTree ORDER BY tuple(); + +INSERT INTO t_arr VALUES ([[[12, 13, 0, 1],[12]]]); + +SELECT arr.size0, arr.size1, arr.size2 FROM t_arr; +``` + +Результат: + +``` text +┌─arr.size0─┬─arr.size1─┬─arr.size2─┐ +│ 1 │ [2] │ [[4,1]] │ +└───────────┴───────────┴───────────┘ +``` diff --git a/docs/ru/sql-reference/data-types/nested-data-structures/nested.md b/docs/ru/sql-reference/data-types/nested-data-structures/nested.md index 199d141a191..e192db755fc 100644 --- a/docs/ru/sql-reference/data-types/nested-data-structures/nested.md +++ b/docs/ru/sql-reference/data-types/nested-data-structures/nested.md @@ -29,7 +29,7 @@ CREATE TABLE test.visits В этом примере объявлена вложенная структура данных `Goals`, содержащая данные о достижении целей. Каждой строке таблицы visits может соответствовать от нуля до произвольного количества достижений целей. -Поддерживается только один уровень вложенности. Столбцы вложенных структур, содержащие массивы, эквивалентны многомерным массивам, поэтому их поддержка ограничена (не поддерживается хранение таких столбцов в таблицах с движком семейства MergeTree). +Поддерживаются любые уровни вложенности. Столбцы вложенных структур, содержащие массивы, эквивалентны многомерным массивам, поэтому их поддержка ограничена (не поддерживается хранение таких столбцов в таблицах с движком семейства MergeTree). В большинстве случаев, при работе с вложенной структурой данных, указываются отдельные её столбцы. Для этого, имена столбцов указываются через точку. Эти столбцы представляют собой массивы соответствующих типов. Все столбцы-массивы одной вложенной структуры данных имеют одинаковые длины. diff --git a/docs/ru/sql-reference/data-types/nullable.md b/docs/ru/sql-reference/data-types/nullable.md index 3f33c4b2540..bd60f143d51 100644 --- a/docs/ru/sql-reference/data-types/nullable.md +++ b/docs/ru/sql-reference/data-types/nullable.md @@ -27,6 +27,31 @@ toc_title: Nullable !!! info "Info" Почти всегда использование `Nullable` снижает производительность, учитывайте это при проектировании своих баз. +## Поиск NULL {#finding-null} + +Найти значения `NULL` в столбце можно с помощью подстобца `null`, при этом чтение всего столбца не происходит. Подстолбец возвращает `1`, если соответственное значение является `NULL`, и `0` в противоположном случае. + +Запрос: + +``` sql +CREATE TABLE nullable ( `n` Nullable(UInt32)) ENGINE = MergeTree ORDER BY tuple(); + +INSERT INTO nullable VALUES (1) (NULL) (2) (NULL); + +SELECT n.null FROM nullable; +``` + +Результат: + +``` text +┌─n.null─┐ +│ 0 │ +│ 1 │ +│ 0 │ +│ 1 │ +└────────┘ +``` + ## Пример использования {#primer-ispolzovaniia} ``` sql diff --git a/docs/ru/sql-reference/data-types/tuple.md b/docs/ru/sql-reference/data-types/tuple.md index 702b5962f7b..fa46831240a 100644 --- a/docs/ru/sql-reference/data-types/tuple.md +++ b/docs/ru/sql-reference/data-types/tuple.md @@ -47,3 +47,30 @@ SELECT tuple(1,NULL) AS x, toTypeName(x) └──────────┴─────────────────────────────────┘ ``` +## Адрессация элементов кортежа {#addressing-tuple-elements} + +Можно считывать элементы кортежей с помощью индексов и имен: + +``` sql +CREATE TABLE named_tuples (`a` Tuple(s String, i Int64)) ENGINE = Memory; + +INSERT INTO named_tuples VALUES (('y', 10)), (('x',-10)); + +SELECT a.s FROM named_tuples; + +SELECT a.2 FROM named_tuples; +``` + +Результат: + +``` text +┌─a.s─┐ +│ y │ +│ x │ +└─────┘ + +┌─tupleElement(a, 2)─┐ +│ 10 │ +│ -10 │ +└────────────────────┘ +``` From 69f571d0ce139d2ed79eb4f0e200404f6086f96d Mon Sep 17 00:00:00 2001 From: George Date: Tue, 15 Jun 2021 17:46:00 +0300 Subject: [PATCH 06/30] Typo --- docs/ru/sql-reference/data-types/tuple.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ru/sql-reference/data-types/tuple.md b/docs/ru/sql-reference/data-types/tuple.md index fa46831240a..babff343a29 100644 --- a/docs/ru/sql-reference/data-types/tuple.md +++ b/docs/ru/sql-reference/data-types/tuple.md @@ -47,7 +47,7 @@ SELECT tuple(1,NULL) AS x, toTypeName(x) └──────────┴─────────────────────────────────┘ ``` -## Адрессация элементов кортежа {#addressing-tuple-elements} +## Адресация элементов кортежа {#addressing-tuple-elements} Можно считывать элементы кортежей с помощью индексов и имен: From 2b7547cb13946c58b4478961203ec912d6a23934 Mon Sep 17 00:00:00 2001 From: George Date: Tue, 15 Jun 2021 17:52:23 +0300 Subject: [PATCH 07/30] Small update --- docs/en/sql-reference/data-types/array.md | 2 +- docs/ru/sql-reference/data-types/array.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/sql-reference/data-types/array.md b/docs/en/sql-reference/data-types/array.md index 741bbd4e153..a76fb9e2e8c 100644 --- a/docs/en/sql-reference/data-types/array.md +++ b/docs/en/sql-reference/data-types/array.md @@ -76,7 +76,7 @@ Code: 386. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception ## Array Size {#array-size} -It is possible to find the size of an array by using the `size0` subcolumn without reading the whole column. For multi-dimensional arrays you can use size`n-1`, where `n` is the wanted dimension. +It is possible to find the size of an array by using the `size0` subcolumn without reading the whole column. For multi-dimensional arrays you can use `sizen-1`, where `n` is the wanted dimension. Query: diff --git a/docs/ru/sql-reference/data-types/array.md b/docs/ru/sql-reference/data-types/array.md index 345a294e9a2..ec45abac7fb 100644 --- a/docs/ru/sql-reference/data-types/array.md +++ b/docs/ru/sql-reference/data-types/array.md @@ -76,7 +76,7 @@ Code: 386. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception ## Размер массива {#array-size} -Узнать размер массива можно с помощью подстолбца `size0` без чтения всего столбца. Для многомерных массивов можно использовать подстолбец size`n-1`, где `n` — требуемое измерение. +Узнать размер массива можно с помощью подстолбца `size0` без чтения всего столбца. Для многомерных массивов можно использовать подстолбец `sizen-1`, где `n` — требуемое измерение. Запрос: From 2f596fba050652b0a2feda4dd0a03a6dfdc78173 Mon Sep 17 00:00:00 2001 From: George Date: Tue, 15 Jun 2021 17:57:49 +0300 Subject: [PATCH 08/30] Minor improvements --- docs/en/sql-reference/data-types/nullable.md | 2 +- docs/ru/sql-reference/data-types/nullable.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/sql-reference/data-types/nullable.md b/docs/en/sql-reference/data-types/nullable.md index 3c7b53d1e56..7b43beb65f4 100644 --- a/docs/en/sql-reference/data-types/nullable.md +++ b/docs/en/sql-reference/data-types/nullable.md @@ -27,7 +27,7 @@ It is possible to find `NULL` values in a column by using `null` subcolumn witho Query: ``` sql -CREATE TABLE nullable ( `n` Nullable(UInt32)) ENGINE = MergeTree ORDER BY tuple(); +CREATE TABLE nullable (`n` Nullable(UInt32)) ENGINE = MergeTree ORDER BY tuple(); INSERT INTO nullable VALUES (1) (NULL) (2) (NULL); diff --git a/docs/ru/sql-reference/data-types/nullable.md b/docs/ru/sql-reference/data-types/nullable.md index bd60f143d51..f3581108dd4 100644 --- a/docs/ru/sql-reference/data-types/nullable.md +++ b/docs/ru/sql-reference/data-types/nullable.md @@ -29,12 +29,12 @@ toc_title: Nullable ## Поиск NULL {#finding-null} -Найти значения `NULL` в столбце можно с помощью подстобца `null`, при этом чтение всего столбца не происходит. Подстолбец возвращает `1`, если соответственное значение является `NULL`, и `0` в противоположном случае. +Найти в столбце значения `NULL` можно с помощью подстобца `null`, при этом чтение всего столбца не происходит. Подстолбец возвращает `1`, если соответственное значение равно `NULL`, и `0` в противоположном случае. Запрос: ``` sql -CREATE TABLE nullable ( `n` Nullable(UInt32)) ENGINE = MergeTree ORDER BY tuple(); +CREATE TABLE nullable (`n` Nullable(UInt32)) ENGINE = MergeTree ORDER BY tuple(); INSERT INTO nullable VALUES (1) (NULL) (2) (NULL); From dc46d90f4fbb7f9800b14ff68eb546c010cabccb Mon Sep 17 00:00:00 2001 From: gyuton <40863448+gyuton@users.noreply.github.com> Date: Wed, 16 Jun 2021 18:03:11 +0300 Subject: [PATCH 09/30] Apply suggestions from code review Co-authored-by: olgarev <56617294+olgarev@users.noreply.github.com> --- docs/en/sql-reference/data-types/array.md | 2 +- docs/en/sql-reference/data-types/nullable.md | 2 +- docs/ru/sql-reference/data-types/array.md | 8 ++++---- docs/ru/sql-reference/data-types/nullable.md | 7 +++---- docs/ru/sql-reference/data-types/tuple.md | 2 +- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/docs/en/sql-reference/data-types/array.md b/docs/en/sql-reference/data-types/array.md index a76fb9e2e8c..05800d9826d 100644 --- a/docs/en/sql-reference/data-types/array.md +++ b/docs/en/sql-reference/data-types/array.md @@ -76,7 +76,7 @@ Code: 386. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception ## Array Size {#array-size} -It is possible to find the size of an array by using the `size0` subcolumn without reading the whole column. For multi-dimensional arrays you can use `sizen-1`, where `n` is the wanted dimension. +It is possible to find the size of an array by using the `size0` subcolumn without reading the whole column. For multi-dimensional arrays you can use `sizeN-1`, where `N` is the wanted dimension. Query: diff --git a/docs/en/sql-reference/data-types/nullable.md b/docs/en/sql-reference/data-types/nullable.md index 7b43beb65f4..341142f17e8 100644 --- a/docs/en/sql-reference/data-types/nullable.md +++ b/docs/en/sql-reference/data-types/nullable.md @@ -23,7 +23,7 @@ To store `Nullable` type values in a table column, ClickHouse uses a separate fi ## Finding NULL {#finding-null} It is possible to find `NULL` values in a column by using `null` subcolumn without reading the whole column. It returns `1` if the corresponding value is `NULL` and `0` otherwise. - +**Example** Query: ``` sql diff --git a/docs/ru/sql-reference/data-types/array.md b/docs/ru/sql-reference/data-types/array.md index ec45abac7fb..cf4a7ff98a5 100644 --- a/docs/ru/sql-reference/data-types/array.md +++ b/docs/ru/sql-reference/data-types/array.md @@ -5,9 +5,9 @@ toc_title: Array(T) # Array(T) {#data-type-array} -Массив из элементов типа `T`. `T` может любым, в том числе, массивом. Таким образом поддержаны многомерные массивы. +Массив из элементов типа `T`. `T` может любым, в том числе массивом. Таким образом поддерживаются многомерные массивы. -## Создание массива {#sozdanie-massiva} +## Создание массива {#creating-an-array} Массив можно создать с помощью функции: @@ -76,8 +76,8 @@ Code: 386. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception ## Размер массива {#array-size} -Узнать размер массива можно с помощью подстолбца `size0` без чтения всего столбца. Для многомерных массивов можно использовать подстолбец `sizen-1`, где `n` — требуемое измерение. - +Узнать размер массива можно с помощью подстолбца `size0` без чтения всего столбца. Для многомерных массивов можно использовать подстолбец `sizeN-1`, где `N` — требуемое измерение. +**Пример** Запрос: ```sql diff --git a/docs/ru/sql-reference/data-types/nullable.md b/docs/ru/sql-reference/data-types/nullable.md index f3581108dd4..c7bb9d41d96 100644 --- a/docs/ru/sql-reference/data-types/nullable.md +++ b/docs/ru/sql-reference/data-types/nullable.md @@ -29,8 +29,8 @@ toc_title: Nullable ## Поиск NULL {#finding-null} -Найти в столбце значения `NULL` можно с помощью подстобца `null`, при этом чтение всего столбца не происходит. Подстолбец возвращает `1`, если соответственное значение равно `NULL`, и `0` в противоположном случае. - +Найти в столбце значения `NULL` можно с помощью подстолбца `null`, при этом весь столбец считывать не требуется. Подстолбец содержит `1`, если соответствующее значение равно `NULL`, и `0` если не равно. +**Пример** Запрос: ``` sql @@ -52,7 +52,7 @@ SELECT n.null FROM nullable; └────────┘ ``` -## Пример использования {#primer-ispolzovaniia} +## Пример использования {#usage-example} ``` sql CREATE TABLE t_null(x Int8, y Nullable(Int8)) ENGINE TinyLog @@ -72,4 +72,3 @@ SELECT x + y from t_null │ 5 │ └────────────┘ ``` - diff --git a/docs/ru/sql-reference/data-types/tuple.md b/docs/ru/sql-reference/data-types/tuple.md index babff343a29..55ddd3a23b1 100644 --- a/docs/ru/sql-reference/data-types/tuple.md +++ b/docs/ru/sql-reference/data-types/tuple.md @@ -49,7 +49,7 @@ SELECT tuple(1,NULL) AS x, toTypeName(x) ## Адресация элементов кортежа {#addressing-tuple-elements} -Можно считывать элементы кортежей с помощью индексов и имен: +К элементам кортежа можно обращаться по индексу и по имени: ``` sql CREATE TABLE named_tuples (`a` Tuple(s String, i Int64)) ENGINE = Memory; From ce02592219b12cdecfff9ac4190845ce6f0af0af Mon Sep 17 00:00:00 2001 From: George Date: Wed, 16 Jun 2021 18:08:47 +0300 Subject: [PATCH 10/30] Small fixes --- docs/en/sql-reference/data-types/array.md | 2 ++ docs/en/sql-reference/data-types/nullable.md | 2 ++ docs/ru/sql-reference/data-types/array.md | 4 +++- docs/ru/sql-reference/data-types/nullable.md | 4 +++- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/en/sql-reference/data-types/array.md b/docs/en/sql-reference/data-types/array.md index 05800d9826d..0a92a634b6b 100644 --- a/docs/en/sql-reference/data-types/array.md +++ b/docs/en/sql-reference/data-types/array.md @@ -78,6 +78,8 @@ Code: 386. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception It is possible to find the size of an array by using the `size0` subcolumn without reading the whole column. For multi-dimensional arrays you can use `sizeN-1`, where `N` is the wanted dimension. +**Example** + Query: ```sql diff --git a/docs/en/sql-reference/data-types/nullable.md b/docs/en/sql-reference/data-types/nullable.md index 341142f17e8..de53a47afb7 100644 --- a/docs/en/sql-reference/data-types/nullable.md +++ b/docs/en/sql-reference/data-types/nullable.md @@ -23,7 +23,9 @@ To store `Nullable` type values in a table column, ClickHouse uses a separate fi ## Finding NULL {#finding-null} It is possible to find `NULL` values in a column by using `null` subcolumn without reading the whole column. It returns `1` if the corresponding value is `NULL` and `0` otherwise. + **Example** + Query: ``` sql diff --git a/docs/ru/sql-reference/data-types/array.md b/docs/ru/sql-reference/data-types/array.md index cf4a7ff98a5..abc16751a79 100644 --- a/docs/ru/sql-reference/data-types/array.md +++ b/docs/ru/sql-reference/data-types/array.md @@ -43,7 +43,7 @@ SELECT [1, 2] AS x, toTypeName(x) └───────┴────────────────────┘ ``` -## Особенности работы с типами данных {#osobennosti-raboty-s-tipami-dannykh} +## Особенности работы с типами данных {#working-with-data-types} Максимальный размер массива ограничен одним миллионом элементов. @@ -77,7 +77,9 @@ Code: 386. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception ## Размер массива {#array-size} Узнать размер массива можно с помощью подстолбца `size0` без чтения всего столбца. Для многомерных массивов можно использовать подстолбец `sizeN-1`, где `N` — требуемое измерение. + **Пример** + Запрос: ```sql diff --git a/docs/ru/sql-reference/data-types/nullable.md b/docs/ru/sql-reference/data-types/nullable.md index c7bb9d41d96..84a5d6a796c 100644 --- a/docs/ru/sql-reference/data-types/nullable.md +++ b/docs/ru/sql-reference/data-types/nullable.md @@ -13,7 +13,7 @@ toc_title: Nullable `NULL` — значение по умолчанию для типа `Nullable`, если в конфигурации сервера ClickHouse не указано иное. -## Особенности хранения {#osobennosti-khraneniia} +## Особенности хранения {#storage-features} Для хранения значения типа `Nullable` ClickHouse использует: @@ -30,7 +30,9 @@ toc_title: Nullable ## Поиск NULL {#finding-null} Найти в столбце значения `NULL` можно с помощью подстолбца `null`, при этом весь столбец считывать не требуется. Подстолбец содержит `1`, если соответствующее значение равно `NULL`, и `0` если не равно. + **Пример** + Запрос: ``` sql From 06261466e4d7e6bb8fa4d668f9c9e6cecddc4424 Mon Sep 17 00:00:00 2001 From: Alina Terekhova Date: Thu, 17 Jun 2021 01:34:59 +0200 Subject: [PATCH 11/30] First edits --- .../functions/array-functions.md | 48 +++++++++++++++-- .../functions/array-functions.md | 54 +++++++++++++++++-- 2 files changed, 95 insertions(+), 7 deletions(-) diff --git a/docs/en/sql-reference/functions/array-functions.md b/docs/en/sql-reference/functions/array-functions.md index 611f620ed9f..28da727793f 100644 --- a/docs/en/sql-reference/functions/array-functions.md +++ b/docs/en/sql-reference/functions/array-functions.md @@ -41,10 +41,50 @@ Accepts an empty array and returns a one-element array that is equal to the defa ## range(end), range(start, end \[, step\]) {#rangeend-rangestart-end-step} -Returns an array of numbers from start to end-1 by step. -If the argument `start` is not specified, defaults to 0. -If the argument `step` is not specified, defaults to 1. -It behaviors almost like pythonic `range`. But the difference is that all the arguments type must be `UInt` numbers. +Returns an array of numbers from `start` to `end`-1 by `step`. + +**Syntax** +``` sql +range(end) +``` +``` sql +range(start, end, step) +``` +It behaves almost like pythonic `range`. But the difference is that all the arguments must be `UInt` type numbers. + +**Arguments** + +- `start` - required if step is used. `UInt` number. If not specified, defaults to 0. +- `end` - required. `UInt` number. Must be greater than `start`. +- `step` - optional. `UInt` number. If not specified, defaults to 1. + +**Returned value** + +- an array of `UInt` numbers + +**Examples** + +Query: +``` sql +SELECT range(10); +``` +Result: +```[0,1,2,3,4,5,6,7,8,9]``` + +Query: +``` sql +SELECT range(0); +``` +Result: +`[]` + +Query: +``` sql +SELECT range(1, 10, 2); +``` +Result: +`[1,3,5,7,9]` + Just in case, an exception is thrown if arrays with a total length of more than 100,000,000 elements are created in a data block. ## array(x1, …), operator \[x1, …\] {#arrayx1-operator-x1} diff --git a/docs/ru/sql-reference/functions/array-functions.md b/docs/ru/sql-reference/functions/array-functions.md index 10fc91de205..297ca5c61ee 100644 --- a/docs/ru/sql-reference/functions/array-functions.md +++ b/docs/ru/sql-reference/functions/array-functions.md @@ -39,10 +39,58 @@ toc_title: "Массивы" Принимает пустой массив и возвращает массив из одного элемента, равного значению по умолчанию. -## range(N) {#rangen} +## range(end) или range(start, end [, step]) {#range} -Возвращает массив чисел от 0 до N-1. -На всякий случай, если на блок данных, создаются массивы суммарной длины больше 100 000 000 элементов, то кидается исключение. +Возвращает массив чисел от `start` до `end`-1 с шагом `step`. + +``` sql +range(end) +``` +``` sql +range(start, end, step) +``` + +**Аргументы** + +- `start` - начало диапазона. По умолчанию равно 0 +- `end` - конец диапазона. Должен быть больше, чем начало (`start`) +- `step` - шаг обхода. По умолчанию равен 1 + + +**Возвращаемые значения** + +- массив `UInt` чисел + + +**Особенности** + +- Не поддерживаются отрицательные значения аргументов. `start`, `end`, `step` имеют формат `UInt`. + +- На всякий случай: если в блоке данных создаются массивы суммарной длиной больше 100 000 000 элементов, то выбрасывается исключение. + + +**Примеры** + +Запрос: +``` sql +SELECT range(10); +``` +Ответ: +```[0,1,2,3,4,5,6,7,8,9]``` + +Запрос: +``` sql +SELECT range(0); +``` +Ответ: +`[]` + +Запрос: +``` sql +SELECT range(1, 10, 2); +``` +Ответ: +`[1,3,5,7,9]` ## array(x1, …), оператор \[x1, …\] {#arrayx1-operator-x1} From b61346a708e9723e72739df90641d8e9b5a5733a Mon Sep 17 00:00:00 2001 From: Alina Terekhova Date: Thu, 17 Jun 2021 02:16:34 +0200 Subject: [PATCH 12/30] Examples fix + anchor fix --- docs/en/sql-reference/functions/array-functions.md | 10 ++-------- docs/ru/sql-reference/functions/array-functions.md | 13 +++---------- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/docs/en/sql-reference/functions/array-functions.md b/docs/en/sql-reference/functions/array-functions.md index 28da727793f..70f1117c796 100644 --- a/docs/en/sql-reference/functions/array-functions.md +++ b/docs/en/sql-reference/functions/array-functions.md @@ -39,9 +39,9 @@ Accepts zero arguments and returns an empty array of the appropriate type. Accepts an empty array and returns a one-element array that is equal to the default value. -## range(end), range(start, end \[, step\]) {#rangeend-rangestart-end-step} +## range(end), range(start, end \[, step\]) {#range} -Returns an array of numbers from `start` to `end`-1 by `step`. +Returns an array of numbers from `start` to `end - 1` by `step`. **Syntax** ``` sql @@ -71,12 +71,6 @@ SELECT range(10); Result: ```[0,1,2,3,4,5,6,7,8,9]``` -Query: -``` sql -SELECT range(0); -``` -Result: -`[]` Query: ``` sql diff --git a/docs/ru/sql-reference/functions/array-functions.md b/docs/ru/sql-reference/functions/array-functions.md index 297ca5c61ee..270bd572fd2 100644 --- a/docs/ru/sql-reference/functions/array-functions.md +++ b/docs/ru/sql-reference/functions/array-functions.md @@ -41,7 +41,7 @@ toc_title: "Массивы" ## range(end) или range(start, end [, step]) {#range} -Возвращает массив чисел от `start` до `end`-1 с шагом `step`. +Возвращает массив чисел от `start` до `end - 1` с шагом `step`. ``` sql range(end) @@ -53,7 +53,7 @@ range(start, end, step) **Аргументы** - `start` - начало диапазона. По умолчанию равно 0 -- `end` - конец диапазона. Должен быть больше, чем начало (`start`) +- `end` - конец диапазона. Должен быть больше, чем начало `start` - `step` - шаг обхода. По умолчанию равен 1 @@ -64,7 +64,7 @@ range(start, end, step) **Особенности** -- Не поддерживаются отрицательные значения аргументов. `start`, `end`, `step` имеют формат `UInt`. +- Не поддерживаются отрицательные значения аргументов: `start`, `end`, `step` имеют формат `UInt`. - На всякий случай: если в блоке данных создаются массивы суммарной длиной больше 100 000 000 элементов, то выбрасывается исключение. @@ -78,13 +78,6 @@ SELECT range(10); Ответ: ```[0,1,2,3,4,5,6,7,8,9]``` -Запрос: -``` sql -SELECT range(0); -``` -Ответ: -`[]` - Запрос: ``` sql SELECT range(1, 10, 2); From 65ec6bce92ae4bed582240913580d8a960157ebe Mon Sep 17 00:00:00 2001 From: Alina Terekhova Date: Thu, 17 Jun 2021 02:31:38 +0200 Subject: [PATCH 13/30] Comma added back --- docs/ru/sql-reference/functions/array-functions.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/ru/sql-reference/functions/array-functions.md b/docs/ru/sql-reference/functions/array-functions.md index 270bd572fd2..c918436dd1e 100644 --- a/docs/ru/sql-reference/functions/array-functions.md +++ b/docs/ru/sql-reference/functions/array-functions.md @@ -39,7 +39,7 @@ toc_title: "Массивы" Принимает пустой массив и возвращает массив из одного элемента, равного значению по умолчанию. -## range(end) или range(start, end [, step]) {#range} +## range(end), range(start, end [, step]) {#range} Возвращает массив чисел от `start` до `end - 1` с шагом `step`. @@ -1617,4 +1617,4 @@ SELECT arrayProduct([toDecimal64(1,8), toDecimal64(2,8), toDecimal64(3,8)]) as r ┌─res─┬─toTypeName(arrayProduct(array(toDecimal64(1, 8), toDecimal64(2, 8), toDecimal64(3, 8))))─┐ │ 6 │ Float64 │ └─────┴──────────────────────────────────────────────────────────────────────────────────────────┘ -``` \ No newline at end of file +``` From dd6f93b2a7570e47123ed3cd77435d649187fbe7 Mon Sep 17 00:00:00 2001 From: Alina Terekhova Date: Thu, 17 Jun 2021 11:02:06 +0200 Subject: [PATCH 14/30] Small corrections --- docs/en/sql-reference/functions/array-functions.md | 4 ++-- docs/ru/sql-reference/functions/array-functions.md | 12 +++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/docs/en/sql-reference/functions/array-functions.md b/docs/en/sql-reference/functions/array-functions.md index 70f1117c796..ad899007b89 100644 --- a/docs/en/sql-reference/functions/array-functions.md +++ b/docs/en/sql-reference/functions/array-functions.md @@ -64,7 +64,7 @@ It behaves almost like pythonic `range`. But the difference is that all the argu **Examples** -Query: +Query with only `end` argument: ``` sql SELECT range(10); ``` @@ -72,7 +72,7 @@ Result: ```[0,1,2,3,4,5,6,7,8,9]``` -Query: +Query with all argumets: ``` sql SELECT range(1, 10, 2); ``` diff --git a/docs/ru/sql-reference/functions/array-functions.md b/docs/ru/sql-reference/functions/array-functions.md index c918436dd1e..0831a7bfc47 100644 --- a/docs/ru/sql-reference/functions/array-functions.md +++ b/docs/ru/sql-reference/functions/array-functions.md @@ -43,6 +43,8 @@ toc_title: "Массивы" Возвращает массив чисел от `start` до `end - 1` с шагом `step`. +**Синтаксис** + ``` sql range(end) ``` @@ -52,9 +54,9 @@ range(start, end, step) **Аргументы** -- `start` - начало диапазона. По умолчанию равно 0 -- `end` - конец диапазона. Должен быть больше, чем начало `start` -- `step` - шаг обхода. По умолчанию равен 1 +- `start` - начало диапазона. По умолчанию равно `0`. +- `end` - конец диапазона. Должен быть больше, чем `start`. +- `step` - шаг обхода. По умолчанию равен `1`. **Возвращаемые значения** @@ -71,14 +73,14 @@ range(start, end, step) **Примеры** -Запрос: +Запрос с указанием только `end`: ``` sql SELECT range(10); ``` Ответ: ```[0,1,2,3,4,5,6,7,8,9]``` -Запрос: +Запрос с указанием `start`, `end` и `step`: ``` sql SELECT range(1, 10, 2); ``` From fdc729764b4da5ac1a1897726227d4785ab01f80 Mon Sep 17 00:00:00 2001 From: Alina Terekhova Date: Fri, 18 Jun 2021 19:53:52 +0200 Subject: [PATCH 15/30] Edits --- .../functions/array-functions.md | 41 ++++++++----------- .../functions/array-functions.md | 31 ++++++-------- 2 files changed, 31 insertions(+), 41 deletions(-) diff --git a/docs/en/sql-reference/functions/array-functions.md b/docs/en/sql-reference/functions/array-functions.md index ad899007b89..2c620097f47 100644 --- a/docs/en/sql-reference/functions/array-functions.md +++ b/docs/en/sql-reference/functions/array-functions.md @@ -39,47 +39,42 @@ Accepts zero arguments and returns an empty array of the appropriate type. Accepts an empty array and returns a one-element array that is equal to the default value. -## range(end), range(start, end \[, step\]) {#range} +## range(end), range(\[start, \] end \[, step\]) {#range} -Returns an array of numbers from `start` to `end - 1` by `step`. +Returns an array of `UInt` numbers from `start` to `end - 1` by `step`. **Syntax** ``` sql -range(end) +range([start, ] end [, step]) ``` -``` sql -range(start, end, step) -``` -It behaves almost like pythonic `range`. But the difference is that all the arguments must be `UInt` type numbers. + +Just in case, an exception is thrown if arrays with a total length of more than 100,000,000 elements are created in a data block. + **Arguments** -- `start` - required if step is used. `UInt` number. If not specified, defaults to 0. -- `end` - required. `UInt` number. Must be greater than `start`. -- `step` - optional. `UInt` number. If not specified, defaults to 1. +- `start` - The first element of the array. Optional, required if `step` is used. Default value: 0. [UInt](../../data-types/int-uint.md) +- `end` - The number before which the array of integers is constructed. Required. Must be greater than `start`. [UInt](../../data-types/int-uint.md) +- `step` - Determines the increment between each integer in the array. Optional. Default value: 1. [UInt](../../data-types/int-uint.md) + **Returned value** -- an array of `UInt` numbers +- Array of `UInt` numbers from `start` to `end - 1` by `step`. + **Examples** -Query with only `end` argument: +Query: ``` sql -SELECT range(10); +SELECT range(5), range(1, 5), range(1, 5, 2); ``` Result: -```[0,1,2,3,4,5,6,7,8,9]``` - - -Query with all argumets: -``` sql -SELECT range(1, 10, 2); +```txt +┌─range(5)────┬─range(1, 5)─┬─range(1, 5, 2)─┐ +│ [0,1,2,3,4] │ [1,2,3,4] │ [1,3] │ +└─────────────┴─────────────┴────────────────┘ ``` -Result: -`[1,3,5,7,9]` - -Just in case, an exception is thrown if arrays with a total length of more than 100,000,000 elements are created in a data block. ## array(x1, …), operator \[x1, …\] {#arrayx1-operator-x1} diff --git a/docs/ru/sql-reference/functions/array-functions.md b/docs/ru/sql-reference/functions/array-functions.md index 0831a7bfc47..867d59805dc 100644 --- a/docs/ru/sql-reference/functions/array-functions.md +++ b/docs/ru/sql-reference/functions/array-functions.md @@ -39,29 +39,26 @@ toc_title: "Массивы" Принимает пустой массив и возвращает массив из одного элемента, равного значению по умолчанию. -## range(end), range(start, end [, step]) {#range} +## range(end), range(\[start, \] end \[, step\]) {#range} Возвращает массив чисел от `start` до `end - 1` с шагом `step`. **Синтаксис** ``` sql -range(end) -``` -``` sql -range(start, end, step) +range([start, ] end [, step]) ``` **Аргументы** -- `start` - начало диапазона. По умолчанию равно `0`. -- `end` - конец диапазона. Должен быть больше, чем `start`. -- `step` - шаг обхода. По умолчанию равен `1`. +- `start` - начало диапазона. Обязательно, когда указан `step`. По умолчанию равно `0`. Тип: [UInt](../../data-types/int-uint.md) +- `end` - конец диапазона. Обязательный аргумент. Должен быть больше, чем `start`. Тип: [UInt](../../data-types/int-uint.md) +- `step` - шаг обхода. Необязательный аргумент. По умолчанию равен `1`. Тип: [UInt](../../data-types/int-uint.md) **Возвращаемые значения** -- массив `UInt` чисел +- массив `UInt` чисел от `start` до `end - 1` с шагом `step` **Особенности** @@ -73,19 +70,17 @@ range(start, end, step) **Примеры** -Запрос с указанием только `end`: +Запрос: ``` sql -SELECT range(10); +SELECT range(5), range(1, 5), range(1, 5, 2); ``` Ответ: -```[0,1,2,3,4,5,6,7,8,9]``` +```txt +┌─range(5)────┬─range(1, 5)─┬─range(1, 5, 2)─┐ +│ [0,1,2,3,4] │ [1,2,3,4] │ [1,3] │ +└─────────────┴─────────────┴────────────────┘ +``` -Запрос с указанием `start`, `end` и `step`: -``` sql -SELECT range(1, 10, 2); -``` -Ответ: -`[1,3,5,7,9]` ## array(x1, …), оператор \[x1, …\] {#arrayx1-operator-x1} From 11d350e16d1a9d0bb6dd7b282fd2207d5a4e040c Mon Sep 17 00:00:00 2001 From: Alina Terekhova Date: Sun, 20 Jun 2021 14:23:18 +0200 Subject: [PATCH 16/30] UInt link fixes + small edits --- docs/en/sql-reference/functions/array-functions.md | 9 +++++---- docs/ru/sql-reference/functions/array-functions.md | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/docs/en/sql-reference/functions/array-functions.md b/docs/en/sql-reference/functions/array-functions.md index 2c620097f47..6141d8ca73c 100644 --- a/docs/en/sql-reference/functions/array-functions.md +++ b/docs/en/sql-reference/functions/array-functions.md @@ -39,6 +39,7 @@ Accepts zero arguments and returns an empty array of the appropriate type. Accepts an empty array and returns a one-element array that is equal to the default value. + ## range(end), range(\[start, \] end \[, step\]) {#range} Returns an array of `UInt` numbers from `start` to `end - 1` by `step`. @@ -48,14 +49,14 @@ Returns an array of `UInt` numbers from `start` to `end - 1` by `step`. range([start, ] end [, step]) ``` -Just in case, an exception is thrown if arrays with a total length of more than 100,000,000 elements are created in a data block. +An exception is thrown if query results in arrays with a total length of more than 100,000,000 elements. **Arguments** -- `start` - The first element of the array. Optional, required if `step` is used. Default value: 0. [UInt](../../data-types/int-uint.md) -- `end` - The number before which the array of integers is constructed. Required. Must be greater than `start`. [UInt](../../data-types/int-uint.md) -- `step` - Determines the increment between each integer in the array. Optional. Default value: 1. [UInt](../../data-types/int-uint.md) +- `start` - The first element of the array. Optional, required if `step` is used. Default value: 0. [UInt](../data-types/int-uint.md) +- `end` - The number before which the array is constructed. Required. Must be greater than `start`. [UInt](../data-types/int-uint.md) +- `step` - Determines the incremental step between each element in the array. Optional. Default value: 1. [UInt](../data-types/int-uint.md) **Returned value** diff --git a/docs/ru/sql-reference/functions/array-functions.md b/docs/ru/sql-reference/functions/array-functions.md index 867d59805dc..2e911f82bc8 100644 --- a/docs/ru/sql-reference/functions/array-functions.md +++ b/docs/ru/sql-reference/functions/array-functions.md @@ -39,6 +39,7 @@ toc_title: "Массивы" Принимает пустой массив и возвращает массив из одного элемента, равного значению по умолчанию. + ## range(end), range(\[start, \] end \[, step\]) {#range} Возвращает массив чисел от `start` до `end - 1` с шагом `step`. @@ -51,9 +52,9 @@ range([start, ] end [, step]) **Аргументы** -- `start` - начало диапазона. Обязательно, когда указан `step`. По умолчанию равно `0`. Тип: [UInt](../../data-types/int-uint.md) -- `end` - конец диапазона. Обязательный аргумент. Должен быть больше, чем `start`. Тип: [UInt](../../data-types/int-uint.md) -- `step` - шаг обхода. Необязательный аргумент. По умолчанию равен `1`. Тип: [UInt](../../data-types/int-uint.md) +- `start` - начало диапазона. Обязательно, когда указан `step`. По умолчанию равно `0`. Тип: [UInt](../data-types/int-uint.md) +- `end` - конец диапазона. Обязательный аргумент. Должен быть больше, чем `start`. Тип: [UInt](../data-types/int-uint.md) +- `step` - шаг обхода. Необязательный аргумент. По умолчанию равен `1`. Тип: [UInt](../data-types/int-uint.md) **Возвращаемые значения** @@ -65,7 +66,7 @@ range([start, ] end [, step]) - Не поддерживаются отрицательные значения аргументов: `start`, `end`, `step` имеют формат `UInt`. -- На всякий случай: если в блоке данных создаются массивы суммарной длиной больше 100 000 000 элементов, то выбрасывается исключение. +- Если в результате запроса создаются массивы суммарной длиной больше 100 000 000 элементов, то генерируется исключение. **Примеры** From d09ad74c1240d6885de6fb91578cf5dfecd4f674 Mon Sep 17 00:00:00 2001 From: Alina Terekhova Date: Sun, 20 Jun 2021 14:37:28 +0200 Subject: [PATCH 17/30] Tiret fix --- docs/en/sql-reference/functions/array-functions.md | 6 +++--- docs/ru/sql-reference/functions/array-functions.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/en/sql-reference/functions/array-functions.md b/docs/en/sql-reference/functions/array-functions.md index 6141d8ca73c..6b330c2b7d4 100644 --- a/docs/en/sql-reference/functions/array-functions.md +++ b/docs/en/sql-reference/functions/array-functions.md @@ -54,9 +54,9 @@ An exception is thrown if query results in arrays with a total length of more th **Arguments** -- `start` - The first element of the array. Optional, required if `step` is used. Default value: 0. [UInt](../data-types/int-uint.md) -- `end` - The number before which the array is constructed. Required. Must be greater than `start`. [UInt](../data-types/int-uint.md) -- `step` - Determines the incremental step between each element in the array. Optional. Default value: 1. [UInt](../data-types/int-uint.md) +- `start` — The first element of the array. Optional, required if `step` is used. Default value: 0. [UInt](../data-types/int-uint.md) +- `end` — The number before which the array is constructed. Required. Must be greater than `start`. [UInt](../data-types/int-uint.md) +- `step` — Determines the incremental step between each element in the array. Optional. Default value: 1. [UInt](../data-types/int-uint.md) **Returned value** diff --git a/docs/ru/sql-reference/functions/array-functions.md b/docs/ru/sql-reference/functions/array-functions.md index 2e911f82bc8..3bf84e2aa59 100644 --- a/docs/ru/sql-reference/functions/array-functions.md +++ b/docs/ru/sql-reference/functions/array-functions.md @@ -52,9 +52,9 @@ range([start, ] end [, step]) **Аргументы** -- `start` - начало диапазона. Обязательно, когда указан `step`. По умолчанию равно `0`. Тип: [UInt](../data-types/int-uint.md) -- `end` - конец диапазона. Обязательный аргумент. Должен быть больше, чем `start`. Тип: [UInt](../data-types/int-uint.md) -- `step` - шаг обхода. Необязательный аргумент. По умолчанию равен `1`. Тип: [UInt](../data-types/int-uint.md) +- `start` — начало диапазона. Обязательно, когда указан `step`. По умолчанию равно `0`. Тип: [UInt](../data-types/int-uint.md) +- `end` — конец диапазона. Обязательный аргумент. Должен быть больше, чем `start`. Тип: [UInt](../data-types/int-uint.md) +- `step` — шаг обхода. Необязательный аргумент. По умолчанию равен `1`. Тип: [UInt](../data-types/int-uint.md) **Возвращаемые значения** From ee829289845629a5209c22d244b065156f5c76a7 Mon Sep 17 00:00:00 2001 From: Alina Terekhova Date: Mon, 21 Jun 2021 11:48:24 +0200 Subject: [PATCH 18/30] Structure fix --- docs/en/sql-reference/functions/array-functions.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/en/sql-reference/functions/array-functions.md b/docs/en/sql-reference/functions/array-functions.md index 6b330c2b7d4..44004c22a2d 100644 --- a/docs/en/sql-reference/functions/array-functions.md +++ b/docs/en/sql-reference/functions/array-functions.md @@ -49,20 +49,21 @@ Returns an array of `UInt` numbers from `start` to `end - 1` by `step`. range([start, ] end [, step]) ``` -An exception is thrown if query results in arrays with a total length of more than 100,000,000 elements. - - **Arguments** - `start` — The first element of the array. Optional, required if `step` is used. Default value: 0. [UInt](../data-types/int-uint.md) - `end` — The number before which the array is constructed. Required. Must be greater than `start`. [UInt](../data-types/int-uint.md) - `step` — Determines the incremental step between each element in the array. Optional. Default value: 1. [UInt](../data-types/int-uint.md) - **Returned value** - Array of `UInt` numbers from `start` to `end - 1` by `step`. +**Peculiar properties** + +- All arguments must be positive values: `start`, `end`, `step` are `UInt` data types, as well as the returned array. +- An exception is thrown if query results in arrays with a total length of more than 100,000,000 elements. + **Examples** From fd03f3027b87630c0bee30a17ff2c0ddcf7b11b6 Mon Sep 17 00:00:00 2001 From: Alina Terekhova Date: Mon, 21 Jun 2021 12:01:23 +0200 Subject: [PATCH 19/30] Implementation details --- docs/en/sql-reference/functions/array-functions.md | 2 +- docs/ru/sql-reference/functions/array-functions.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/sql-reference/functions/array-functions.md b/docs/en/sql-reference/functions/array-functions.md index 44004c22a2d..f5e8874ea96 100644 --- a/docs/en/sql-reference/functions/array-functions.md +++ b/docs/en/sql-reference/functions/array-functions.md @@ -59,7 +59,7 @@ range([start, ] end [, step]) - Array of `UInt` numbers from `start` to `end - 1` by `step`. -**Peculiar properties** +**Implementation details** - All arguments must be positive values: `start`, `end`, `step` are `UInt` data types, as well as the returned array. - An exception is thrown if query results in arrays with a total length of more than 100,000,000 elements. diff --git a/docs/ru/sql-reference/functions/array-functions.md b/docs/ru/sql-reference/functions/array-functions.md index 3bf84e2aa59..b08182ade6b 100644 --- a/docs/ru/sql-reference/functions/array-functions.md +++ b/docs/ru/sql-reference/functions/array-functions.md @@ -62,7 +62,7 @@ range([start, ] end [, step]) - массив `UInt` чисел от `start` до `end - 1` с шагом `step` -**Особенности** +**Особенности реализации** - Не поддерживаются отрицательные значения аргументов: `start`, `end`, `step` имеют формат `UInt`. From f531421c334bf353a589a96a7a5d969c704f2852 Mon Sep 17 00:00:00 2001 From: Alina Terekhova Date: Mon, 21 Jun 2021 12:11:42 +0200 Subject: [PATCH 20/30] Rephrasing --- docs/en/sql-reference/functions/array-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/sql-reference/functions/array-functions.md b/docs/en/sql-reference/functions/array-functions.md index f5e8874ea96..24688624673 100644 --- a/docs/en/sql-reference/functions/array-functions.md +++ b/docs/en/sql-reference/functions/array-functions.md @@ -61,7 +61,7 @@ range([start, ] end [, step]) **Implementation details** -- All arguments must be positive values: `start`, `end`, `step` are `UInt` data types, as well as the returned array. +- All arguments must be positive values: `start`, `end`, `step` are `UInt` data types, as well as elements of the returned array. - An exception is thrown if query results in arrays with a total length of more than 100,000,000 elements. From eaa0f35811684ff9c8e17912989887c810b3a380 Mon Sep 17 00:00:00 2001 From: George Date: Tue, 22 Jun 2021 03:23:33 +0300 Subject: [PATCH 21/30] Documented setting flatten_nested --- docs/en/operations/settings/settings.md | 62 +++++++++++++++++++ .../nested-data-structures/nested.md | 2 +- docs/ru/operations/settings/settings.md | 62 +++++++++++++++++++ .../nested-data-structures/nested.md | 2 +- 4 files changed, 126 insertions(+), 2 deletions(-) diff --git a/docs/en/operations/settings/settings.md b/docs/en/operations/settings/settings.md index 10461eacbff..d66b78a3909 100644 --- a/docs/en/operations/settings/settings.md +++ b/docs/en/operations/settings/settings.md @@ -3065,4 +3065,66 @@ SELECT FROM fuse_tbl ``` +## flatten_nested {#flatten-nested} + +Sets the data format of a [nested](../../sql-reference/data-types/nested-data-structures/nested.md) columns. + +Possible values: + +- 0 — Nested column is flattened to separate arrays. +- 1 — Nested column is flattened to a singe array of tuples. + +Default value: `1`. + +**Usage** + +If the setting is set to `0`, it is possible to use an arbitrary level of nesting. + +With the setting set to `1`: + +``` sql +CREATE TABLE t_nest (`n` Nested(a UInt32, b UInt32)) ENGINE = MergeTree ORDER BY tuple(); + +SHOW CREATE TABLE t_nest; +``` + +Result: + +``` text +┌─statement───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ CREATE TABLE default.t_nest +( + `n.a` Array(UInt32), + `n.b` Array(UInt32) +) +ENGINE = MergeTree +ORDER BY tuple() +SETTINGS index_granularity = 8192 │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +``` + +With the setting set to `0`: + +``` sql +SET flatten_nested = 0; + +CREATE TABLE t_nest (`n` Nested(a UInt32, b UInt32)) ENGINE = MergeTree ORDER BY tuple(); + +SHOW CREATE TABLE t_nest; +``` + +Result: + +``` text +┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ CREATE TABLE default.t_nest +( + `n` Nested(a UInt32, b UInt32) +) +ENGINE = MergeTree +ORDER BY tuple() +SETTINGS index_granularity = 8192 │ +└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +``` + [Original article](https://clickhouse.tech/docs/en/operations/settings/settings/) diff --git a/docs/en/sql-reference/data-types/nested-data-structures/nested.md b/docs/en/sql-reference/data-types/nested-data-structures/nested.md index 902ae8ef715..715df575856 100644 --- a/docs/en/sql-reference/data-types/nested-data-structures/nested.md +++ b/docs/en/sql-reference/data-types/nested-data-structures/nested.md @@ -34,7 +34,7 @@ CREATE TABLE test.visits This example declares the `Goals` nested data structure, which contains data about conversions (goals reached). Each row in the ‘visits’ table can correspond to zero or any number of conversions. -Arbitrary levels of nesting are supported. Columns of nested structures containing arrays are equivalent to multidimensional arrays, so they have limited support (there is no support for storing these columns in tables with the MergeTree engine). +Arbitrary levels of nesting are supported, but to use more than one level you need to set the setting [flatten_nested](../../../operations/settings/settings.md#flatten-nested) to `0`. Columns of nested structures containing arrays are equivalent to multidimensional arrays, so they have limited support (there is no support for storing these columns in tables with the MergeTree engine). In most cases, when working with a nested data structure, its columns are specified with column names separated by a dot. These columns make up an array of matching types. All the column arrays of a single nested data structure have the same length. diff --git a/docs/ru/operations/settings/settings.md b/docs/ru/operations/settings/settings.md index ada8ee91293..94effe75887 100644 --- a/docs/ru/operations/settings/settings.md +++ b/docs/ru/operations/settings/settings.md @@ -2956,4 +2956,66 @@ SELECT FROM fuse_tbl ``` +## flatten_nested {#flatten-nested} + +Устанавливает формат данных у [вложенных](../../sql-reference/data-types/nested-data-structures/nested.md) столбцов. + +Возможные значения: + +- 0 — вложенный столбец преобразуется к отдельным массивам. +- 1 — вложенный столбец преобразуется к массиву кортежей. + +Значение по умолчанию: `1`. + +**Использование** + +Если установлено значение `0`, возможно использовать любой уровень вложенности. + +С значением настройки `1`: + +``` sql +CREATE TABLE t_nest (`n` Nested(a UInt32, b UInt32)) ENGINE = MergeTree ORDER BY tuple(); + +SHOW CREATE TABLE t_nest; +``` + +Результат: + +``` text +┌─statement───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ CREATE TABLE default.t_nest +( + `n.a` Array(UInt32), + `n.b` Array(UInt32) +) +ENGINE = MergeTree +ORDER BY tuple() +SETTINGS index_granularity = 8192 │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +``` + +С значением настройки `0`: + +``` sql +SET flatten_nested = 0; + +CREATE TABLE t_nest (`n` Nested(a UInt32, b UInt32)) ENGINE = MergeTree ORDER BY tuple(); + +SHOW CREATE TABLE t_nest; +``` + +Результат: + +``` text +┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ CREATE TABLE default.t_nest +( + `n` Nested(a UInt32, b UInt32) +) +ENGINE = MergeTree +ORDER BY tuple() +SETTINGS index_granularity = 8192 │ +└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +``` + [Оригинальная статья](https://clickhouse.tech/docs/ru/operations/settings/settings/) diff --git a/docs/ru/sql-reference/data-types/nested-data-structures/nested.md b/docs/ru/sql-reference/data-types/nested-data-structures/nested.md index e192db755fc..8275afef642 100644 --- a/docs/ru/sql-reference/data-types/nested-data-structures/nested.md +++ b/docs/ru/sql-reference/data-types/nested-data-structures/nested.md @@ -29,7 +29,7 @@ CREATE TABLE test.visits В этом примере объявлена вложенная структура данных `Goals`, содержащая данные о достижении целей. Каждой строке таблицы visits может соответствовать от нуля до произвольного количества достижений целей. -Поддерживаются любые уровни вложенности. Столбцы вложенных структур, содержащие массивы, эквивалентны многомерным массивам, поэтому их поддержка ограничена (не поддерживается хранение таких столбцов в таблицах с движком семейства MergeTree). +Поддерживаются любые уровни вложенности, но чтобы использовать уровень больше одного, необходимо установить `0` настройке [flatten_nested](../../../operations/settings/settings.md#flatten-nested). Столбцы вложенных структур, содержащие массивы, эквивалентны многомерным массивам, поэтому их поддержка ограничена (не поддерживается хранение таких столбцов в таблицах с движком семейства MergeTree). В большинстве случаев, при работе с вложенной структурой данных, указываются отдельные её столбцы. Для этого, имена столбцов указываются через точку. Эти столбцы представляют собой массивы соответствующих типов. Все столбцы-массивы одной вложенной структуры данных имеют одинаковые длины. From d0f89322ac6aaffbaa02158a61c3d1f506043f67 Mon Sep 17 00:00:00 2001 From: Azat Khuzhin Date: Tue, 22 Jun 2021 10:54:39 +0300 Subject: [PATCH 22/30] clickhouse-test: use basename (instead of full path) for log_comment --- tests/clickhouse-test | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/clickhouse-test b/tests/clickhouse-test index e508abab70c..61f718df133 100755 --- a/tests/clickhouse-test +++ b/tests/clickhouse-test @@ -139,7 +139,8 @@ def configure_testcase_args(args, case_file, suite_tmp_dir, stderr_file): testcase_args = copy.deepcopy(args) testcase_args.testcase_start_time = datetime.now() - testcase_args.testcase_client = f"{testcase_args.client} --log_comment='{case_file}'" + testcase_basename = os.path.basename(case_file) + testcase_args.testcase_client = f"{testcase_args.client} --log_comment='{testcase_basename}'" if testcase_args.database: database = testcase_args.database From 44a793b01a0bf8177776959dba21215f1f4d5b1b Mon Sep 17 00:00:00 2001 From: gyuton <40863448+gyuton@users.noreply.github.com> Date: Tue, 22 Jun 2021 12:17:22 +0300 Subject: [PATCH 23/30] Apply suggestions from code review Co-authored-by: olgarev <56617294+olgarev@users.noreply.github.com> --- docs/en/operations/settings/settings.md | 7 +++++-- docs/ru/operations/settings/settings.md | 10 +++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/docs/en/operations/settings/settings.md b/docs/en/operations/settings/settings.md index d66b78a3909..5482b6fc658 100644 --- a/docs/en/operations/settings/settings.md +++ b/docs/en/operations/settings/settings.md @@ -3080,9 +3080,12 @@ Default value: `1`. If the setting is set to `0`, it is possible to use an arbitrary level of nesting. -With the setting set to `1`: +**Examples** + +Query: ``` sql +SET flatten_nested = 1; CREATE TABLE t_nest (`n` Nested(a UInt32, b UInt32)) ENGINE = MergeTree ORDER BY tuple(); SHOW CREATE TABLE t_nest; @@ -3103,7 +3106,7 @@ SETTINGS index_granularity = 8192 │ └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` -With the setting set to `0`: +Query: ``` sql SET flatten_nested = 0; diff --git a/docs/ru/operations/settings/settings.md b/docs/ru/operations/settings/settings.md index 94effe75887..99183e35eba 100644 --- a/docs/ru/operations/settings/settings.md +++ b/docs/ru/operations/settings/settings.md @@ -2969,11 +2969,15 @@ FROM fuse_tbl **Использование** -Если установлено значение `0`, возможно использовать любой уровень вложенности. +Если установлено значение `0`, можно использовать любой уровень вложенности. -С значением настройки `1`: +**Примеры** + +Запрос: ``` sql +SET flatten_nested = 1; + CREATE TABLE t_nest (`n` Nested(a UInt32, b UInt32)) ENGINE = MergeTree ORDER BY tuple(); SHOW CREATE TABLE t_nest; @@ -2994,7 +2998,7 @@ SETTINGS index_granularity = 8192 │ └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` -С значением настройки `0`: +Запрос: ``` sql SET flatten_nested = 0; From 87e02dca9c0f364ace62cb9c01aff55d29339fd4 Mon Sep 17 00:00:00 2001 From: George Date: Tue, 22 Jun 2021 12:23:12 +0300 Subject: [PATCH 24/30] Small update --- .../sql-reference/data-types/nested-data-structures/nested.md | 4 +++- .../sql-reference/data-types/nested-data-structures/nested.md | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/en/sql-reference/data-types/nested-data-structures/nested.md b/docs/en/sql-reference/data-types/nested-data-structures/nested.md index 715df575856..bfdf94254c8 100644 --- a/docs/en/sql-reference/data-types/nested-data-structures/nested.md +++ b/docs/en/sql-reference/data-types/nested-data-structures/nested.md @@ -34,7 +34,9 @@ CREATE TABLE test.visits This example declares the `Goals` nested data structure, which contains data about conversions (goals reached). Each row in the ‘visits’ table can correspond to zero or any number of conversions. -Arbitrary levels of nesting are supported, but to use more than one level you need to set the setting [flatten_nested](../../../operations/settings/settings.md#flatten-nested) to `0`. Columns of nested structures containing arrays are equivalent to multidimensional arrays, so they have limited support (there is no support for storing these columns in tables with the MergeTree engine). +When [flatten_nested](../../../operations/settings/settings.md#flatten-nested) is set to `0` (which is not by default), arbitrary levels of nesting are supported. + +Columns of nested structures containing arrays are equivalent to multidimensional arrays, so they have limited support (there is no support for storing these columns in tables with the [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) engine). In most cases, when working with a nested data structure, its columns are specified with column names separated by a dot. These columns make up an array of matching types. All the column arrays of a single nested data structure have the same length. diff --git a/docs/ru/sql-reference/data-types/nested-data-structures/nested.md b/docs/ru/sql-reference/data-types/nested-data-structures/nested.md index 8275afef642..05739bda2e6 100644 --- a/docs/ru/sql-reference/data-types/nested-data-structures/nested.md +++ b/docs/ru/sql-reference/data-types/nested-data-structures/nested.md @@ -29,7 +29,9 @@ CREATE TABLE test.visits В этом примере объявлена вложенная структура данных `Goals`, содержащая данные о достижении целей. Каждой строке таблицы visits может соответствовать от нуля до произвольного количества достижений целей. -Поддерживаются любые уровни вложенности, но чтобы использовать уровень больше одного, необходимо установить `0` настройке [flatten_nested](../../../operations/settings/settings.md#flatten-nested). Столбцы вложенных структур, содержащие массивы, эквивалентны многомерным массивам, поэтому их поддержка ограничена (не поддерживается хранение таких столбцов в таблицах с движком семейства MergeTree). +Если настройка [flatten_nested](../../../operations/settings/settings.md#flatten-nested) установлена в значение `0` (что не является значением по умолчанию), поддерживаются любые уровни вложенности. + +Столбцы вложенных структур, содержащие массивы, эквивалентны многомерным массивам, поэтому их поддержка ограничена (хранение таких столбцов в таблицах с движком семейства [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) не поддерживается). В большинстве случаев, при работе с вложенной структурой данных, указываются отдельные её столбцы. Для этого, имена столбцов указываются через точку. Эти столбцы представляют собой массивы соответствующих типов. Все столбцы-массивы одной вложенной структуры данных имеют одинаковые длины. From 6edf9e1d079d1144a3cae078092cb2529c1f486b Mon Sep 17 00:00:00 2001 From: George Date: Tue, 22 Jun 2021 12:27:22 +0300 Subject: [PATCH 25/30] Deleted obsolete phrase --- .../sql-reference/data-types/nested-data-structures/nested.md | 2 -- .../sql-reference/data-types/nested-data-structures/nested.md | 2 -- 2 files changed, 4 deletions(-) diff --git a/docs/en/sql-reference/data-types/nested-data-structures/nested.md b/docs/en/sql-reference/data-types/nested-data-structures/nested.md index bfdf94254c8..ec6c613a956 100644 --- a/docs/en/sql-reference/data-types/nested-data-structures/nested.md +++ b/docs/en/sql-reference/data-types/nested-data-structures/nested.md @@ -36,8 +36,6 @@ This example declares the `Goals` nested data structure, which contains data abo When [flatten_nested](../../../operations/settings/settings.md#flatten-nested) is set to `0` (which is not by default), arbitrary levels of nesting are supported. -Columns of nested structures containing arrays are equivalent to multidimensional arrays, so they have limited support (there is no support for storing these columns in tables with the [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) engine). - In most cases, when working with a nested data structure, its columns are specified with column names separated by a dot. These columns make up an array of matching types. All the column arrays of a single nested data structure have the same length. Example: diff --git a/docs/ru/sql-reference/data-types/nested-data-structures/nested.md b/docs/ru/sql-reference/data-types/nested-data-structures/nested.md index 05739bda2e6..718fe77ae95 100644 --- a/docs/ru/sql-reference/data-types/nested-data-structures/nested.md +++ b/docs/ru/sql-reference/data-types/nested-data-structures/nested.md @@ -31,8 +31,6 @@ CREATE TABLE test.visits Если настройка [flatten_nested](../../../operations/settings/settings.md#flatten-nested) установлена в значение `0` (что не является значением по умолчанию), поддерживаются любые уровни вложенности. -Столбцы вложенных структур, содержащие массивы, эквивалентны многомерным массивам, поэтому их поддержка ограничена (хранение таких столбцов в таблицах с движком семейства [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) не поддерживается). - В большинстве случаев, при работе с вложенной структурой данных, указываются отдельные её столбцы. Для этого, имена столбцов указываются через точку. Эти столбцы представляют собой массивы соответствующих типов. Все столбцы-массивы одной вложенной структуры данных имеют одинаковые длины. Пример: From d9e681b8bcebe7050d756d2630b2370f587def68 Mon Sep 17 00:00:00 2001 From: Anton Popov Date: Tue, 22 Jun 2021 14:40:49 +0300 Subject: [PATCH 26/30] Update settings.md --- docs/en/operations/settings/settings.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/operations/settings/settings.md b/docs/en/operations/settings/settings.md index 5482b6fc658..3c58173ab82 100644 --- a/docs/en/operations/settings/settings.md +++ b/docs/en/operations/settings/settings.md @@ -3071,8 +3071,8 @@ Sets the data format of a [nested](../../sql-reference/data-types/nested-data-st Possible values: -- 0 — Nested column is flattened to separate arrays. -- 1 — Nested column is flattened to a singe array of tuples. +- 1 — Nested column is flattened to separate arrays. +- 0 — Nested column stays a single array of tuples. Default value: `1`. From 367b8b800ac67ff8dacaedf018cd326bbd2c5db8 Mon Sep 17 00:00:00 2001 From: Anton Popov Date: Tue, 22 Jun 2021 14:42:20 +0300 Subject: [PATCH 27/30] Update settings.md --- docs/ru/operations/settings/settings.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/ru/operations/settings/settings.md b/docs/ru/operations/settings/settings.md index 99183e35eba..ea3051cf42d 100644 --- a/docs/ru/operations/settings/settings.md +++ b/docs/ru/operations/settings/settings.md @@ -2962,8 +2962,8 @@ FROM fuse_tbl Возможные значения: -- 0 — вложенный столбец преобразуется к отдельным массивам. -- 1 — вложенный столбец преобразуется к массиву кортежей. +- 1 — вложенный столбец преобразуется к отдельным массивам. +- 0 — вложенный столбец преобразуется к массиву кортежей. Значение по умолчанию: `1`. From 7a742efcbbc27c7e729e5a2b1bf9862b25145c6d Mon Sep 17 00:00:00 2001 From: Alina Terekhova Date: Tue, 22 Jun 2021 15:41:14 +0200 Subject: [PATCH 28/30] Update docs/ru/sql-reference/functions/array-functions.md format to type Co-authored-by: tavplubix --- docs/ru/sql-reference/functions/array-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ru/sql-reference/functions/array-functions.md b/docs/ru/sql-reference/functions/array-functions.md index b08182ade6b..0dfad45605a 100644 --- a/docs/ru/sql-reference/functions/array-functions.md +++ b/docs/ru/sql-reference/functions/array-functions.md @@ -64,7 +64,7 @@ range([start, ] end [, step]) **Особенности реализации** -- Не поддерживаются отрицательные значения аргументов: `start`, `end`, `step` имеют формат `UInt`. +- Не поддерживаются отрицательные значения аргументов: `start`, `end`, `step` имеют тип `UInt`. - Если в результате запроса создаются массивы суммарной длиной больше 100 000 000 элементов, то генерируется исключение. From 749855f1c8bf709c3106d19d7c9d14dc8dfc3165 Mon Sep 17 00:00:00 2001 From: Alina Terekhova Date: Tue, 22 Jun 2021 15:43:16 +0200 Subject: [PATCH 29/30] Removed start-end comparison statement --- docs/en/sql-reference/functions/array-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/sql-reference/functions/array-functions.md b/docs/en/sql-reference/functions/array-functions.md index 24688624673..6495a26a426 100644 --- a/docs/en/sql-reference/functions/array-functions.md +++ b/docs/en/sql-reference/functions/array-functions.md @@ -52,7 +52,7 @@ range([start, ] end [, step]) **Arguments** - `start` — The first element of the array. Optional, required if `step` is used. Default value: 0. [UInt](../data-types/int-uint.md) -- `end` — The number before which the array is constructed. Required. Must be greater than `start`. [UInt](../data-types/int-uint.md) +- `end` — The number before which the array is constructed. Required. [UInt](../data-types/int-uint.md) - `step` — Determines the incremental step between each element in the array. Optional. Default value: 1. [UInt](../data-types/int-uint.md) **Returned value** From a6a43ce3ee8ca1bc34053ab50190f8d19fd8810b Mon Sep 17 00:00:00 2001 From: tavplubix Date: Tue, 22 Jun 2021 17:25:21 +0300 Subject: [PATCH 30/30] Revert "Implement h3ToGeo function" --- contrib/h3 | 2 +- docs/en/sql-reference/functions/geo/h3.md | 35 ------- src/Functions/h3toGeo.cpp | 96 ------------------- src/Functions/registerFunctionsGeo.cpp | 2 - .../0_stateless/01659_h3_buffer_overflow.sql | 1 - .../0_stateless/01906_h3_to_geo.reference | 32 ------- tests/queries/0_stateless/01906_h3_to_geo.sql | 61 ------------ 7 files changed, 1 insertion(+), 228 deletions(-) delete mode 100644 src/Functions/h3toGeo.cpp delete mode 100644 tests/queries/0_stateless/01906_h3_to_geo.reference delete mode 100644 tests/queries/0_stateless/01906_h3_to_geo.sql diff --git a/contrib/h3 b/contrib/h3 index 5c44b06c406..e209086ae1b 160000 --- a/contrib/h3 +++ b/contrib/h3 @@ -1 +1 @@ -Subproject commit 5c44b06c406613b7792a60b11d04b871116f6e30 +Subproject commit e209086ae1b5477307f545a0f6111780edc59940 diff --git a/docs/en/sql-reference/functions/geo/h3.md b/docs/en/sql-reference/functions/geo/h3.md index 6c03f55cebe..20dc7b29902 100644 --- a/docs/en/sql-reference/functions/geo/h3.md +++ b/docs/en/sql-reference/functions/geo/h3.md @@ -195,41 +195,6 @@ Result: └────────────────────┘ ``` -## h3ToGeo {#h3togeo} - -Returns `(lon, lat)` that corresponds to the provided H3 index. - -**Syntax** - -``` sql -h3ToGeo(h3Index) -``` - -**Arguments** - -- `h3Index` — H3 Index. Type: [UInt64](../../../sql-reference/data-types/int-uint.md). - -**Returned values** - -- `lon` — Longitude. Type: [Float64](../../../sql-reference/data-types/float.md). -- `lat` — Latitude. Type: [Float64](../../../sql-reference/data-types/float.md). - - -**Example** - -Query: - -``` sql -SELECT h3ToGeo(644325524701193974) coordinates; -``` - -Result: - -``` text -┌─coordinates───────────────────────────┐ -│ (37.79506616830252,55.71290243145668) │ -└───────────────────────────────────────┘ -``` ## h3kRing {#h3kring} Lists all the [H3](#h3index) hexagons in the raduis of `k` from the given hexagon in random order. diff --git a/src/Functions/h3toGeo.cpp b/src/Functions/h3toGeo.cpp deleted file mode 100644 index 8ce0b15dc8c..00000000000 --- a/src/Functions/h3toGeo.cpp +++ /dev/null @@ -1,96 +0,0 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif - -#if USE_H3 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - - -namespace DB -{ -namespace ErrorCodes -{ -extern const int ILLEGAL_TYPE_OF_ARGUMENT; -} - -namespace -{ - -/// Implements the function h3ToGeo which takes a single argument (h3Index) -/// and returns the longitude and latitude that correspond to the provided h3 index -class FunctionH3ToGeo : public IFunction -{ -public: - static constexpr auto name = "h3ToGeo"; - - static FunctionPtr create(ContextPtr) { return std::make_shared(); } - - std::string getName() const override { return name; } - - size_t getNumberOfArguments() const override { return 1; } - bool useDefaultImplementationForConstants() const override { return true; } - - DataTypePtr getReturnTypeImpl(const DataTypes & arguments) const override - { - const auto * arg = arguments[0].get(); - if (!WhichDataType(arg).isUInt64()) - throw Exception( - "Illegal type " + arg->getName() + " of argument " + std::to_string(1) + " of function " + getName() + ". Must be UInt64", - ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT); - - return std::make_shared( - DataTypes{std::make_shared(), std::make_shared()}, - Strings{"longitude", "latitude"}); - } - - ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override - { - const auto * col_index = arguments[0].column.get(); - - auto latitude = ColumnFloat64::create(input_rows_count); - auto longitude = ColumnFloat64::create(input_rows_count); - - ColumnFloat64::Container & lon_data = longitude->getData(); - ColumnFloat64::Container & lat_data = latitude->getData(); - - - for (size_t row = 0; row < input_rows_count; ++row) - { - H3Index h3index = col_index->getUInt(row); - GeoCoord coord{}; - - h3ToGeo(h3index,&coord); - lon_data[row] = radsToDegs(coord.lon); - lat_data[row] = radsToDegs(coord.lat); - } - - MutableColumns columns; - columns.emplace_back(std::move(longitude)); - columns.emplace_back(std::move(latitude)); - return ColumnTuple::create(std::move(columns)); - } -}; - -} - -void registerFunctionH3ToGeo(FunctionFactory & factory) -{ - factory.registerFunction(); -} - -} - -#endif diff --git a/src/Functions/registerFunctionsGeo.cpp b/src/Functions/registerFunctionsGeo.cpp index 1ab475345a0..605dd4dcba0 100644 --- a/src/Functions/registerFunctionsGeo.cpp +++ b/src/Functions/registerFunctionsGeo.cpp @@ -28,7 +28,6 @@ void registerFunctionSvg(FunctionFactory & factory); #if USE_H3 void registerFunctionGeoToH3(FunctionFactory &); -void registerFunctionH3ToGeo(FunctionFactory &); void registerFunctionH3EdgeAngle(FunctionFactory &); void registerFunctionH3EdgeLengthM(FunctionFactory &); void registerFunctionH3GetResolution(FunctionFactory &); @@ -67,7 +66,6 @@ void registerFunctionsGeo(FunctionFactory & factory) #if USE_H3 registerFunctionGeoToH3(factory); - registerFunctionH3ToGeo(factory); registerFunctionH3EdgeAngle(factory); registerFunctionH3EdgeLengthM(factory); registerFunctionH3GetResolution(factory); diff --git a/tests/queries/0_stateless/01659_h3_buffer_overflow.sql b/tests/queries/0_stateless/01659_h3_buffer_overflow.sql index f2d77641ec9..b752059da48 100644 --- a/tests/queries/0_stateless/01659_h3_buffer_overflow.sql +++ b/tests/queries/0_stateless/01659_h3_buffer_overflow.sql @@ -7,4 +7,3 @@ SELECT h3kRing(0xFFFFFFFFFFFFFF, 1000) FORMAT Null; SELECT h3GetBaseCell(0xFFFFFFFFFFFFFF) FORMAT Null; SELECT h3GetResolution(0xFFFFFFFFFFFFFF) FORMAT Null; SELECT h3kRing(0xFFFFFFFFFFFFFF, 10) FORMAT Null; -SELECT h3ToGeo(0xFFFFFFFFFFFFFF) FORMAT Null; diff --git a/tests/queries/0_stateless/01906_h3_to_geo.reference b/tests/queries/0_stateless/01906_h3_to_geo.reference deleted file mode 100644 index 93e8600576c..00000000000 --- a/tests/queries/0_stateless/01906_h3_to_geo.reference +++ /dev/null @@ -1,32 +0,0 @@ -(-173.6412167681162,-14.130272474941535) -(59.48137613600854,58.020407687755686) -(172.68095885060296,-83.6576608516349) -(-94.46556851304558,-69.1999982492279) -(-8.188263637093279,-55.856179102736284) -(77.25594891852249,47.39278564360122) -(135.11348004704536,36.60778126579667) -(39.28534828967223,49.07710003066973) -(124.71163478198051,-27.481172161567258) -(-147.4887686066785,76.73237945824442) -(86.63291906118863,-25.52526285188784) -(23.27751790712118,13.126101362212724) -(-70.40163237204142,-63.12562536833242) -(15.642428355535966,40.285813505163574) -(-76.53411447979884,54.5560449693637) -(8.19906334981474,67.69370966550179) -ok -ok -ok -ok -ok -ok -ok -ok -ok -ok -ok -ok -ok -ok -ok -ok diff --git a/tests/queries/0_stateless/01906_h3_to_geo.sql b/tests/queries/0_stateless/01906_h3_to_geo.sql deleted file mode 100644 index aa6ecca1754..00000000000 --- a/tests/queries/0_stateless/01906_h3_to_geo.sql +++ /dev/null @@ -1,61 +0,0 @@ -DROP TABLE IF EXISTS h3_indexes; - -CREATE TABLE h3_indexes (h3_index UInt64) ENGINE = Memory; - --- Random geo coordinates were generated using the H3 tool: https://github.com/ClickHouse-Extras/h3/blob/master/src/apps/testapps/mkRandGeo.c at various resolutions from 0 to 15. --- Corresponding H3 index values were in turn generated with those geo coordinates using `geoToH3(lon, lat, res)` ClickHouse function for the following test. - -INSERT INTO h3_indexes VALUES (579205133326352383); -INSERT INTO h3_indexes VALUES (581263419093549055); -INSERT INTO h3_indexes VALUES (589753847883235327); -INSERT INTO h3_indexes VALUES (594082350283882495); -INSERT INTO h3_indexes VALUES (598372386957426687); -INSERT INTO h3_indexes VALUES (599542359671177215); -INSERT INTO h3_indexes VALUES (604296355086598143); -INSERT INTO h3_indexes VALUES (608785214872748031); -INSERT INTO h3_indexes VALUES (615732192485572607); -INSERT INTO h3_indexes VALUES (617056794467368959); -INSERT INTO h3_indexes VALUES (624586477873168383); -INSERT INTO h3_indexes VALUES (627882919484481535); -INSERT INTO h3_indexes VALUES (634600058503392255); -INSERT INTO h3_indexes VALUES (635544851677385791); -INSERT INTO h3_indexes VALUES (639763125756281263); -INSERT INTO h3_indexes VALUES (644178757620501158); - - -SELECT h3ToGeo(h3_index) FROM h3_indexes ORDER BY h3_index; - -DROP TABLE h3_indexes; - -DROP TABLE IF EXISTS h3_geo; - --- compare if the results of h3ToGeo and geoToH3 are the same - -CREATE TABLE h3_geo(lat Float64, lon Float64, res UInt8) ENGINE = Memory; - -INSERT INTO h3_geo VALUES (-173.6412167681162, -14.130272474941535, 0); -INSERT INTO h3_geo VALUES (59.48137613600854, 58.020407687755686, 1); -INSERT INTO h3_geo VALUES (172.68095885060296, -83.6576608516349, 2); -INSERT INTO h3_geo VALUES (-94.46556851304558, -69.1999982492279, 3); -INSERT INTO h3_geo VALUES (-8.188263637093279, -55.856179102736284, 4); -INSERT INTO h3_geo VALUES (77.25594891852249, 47.39278564360122, 5); -INSERT INTO h3_geo VALUES (135.11348004704536, 36.60778126579667, 6); -INSERT INTO h3_geo VALUES (39.28534828967223, 49.07710003066973, 7); -INSERT INTO h3_geo VALUES (124.71163478198051, -27.481172161567258, 8); -INSERT INTO h3_geo VALUES (-147.4887686066785, 76.73237945824442, 9); -INSERT INTO h3_geo VALUES (86.63291906118863, -25.52526285188784, 10); -INSERT INTO h3_geo VALUES (23.27751790712118, 13.126101362212724, 11); -INSERT INTO h3_geo VALUES (-70.40163237204142, -63.12562536833242, 12); -INSERT INTO h3_geo VALUES (15.642428355535966, 40.285813505163574, 13); -INSERT INTO h3_geo VALUES (-76.53411447979884, 54.5560449693637, 14); -INSERT INTO h3_geo VALUES (8.19906334981474, 67.69370966550179, 15); - -SELECT result FROM ( - SELECT - (lat, lon) AS input_geo, - h3ToGeo(geoToH3(lat, lon, res)) AS output_geo, - if(input_geo = output_geo, 'ok', 'fail') AS result - FROM h3_geo -); - -DROP TABLE h3_geo;