Acesse, consulte e una tabelas do Amazon DynamoDB usando o Athena - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Acesse, consulte e una tabelas do Amazon DynamoDB usando o Athena

Criado por Moinul Al-Mamun () AWS

Ambiente: produção

Tecnologias: análise; bancos de dados; sem servidor

AWSserviços: Amazon Athena; Amazon DynamoDB; Lambda; Amazon S3 AWS

Resumo

Este padrão mostra como configurar uma conexão entre o Amazon Athena e o Amazon DynamoDB usando o conector Amazon Athena DynamoDB. O conector usa uma função AWS Lambda para consultar os dados no DynamoDB. Não é necessário escrever nenhum código para configurar a conexão. Depois que a conexão for estabelecida, você poderá acessar e analisar rapidamente as tabelas do DynamoDB usando o Athena Federated Query para executar comandos do Athena. SQL Você também pode unir uma ou mais tabelas do DynamoDB entre si ou com outras fontes de dados, como Amazon Redshift ou Amazon Aurora.

Pré-requisitos e limitações

Pré-requisitos

  • Uma AWS conta ativa com permissões para gerenciar tabelas do DynamoDB, fontes do Athena Data, Lambda e funções de Identity AWS and Access Management () IAM

  • Um bucket do Amazon Simple Storage Service (Amazon S3) no qual o Athena poderá armazenar resultados de consultas

  • Um bucket do S3 em que o Athena DynamoDB Connector pode salvar os dados no curto prazo

  • Uma AWS região que suporta a versão 2 do motor Athena

  • IAMpermissões para acessar o Athena e os buckets S3 necessários

  • Conector do DynamoDB no Amazon Athena, instalado

Limitações

Há um custo para consultar tabelas do DynamoDB. Tamanhos de tabela superiores a alguns gigabytes (GBs) podem gerar um alto custo. Recomendamos que você considere o custo antes de realizar qualquer SCAN operação de mesa completa. Para obter mais informações, consulte a Definição de preço do Amazon DynamoDB. Para reduzir custos e obter alto desempenho, recomendamos que você sempre use LIMIT em sua consulta (por exemplo,SELECT * FROM table1 LIMIT 10). Além disso, antes de realizar uma consulta JOIN ou GROUP BY em um ambiente de produção, considere o tamanho das tabelas. Se suas tabelas forem muito grandes, considere opções alternativas, como migrar a tabela para o Amazon S3.

Arquitetura

O diagrama a seguir mostra como um usuário pode executar uma SQL consulta em uma tabela do DynamoDB do Athena.

Fluxo de trabalho para conectar o Athena e o DynamoDB para executar uma consulta. SQL

O diagrama mostra o seguinte fluxo de trabalho:

  1. Para consultar uma tabela do DynamoDB, um usuário executa uma SQL consulta do Athena.

  2. O Athena inicia uma função do Lambda.

  3. A função do Lambda consulta os dados solicitados na tabela do DynamoDB.

  4. O DynamoDB retorna os dados solicitados para a função do Lambda. Em seguida, a função transfere os resultados da consulta para o usuário por meio do Athena.

  5. A função do Lambda armazena dados no bucket do S3.

Pilha de tecnologia

  • Amazon Athena

  • Amazon DynamoDB

  • Amazon S3

  • AWSLambda

Ferramentas

  • O Amazon Athena é um serviço de consulta interativo que ajuda você a analisar dados diretamente no Amazon S3 usando o padrão. SQL

  • O Amazon Athena DynamoDB Connector é uma ferramenta AWS que permite que o Athena se conecte ao DynamoDB e acesse suas tabelas usando consultas. SQL

  • O Amazon DynamoDB é um serviço SQL sem banco de dados totalmente gerenciado que fornece desempenho rápido, previsível e escalável.

  • AWSO Lambda é um serviço de computação que ajuda você a executar código sem precisar provisionar ou gerenciar servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.

