CREATE EXTERNAL SCHEMA - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

CREATE EXTERNAL SCHEMA

在目前資料庫中建立新的外部結構描述。您可以使用此外部結構描述連線到 Amazon RDS for PostgreSQL 或 Amazon Aurora PostgreSQL 相容版本資料庫。您也可以建立參考外部資料目錄 (例如 Athena) 中資料庫的外部結構描述,或是 Apache Hive 中繼存放區 (例如 Amazon EMR) 中的資料庫。 AWS Glue

此結構描述的擁有者是 CREATE EXTERNAL SCHEMA 命令的發行者。若要轉移外部結構描述的所有權,請使用 ALTER SCHEMA 來變更擁有者。若要將結構描述的存取權授予其他使用者或使用者群組,請使用 GRANT 命令。

您無法使用 GRANT 或 REVOKE 命令處理外部資料表的許可。這時請改為在外部結構描述授予和撤銷許可。

注意

如果您目前在 Amazon Athena 資料目錄中有 Redshift Spectrum 外部資料表,則可以將 Athena 資料目錄遷移到 AWS Glue Data Catalog。若要將資 AWS Glue 料目錄與 Redshift 頻譜搭配使用,您可能需要變更 AWS Identity and Access Management (IAM) 政策。如需詳細資訊,請參閱 Athena 使用指南中的升級至資 AWS Glue 料目錄

若要檢視外部結構描述的詳細資訊,請查詢 SVV_EXTERNAL_SCHEMAS 系統畫面。

語法

以下語法描述用來使用外部資料目錄以參考資料的 CREATE EXTERNAL SCHEMA 命令。如需詳細資訊,請參閱 使用 Amazon Redshift Spectrum 查詢外部資料

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM { [ DATA CATALOG ] | HIVE METASTORE | POSTGRES | MYSQL | KINESIS | MSK | REDSHIFT }
[ DATABASE 'database_name' ]
[ SCHEMA 'schema_name' ]
[ REGION 'aws-region' ]
[ URI 'hive_metastore_uri' [ PORT port_number ] ]
IAM_ROLE { default | 'SESSION' | 'arn:aws:iam::<AWS 帳戶-id>:role/<role-name>' }
[ SECRET_ARN 'ssm-secret-arn' ]
[ AUTHENTICATION { none | iam } ]
[ CLUSTER_ARN 'arn:aws:kafka:<region>:<AWS 帳戶-id>:cluster/msk/<cluster uuid>' ]
[ CATALOG_ROLE { 'SESSION' | 'catalog-role-arn-string' } ]
[ CREATE EXTERNAL DATABASE IF NOT EXISTS ]
[ CATALOG_ID 'Amazon Web Services account ID containing Glue or Lake Formation database' ]

以下語法描述用來對 RDS POSTGRES 或 Aurora PostgreSQL 使用聯合查詢以參考資料的 CREATE EXTERNAL SCHEMA 命令。您也可以建立參照串流來源的外部結構描述,例如 Kinesis Data Streams。如需詳細資訊,請參閱 使用 Amazon Redshift 中的聯合查詢來查詢資料

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM POSTGRES
DATABASE 'federated_database_name' [SCHEMA 'schema_name']
URI 'hostname' [ PORT port_number ]
IAM_ROLE { default | 'arn:aws:iam::<AWS 帳戶-id>:role/<role-name>' }
SECRET_ARN 'ssm-secret-arn'

以下語法描述用來對 RDS MySQL 或 Aurora MySQL 使用聯合查詢以參考資料的 CREATE EXTERNAL SCHEMA 命令。如需詳細資訊,請參閱 使用 Amazon Redshift 中的聯合查詢來查詢資料

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM MYSQL
DATABASE 'federated_database_name'
URI 'hostname' [ PORT port_number ]
IAM_ROLE { default | 'arn:aws:iam::<AWS 帳戶-id>:role/<role-name>' }
SECRET_ARN 'ssm-secret-arn'

以下語法描述用來在 Kinesis 串流中參考資料的 CREATE EXTERNAL SCHEMA 命令。如需詳細資訊,請參閱 串流擷取

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] schema_name
FROM KINESIS
IAM_ROLE { default | 'arn:aws:iam::<AWS 帳戶-id>:role/<role-name>' }

