Tables dans Redshift

Introduction à Redshift

Jason Myers

Principal Engineer

Créer des tables

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

Répartir les données

Grappes Redshift

  • Réparties entre les nœuds de calcul
  • Utilise l'ID de ligne interne Redshift, DISTKEY ou PRIMARY KEY
  • Plusieurs styles de distribution
Introduction à Redshift

Styles de distribution

Name Description Usage
ALL Table entière sur chaque nœud Petites tables de faits de recherche souvent jointes
KEY Répartition selon la colonne DISTKEY Quand on agrège ou joint par DISTKEY
EVEN Répartition à tour de rôle par ligne Grandes tables sans clés
AUTO Utilise ALL pour les petites tables. Passe à KEY si des DISTKEY conviennent, sinon EVEN par défaut
Introduction à 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)
)
-- Définit la clé de distribution des données 
-- sur organization_id
DISTKEY(organization_id);
CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    -- Définit organization_id comme 
    -- clé de distribution des données 
    'organization_id' VARCHAR(31) DISTKEY,
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
);
Introduction à Redshift

Définir le style de distribution

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)
-- Définit le style de distribution à KEY
DISTSTYLE KEY;
Introduction à 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
-- Définit la clé de tri des données 
-- sur fk_monitoringlocation
SORTKEY(fk_monitoringlocation);
  • Contrôle l'ordre de stockage sur disque
  • Amplifie la puissance du « predicate pushdown »
  • Peut en avoir plusieurs
Introduction à Redshift

Définir plusieurs SORTKEY

CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    'organization_id' VARCHAR(31),
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
)
-- Définit fk_monitoringlocation, organization_id comme clés de tri composées
COMPOUND SORTKEY(fk_monitoringlocation, organization_id);
Introduction à Redshift

Afficher l'état des DISTKEY et SORTKEY par colonne

-- Voir l'état de dist et de sortkey
-- pour une colonne
SELECT column_name, 
       distkey, 
       sortkey
  FROM SVV_REDSHIFT_COLUMNS
 -- Seulement dans le schéma spectrumdb
 WHERE schema_name = 'spectrumdb'
   -- Pour la table ecommerce_sales
   AND table_name = 'ecommerce_sales';
  • Résultats

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

    • t pour True - f pour False
  • Colonne SORTKEY
    • # est la position dans la clé de tri, 0 = pas dans la clé
Introduction à Redshift

Afficher le style de distribution

  • SVV_TABLE_INFO
  • Détails de table qui influent sur la performance des requêtes
    • style de distribution
    • déséquilibre de distribution
    • taille de la table
    • clés de tri
    • déséquilibre des clés de tri
table          | encoded | diststyle       | sortkey1     | skew_sortkey1 | skew_rows
===============|=========|=================|==============|===============|===========
ecommerce_sales| N       | KEY(year_qtr)   | year_qtr     |               |          
date           | N       | ALL             | dateid       |          1.00 |
Introduction à Redshift

Afficher le style de distribution (suite)

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

Passons à la pratique !

Introduction à Redshift

Preparing Video For Download...