# AWS - Redshift Spectrum
# Redshift Spectrum
Amazon Redshift Spectrum 是 Redshift 資料倉儲的一個功能,可以讓你直接對 S3 的 Datalake 進行 SQL 分析,不需要先將資料載入到 Redshift Cluster 中,Spectrum 將 Redshift 的分析能利擴展到位於 S3 的大量非 / 半 / 全結構化資料
# 運作方式
Spectrum 的運作方式是將您的查詢任務分派給成千上萬個由 AWS 管理的節點,實現大規模的並行處理。
- 當您對外部表發出查詢時,Redshift Cluster Leader Node 會將處理工作分解給多個 Redshift Spectrum Server
- 這些 Server 在 S3 中掃描和過濾資料,並將聚合的結果傳回給 Redshift Cluster,進行最終處理
- 您需要在外部資料目錄 (Ex: Glue Data Catalog, Apache Hive Metastore) 中定義外部表,以描述 S3 的檔案結構。
# 優勢
- 無需移動資料:您可以直接在 S3 中查詢資料,無需複雜的 ETL(擷取、轉換、載入)流程,節省時間和成本。
- 計算與儲存分離:計算資源可以獨立於儲存資源進行擴展,讓您能以彈性的方式擴展計算能力以應對龐大的資料分析需求。
- 高度可擴展:Redshift Spectrum 可以查詢高達 Exabyte(10^18 位元組)級別的資料量。
- 按查詢付費:您只需根據查詢所掃描的資料量付費,對於不常存取的資料集而言,這是一種高成本效益的解決方案。
- 高效能:藉助並行處理,Redshift Spectrum 能夠對 S3 上的資料進行快速且複雜的分析。
- 支援多種資料格式:它支援多種常見的檔案格式,例如 Parquet、ORC、JSON、Avro、CSV 和 TEXTFILE。
# 適用情境
- 資料湖分析:在 Amazon S3 中建立資料湖,並使用 Redshift Spectrum 直接查詢原始資料,進行探索性分析或報表製作。
- 複合查詢:將 Redshift 叢集中的結構化資料與 S3 資料湖中的非結構化資料合併,執行複雜的聯結(Join)查詢。
- 歷史資料分析:將不常使用的歷史資料儲存在 S3 中,以降低成本,並在需要時透過 Redshift Spectrum 進行查詢。
- 多叢集存取:多個 Redshift 叢集可以同時存取同一個 S3 資料集,但所有資料都必須位於同一個 AWS 區域
# 最佳實踐
- 使用 Columnar 檔案格式:為了最佳化效能,建議使用 Parquet 或 ORC 等欄式儲存格式,因為 Spectrum 只會讀取查詢中需要的欄位。
- 資料分割:針對常用於過濾的欄位(例如日期),對資料進行分割,可以減少掃描的資料量,大幅提升查詢速度。
- 壓縮檔案:壓縮 S3 上的資料檔案可以減少儲存空間和 I/O 負載,進而降低成本和提升效能。
- 避免使用 SELECT *:在查詢中只選擇需要的欄位,以降低掃描的資料量。
# Spectrum 搭配 LakeFormation 定義資料 Row-level/Cell-level 安全性原則
在 Amazon Redshift Spectrum 中使用 AWS Lake Formation 所定義的資料列級和儲存格級安全性原則,可以對您的 Amazon S3 資料湖實施細緻的存取控制
# 運作原理
- 集中管理:您在 AWS Lake Formation 中集中定義資料安全原則,這些原則可以套用到整個資料湖中的資料表、資料行和資料列。
- 資料篩選:您可以在 Lake Formation 中為使用者或角色建立資料篩選器 (data filters)。這些篩選器包含 SQL WHERE 運算式,可指定使用者在特定資料表上可以存取的資料列子集。
- 動態隱藏:對於儲存格級安全性,Lake Formation 允許您動態地遮罩或隱藏敏感資料欄位,根據使用者身分決定是否顯示該資料。
- 整合查詢:當 Redshift 使用者查詢外部資料表時,Redshift Spectrum 會將查詢傳送給 Lake Formation。
- 強制執行原則:Lake Formation 會根據查詢使用者的身分,評估其擁有的資料篩選器和資料行權限,並即時套用這些限制。
- 傳回篩選結果:Redshift Spectrum 只會收到使用者有權存取的資料子集,並據此將查詢結果傳回給使用者。
如何
# 實作流程
整合流程需要設定 AWS Identity and Access Management (IAM)、Lake Formation 和 Redshift,步驟如下
- 建立 IAM 角色:為每個需要存取資料湖的使用者或應用程式建立一個 IAM 角色。
- 註冊 S3 位置:在 Lake Formation 中註冊您的 S3 資料湖位置,讓 Lake Formation 能夠管理這些資料。
- 建立 Glue 資料表:使用 AWS Glue 爬蟲程式建立或手動建立資料表,將 S3 資料湖中的資料編目到 AWS Glue Data Catalog。這些資料表將成為 Lake Formation 管理的資源。
- 建立資料篩選器:在 Lake Formation 主控台中,為資料表建立資料篩選器。
- 資料列級安全性:使用 WHERE 運算式,例如 tenant_id = ‘TenantA’。
- 儲存格級安全性:選擇要排除的資料行,例如隱藏 ssn 或 credit_card_number 欄位。
- 授予 Lake Formation 權限:將資料篩選器與相應的 IAM 角色關聯。
- 在 Lake Formation 中,選擇您建立的資料篩選器,並將其 SELECT 權限授予給特定的 IAM 角色。
- 移除 IAMAllowedPrincipals 的權限,或者啟用混合存取模式(Hybrid Access Mode)來增量部署 Lake Formation 的精細存取控制。
- 設定 Redshift 外部結構:在 Redshift 叢集中,建立一個外部結構,它會指向由 Lake Formation 管理的 AWS Glue Data Catalog 資料庫。
1 | CREATE EXTERNAL SCHEMA spectrum_lake_formation |
執行查詢:使用者使用與其 IAM 角色相關聯的 Redshift 使用者身分執行查詢。
當使用者執行 SELECT * FROM spectrum_lake_formation.your_table 時,Redshift Spectrum 會自動根據 Lake Formation 中定義的原則,限制使用者只能看到其有權存取的資料列和欄位。