Начало работы
Подключение
Тесты производительности
Развёртывание
Использование данных
Загрузка данных
Миграция данных
Запрос данных
Управление кластерами
Обновление
Глобальное обслуживание
Масштабирование
Мониторинг
Безопасность
Лучшие практики
Технические принципы
Типы данных
Хранилище
Исполняющий движок
Потоковая обработка (Domino)
MARS3 Индексы
Расширения
Расширенные функции
Расширенный запрос
Федеративные запросы
Grafana
Резервное копирование и восстановление
Аварийное восстановление
Графовая база данных
Введение
Предложения
Функции
Расширенные темы
Руководство
Настройка производительности
Устранение неполадок
Инструменты
Параметры конфигурации
SQL-команда
Часто задаваемые вопросы
Предложение DIMS используется для объявления измерительных столбцов при создании таблиц MARS3. Измерительные столбцы обычно представляют логические оси идентификации во временных рядах, например временные метки, идентификаторы устройств или бизнес-теги. Явное объявление измерительных столбцов позволяет YMatrix сохранять метаданные измерений в системных каталогах для последующего просмотра, миграции и интеграции с инструментами.
Измерительные столбцы остаются обычными столбцами таблицы. Их можно использовать в запросах, ключах распределения, ключах сортировки и ключах секционирования. Предложение DIMS добавляет этим столбцам семантику измерений. Оно не создаёт индексы автоматически и не заменяет проектирование DISTRIBUTED BY, ORDER BY или PARTITION BY.
После объявления измерительных столбцов с помощью DIMS доступны следующие возможности:
pg_dump / pg_restore метаданные измерений сохраняются.\d+ вывод содержит поле Dimensions, в котором перечислены измерительные столбцы таблицы.CREATE TABLE table_name (
data_column_1 type1,
data_column_2 type2,
...
)
USING MARS3
[WITH (...)]
DIMS (dim_column_1 type1 [, dim_column_2 type2, ...])
DISTRIBUTED BY (dist_key)
ORDER BY (sort_keys);
DIMS принимает заключённый в скобки список определений столбцов, аналогичный основному списку столбцов в CREATE TABLE.
DIMS (column_name data_type [, column_name data_type, ...])
Внутри DIMS можно определять только имена столбцов, типы данных и ограничения уровня столбца. Предложение LIKE и ограничения уровня таблицы не поддерживаются.
Следующий пример создаёт таблицу MARS3 и объявляет tag измерительным столбцом:
CREATE TABLE metrics (
ts timestamp,
value float8
)
USING MARS3
DIMS (tag text)
DISTRIBUTED BY (tag)
ORDER BY (ts);
После создания таблица metrics содержит три столбца: tag, ts и value. Столбец tag помечен как измерительный.
Примечание!
Измерительные столбцы становятся фактическими столбцами таблицы. Поэтому на них можно ссылаться как на обычные столбцы вDISTRIBUTED BY,ORDER BY, запросах и операторах записи.
В DIMS можно объявить несколько измерительных столбцов:
CREATE TABLE sensor_data (
reading numeric
)
USING MARS3
DIMS (device_id int, ts timestamp)
DISTRIBUTED BY (device_id)
ORDER BY (device_id, ts);
В этом примере device_id и ts объявлены измерительными столбцами. Их также можно использовать как ключи распределения и сортировки.
Измерительные столбцы можно указывать в ORDER BY для определения ключа сортировки таблицы MARS3:
CREATE TABLE logs (
level int,
msg text
)
USING MARS3
DIMS (ts timestamp)
DISTRIBUTED BY (level)
ORDER BY (ts);
В этом примере ts является и измерительным столбцом, и ключом сортировки.
DIMS можно использовать вместе с MARS3 Unique Mode:
CREATE TABLE latest_reading (
value int NOT NULL
)
USING MARS3
WITH (uniquemode=true)
DIMS (device_id int NOT NULL, ts timestamp NOT NULL)
DISTRIBUTED BY (device_id)
ORDER BY (device_id, ts);
В режиме Unique Mode, если измерительные столбцы одновременно входят в уникальный ключ или ключ сортировки, явно задавайте ограничения NOT NULL в соответствии с бизнес-семантикой.
Примечание!
Если включён Unique Mode, первый столбец в предложенииORDER BYдолжен быть определён какNOT NULL.
Если имя измерительного столбца содержит пробелы, дефисы или символы с учётом регистра, используйте двойные кавычки:
CREATE TABLE data (
id int
)
USING MARS3
DIMS ("capture time" timestamp, "sensor-ID" int)
DISTRIBUTED BY (id)
ORDER BY (id);
При последующих запросах к этим столбцам также необходимо использовать двойные кавычки:
SELECT "capture time", "sensor-ID"
FROM data;
Используйте \d+, чтобы просмотреть информацию об измерительных столбцах таблицы MARS3:
\d+ my_table
Пример вывода:
Table "public.my_table"
Column | Type | ...
--------+-----------------------------+-----
ts | timestamp without time zone | ...
id | integer | ...
value | numeric | ...
Distributed by: (id)
Order by: (id)
Options: dim_columns=ts,id, mars3options=nbuckets=3
Dimensions: ts, id
Поле Dimensions перечисляет измерительные столбцы, объявленные для таблицы.
Измерительные столбцы также можно получить из системных каталогов:
SELECT attname
FROM pg_attribute
WHERE attrelid = 'my_table'::regclass
AND attnum > 0
AND attoptions @> ARRAY['is_dimension=true']
ORDER BY attnum;
При создании таблицы с DIMS измерительные столбцы располагаются перед обычными столбцами в физическом порядке столбцов.
Пример:
CREATE TABLE t (
a int,
b text
)
USING MARS3
DIMS (c int, d text)
DISTRIBUTED BY (c)
ORDER BY (c);
Физический порядок столбцов:
c, d, a, b
Поэтому, если оператор INSERT не указывает имена столбцов явно, значения должны соответствовать физическому порядку столбцов:
INSERT INTO t VALUES (1, 'x', 10, 'hello');
Рекомендуется явно указывать имена столбцов, чтобы избежать ошибочной записи из-за порядка столбцов:
INSERT INTO t (c, d, a, b) VALUES (1, 'x', 10, 'hello');
Предложение DIMS имеет следующие ограничения:
| Ограничение | Описание |
|---|---|
| Движок хранения | DIMS поддерживается только для таблиц, созданных с USING MARS3. HEAP, AO и другие движки хранения не поддерживаются. |
| Внешние таблицы | DIMS не поддерживается для внешних таблиц. |
| Пустой список | DIMS () является недопустимым синтаксисом. |
| Содержимое определения | Внутри DIMS разрешены только определения столбцов. Предложение LIKE и ограничения уровня таблицы не поддерживаются. |
| Конфликты имён | Имена измерительных столбцов не должны совпадать с именами обычных столбцов или других измерительных столбцов. |
| Поведение | DIMS только объявляет семантику измерений. Оно не создаёт индексы автоматически и не изменяет распределение, сортировку или секционирование данных. |
DISTRIBUTED BY и ORDER BY в соответствии с шаблоном запросов.