Tìm hiểu kiểu dữ liệu và tính năng của Redshift

Giới thiệu về Redshift

Jason Myers

Principal Architect

Các kiểu dữ liệu cơ bản

Kiểu số

  • SMALLINT, INTEGER, BIGINT
  • DECIMAL / NUMERIC
  • DOUBLE PRECISION
  • REAL

Kiểu ngày giờ

  • DATE
  • TIME, TIMETZ
  • TIMESTAMP, TIMESTAMPTZ

Kiểu ký tự

  • CHAR
  • VARCHAR

Kiểu Boolean

  • BOOLEAN
Giới thiệu về Redshift

Các kiểu dữ liệu đặc biệt

Kiểu SUPER

  • Dữ liệu bán cấu trúc
    • Mảng
    • Bộ (tuple)
    • Cấu trúc lồng nhau (ví dụ: JSON)
  • Dùng PartiQL để xử lý
  • Kích thước tối đa 16MB

Kiểu VARBYTE

  • dữ liệu nhị phân (BLOB)
  • Ảnh và video
Giới thiệu về Redshift

Các kiểu PostgreSQL không được hỗ trợ:

Kiểu PostgreSQL Kiểu Redshift
DATETIME TIMESTAMP, TIMESTAMPTZ
SERIAL INTEGER, BIGINT
UUID VARCHAR
JSON SUPER, VARCHAR
ARRAY SUPER, VARCHAR
BIT BOOLEAN, SMALLINT, VARCHAR
Giới thiệu về Redshift

Xem cột và kiểu dữ liệu của chúng

-- Xem chi tiết cột
SELECT column_name, 
       data_type, 
       character_maximum_length AS character_max_len,
       numeric_precision, 
       numeric_scale
  -- Dùng view có cột của cả schema nội bộ và external
  FROM SVV_ALL_COLUMNS 
 -- Chỉ trong schema spectrumdb
 WHERE schema_name = 'spectrumdb'
   -- Cho bảng ecommerce_sales
   AND table_name = 'ecommerce_sales';
Giới thiệu về Redshift

Xem cột và kiểu dữ liệu (tiếp)

column_name                  | data_type         | character_max_len | numeric_precision | numeric_scale
=============================|===================|===================|===================|==============
year_qtr                     | character varying | 100               | null              | null
total_sales                  | integer           | null              | 32                | 0
ecom_sales                   | integer           | null              | 32                | 0
percent_ecom                 | real              | null              | null              | null
percent_change_quarter_total | real              | null              | null              | null
percent_change_quarter_ecom  | real              | null              | null              | null
percent_change_year_total    | real              | null              | null              | null
percent_change_year_ecom     | real              | null              | null              | null
Giới thiệu về Redshift

“Tương thích” kiểu dữ liệu

  • Chuyển đổi ngầm: gán, so sánh
  • Hãy kiểm tra kỹ kết quả!
Từ kiểu Sang kiểu
CHAR VARCHAR
DATE CHAR, VARCHAR, TIMESTAMP, TIMESTAMPTZ
TIMESTAMP CHAR, DATE, VARCHAR, TIMESTAMPTZ
BIGINT BOOLEAN, CHAR, DECIMAL, DOUBLE PRECISION, INTEGER, REAL, SMALLINT, VARCHAR
DECIMAL BIGINT, CHAR, DOUBLE PRECISION, INTEGER, REAL, SMALLINT, VARCHAR
1 https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html#r_Type_conversion
Giới thiệu về Redshift

Ép kiểu dữ liệu tường minh

  • CAST
-- Ép decimal sang integer và đặt bí danh
SELECT CAST(2.00 AS INTEGER) AS our_int;
our_int
========
2
(1 row)
Giới thiệu về Redshift

Các hàm TO

  • TO_CHAR, TO_DATE, TO_NUMBER
-- Chuyển chuỗi thành date
SELECT CAST('14-01-2024 02:36:48' AS DATE) AS out_date;
date/time field value out of range: "14-01-2024 02:36:48"
HINT:  Perhaps you need a different "datestyle" setting.
-- Phân tích chuỗi thành date
SELECT TO_DATE('14-01-2024 02:36:48', 'DD-MM-YYYY') AS our_date;
our_date
========
2024-01-14
(1 row)
Giới thiệu về Redshift

Các hàm TO (tiếp)

-- Lấy tên tháng trong một date
SELECT TO_CHAR(date '2024-01-14', 'MONTH') AS month_name;
month_name
========
JANUARY
(1 row)
  • Chuỗi định dạng Datetime và Numeric
1 https://docs.aws.amazon.com/redshift/latest/dg/r_FORMAT_strings.html
Giới thiệu về Redshift

Vamos praticar!

Giới thiệu về Redshift

Preparing Video For Download...