Таблиці в 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

Стилі розподілу

Name Description Usage
ALL Уся таблиця на кожному вузлі Невеликі довідкові таблиці, які часто приєднуємо
KEY Розподіл за даними у стовпці DISTKEY Коли агрегуємо або приєднуємо за DISTKEY
EVEN Почерговий розподіл рядків між вузлами Великі таблиці без відповідних ключів
AUTO Для малих таблиць — ALL. За наявності придатних DISTKEY переходить до Key, інакше — EVEN default
Вступ до 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
    • # — позиція у sort key, 0 — не входить до sortkey
Вступ до Redshift

Перегляд стилю розподілу

  • SVV_TABLE_INFO
  • Відомості про таблицю, що впливають на продуктивність запитів
    • стиль розподілу
    • перекіс розподілу
    • розмір таблиці
    • sortkeys
    • перекіс sortkey
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...