Inzicht in Redshift-gegevens­types en features

Introductie tot Redshift

Jason Myers

Principal Architect

Basisgegevenstypes

Numerieke types

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

Datum/tijdtypes

  • DATE
  • TIME, TIMETZ
  • TIMESTAMP, TIMESTAMPTZ

Teksttypes

  • CHAR
  • VARCHAR

Boolean-type

  • BOOLEAN
Introductie tot Redshift

Speciale gegevenstypes

SUPER-type

  • Semigestructureerde data
    • Arrays
    • Tuples
    • Geneste structuren (bijv. JSON)
  • Gebruikt PartiQL voor verwerking
  • Max. grootte 16 MB

VARBYTE-type

  • binaire data (BLOB's)
  • Afbeeldingen en video's
Introductie tot Redshift

Niet-ondersteunde PostgreSQL-types:

PostgreSQL-type Redshift-types
DATETIME TIMESTAMP, TIMESTAMPTZ
SERIAL INTEGER, BIGINT
UUID VARCHAR
JSON SUPER, VARCHAR
ARRAY SUPER, VARCHAR
BIT BOOLEAN, SMALLINT, VARCHAR
Introductie tot Redshift

Kolommen en hun gegevenstypes bekijken

-- 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';
Introductie tot Redshift

Kolommen en hun gegevenstypes (vervolg)

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
Introductie tot Redshift

Gegevenstype-‘compatibiliteit’

  • Impliciete conversie: toewijzingen, vergelijkingen
  • Controleer de uitkomsten goed!
Van type Naar types
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
Introductie tot Redshift

Expliciet typen casten

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

TO-functies

  • 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)
Introductie tot Redshift

TO-functies (vervolg)

-- 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)
  • Notatie­strings voor datum/tijd en numeriek
1 https://docs.aws.amazon.com/redshift/latest/dg/r_FORMAT_strings.html
Introductie tot Redshift

Laten we oefenen!

Introductie tot Redshift

Preparing Video For Download...