CREATE EXTERNAL SCHEMA - Amazon Redshift

Amazon Redshift non supporterà più la creazione di nuove UDF Python a partire dal 1º novembre 2025. Se desideri utilizzare le UDF Python, creale prima di tale data. Le UDF Python esistenti continueranno a funzionare normalmente. Per ulteriori informazioni, consulta il post del blog.

CREATE EXTERNAL SCHEMA

Crea un nuovo schema esterno nel database corrente. È possibile utilizzare questo schema esterno per connettersi al database Amazon RDS for PostgreSQL o al database Amazon Aurora Edizione compatibile con PostgreSQL. È inoltre possibile creare uno schema esterno che fa riferimento a un database in un catalogo dati esterno AWS Glue, Athena o un database in un metastore Apache Hive, ad esempio Amazon EMR.

Il proprietario di questo schema è l'emittente del comando CREATE EXTERNAL SCHEMA. Per trasferire la proprietà di uno schema esterno, utilizza ALTER SCHEMA per cambiare il proprietario. Usa il comando GRANT per concedere l'accesso allo schema ad altri utenti o gruppi di utenti.

Non puoi utilizzare i comandi GRANT o REVOKE per le autorizzazioni su una tabella esterna. Puoi invece concedere o revocare le autorizzazioni per lo schema esterno.

Nota

Se attualmente si dispone di tabelle esterne Redshift Spectrum nel catalogo dati di Amazon Athena, è possibile migrare tale catalogo di Athena a un AWS Glue Data Catalog. Per utilizzare il catalogo dati AWS Glue con Redshift Spectrum, è possibile che sia necessario modificare le policy AWS Identity and Access Management (IAM). Per ulteriori informazioni, consultare Aggiornamento del catalogo dati AWS Glue nella Guida per l'utente di Athena.

Per visualizzare i dettagli degli schemi esterni, eseguire una query sulla vista di sistema SVV_EXTERNAL_SCHEMAS.

Sintassi

La sintassi seguente descrive il comando CREATE EXTERNAL SCHEMA utilizzato per fare riferimento ai dati utilizzando un catalogo dati esterno. Per ulteriori informazioni, consulta Amazon Redshift Spectrum.

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM [ [ DATA CATALOG ] | HIVE METASTORE | POSTGRES | MYSQL | KINESIS | MSK | REDSHIFT | KAFKA ]
[ DATABASE 'database_name' ]
[ SCHEMA 'schema_name' ]
[ REGION 'aws-region' ]
[ IAM_ROLE [ default | 'SESSION' | 'arn:aws:iam::<Account AWS-id>:role/<role-name>' ] ]
[ AUTHENTICATION [ none | iam | mtls] ]
[ AUTHENTICATION_ARN 'acm-certificate-arn' | SECRET_ARN 'ssm-secret- arn' ]
[ URI ['hive_metastore_uri' [ PORT port_number ] | 'hostname' [ PORT port_number ] | 'Kafka bootstrap URL'] ] 
[ CLUSTER_ARN 'arn:aws:kafka:<region>:<Account 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' ]

La sintassi seguente descrive il comando CREATE EXTERNAL SCHEMA utilizzato per fare riferimento ai dati utilizzando una query federata su RDS POSTGRES o Aurora PostgreSQL. È inoltre possibile creare uno schema esterno che faccia riferimento a fonti di streaming, come Kinesis Data Streams. Per ulteriori informazioni, consulta Esecuzione di query su dati con query federate 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::<Account AWS-id>:role/<role-name>' ]
SECRET_ARN 'ssm-secret-arn'

La sintassi seguente descrive il comando CREATE EXTERNAL SCHEMA utilizzato per fare riferimento ai dati utilizzando una query federata su RDS MySQL o Aurora MySQL. Per ulteriori informazioni, consulta Esecuzione di query su dati con query federate 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::<Account AWS-id>:role/<role-name>' ]
SECRET_ARN 'ssm-secret-arn'

La sintassi seguente descrive il comando CREATE EXTERNAL SCHEMA utilizzato per fare riferimento ai dati in un flusso Kinesis. Per ulteriori informazioni, consulta Importazione in streaming in una vista materializzata.

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

La sintassi seguente descrive il comando CREATE EXTERNAL SCHEMA utilizzato per fare riferimento al cluster Streaming gestito da Amazon per Apache Kafka o Confluent Cloud e i relativi argomenti da cui importare dati. Per connetterti, fornisci l’URI del broker. Per ulteriori informazioni, consulta Importazione in streaming in una vista materializzata.

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] schema_name
FROM KAFKA
[ IAM_ROLE [ default | 'arn:aws:iam::<Account AWS-id>:role/<role-name>' ] ]
URI 'Kafka bootstrap URI'
AUTHENTICATION [ none | iam | mtls ]
[ AUTHENTICATION_ARN 'acm-certificate-arn' | SECRET_ARN 'ssm-secret- arn' ];

