Conector do Amazon Athena para o Azure Data Lake Storage (ADLS) Gen2 - Amazon Athena

Conector do Amazon Athena para o Azure Data Lake Storage (ADLS) Gen2

O conector do Amazon Athena para o Azure Data Lake Storage (ADLS) Gen2 permite que o Amazon Athena execute consultas SQL em dados armazenados no ADLS. O Athena não pode acessar diretamente os arquivos armazenados no data lake.

Esse conector não pode ser registrado como um catálogo federado no Glue Data Catalog. Esse conector não é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

  • Fluxo de trabalho – O conector implementa a interface JDBC, que usa o driver com.microsoft.sqlserver.jdbc.SQLServerDriver. O conector envia consultas para o mecanismo do Azure Synapse, que então acessa o data lake.

  • Manipulação de dados e S3 – Normalmente, o conector Lambda consulta dados diretamente sem transferência para o Amazon S3. No entanto, quando os dados retornados pela função Lambda excedem os limites do Lambda, os dados são gravados no bucket de vazamento do Amazon S3 que você especifica para que o Athena possa ler o excesso.

  • Autenticação AAD – O AAD pode ser usado como um método de autenticação para o conector Azure Synapse. Para usar o AAD, a string de conexão JDBC usada pelo conector deve conter os parâmetros de URL authentication=ActiveDirectoryServicePrincipalAADSecurePrincipalId eAADSecurePrincipalSecret. Esses parâmetros podem ser passados diretamente ou pelo Secrets Manager.

Pré-requisitos

Limitações

  • Não há suporte para operações de gravação de DDL.

  • Em uma configuração de multiplexador, o prefixo e o bucket de derramamento são compartilhados em todas as instâncias do banco de dados.

  • Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte Cotas do Lambda no Guia do desenvolvedor do AWS Lambda.

  • Em condições de filtro, você deve converter os tipos de dados date e timestamp para os tipos de dados apropriados.

Termos

Os termos a seguir são relativos ao conector do Azure Data Lake Storage Gen2.

  • Instância do banco de dados: qualquer instância de um banco de dados implantado on-premises, no Amazon EC2 ou no Amazon RDS.

  • Manipulador: um manipulador Lambda que acessa sua instância de banco de dados. Um manipulador pode ser para metadados ou para registros de dados.

  • Manipulador de metadados: um manipulador Lambda que recupera metadados da sua instância de banco de dados.

  • Manipulador de registros: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.

  • Manipulador composto: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.

  • Propriedade ou parâmetro: uma propriedade do banco de dados usada pelos manipuladores para extrair informações do banco de dados. Você configura essas propriedades como variáveis de ambiente do Lambda.

  • String de conexão: uma string de texto usada para estabelecer uma conexão com uma instância de banco de dados.

  • Catálogo: um catálogo não AWS Glue registrado no Athena que é um prefixo obrigatório para a propriedade connection_string.

  • Manipulador de multiplexação: um manipulador Lambda que pode aceitar e usar várias conexões de banco de dados.

Parâmetros

Use os parâmetros nesta seção para configurar o conector do Azure Data Lake Storage Gen2.

nota

Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.

Os nomes e definições dos parâmetros listados abaixo são para conectores de fonte de dados do Athena criados antes de 3 de dezembro de 2024. Eles podem diferir de suas propriedades de conexão do AWS Glue correspondentes. A partir de 3 de dezembro de 2024, use os parâmetros abaixo somente ao implantar manualmente uma versão anterior de um conector de fonte de dados do Athena.

String de conexão

Use uma string de conexão JDBC no seguinte formato para se conectar a uma instância de banco de dados.

datalakegentwo://${jdbc_connection_string}

Uso de um manipulador de multiplexação

É possível usar um multiplexador para se conectar a várias instâncias de banco de dados com uma única função do Lambda. As solicitações são encaminhadas por nome do catálogo. Use as seguintes classes no Lambda.

