Операции с таблицами
-
CREATE TABLE— Создание новой таблицы -
ALTER TABLE— Изменение свойств таблицы -
INSERT— Добавление данных в таблицу -
DROP TABLE— Удаление таблицы -
TRUNCATE TABLE— Удаление всех строк из таблицы -
SHOW TABLES— Вывод списка всех таблиц -
SHOW COLUMNS— Вывод списка всех колонок -
DESCRIBE TABLE— Вывод информации о таблице -
DELETE— Удаление строк из таблицы -
UPDATE— Обновление строк в таблице
Создание новой таблицы
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>— колонка для сортировки данных на уровне хранения.
Подробнее: Управление партиционированием таблицы.
-
Если указан модификатор OR REPLACE, то конечное действие эквивалентно удалению существующей таблицы и созданию новой с тем же именем.
Опциональный модификатор IF NOT EXISTS ограничивает запрос только теми случаями, в которых указанный объект еще не существует.
| Модификаторы являются взаимоисключающими. Если указать их оба, это приведет к ошибке. |
При отсутствии префикса схемы (<table_schema>) таблица создается в дефолтной для пользователя схеме.
Управление партиционированием таблицы
В параметре order_by можно задать колонку для сортировки данных на уровне хранения.
Таблицы хранятся в формате Iceberg. Гранулярность данных поддерживается за счет разделения данных таблицы на отдельные файлы parquet. Записи между файлами распределяются с помощью параметра order_by, указанного при создании таблицы. Это позволяет кратно ускорить объемные операции изменения данных с условием фильтрации по этому параметру.
Если параметр не указан, то данные в таблице хранятся с произвольной сортировкой. Если параметр указан, то партиционирование таблицы происходит по указанной в этом параметре колонке.
Рекомендуется использовать параметр 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.
Добавление данных в таблицу
INSERT INTO <target_table> [ ( <target_col_name> [ , ... ] ) ]
{
VALUES ( { <value> | DEFAULT | NULL } [ , ... ] ) [ , ( ... ) ] |
<query>
}
Обновляет таблицу, вставляя в нее одну или несколько строк. Значения, вставляемые в каждый столбец таблицы, могут быть указаны явно или получены из вложенного запроса.
Параметры
-
<target_table>— имя целевой таблицы, в которую будут вставлены строки
-
<target_col_name>— имена столбцов, в которые будут вставлены значения. Если какие-то столбцы таблицы не указаны, то в них будут вставлены значения по умолчанию. Параметр является опциональным. Если его не указывать, то должны быть указаны добавляемые значения для всех столбцов.
-
VALUES ( value | DEFAULT | NULL [ , … ] ) [ , ( … ) ]— указывает одно или несколько значений для вставки в соответствующие столбцы целевой таблицы.-
value— явно указанное значение; может быть литералом или выражением. -
DEFAULT— значение по умолчанию для соответствующего столбца целевой таблицы. -
NULL— пустое значение.
Значения разделяются запятыми.
Вы можете вставить несколько строк, указав дополнительные наборы значений в выражении.
-
-
query— запрос, результат которого будет вставлен в целевую таблицу. Таким образом можно вставлять строки в целевую таблицу из одной или нескольких исходных таблиц.
Пример вставки явно заданных значений
Вставим в таблицу capitals значения для столбцов country и capital:
CREATE TABLE capitals (country VARCHAR, capital VARCHAR);
INSERT INTO capitals VALUES
('Russia', 'Moscow'),
('Italy', 'Rome'),
('Spain', 'Madrid'),
('France', 'Paris');
SELECT * FROM capitals;
+---------+---------+
| country | capital |
+---------+---------+
| France | Paris |
+---------+---------+
| Italy | Rome |
+---------+---------+
| Russia | Moscow |
+---------+---------+
| Spain | Madrid |
+---------+---------+
Пример вставки результатов вложенного запроса
Теперь создадим другую таблицу capitals_m и сделаем вставку строк из capitals, которые будут результатом вложенного запроса SELECT. Вставим такие строки из capitals, в которых значение capital содержит M.
CREATE TABLE capitals_m (country VARCHAR, capital VARCHAR);
INSERT INTO capitals_m (country, capital)
SELECT * FROM capitals
WHERE capital LIKE '%M%';
SELECT * FROM capitals_m;
+---------+---------+
| country | capital |
+---------+---------+
| Russia | Moscow |
+---------+---------+
| Spain | Madrid |
+---------+---------+
Удаление таблицы
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— значение колонки по умолчанию