本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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_name 為
public
。 - DATABASE 'federated_database_name'
-
關鍵字,指出所支援 PostgreSQL 或 MySQL 資料庫引擎中的外部資料庫名稱。
- [SCHEMA 'schema_name']
-
schema_name 表示支援的 PostgreSQL 資料庫引擎中的結構描述。預設 schema_name 是
public
。當您對支援的 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
類型如下:none — 指定沒有驗證步驟。
iam — 指定 IAM 身份驗證。選擇此選項時,請確保 IAM 角色具有 IAM 身份驗證的許可。如需定義外部結構描述的相關資訊,請參閱 開始使用 Amazon Managed Streaming for Apache Kafka 中的串流擷取。
- 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'