CREATE EXTERNAL SCHEMA - Amazon Redshift

CREATE EXTERNAL SCHEMA

Erstellt ein neues externes Schema in der aktuellen Datenbank. Sie können dieses externe Schema verwenden, um sich mit Amazon-RDS-for-PostgreSQL- oder mit Amazon-Aurora-for-PostgreSQL-kompatible-Edition-Datenbanken zu verbinden. Sie können auch ein externes Schema erstellen, das auf eine Datenbank in einem externen Datenkatalog wie AWS Glue, Athena oder eine Datenbank in einem Apache Hive-Metastore verweist, wie etwa Amazon EMR.

Der Besitzer dieses Schemas gibt den Befehl CREATE EXTERNAL SCHEMA aus. Mit dem Befehl ALTER SCHEMA können Sie den Besitzer eines externen Schemas ändern. Mit dem Befehl GRANT gewähren Sie anderen Benutzern oder Benutzergruppen Zugriff auf das Schema.

Sie können die Befehle GRANT oder REVOKE nicht für Berechtigungen in einer externen Tabelle verwenden. Gewähren oder widerrufen Sie stattdessen die Berechtigungen für das externe Schema.

Anmerkung

Wenn Sie derzeit externe Redshift-Spectrum-Tabellen im Amazon-Athena-Datenkatalog haben, können Sie Ihren Athena-Datenkatalog zu einem -Datenkatalog migrieren AWS Glue Data Catalog. Zur Verwendung des AWS Glue-Datenkatalogs mit Redshift Spectrum müssen Sie möglicherweise Ihre AWS Identity and Access Management (IAM)-Richtlinien ändern. Weitere Informationen finden Sie unter Upgrade auf den AWS Glue-Datenkatalog im Athena-Benutzerhandbuch.

Um Details zu externen Schemata anzuzeigen, führen Sie eine Abfrage für die Systemansicht SVV_EXTERNAL_SCHEMAS aus.

Syntax

Die folgende Syntax beschreibt den Befehl CREATE EXTERNAL SCHEMA, der verwendet wird, um Daten mithilfe eines externen Datenkatalogs zu referenzieren. Weitere Informationen finden Sie unter Abfrage externer Daten mit Amazon Redshift Spectrum.

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM { [ DATA CATALOG ] | HIVE METASTORE | POSTGRES | MYSQL | KINESIS }
[ DATABASE 'database_name' ]
[ REGION 'aws-region' ]
[ URI 'hive_metastore_uri' [ PORT port_number ] ]
IAM_ROLE { default | 'arn:aws:iam::<AWS-Konto-id>:role/<role-name>' }
[ SECRET_ARN 'ssm-secret-arn' ]          
[ CATALOG_ROLE 'catalog-role-arn-string' ] 
[ CREATE EXTERNAL DATABASE IF NOT EXISTS ]

Die folgende Syntax beschreibt den Befehl CREATE EXTERNAL SCHEMA, der verwendet wird, um Daten mithilfe einer Verbundabfrage an RDS POSTGRES oder Aurora PostgreSQL zu referenzieren. Sie können auch ein externes Schema erstellen, das auf Streaming-Quellen wie Kinesis Data Streams verweist. Weitere Informationen finden Sie unter Abfragen von Daten mit Verbundabfragen in 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-Konto-id>:role/<role-name>' }
SECRET_ARN 'ssm-secret-arn'             

Die folgende Syntax beschreibt den Befehl CREATE EXTERNAL SCHEMA, der verwendet wird, um Daten mithilfe einer Verbundabfrage an RDS MySQL oder Aurora MySQL zu referenzieren. Weitere Informationen finden Sie unter Abfragen von Daten mit Verbundabfragen in 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-Konto-id>:role/<role-name>' }
SECRET_ARN 'ssm-secret-arn'             

Die folgende Syntax beschreibt den Befehl CREATE EXTERNAL SCHEMA, der verwendet wird, um Daten in einem Kinesis-Stream zu referenzieren. Weitere Informationen finden Sie unter Streaming-Erfassung (Vorschau).

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

Die folgende Syntax beschreibt den Befehl CREATE EXTERNAL SCHEMA, der verwendet wird, um Daten mithilfe einer datenbankübergreifenden Abfrage zu referenzieren.

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

Parameter

IF NOT EXISTS

Eine Klausel, die angibt, dass der Befehl keine Änderungen ausführen und die Meldung zurückgeben soll, dass das Schema vorhanden ist, statt mit einem Fehler beendet zu werden, wenn das angegebene Schema bereits vorhanden ist. Diese Klausel ist beim Scripting nützlich, damit das Skript nicht fehlschlägt, wenn CREATE EXTERNAL SCHEMA versucht, ein Schema zu erstellen, das bereits vorhanden ist.

local_schema_name

Der Name des neuen externen Schemas. Weitere Informationen zu gültigen Namen finden Sie unter Namen und Kennungen.

