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
Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para obter mais informações, consulte Implantação de um conector de fonte de dados ou Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados.
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 chamadoathena-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 comoFalse
, 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
Faça login no AWS Management Console e abra o console do AWS Glue em https://console.aws.amazon.com/glue/
. -
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.
-
Na lista de bancos de dados, selecione o link do banco de dados que deseja editar.
-
Selecione a opção Editar.
-
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 dedefault
. A propriedadedynamo-db-flag
é útil para filtrar bancos de dados em contas com muitos bancos de dados. -
Escolha Update Database (Atualizar banco de dados).
Para editar as propriedades da tabela no console do AWS Glue
Faça login no AWS Management Console e abra o console do AWS Glue em https://console.aws.amazon.com/glue/
. -
No painel de navegação, expanda Data Catalog e escolha Tebelas.
-
Na página Tabelas, na lista de tabelas, escolha o nome do link para a tabela que você deseja editar.
-
Selecione Actions (Ações), Edit (Editar).
-
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 inserirclassification
edynamodb
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
oudatetime
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
oudatetime
a ser usado ao analisar dados de uma coluna do AWS Glue de tipo de dadodate
outimestamp
. Se essa propriedade não for especificada, o conector tentará inferirum formato ISO-8601. Se o conector não puder inferir o formato date
oudatetime
, ou analisar a string bruta, então o valor será omitido do resultado.O valor de
datetimeFormatMapping
deve estar no formatocol1=someformat1,col2=someformat2
. Veja a seguir alguns exemplos de formatos:yyyyMMdd'T'HHmmss ddMMyyyy'T'HH:mm:ss
Se sua coluna tiver valores
date
oudatetime
sem um fuso horário, e você desejar usar a coluna na cláusulaWHERE
, defina a propriedadedatetimeFormatMapping
para a coluna.
-
-
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.
-
Escolha Salvar.
Permissões obrigatórias
Revise a seção Policies
do arquivo athena-dynamodb.yaml
-
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
eScan
.
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
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)
Recursos adicionais
-
Para uma introdução ao uso do conector Amazon Athena DynamoDB, consulte Acesse, consulte e una tabelas Amazon DynamoDB usando o Athena no guia AWSPadrões de Orientação Prescritiva.
-
Para ver um artigo sobre como usar o conector do Athena DynamoDB para consultar dados no DynamoDB com SQL e visualizar insights no Amazon QuickSight, consulte a postagem Visualize Amazon DynamoDB insights in Amazon QuickSight using the Amazon Athena DynamoDB connector and AWS Glue
do AWS Big Data Blog. -
Para ver um artigo sobre o uso do conector Amazon Athena DynamoDB com Amazon DynamoDB, Athena e Amazon QuickSight para criar um painel de governança simples, consulte a postagem Query cross-account Amazon DynamoDB tables using Amazon Athena Federated Query
no AWS Big Data Blog. Para obter mais informações sobre esse conector, visite o site correspondente
em GitHub.com.