mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-21 01:00:48 +00:00
New data types: Nullable and Nothing.
Processing of Nullable in inserts from selects. Some links and typographic fixes.
This commit is contained in:
parent
0a09fc7707
commit
f7ba157b10
@ -122,10 +122,9 @@ pages:
|
||||
|
||||
- 'Табличные функции':
|
||||
- 'Введение': 'table_functions/index.md'
|
||||
- 'file': 'table_functions/file.md'
|
||||
- 'remote': 'table_functions/remote.md'
|
||||
- 'merge': 'table_functions/merge.md'
|
||||
- 'numbers': 'table_functions/numbers.md'
|
||||
- 'remote': 'table_functions/remote.md'
|
||||
|
||||
- 'Форматы':
|
||||
- 'Введение': 'formats/index.md'
|
||||
@ -166,6 +165,7 @@ pages:
|
||||
- 'Array(T)': 'data_types/array.md'
|
||||
- 'AggregateFunction(name, types_of_arguments...)': 'data_types/nested_data_structures/aggregatefunction.md'
|
||||
- 'Tuple(T1, T2, ...)': 'data_types/tuple.md'
|
||||
- 'Nullable': 'data_types/nullable.md'
|
||||
- 'Вложенные структуры данных':
|
||||
# - 'Вложенные структуры данных': 'data_types/nested_data_structures/index.md'
|
||||
- 'Nested(Name1 Type1, Name2 Type2, ...)': 'data_types/nested_data_structures/nested.md'
|
||||
@ -173,6 +173,7 @@ pages:
|
||||
# - 'Служебные типы данных': 'data_types/special_data_types/index.md'
|
||||
- 'Expression': 'data_types/special_data_types/expression.md'
|
||||
- 'Set': 'data_types/special_data_types/set.md'
|
||||
- 'Nothing': 'data_types/special_data_types/nothing.md'
|
||||
|
||||
- 'Операторы': 'operators/index.md'
|
||||
|
||||
|
46
docs/ru/data_types/nullable.md
Normal file
46
docs/ru/data_types/nullable.md
Normal file
@ -0,0 +1,46 @@
|
||||
<a name="data_type-nullable"></a>
|
||||
|
||||
# Nullable(TypeName)
|
||||
|
||||
Позволяет хранить в таблице [NULL](../query_language/syntax.md#null-literal) вместо значения типа `TypeName`.
|
||||
|
||||
В качестве `TypeName` нельзя использовать составные типы данных [Array](array.md#data_type-array) и [Tuple](typle.md#data_type-tuple). Составные типы данных могут содержать значения типа `Nullable`, например `Array(Nullable(Int8))`.
|
||||
|
||||
Поле типа `Nullable` нельзя включать в индексы.
|
||||
|
||||
## Пример использования
|
||||
|
||||
```
|
||||
:) CREATE TABLE t_null(x Int8, y Nullable(Int8)) engine TinyLog
|
||||
|
||||
CREATE TABLE t_null
|
||||
(
|
||||
x Int8,
|
||||
y Nullable(Int8)
|
||||
)
|
||||
ENGINE = TinyLog
|
||||
|
||||
Ok.
|
||||
|
||||
0 rows in set. Elapsed: 0.012 sec.
|
||||
|
||||
:) INSERT INTO t_null VALUES (1, NULL)
|
||||
|
||||
INSERT INTO t_null VALUES
|
||||
|
||||
Ok.
|
||||
|
||||
1 rows in set. Elapsed: 0.007 sec.
|
||||
|
||||
:) SELECT x+y from t_null
|
||||
|
||||
SELECT x + y
|
||||
FROM t_null
|
||||
|
||||
┌─plus(x, y)─┐
|
||||
│ \N │
|
||||
└────────────┘
|
||||
|
||||
1 rows in set. Elapsed: 0.009 sec.
|
||||
|
||||
```
|
19
docs/ru/data_types/special_data_types/nothing.md
Normal file
19
docs/ru/data_types/special_data_types/nothing.md
Normal file
@ -0,0 +1,19 @@
|
||||
<a name="special_data_type-nothing"></a>
|
||||
|
||||
# Nothing
|
||||
|
||||
Этот тип данных предназначен только для того, чтобы представлять [NULL](../../query_language/syntax.md#null-literal).
|
||||
|
||||
Невозможно создать значение типа `Nothing`, поэтому он используется там, где значение не подразумевается. Например, `NULL` записывается как `Nullable(Nothing)` ([Nullable](../../data_types/nullable.md#data_type-nullable) — это тип данных, позволяющий хранить `NULL` в таблицах). Также тип Nothing используется для обозначения пустых массивов:
|
||||
|
||||
```bash
|
||||
:) SELECT toTypeName(Array())
|
||||
|
||||
SELECT toTypeName([])
|
||||
|
||||
┌─toTypeName(array())─┐
|
||||
│ Array(Nothing) │
|
||||
└─────────────────────┘
|
||||
|
||||
1 rows in set. Elapsed: 0.062 sec.
|
||||
```
|
@ -1,3 +1,5 @@
|
||||
<a name="data_type-tuple"></a>
|
||||
|
||||
# Tuple(T1, T2, ...)
|
||||
|
||||
Кортежи не могут быть записаны в таблицы (кроме таблиц типа Memory). Они используется для временной группировки столбцов. Столбцы могут группироваться при использовании выражения IN в запросе, а также для указания нескольких формальных параметров лямбда-функций. Подробнее смотрите раздел "Операторы IN", "Функции высшего порядка".
|
||||
|
@ -84,4 +84,7 @@ JSON совместим с JavaScript. Для этого, дополнитель
|
||||
`extremes` - экстремальные значения (при настройке extremes, выставленной в 1).
|
||||
|
||||
Этот формат подходит только для вывода результата выполнения запроса, но не для парсинга (приёма данных для вставки в таблицу).
|
||||
|
||||
ClickHouse поддерживает [NULL](../query_language/syntax.md#null-literal), который при выводе JSON будет отображен как `null`.
|
||||
|
||||
Смотрите также формат JSONEachRow.
|
||||
|
@ -13,4 +13,4 @@ FixedString представлены просто как последовате
|
||||
|
||||
Array представлены как длина в формате varint (unsigned [LEB128](https://en.wikipedia.org/wiki/LEB128)), а затем элементы массива, подряд.
|
||||
|
||||
Для поддержки [NULL](../query_language/syntax.md#null-literal) перед каждым значением в строке добавлен дополнительный байт, который содержит 0 или 1. Если 0, то значение не `NULL` и далее идёт значение. Если 1, то значение — `NULL` и этот байт трактуется как отдельное значение.
|
||||
Для поддержки [NULL](../query_language/syntax.md#null-literal) перед каждым значением типа [Nullable](../data_types/nullable.md#data_type-nullable) в строке добавлен дополнительный байт, который содержит 1 или 0. Если 1, то значение — `NULL` и этот байт трактуется как отдельное значение. Если 0, то после байта идёт не `NULL`-значение.
|
||||
|
@ -1,4 +1,4 @@
|
||||
<a name="values"></a>
|
||||
<a name="formats-values"></a>
|
||||
|
||||
# Values
|
||||
|
||||
|
@ -641,13 +641,20 @@ INSERT INTO t FORMAT TabSeparated
|
||||
INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...
|
||||
```
|
||||
|
||||
Соответствие столбцов определяется их позицией в секции SELECT. При этом, их имена в выражении SELECT и в таблице для INSERT, могут отличаться. При необходимости выполняется приведение типов данных, эквивалентное соответствующему оператору CAST.
|
||||
Соответствие столбцов определяется их позицией в секции `SELECT`. При этом, их имена в выражении `SELECT` и в таблице для `INSERT`, могут отличаться. При необходимости выполняется приведение типов данных, эквивалентное соответствующему оператору `CAST`.
|
||||
|
||||
Все форматы данных кроме Values не позволяют использовать в качестве значений выражения, такие как `now()`, `1 + 2` и подобные. Формат Values позволяет ограниченно использовать выражения, но это не рекомендуется, так как в этом случае для их выполнения используется неэффективный вариант кода.
|
||||
Все форматы данных кроме [Values](..formats/values.md#formats-values) не позволяют использовать в качестве значений выражения, такие как `now()`, `1 + 2` и подобные. Формат `Values` позволяет ограниченно использовать выражения, но это не рекомендуется, так как в этом случае для их выполнения используется неэффективный вариант кода.
|
||||
|
||||
Не поддерживаются другие запросы на модификацию части данных: `UPDATE`, `DELETE`, `REPLACE`, `MERGE`, `UPSERT`, `INSERT UPDATE`.
|
||||
Вы можете удалять старые данные с помощью запроса `ALTER TABLE ... DROP PARTITION`.
|
||||
|
||||
Особенности вставки значений типа [Nullable](../data_types/nullable.md#data_types-nullable):
|
||||
|
||||
- Если не `Nullable` значение вставляется в `Nullable` поле, то операция происходит без особенностей.
|
||||
- Если значение типа `Nullable` вставляется в не `Nullable` поле, то ClickHouse проверяет присутствие `NULL` в результатах `SELECT` и если:
|
||||
- Есть хотя бы один `NULL`, то ClickHouse не выполняет `INSERT` и генерирует исключение.
|
||||
- Нет ни одного `NULL`, то ClickHouse выполняет `INSERT`, но тип значения преобразуется к типу поля в конечной таблице.
|
||||
|
||||
### Замечания о производительности
|
||||
|
||||
`INSERT` сортирует входящие данные по первичному ключу и разбивает их на партиции по месяцам. Если вы вставляете данные за разные месяцы вперемешку, то это может значительно снизить производительность запроса `INSERT`. Чтобы избежать этого:
|
||||
|
Loading…
Reference in New Issue
Block a user