# 《Amazon Redshift 基礎介紹與架構分析》
## 📒引言
這是我研究 Amazon Redshift 時做的學習筆記,記錄了我對資料倉儲和 AWS 的一些理解和想法。內容可能不夠專業或有所疏漏,歡迎大家一起討論交流!

## 📒 Introduction 簡介
在現代企業中,數據已成為決策與創新的核心資源。為了從龐雜的資料中找出價值,許多公司會建立資料倉儲(Data Warehouse),這是一種專門用來分析資料的大型系統。而 Amazon Redshift,正是 AWS 所提供的雲端資料倉儲服務。
假設你擁有一個資料湖(Data Lake),裡面充滿了結構化和非結構化的數據。當資料科學家想要從中提取有用的Insight時,通常需要經過一個叫做 ETL(Extract, Transform, Load) 的處理流程,也就是將資料提取出來、轉換為適合分析的格式,並載入到一個可查詢的資料庫中。接著,再透過商業智慧(BI)工具將分析結果呈現給業務使用者。
#### 📘 - 資料倉儲架構圖 -

使用 Amazon Redshift,可以大幅簡化這整個流程。它不僅支援 ETL 資料處理,還能高效儲存龐大的分析資料,並與各種 BI 工具無縫整合,幫助企業快速取得數據洞見。換句話說,Redshift 把「資料轉換 → 儲存分析 → 洞見取得」這整段流程整合在一個平台上,大幅提升了效率與可擴展性。
## 📒 Architecture 架構
### :abacus: Redshift 類型
Amazon Redshift 提供兩種部署模式,分別是「自行管理的叢集(Provisioned Cluster)」與「無伺服器模式(Serverless)」,用戶可依據需求選擇最適合的架構。
#### 📘 1. Provisioned Cluster(自行管理叢集)
* 自行建立與管理 Redshift Cluster
#### :brain: 優點
1. 高度客製化(可調整節點數、儲存大小等)
2. 成本掌控較容易(按使用量與資源配置計費)
#### :brain: 特色
* 每一個 cluster 由多個節點(nodes)所構成。(**Leader Node** 與 **Compute Node**)
* **「 Leader Node 」** 負責整體叢集的協調與管理任務,例如接收使用者查詢、生成執行計畫,並分派給各個 Compute Node 執行。
* **「 Compute Node 」** 則是叢集處理資料與運算工作的核心
* **「Slices」** 是Compute Node再細分成的數個單位,也就是 Redshift 中執行查詢的最小運算單位。

**SOURCE: https://medium.com/towards-tech-intelligence/aws-redshift-overview-25e7b9aea9b8**
#### 📘 2. Serverless(無伺服器)
* AWS 全權管理資源配置與擴展,使用者只需專注於執行 SQL 查詢
#### :brain: 優點:
1. 無需維護底層架構
2. 快速啟動、彈性高,適合間歇性或不可預測的工作負載
#### :brain: 系統兩個主要服務
1. **「Workgroup」** 來處理運算資源的配置、網路連線與安全性設定等相關工作。
2. **「Namespace」** 是用來管理資料的虛擬容器,其中包含多個資料表(tables)與綱要結構(schemas),主要用途是作為整合資料來源的邏輯單位,方便多樣化的查詢與分析管理。
* 最小計價與執行單位為 RPU(Redshift Processing Unit)。
* 一個 Workgroup 可以對應多個 Namespace,但反過來說,每個 Namespace 僅能連結到一個特定的 Workgroup。
* 這樣的架構讓 Serverless 模式具備高度彈性,並能在無需維護叢集資源的情況下,完成資料倉儲任務。

**SOURCE: https://inquisitiveintellect.medium.com/aws-redshift-serverless-vs-provisioned-cluster-31f0d6e8d609**
### :abacus: Amazon Redshift 主機類型
在建立 Amazon Redshift 資料倉儲時,選擇合適的主機節點類型(Node Type)是效能與成本最佳化的關鍵。目前主要有兩種節點類型可供選擇:RA3 與 DC2。這兩者的設計理念、適用場景與價格結構皆不同,以下為詳細說明。
#### 📘 1. DC2(Dense Compute)
* DC2 是早期的 Redshift 節點類型,主要強調高效能與 I/O 密集的處理能力。
* 儲存與運算綁定在一起:每個節點的運算能力與儲存空間是固定綁定的
* 成本較低、簡單好管理
#### 📘 2. RA3(最新一代)
* RA3 是目前建議使用的主流節點類型,設計上更為靈活與擴充
* 儲存與運算分離架構(Decoupled Storage and Compute),可以根據分析需求擴增計算節點,而儲存空間則動態管理於 Amazon Redshift Managed Storage(RMDS)
* 適合大規模資料湖、彈性查詢量、與動態擴展需求的企業架構

