Conector do Amazon Athena para o DynamoDB - Amazon Athena

Conector do Amazon Athena para o DynamoDB

O conector do DynamoDB no Amazon Athena permite que o Amazon Athena se comunique com o DynamoDB para que você possa consultar suas tabelas com SQL. Operações de gravação como INSERT INTO não são suportadas.

Se você tiver o Lake Formation habilitado em sua conta, o perfil do IAM para seu conector Lambda federado para Athena que você implantou no AWS Serverless Application Repository deve ter acesso de leitura ao AWS Glue Data Catalog no Lake Formation.

Pré-requisitos

Parâmetros

Use as variáveis de ambiente do Lambda nesta seção para configurar o conector DynamoDB.

  • spill_bucket: especifica o bucket do Amazon S3 para dados que excedem os limites da função do Lambda.

  • spill_prefix: (opcional) assume como padrão uma subpasta no spill_bucket especificado chamado athena-federation-spill. Recomendamos que você configure um ciclo de vida de armazenamento do Amazon S3 neste local para excluir derramamentos anteriores a um número predeterminado de dias ou horas.

  • 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.

  • kms_key_id: (opcional) por padrão, todos os dados transmitidos para o Amazon S3 são criptografados usando o modo de criptografia autenticado AES-GCM e uma chave gerada aleatoriamente. Para que sua função do Lambda use chaves de criptografia mais fortes geradas pelo KMS, como a7e63k4b-8loc-40db-a2a1-4d0en2cd8331, é possível especificar um ID de chave do KMS.

  • disable_spill_encryption: (opcional) quando definido como True, desativa a criptografia do derramamento. É padronizado como False, para que os dados transmitidos para o S3 sejam criptografados usando o AES-GCM — usando uma chave gerada aleatoriamente ou o KMS para gerar chaves. Desativar a criptografia do derramamento pode melhorar a performance, especialmente se o local do derramamento usar criptografia no lado do servidor.

  • disable_glue: (opcional) se estiver presente e definido como verdadeiro, o conector não tentará recuperar metadados complementares do AWS Glue.

  • glue_catalog: (opcional) use essa opção para especificar um catálogo do AWS Glue entre contas. Por padrão, o conector tenta obter metadados de sua própria conta do AWS Glue.

  • disable_projection_and_casing: (opcional) desativa a projeção e a capitalização. Use se quiser consultar tabelas do DynamoDB que tenham maiúsculas e minúsculas em seus nomes de coluna e não quiser especificar uma propriedade columnMapping em sua tabela AWS Glue.

    O parâmetro disable_projection_and_casing usa os seguintes valores para especificar o comportamento do mapeamento de capitalização e coluna:

    • auto: desativa a projeção e a capitalização quando um tipo anteriormente sem suporte é detectado e o mapeamento do nome da coluna não está definido na tabela. Essa é a configuração padrão.

    • always (sempre): desativa a projeção e a capitalização incondicionalmente. Isso é útil quando você tem maiúsculas e minúsculas nos nomes das colunas do DynamoDB, mas não quer especificar nenhum mapeamento de nome de coluna.

    Ao usar o parâmetro disable_projection_and_casing, lembre-se dos seguintes pontos:

    • O uso do parâmetro pode resultar em um maior uso de largura de banda. Além disso, se a função do Lambda não estiver na mesma Região da AWS que a fonte de dados, custos mais altos de transferência padrão entre regiões da AWS serão gerados como resultado do maior uso de largura de banda. Para obter mais informações sobre os custos de transferência entre regiões, consulte Cobranças de transferência de dados da AWS para arquiteturas com servidor e com tecnologia sem servidor no blog da rede de parceiros da AWS.

    • Como um número maior de bytes é transferido, e o maior número de bytes exige um maior tempo de desserialização, a latência geral pode aumentar.

Configuração de bancos de dados e tabelas no AWS Glue

Como a capacidade incorporada de inferência de esquema do conector é limitada, talvez você queira usar o AWS Glue para metadados. Para fazer isso, você deve ter um banco de dados e uma tabela no AWS Glue. Para habilitá-los para uso com o DynamoDB, você deve editar suas propriedades.