Épicos

TarefaDescriçãoHabilidades necessárias

Crie a primeira tabela de exemplo.

  1. Faça login no AWS Management Console e abra o console do DynamoDB.

  2. Escolha Create table.

  3. Em Nome da tabela, insira dydbtable1.

  4. Em Chave de partição, insira PK1.

  5. Em Chave de classificação, insira SK1.

  6. Na seção Configurações da tabela, selecione Personalizar configurações.

  7. Na seção Classe de tabela, escolha DynamoDB Standard.

  8. Na seção Configurações de capacidade de leitura/gravação, para Modo de capacidade, escolha Sob demanda.

  9. Na seção Criptografia em repouso, escolha Propriedade do Amazon DynamoDB.

  10. Escolha Create table.

Desenvolvedor

Insira dados de exemplo na primeira tabela.

  1. Abra o console do DynamoDB.

  2. No painel de navegação, selecione Tabela e selecione sua tabela na coluna Nome.

  3. Escolha Ações e, em seguida, Criar item.

  4. Escolha a JSONvisualização.

  5. Na barra de título do editor de atributos, desative a opção Exibir DynamoDB. JSON

  6. No editor Atributos, insira os seguintes dados de exemplo, um por um:

{ "PK1": "1234", "SK1": "info", "Salary": "5000" }
{ "PK1": "1235", "SK1": "info", "Salary": "5200" }
Desenvolvedor

Crie a segunda tabela de exemplo.

  1. Abra o console do DynamoDB.

  2. Escolha Create table.

  3. Em Nome da tabela, insira dydbtable2.

  4. Em Partition key, (Chave de partição), insira PK2.

  5. Em Chave de classificação, insira SK2.

  6. Na seção Configurações da tabela, selecione Personalizar configurações.

  7. Na seção Classe de tabela, escolha DynamoDB Standard.

  8. Na seção Configurações de capacidade de leitura/gravação, para Modo de capacidade, escolha Sob demanda.

  9. Na seção Criptografia em repouso, escolha Propriedade do Amazon DynamoDB.

  10. Escolha Create table.

Desenvolvedor

Insira dados de exemplo na segunda tabela.

  1. Abra o console do DynamoDB.

  2. No painel de navegação, selecione Tabela e selecione sua tabela na coluna Nome.

  3. Escolha Ações e, em seguida, Criar item.

  4. Na barra de título do editor de atributos, desative a opção Exibir DynamoDB. JSON

  5. No editor Atributos, insira os seguintes dados de exemplo, um por um:

{ "PK2": "1234", "SK2": "bonus", "Bonus": "500" }
{ "PK2": "1235", "SK2": "bonus", "Bonus": "1000" }
Desenvolvedor
TarefaDescriçãoHabilidades necessárias

Configure o conector da fonte de dados.

Crie uma fonte de dados para o DynamoDB e, em seguida, uma função do Lambda para se conectar a essa fonte de dados.

  1. Faça login no console de AWS gerenciamento e abra o console do Athena.

  2. No painel de navegação, escolha Fontes de dados e, em seguida, Criar fonte de dados.

  3. Escolha a fonte de dados do Amazon DynamoDB e, em seguida, Avançar.

  4. Na seção Detalhes da fonte de dados, em Nome da fonte de dados, insira testDynamoDB.

  5. Na seção Detalhes da conexão, selecione uma função do Lambda que já esteja implantada ou escolha Criar função do Lambda se você não tiver uma função do Lambda para usar nesse padrão. Observação: Para obter mais informações sobre como criar uma função do Lambda, consulte Conceitos básicos do AWS Lambda no Guia do desenvolvedor do Lambda.

  6. (Opcional) Se você escolher Criar função Lambda, deverá configurar o AWS CloudFormation modelo incluído pelo aplicativo Java antes de implantar essa pilha. O modelo inclui ApplicationName, SpillBucket, AthenaCatalogName, e outras configurações do aplicativo. Observação: depois de implantar esse aplicativo baseado em Java, a pilha cria uma função do Lambda que permite que o Athena se comunique com o DynamoDB. Isso torna suas tabelas acessíveis por meio de SQL comandos.

  7. Implantação da função do Lambda.

  8. Escolha Próximo.

