Числовые, строковые, даты и время

Этот документ описывает часто используемые типы данных, поддерживаемые YMatrix.

Основные типы, рассматриваемые здесь:

  • Числовые
  • Строковые
  • Дата и время

1 Числовые типы

YMatrix поддерживает четыре категории числовых типов:

  • Целые числа: Целочисленные типы с различными диапазонами, все знаковые (поддерживают положительные и отрицательные значения):

    1. smallint
    2. int
    3. bigint
  • Числа с фиксированной запятой: Используются для значений с фиксированным количеством десятичных знаков:

    1. decimal
  • Числа с плавающей запятой: Используются для значений с переменной точностью:

    1. real
    2. double precision
  • Автоматически инкрементируемые типы: Обычно используются для столбцов с автоматическим инкрементом ID:

    1. serial
    2. bigserial

Подробная информация представлена ниже:

Тип Алиас Размер Диапазон Описание
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 Переменный Без ограничений Фиксированная точность

2 Строковые типы

YMatrix поддерживает два основных строковых типа:

  • Фиксированной длины: char
  • Переменной длины:
    1. varchar: Ограниченная длина
    2. text: Неограниченная длина

Подробная информация представлена ниже:

Тип Алиас Размер Диапазон Описание
character [ (n) ] char [ (n) ] 1 байт + n До n символов Строка фиксированной длины; дополняется пробелами, если не заполнена полностью
character varying [ (n) ] varchar [ (n) ] 1 байт + размер строки До n символов Строка переменной длины с ограничением; максимум 10 485 760 байт
text 1 байт + длина строки Любая длина Строка переменной длины без ограничений

3 Типы даты и времени

YMatrix поддерживает три основных типа даты и времени:

  • Дата: Представляет только календарную дату (год, месяц, день), без времени:

    1. date
  • Время: Представляет только время суток, без даты:

    1. time [without time zone] (без часового пояса)
    2. time with time zone (с часовым поясом)
  • Отметка времени (timestamp): Представляет и дату, и время:

    1. timestamp [without time zone] (без часового пояса)
    2. 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 г. н.э. Дата и время с часовым поясом

3.1 Влияние часового пояса на типы времени

Заметной особенностью типов времени является 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 используют одинаковый объём хранилища. Использование поддержки часового пояса, таким образом, выгодно без дополнительных затрат.

3.2 Лучшие практики для типов данных в сценариях временных рядов

Данные временных рядов обычно относятся к следующим категориям:

  • Отметка времени: Время сбора метрики.
  • Идентификатор устройства: Уникальный идентификатор каждого устройства.
  • Собранные метрики: Данные временных рядов, собранные с устройств.

Рекомендуемые типы данных:

Тип Описание Лучшая практика
Отметка времени Время сбора, включая дату и время timestamp with time zone
Идентификатор устройства Строковый идентификатор varchar / text
Идентификатор устройства Фиксированной длины, например серийный номер char
Идентификатор устройства Использовать отдельную таблицу устройств с автоинкрементным ID serial / bigserial
Собранная метрика Целочисленные измерения smallint / int / bigint
Собранная метрика Десятичные значения с фиксированной точностью и ограниченным диапазоном (например, температура) decimal
Собранная метрика Десятичные значения с переменной точностью и большим диапазоном float / double precision

Примечание!
Помимо распространённых типов данных, описанных выше, YMatrix поддерживает расширяемые типы данных, такие как JSON, JSONB, MXKV и пространственные типы данных.