本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon Redshift Spectrum 中的外部結構描述
本主題說明如何透過 Redshift Spectrum 建立和使用外部結構描述。外部結構描述是您用來作為參考的資料表集合,用於存取 Amazon Redshift 叢集外部的資料。這些資料表包含 Redshift Spectrum 讀取之外部資料的中繼資料。
所有外部資料表必須建立在使用 CREATE EXTERNAL SCHEMA 陳述式建立的外部結構描述中。
注意
某些應用程式會交互使用 database (資料庫) 和 schema (結構描述) 詞彙。在 Amazon Redshift,我們使用術語「結構描述」。
Amazon Redshift 外部結構描述參考了外部資料目錄中的外部資料庫。您可以在 Amazon Redshift、Amazon Athena、 AWS Glue Data Catalog或 Amazon 等 Apache Hive 中繼存放區中建立外部資料庫EMR。若您在 Amazon Redshift 中建立了外部資料庫,該資料庫會位於 Athena 資料目錄中。若要在 Hive 中繼存放區中建立資料庫,您需要在 Hive 應用程式中建立資料庫。
Amazon Redshift 需要授權才能代表您存取 Athena 中的資料目錄以及 Amazon S3 中的資料檔案。若要提供該授權,請先建立 AWS Identity and Access Management (IAM) 角色。然後將角色連接至叢集,並在 Amazon Redshift CREATE EXTERNAL SCHEMA
陳述式中提供角色的 Amazon Resource Name (ARN)。如需授權的相關資訊,請參閱 IAM Amazon Redshift Spectrum 的政策。
注意
如果您目前在 Athena Data Catalog 中有 Redshift Spectrum 外部資料表,您可以將 Athena Data Catalog 遷移至 AWS Glue Data Catalog。若要搭配 Redshift Spectrum 使用 AWS Glue Data Catalog,您可能需要變更IAM政策。如需詳細資訊,請參閱 Amazon Athena 使用者指南 中的升級至 AWS Glue 資料目錄。
若要在建立外部結構描述的同時建立外部資料庫,請指定 FROM DATA CATALOG
並在您的 CREATE EXTERNAL DATABASE
陳述式中包含 CREATE EXTERNAL SCHEMA
子句。
以下範例使用外部資料庫 spectrum_schema
建立名為 spectrum_db
的外部結構描述。
create external schema spectrum_schema from data catalog database 'spectrum_db' iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole' create external database if not exists;
如果使用 Athena 管理資料目錄,請指定 Athena 資料庫名稱和 Athena 資料目錄所在的 AWS 區域。
以下範例使用 Athena 資料目錄中的預設 sampledb
資料庫建立外部結構描述。
create external schema athena_schema from data catalog database 'sampledb' iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole' region 'us-east-2';
注意
region
參數參考 Athena Data Catalog 所在的 AWS 區域,而不是 Amazon S3 中資料檔案的位置。
如果您使用 Hive 中繼存放區管理資料目錄,例如 Amazon EMR,則必須設定安全群組以允許叢集之間的流量。
在 CREATEEXTERNALSCHEMA陳述式中,指定FROM HIVE METASTORE
並包含中繼存放區URI和連接埠號碼。以下範例使用名為 hive_db
的 Hive 中繼存放區資料庫建立外部結構描述。
create external schema hive_schema from hive metastore database 'hive_db' uri '172.10.10.10' port 99 iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole'
若要檢視叢集的外部結構描述,請查詢 PG_EXTERNAL_SCHEMA 目錄表或 SVV_EXTERNAL_SCHEMAS 檢視。下列範例查詢 SVV_EXTERNAL_SCHEMAS,其會聯結 PG_EXTERNAL_SCHEMA 和 PG_NAMESPACE。
select * from svv_external_schemas
如需完整的命令語法與範例,請參閱 CREATE EXTERNAL SCHEMA。
在 Amazon Redshift Spectrum 中使用外部目錄
Amazon Redshift Spectrum 外部資料庫和外部資料表的中繼資料儲存於外部資料目錄中。Redshift Spectrum 中繼資料預設儲存於 Athena 資料目錄中。您可在 Athena 主控台中檢視並管理 Redshift Spectrum 資料庫和資料表。
您也可以使用 Athena 或 Hive 中繼存放區,例如 Amazon,使用 Hive 資料定義語言 (DDL) 建立和管理外部資料庫和外部資料表EMR。
注意
我們建議使用 Amazon Redshift 來建立並管理 Redshift Spectrum 中的外部資料庫和外部資料表。
檢視 Athena 中的 Redshift Spectrum 資料庫和 AWS Glue
您可以透過將 IF CREATE EXTERNAL DATABASE NOTEXISTS子句作為CREATEEXTERNALSCHEMA陳述式的一部分來建立外部資料庫。在這類案例中,外部資料庫的中繼資料會儲存在您的資料目錄內。您透過外部結構描述所建立的外部資料表中繼資料,也會儲存在資料目錄中。
Athena AWS Glue 和維護每個支援 的資料目錄 AWS 區域。若要檢視資料表中繼資料,請登入 Athena 或 AWS Glue 主控台。在 Athena 中,選擇資料來源 、您的 AWS Glue,然後檢視資料庫的詳細資訊。在 中 AWS Glue,選擇資料庫 、您的外部資料庫,然後檢視資料庫的詳細資訊。
如果您使用 Athena 建立和管理外部資料表,請使用 CREATE EXTERNAL 註冊資料庫SCHEMA。例如,下列命令可註冊名為 sampledb
的 Athena 資料庫。
create external schema athena_sample from data catalog database 'sampledb' iam_role 'arn:aws:iam::123456789012:role/mySpectrumRole' region 'us-east-1';
當您查詢 SVV_EXTERNAL_TABLES 系統檢視時,您會看到 Athena sampledb
資料庫中的資料表,以及您在 Amazon Redshift 中建立的資料表。
select * from svv_external_tables;
schemaname | tablename | location --------------+------------------+-------------------------------------------------------- athena_sample | elb_logs | s3://athena-examples/elb/plaintext athena_sample | lineitem_1t_csv | s3://myspectrum/tpch/1000/lineitem_csv athena_sample | lineitem_1t_part | s3://myspectrum/tpch/1000/lineitem_partition spectrum | sales | s3://redshift-downloads/tickit/spectrum/sales spectrum | sales_part | s3://redshift-downloads/tickit/spectrum/sales_part
註冊 Apache Hive 中繼存放區資料庫
如果您在 Apache Hive 中繼存放區中建立外部資料表,您可以使用 CREATE EXTERNAL SCHEMA 在 Redshift Spectrum 中註冊這些資料表。
在 CREATEEXTERNALSCHEMA陳述式中,指定FROMHIVEMETASTORE子句並提供 Hive 中繼存放區URI和連接埠號碼。此IAM角色必須包含存取 Amazon S3 的許可,但不需要任何 Athena 許可。以下為註冊 Hive 中繼存放區的範例。
create external schema if not exists hive_schema from hive metastore database 'hive_database' uri 'ip-10-0-111-111.us-west-2.compute.internal' port 9083 iam_role 'arn:aws:iam::123456789012:role/mySpectrumRole';
讓您的 Amazon Redshift 叢集存取您的 Amazon EMR叢集
如果您的 Hive 中繼存放區位於 Amazon 中EMR,您必須讓 Amazon Redshift 叢集存取您的 Amazon EMR叢集。若要這麼做,您可以建立 Amazon EC2安全群組。然後,您可以允許來自 Amazon Redshift 叢集EC2的安全群組和 Amazon EMR叢集的安全群組的所有傳入流量進入安全群組。然後將EC2安全性新增至 Amazon Redshift 叢集和 Amazon EMR叢集。
檢視您的 Amazon Redshift 叢集的安全群組名稱
如要顯示安全群組,請執行以下作業:
-
登入 AWS Management Console 並在 開啟 Amazon Redshift 主控台https://console.aws.amazon.com/redshiftv2/
。 -
在導覽選單上,選擇叢集,然後從清單選擇叢集以開啟其詳細資訊。
-
選擇屬性,然後檢視網路與安全設定區段。
-
在安全群組中尋找您的VPC安全群組,並將其記下。
檢視 Amazon EMR主節點安全群組名稱
開啟您的 Amazon EMR叢集。如需詳細資訊,請參閱 Amazon EMR管理指南 中的使用安全組態來設定叢集安全性。
在安全和存取 下,記下 Amazon EMR主節點安全群組名稱。
若要建立或修改 Amazon EC2安全群組,以允許 Amazon Redshift 與 Amazon 之間的連線 EMR
在 Amazon EC2儀表板中,選擇安全群組 。如需詳細資訊,請參閱 Amazon EC2使用者指南中的安全群組規則
選擇建立安全群組。
如果您使用的是 VPC,請選擇 VPC Amazon Redshift 和 Amazon EMR叢集所在的 。
新增傳入規則。
對於類型 ,選擇自訂 TCP。
對於 Source (資源),選擇 Custom (自訂)。
輸入您 Amazon Redshift 安全群組的名稱。
新增另一個傳入規則。
針對類型 ,選擇 TCP。
針對 Port Range (連接埠範圍),輸入 9083。
注意
的預設連接埠EMRHMS為 9083。如果您的 HMS使用不同的連接埠,請在傳入規則和外部結構描述定義中指定該連接埠。
對於 Source (資源),選擇 Custom (自訂)。
輸入安全群組的名稱和說明。
選擇建立安全群組。
若要將您在上一個程序中建立的 Amazon EC2安全群組新增至 Amazon Redshift 叢集
在 Amazon Redshift 中,選擇您的叢集。
選擇 Properties (屬性)。
檢視網路與安全設定,然後選擇編輯。
在VPC安全群組 中,選擇新的安全群組名稱。
選擇 Save changes (儲存變更)。
將 Amazon EC2安全群組新增至您的 Amazon EMR叢集
在 Amazon 中EMR,選擇叢集。如需詳細資訊,請參閱 Amazon EMR管理指南 中的使用安全組態來設定叢集安全。
在 Hardware (硬體) 下,選擇主節點的連結。
在EC2執行個體 ID 欄中選擇連結。
對於動作,選擇安全性、變更安全群組。
在關聯的安全群組中,選擇新的安全群組,然後選擇新增安全群組。
選擇 Save (儲存)。