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 DynamoDBSELECT * 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.
O diagrama mostra o seguinte fluxo de trabalho:
Para consultar uma tabela do DynamoDB, um usuário executa uma SQL consulta do Athena.
O Athena inicia uma função do Lambda.
A função do Lambda consulta os dados solicitados na tabela do DynamoDB.
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.
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
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Crie a primeira tabela de exemplo. |
| Desenvolvedor |
Insira dados de exemplo na primeira tabela. |
| Desenvolvedor |
Crie a segunda tabela de exemplo. |
| Desenvolvedor |
Insira dados de exemplo na segunda tabela. |
| Desenvolvedor |
Tarefa | Descrição | Habilidades 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.
| Desenvolvedor |
Verifique se a função do Lambda pode acessar o bucket de vazamento do S3. |
Se ocorrerem erros, consulte a seção Informações adicionais neste padrão para obter orientação. | Desenvolvedor |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Consultar as tabelas do DynamoDB. |
| 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:
| Desenvolvedor |
Recursos relacionados
Consulte qualquer fonte de dados com a nova consulta federada do Amazon Athena
(AWSBig Data Blog) Referência da versão do mecanismo Athena (Guia do usuário do Athena)
Simplifique a extração e análise de dados do Amazon DynamoDB usando o AWS Glue e o Amazon Athena
(Database Blog) AWS
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
.