大量的資料勢必可能來自不同資料源,在結構化資料庫的世界常用的就是聯合查詢。那如果我的資料不全都在結構化資料庫呢?介紹到現在許多人一定會想到強大的儲存系統S3,如果原本有許多資料都先存到了S3,現在想要將目前提到的Redshift與S3這兩個厲害的儲存系統結合,不就能集成他們的優點產生更大的綜效嗎?
沒錯,AWS也顧慮到這個需求,所以在Redshift服務中內建了Redshift Spectrum。
聯合查詢是擷取不同的「結構化」資料來源;Redshift Spectrum讓使用者直接擷取和查詢外部資料源的結構與半結構化資料。在不用移動資料進資料倉儲的情況下,可以直接在 Redshift Spectrum 中使用與Redshift一樣的查詢語法和存取表格的查詢功能,概念上大概像是建立一個外部資料表。但也有一些使用上需要特別注意的地方*,例如需使用Athena或Glue做為中繼資料存放區的資料目錄、Amazon Redshift cluster和 Amazon S3 bucket必須在相同的AWS區域等。
使用時Redshift Spectrum第一要確認當前登入帳號擁有對應IAM權限;
且外部資料表EXTERNAL TABLE必須建立在使用 CREATE EXTERNAL SCHEMA statement所建立的外部資料庫中。可以在編輯器或用戶端下指令建立。
建立外部資料庫SQL語法:
create external schema 外部資料庫名稱 from data catalog
database '現在要建立的資料庫名稱'
iam_role '對應IAM role 的 arn number'
create external database if not exists;
建立外部資料表SQL語法:
create external table 資料庫DB.現在要建立的資料表(
欄位名稱 資料結構[,欄位名稱 資料結構,,])
row format delimited
fields terminated by '\t'
stored as textfile
location 's3://對應位址 /'
table properties (預設定的資料表屬性);
建立完成之後就可以下select語法查詢。
*Redshift Spectrum使用考量( https://docs.aws.amazon.com/zh_tw/redshift/latest/dg/c-using-spectrum.html )