Операции с таблицами
-
CREATE TABLE— Создание новой таблицы -
ALTER TABLE— Изменение свойств таблицы -
DROP TABLE— Удаление таблицы -
TRUNCATE TABLE— Удаление всех строк из таблицы -
SHOW TABLES— Вывод списка всех таблиц -
SHOW COLUMNS— Вывод списка всех колонок -
DESCRIBE TABLE— Вывод информации о таблице
Создание новой таблицы
CREATE [OR REPLACE] TABLE [IF NOT EXISTS] [<table_schema>.]<table_name>
(<column_name> <column_type>
[NOT NULL] [DEFAULT <default_expr>]
...
)
[WITH (<table_param>, ... )]
Создает новую таблицу с указанным именем и указанными колонками.
CREATE [OR REPLACE] TABLE [IF NOT EXISTS] [<table_schema>.]<table_name> AS
<select_expr>
[WITH (<table_param>, ... )]
Создает новую таблицу с указанным именем на основе результата запроса SELECT.
Параметры
-
<table_name>— имя создаваемой таблицы
-
<table_schema>— схема создаваемой таблицы
-
<column_name>— имя колонки создаваемой таблицы
-
<column_type>— тип данных колонки создаваемой таблицы или ключевое словоIDENTITY(для автоинкремента).
-
NOT NULL— данная колонка не принимает значенияNULL
-
DEFAULT <default_expr>— константа или константное выражение по умолчанию
-
<select_expr>— выражениеSELECT, результат выполнения которого будет записан в создаваемую таблицу
-
<table_param>— параметры создаваемой таблицыtable_param ::= [<name> = <value>]Возможные значения:
-
snapshot_ttl = <duration>— глубина хранения снапшотов (версий таблицы).
По умолчанию: 7 дней, но не более 1000 снапшотов.
Например:'1 week','2 days','4 days 3 hours 5 minutes 30 seconds' -
order_by = <column_name>— колонка для сортировки данных на уровне хранения.
Подробнее: Управление партиционированием таблицы. -
order_by = [<column1_name>, <column2_name>, ...]— колонки для сортировки данных на уровне хранения.
-
Если указан модификатор OR REPLACE, то конечное действие эквивалентно удалению существующей таблицы и созданию новой с тем же именем.
Опциональный модификатор IF NOT EXISTS ограничивает запрос только теми случаями, в которых указанный объект еще не существует.
| Модификаторы являются взаимоисключающими. Если указать их оба, это приведет к ошибке. |
При отсутствии префикса схемы (<table_schema>) таблица создается в дефолтной для пользователя схеме.
Управление партиционированием таблицы
В параметре order_by можно задать колонку (или несколько колонок) для сортировки данных на уровне хранения.
Если параметр не указан, то данные в таблице хранятся с произвольной сортировкой. Если параметр указан, то партиционирование таблицы происходит по указанной в этом параметре колонке.
Таблицы хранятся в формате Iceberg. Гранулярность данных поддерживается за счет разделения данных таблицы на отдельные файлы parquet. Записи между файлами распределяются с помощью параметра order_by, указанного при создании таблицы. Это позволяет кратно ускорить объемные операции изменения данных с условием фильтрации по этому параметру.
|
Синтаксис
-
Для одной колонки сортировки:
CREATE TABLE ... WITH (order_by = <column_name>); -
Для нескольких колонок сортировки:
CREATE TABLE ... WITH (order_by = [<column1_name>, <column2_name>, ...]);
Рекомендуется использовать параметр order_by при создании таблиц большого размера. Это позволяет ускорить операции изменения данных. Например, если в условиях для DELETE будет задан фильтр по колонке сортировки, то удаление будет происходить максимально быстро — по партициям.
|
Пример
Создадим таблицу с заданным параметром для сортировки и укажем сортировку по колонке column2:
CREATE TABLE my_table (column1 INT, column2 DATE)
WITH (order_by = column2);
Удалим часть данных с фильтром по колонке сортировки:
DELETE FROM my_table
WHERE column2 > '2026-01-01';
В таком случае процесс удаления будет происходить максимально эффективно при больших размерах таблицы.
Автоинкремент
При создании таблицы можно указать колонку, которая будет автоматически наполняться новыми значениями при добавлении в таблицу строк. Это удобно в случаях, когда необходим автоматический идентификатор строк при добавлении данных.
Чтобы это сделать, нужно указать в качестве типа колонки ключевое слово IDENTITY. Тогда при добавлении в таблицу новых строк в эту колонку будут автоматически вставляться целые числа начиная с 0.
-
Пример
Создадим таблицу с двумя колонками и для первой колонки в качестве типа укажем
IDENTITY:CREATE TABLE my_table (column1 IDENTITY, column2 VARCHAR);+--------+ | status | +--------+ | CREATE | +--------+Вставим два одинаковых значения в колонку
column2, для колонкиcolumn1не будем указывать значения для вставки:INSERT INTO my_table (column2) VALUES ('test_value'), ('test_value');+-------+ | count | +-------+ | 2 | +-------+Выведем все строки получившейся таблицы:
SELECT * FROM my_table;+---------+------------+ | column1 | column2 | +---------+------------+ | 0 | test_value | +---------+------------+ | 1 | test_value | +---------+------------+Мы видим, что в колонку
column1были автоматически вставлены целые числа начиная с0.
Внутри механизма автоинкремента используется функция nextval_tngri.
|
Изменение свойств таблицы
Переименование таблицы
ALTER TABLE [<table_schema>.]<old_table_name>
RENAME TO [<table_schema>.]<new_table_name>;
Переименовывает существующую таблицу в указанное имя <new_table_name>. Все атрибуты и права при этом сохраняются.
Добавление колонки
ALTER TABLE [<table_schema>.]<table_name>
ADD COLUMN <column_name> <column_type>;
Добавляет в таблицу колонку с указанным именем и указанным типом данных. Во все строки добавленной колонки записывается значение NULL.
Удаление таблицы
DROP TABLE [IF EXISTS] [<table_schema>.]<table_name>;
Удаляет таблицу с указанным именем.
Опциональный модификатор IF EXISTS ограничивает запрос только теми случаями, в которых указанный объект существует.
Удаление всех строк из таблицы
TRUNCATE TABLE [IF EXISTS] [<table_schema>.]<table_name>;
Удаляет все строки из таблицы, но не удаляет саму таблицу (сохраняются колонки, типы данных колонок, привилегии на таблицу).
Опциональный модификатор IF EXISTS ограничивает запрос только теми случаями, в которых указанный объект существует.
Вывод списка всех таблиц
SHOW TABLES;
Выводит список всех существующих таблиц, доступных пользователю.
Формат вывода:
+-------------+------------+
| schema_name | table_name |
+-------------+------------+
| ... | ... |
+-------------+------------+
Вывод списка всех колонок
SHOW COLUMNS;
Выводит список всех колонок всех таблиц, доступных пользователю.
Формат вывода:
+-------------+------------+-------------+
| schema_name | table_name | column_name |
+-------------+------------+-------------+
| ... | ... | ... |
+-------------+------------+-------------+
Вывод информации о таблице
DESC[RIBE] TABLE <table_name>;
Выводит информацию о таблице.
Формат вывода:
+-------------+-------------+------+---------+
| column_name | column_type | null | default |
+-------------+-------------+------+---------+
| ... | ... | ... | ... |
+-------------+-------------+------+---------+
-
column_name— имя колонки -
column_type— тип данных колонки -
null— допустимы ли в колонке значенияNULL -
default— значение колонки по умолчанию