下列語法描述用於參考 Amazon Managed Streaming for Apache Kafka 叢集及其主題以便從中擷取的 CREATE EXTERNAL SCHEMA 命令。CLUSTER_ARN 會指定您要從中讀取資料的 Amazon MSK 叢集。如需詳細資訊,請參閱 串流擷取

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] schema_name
FROM MSK
IAM_ROLE { default | 'arn:aws:iam::<AWS 帳戶-id>:role/<role-name>' }
AUTHENTICATION { none | iam }
CLUSTER_ARN 'msk-cluster-arn';

以下語法描述用來使用跨資料庫查詢以參考資料的 CREATE EXTERNAL SCHEMA 命令。

CREATE EXTERNAL SCHEMA local_schema_name
FROM  REDSHIFT
DATABASE 'redshift_database_name' SCHEMA 'redshift_schema_name'

參數

IF NOT EXISTS

此子句會指出,若指定的結構描述已存在,則命令不應進行任何變更,且應傳回結構描述存在的訊息,而不是在發生錯誤的情況下終止。此子句在編寫指令碼時很實用,如此指令碼就不會因為 CREATE EXTERNAL SCHEMA 嘗試建立已存在的結構描述而失敗。

local_schema_name

新外部結構描述的名稱。如需有效名稱的相關資訊,請參閱 名稱與識別碼

FROM [ DATA CATALOG ] | HIVE METASTORE | POSTGRES | MYSQL | KINESIS | MSK | REDSHIFT

指出外部資料庫所在位置的關鍵字。

DATA CATALOG 會指出,外部資料庫是定義在 Athena 資料目錄中或 AWS Glue Data Catalog。

如果外部資料庫是在不同 AWS 區域的外部資料目錄中定義,則需要 REGION 參數。DATA CATALOG 是預設值。

HIVE METASTORE 指出,外部資料庫是在 Apache Hive 中繼存放區中定義。若指定了 HIVE METASTORE,則需要 URI。

POSTGRES 表示外部資料庫是在 RDS PostgreSQL 或 Aurora PostgreSQL 中定義的。

MYSQL 表示外部資料庫是在 RDS MySQL 或 Aurora MySQL 中定義的。

KINESIS 表示資料來源來自 Kinesis Data Streams。

MSK 表示資料來源是來自 Amazon MSK 的主題。

FROM REDSHIFT

指出資料庫位於 Amazon Redshift 中的關鍵字。

DATABASE 'redshift_database_name' SCHEMA 'redshift_schema_name'

Amazon Redshift 資料庫的名稱。

redshift_schema_name 表示 Amazon Redshift 中的結構描述。預設的 redshift_schema_namepublic

DATABASE 'federated_database_name'

關鍵字,指出所支援 PostgreSQL 或 MySQL 資料庫引擎中的外部資料庫名稱。

[SCHEMA 'schema_name']

schema_name 表示支援的 PostgreSQL 資料庫引擎中的結構描述。預設 schema_namepublic

當您對支援的 MySQL 資料庫引擎設定聯合查詢時,您無法指定 SCHEMA。

REGION 'aws-region'

如果外部資料庫是在 Athena 資料目錄或資料庫所在的 AWS 區域中定義的。 AWS Glue Data Catalog如果資料庫是在外部資料目錄中定義,則需要此參數。

URI 'hive_metastore_uri' [ PORT port_number ]

所支援 PostgreSQL 或 MySQL 資料庫引擎的主機名稱 URI 和 port_number。hostname 是複本集的前端節點。端點必須可從 Amazon Redshift 叢集連接 (可路由)。預設的 PostgreSQL port_number 為 5432。預設的 MySQL port_number 為 3306。

如果資料庫位於 Hive 中繼存放區中,請指定中繼存放區的 URI 並選擇性地指定連接埠號碼。預設連接埠號碼為 9083。

URI 不包含通訊協定規格 ("http://")。有效 URI 的範例:uri '172.10.10.10'

注意

支援的 PostgreSQL 或 MySQL 資料庫引擎必須位於與 Amazon Redshift 叢集相同的 VPC 中。建立連結 Amazon Redshift 和 RDS PostgreSQL 或 Aurora PostgreSQL 的安全群組。

IAM_ROLE { default | 'SESSION' | 'arn:aws:iam::<AWS 帳戶-id>:role/<role-name>' }