Manipulador Classe
Manipulador composto DataLakeGen2MuxCompositeHandler
Manipulador de metadados DataLakeGen2MuxMetadataHandler
Manipulador de registros DataLakeGen2MuxRecordHandler

Parâmetros do manipulador de multiplexação

Parâmetro Descrição
$catalog_connection_string Obrigatório. Uma string de conexão de instância de banco de dados. Prefixe a variável de ambiente com o nome do catálogo usado no Athena. Por exemplo, se o catálogo registrado no Athena for mydatalakegentwocatalog, então o nome da variável de ambiente será mydatalakegentwocatalog_connection_string.
default Obrigatório. A string de conexão padrão. Essa string é usada quando o catálogo for lambda:${AWS_LAMBDA_FUNCTION_NAME}.

As propriedades de exemplo a seguir são para uma função do Lambda MUX do DataLakeGen2 que ofereça suporte a duas instâncias de banco de dados: datalakegentwo1 (o padrão) e datalakegentwo2.

Propriedade Valor
default datalakegentwo://jdbc:sqlserver://adlsgentwo1.hostname:port;databaseName=database_name;${secret1_name}
datalakegentwo_catalog1_connection_string datalakegentwo://jdbc:sqlserver://adlsgentwo1.hostname:port;databaseName=database_name;${secret1_name}
datalakegentwo_catalog2_connection_string datalakegentwo://jdbc:sqlserver://adlsgentwo2.hostname:port;databaseName=database_name;${secret2_name}

Fornecimento de credenciais

Para fornecer um nome de usuário e uma senha para seu banco de dados na string de conexão JDBC, é possível usar as propriedades da string de conexão ou o AWS Secrets Manager.

  • String de conexão: um nome de usuário e uma senha podem ser especificados como propriedades na string de conexão do JDBC.

    Importante

    Como prática recomendada de segurança, não use credenciais codificadas em suas variáveis de ambiente ou strings de conexão. Para obter informações sobre como mover seus segredos codificados para o AWS Secrets Manager, consulte Mover segredos codificados para o AWS Secrets Manager no Guia do usuário do AWS Secrets Manager.

  • AWS Secrets Manager: para usar o recurso Athena Federated Query com o AWS Secrets Manager, a VPC conectada à sua função do Lambda deve ter acesso à Internet ou um endpoint da VPC para se conectar ao Secrets Manager.

    É possível colocar o nome de um segredo no AWS Secrets Manager na sua string de conexão JDBC. O conector substitui o nome secreto pelos valores de username e password do Secrets Manager.

    Para instâncias de banco de dados do Amazon RDS, esse suporte é totalmente integrado. Se você usa o Amazon RDS, é altamente recomendável usar o AWS Secrets Manager e rotação de credenciais. Se seu banco de dados não usar o Amazon RDS, armazene as credenciais em JSON no seguinte formato:

    {"username": "${username}", "password": "${password}"}
Exemplo de string de conexão com nome secreto

A string a seguir tem o nome secreto ${secret1_name}.

datalakegentwo://jdbc:sqlserver://hostname:port;databaseName=database_name;${secret1_name}

O conector usa o nome secreto para recuperar segredos e fornecer o nome de usuário e a senha, como no exemplo a seguir.

datalakegentwo://jdbc:sqlserver://hostname:port;databaseName=database_name;user=user_name;password=password

Uso de um único manipulador de conexão

É possível usar os seguintes manipuladores de metadados e registros de conexão única para se conectar a uma única instância do Azure Data Lake Storage Gen2.

Tipo de manipulador Classe
Manipulador composto DataLakeGen2CompositeHandler
Manipulador de metadados DataLakeGen2MetadataHandler
Manipulador de registros DataLakeGen2RecordHandler

Parâmetros do manipulador de conexão única

Parâmetro Descrição
default Obrigatório. A string de conexão padrão.

Os manipuladores de conexão únicos oferecem suporte a uma instância de banco de dados e devem fornecer um parâmetro de string de conexão default. Todas as outras strings de conexão são ignoradas.

