Skip to content

Commit 69669df

Browse files
Add partitioning examples to YQL CREATE TABLE (#8618)
Co-authored-by: Ivan Blinkov <ivan@ydb.tech>
1 parent 2f6fb9d commit 69669df

File tree

4 files changed

+180
-24
lines changed

4 files changed

+180
-24
lines changed

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

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,20 +124,57 @@ By default, if the `STORE` parameter is not specified, a row-oriented table is c
124124
125125
{% endif %}
126126
127+
Example of creating a row-oriented table using partitioning options:
128+
129+
```yql
130+
CREATE TABLE <table_name> (
131+
a Uint64,
132+
b Uint64,
133+
c Float,
134+
PRIMARY KEY (a, b)
135+
)
136+
WITH (
137+
AUTO_PARTITIONING_BY_SIZE = ENABLED,
138+
AUTO_PARTITIONING_PARTITION_SIZE_MB = 512
139+
);
140+
```
141+
142+
Such code will create a row-oriented table with automatic partitioning by partition size (`AUTO_PARTITIONING_BY_SIZE`) enabled, and with the preferred size of each partition (`AUTO_PARTITIONING_PARTITION_SIZE_MB`) set to 512 megabytes. The full list of row-oriented table partitioning options can be found in the [{#T}](../../../../concepts/datamodel/table.md#partitioning) section.
143+
144+
127145
- Creating a column-oriented table
128146

129147
```yql
130148
CREATE TABLE table_name (
131149
a Uint64 NOT NULL,
132-
b Uint64 NOT NULL,
150+
b Timestamp NOT NULL,
133151
c Float,
134152
PRIMARY KEY (a, b)
135153
)
154+
PARTITION BY HASH(b)
136155
WITH (
137156
STORE = COLUMN
138157
);
139158
```
140159

160+
Example of creating a column-oriented table with an option to specify the minimum physical number of partitions for storing data:
161+
162+
```yql
163+
CREATE TABLE table_name (
164+
a Uint64 NOT NULL,
165+
b Timestamp NOT NULL,
166+
c Float,
167+
PRIMARY KEY (a, b)
168+
)
169+
PARTITION BY HASH(b)
170+
WITH (
171+
STORE = COLUMN,
172+
AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = 10
173+
);
174+
```
175+
176+
This code will create a columnar table with 10 partitions. The full list of column-oriented table partitioning options can be found in the [{#T}](../../../../concepts/datamodel/table.md#olap-tables-partitioning) section.
177+
141178
{% endlist %}
142179

143180
{% else %}
@@ -186,6 +223,7 @@ CREATE TABLE <table_name> (
186223
PRIMARY KEY (a, b)
187224
);
188225
```
226+
189227
{% endif %}
190228

191229
{% if backend_name == "YDB" %}

ydb/docs/en/core/yql/reference/yql-core/syntax/create_table/with.md

Lines changed: 51 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,58 @@ WITH (
3131

3232
{% if backend_name == "YDB" %}
3333

34-
In the `WITH` clause, you can also specify TTL (Time to Live) — the lifespan of a row. [TTL](../../../../concepts/ttl.md) automatically removes rows from the string table when the specified number of seconds have passed from the time recorded in the TTL column. TTL can be set when the table is created or added later via `ALTER TABLE`. The code below will create a string table with TTL:
3534

36-
```yql
37-
CREATE TABLE my_table (
38-
id Uint64,
39-
title Utf8,
40-
expire_at Timestamp,
41-
PRIMARY KEY (id)
42-
)
43-
WITH (
44-
TTL = Interval("PT0S") ON expire_at
45-
);
35+
A colum-oriented table is created by specifying the parameter `STORE = COLUMN` in the `WITH` clause:
36+
37+
```sql
38+
CREATE TABLE table_name (
39+
a Uint64 NOT NULL,
40+
b Timestamp NOT NULL,
41+
c Float,
42+
PRIMARY KEY (a, b)
43+
)
44+
PARTITION BY HASH(b)
45+
WITH (
46+
STORE = COLUMN
47+
);
4648
```
4749

50+
The properties and capabilities of columnar tables are described in the article [{#T}](../../../../concepts/datamodel/table.md), and the specifics of their creation through YQL are described on the page [{#T}](./index.md). Also, the TTL (Time to Live) — the lifespan of a row — can be specified in the WITH clause for row-based and columnar tables. [TTL](../../../../concepts/ttl.md) automatically deletes rows when the specified number of seconds has passed since the time recorded in the TTL column. TTL can be specified when creating row-based and columnar tables or added later using the `ALTER TABLE` command only for row-based tables.
51+
52+
Example of creating a row-oriented and column-oriented tables with TTL:
53+
54+
{% list tabs %}
55+
56+
- Creating row-oriented table with TTL
57+
58+
```sql
59+
CREATE TABLE my_table (
60+
id Uint64,
61+
title Utf8,
62+
expire_at Timestamp,
63+
PRIMARY KEY (id)
64+
)
65+
WITH (
66+
TTL = Interval("PT0S") ON expire_at
67+
);
68+
```
69+
70+
- Creating column-oriented table with TTL
71+
72+
```sql
73+
CREATE TABLE table_name (
74+
a Uint64 NOT NULL,
75+
b Timestamp NOT NULL,
76+
c Float,
77+
PRIMARY KEY (a, b)
78+
)
79+
PARTITION BY HASH(b)
80+
WITH (
81+
STORE = COLUMN,
82+
TTL = Interval("PT0S") ON b
83+
);
84+
```
85+
86+
{% endlist %}
87+
4888
{% endif %}

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

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,20 +126,59 @@ WITH (
126126

127127
{% endif %}
128128

129+
Пример создания строковой таблицы с использованием опций партиционирования:
130+
131+
```yql
132+
CREATE TABLE <table_name> (
133+
a Uint64,
134+
b Uint64,
135+
c Float,
136+
PRIMARY KEY (a, b)
137+
)
138+
WITH (
139+
AUTO_PARTITIONING_BY_SIZE = ENABLED,
140+
AUTO_PARTITIONING_PARTITION_SIZE_MB = 512
141+
);
142+
```
143+
144+
Такой код создаст строковую таблицу с включенным автоматическим партиционированием по размеру партиции (`AUTO_PARTITIONING_BY_SIZE`) и предпочитаемым размером каждой партиции (`AUTO_PARTITIONING_PARTITION_SIZE_MB`) в 512 мегабайт. Полный список опций партиционирования строковой таблицы находится в разделе [{#T}](../../../../concepts/datamodel/table.md#partitioning_row_table) статьи [{#T}](../../../../concepts/datamodel/table.md).
145+
129146
- Создание колоночной таблицы
130147

131148
```yql
132149
CREATE TABLE table_name (
133150
a Uint64 NOT NULL,
134-
b Uint64 NOT NULL,
151+
b Timestamp NOT NULL,
135152
c Float,
136153
PRIMARY KEY (a, b)
137154
)
155+
PARTITION BY HASH(b)
138156
WITH (
139157
STORE = COLUMN
140158
);
141159
```
142160

161+
При создании колоночных таблиц обязательно нужно использовать конструкцию `PARTITION BY HASH` с указанием первичных ключей, которые имеют высококардинальный тип данных (например, `Timestamp`), так как колоночные таблицы партиционируют данные не по первичным ключам, а по специально выделенным ключам — ключам партицирования. Подробно про ключи партиционирования колоночных таблиц изложено в статье [{#T}](../../../../dev/primary-key/column-oriented.md).
162+
163+
В настоящий момент колоночные таблицы не поддерживают автоматического репартицирования, поэтому важно указывать правильное число партиций при создании таблицы с помощью параметра `AUTO_PARTITIONING_MIN_PARTITIONS_COUNT`:
164+
165+
```yql
166+
CREATE TABLE table_name (
167+
a Uint64 NOT NULL,
168+
b Timestamp NOT NULL,
169+
c Float,
170+
PRIMARY KEY (a, b)
171+
)
172+
PARTITION BY HASH(b)
173+
WITH (
174+
STORE = COLUMN,
175+
AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = 10
176+
);
177+
```
178+
179+
Такой код создаст колоночную таблицу с 10-ю партициями. С полным списком опций партиционирования колоночных таблиц можно ознакомиться в разделе [{#T}](../../../../concepts/datamodel/table.md#olap-tables-partitioning) статьи [{#T}](../../../../concepts/datamodel/table.md).
180+
181+
143182
{% endlist %}
144183

145184
{% else %}

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

Lines changed: 50 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,57 @@ WITH (
3131

3232
{% if backend_name == "YDB" and oss == true %}
3333

34-
Также в блоке `WITH` можно задать TTL (Time to Live) — время жизни строки. [TTL](../../../../concepts/ttl.md) автоматически удаляет из строковой таблицы строки, когда проходит указанное количество секунд от времени, записанного в TTL-колонку. TTL можно задать при создании таблицы, а можно добавить позже через `ALTER TABLE`. Код ниже создаст строковую таблицу таблицу с TTL:
34+
Колоночная таблица создаётся путём указанием параметра `STORE = COLUMN` в блоке `WITH`:
3535

3636
```yql
37-
CREATE TABLE my_table (
38-
id Uint64,
39-
title Utf8,
40-
expire_at Timestamp,
41-
PRIMARY KEY (id)
42-
)
43-
WITH (
44-
TTL = Interval("PT0S") ON expire_at
45-
);
46-
```
37+
CREATE TABLE table_name (
38+
a Uint64 NOT NULL,
39+
b Timestamp NOT NULL,
40+
c Float,
41+
PRIMARY KEY (a, b)
42+
)
43+
PARTITION BY HASH(b)
44+
WITH (
45+
STORE = COLUMN
46+
);
47+
48+
Свойства и возможности колоночных таблиц описаны в статье [{#T}](../../../../concepts/datamodel/table.md), а специфика их создания через YQL описана на странице [{#T}](./index.md). Также в блоке `WITH` можно задать TTL (Time to Live) — время жизни строки для строковых и колоночных таблиц. [TTL](../../../../concepts/ttl.md) автоматически удаляет строки, когда проходит указанное количество секунд от времени, записанного в TTL-колонку. TTL можно задать при создании строковой и колоночной таблицы или добавить позже командой `ALTER TABLE` только в строковую таблицу.
49+
50+
Пример создания строковой и колоночной таблицы с TTL:
51+
52+
{% list tabs %}
53+
54+
- Создание строковой таблицы с TTL
55+
56+
```yql
57+
CREATE TABLE my_table (
58+
id Uint64,
59+
title Utf8,
60+
expire_at Timestamp,
61+
PRIMARY KEY (id)
62+
)
63+
WITH (
64+
TTL = Interval("PT0S") ON expire_at
65+
);
66+
```
67+
68+
- Создание колоночной таблицы с TTL
69+
70+
```yql
71+
CREATE TABLE table_name (
72+
a Uint64 NOT NULL,
73+
b Timestamp NOT NULL,
74+
c Float,
75+
PRIMARY KEY (a, b)
76+
)
77+
PARTITION BY HASH(b)
78+
WITH (
79+
STORE = COLUMN,
80+
TTL = Interval("PT0S") ON b
81+
);
82+
```
83+
84+
{% endlist %}
85+
4786
4887
{% endif %}

0 commit comments

Comments
 (0)