### :abacus: Amazon Redshift 的三層結構
Amazon Redshift 雖是雲端資料倉儲服務,但它的底層技術與傳統資料庫密切相關。從底到上,Redshift 架構大致可以分為三層:PostgreSQL 核心、PL/pgSQL 中介層、以及 Stored Procedure 應用層。每層都扮演不同的角色,讓整體系統既穩定又有彈性。

#### 📘 1. **Stored Procedure - 儲存程序 (上層)**
* 是最上層是使用者最常互動的部分
* 可以視為「打包並程式化一段資料流程」或者「一段可重複使用的小型程式」
* 透過一個命令就能執行一連串的 SQL 操作或邏輯判斷。例如你可以寫一個儲存程序自動完成每日ETL。
* 這一層讓 Redshift 更接近企業實際使用需求,也利於系統自動化與維運。
---
#### 📗 -舉例說明
* 假設有一張 orders 訂單表格,需求是:「只要是 30 天以前的未付款訂單,就要自動刪除。」
* Stored Procedure 程式碼如下:
```sql
CREATE OR REPLACE PROCEDURE clean_expired_orders()
AS $$ -- "$$"是用來框住程式碼邏輯的符號,通常會搭配 BEGIN ... END 使用
BEGIN
DELETE FROM orders
WHERE status = 'unpaid'
AND created_at < current_date - interval '30 day';
END;
$$ LANGUAGE plpgsql;
```
而往後只要執行這段指令就可以呼叫它:
```sql
CALL clean_expired_orders();
```
---
#### 📘 2. **PL/pgSQL(中層)**
* Redshift 支援 PL/pgSQL(Procedural Language for PostgreSQL),這是一種具備邏輯控制能力的程式語言
* 可以撰寫條件判斷(if)、迴圈(for/while)等邏輯。這層負責實作「邏輯處理」,讓使用者可以撰寫更複雜的數據操作流程,而不只是單純查詢資料。
#### 📗 -舉例說明
* 假設現在需要「根據輸入的使用者 ID,輸出該使用者目前訂單數量」
* PL/pgSQL 程式碼如下:
```sql
CREATE OR REPLACE PROCEDURE get_order_count(user_📗id INT)
AS $$
DECLARE
order_count INT;
BEGIN
SELECT COUNT(*) INTO order_count
FROM orders
WHERE user_id = get_order_count.user_id;
RAISE NOTICE '使用者 % 的訂單數量為:%', user_id, order_count;
END;
$$ LANGUAGE plpgsql;
```
而往後只要執行這段指令並指定變數,這段程式會幫你查詢特定使用者的訂單數,並用系統訊息顯示出來。
```sql
CALL get_order_count(101); -- 這邊的"101"就是使用者id
```
---
> ***注意:如果你使用 ETL 預先整理好資料,基本上就不需要寫 Stored Procedure,也不一定需要 PL/pgSQL!**
#### 📘 3. **PostgreSQL(底層)**
Redshift 的底層是以 PostgreSQL 為基礎的資料庫引擎,也就是說,它借用了 PostgreSQL 的資料儲存邏輯、資料結構、以及部分 SQL 語法的執行方式。這讓 Redshift 擁有穩定且高效的 SQL 支援,也讓習慣使用 PostgreSQL 的使用者更容易上手。但要注意,Redshift 只「相容」PostgreSQL,而非完全一樣,它做了很多優化以支援大規模平行處理(MPP)。
## 📒 Storage 儲存
### :abacus: Columner Storage
* **Primary storage mechanism used by Amazon Redshift**
* 是一種將資料儲存在資料庫中的方式,與傳統的行式儲存(Row Storage)不同
* 列式儲存會根據資料的「列」進行儲存,而不是將每一筆資料按「行」來儲存。
#### :brain: 優勢
* 減少儲存空間、增加壓縮性
#### - 行式儲存(Row Storage)-