La sintassi seguente descrive il comando CREATE EXTERNAL SCHEMA utilizzato per fare riferimento ai dati utilizzando una query tra database.

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

Parametri

IF NOT EXISTS

Clausola che indica che se lo schema specificato esiste già, il comando non deve apportare modifiche e deve restituire un messaggio che lo schema esiste, piuttosto che terminare con un errore. Questa clausola è utile durante lo scripting, quindi lo script non fallisce se CREATE EXTERNAL SCHEMA tenta di creare uno schema già esistente.

local_schema_name

Il nome del nuovo schema esterno. Per ulteriori informazioni sui nomi validi, consultare Nomi e identificatori.

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

Parola chiave che indica dove si trova il database esterno.

DATA CATALOG indica che il database esterno è definito nel catalogo dati di Athena o AWS Glue Data Catalog.

Se il database esterno è definito in un catalogo dati esterno in una regione AWS diversa, è necessario il parametro REGION. DATA CATALOG è il valore predefinito.

HIVE METASTORE indica che il database esterno è definito in un metastore Apache Hive. Se è specificato HIVE METASTORE, l'URI è obbligatorio.

POSTGRES indica che il database esterno è definito in RDS PostgreSQL o Aurora PostgreSQL.

MYSQL indica che il database esterno è definito in RDS MySQL o Aurora MySQL.

KINESIS indica che l'origine dati è un flusso di Kinesis Data Streams.

MSK indica che l’origine dati è un cluster con provisioning o serverless Amazon MSK.

KAFKA indica che l’origine dati è un cluster Kafka. Puoi utilizzare questa parola chiave sia per Amazon MSK che per Confluent Cloud.

FROM REDSHIFT

Una parola chiave che indica che il database si trova in Amazon Redshift.

DATABASE 'nome_database_redshift' SCHEMA 'nome_schema_redshift'

Il nome del database Amazon Redshift.

nome_schema redshift indica lo schema in Amazon Redshift. Il valore di timeout di default per nome_schema redshift è public.

DATABASE 'nome_database_federato'

Una parola chiave che indica il nome del database esterno in un motore del database PostgreSQL o MySQL supportato.

[SCHEMA 'nome_schema']

nome_schema indica lo schema in un motore del database PostgreSQL supportato. Lo schema_name predefinito è public.

Non è possibile specificare uno SCHEMA quando si imposta una query federata su un motore di database MySQL supportato.

REGION 'aws-region'

Se il database esterno è definito in un catalogo dati Athena o AWS Glue Data Catalog, la regione AWS in cui si trova il database. Questo parametro è obbligatorio se il database è definito in un catalogo dati esterno.

URI [ 'hive_metastore_uri' [ PORT port_number ] | 'hostname' [ PORT port_number ] | 'Kafka bootstrap URI' ]

L'URI del nome host e il numero di porta di un motore del database PostgreSQL o MySQL supportato. Il valore hostname è il nodo principale del set di repliche. L'endpoint deve essere raggiungibile (instradabile) dal cluster Amazon Redshift. Il port_number predefinito per PostgreSQL è 5432. Il port_number predefinito per MySQL è 3306.

Nota

Il motore di database PostgreSQL o MySQL supportato deve trovarsi nello stesso VPC del cluster Amazon Redshift con un gruppo di sicurezza che colleghi Amazon Redshift e RDS url-rsPostgreSQL o Aurora PostgreSQL. Inoltre puoi utilizzare il routing VPC avanzato per configurare un caso d’uso tra VPC. Per ulteriori informazioni, consulta Endpoint VPC gestiti da Redshift.

Specifica di un URI del metastore Hive

Se il database si trova in un metastore Hive, specifica l'URI e facoltativamente il numero di porta per il metastore. Il numero di porta predefinito è 9083.

Un URI non contiene una specifica di protocollo ("http://"). Un URI valido esempio è .: uri '172.10.10.10'.

Specifica di un URI del broker per l’importazione di dati in streaming

L’inclusione dell’URI bootstrap-broker consente di connettersi a un cluster Amazon MSK o Confluent Cloud e ricevere i dati in streaming. Per ulteriori informazioni e un esempio, consulta Nozioni di base sull’importazione dati in streaming da Streaming gestito da Amazon per Apache Kafka.

IAM_ROLE [ default | 'SESSION' | 'arn:aws:iam::<Account AWS-id>:role/<role-name>' ]

