CREATE EXTERNAL SCHEMA
Crea un nuevo esquema externo en la base de datos actual. Puede utilizar este esquema externo para conectarse a las bases de datos de Amazon RDS for PostgreSQL o la Edición compatible con PostgreSQL de Amazon Aurora. También puede crear un esquema externo que referencie una base de datos en un catálogo de datos externo, como AWS Glue, Athena o una base de datos en un metastore de Apache Hive, como Amazon EMR.
El propietario de este esquema es el emisor del comando CREATE EXTERNAL SCHEMA. Para transferir la propiedad de un esquema externo, use ALTER SCHEMA para cambiar el propietario. Para conceder acceso al esquema a otros usuarios o grupos utilice el comando GRANT.
No puede usar los comandos GRANT o REVOKE para los permisos en una tabla externa. En lugar de ello, conceda o revoque los permisos en el esquema externo.
nota
Si actualmente tiene tablas externas de Redshift Spectrum en el catálogo de datos de Amazon Athena, puede migrar el catálogo de datos de Athena a un AWS Glue Data Catalog. Para utilizar el catálogo de datos de AWS Glue con Redshift Spectrum, es posible que tenga que cambiar las políticas de AWS Identity and Access Management (IAM). Para obtener más información, consulte Actualización al catálogo de datos de AWS Glue en la Guía del usuario de Athena.
Para ver detalles de los esquemas externos, consulte la vista del sistema SVV_EXTERNAL_SCHEMAS.
Sintaxis
La sintaxis siguiente describe el comando CREATE EXTERNAL SCHEMA utilizado para hacer referencia a datos mediante un catálogo de datos externo. Para obtener más información, consulte 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::<Cuenta de 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>
:<Cuenta de 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 siguiente sintaxis describe el comando CREATE EXTERNAL SCHEMA que se utiliza para referenciar datos mediante una consulta federada a RDS POSTGRES o Aurora PostgreSQL. También se puede crear un esquema externo que haga referencia a orígenes de streaming, como Kinesis Data Streams. Para obtener más información, consulte Consulta de datos con consultas federadas en 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::<Cuenta de AWS-id>
:role/<role-name>
' ] SECRET_ARN 'ssm-secret-arn'
La siguiente sintaxis describe el comando CREATE EXTERNAL SCHEMA que se utiliza para referenciar datos mediante una consulta federada a RDS MySQL o Aurora MySQL. Para obtener más información, consulte Consulta de datos con consultas federadas en 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::<Cuenta de AWS-id>
:role/<role-name>
' ] SECRET_ARN 'ssm-secret-arn'
La siguiente sintaxis describe el comando CREATE EXTERNAL SCHEMA que se utiliza para hacer referencia a datos de un flujo de Kinesis. Para obtener más información, consulte Ingesta de streaming a una vista materializada.
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] schema_name FROM KINESIS IAM_ROLE [ default | 'arn:aws:iam::<Cuenta de AWS-id>
:role/<role-name>
' ]
La siguiente sintaxis describe el comando CREATE EXTERNAL SCHEMA utilizado para hacer referencia al clúster de Amazon Managed Streaming para Apache Kafka o Confluent Cloud y los temas desde los cuales se incorpora. Para conectarse, debe proporcionar el URI del agente. Para obtener más información, consulte Ingesta de streaming a una vista materializada.
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] schema_name FROM KAFKA [ IAM_ROLE [ default | 'arn:aws:iam::<Cuenta de AWS-id>
:role/<role-name>
' ] ] URI 'Kafka bootstrap URI' AUTHENTICATION [ none | iam | mtls ] [ AUTHENTICATION_ARN 'acm-certificate-arn' | SECRET_ARN 'ssm-secret- arn' ];
La siguiente sintaxis describe el comando CREATE EXTERNAL SCHEMA que se utiliza para referenciar datos mediante una consulta entre distintas bases de datos.
CREATE EXTERNAL SCHEMA local_schema_name FROM REDSHIFT DATABASE 'redshift_database_name' SCHEMA 'redshift_schema_name'
Parámetros
- IF NOT EXISTS
-
Una cláusula que indica que si el esquema especificado ya existe, el comando no debe realizar cambios y debe devolver un mensaje en el que se indique que el esquema existe, en lugar de terminar con un error. Esta cláusula es útil cuando se realiza scripting, para que el script no produzca un error si CREATE EXTERNAL SCHEMA intenta crear un esquema que ya existe.
- nombre_de_esquema_local
-
El nombre del nuevo esquema externo. Para obtener más información acerca de los nombres válidos, consulte Nombres e identificadores.
- FROM [ DATA CATALOG ] | HIVE METASTORE | POSTGRES | MYSQL | KINESIS | MSK | REDSHIFT
-
Una palabra clave que indica dónde está ubicada la base de datos externa.
DATA CATALOG indica que la base de datos externa se define en el catálogo de datos de Athena o en el AWS Glue Data Catalog.
Si la base de datos externa se define en un catálogo de datos externo en una región de AWS diferente, el parámetro REGION es obligatorio. DATA CATALOG es el valor predeterminado.
HIVE METASTORE indica que la base de datos externa está definida en un metaalmacén Apache Hive. Si se especifica HIVE METASTORE, se requiere el URI.
POSTGRES indica que la base de datos externa está definida en RDS PostgreSQL o Aurora PostgreSQL.
MYSQL indica que la base de datos externa está definida en RDS MySQL o Aurora MySQL.
KINESIS indica que el origen de datos es un flujo de Kinesis Data Streams.
MSK indica que el origen de datos es un clúster aprovisionado o sin servidor de Amazon MSK.
KAFKA indica que el origen de datos es un clúster de Kafka. Puede utilizar esta palabra clave para Amazon MSK y Confluent Cloud.
- FROM REDSHIFT
-
Se trata de una palabra clave que indica que la base de datos se encuentra en Amazon Redshift.
- DATABASE 'redshift_database_name' SCHEMA 'redshift_schema_name'
-
Se trata del nombre de la base de datos de Amazon Redshift.
El parámetro redshift_schema_name indica el esquema en Amazon Redshift. El parámetro redshift_schema_name predeterminado es
public
. - DATABASE 'federated_database_name'
-
Se trata de una palabra clave que indica el nombre de la base de datos externa en un motor de base de datos de PostgreSQL o MySQL compatible.
- [SCHEMA 'schema_name']
-
El parámetro schema_name indica el esquema en un motor de base de datos de PostgreSQL compatible. El valor predeterminado de schema_name es
public
.No se puede especificar un SCHEMA cuando se configura una consulta federada a un motor de base de datos de MySQL compatible.
- REGION 'aws-region'
-
Si la base de datos externa se define en un catálogo de datos de Athena o en el AWS Glue Data Catalog, esta es la región de AWS en la que se encuentra la base de datos. Este parámetro es obligatorio si la base de datos se define en un catálogo de datos externo.
- URI [ 'hive_metastore_uri' [ PORT port_number ] | 'hostname' [ PORT port_number ] | 'Kafka bootstrap URI' ]
-
Se trata del URI del nombre del alojamiento y el port_number de un motor de base de datos de PostgreSQL o MySQL compatible. El hostname es el nodo principal del conjunto de réplicas. El punto de conexión debe ser accesible (enrutable) desde el clúster de Amazon Redshift. El port_number predeterminado de PostgreSQL es 5432. El port_number predeterminado para MySQL es 3306.
nota
El motor de base de datos de PostgreSQL o MySQL compatible debe estar en la misma VPC que el clúster de Amazon Redshift con un grupo de seguridad que vincule Amazon Redshift y RDS url-rsPostgreSQL o Aurora PostgreSQL. Además, puede usar el enrutamiento de VPC mejorado para configurar un caso de uso entre VPC. Para obtener más información, consulte Puntos de conexión de VPC administrador por Redshift.
Especificación de un URI de metastore de hive
Si la base de datos está en un metaalmacén Hive, especifique el URI y, de manera opcional, el número de puerto para el metaalmacén. El número de puerto predeterminado es 9083.
Un URI no contiene una especificación de protocolo (“http://”). Un ejemplo de URI válido es
uri '172.10.10.10'
.Especificación de un URI de agente para la ingesta de streaming
La inclusión del URI de bootstrap-broker proporciona la capacidad de conectarse a un clúster de Amazon MSK o Confluent Cloud y recibir datos transmitidos. Para obtener más información y ver un ejemplo, consulte Introducción a la ingesta de streaming de Amazon Managed Streaming para Apache Kafka.
- IAM_ROLE [ default | 'SESSION' | 'arn:aws:iam::
<Cuenta de AWS-id>
:role/<role-name>
' ] -
Utilice la palabra clave predeterminada para que Amazon Redshift utilice el rol de IAM configurado como predeterminado y asociado al clúster cuando se ejecuta el comando CREATE EXTERNAL SCHEMA.
Use
'SESSION'
si se conecta al clúster de Amazon Redshift mediante una identidad federada y acceda a las tablas desde el esquema externo creado con este comando. Para obtener más información, consulte Uso de una identidad federada para administrar el acceso de Amazon Redshift a los recursos locales y a las tablas externas de Amazon Redshift Spectrum, lo que explica cómo configurar la identidad federada. Tenga en cuenta que esta configuración, con'SESSION'
en lugar del ARN, solo se puede usar si el esquema se crea utilizandoDATA CATALOG
.Utilice el nombre de recurso de Amazon (ARN), de un rol de IAM que el clúster utiliza para la autenticación y la autorización. Como mínimo, el rol de IAM debe tener permiso para realizar una operación LIST en el bucket de Amazon S3 al que se accederá y una operación GET en los objetos de Amazon S3 que el bucket contiene.
A continuación se muestra la sintaxis de la cadena del parámetro IAM_ROLE para un único ARN.
IAM_ROLE 'arn:aws:iam::
<aws-account-id>
:role/<role-name>
'Puede encadenar roles para que el clúster pueda asumir otro rol de IAM, que posiblemente pertenezca a otra cuenta. Puede encadenar hasta 10 roles. Para ver un ejemplo de encadenamiento de roles, consulte Encadenamiento de roles de IAM en Amazon Redshift Spectrum.
Para este rol de IAM; asocie una política de permisos de IAM similar a la siguiente.
{ "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": "*" } ] }Para obtener información sobre los pasos para crear un rol de IAM que se utilizará con la consulta federada, consulte Creación de un secreto y rol de IAM para utilizar consultas federadas.
nota
No incluya espacios en la lista de roles encadenados.
A continuación se muestra la sintaxis para encadenar tres roles.
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'
-
Se trata del nombre de recurso de Amazon (ARN) de un secreto de motor de base de datos de PostgreSQL o MySQL compatible creado mediante AWS Secrets Manager. Para obtener información sobre cómo crear y recuperar un ARN para un secreto, consulte Creación de un secreto básico y Recuperación del secreto del valor secreto en la Guía del usuario de AWS Secrets Manager.
- CATALOG_ROLE [ 'SESSION' | catalog-role-arn-string]
-
Use
'SESSION'
para conectarse al clúster de Amazon Redshift mediante una identidad federada para la autenticación y la autorización del catálogo de datos. Para obtener más información acerca de completar los pasos para la identidad federada, consulte Uso de una identidad federada para administrar el acceso de Amazon Redshift a los recursos locales y a las tablas externas de Amazon Redshift Spectrum. Tenga en cuenta que el rol'SESSION'
solo se puede usar si el esquema se crea en el CATÁLOGO DE DATOS.Utilice el nombre de recurso de Amazon (ARN), para un rol de IAM que el clúster utiliza para la autenticación y la autorización del catálogo de datos.
Si no se especifica CATALOG_ROLE, Amazon Redshift utiliza el IAM_ROLE especificado. El rol del catálogo debe tener permiso para acceder al catálogo de datos en AWS Glue o Athena. Para obtener más información, consulte Políticas de IAM para Amazon Redshift Spectrum.
A continuación se muestra la sintaxis de la cadena del parámetro CATALOG_ROLE para un único ARN.
CATALOG_ROLE 'arn:aws:iam::
<aws-account-id>
:role/<catalog-role>
'Puede encadenar roles para que el clúster pueda asumir otro rol de IAM, que posiblemente pertenezca a otra cuenta. Puede encadenar hasta 10 roles. Para obtener más información, consulte Encadenamiento de roles de IAM en Amazon Redshift Spectrum.
nota
La lista de roles encadenados no debe incluir espacios.
A continuación se muestra la sintaxis para encadenar tres roles.
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
-
Una cláusula que crea una base de datos externa con el nombre especificado por el argumento DATABASE, si la base de datos externa especificada no existe. Si la base de datos externa especificada existe, el comando no realiza cambios. En este caso, el comando devuelve un mensaje en el que se indica que la base de datos externa existe, en lugar de terminar con un error.
nota
No puede utilizar CREATE EXTERNAL DATABASE IF NOT EXISTS con HIVE METASTORE.
Para utilizar CREATE EXTERNAL DATABASE IF NOT EXISTS con un catálogo de datos habilitado para AWS Lake Formation, necesita tener el permiso
CREATE_DATABASE
en el catálogo de datos. - CATALOG_ID "ID de la cuenta de Amazon Web Services que contiene la base de datos de Glue o Lake Formation"
-
El ID de la cuenta donde se almacena la base de datos del catálogo de datos.
CATALOG_ID
solo se puede especificar si planea conectarse al clúster de Amazon Redshift o a Amazon Redshift sin servidor mediante una identidad federada para la autenticación y la autorización del catálogo de datos estableciendo una de las siguientes opciones:De
CATALOG_ROLE
a'SESSION'
IAM_ROLE
a'SESSION'
y'CATALOG_ROLE'
configurado en su valor predeterminado
Para obtener más información acerca de completar los pasos para la identidad federada, consulte Uso de una identidad federada para administrar el acceso de Amazon Redshift a los recursos locales y a las tablas externas de Amazon Redshift Spectrum.
- AUTENTICACIÓN
-
El tipo de autenticación que se ha definido para la ingesta de streaming. La ingesta de streaming con tipos de autenticación funciona con Amazon Managed Streaming para Apache Kafka. Los tipos de
AUTHENTICATION
son los siguientes:ninguno: especifica que no se requiere autenticación. Esto corresponde al acceso no autenticado en MSK o texto sin formato con TLS en Apache Kafka.
iam: especifica la autenticación de IAM. Al elegir esta opción, asegúrese de que el rol de IAM tenga permisos para la autenticación de IAM. Para obtener más información acerca de la definición del esquema externo, consulte Introducción a la ingesta de transmisiones desde orígenes de Apache Kafka.
mtls: especifica que la seguridad de la capa de transporte mutua proporciona una comunicación segura al facilitar la autenticación entre un cliente y un servidor. En este caso, el cliente es Redshift y el servidor es Amazon MSK. Para obtener más información acerca de cómo configurar la ingesta de streaming con mTLS, consulte Autenticación con mTLS para la ingesta de transmisiones de Redshift desde orígenes de Apache Kafka.
- AUTHENTICATION_ARN
-
El ARN del certificado AWS Certificate Manager utilizado por Amazon Redshift para la autenticación mtls con Amazon MSK. El ARN está disponible en la consola de ACM al elegir el certificado emitido.
- CLUSTER_ARN
-
Para la ingesta de streaming, CLUSTER_ARN es el identificador del clúster de Amazon Managed Streaming para Apache Kafka desde el que está transmitiendo. Al utilizar CLUSTER_ARN, se requiere una política de rol de IAM que incluya el permiso
kafka:GetBootstrapBrokers
. Esta opción se proporciona por compatibilidad con versiones anteriores. Actualmente, recomendamos utilizar la opción de URI de bootstrap-broker para conectarse a clústeres de Amazon Managed Streaming para Apache Kafka. Para obtener más información, consulte Ingesta de streaming.
Notas de uso
Para conocer los límites de uso del catálogo de datos de Athena, consulte Límites de Athena en la Referencia general de AWS.
Para conocer los límites cuando se utiliza el AWS Glue Data Catalog, consulte Límites de AWS Glue en la Referencia general de AWS.
Estos límites no se aplican a un metaalmacén Hive.
Hay un máximo de 9 900 esquemas por base de datos. Para obtener más información, consulte Cuotas y límites en la Guía de administración de Amazon Redshift.
Para anular el registro del esquema, utilice el comando DROP SCHEMA.
Para ver detalles de los esquemas externos, consulte las siguientes vistas del sistema:
Ejemplos
El siguiente ejemplo crea un esquema externo utilizando una base de datos en un catálogo de datos denominado sampledb
en la región Oeste de EE. UU. (Oregón). Utilice este ejemplo con un catálogo de datos de 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';
En el siguiente ejemplo, se crean un esquema externo y una nueva base de datos externa denominada 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;
En el siguiente ejemplo, se crea un esquema externo a través de una base de datos de metaalmacén Hive denominada 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';
En el siguiente ejemplo, se encadenan roles con el fin de utilizar el rol myS3Role
para acceder a Amazon S3 y se utiliza myAthenaRole
para acceder al catálogo de datos. Para obtener más información, consulte Encadenamiento de roles de IAM en 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;
En el siguiente ejemplo, se crea un esquema externo que referencia una base de datos de 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'
En el siguiente ejemplo, se crea un esquema externo para referenciar la base de datos sales_db importada en el clúster consumidor.
CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
En el siguiente ejemplo, se crea un esquema externo que referencia una base de datos de 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'