O exemplo de propriedade a seguir é para uma única instância do Azure Data Lake Storage Gen2 compatível com uma função do Lambda.

Propriedade Valor
default datalakegentwo://jdbc:sqlserver://hostname:port;databaseName=;${secret_name}

Parâmetros de derramamento

O SDK do Lambda pode derramar dados no Amazon S3. Todas as instâncias do banco de dados acessadas pela mesma função do Lambda derramam no mesmo local.

Parâmetro Descrição
spill_bucket Obrigatório. Nome do bucket de derramamento.
spill_prefix Obrigatório. Prefixo de chave do bucket de derramamento.
spill_put_request_headers (Opcional) Um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação putObject do Amazon S3 usada para o derramamento (por exemplo, {"x-amz-server-side-encryption" : "AES256"}). Para outros cabeçalhos possíveis, consulte PutObject na Referência da API do Amazon Simple Storage Service.

Suporte ao tipo de dados

A tabela a seguir mostra os correspondentes tipos de dados do ADLS Gen2 e do Arrow.

ADLS Gen2 Arrow
bit TINYINT
tinyint SMALLINT
smallint SMALLINT
int INT
bigint BIGINT
decimal DECIMAL
numeric 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)
horário VARCHAR
datetimeoffset Date(MILLISECOND)
char[n] VARCHAR
varchar[n/max] VARCHAR

Partições e divisões

O Azure Data Lake Storage Gen2 usa armazenamento de blobs Gen2 compatível com Hadoop para armazenar arquivos de dados. Os dados desses arquivos são consultados no mecanismo do Azure Synapse. O mecanismo Azure Synapse trata os dados do Gen2 armazenados nos sistemas de arquivos como tabelas externas. As partições são implementadas com base no tipo de dados. Se os dados já tiverem sido particionados e distribuídos no sistema de armazenamento do Gen2, o conector recuperará os dados como uma única divisão.

Performance

O conector do Azure Data Lake Storage Gen2 apresenta uma performance de consulta mais lenta quando executa várias consultas ao mesmo tempo e está sujeito a controle de utilização.

O conector do Athena para o Azure Data Lake Storage Gen2 realiza a passagem direta de predicados para diminuir os dados examinados pela consulta. Predicados simples e expressões complexas são passados diretamente ao conector para reduzir a quantidade de dados examinados e o runtime de execução da consulta.

Predicados

Um predicado é uma expressão na cláusula WHERE de uma consulta SQL, que avalia para um valor booleano e filtra as linhas com base em várias condições. O conector do Athena para o Azure Data Lake Storage Gen2 pode combinar essas expressões e passá-las diretamente ao Azure Data Lake Storage Gen2 para melhorar a funcionalidade e reduzir a quantidade de dados examinados.

Os seguintes operadores do conector do Athena para o Azure Data Lake Storage Gen2 são compatíveis com passagem de predicados:

  • Booleanos: E, OU, NÃO

  • Igualdade:EQUAL, NOT_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL, NULL_IF, IS_NULL

  • Aritméticos: ADICIONAR, SUBTRAIR, MULTIPLICAR, DIVIDIR, MÓDULO, NEGAR

  • Outros:LIKE_PATTERN, IN

Exemplo de passagem direta combinada

Para ter recursos aprimorados de consulta, combine os tipos de passagem direta, como no seguinte exemplo:

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 passagem

O conector do Azure Data Lake Storage Gen2 é compatível com consultas de passagem. As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o Azure Data Lake Storage Gen2, você pode empregar a seguinte sintaxe:

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

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no Azure Data Lake Storage Gen2. A consulta seleciona todas as colunas na tabela customer, limitando os resultados a 10.

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

Informações de licença

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo pom.xml desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo LICENSE.txt em GitHub.com.

Recursos adicionais

Para obter as informações mais recentes sobre versões do driver JDBC, consulte o arquivo pom.xml do conector do Azure Data Lake Storage Gen2 em GitHub.com.

Para obter mais informações sobre esse conector, visite o site correspondente em GitHub.com.