Para editar as propriedades do banco de dados no console do AWS Glue
  1. Faça login no AWS Management Console e abra o console do AWS Glue em https://console.aws.amazon.com/glue/.

  2. No painel de navegação, expanda Data Catalog e escolha Bancos de dados.

    Na página Databases (Bancos de dados), você pode editar um banco de dados existente ou escolher Add database (Adicionar banco de dados) para criar um.

  3. Na lista de bancos de dados, selecione o link do banco de dados que deseja editar.

  4. Selecione a opção Editar.

  5. Na página Atualizar um banco de dados, em Configurações de banco de dados, para Local, adicione a string dynamo-db-flag. Essa palavra-chave indica que o banco de dados contém tabelas que o conector DynamoDB para Athena está usando para metadados complementares e é necessária para bancos de dados do AWS Glue diferentes de default. A propriedade dynamo-db-flag é útil para filtrar bancos de dados em contas com muitos bancos de dados.

  6. Escolha Update Database (Atualizar banco de dados).

Para editar as propriedades da tabela no console do AWS Glue
  1. Faça login no AWS Management Console e abra o console do AWS Glue em https://console.aws.amazon.com/glue/.

  2. No painel de navegação, expanda Data Catalog e escolha Tebelas.

  3. Na página Tabelas, na lista de tabelas, escolha o nome do link para a tabela que você deseja editar.

  4. Selecione Actions (Ações), Edit (Editar).

  5. Na página Edit table (Editar tabela), na seção Table properties (Propriedades de tabela), adicione as seguintes propriedades de tabela, conforme solicitado: Se você usar o crawler do DynamoDB do AWS Glue, essas propriedades serão definidas automaticamente.

    • DynamoDB: string que indica ao conector DynamoDB do Athena que a tabela pode ser usada para metadados complementares. Insira a string dynamodb nas propriedades da tabela em um campo chamado classification (classificação) (correspondência exata).

      nota

      A página Definir propriedades da tabela, que é parte do processo de criação de tabelas no console no AWS Glue, tem uma seção Formato dos dados com um campo Classificação. Você não pode inserir nem escolher o dynamodb aqui. Em vez disso, depois de criar a tabela, siga as etapas para editar a tabela e inserir classification e dynamodb como um par de chave/valor na seção Propriedades da tabela.

    • sourceTable: propriedade de tabela opcional que define o nome da tabela de origem no DynamoDB. Use-a caso as regras de nomenclatura de tabelas do AWS Glue impeçam que você crie uma tabela do AWS Glue com o mesmo nome da sua tabela do DynamoDB. Por exemplo, letras maiúsculas não são permitidas em nomes de tabelas do AWS Glue, mas são permitidas nos nomes de tabelas do DynamoDB.

    • columnMapping: propriedade de tabela opcional que define mapeamentos de nomes de colunas. Use-a caso as regras de nomenclatura de colunas do AWS Glue impeçam que você crie uma tabela do AWS Glue com os mesmos nomes de coluna da sua tabela do DynamoDB. Por exemplo, letras maiúsculas não são permitidas em nomes de colunas do AWS Glue, mas são permitidas nos nomes de colunas do DynamoDB. Espera-se que o valor da propriedade esteja no formato col1=Col1,col2=Col2. Observe que o mapeamento de colunas só é aplicável a nomes de colunas de nível superior e não a campos aninhados.

    • defaultTimeZone: propriedade de tabela opcional que é aplicada a valores date ou datetime que não tenham um fuso horário explícito. Definir esse valor é uma boa prática para evitar discrepâncias entre o fuso horário padrão da fonte de dados e o fuso horário da sessão do Athena.

    • datetimeFormatMapping: propriedade de tabela opcional que especifica o formato de date ou datetime a ser usado ao analisar dados de uma coluna do AWS Glue de tipo de dado date ou timestamp. Se essa propriedade não for especificada, o conector tentará inferir um formato ISO-8601. Se o conector não puder inferir o formato date ou datetime, ou analisar a string bruta, então o valor será omitido do resultado.

      O valor de datetimeFormatMapping deve estar no formato col1=someformat1,col2=someformat2. Veja a seguir alguns exemplos de formatos:

      yyyyMMdd'T'HHmmss ddMMyyyy'T'HH:mm:ss

      Se sua coluna tiver valores date ou datetime sem um fuso horário, e você desejar usar a coluna na cláusula WHERE, defina a propriedade datetimeFormatMapping para a coluna.

  6. Se você definir suas colunas manualmente, certifique-se de usar os tipos de dados apropriados. Se você usou um crawler, valide as colunas e os tipos que o crawler descobriu.

  7. Escolha Salvar.

