Conoscere tipi di dato e funzionalità di Redshift

Introduzione a Redshift

Jason Myers

Principal Architect

Tipi di dato di base

Tipi numerici

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

Tipi data/ora

  • DATE
  • TIME, TIMETZ
  • TIMESTAMP, TIMESTAMPTZ

Tipi di caratteri

  • CHAR
  • VARCHAR

Tipo booleano

  • BOOLEAN
Introduzione a Redshift

Tipi di dato speciali

Tipo SUPER

  • Dati semistrutturati
    • Array
    • Tuple
    • Strutture annidate (es. JSON)
  • Usa PartiQL per gestirli
  • Dimensione max 16 MB

Tipo VARBYTE

  • dati binari (BLOB)
  • Immagini e video
Introduzione a Redshift

Tipi PostgreSQL non supportati:

Tipo PostgreSQL Tipi Redshift
DATETIME TIMESTAMP, TIMESTAMPTZ
SERIAL INTEGER, BIGINT
UUID VARCHAR
JSON SUPER, VARCHAR
ARRAY SUPER, VARCHAR
BIT BOOLEAN, SMALLINT, VARCHAR
Introduzione a Redshift

Visualizzare colonne e relativi tipi

-- Visualizza i dettagli delle colonne
SELECT column_name, 
       data_type, 
       character_maximum_length AS character_max_len,
       numeric_precision, 
       numeric_scale
  -- Vista con colonne di schemi interni ed esterni
  FROM SVV_ALL_COLUMNS 
 -- Solo nello schema spectrumdb
 WHERE schema_name = 'spectrumdb'
   -- Per la tabella ecommerce_sales
   AND table_name = 'ecommerce_sales';
Introduzione a Redshift

Visualizzare colonne e relativi tipi (cont.)

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
Introduzione a Redshift

“Compatibilità” dei tipi di dato

  • Conversione implicita: assegnazioni, confronti
  • Controlla sempre i risultati!
Da tipo A tipi
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
Introduzione a Redshift

Cast esplicito dei tipi

  • CAST
-- Cast di un decimal a integer con alias
SELECT CAST(2.00 AS INTEGER) AS our_int;
our_int
========
2
(1 row)
Introduzione a Redshift

Funzioni TO

  • TO_CHAR, TO_DATE, TO_NUMBER
-- Converte la stringa in una data
SELECT CAST('14-01-2024 02:36:48' AS DATE) AS out_date;
valore campo data/ora fuori intervallo: "14-01-2024 02:36:48"
SUGGERIMENTO: forse serve un'impostazione "datestyle" diversa.
-- Effettua il parsing della stringa in una data
SELECT TO_DATE('14-01-2024 02:36:48', 'DD-MM-YYYY') AS our_date;
our_date
========
2024-01-14
(1 row)
Introduzione a Redshift

Funzioni TO (cont.)

-- Ottieni il nome del mese da una data
SELECT TO_CHAR(date '2024-01-14', 'MONTH') AS month_name;
month_name
========
JANUARY
(1 row)
  • Stringhe di formato per date/ore e numeri
1 https://docs.aws.amazon.com/redshift/latest/dg/r_FORMAT_strings.html
Introduzione a Redshift

Ayo berlatih!

Introduzione a Redshift

Preparing Video For Download...