ตารางใน Redshift

Introduction to 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)
);
Introduction to Redshift

การกระจายข้อมูล

Redshift Cluster

  • กระจายข้อมูลไปยัง compute node ต่าง ๆ
  • ใช้ row id ภายใน Redshift, DISTKEY หรือ PRIMARY KEY
  • มีรูปแบบการกระจายข้อมูลหลายแบบ
Introduction to Redshift

รูปแบบการกระจายข้อมูล

ชื่อ คำอธิบาย การใช้งาน
ALL คัดลอกตารางทั้งหมดไปทุก node ตาราง lookup ขนาดเล็กที่ใช้ join บ่อย
KEY กระจายตามข้อมูลในคอลัมน์ DISTKEY เมื่อ aggregate หรือ join ด้วย DISTKEY
EVEN กระจายแถวไปยัง node ทีละแถวสลับกัน ตารางขนาดใหญ่ที่ไม่มี key
AUTO ใช้ ALL สำหรับตารางเล็ก และสลับเป็น KEY เมื่อขยายใหญ่ขึ้นหากมี DISTKEY ที่เหมาะสม ไม่เช่นนั้นใช้ EVEN ค่าเริ่มต้น
Introduction to 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)
);
Introduction to 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;
Introduction to 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
  • กำหนดได้หลายคอลัมน์
Introduction to 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);
Introduction to 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
Introduction to Redshift

ดูรูปแบบการกระจายข้อมูล

  • SVV_TABLE_INFO
  • รายละเอียดตารางที่ส่งผลต่อประสิทธิภาพการ query
    • รูปแบบการกระจายข้อมูล
    • ความเบี่ยงเบนของการกระจาย
    • ขนาดตาราง
    • sortkey
    • ความเบี่ยงเบนของ sortkey
table          | encoded | diststyle       | sortkey1     | skew_sortkey1 | skew_rows
===============|=========|=================|==============|===============|===========
ecommerce_sales| N       | KEY(year_qtr)   | year_qtr     |               |          
date           | N       | ALL             | dateid       |          1.00 |
Introduction to Redshift

ดูรูปแบบการกระจายข้อมูล (ต่อ)

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

มาฝึกกันเถอะ!

Introduction to Redshift

Preparing Video For Download...