FROM [ DATA CATALOG ] | HIVE METASTORE

Ein Schlüsselwort, das angibt, wo sich die externe Datenbank befindet.

DATA CATALOG gibt an, dass die externe Datenbank im Athena-Datenkatalog oder dem definiert ist AWS Glue Data Catalog.

Wenn die externe Datenbank in einem externen Datenkatalog in einer anderen AWS-Region definiert ist, ist der Parameter REGION erforderlich. DATA CATALOG ist der Standardwert.

HIVE METASTORE gibt an, dass die externe Datenbank in einem Apache Hive-Metastore definiert ist. Wenn HIVE METASTORE angegeben ist, ist der URI erforderlich.

POSTGRES gibt an, dass die externe Datenbank in RDS PostgreSQL oder Aurora PostgreSQL definiert ist.

MYSQL zeigt an, dass die externe Datenbank in RDS MySQL oder Aurora MySQL definiert ist.

KINESIS gibt an, dass die Datenquelle ein Stream aus dem Kinesis Data Streams ist.

VON REDSHIFT

Ein Schlüsselwort, das angibt, dass sich die Datenbank in Amazon Redshift befindet.

DATABASE 'redshift_database_name' SCHEMA 'redshift_schema_name'

Der Name der Amazon-Redshift-Datenbank.

Der redshift_schema_name gibt das Schema in Amazon Redshift an. Standardmäßig lautet der redshift_schema_name auf public.

DATABASE 'federated_database_name'

Ein Schlüsselwort, das den Namen der externen Datenbank in einer unterstützten PostgreSQL- oder MySQL-Datenbank-Engine angibt.

[SCHEMA 'schema_name']

Der schema_name gibt das Schema in einer unterstützten PostgreSQL-Datenbank-Engine an. Der Standard-schema_name ist public.

Sie können kein SCHEMA angeben, wenn Sie eine Verbundabfrage an eine unterstützte MySQL-Datenbank-Engine einrichten.

REGION „aws-region

Wenn die externe Datenbank in einem Athena-Datenkatalog definiert ist oder in der AWS Glue Data Catalog, die AWS-Region, in der sich die Datenbank befindet. Dieser Parameter ist erforderlich, wenn die Datenbank in einem externen Datenkatalog definiert ist.

URI „hive_metastore_uri“ [ PORT port_number ]

Der Hostname-URI und die Portnummer einer unterstützten PostgreSQL- oder MySQL-Datenbank-Engine. Der Hostname ist der Haarknoten des Replikatsatzes. Der Endpunkt muss vom Amazon-Redshift-Cluster aus erreichbar (routingfähig) sein. Die Standard-port_number lautet 5432.

Wenn sich die Datenbank in einem Hive-Metastore befindet, geben Sie den URI und optional die Portnummer des Metastore an. Die Standard-Portnummer ist 9083.

Ein URI enthält keine Protokollspezifikation („http://“). Beispiel für einen gültigen URI: uri '172.10.10.10'.

Anmerkung

Die unterstützte PostgreSQL- oder MySQL-Datenbank-Engine muss sich in der gleichen VPC befinden wie Ihr Amazon-Redshift-Cluster. Erstellen Sie eine Sicherheitsgruppe, die Amazon Redshift und RDS PostgreSQL oder Aurora PostgreSQL verbindet.

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

Verwenden Sie das Standardstichwort, damit Amazon Redshift die IAM-Rolle verwendet, die als Standard festgelegt und mit dem Cluster verknüpft ist, wenn der CREATE EXTERNAL SCHEMA-Befehl ausgeführt wird.

Verwenden Sie den Amazon-Ressourcennamen (ARN) für eine IAM-Rolle, die von Ihrem Cluster für Authentifizierung und Autorisierung verwendet wird. Die IAM-Rolle muss mindestens die Berechtigung besitzen, eine LIST-Operation für den Amazon-S3-Bucket auszuführen, auf den zugegriffen werden soll, und eine GET-Operation für die Amazon-S3-Objekte, die der Bucket enthält. Wenn die externe Datenbank in einem Amazon-Athena-Datenkatalog oder AWS Glue Data Catalog definiert ist, muss die IAM-Rolle die Berechtigung für den Zugriff auf Athena besitzen, sofern nicht CATALOG_ROLE angegeben wird. Weitere Informationen finden Sie unter IAM-Richtlinien für Amazon Redshift Spectrum.

Nachfolgend ist die Syntax für die IAM_ROLE-Parameterzeichenfolge für einen einzelnen ARN aufgeführt.

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

Sie können Rollen miteinander verketten. Auf diese Weise kann der Cluster eine andere IAM-Rolle annehmen, die möglicherweise zu einem anderen Konto gehört. Es können bis zu 10 Rollen miteinander verkettet werden. Weitere Informationen finden Sie unter Verketten von IAM-Rollen in Amazon Redshift Spectrum.

Fügen Sie dieser IAM-Rolle eine IAM-Berechtigungsrichtlinie ähnlich der folgenden an:

{ "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": "*" } ] }

