Skip to content

Commit 8790479

Browse files
shnikdblinkov
andauthored
YDBDOCS-819: serial types (#8956)
Co-authored-by: Ivan Blinkov <ivan@blinkov.ru> Co-authored-by: Ivan Blinkov <ivan@ydb.tech>
1 parent b37a3ff commit 8790479

File tree

8 files changed

+82
-3
lines changed

8 files changed

+82
-3
lines changed

ydb/docs/_assets/tags.css

100644100755
File mode changed.

ydb/docs/presets.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ default:
99
feature_replace: true
1010
feature_upsert: true
1111
feature_join: true
12+
feature_serial: true
1213
feature_map_tables: true
1314
feature_group_by_rollup_cube: true
1415
feature_window_functions: true

ydb/docs/ru/core/reference/ydb-cli/export-import/_includes/tools-dump.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
- `database` - Полностью консистентная выгрузка, со снятием одного снапшота перед началом выгрузки. Применяется по умолчанию.
2424
- `table` - Консистентность в пределах каждой выгружаемой таблицы, со снятием отдельных независимых снапшотов для каждой выгружаемой таблицы. Может работать быстрее и оказывать меньшее влияние на обработку текущей нагрузки на базу данных.
2525

26-
`--avoid-copy`: Не применять создание снапшота для выгрузки. Применяемый по умолчанию для обеспечения консистентности снапшот может быть неприменим для некоторых случаев (например, для таблиц со внешними блобами).
26+
`--avoid-copy`: Не применять создание снапшота для выгрузки. Применяемый по умолчанию для обеспечения консистентности снапшот может быть неприменим для некоторых случаев (например, для таблиц со внешними блобами).{% if feature_serial %} Для корректной выгрузки таблиц с [серийными](../../../../yql/reference/types/serial.md) типами требуется не выставлять этот параметр. Иначе актуальное значение генератора последовательности не будет скопировано, и новые значения будут выдаваться со стартового значения, что может привести к конфликтам по первичному ключу.{% endif %}
2727

2828
`--save-partial-result`: Не удалять результат частично выполненной выгрузки. Без включения данной опции результат выгрузки будет удален, если в процессе её выполнения произойдет ошибка.
2929

ydb/docs/ru/core/yql/reference/yql-core/syntax/create_table/index.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,22 @@ WITH (
9494

9595
{% if feature_column_container_type == true %}
9696

97-
Для неключевых колонок допускаются любые типы данных, для ключевых - только [примитивные](../../types/primitive.md). При указании сложных типов (например, `List<String>`) тип заключается в двойные кавычки.
98-
97+
Для неключевых колонок допускаются любые типы данных{% if feature_serial %} , кроме [серийных](../../types/serial.md) {% endif %}, для ключевых - только [примитивные](../../types/primitive.md){% if feature_serial %} и [серийные](../../types/serial.md){% endif %}. При указании сложных типов (например, `List<String>`) тип заключается в двойные кавычки.
98+
9999
{% else %}
100100

101+
{% if feature_serial %}
102+
103+
Для ключевых колонок допускаются только [примитивные](../../types/primitive.md) и [серийные](../../types/serial.md) типы данных, для неключевых колонок допускаются только [примитивные](../../types/primitive.md).
104+
105+
{% else %}
106+
101107
Для ключевых и неключевых колонок допускаются только [примитивные](../../types/primitive.md) типы данных.
102108

103109
{% endif %}
104110

111+
{% endif %}
112+
105113
{% if feature_not_null == true %}
106114

107115
Без дополнительных модификаторов колонка приобретает [опциональный тип](../../types/optional.md), и допускает запись `NULL` в качестве значений. Для получения неопционального типа необходимо использовать `NOT NULL`.
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# Серийные типы данных
2+
3+
Серийные типы данных представляют собой целые числа, но с дополнительным механизмом генерации значений. Эти типы данных используются для создания автоинкрементных колонок, а именно для каждой новой строки, добавляемой в таблицу, будет автоматически генерироваться уникальное значение для такой колонки (подобно типу [SERIAL](https://www.postgresql.org/docs/current/datatype-numeric.html#DATATYPE-SERIAL) в PostgreSQL или свойству [AUTO_INCREMENT](https://dev.mysql.com/doc/refman/9.0/en/example-auto-increment.html) в MySQL).
4+
5+
## Пример использования
6+
7+
``` yql
8+
CREATE TABLE users (
9+
user_id Serial,
10+
name Utf8,
11+
email Utf8,
12+
PRIMARY KEY (user_id)
13+
);
14+
```
15+
16+
``` yql
17+
UPSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
18+
INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com');
19+
REPLACE INTO users (name, email) VALUES ('John', 'john@example.com');
20+
```
21+
22+
``` yql
23+
SELECT * FROM users;
24+
```
25+
26+
email | name | user_id
27+
----- | ----- | -----
28+
`alice@example.com` | Alice | 1
29+
`bob@example.com` | Bob | 2
30+
`john@example.com` | John | 3
31+
32+
Можно самостоятельно указать значение `Serial` колонки при вставке, в этом случае вставка будет выполняться, как с обычной целочисленной колонкой и `Sequence` затрагиваться при таком запросе никак не будет:
33+
34+
``` yql
35+
UPSERT INTO users (user_id, name, email) VALUES (4, 'Peter', 'peter@example.com');
36+
```
37+
38+
## Описание
39+
40+
Только колонки, участвующие в первичном ключе таблиц, могут иметь тип `Serial`.
41+
42+
При определении такого типа для колонки создаётся отдельный схемный объект `Sequence`, привязанный к этой колонке и являющийся генератором последовательности, из которого извлекаются значения. Этот объект является приватным и скрыт от пользователя. `Sequence` будет уничтожен вместе с таблицей.
43+
44+
Значения последовательности начинаются с единицы, выдаются с шагом, равным единице, и ограничены в зависимости от используемого типа.
45+
46+
Тип | Максимальное значение | Тип значения
47+
----- | ----- | -----
48+
`SmallSerial` | $2^15–1$ | `Int16`
49+
`Serial2` | $2^15–1$ | `Int16`
50+
`Serial` | $2^31–1$ | `Int32`
51+
`Serial4` | $2^31–1$ | `Int32`
52+
`Serial8` | $2^63–1$ | `Int64`
53+
`BigSerial` | $2^63–1$ | `Int64`
54+
55+
При переполнении `Sequence` на вставке будет возвращаться ошибка:
56+
57+
```text
58+
Error: Failed to get next val for sequence: /dev/test/users/_serial_column_user_id, status: SCHEME_ERROR
59+
<main>: Error: sequence [OwnerId: <some>, LocalPathId: <some>] doesn't have any more values available, code: 200503
60+
```
61+
62+
Отметим, что следующее значение выдаётся генератором до непосредственной вставки в таблицу и уже будет считаться использованным, даже если строка, содержащая это значение, не была успешно вставлена, например, при откате транзакции. Поэтому множество значений такой колонки может содержать пропуски и состоять из нескольких промежутков.
63+
64+
Для таблиц с автоинкрементными колонками поддержаны операции [copy](../../../../reference/ydb-cli/tools-copy.md), [dump](../../../../reference/ydb-cli/export-import/tools-dump.md), [restore](../../../../reference/ydb-cli/export-import/import-file.md) и [import](../../../../reference/ydb-cli/export-import/import-s3.md)/[export](../../../../reference/ydb-cli/export-import/export-s3.md).

ydb/docs/ru/core/yql/reference/yql-core/types/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
В данном разделе размещены статьи по типам данных YQL:
44

55
- [Простые/примитивные типы](primitive.md)
6+
{% if feature_serial %}- [Серийные типы](serial.md){% endif %}
67
- [Опциональные типы](optional.md)
78
- [Контейнеры](containers.md)
89
- [Специальные типы](special.md)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
2+
{% include [x](_includes/serial.md) %}

ydb/docs/ru/core/yql/reference/yql-core/types/toc_i.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ items:
33
href: index.md
44
- name: Простые
55
href: primitive.md
6+
- name: Серийные
7+
href: serial.md
8+
when: feature_serial
69
- name: Опциональные
710
href: optional.md
811
- name: Контейнеры

0 commit comments

Comments
 (0)