Типы данных и возможности Redshift

Введение в Redshift

Jason Myers

Principal Architect

Основные типы данных

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

  • SMALLINT, INTEGER, BIGINT
  • DECIMAL / NUMERIC
  • DOUBLE PRECISION
  • REAL

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

  • DATE
  • TIME, TIMETZ
  • TIMESTAMP, TIMESTAMPTZ

Символьные типы

  • CHAR
  • VARCHAR

Булев тип

  • BOOLEAN
Введение в Redshift

Специальные типы данных

Тип SUPER

  • Полуструктурированные данные
    • Массивы
    • Кортежи
    • Вложенные структуры (например, JSON)
  • Для работы с ними используется PartiQL
  • Максимальный размер: 16 МБ

Тип VARBYTE

  • Двоичные данные (BLOB-объекты)
  • Изображения и видео
Введение в Redshift

Неподдерживаемые типы PostgreSQL:

Тип PostgreSQL Типы Redshift
DATETIME TIMESTAMP, TIMESTAMPTZ
SERIAL INTEGER, BIGINT
UUID VARCHAR
JSON SUPER, VARCHAR
ARRAY SUPER, VARCHAR
BIT BOOLEAN, SMALLINT, VARCHAR
Введение в Redshift

Просмотр столбцов и их типов данных

-- View the column details
SELECT column_name, 
       data_type, 
       character_maximum_length AS character_max_len,
       numeric_precision, 
       numeric_scale
  -- Using a view with both internal and external schema's columns
  FROM SVV_ALL_COLUMNS 
 -- Only in the spectrumdb schema
 WHERE schema_name = 'spectrumdb'
   -- For the ecommerce_sales table
   AND table_name = 'ecommerce_sales';
Введение в Redshift

Просмотр столбцов и их типов данных (продолжение)

column_name                  | data_type         | character_max_len | numeric_precision | numeric_scale
=============================|===================|===================|===================|==============
year_qtr                     | character varying | 100               | null              | null
total_sales                  | integer           | null              | 32                | 0
ecom_sales                   | integer           | null              | 32                | 0
percent_ecom                 | real              | null              | null              | null
percent_change_quarter_total | real              | null              | null              | null
percent_change_quarter_ecom  | real              | null              | null              | null
percent_change_year_total    | real              | null              | null              | null
percent_change_year_ecom     | real              | null              | null              | null
Введение в Redshift

«Совместимость» типов данных

  • Неявное преобразование: присваивание, сравнение
  • Обязательно проверяйте результаты!
Исходный тип Целевые типы
CHAR VARCHAR
DATE CHAR, VARCHAR, TIMESTAMP, TIMESTAMPTZ
TIMESTAMP CHAR, DATE, VARCHAR, TIMESTAMPTZ
BIGINT BOOLEAN, CHAR, DECIMAL, DOUBLE PRECISION, INTEGER, REAL, SMALLINT, VARCHAR
DECIMAL BIGINT, CHAR, DOUBLE PRECISION, INTEGER, REAL, SMALLINT, VARCHAR
1 https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html#r_Type_conversion
Введение в Redshift

Явное приведение типов данных

  • CAST
-- Casting a decimal to a integer and aliasing it
SELECT CAST(2.00 AS INTEGER) AS our_int;
our_int
========
2
(1 row)
Введение в Redshift

Функции TO

  • TO_CHAR, TO_DATE, TO_NUMBER
-- Convert the string to a date
SELECT CAST('14-01-2024 02:36:48' AS DATE) AS out_date;
date/time field value out of range: "14-01-2024 02:36:48"
HINT:  Perhaps you need a different "datestyle" setting.
-- Parse the string to a date
SELECT TO_DATE('14-01-2024 02:36:48', 'DD-MM-YYYY') AS our_date;
our_date
========
2024-01-14
(1 row)
Введение в Redshift

Функции TO (продолжение)

-- Get the name of the month in a date
SELECT TO_CHAR(date '2024-01-14', 'MONTH') AS month_name;
month_name
========
JANUARY
(1 row)
  • Строки формата для даты/времени и чисел
1 https://docs.aws.amazon.com/redshift/latest/dg/r_FORMAT_strings.html
Введение в Redshift

Давайте потренируемся!

Введение в Redshift

Preparing Video For Download...