使用預設關鍵字,讓 Amazon Redshift 使用設定為預設並在執行 CREATE EXTERNAL SCHEMA 命令時與叢集關聯的 IAM 角色。

如果您使用聯合身分連線到 Amazon Redshift 叢集,並從使用此命令建立的外部結構描述存取資料表,請使用 'SESSION'。如需詳細資訊,請參閱使用聯合身分管理 Amazon Redshift 對本機資源和 Amazon Redshift Spectrum 外部資料表的存取,其中會說明如何設定聯合身分。請注意,只有在使用 DATA CATALOG 建立結構描述時,才能使用此組態 (使用 'SESSION' 取代 ARN)。

對叢集進行身分驗證和授權時所使用的 IAM 角色使用 Amazon Resource Name (ARN)。IAM 角色最少須具有在所要存取的 Amazon S3 儲存貯體上執行 LIST 操作,以及在儲存貯體包含的 Amazon S3 物件上執行 GET 操作的許可。

以下顯示單一 ARN 的 IAM_ROLE 參數字串語法。

IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'

您可以鏈結角色,以便您的叢集可以擔任其他 IAM 角色 (可能屬於其他帳戶)。您最多可以鏈結 10 個角色。如需鏈結角色的範例,請參閱 在 Amazon Redshift Spectrum 中鏈結 IAM 角色

對於此 IAM 角色,請附加與以下內容相似的 IAM 許可政策。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AccessSecret", "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-rds-secret-VNenFy" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword", "secretsmanager:ListSecrets" ], "Resource": "*" } ] }

如需建立 IAM 角色以搭配聯合查詢使用的步驟,請參閱建立秘密和 IAM 角色來使用聯合查詢

注意

不要在鏈結的角色清單中包含空格。

以下顯示鏈結三個角色的語法。

IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-1-name>,arn:aws:iam::<aws-account-id>:role/<role-2-name>,arn:aws:iam::<aws-account-id>:role/<role-3-name>'
秘密阿恩 '' ssm-secret-arn

使用建立的支援 PostgreSQL 或 MySQL 資料庫引擎密碼的 Amazon 資源名稱 (ARN) AWS Secrets Manager有關如何為秘密建立和擷取 ARN 的詳細資訊,請參閱《AWS Secrets Manager 使用指南》中的建立基本秘密擷取秘密值

目錄角色 {'工作階段' |} catalog-role-arn-string

使用聯合身分透過 'SESSION' 連接到 Amazon Redshift 叢集,以便對資料目錄進行身份驗證和授權。如需完成聯合身分步驟的相關資訊,請參閱使用聯合身分管理 Amazon Redshift 對本機資源和 Amazon Redshift Spectrum 外部資料表的存取。請注意,只有在 DATA CATALOG 中建立結構描述時,才能使用 'SESSION' 角色。

使用叢集進行資料目錄的身分驗證和授權時所使用 IAM 角色的 Amazon Resource Name (ARN)。

如未指定 CATALOG_ROLE,則 Amazon Redshift 會使用指定的 IAM_ROLE。目錄角色必須具有存取 AWS Glue 或 Athena 中資料目錄的權限。如需詳細資訊,請參閱 Amazon Redshift Spectrum 的 IAM 政策

以下顯示單一 ARN 的 CATALOG_ROLE 參數字串語法。

CATALOG_ROLE 'arn:aws:iam::<aws-account-id>:role/<catalog-role>'

您可以鏈結角色,以便您的叢集可以擔任其他 IAM 角色 (可能屬於其他帳戶)。您最多可以鏈結 10 個角色。如需詳細資訊,請參閱 在 Amazon Redshift Spectrum 中鏈結 IAM 角色

注意

鏈結的角色清單不得包含空格。

以下顯示鏈結三個角色的語法。

CATALOG_ROLE 'arn:aws:iam::<aws-account-id>:role/<catalog-role-1-name>,arn:aws:iam::<aws-account-id>:role/<catalog-role-2-name>,arn:aws:iam::<aws-account-id>:role/<catalog-role-3-name>'

CREATE EXTERNAL DATABASE IF NOT EXISTS

