Модель данных | Tcs

Version:

1.x

Модель данных

Модель данных в TCS создается и изменяется с помощью инструкций SQL DDL.

Логическая организация данных

TCS использует табличную модель данных, характерную для большинства СУБД, использующих SQL:

  • Данные хранятся в таблицах;

  • Один хранимый объект формирует одну строку таблицы;

  • Структура таблицы определяется набором ее столбцов – колонок;

  • Каждая колонка содержит данные одного типа.

Список поддерживаемых типов данных приведен в разделе Типы данных.

Для логической организации таблиц в TCS используется понятие схемы (schema) – именованного пространства хранения таблиц. Каждая таблица может содержаться только в одной схеме. Имена таблиц в разных схемах могут повторяться. Схемы агрегируются в каталоги – аналоги баз данных.

Таким образом, полная иерархия хранения данных в TCS выглядит так:

каталог.схема.таблица

По умолчанию используется каталог tcs и схема public.

Примечание

Поддержка пользовательских каталогов и схем отсутствует в текущей версии TCS. Таблицы всегда создаются в каталоге и схеме, используемых по умолчанию. Например, запрос CREATE TABLE a(i int) создаcт таблицу tcs.public.a.

При модификации или чтении данных из схемы по умолчанию можно использовать только имя таблицы без указания каталога и схемы. Например, запрос SELECT * FROM customers вернет выборку из таблицы tcs.public.customers.

Типы данных

В TCS используются примитивные типы данных Apache Arrow. Поддерживаются следующие типы:

Тип

Описание

i8

8-битное знаковое целое

i16

16-битное знаковое целое

i32

32-битное знаковое целое

i64

64-битное знаковое целое

u8

8-битное беззнаковое целое

u16

16-битное беззнаковое целое

u32

32-битное беззнаковое целое

u64

64-битное беззнаковое целое

f32

32-битное с плавающей точкой

f64

64-битное с плавающей точкой

decimal

десятичное число с шириной 128 или 256 бит

decimal128

десятичное число с шириной 128 бит

decimal256

десятичное число с шириной 256 бит

utf8

строка UTF-8

bool

логический: true или false

ts

UNIX timestamp в миллисекундах

Десятичные числа

Десятичные числа в TCS задаются в формате Apache Arrow и имеют следующие характеристики:

  • ширина в битах (bit width): 128 или 256 бит

  • масштаб (scale)

  • точность (precision)

Ширина (bit width)

Ширина (bit width) может быть задана явно (decimal128 или decimal256), либо вычисляться автоматически на основании точности (precision).

Для чисел с явно заданной шириной (bit width) используются соответствующие значения точности (precision):

  • для decimal128 точность = 38

  • для decimal256 точность = 76

Точность (precision)

Точность (precision) также может быть задана явно или неявно:

  • Если она задана явно (например, decimal(3, 2), здесь точность = 3), то:

    1. Выполняется следующая проверка для точности:

      1 <= precision <= 76

    2. Точность сводится к:

      • 38 (если указанное значение точности <= 38)

      • 76 (если указанное значение точности > 38)

  • Если она задана неявно (например, decimal128(2)), то точность уже известна, исходя из ширины (например, для decimal128 используется точность = 38).

Масштаб (scale)

Масштаб (scale) может быть задан только явно. Например, decimal(3, 2) (здесь масштаб = 2).

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

0 <= scale <= precision

Примеры десятичных чисел

Пример SQL-инструкции с десятичными числами:

CREATE TABLE t (
    d1 decimal128  (9),
    d2 decimal256  (1),
    d3 decimal (4,  3),
    d4 decimal (39, 2),
)

где:

  • decimal128(9)

    • bit width = 128

    • scale = 9

    • precision = 38

  • decimal256(1)

    • bit width = 256

    • scale = 1

    • precision = 76

  • decimal(4, 3)

    • bit width = 128

    • scale = 3

    • precision = 38 (поскольку 4 <= 38)

  • decimal(39, 2)

    • bit width = 256

    • scale = 2

    • precision = 76 (поскольку 39 > 38)

Массивы

TCS не поддерживает хранение массивов (данных типа array), но разрешает передачу массива в запросе. См. например функцию array_concat.

Found what you were looking for?
Feedback