Числовые, строковые, даты и временные типы данных

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

=# 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 (с часовым поясом) изменяется на UTC+9, тогда как c2 остаётся неизменным.

В итоге:

  • timestamp with time zone хранит значения с учётом часового пояса и корректирует отображение в зависимости от часового пояса сессии.
  • timestamp without time zone хранит сырые временные метки без контекста часового пояса и отображает одно и то же значение независимо от настроек сессии.
  • При развертывании систем в нескольких часовых поясах рекомендуется использовать timestamp с учётом часового пояса.
  • Оба варианта timestamp используют одинаковый объём хранения. Поэтому использование timestamptz является предпочтительным.

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

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

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

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

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

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