Conector Azure Synapse de Amazon Athena - Amazon Athena

Conector Azure Synapse de Amazon Athena

El conector de Amazon Athena de Azure Synapse Analytics permite que Amazon Athena ejecute consultas SQL en las bases de datos de Azure Synapse mediante JDBC.

Requisitos previos

Limitaciones

  • Las operaciones de escritura de DDL no son compatibles.

  • En una configuración de multiplexor, el bucket de vertido y el prefijo se comparten en todas las instancias de base de datos.

  • Cualquier límite de Lambda relevante. Para obtener más información, consulte Cuotas de Lambda en la Guía para desarrolladores de AWS Lambda.

  • En condiciones de filtro, debe enviar los tipos de datos Date y Timestamp al tipo de dato correspondiente.

  • Para buscar valores negativos de tipo Real y Float, use el operador <= o >=.

  • Los tipos de datos binary, varbinary, image y rowversion no son compatibles.

Términos

Los siguientes términos hacen referencia al conector de Synapse.

  • Instancia de base de datos: cualquier instancia de base de datos implementada en las instalaciones, en Amazon EC2 o en Amazon RDS.

  • Controlador: un controlador de Lambda que accede a la instancia de base de datos. Un controlador puede ser para los metadatos o para los registros de datos.

  • Controlador de metadatos: un controlador de Lambda que recupera los metadatos de la instancia de base de datos.

  • Controlador de registros: un controlador de Lambda que recupera registros de datos de la instancia de base de datos.

  • Controlador compuesto: un controlador de Lambda que recupera tanto los metadatos como los registros de datos de la instancia de base de datos.

  • Propiedad o parámetro: una propiedad de base de datos que usan los controladores para extraer información de la base de datos. Estas propiedades se configuran como variables de entorno de Lambda.

  • Cadena de conexión: una cadena de texto que se usa para establecer una conexión con una instancia de base de datos.

  • Catálogo: un catálogo ajeno a AWS Glue registrado en Athena que es un prefijo obligatorio para la propiedad connection_string.

  • Controlador de multiplexación: un controlador de Lambda que puede aceptar y usar varias conexiones a bases de datos.

Parámetros

Use las variables de entorno de Lambda de esta sección para configurar el conector de Synapse.

Cadena de conexión

Use una cadena de conexión JDBC con el siguiente formato para conectarse a una instancia de base de datos.

synapse://${jdbc_connection_string}

Uso de un controlador de multiplexación

Puede usar un multiplexor para conectarse a varias instancias de base de datos con una sola función de Lambda. Las solicitudes se enrutan por nombre de catálogo. Use las siguientes clases en Lambda.

Controlador Clase
Controlador compuesto SynapseMuxCompositeHandler
Controlador de metadatos SynapseMuxMetadataHandler
Controlador de registros SynapseMuxRecordHandler

Parámetros del controlador de multiplexación

Parámetro Descripción
$catalog_connection_string Obligatorio. Una cadena de conexión de instancia de base de datos. Agregue el prefijo a la variable de entorno con el nombre del catálogo usado en Athena. Por ejemplo, si el catálogo registrado en Athena es mysynapsecatalog, el nombre de la variable de entorno será mysynapsecatalog_connection_string.
default Obligatorio. La cadena de conexión predeterminada. Esta cadena se usa cuando el catálogo es lambda:${AWS_LAMBDA_FUNCTION_NAME}.

Las siguientes propiedades de ejemplo son para una función de Lambda de Synapse MUX que admite dos instancias de base de datos: synapse1 (la predeterminada) y synapse2.

Propiedad Valor
default synapse://jdbc:synapse://synapse1.hostname:port;databaseName=<database_name>;${secret1_name}
synapse_catalog1_connection_string synapse://jdbc:synapse://synapse1.hostname:port;databaseName=<database_name>;${secret1_name}
synapse_catalog2_connection_string synapse://jdbc:synapse://synapse2.hostname:port;databaseName=<database_name>;${secret2_name}

Proporcionar credenciales

