Typy danych i funkcje Redshift

Wprowadzenie do Redshift

Jason Myers

Principal Architect

Podstawowe typy danych

Typy numeryczne

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

Typy daty i czasu

  • DATE
  • TIME, TIMETZ
  • TIMESTAMP, TIMESTAMPTZ

Typy znakowe

  • CHAR
  • VARCHAR

Typ logiczny

  • BOOLEAN
Wprowadzenie do Redshift

Specjalne typy danych

Typ SUPER

  • Dane częściowo ustrukturyzowane
    • Tablice
    • Krotki
    • Struktury zagnieżdżone (np. JSON)
  • Do obsługi używa PartiQL
  • Maks. rozmiar: 16 MB

Typ VARBYTE

  • Dane binarne (BLOBs)
  • Obrazy i filmy
Wprowadzenie do Redshift

Nieobsługiwane typy PostgreSQL:

Typ PostgreSQL Typy Redshift
DATETIME TIMESTAMP, TIMESTAMPTZ
SERIAL INTEGER, BIGINT
UUID VARCHAR
JSON SUPER, VARCHAR
ARRAY SUPER, VARCHAR
BIT BOOLEAN, SMALLINT, VARCHAR
Wprowadzenie do Redshift

Wyświetlanie kolumn i ich typów danych

-- 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';
Wprowadzenie do Redshift

Wyświetlanie kolumn i ich typów danych (cd.)

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
Wprowadzenie do Redshift

„Zgodność" typów danych

  • Niejawna konwersja: przypisania, porównania
  • Należy weryfikować wyniki!
Typ źródłowy Typy docelowe
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
Wprowadzenie do Redshift

Jawne rzutowanie typów danych

  • CAST
-- Casting a decimal to a integer and aliasing it
SELECT CAST(2.00 AS INTEGER) AS our_int;
our_int
========
2
(1 row)
Wprowadzenie do Redshift

Funkcje 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)
Wprowadzenie do Redshift

Funkcje TO (cd.)

-- 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)
  • Ciągi formatu dla daty/czasu i liczb
1 https://docs.aws.amazon.com/redshift/latest/dg/r_FORMAT_strings.html
Wprowadzenie do Redshift

Czas na ćwiczenia!

Wprowadzenie do Redshift

Preparing Video For Download...