Utilizzare la parola chiave predefinita per fare in modo che Amazon Redshift utilizzi il ruolo IAM impostato come predefinito e associato al cluster quando viene eseguito il comando CREATE EXTERNAL SCHEMA.

Utilizzare 'SESSION' se ci si connette al cluster Amazon Redshift utilizzando un'identità federata e si accede alle tabelle dallo schema esterno creato con questo comando. Per ulteriori informazioni, consulta l'argomento relativo all'utilizzo di un'identità federata per gestire l'accesso di Amazon Redshift alle risorse locali e alle tabelle esterne di Amazon Redshift Spectrum, che illustra come configurare l'identità federata. Si noti che questa configurazione, che utilizza 'SESSION' al posto dell'ARN, può essere utilizzata solo se lo schema è stato creato utilizzando DATA CATALOG.

L'Amazon Resource Name (ARN) per un ruolo IAM utilizzato dal cluster per l'autenticazione e l'autorizzazione. Come minimo, il ruolo IAM deve disporre dell'autorizzazione per eseguire un'operazione LIST sul bucket Amazon S3 a cui accedere e un'operazione GET sugli oggetti Amazon S3 contenuti nel bucket.

Quanto segue mostra la sintassi per la stringa di parametro IAM_ROLE per un singolo ARN.

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

È possibile concatenare i ruoli in modo che il cluster possa presumere un altro ruolo IAM, possibilmente appartenente a un altro account. Puoi concatenare fino a 10 ruoli. Per un esempio di concatenamento di ruoli, vedi Concatenazione di ruoli IAM per Amazon Redshift Spectrum.

Per collegare a questo ruolo IAM una policy di autorizzazioni IAM simile alla seguente.

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

Per la procedura per creare un ruolo IAM da utilizzare con la query federata, consultare Creazione di un segreto e di un ruolo IAM per l'utilizzo di query federate.

Nota

Non includere spazi nell'elenco dei ruoli concatenati.

Quanto segue mostra la sintassi per concatenare tre ruoli.

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'

L'Amazon Resource Name (ARN) di un segreto del motore del database PostgreSQL o MySQL supportato creato utilizzando Gestione dei segreti AWS. Per informazioni su come creare e recuperare un ARN per un segreto, consulta Gestione dei segreti con Gestione dei segreti AWS nella Guida per l’utente di Gestione dei segreti AWS e Recupero del nome della risorsa Amazon (ARN) del segreto in Amazon Redshift.

CATALOG_ROLE [ 'SESSION' | catalog-role-arn-string]

Utilizzare 'SESSION' per la connessione al cluster Amazon Redshift utilizzando un'identità federata per l'autenticazione e l'autorizzazione al catalogo di dati. Per ulteriori informazioni sul completamento della procedura per l'identità federata, consulta l'argomento relativo all'utilizzo di un'identità federata per gestire l'accesso di Amazon Redshift alle risorse locali e alle tabelle esterne di Amazon Redshift Spectrum. Si noti che il ruolo 'SESSION' può essere utilizzato solo se lo schema viene creato in DATA CATALOG.

Il nome della risorsa Amazon (ARN) per un ruolo IAM utilizzato dal cluster per l'autenticazione e l'autorizzazione del catalogo dati.

Se CATALOG_ROLE non viene specificato, Amazon Redshift utilizza l'IAM_ROLE specificato. Il ruolo del catalogo deve avere l'autorizzazione ad accedere al catalogo dati in AWS Glue o Athena. Per ulteriori informazioni, consulta Policy IAM per Amazon Redshift Spectrum.

Quanto segue mostra la sintassi per la stringa di parametro CATALOG_ROLE per un singolo ARN.

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

È possibile concatenare i ruoli in modo che il cluster possa presumere un altro ruolo IAM, possibilmente appartenente a un altro account. Puoi concatenare fino a 10 ruoli. Per ulteriori informazioni, consulta Concatenazione di ruoli IAM per Amazon Redshift Spectrum.

Nota

L'elenco di ruoli concatenati non deve includere spazi.

Quanto segue mostra la sintassi per concatenare tre ruoli.

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

Clausola che crea un database esterno con il nome specificato dall'argomento DATABASE, se il database esterno specificato non esiste. Se il database esterno specificato esiste, il comando non apporta modifiche. In questo caso, il comando restituisce un messaggio che il database esterno esiste, anziché terminare con un errore.

Nota

CREATE EXTERNAL DATABASE IF NOT EXISTS non può essere usato con HIVE METASTORE.

Per utilizzare CREATE EXTERNAL DATABASE IF NOT EXISTS con il catalogo dati abilitato per AWS Lake Formation, è necessaria l'autorizzazione CREATE_DATABASE sul catalogo dati.

