Tabele w Redshift

Wprowadzenie do Redshift

Jason Myers

Principal Engineer

Tworzenie tabel

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

Dystrybucja danych

Klaster Redshift

  • Dane rozdzielone między węzły obliczeniowe
  • Używa wewnętrznego identyfikatora wiersza Redshift, DISTKEY lub PRIMARY KEY
  • Kilka stylów dystrybucji
Wprowadzenie do Redshift

Style dystrybucji

Nazwa Opis Zastosowanie
ALL Cała tabela na każdym węźle Małe tabele faktów potrzebne często w złączeniach
KEY Dystrybucja według danych w kolumnie DISTKEY Przy agregacji lub złączeniu według DISTKEY
EVEN Dystrybucja wierszy równomiernie między węzłami Duże tabele bez kluczy
AUTO ALL dla małych tabel; KEY przy wzroście (jeśli są odpowiednie DISTKEYS), w przeciwnym razie EVEN domyślny
Wprowadzenie do 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)
)
-- Sets the data distribution key 
-- to organization_id
DISTKEY(organization_id);
CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    -- Sets organization_id as the data 
    -- distribution key 
    'organization_id' VARCHAR(31) DISTKEY,
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
);
Wprowadzenie do Redshift

Ustawianie stylu dystrybucji

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)
-- Sets the distribution style to key
DISTSTYLE KEY;
Wprowadzenie do 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
-- Sets the data sort key 
-- to fk_monitoringlocation
SORTKEY(fk_monitoringlocation);
  • Kontroluje kolejność przechowywania danych na dysku
  • Wzmacnia działanie mechanizmu predicate-pushdown
  • Może mieć wiele wartości
Wprowadzenie do Redshift

Definiowanie wielu kluczy SORTKEY

CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    'organization_id' VARCHAR(31),
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
)
-- Sets fk_monitoringlocation, organization_id as compound sort keys
COMPOUND SORTKEY(fk_monitoringlocation, organization_id);
Wprowadzenie do Redshift

Podgląd statusu DISTKEY i SORTKEY kolumny

-- View the dist and sortkey
-- status of a column
SELECT column_name, 
       distkey, 
       sortkey
  FROM SVV_REDSHIFT_COLUMNS
 -- Only in the spectrumdb schema
 WHERE schema_name = 'spectrumdb'
   -- For the ecommerce_sales table
   AND table_name = 'ecommerce_sales';
  • Wyniki

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

    • t oznacza True, f oznacza False
  • Kolumna SORTKEY
    • # to pozycja w kluczu sortowania, 0 oznacza brak udziału
Wprowadzenie do Redshift

Podgląd stylu dystrybucji

  • SVV_TABLE_INFO
  • Szczegóły tabeli wpływające na wydajność zapytań
    • styl dystrybucji
    • nierównomierność dystrybucji
    • rozmiar tabeli
    • klucze sortowania
    • nierównomierność kluczy sortowania
table          | encoded | diststyle       | sortkey1     | skew_sortkey1 | skew_rows
===============|=========|=================|==============|===============|===========
ecommerce_sales| N       | KEY(year_qtr)   | year_qtr     |               |          
date           | N       | ALL             | dateid       |          1.00 |
Wprowadzenie do Redshift

Podgląd stylu dystrybucji – ciąg dalszy

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

Czas na ćwiczenia!

Wprowadzenie do Redshift

Preparing Video For Download...