Permissões obrigatórias

Revise a seção Policies do arquivo athena-dynamodb.yaml para obter detalhes completos sobre as políticas do IAM que esse conector exige. A lista a seguir resume as permissões necessárias.

  • Acesso de gravação do Amazon S3: o conector requer acesso de gravação a um local no Amazon S3 para mostrar resultados de grandes consultas.

  • Athena GetQueryExecution: o conector usa esta permissão para falhar rapidamente quando a consulta upstream do Athena é encerrada.

  • AWS Glue Data Catalog: o conector DynamoDB requer acesso somente de leitura ao AWS Glue Data Catalog para obter informações do esquema.

  • CloudWatch Logs: o conector requer acesso ao CloudWatch Logs para armazenar registros.

  • Acesso de leitura do DynamoDB: o conector usa as operações da API DescribeTable, ListSchemas, ListTables, Query e Scan.

Performance

O conector Athena DynamoDB oferece suporte a verificações paralelas e tentativas de reduzir predicados como parte de suas consultas do DynamoDB. Um predicado de chave de hash com X valores distintos resulta em X chamadas de consulta para o DynamoDB. Todos os outros cenários de predicados resultam em um número Y de chamadas de exame, onde Y é determinado heuristicamente com base no tamanho da tabela e na throughput provisionada. Porém, selecionar um subconjunto de colunas resulta, algumas vezes, em um runtime mais longo.

Cláusulas LIMIT e predicados simples são passados diretamente e podem reduzir a quantidade de dados examinados e reduzir o runtime de execução da consulta.

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.

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. Para melhorar a funcionalidade e reduzir a quantidade de dados examinados, o conector do Athena para o DynamoDB pode combinar essas expressões e passá-las diretamente ao DynamoDB.

Os seguintes operadores do conector do Athena para o DynamoDB são compatíveis com a passagem direta de predicados:

  • Booleano: E

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

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_b < 10 LIMIT 10

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

Consultas de passagem

O conector do DynamoDB é compatível com consultas de passagem e usa a sintaxe partiQL. Não há compatibilidade com a operação de API GetItem do DynamoDB. Para obter informações sobre como consultar o DynamoDB usando o PartiQL, consulte Instruções selecionadas do partiQL para o DynamoDB no Guias do desenvolvedor do Amazon DynamoDB.

Para usar consultas de passagem com o DynamoDB, use a seguinte sintaxe:

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

O seguinte exemplo de consulta de passagem do DynamoDB usa partiQL para retornar uma lista de dispositivos Fire TV Stick com uma propriedade DateWatched posterior a 24/12/22.

SELECT * FROM TABLE( system.query( query => 'SELECT Devices FROM WatchList WHERE Devices.FireStick.DateWatched[0] > '12/24/22'' ))

Solução de problemas

Vários filtros em uma coluna de chave de classificação

Mensagem de erro: KeyConditionExpressions deve conter apenas uma condição por chave

Causa: este problema pode ocorrer no mecanismo Athena versão 3 em consultas que tenham um filtro limitado inferior e superior em uma coluna de chave de classificação do DynamoDB. Como o DynamoDB não oferece suporte a mais de uma condição de filtro em uma chave de classificação, ocorre um erro quando o conector tenta propagar uma consulta que tenha as duas condições aplicadas.

Solução: atualize o conector para a versão 2023.11.1 ou posterior. Para obter instruções sobre como atualizar um conector, consulte Atualizar um conector de fonte de dados.

Custos

Os custos de uso do conector dependem dos recursos subjacentes da AWS que são usados. Como as consultas que usam verificações podem consumir um grande número de unidades de capacidade de leitura (RCUs), considere as informações para Definição de preços do Amazon DynamoDB com cuidado.

Recursos adicionais