Desenvolvedor

Verifique se a função do Lambda pode acessar o bucket de vazamento do S3.

  1. Abra o console do lambda.

  2. No painel de navegação, escolha Funções e, em seguida, escolha a função que você criou anteriormente.

  3. Escolha a guia Configuração.

  4. No painel esquerdo, escolha Variáveis de ambiente e confirme se o valor da chave é spill_bucket.

  5. No painel esquerdo, escolha Permissões e, na seção Função de execução, escolha a IAM função anexada. Observação: você é direcionado para a IAM função associada à sua função Lambda no IAM console.

  6. Confirme se você tem permissão de gravação no bucket spill_bucket.

Se ocorrerem erros, consulte a seção Informações adicionais neste padrão para obter orientação.

Desenvolvedor
TarefaDescriçãoHabilidades necessárias

Consultar as tabelas do DynamoDB.

  1. Faça login no console de AWS gerenciamento e abra o console do Athena.

  2. No painel de navegação, escolha Fontes de dados e, em seguida, Criar fonte de dados.

  3. No painel de navegação, selecione Editor de consultas.

  4. Na guia Editor, na seção Dados, em Fonte de dados, escolha sua fonte de dados em Fonte de dados.

  5. Em Banco de dados, escolha seu banco de dados.

  6. Para Consulta 1, insira a seguinte consulta: SELECT * FROM dydbtable1 t1;

  7. Escolha Executar e, em seguida, verifique o resultado na tabela.

  8. Para Consulta 2, insira a seguinte consulta: SELECT * FROM dydbtable2 t2;

  9. Escolha Executar e, em seguida, verifique o resultado na tabela.

Desenvolvedor

Unir duas tabelas do DynamoDB.

O DynamoDB não tem armazenamento de dados e SQL não oferece suporte à SQL operação de junção. Consequentemente, você deve realizar uma operação de junção em duas tabelas do DynamoDB:

  1. Selecione o ícone de adição para criar uma nova consulta.

  2. Para Consulta 3, insira a seguinte consulta:

SELECT pk1, salary, bonus FROM dydbtable1 t1 JOIN dydbtable2 t2 ON t1.pk1 = t2.pk2;
Desenvolvedor

Recursos relacionados

Mais informações

Se você executar uma consulta no Athena com spill_bucket no formato {bucket_name}/folder_name/, poderá receber a seguinte mensagem de erro:

"GENERIC_USER_ERROR: Encountered an exception[java.lang.RuntimeException] from your LambdaFunction[arn:aws:lambda:us-east-1:xxxxxx:function:testdynamodb] executed in context[retrieving meta-data] with message[You do NOT own the spill bucket with the name: s3://amzn-s3-demo-bucket/athena_dynamodb_spill_data/] This query ran against the "default" database, unless qualified by the query. Please post the error message on our forum or contact customer support with Query Id: [query-id]"

Para resolver esse erro, atualize a variável de ambiente da função Lambda spill_bucket para e, em seguida{bucket_name_only}, atualize a seguinte IAM política do Lambda para acesso de gravação no bucket:

{ "Action": [ "s3:GetObject", "s3:ListBucket", "s3:GetBucketLocation", "s3:GetObjectVersion", "s3:PutObject", "s3:PutObjectAcl", "s3:GetLifecycleConfiguration", "s3:PutLifecycleConfiguration", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::spill_bucket", "arn:aws:s3:::spill_bucket/*" ], "Effect": "Allow" }

Como alternativa, você pode remover o conector da fonte de dados do Athena criado anteriormente e recriá-lo usando somente {bucket_name} para spill_bucket.