Этот документ описывает часто используемые типы данных, поддерживаемые YMatrix.
Основные типы, рассматриваемые здесь:
YMatrix поддерживает четыре категории числовых типов:
Целые числа: Целочисленные типы с различными диапазонами, все знаковые (поддерживают положительные и отрицательные значения):
smallintintbigintЧисла с фиксированной запятой: Используются для значений с фиксированным количеством десятичных знаков:
decimalЧисла с плавающей запятой: Используются для значений с переменной точностью:
realdouble precisionАвтоматически инкрементируемые типы: Обычно используются для столбцов с автоматическим инкрементом ID:
serialbigserialПодробная информация представлена ниже:
| Тип | Алиас | Размер | Диапазон | Описание |
|---|---|---|---|---|
smallint |
int2 |
2 байта | -32768 ~ 32767 | Целое число малого диапазона |
int |
int4 |
4 байта | -2147483648 ~ 2147483647 | Стандартное целое число |
bigint |
int8 |
8 байт | -9223372036854775808 ~ 9223372036854775807 | Целое число большого диапазона |
serial |
serial4 |
4 байта | 1 ~ 2147483647 | Автоматически инкрементируемое целое число |
bigserial |
serial8 |
8 байт | 1 ~ 9223372036854775807 | Большое автоматически инкрементируемое целое число |
real |
float4 |
4 байта | 6 значащих цифр | Переменная точность |
double precision |
float8 |
8 байт | 15 значащих цифр | Переменная точность |
decimal |
numeric |
Переменный | Без ограничений | Фиксированная точность |
YMatrix поддерживает два основных строковых типа:
charvarchar: Ограниченная длинаtext: Неограниченная длинаПодробная информация представлена ниже:
| Тип | Алиас | Размер | Диапазон | Описание |
|---|---|---|---|---|
character [ (n) ] |
char [ (n) ] |
1 байт + n | До n символов | Строка фиксированной длины; дополняется пробелами, если не заполнена полностью |
character varying [ (n) ] |
varchar [ (n) ] |
1 байт + размер строки | До n символов | Строка переменной длины с ограничением; максимум 10 485 760 байт |
text |
1 байт + длина строки | Любая длина | Строка переменной длины без ограничений |
YMatrix поддерживает три основных типа даты и времени:
Дата: Представляет только календарную дату (год, месяц, день), без времени:
dateВремя: Представляет только время суток, без даты:
time [without time zone] (без часового пояса)time with time zone (с часовым поясом)Отметка времени (timestamp): Представляет и дату, и время:
timestamp [without time zone] (без часового пояса)timestamp with time zone (с часовым поясом)Подробная информация представлена ниже:
| Тип | Алиас | Размер | Диапазон | Описание |
|---|---|---|---|---|
date |
4 байта | 4713 г. до н.э. ~ 294 277 г. н.э. | Календарная дата (год, месяц, день) | |
time [ (p) ] [ without time zone ] |
8 байт | 00:00:00[.000000] ~ 24:00:00[.000000] | Время суток | |
time [ (p) ] with time zone |
timetz |
12 байт | 00:00:00+1359 ~ 24:00:00-1359 | Время суток с часовым поясом |
timestamp [ (p) ] [ without time zone ] |
8 байт | 4713 г. до н.э. ~ 294 277 г. н.э. | Дата и время | |
timestamp [ (p) ] with time zone |
timestamptz |
8 байт | 4713 г. до н.э. ~ 294 277 г. н.э. | Дата и время с часовым поясом |
Заметной особенностью типов времени является time zone. По умолчанию типы времени определяются как without time zone. Что такое часовой пояс и как он влияет на данные времени?
Это можно понять, создав тестовую таблицу.
=# CREATE TABLE test (
c1 int,
c2 timestamp,
c3 timestamp with time zone
)
USING MARS3
DISTRIBUTED BY (c1)
ORDER BY (c1,c2);
Тестовая таблица содержит два столбца типа timestamp: один без часового пояса (c2) и один с часовым поясом (c3). Вставьте тестовые данные и выполните запрос:
=# INSERT INTO test VALUES(1, now(), now());
=# SELECT * FROM test;
c1 | c2 | c3
----+--------------------------+-----------------------------
1 | 2021-12-01 14:54:09.4783 | 2021-12-01 14:54:09.4783+08
(1 row)
=# SHOW timezone;
TimeZone
---------------
Asia/Shanghai
(1 row)
Результат запроса показывает, что оба timestamp отображают одинаковое время. Однако столбец c3 (с часовым поясом) включает +08, что указывает на принадлежность к UTC+8 (китайское стандартное время). Команда SHOW timezone подтверждает, что текущий часовой пояс сессии установлен в Asia/Shanghai (пекинское время).
Теперь измените часовой пояс и повторите запрос:
=# SET timezone TO 'Japan';
=# SELECT * FROM test;
c1 | c2 | c3
----+--------------------------+-----------------------------
1 | 2021-12-01 14:54:09.4783 | 2021-12-01 15:54:09.4783+09
(1 row)
После изменения часового пояса на японский, значение в столбце c3 (с часовым поясом) теперь отображается как 15:54:09 с +09, что соответствует UTC+9. Столбец c2 (без часового пояса) остаётся неизменным.
В итоге:
timestamp with time zone хранят временные метки с учётом часового пояса и корректируют отображение в зависимости от часового пояса сессии.timestamp without time zone хранят необработанные временные метки без информации о часовом поясе и отображают одно и то же значение независимо от часового пояса сессии.timestamp with time zone.timestamp используют одинаковый объём хранилища. Использование поддержки часового пояса, таким образом, выгодно без дополнительных затрат.Данные временных рядов обычно относятся к следующим категориям:
Рекомендуемые типы данных:
| Тип | Описание | Лучшая практика |
|---|---|---|
| Отметка времени | Время сбора, включая дату и время | timestamp with time zone |
| Идентификатор устройства | Строковый идентификатор | varchar / text |
| Идентификатор устройства | Фиксированной длины, например серийный номер | char |
| Идентификатор устройства | Использовать отдельную таблицу устройств с автоинкрементным ID | serial / bigserial |
| Собранная метрика | Целочисленные измерения | smallint / int / bigint |
| Собранная метрика | Десятичные значения с фиксированной точностью и ограниченным диапазоном (например, температура) | decimal |
| Собранная метрика | Десятичные значения с переменной точностью и большим диапазоном | float / double precision |
Примечание!
Помимо распространённых типов данных, описанных выше, YMatrix поддерживает расширяемые типы данных, такие как JSON, JSONB, MXKV и пространственные типы данных.