Para proporcionar un nombre de usuario y una contraseña para la base de datos en la cadena de conexión JDBC, puede usar las propiedades de la cadena de conexión o AWS Secrets Manager.

  • Cadena de conexión: se pueden especificar un nombre de usuario y una contraseña como propiedades en la cadena de conexión JDBC.

    importante

    Como práctica recomendada en materia de seguridad, no utilice credenciales codificadas en las variables de entorno ni en las cadenas de conexión. Para obtener información sobre cómo transferir los secretos codificados a AWS Secrets Manager, consulte Mover secretos codificados a AWS Secrets Manager en la Guía del usuario de AWS Secrets Manager.

  • AWS Secrets Manager: para utilizar la característica Consulta federada de Athena con AWS Secrets Manager, la VPC conectada a la función de Lambda debe tener acceso a Internet o un punto de conexión de VPC para conectarse a Secrets Manager.

    Puede poner el nombre de un secreto en AWS Secrets Manager, en la cadena de conexión JDBC. El conector reemplaza el nombre del secreto por los valores username y password de Secrets Manager.

    Para las instancias de bases de datos de Amazon RDS, esta compatibilidad está estrechamente integrada. Si usa Amazon RDS, le recomendamos encarecidamente que use AWS Secrets Manager y la rotación de credenciales. Si la base de datos no usa Amazon RDS, guarde las credenciales como archivos JSON con el siguiente formato:

    {"username": "${username}", "password": "${password}"}
Ejemplo de cadena de conexión con nombre secreto

La siguiente cadena tiene el nombre secreto ${secret_name}.

synapse://jdbc:synapse://hostname:port;databaseName=<database_name>;${secret_name}

El conector usa el nombre secreto para recuperar los secretos y proporcionar el nombre de usuario y la contraseña, como en el siguiente ejemplo.

synapse://jdbc:synapse://hostname:port;databaseName=<database_name>;user=<user>;password=<password>

Uso de un controlador de conexión única

Puede usar los siguientes controladores de registros y metadatos de conexión única para conectarse a una sola instancia de Synapse.

Tipo de controlador Clase
Controlador compuesto SynapseCompositeHandler
Controlador de metadatos SynapseMetadataHandler
Controlador de registros SynapseRecordHandler

Parámetros de controlador de conexión única

Parámetro Descripción
default Obligatorio. La cadena de conexión predeterminada.

Los controladores de conexión única admiten una instancia de base de datos y deben proporcionar un parámetro de cadena de conexión default. Se omiten todas las demás cadenas de conexión.

La siguiente propiedad de ejemplo es para una sola instancia de Synapse compatible con una función de Lambda.

Propiedad Valor
default synapse://jdbc:sqlserver://hostname:port;databaseName=<database_name>;${secret_name}

Configuración de la autenticación con Active Directory

El conector Azure Synapse de Amazon Athena es compatible con la autenticación de Microsoft Active Directory. Antes de empezar, debe configurar un usuario administrativo en el portal de Microsoft Azure y, a continuación, usar AWS Secrets Manager para crear un secreto.

Para configurar el usuario de administración de Active Directory
  1. Con una cuenta que tenga privilegios administrativos, inicie sesión en el portal de Microsoft Azure en https://portal.azure.com/.

  2. En el cuadro de búsqueda, escriba Azure Synapse Analytics y, a continuación, elija Azure Synapse Analytics.

    Elija Azure Synapse Analytics.
  3. Abra el menú de la izquierda.

    Elija el menú del portal de Azure.
  4. En el panel de navegación, elija Azure Active Directory.

  5. En la pestaña Configurar administrador, configure el administrador de Active Directory como un usuario nuevo o existente.

    Uso de la pestaña Configurar administrador
  6. En AWS Secrets Manager, guarde las credenciales de nombre de usuario y contraseña del administrador. Para obtener información sobre cómo crear un secreto en Secrets Manager, consulte Creación de un secreto de AWS Secrets Manager.

Para ver el secreto en Secrets Manager
  1. Abra la consola de Secrets Manager en https://console.aws.amazon.com/secretsmanager/.

  2. En el panel de navegación, elija Secretos.

  3. En la página Secretos, elija el vínculo al secreto.

  4. En la página de detalles del secreto, elija Recuperar valor del secreto.

    Visualización de los secretos en AWS Secrets Manager.

Modificación de la cadena de conexión

Para habilitar la autenticación de Active Directory para el conector, modifique la cadena de conexión mediante la siguiente sintaxis:

synapse://jdbc:synapse://hostname:port;databaseName=database_name;authentication=ActiveDirectoryPassword;{secret_name}
Uso de ActiveDirectoryServicePrincipal

