Conector do Amazon Athena para o Redshift - Amazon Athena

Conector do Amazon Athena para o Redshift

O conector Redshift do Amazon Athena permite que o Amazon Athena acesse bancos de dados do Amazon Redshift e do Amazon Redshift sem servidor, incluindo visualizações do RedShift sem servidor. Você pode se conectar a qualquer serviço usando as configurações da string de conexão JDBC descritas nesta página.

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.

  • Como o Redshift não oferece suporte a partições externas, todos os dados especificados por uma consulta são recuperados sempre.

  • Assim como o Redshift, o Athena trata os espaços à direita nos tipos CHAR do Redshift como semanticamente insignificantes para fins de comprimento e comparação. Observe que isso se aplica somente aos tipos CHAR, mas não aos VARCHAR. O Athena ignora os espaços à direita no tipo CHAR, mas os trata como significativos para no VARCHAR.

Termos

Os termos a seguir estão relacionados ao conector Redshift.

  • 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 as variáveis de ambiente do Lambda nesta seção para configurar o conector Redshift.

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.

redshift://${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 RedshiftMuxCompositeHandler
Manipulador de metadados RedshiftMuxMetadataHandler
Manipulador de registros RedshiftMuxRecordHandler

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 myredshiftcatalog, então o nome da variável de ambiente será myredshiftcatalog_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 do exemplo a seguir são para uma função do Lambda MUX do Redshift que ofereça suporte a duas instâncias de banco de dados: redshift1 (o padrão) e redshift2.

Propriedade Valor
default redshift://jdbc:redshift://redshift1.host:5439/dev?user=sample2&password=sample2
redshift_catalog1_connection_string redshift://jdbc:redshift://redshift1.host:3306/default?${Test/RDS/Redshift1}
redshift_catalog2_connection_string redshift://jdbc:redshift://redshift2.host:3333/default?user=sample2&password=sample2

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 ${Test/RDS/ Redshift1}.

redshift://jdbc:redshift://redshift1.host:3306/default?...&${Test/RDS/Redshift1}&...

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

redshift://jdbc:redshift://redshift1.host:3306/default?...&user=sample2&password=sample2&...

Atualmente, o conector do Redshift reconhece as propriedades user e password do JDBC.

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 JDBC e do Apache Arrow.

JDBC Arrow
Booleano Bit
Inteiro Tiny
Short Smallint
Inteiro Int
Longo Bigint
float Float4
Double Float8
Data Data/Dia
Timestamp Date Milli
String Varchar
Bytes Varbinary
BigDecimal Decimal
ARRAY Listar

Partições e divisões

O Redshift não oferece suporte a partições externas. Para obter mais informações sobre problemas relativos à performance, consulte Performance.

Performance

O conector do Athena para o Redshift executa a passagem direta de predicados para diminuir os dados examinados pela consulta. Cláusulas LIMIT, cláusulas ORDER BY, 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. Porém, selecionar um subconjunto de colunas resulta, algumas vezes, em um runtime mais longo. O Amazon Redshift é particularmente suscetível à lentidão na execução de consultas quando você executa várias consultas simultaneamente.

Cláusulas LIMIT

Uma instrução LIMIT N reduz os dados examinados pela consulta. Com a passagem direta de LIMIT N, o conector só retorna N linhas para o Athena.

Principais N consultas

Uma das N principais consultas especifica uma ordenação do conjunto de resultados e um limite no número de linhas retornadas. Você pode usar esse tipo de consulta para determinar os N principais valores máximos ou N principais valores mínimos para os conjuntos de dados. Com os N pushdown principais, o conector só retorna N linhas para o Athena.

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 Redshift pode combinar essas expressões e passá-las diretamente ao Redshift para melhorar a funcionalidade e reduzir a quantidade de dados examinados.

Os seguintes operadores do conector do Athena para o Redshift são compatíveis com a passágem de predicados:

  • Booleanos: E, OU, NÃO

  • Igualdade: EQUAL, NOT_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL, IS_DISTINCT_FROM, 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%') ORDER BY col_a DESC LIMIT 10;

Para ver um artigo sobre como usar o pushdown de predicado para melhorar o desempenho em consultas federadas, incluindo Amazon Redshift, consulte Melhorar as consultas federadas com o pushdown de predicados no Amazon Athena no Blog de Big Data da AWS.

Consultas de passagem

O conector Redshift é 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 Redshift, 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 Redshift. 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' ))

Recursos adicionais

Para obter as informações mais recentes sobre a versão do driver JDBC, consulte o arquivo pom.xml do conector do Redshift em GitHub.com.

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