#### - 列式儲存Columner Storage -

### :abacus: AWS S3
#### :brain: 重點
Amazon S3(Simple Storage Service)是 AWS 上最具代表性的雲端儲存服務,它不只是儲存照片或備份資料那麼簡單,更是許多 機器學習(Machine Learning) 與 資料湖(Data Lake) 架構的關鍵基礎。
S3 的彈性與整合能力,讓它可以與多種 AWS 服務無縫串聯,像是 Glue、EMR、Lambda、Redshift Spectrum、Kinesis 等等,形成一個強大的資料處理與分析生態系。
#### :brain: 整合模式
1. **Inside-Out 模式:** 以 S3 中的資料變動為觸發來源,主動將資料推送或觸發其他服務進行處理。
2. **Outside-In 模式:** 由外部服務主動向 S3 存取或寫入資料,並可透過 Glue Catalog 管理其對象檔案的元資料。
### :abacus: Data Lake與其他服務的協作
**📘 1. Redshift Spectrum**
* 允許使用者在 Redshift 中直接查詢儲存在 S3 上的資料(例如 CSV、Parquet、JSON),不需先將資料匯入 Redshift 資料表。
* 計費方式是看Scan了多少Data
**📘 2. COPY Command**
* 在 Amazon Redshift 中,COPY 是將外部資料載入資料表最快且最常見的方法,尤其適用於從 Amazon S3 或 EMR 匯入大量資料。
* 這個指令會透過 SSL 傳輸資料以確保安全性,並且需要具備適當的 IAM Role 權限來讀取來源檔案。
* 在執行 COPY 指令之前,必須確認來源資料的格式(如分隔符號、時間格式等)與 Redshift 目標表的結構一致。
* 為了能順利將資料寫入 Redshift,IAM Role 也必須Mapping到cluster的Role Setting中。
#### 📗 -實際範例說明
```sql=
COPY {DATABASE}.{SCHEMA}.{TABLE}
FROM '{S3_FILE_PATH}'
IAM_ROLE '{IAM ROLE OF REDSHIFT}'
FORMAT AS CSV
DELIMITER ','
QUOTE '"'
IGNOREHEADER 1
REGION '{REGION}';
```
**📘 3. Auto COPY**
* 這個功能可根據S3 Event 自動將新上傳至 S3 的檔案複製到資料表。
#### 📗 -實際範例說明
```sql=
COPY my_table
FROM 's3://my-bucket/data/'
FORMAT CSV
IAM_ROLE 'arn:aws:iam::123456789012:role/MyRedshiftRole'
JOB CREATE auto_copy_job_name
AUTO ON;
```
**4. UNLOAD 指令**
* 能夠將查詢結果輸出並儲存回 S3,常用於資料備份或中繼處理。
#### 📗 -實際範例說明
```sql=
UNLOAD ('SELECT * FROM schema.table')
TO 's3://your-bucket/output/'
IAM_ROLE 'arn:aws:iam::123456789012:role/YourRedshiftRole';
```
## 📒 Performance 效能
提升效能是資料分析中的核心任務,能有效加快查詢速度、縮短等待時間,進而提升整體決策效率。在 Amazon Redshift 中,透過善用 SQL 指令 與 UDF(User-Defined Functions) 等工具,使用者可以在資料進入分析流程前完成預先清洗與轉換,讓後續的查詢與報表執行更為順暢且高效。增加效能是重要任務可以幫助分析 可以在redshift善用SQL指令或UDFs去清洗資料以提升檢所和分析效率
### :abacus: Materialized View(物化檢視表)
Materialized View 是一種會將查詢結果實際儲存起來的 View,也就是資料真的存在資料庫中,而不是每次查詢都重新計算。這讓查詢速度更快,尤其適合以下場景:
舉例來說,將2個不同表格的資料整合並存成一個新的view,之後再query該view就可以達到更快的速度
#### 📘 -實際範例說明
```sql-
CREATE VIEW top_customers AS
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id;
-- 使用時
SELECT * FROM top_customers WHERE total > 1000;
```
### :abacus: WITH 指令(CTE:Common Table Expression)
在 Redshift(和大多數 SQL 系統)中,WITH 是用來建立 Common Table Expression(CTE) 的語法,可以在主查詢之前先定義一段子查詢,提升整體 SQL 結構的可讀性與模組化。這些子查詢不會被儲存到資料庫中,每次查詢都會重新計算。
#### 📗 -實際範例說明
```sql-
WITH top_customers AS (
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
)
SELECT * FROM top_customers WHERE total > 1000;
```
WITH 是臨時用的 SQL 查詢片段,VIEW 是永久儲存在資料庫裡的查詢邏輯。
### :abacus: Massive Parallel Processing(MPP,大規模平行處理)
* 是一種能夠同時使用多台機器或多個處理核心一起處理資料的運算方式,目的是大幅加快資料處理的速度與效能。
* 一個Leader Node, 多個Compute Node的配置即是
* 每個 Compute Node 會再被切分為數個 Slice。一個 Slice 可以理解為「負責處理一小部分資料的計算子單位」
* Redshift 將資料平均分配到每個 Slice 中,使所有 Slice 可以平行處理資料,達成MPP。
### :abacus: Result Caching(結果快取)
* 是一種用來加速查詢反應時間的技術
* 當使用者執行一個查詢時,資料庫會把查詢的結果暫存(快取)起來,下次如果有一模一樣的查詢被執行,就直接回傳快取中的結果,
* 不必重新計算,能節省時間與運算資源。
### :abacus: AQUA (Advanced Query Accelerator)
* 是 Redshift 推出的查詢加速層,它把部分資料處理工作(如過濾、解壓縮)搬到專屬的硬體加速設備中執行
* 有了 AQUA,就像圖書館請了幾個幫手(特別的硬體加速器),在書架旁邊直接幫你找好資料,還幫你算好,你只要拿結果就好。
### :abacus: WLM (Workload Managemet)
WLM(Workload Management) 是 Amazon Redshift 提供的一種資源管理機制,用來控制不同查詢在系統中如何使用資源(如記憶體與 CPU),以確保不同類型的工作負載都能有效執行。
* WLM 能夠分配與管理記憶體(Memory)與中央處理器(CPU)等資源給不同查詢使用。
* Redshift 中可設定多個查詢佇列(Queue),每個佇列對應不同用途的查詢類型。例如:可設定一個 Queue 處理 ETL 程式,另一個 Queue 處理 BI 報表產出。
* 每個 Queue 可以被設定不同的優先順序,確保關鍵工作負載(如即時報表)比背景工作(如 ETL)獲得更多資源或更快執行機會。
* 每個 Queue 可以定義其最大併發查詢數(concurrency level)。這決定該佇列同時可以執行多少個查詢,超過數量的查詢則會排隊等候。
### :abacus: Data Distribution
#### :brain: 定義
* 在 Amazon Redshift 中,資料分布(Data Distribution) 的設計是為了將資料平均分配到不同節點與切片(slices)中,從而減少查詢時的資料搬移(data movement),達成更快的查詢效能。
* 當查詢執行時,Redshift 會嘗試讓每個切片處理「自己的那份資料」,資料分布得越平均、查詢效能越好。
* 設計資料模型時,應同時「Distribution Styles」和「Sort Key」,以最佳化查詢效能。
#### :brain: 重點
* 資料分布的方式(Distribution Styles):
1. ALL:將整張表複製到所有節點,適合小型、靜態的 lookup table。
1. EVEN:將資料平均分散到所有節點,適合單表查詢但不利於 JOIN。
1. KEY:依指定欄位的值將資料 hash 分配,有助於減少 JOIN 時的資料搬移。
1. AUTO:由 Redshift 自動選擇最佳分布策略,適合不想手動管理的情境。
1. CUSTOM:使用者自訂分布方式與欄位,適合進階查詢優化需求。
* Sort Key(資料排序)與資料分布的關聯
* 資料排序與分布皆可影響查詢效能。
* Redshift 支援兩種排序鍵(Sort Key)類型:
1. Compound:按照定義的欄位順序依序排序。
2. Interleaved:針對多個欄位平均排序,適合多維度查詢。
### :abacus: Redshift Federated Query
這個功能允許使用者直接在 Redshift 上執行跨資料來源的查詢,讓不同來源(如 MySQL、PostgreSQL、Aurora)的資料可以被整合到 Redshift 查詢邏輯中。
* 建立 external schema,讓 Redshift 能將外部資料來源Mapping進自己的查詢空間,就像操作本地資料一樣。
* 能免去繁瑣的資料搬移流程,在同一個 SQL 查詢中同時處理來自 S3、Redshift 與 RDS 的資料,實現零 ETL 的分析應用(Zero-ETL)。
* 允許從 Redshift 查詢外部資料庫(如 MySQL、PostgreSQL、Aurora)
* 不需先將資料載入 Redshift,可直接查詢
* Zero-ETL 架構:如 Aurora Zero-ETL to Redshift,資料同步自動完成
#### 📗 -實際範例說明
```sql=
CREATE EXTERNAL SCHEMA my_external_schema
FROM MYSQL
DATABASE 'your-db-name'
URI 'mysql://your-db-endpoint'
IAM_ROLE 'arn:aws:iam::123456789012:role/YourRedshiftRole'
SECRET_ARN 'arn:aws:secretsmanager:region:account-id:secret:your-secret-key';
```
* CREATE SCHEMA :用來建立 Redshift 本地的資料庫結構
* CREATE EXTERNAL SCHEMA:連接並映射外部資料來源(如 S3、RDS、MySQL)到 Redshift 內部。
## 📒 Security 安全性
Amazon Redshift 為資料倉儲服務提供完整的資安設計,涵蓋四大面向:Access 存取控制、Network 網路隔離、Encryption 加密保護、以及 Monitoring 監控稽核。這些措施協助企業保護資料機密性、完整性與可用性。
### 📘 1. Access:資料存取控制
* 支援 JDBC(Java Database Connectivity) 與 ODBC(Open Database Connectivity),可讓不同工具(如 Spark、Excel、Power BI、Tableau)連接 Redshift。
* 使用 GRANT 指令可以細部設定使用者的資料表、欄位或操作權限。
* 可使用SQL Client透過 JDBC/ODBC 與 IAM 整合,產生暫時性認證憑證,以達到細緻的身份控管與權限驗證。
### 📘 2. Network
* Redshift 通常部署於 Amazon VPC(Virtual Private Cloud) 中,確保資料庫與外部世界隔離。
* 可將 BI 工具與 Redshift 部署於不同 Subnet 中,透過 Security Group 精確控制流量
* 若需要跨 VPC 存取,可利用 VPC Peering 或 AWS PrivateLink 等方式進行安全連接,確保內部服務溝通不經由公開網路。
### 📘 3. Encryption
* 靜態加密(At-Rest Encryption):利用 AWS KMS(金鑰管理服務)或 HSM(硬體安全模組)加密儲存資料。
* 動態加密(In-Transit Encryption):預設使用 SSL(Secure Socket Layer) 加密資料傳輸過程,防止中間人攻擊。
### 📘 4. Monitoring
* CloudTrail:記錄 API 存取紀錄與使用者行為(如建立、刪除資料表等動作)。
* CloudWatch:提供實時指標與警示功能,可追蹤連線數量、查詢延遲、CPU 使用率等,輔助偵測異常。
## 📒與其他服務的聯用
### :abacus: Machine Learning on Redshift
#### :bookmark_tabs: - 簡述
在傳統資料分析流程中,機器學習模型的訓練通常需要將資料匯出到其他平台(如 SageMaker、Jupyter Notebook),再進行處理與預測。但在 Amazon Redshift 中,我們可以直接透過 SQL 指令,使用 CREATE MODEL 在資料庫內部進行機器學習模型的訓練,這項功能稱為 Redshift ML。
這代表你可以不離開資料庫環境,就完成資料清理、模型建立、與預測流程,讓分析變得更加直覺與快速。
#### 🧠 - 關鍵特點
* 直接用 SQL 的 "CREATE MODEL" 指令撰寫並訓練模型,但要注意CREATE MODEL要收費、費用取決於資料量
* 模型背後使用的是 SageMaker 的機器學習能力
* 支援分類(Classification)、回歸(Regression)等預測任務
* 自動處理與 S3 之間的模型儲存與訓練資料傳輸
#### 📗 -實際範例說明
這個模型會使用客戶的年齡、收入、訂閱時長與活躍狀態,透過 XGBoost 演算法預測該客戶是否會流失(is_churn)。
```sql=
CREATE MODEL predict_churn_model
FROM (
SELECT age, income, subscription_length, is_active
FROM customers
)
TARGET is_churn
FUNCTION predict_churn
IAM_ROLE 'arn:aws:iam::123456789012:role/myRedshiftMLRole'
SETTINGS (
S3_BUCKET 'my-redshift-ml-models',
MAX_RUNTIME 600,
MODEL_TYPE 'XGBOOST',
OBJECTIVE 'binary:logistic'
);
```
### :abacus: Redshift Management
Amazon Redshift 除了是高效能的資料倉儲服務外,也提供多種方便的管理功能,協助用戶在彈性、可用性與成本控管上達到最佳化。以下介紹幾個實用的管理功能與操作機制。
* **🧠Elastic Resize** : 是 Redshift 提供的一種快速擴縮機制,能在幾分鐘內調整叢集的節點數量,過程中包含以下步驟:
* 1. 建立快照、2. 遷移中繼資料、3. 恢復工作階段、4. 重新分配資料、5. 發送通知
* **🧠Pause & Resume**:Redshift 允許用戶暫停整個叢集運作,在不使用的期間(例如夜間或週末)節省資源費用。當你需要再次使用時,只需執行 Res
* **🧠Snapshot 與跨帳號分享**:Redshift 支援建立資料庫快照(Snapshot),讓你可以備份叢集狀態、還原資料或進行資料遷移。例如:資料團隊與分析團隊屬於不同帳號,但可以共享資料版本
* **🧠Redshift Advisor** : 一種內建的分析建議引擎,它會自動分析叢集的使用狀況,並提供建議像是有沒有不常使用的 Materialized View 或 index 可移除
### :abacus: 資料共享功能(Data Share Function)
#### :bookmark_tabs:- 簡述
在企業內部,不同部門(如行銷、銷售、產品分析)往往需要查詢同一批資料來做出即時決策。Amazon Redshift 提供的 資料共享(Data Share)功能,讓這些部門可以在不複製資料的情況下,共享一致的資料來源,大幅提升效率與資料一致性。這項功能的最大優勢在於:零 ETL、即時存取、跨帳號分享,讓分析結果可以更快速地支援業務成長。
#### 🧠 - 關鍵特點
三種主要資料共享方式:
1. Standard Data Sharing(Redshift 原生):適用於 相同 AWS 帳號或跨帳號 的 Redshift 叢集間
2. AWS Data Exchange(資料集市):適用於資料供應商與外部客戶間的資料交易與訂閱
3. AWS Lake Formation 管理分享(跨資料湖):適用於在 S3 為主的 Data Lake 架構中,使用統一的授權控管機制分享資料
## 📒 其他小筆記
* Redshift 的Database引擎是基於Postgre SQL
* 擴展性和高效能處理的關聯性資料庫
* 兼容性與易於遷移
* 如果要從客戶端應用程式(i.e.Python 程式)連接 Redshift,你就必須使用一個能夠理解 Redshift 查詢語言的「驅動程式」。驅動程式有兩種:
* JDBC(Java Database Connectivity):用於 Java 應用程式的資料庫驅動程式。
* ODBC(Open Database Connectivity):一種通用的資料庫連線協定,用於各種平台(如 Excel、Power BI、Python 等)。
* 通常與Amazon Quicksight聯合,達成即時的資料分析跟BI顯示
* Amazon Quicksight 通常用 IAM 或 AD 做權限控制
* 可以跟 "DBeaver" 串接 (是一款多資料庫管理工具,可以讓你透過圖形化介面(GUI)輕鬆地連接、查詢、管理和分析各種資料庫系統)
* Schema 幫你把資料「分門別類」,Table 則是你查詢、分析、操作資料的「具體位置」。
* GLUE + REDSHIFT整合時需先設定 VPC Endpoint、IAM Role 及 Security Group,並在 Glue 中建立相應的 Connection。
* 使用 Redshift時在 Query Editor 裡,每個資料夾代表一個 schema,且每個 schema 預設包含 tables、views、functions 與 stored procedures 四個子資料夾。
## REFERENCE
* https://aws.amazon.com/tw/redshift/
* https://medium.com/@sounder.rahul/aws-redshift-data-warehouse-system-architecture-3e88a3c421e3
* https://medium.com/@surojitchowdhury/exploring-aws-redshift-serverless-a-closer-look-59e531790722
* https://www.youtube.com/watch?v=teTYhX07Nbc
* https://medium.com/towards-tech-intelligence/aws-redshift-overview-25e7b9aea9b8