El conector Azure Synapse de Amazon Athena también es compatible con ActiveDirectoryServicePrincipal. Para habilitarlo, modifique la cadena de la siguiente manera.

synapse://jdbc:synapse://hostname:port;databaseName=database_name;authentication=ActiveDirectoryServicePrincipal;{secret_name}

Para secret_name, especifique el ID de la aplicación o del cliente como el nombre de usuario y el secreto de la identidad principal de un servicio en la contraseña.

Parámetros de vertido

El SDK de Lambda puede verter datos en Amazon S3. Todas las instancias de bases de datos a las que se accede mediante la misma función de Lambda se vierten en la misma ubicación.

Parámetro Descripción
spill_bucket Obligatorio. Nombre del bucket de vertido.
spill_prefix Obligatorio. Prefijo de la clave del bucket de vertido.
spill_put_request_headers (Opcional) Un mapa codificado en JSON de encabezados y valores de solicitudes para la solicitud putObject de Amazon S3 que se usa para el vertido (por ejemplo, {"x-amz-server-side-encryption" : "AES256"}). Para ver otros encabezados posibles, consulte PutObject en la referencia de la API de Amazon Simple Storage Service.

Compatibilidad con tipos de datos

En la siguiente tabla, se muestran los tipos de datos correspondientes para Synapse y Apache Arrow.

Synapse Arrow
bit TINYINT
tinyint SMALLINT
smallint SMALLINT
int INT
bigint BIGINT
decimal DECIMAL
numérico FLOAT8
smallmoney FLOAT8
money DECIMAL
float[24] FLOAT4
float[53] FLOAT8
real FLOAT4
datetime Date(MILLISECOND)
datetime2 Date(MILLISECOND)
smalldatetime Date(MILLISECOND)
date Date(DAY)
hora VARCHAR
datetimeoffset Date(MILLISECOND)
char[n] VARCHAR
varchar[n/max] VARCHAR
nchar[n] VARCHAR
nvarchar[n/max] VARCHAR

Particiones y divisiones

Una partición se representa mediante una sola columna de partición del tipo varchar. Synapse admite la partición por rango, por lo que la partición se implementa al extraer la columna de particiones y el rango de particiones de las tablas de metadatos de Synapse. Estos valores de rango se usan para crear las divisiones.

Rendimiento

La selección de un subconjunto de columnas ralentiza significativamente el tiempo de ejecución de las consultas. El conector presenta limitaciones significativas debido a la simultaneidad.

El conector Synapse de Athena inserta predicados para reducir los datos analizados en la consulta. Los predicados simples y las expresiones complejas se insertan en el conector para reducir la cantidad de datos analizados y disminuir el tiempo de ejecución de las consultas.

Predicados

Un predicado es una expresión de la cláusula WHERE de una consulta SQL que da como resultado un valor booleano y filtra las filas en función de varias condiciones. El conector Synapse de Athena puede combinar estas expresiones e insertarlas directamente en Synapse para mejorar la funcionalidad y reducir la cantidad de datos analizados.

Los siguientes operadores del conector Synapse de Athena admiten la inserción de predicados:

  • Booleano: AND, OR, NOT.

  • Igualdad: EQUAL, NOT_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL, NULL_IF, IS_NULL.

  • Aritmética: ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULUS, NEGATE.

  • Otros: LIKE_PATTERN, IN.

Ejemplo de inserción combinada

Para mejorar las capacidades de consulta, combine los tipos de inserciones, como en el siguiente ejemplo:

SELECT * FROM my_table WHERE col_a > 10 AND ((col_a + col_b) > (col_c % col_d)) AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%');

Consultas de acceso directo

El conector Synapse admite consultas de acceso directo. Las consultas de acceso directo utilizan una función de tabla para enviar la consulta completa al origen de datos para su ejecución.

Para utilizar consultas de acceso directo, puede utilizar la siguiente sintaxis:

SELECT * FROM TABLE( system.query( query => 'query string' ))

En el siguiente ejemplo de consulta, se envía una consulta a un origen de datos de Synapse. La consulta selecciona todas las columnas de la tabla customer y limita los resultados a 10.

SELECT * FROM TABLE( system.query( query => 'SELECT * FROM customer LIMIT 10' ))

Información sobre licencias

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo pom.xml para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo LICENSE.txt de GitHub.com.

Recursos adicionales de