如果指定的外部資料庫不存在,此子句會使用 DATABASE 引數所指定的名稱建立外部資料庫。如果指定的外部資料庫存在,則此命令不會進行任何變更。在這種情況下,此命令會傳回外部資料庫存在的訊息,並不會因錯誤而終止。

注意

您不可搭配使用 CREATE EXTERNAL DATABASE IF NOT EXISTS 與 HIVE METASTORE。

若要搭配為 AWS Lake Formation啟用的 Data Catalog 使用 CREATE EXTERNAL DATABASE IF NOT EXISTS,則需要 Data Catalog 的 CREATE_DATABASE 許可。

CATALOG_ID '包含 Glue 或 Lake Formation 資料庫的 Amazon Web Services 帳戶 ID帳戶 ID'

儲存資料目錄資料庫的帳戶 ID。

只有在您打算連接到 Amazon Redshift 叢集或 Amazon Redshift Serverless,並透過設定下列任一項來使用聯合身分進行資料目錄的身份驗證和授權時,才能指定 CATALOG_ID

  • CATALOG_ROLE 設定為 'SESSION'

  • IAM_ROLE 設定為 'SESSION''CATALOG_ROLE' 設定為其預設值

如需完成聯合身分步驟的相關資訊,請參閱使用聯合身分管理 Amazon Redshift 對本機資源和 Amazon Redshift Spectrum 外部資料表的存取

AUTHENTICATION

為串流擷取定義的驗證類型。具有驗證類型的串流擷取會與 Amazon Managed Streaming for Apache Kafka 搭配運作。AUTHENTICATION 類型如下:

CLUSTER_ARN

若是串流擷取,這是您要從中進行串流處理的 Amazon Managed Streaming for Apache Kafka 叢集識別碼。如需詳細資訊,請參閱串流擷取

使用須知

如需使用 Athena 資料目錄時的限制,請參閱 AWS 一般參考中的 Athena 限制

如需使用時的限制 AWS Glue Data Catalog,請參閱中的「AWS Glue 限制」 AWS 一般參考。

這些限制不適用於 Hive 中繼存放區。

每個資料庫最多 9,900 個結構描述。如需詳細資訊,請參閱《Amazon Redshift 管理指南》中的配額和限制

如要取消註冊結構描述,請使用 DROP SCHEMA 命令。

如要檢視外部結構描述的詳細資訊,請查詢下列系統檢視:

範例

以下範例使用美國西部 (奧勒岡) 區域中資料目錄中名為 sampledb 的資料庫建立外部結構描述。將此範例與 Athena 或 AWS Glue 資料目錄搭配使用。

create external schema spectrum_schema from data catalog database 'sampledb' region 'us-west-2' iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole';

以下範例會建立外部結構描述,並建立名為 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;

以下範例使用名為 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';

以下範例會鏈結角色,以使用 myS3Role 角色存取 Amazon S3,並使用 myAthenaRole 存取資料目錄。如需詳細資訊,請參閱 在 Amazon Redshift Spectrum 中鏈結 IAM 角色

create external schema spectrum_schema from data catalog database 'spectrum_db' iam_role 'arn:aws:iam::123456789012:role/myRedshiftRole,arn:aws:iam::123456789012:role/myS3Role' catalog_role 'arn:aws:iam::123456789012:role/myAthenaRole' create external database if not exists;

以下範例會建立外部結構描述,參考 Aurora PostgreSQL 資料庫。

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] myRedshiftSchema FROM POSTGRES DATABASE 'my_aurora_db' SCHEMA 'my_aurora_schema' URI 'endpoint to aurora hostname' PORT 5432 IAM_ROLE 'arn:aws:iam::123456789012:role/MyAuroraRole' SECRET_ARN 'arn:aws:secretsmanager:us-east-2:123456789012:secret:development/MyTestDatabase-AbCdEf'

下列範例會建立外部結構描述,以參照在取用者叢集上匯入的 sales_db。

CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';

以下範例會建立外部結構描述,參考 Aurora MySQL 資料庫。

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] myRedshiftSchema FROM MYSQL DATABASE 'my_aurora_db' URI 'endpoint to aurora hostname' IAM_ROLE 'arn:aws:iam::123456789012:role/MyAuroraRole' SECRET_ARN 'arn:aws:secretsmanager:us-east-2:123456789012:secret:development/MyTestDatabase-AbCdEf'