Conector do DocumentDB no Amazon Athena
O conector Amazon Athena para o DocumentDB permite que o Athena se comunique com suas instâncias do DocumentDB para que você possa consultar seus dados do DocumentDB com SQL. O conector também funciona com qualquer endpoint compatível com o MongoDB.
Diferentemente dos armazenamentos de dados relacionais tradicionais, as coleções do Amazon DocumentDB não têm um esquema definido. O DocumentDB não tem um armazenamento de metadados. Cada entrada em uma coleção do DocumentDB pode ter diferentes campos e tipos de dados.
O conector DocumentDB oferece suporte a dois mecanismos para gerar informações do esquema da tabela: inferência básica de esquema e metadados do AWS Glue Data Catalog.
A inferência de esquema é o padrão. Essa opção examina um pequeno número de documentos em sua coleção, forma uma união de todos os campos e força campos que têm tipos de dados não sobrepostos. Essa opção funciona bem para coleções que têm, em sua maioria, entradas uniformes.
Para coleções com uma maior variedade de tipos de dados, o conector oferece suporte à recuperação de metadados do AWS Glue Data Catalog. Se o conector vê um banco de dados do AWS Glue e uma tabela que correspondam aos nomes de seu banco de dados e coleção do DocumentDB, ele obtém suas informações de esquema da tabela AWS Glue correspondente. Quando você cria sua tabela AWS Glue, recomendamos que você a torne um superconjunto de todos os campos que você talvez queira acessar da sua coleção do DocumentDB.
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 DocumentdDB.
-
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.
-
default_docdb: se estiver presente, especifica uma string de conexão do DocumentDB a ser usada quando não existir uma variável de ambiente específica do catálogo.
-
disable_projection_and_casing: (opcional) desativa a projeção e a capitalização. Use se quiser consultar tabelas do Amazon DocumentDB que usam nomes de colunas que diferenciam letras maiúsculas de minúsculas. O parâmetro
disable_projection_and_casing
usa os seguintes valores para especificar o comportamento do mapeamento de capitalização e coluna:-
false (falso): essa é a configuração padrão. A projeção está ativada e o conector espera que todos os nomes das colunas estejam usando letras minúsculas.
-
true (verdadeiro): desativa a projeção e o uso de maiúsculas e minúsculas. 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.
-
-
-
enable_case_insensitive_match: (opcional) quando
true
, realiza pesquisas sem distinção entre maiúsculas e minúsculas em nomes de esquemas e de tabelas no Amazon DocumentDB. O padrão éfalse
. Use se sua consulta contiver nomes de esquemas ou de tabelas com letras maiúsculas.
Especificação de strings de conexão
É possível fornecer uma ou mais propriedades que definem os detalhes da conexão do DocumentDB para as instâncias do DocumentDB que você usar com o conector. Para fazer isso, defina uma variável de ambiente Lambda que corresponda ao nome do catálogo que você deseja usar no Athena. Por exemplo, suponha que você queira usar as seguintes consultas para consultar duas instâncias diferentes do DocumentDB no Athena:
SELECT * FROM "docdb_instance_1".database.table
SELECT * FROM "docdb_instance_2".database.table
Antes de usar essas duas instruções de SQL, você deverá adicionar duas variáveis de ambiente à sua função do Lambda: docdb_instance_1
e docdb_instance_2
. O valor para cada uma deverá ser uma string de conexão do DocumentDB no seguinte formato:
mongodb://:@:/?ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0
Uso de segredos
Opcionalmente, é possível usar o AWS Secrets Manager para obter parte ou todo o valor dos detalhes da string de conexão. Para usar o recurso Athena Federated Query com o Secrets Manager, a VPC conectada à sua função do Lambda deve ter acesso à Internet
Se você usar a sintaxe ${my_secret}
para colocar o nome de um segredo do Secrets Manager na string de conexão, o conector substituirá ${my_secret}
por seu valor em texto sem formatação do Secrets Manager exatamente. Os segredos devem ser armazenados como um segredo de texto sem formatação com o valor de
. Os segredos armazenados como <username>
:<password>
{username:
não serão passados corretamente para a string de conexão.<username>
,password:<password>
}
Os segredos também podem ser usados para toda a string de conexão, e o nome de usuário e a senha podem ser definidos no segredo.
Por exemplo, suponha que você defina a variável de ambiente Lambda para docdb_instance_1
com o seguinte valor:
mongodb://${docdb_instance_1_creds}@myhostname.com:123/?ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0
O SDK do Athena Query Federation tenta automaticamente recuperar um segredo chamado docdb_instance_1_creds
do Secrets Manager e injetar esse valor no lugar de ${docdb_instance_1_creds}
. Qualquer parte da string de conexão que esteja delimitada pela combinação de caracteres ${
}
será é interpretada como um segredo do Secrets Manager. Se você especificar um nome secreto que o conector não consiga encontrar no Secrets Manager, o conector não substituirá o texto.
Configuração de bancos de dados e tabelas no AWS Glue
Como o recurso de inferência de esquema integrado do conector examina um número limitado de documentos e oferece suporte apenas um subconjunto de tipos de dados, talvez você queira usar o AWS Glue para metadados, em vez disso.
Para habilitar uma tabela do AWS Glue para uso com o Amazon DocumentDB, você deve ter um banco de dados do AWS Glue e uma tabela para o banco de dados DocumentDB e a coleção para a qual você deseja fornecer metadados complementares.
Para usar uma tabela do AWS Glue para metadados complementares
-
Use o console do AWS Glue para criar um banco de dados do AWS Glue com o mesmo nome do banco de dados Amazon DocumentDB.
-
Defina a propriedade de URI do banco de dados para incluir docdb-metadata-flag.
-
(Opcional) Adicione a propriedade de tabela sourceTable. Essa propriedade define o nome da tabela de origem no Amazon DocumentDB. Use essa propriedade se o nome da tabela do AWS Glue for diferente do nome da tabela no Amazon DocumentDB. Diferenças nas regras de nomenclatura entre o AWS Glue e Amazon DocumentDB podem fazer com que isso seja necessário. Por exemplo, não é permitido usar letras maiúsculas em nomes de tabelas do AWS Glue, mas é permitido usá-las em nomes de tabelas do Amazon DocumentDB.
-
(Opcional) Adicione a propriedade de tabela columnMapping. Essa propriedade define mapeamentos de nomes de colunas. Use essa propriedade 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 tabela do Amazon DocumentDB. Ela pode ser útil porque letras maiúsculas são permitidas nos nomes de colunas do Amazon DocumentDB, mas não são permitidas nos nomes de colunas do AWS Glue.
Espera-se que o valor da propriedade
columnMapping
seja um conjunto de mapeamentos no formatocol1=Col1,col2=Col2
.nota
O mapeamento de colunas só é aplicável a nomes de colunas de nível superior e não a campos aninhados.
Após adicionar a propriedade de tabela
columnMapping
do AWS Glue, é possível remover a variável de ambientedisable_projection_and_casing
do Lambda. -
Use os tipos de dados apropriados para o AWS Glue, conforme listado neste documento.
Suporte ao tipo de dados
Esta seção lista os tipos de dados que o conector DocumentDB usa para inferência de esquema e os tipos de dados quando metadados do AWS Glue forem usados.
Tipos de dados de inferência de esquema
O recurso de inferência de esquema do conector DocumentDB tenta inferir valores como pertencentes a um dos seguintes tipos de dados. A tabela mostra os tipos de dados correspondentes para o Amazon DocumentDB, Java e Apache Arrow.
Apache Arrow | Java ou DocDB |
---|---|
VARCHAR | String |
INT | Inteiro |
BIGINT | Longo |
BIT | Booleano |
FLOAT4 | Float |
FLOAT8 | Double |
TIMESTAMPSEC | Data |
VARCHAR | ObjectId |
LIST | Listar |
STRUCT | Documento |
Tipos de dados do AWS Glue
Se você usar o AWS Glue para metadados complementares, será possível poderá configurar os tipos de dados a seguir. A tabela mostra os correspondentes tipos de dados do AWS Glue e do Apache Arrow.
AWS Glue | Apache Arrow |
---|---|
int | INT |
bigint | BIGINT |
double | FLOAT8 |
float | FLOAT4 |
boolean | BIT |
binary | VARBINARY |
string | VARCHAR |
Listar | LIST |
struct | STRUCT |
Permissões obrigatórias
Os detalhes completos sobre as políticas do IAM exigidas por esse conector podem ser encontrados na seção Policies
do arquivo athena-docdb.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 DocumentDB 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 AWS Secrets Manager: se você optar por armazenar os detalhes do endpoint do DocumentDB no Secrets Manager, deverá conceder ao conector acesso a esses segredos.
-
Acesso à VPC: o conector exige a capacidade de conectar e desconectar interfaces à sua VPC para que ela possa se conectar a ela e se comunicar com suas instâncias do DocumentDB.
Performance
No momento, o conector Amazon DocumentDB do Athena não é compatível com verificações paralelas, mas tenta empilhar predicados como parte de suas consultas ao DocumentDB, e predicados em relação a índices na coleção do DocumentDB resultam em, significantemente, menos dados verificados.
A função do Lambda executa o empilhamento de projeções para diminuir os dados verificados pela consulta. No entanto, selecionar um subconjunto de colunas, às vezes, resulta em um runtime de consulta mais longo. As cláusulas LIMIT
reduzem a quantidade de dados verificados, mas se você não fornecer um predicado, deverá aguardar que as consultas SELECT
com uma cláusula LIMIT
verifiquem, no mínimo, 16 MB de dados.
Consultas de passagem
O conector do Amazon DocumentDB para Athena é compatível com consultas de passagem e é baseado em NoSQL. Para obter mais informações sobre como fazer consultas ao Amazon DocumentDB, consulte Como fazer consultas no Guia do desenvolvedor do Amazon DocumentDB.
Para usar consultas de passagem com o Amazon DocumentDB, use a seguinte sintaxe:
SELECT * FROM TABLE( system.query( database => '
database_name
', collection => 'collection_name
', filter => '{query_syntax
}' ))
O exemplo a seguir consulta o banco de dados example
da coleção TPCDS
, filtrando todos os livros com o título Bill of Rights.
SELECT * FROM TABLE( system.query( database => 'example', collection => 'tpcds', filter => '{title: "Bill of Rights"}' ))
Recursos adicionais
-
Para um artigo sobre o uso da Consulta federada do Amazon Athena para conectar um banco de dados MongoDB ao Amazon QuickSight
para criar painéis e visualizações, consulte Visualize dados do MongoDB do Amazon QuickSight usando a consulta federada Amazon Athena no Blog de Big Data da AWS. Para obter mais informações sobre esse conector, visite o site correspondente
em GitHub.com.