Conector do DocumentDB no Amazon Athena - Amazon Athena

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

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

  • 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 ou um endpoint da VPC para se conectar ao Secrets Manager.

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 <username>:<password>. Os segredos armazenados como {username:<username>,password:<password>} não serão passados corretamente para a string de conexão.

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
  1. Usando o console do AWS Glue para editar o banco de dados, defina a propriedade URI do banco de dados para incluir docdb-metadata-flag.

  2. Usando o console do AWS Glue para editar a tabela, adicione também docdb-metadata-flag como uma propriedade da tabela. Essa propriedade indica ao conector do DocumentDB que o conector pode usar a tabela para metadados complementares. É possível fornecer qualquer valor para docdb-metadata-flag, desde que a propriedade docdb-metadata-flag esteja presente na lista de propriedades da tabela.

  3. (Opcional) Adicione a propriedade de tabela sourceTable. Essa propriedade define o nome da tabela de origem no Amazon DocumentDB. Use essa propriedade 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 Amazon DocumentDB. 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.

  4. (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 formato col1=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 ambiente disable_projection_and_casing do Lambda.

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