Знайомство з типами даних і можливостями 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 MB

Тип 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...