Informationen zu den Schritten für das Erstellen einer IAM-Rolle zur Verwendung mit der Verbundabfrage finden Sie unter Erstellen eines Secrets und einer IAM-Rolle für die Verwendung von Verbundabfragen.

Anmerkung

Fügen Sie keine Leerzeichen in die Liste der verketteten Rollen ein.

Nachfolgend finden Sie die Syntax für die Verkettung von drei Rollen.

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>'
SECRET_ARN 'ssm-secret-arn'

Der Amazon-Ressourcenname (ARN) eines unterstützten PostgreSQL- oder MySQL-Datenbank-Engine-Secrets, erstellt mit AWS Secrets Manager. Informationen zum Erstellen und Abrufen eines ARNs für ein Secret finden Sie unter Erstellen eines Basis-Secrets und unter Abrufen des Secret-Werts im AWS Secrets Manager-Benutzerhandbuch.

CATALOG_ROLE 'catalog-role-arn-string'

Der ARN für eine IAM-Rolle, die von Ihrem Cluster für Authentifizierung und Autorisierung für den Datenkatalog verwendet wird. Wenn CATALOG_ROLE nicht angegeben wird, verwendet Amazon Redshift die angegebene IAM_ROLE. Die Katalogrolle muss zum Zugriff auf den Datenkatalog in AWS Glue oder Athena berechtigt sein. Weitere Informationen finden Sie unter IAM-Richtlinien für Amazon Redshift Spectrum. Nachfolgend ist die Syntax für die CATALOG_ROLE-Parameterzeichenfolge für einen einzelnen ARN aufgeführt.

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

Sie können Rollen miteinander verketten. Auf diese Weise kann der Cluster eine andere IAM-Rolle annehmen, die möglicherweise zu einem anderen Konto gehört. Es können bis zu 10 Rollen miteinander verkettet werden. Weitere Informationen finden Sie unter Verketten von IAM-Rollen in Amazon Redshift Spectrum.

Anmerkung

Die Liste der verketteten Rollen darf keine Leerstellen enthalten.

Nachfolgend finden Sie die Syntax für die Verkettung von drei Rollen.

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

Eine Klausel, die eine externe Datenbank mit dem Namen erstellt, der im DATABASE-Argument angegeben ist, wenn die angegebene externe Datenbank nicht vorhanden ist. Wenn die angegebene externe Datenbank vorhanden ist, führt der Befehl keine Änderungen aus. In diesem Fall gibt der Befehl die Meldung zurück, dass die externe Datenbank vorhanden ist, statt mit einem Fehler beendet zu werden.

Anmerkung

CREATE EXTERNAL DATABASE IF NOT EXISTS kann nicht mit HIVE METASTORE verwendet werden.

Um CREATE EXTERNAL DATABASE IF NOT EXISTS mit einem für AWS Lake Formation aktivierten Datenkatalog zu verwenden, benötigen Sie die Berechtigung CREATE_DATABASE für den Datenkatalog.

Nutzungshinweise

Informationen über Beschränkungen bei der Verwendung des Athena-Datenkatalogs finden Sie unter Athena-Limits in der allgemeinen Referenz zu AWS.

Informationen über Beschränkungen bei der Verwendung von AWS Glue Data Catalog finden Sie unter AWS Glue-Limits in der allgemeinen Referenz zu AWS.

Diese Begrenzungen gelten nicht für einen Hive-Metastore.

Verwenden Sie den DROP SCHEMA-Befehl, um die Registrierung des Schemas aufzuheben.

Um sich die Details zu externen Schemata anzeigen zu lassen, fragen Sie die folgenden Systemansichten ab:

Beispiele

Im folgenden Beispiel wird ein externes Schema unter Verwendung einer Datenbank in einem Athena-Datenkatalog namens sampledb in der Region USA West (Oregon) erstellt.

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

Im folgenden Beispiel werden ein externes Schema und eine neue externe Datenbank namens erstellt 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;

Im folgenden Beispiel wird ein externes Schema mittels einer Hive-Metastore-Datenbank namens erstellt hive_db.

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';

Im folgenden Beispiel miteinander verketteter Rollen wird die Rolle myS3Role für den Zugriff auf Amazon S3 und myAthenaRole für den Datenkatalogzugriff verwendet. Weitere Informationen finden Sie unter Verketten von IAM-Rollen in Amazon Redshift Spectrum.

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;

Im folgenden Beispiel wird ein externes Schema erstellt, das auf eine Aurora-PostgreSQL-Datenbank verweist.

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'

Im folgenden Beispiel wird ein externes Schema erstellt, das auf die im Konsumenten-Cluster importierte sales_db verweist.

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

Im folgenden Beispiel wird ein externes Schema erstellt, das auf eine Aurora-MySQL-Datenbank verweist.

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'