Таблицы в Redshift

Введение в Redshift

Jason Myers

Principal Engineer

Создание таблиц

CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    'organization_id' VARCHAR(31),
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
);
Введение в Redshift

Распределение данных

Кластер Redshift

  • Распределяется по вычислительным узлам
  • Использует внутренний row id Redshift, DISTKEY или PRIMARY KEY
  • Несколько стилей распределения
Введение в Redshift

Стили распределения

Название Описание Применение
ALL Вся таблица на каждом узле Небольшие справочные таблицы, часто используемые в JOIN
KEY Распределение по данным столбца DISTKEY При агрегации или JOIN по DISTKEY
EVEN Поочерёдное распределение строк по узлам Большие таблицы без ключей
AUTO ALL для малых таблиц; KEY по мере роста при наличии подходящих DISTKEY, иначе EVEN по умолчанию
Введение в 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)
);
Введение в Redshift

Указание стиля распределения

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;
Введение в 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);
  • Управляет порядком хранения данных на диске
  • Усиливает эффект predicate-pushdown
  • Может быть несколько
Введение в 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)
)
-- Sets fk_monitoringlocation, organization_id as compound sort keys
COMPOUND SORTKEY(fk_monitoringlocation, organization_id);
Введение в Redshift

Просмотр статуса DISTKEY и SORTKEY столбца

-- 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';
  • Результаты

       column   | distkey | sortkey
    ============|=========|========
    year_qtr    | t       | 1
    total_sales | f       | 2
    ecom_sales  | f       | 0
    
  • Столбец Distkey

    • t — True, f — False
  • Столбец SORTKEY
    • # — позиция в ключе сортировки, 0 — не входит в SORTKEY
Введение в Redshift

Просмотр стиля распределения

  • SVV_TABLE_INFO
  • Сведения о таблице, влияющие на производительность запросов
    • стиль распределения
    • перекос распределения
    • размер таблицы
    • ключи сортировки
    • перекос ключа сортировки
table          | encoded | diststyle       | sortkey1     | skew_sortkey1 | skew_rows
===============|=========|=================|==============|===============|===========
ecommerce_sales| N       | KEY(year_qtr)   | year_qtr     |               |          
date           | N       | ALL             | dateid       |          1.00 |
Введение в Redshift

Просмотр стиля распределения: продолжение

SELECT table
       diststyle 
  FROM SVV_TABLE_INFO
 WHERE schema like 'spectrumdb';
table           | diststyle 
================|============== 
ecommerce_sales | KEY(year_qtr)
Введение в Redshift

Давайте потренируемся!

Введение в Redshift

Preparing Video For Download...