Tabelle in Redshift

Introduzione a Redshift

Jason Myers

Principal Engineer

Creare tabelle

CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    'organization_id' VARCHAR(31),
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
);
Introduzione a Redshift

Distribuire i dati

Cluster Redshift

  • Distribuiti sui compute node
  • Usa l’id riga interno di Redshift, DISTKEY o PRIMARY KEY
  • Vari stili di distribuzione
Introduzione a Redshift

Stili di distribuzione

Name Description Usage
ALL Intera tabella su ogni nodo Piccole tabelle di lookup usate spesso nei join
KEY Distribuita per dati nella colonna DISTKEY Quando si aggrega o si fa join per DISTKEY
EVEN Distribuzione a turni per riga tra i nodi Tabelle grandi senza chiavi
AUTO Usa ALL per tabelle piccole. Diventa KEY se cresce e ci sono DISTKEY idonee, altrimenti EVEN default
Introduzione a Redshift

DISTKEY

CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    'organization_id' VARCHAR(31),
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
)
-- Imposta la chiave di distribuzione 
-- su organization_id
DISTKEY(organization_id);
CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    -- Imposta organization_id come 
    -- chiave di distribuzione 
    'organization_id' VARCHAR(31) DISTKEY,
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
);
Introduzione a Redshift

Impostare lo stile di distribuzione

CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    'organization_id' VARCHAR(31),
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
)
DISTKEY(organization_id)
-- Imposta lo stile di distribuzione su key
DISTSTYLE KEY;
Introduzione a Redshift

SORTKEY

CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    'organization_id' VARCHAR(31),
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
)
DISTKEY(organization_id)
DISTSTYLE KEY
-- Imposta la chiave di ordinamento 
-- su fk_monitoringlocation
SORTKEY(fk_monitoringlocation);
  • Controlla l’ordine su disco
  • Potenzia il predicate pushdown
  • Può essere multipla
Introduzione a Redshift

Definire più SORTKEY

CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    'organization_id' VARCHAR(31),
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
)
-- Imposta fk_monitoringlocation, organization_id come chiavi di ordinamento composte
COMPOUND SORTKEY(fk_monitoringlocation, organization_id);
Introduzione a Redshift

Vedere stato DISTKEY e SORTKEY delle colonne

-- Vedi stato di dist e sortkey
-- per una colonna
SELECT column_name, 
       distkey, 
       sortkey
  FROM SVV_REDSHIFT_COLUMNS
 -- Solo nello schema spectrumdb
 WHERE schema_name = 'spectrumdb'
   -- Per la tabella ecommerce_sales
   AND table_name = 'ecommerce_sales';
  • Risultati

       column   | distkey | sortkey
    ============|=========|========
    year_qtr    | t       | 1
    total_sales | f       | 2
    ecom_sales  | f       | 0
    
  • Colonna Distkey

    • t per True - f per False
  • Colonna SORTKEY
    • # è la posizione nella sort key, 0 non è parte della sortkey
Introduzione a Redshift

Vedere lo stile di distribuzione

  • SVV_TABLE_INFO
  • Dettagli di tabella che impattano le query
    • distribution style
    • distribution skew
    • dimensione tabella
    • sortkey
    • skew sortkey
table          | encoded | diststyle       | sortkey1     | skew_sortkey1 | skew_rows
===============|=========|=================|==============|===============|===========
ecommerce_sales| N       | KEY(year_qtr)   | year_qtr     |               |          
date           | N       | ALL             | dateid       |          1.00 |
Introduzione a Redshift

Vedere lo stile di distribuzione (continua)

SELECT table
       diststyle 
  FROM SVV_TABLE_INFO
 WHERE schema like 'spectrumdb';
table           | diststyle 
================|============== 
ecommerce_sales | KEY(year_qtr)
Introduzione a Redshift

Passiamo alla pratica!

Introduzione a Redshift

Preparing Video For Download...