CATALOG_ID "ID account Amazon Web Services contenente il database Glue o Lake Formation"

L'ID dell'account in cui è archiviato il database del catalogo dati.

CATALOG_ID può essere specificato solo se si prevede di connettersi al cluster Amazon Redshift o ad Amazon Redshift Serverless utilizzando un'identità federata per l'autenticazione e l'autorizzazione al catalogo di dati configurando una delle seguenti impostazioni:

  • CATALOG_ROLE Da a 'SESSION'

  • IAM_ROLE su 'SESSION' e 'CATALOG_ROLE' impostati sul valore predefinito

Per ulteriori informazioni sul completamento della procedura per l'identità federata, consulta l'argomento relativo all'utilizzo di un'identità federata per gestire l'accesso di Amazon Redshift alle risorse locali e alle tabelle esterne di Amazon Redshift Spectrum.

AUTHENTICATION

Il tipo di autenticazione definito per l'importazione di dati in streaming. L'importazione di dati in streaming con i tipi di autenticazione funziona con Amazon Managed Streaming per Apache Kafka. I tipi di AUTHENTICATION sono i seguenti:

  • none: specifica che non è richiesta alcuna autenticazione. Ciò corrisponde all’accesso non autenticato in MSK o al testo semplice con TLS in Apache Kafka.

  • iam: specifica l'autenticazione IAM. Quando scegli questa opzione, assicurati che il ruolo IAM disponga delle autorizzazioni per l'autenticazione IAM. Per ulteriori informazioni sulla definizione dello schema esterno, consulta Nozioni di base sull’importazione in streaming da origini Apache Kafka.

  • mtls: specifica che il protocollo Transport Layer Security (TLS) reciproco fornisce comunicazioni sicure facilitando l’autenticazione tra client e server. In questo caso il client è Redshift e il server è Amazon MSK. Per ulteriori informazioni sulla configurazione dell’importazione in streaming con mTLS, consulta Autenticazione con mTLS per l’importazione in streaming Redshift da origini Apache Kafka.

AUTHENTICATION_ARN

L’ARN del certificato AWS Certificate Manager utilizzato da Amazon Redshift per l’autenticazione mtls con Amazon MSK. L’ARN è disponibile nella console ACM quando scegli il certificato emesso.

CLUSTER_ARN

Per l’importazione in streaming, CLUSTER_ARN è l’identificatore del cluster per il cluster Streaming gestito da Amazon per Apache Kafka da cui stai eseguendo lo streaming. Quando utilizzi CLUSTER_ARN, è necessaria una policy del ruolo IAM che includa l’autorizzazione kafka:GetBootstrapBrokers. Questa opzione viene fornita per la compatibilità con le versioni precedenti. Attualmente consigliamo di utilizzare l’opzione URI bootstrap-broker per connetterti ai cluster Streaming gestito da Amazon per Apache Kafka. Per ulteriori informazioni, consulta Importazione dati in streaming.

Note per l’utilizzo

Per i limiti per l'uso del catalogo di dati Athena, consulta Limiti di Athena in Riferimenti generali di AWS.

Per i limiti quando si usa AWS Glue Data Catalog, consulta Limiti di AWS Glue nella Riferimenti generali di AWS.

Questi limiti non si applicano a un metastore Hive.

È presente un massimo di 9900 schemi per database. Per ulteriori informazioni, consulta Quote e limiti nella Guida alla gestione di Amazon Redshift.

Per annullare la registrazione dello schema, utilizzare il comando DROP SCHEMA.

Per visualizzare i dettagli degli schemi esterni, eseguire una query sulle viste di sistema seguenti:

Esempi

L'esempio seguente crea uno schema esterno che utilizza un database in un catalogo dati denominato sampledb nella regione Stati Uniti occidentali (Oregon). Usa questo esempio con un catalogo dati Athena o AWS Glue.

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

L'esempio seguente crea uno schema esterno e un nuovo database esterno denominato 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;

L'esempio seguente crea uno schema esterno che utilizza un database metastore Hive denominato 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';

Nell'esempio seguente sono concatenati i ruoli per utilizzare il ruolo myS3Role per accedere ad Amazon S3 ed è utilizzato myAthenaRole per l'accesso al catalogo dati. Per ulteriori informazioni, consulta Concatenazione di ruoli IAM per 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;

Nell'esempio seguente viene creato uno schema esterno che fa riferimento a un database 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'

Nell'esempio seguente viene creato uno schema esterno per fare riferimento al database sales_db importato nel cluster di consumer.

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

Nell'esempio seguente viene creato uno schema esterno che fa riferimento a un database 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'