Conector Google Cloud Storage para Amazon Athena - Amazon Athena

Conector Google Cloud Storage para Amazon Athena

O conector Google Cloud Storage para Amazon Athena permite que o Amazon Athena execute consultas em arquivos Parquet e CSV armazenados em um bucket do Google Cloud Storage (GCS). Depois de agrupar um ou mais arquivos Parquet ou CSV em uma pasta não particionada ou particionada em um bucket do GCS, você poderá organizá-los em uma tabela de banco de dados do AWS Glue.

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.

Para ver um artigo que mostra como usar o Athena para executar consultas em arquivos Parquet ou CSV em um bucket do GCS, consulte a postagem Use Amazon Athena to query data stored in Google Cloud Platform. no AWS Big Data Blog.

Pré-requisitos

Limitações

  • Não há suporte para operações de gravação de DDL.

  • Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte Cotas do Lambda no Guia do desenvolvedor do AWS Lambda.

  • Atualmente, o conector é compatível somente com o tipo VARCHAR de colunas de partição (string ou varchar em um esquema de tabela do AWS Glue). Outros tipos de campo de partição geram erros quando você os consulta no Athena.

Termos

Os termos a seguir estão relacionados ao conector GCS.

  • Manipulador: um manipulador Lambda que acessa seu bucket do GCS. Um manipulador pode ser para metadados ou para registros de dados.

  • Manipulador de metadados: um manipulador Lambda que recupera metadados do seu bucket do GCS.

  • Manipulador de registros: um manipulador Lambda que recupera registros de dados do seu bucket do GCS.

  • Manipulador composto: um manipulador Lambda que recupera tanto metadados quanto registros de dados do seu bucket do GCS.

Tipos de arquivos compatíveis

O conector GCS é compatível com os tipos de arquivo Parquet e CSV.

nota

Certifique-se de não colocar os arquivos CSV e Parquet no mesmo bucket ou caminho do GCS. Isso pode resultar em um erro de runtime se houver tentativa de ler os arquivos Parquet como CSV ou vice-versa.

Parâmetros

Use as variáveis de ambiente do Lambda apresentadas nesta seção para configurar o conector GCS.

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

  • secret_manager_gcp_creds_name: o nome do segredo no AWS Secrets Manager que contém suas credenciais do GCS no formato JSON (por exemplo, GoogleCloudPlatformCredentials).

Configuração de bancos de dados e tabelas no AWS Glue

Como a capacidade de inferência de esquema integrada do conector GCS é limitada, recomendamos que você use o AWS Glue para seus metadados. Os procedimentos a seguir mostram como criar um banco de dados e uma tabela do AWS Glue que você possa acessar a partir do Athena.

Criação de um banco de dados no AWS Glue

Você pode usar o console do AWS Glue para criar um banco de dados para uso com o conector GCS.

Para criar um banco de dados no AWS Glue
  1. Faça login no AWS Management Console e abra o console do AWS Glue em https://console.aws.amazon.com/glue/.

  2. Escolha Databases (Bancos de dados) no painel de navegação.

  3. Selecione Adicionar banco de dados.

  4. Em Name (Nome), insira um nome para o banco de dados que você deseja usar com o conector GCS.

  5. Em Local, especifique google-cloud-storage-flag. Esse local informa ao conector do GCS que o banco de dados do AWS Glue contém as tabelas para os dados do GCS para consulta no Athena. O conector reconhece bancos de dados no Athena que têm esse sinalizador e ignora bancos de dados que não o têm.

  6. Selecione Criar banco de dados.

Criar uma tabela no AWS Glue

Agora você pode criar uma tabela para o banco de dados. Ao criar uma tabela do AWS Glue para usar com o conector GCS, você deve especificar metadados adicionais.

Para criar uma tabela no console do AWS Glue
  1. No painel de navegação do console do AWS Glue, escolha Tables (Tabelas).

  2. Na página Tables (Tabelas), escolha Add table (Adicionar tabela).

  3. Na página Set table properties (Definir propriedades da tabela), insira as informações a seguir.

    • Name (Tabela): um nome exclusivo para a tabela.

    • Banco de dados: escolha o banco de dados do AWS Glue que você criou para o conector GCS.

    • Include path (Incluir caminho): Na seção Data store (Armazenamento de dados), em Include path (Incluir caminho), insira a localização do URI para GCS prefixada por gs:// (por exemplo, gs://gcs_table/data/). Se você tiver uma ou mais pastas de partição, não as inclua no caminho.

      nota

      Quando você insere um caminho de table que não é do s3:// tabela, o console do AWS Glue mostra um erro. Você pode ignorar esse erro. A tabela será criada com êxito.

    • Formato de dados: para Classification (Classificação), selecione CSV ou Parquet.

  4. Escolha Next (próximo).

  5. Na página Choose or define schema (Escolher ou definir esquema), definir um esquema de tabela é altamente recomendado, mas não obrigatório. Se você não definir um esquema, o conector GCS tentará inferir um esquema para você.

    Execute um destes procedimentos:

    • Se você quiser que o conector GCS tente inferir um esquema para você, escolha Next (Próximo) e, em seguida, escolha Create (Criar).

    • Para definir um esquema você mesmo, siga as etapas da próxima seção.

Definir um esquema de tabela no AWS Glue

Definir um esquema de tabela no AWS Glue requer mais etapas, mas oferece maior controle sobre o processo de criação da tabela.

Para definir um esquema para sua tabela no AWS Glue
  1. Na página Choose or define schema (Escolher ou definir esquema), escolha Add (Adicionar).

  2. Use a caixa de diálogo Add schema entry (Adicionar entrada de esquema) para fornecer um nome de coluna e um tipo de dados.

  3. Para designar a coluna como uma coluna de partição, selecione a opção Set as partition key (Definir como chave de partição).

  4. Escolha Save (Salvar) para salvar a alteração.

  5. Selecione Add (Adicionar) para adicionar outra coluna.

  6. Ao terminar de adicionar contas, escolha Next (Próximo).

  7. Na página Review and create (Revisar e criar), revise a configuração e selecione Create (Criar).

  8. Se o esquema contiver informações sobre partições, siga as etapas na próxima seção para adicionar um padrão de partição às propriedades da tabela em AWS Glue.

Adicionar um padrão de partição às propriedades da tabela no AWS Glue

Se seus buckets do GCS tiverem partições, você deverá adicionar o padrão de partição às propriedades da tabela no AWS Glue.

Para adicionar informações de partição às propriedades da tabela do AWS Glue
  1. Na página de detalhes da tabela que você criou em AWS Glue, escolha Actions (Ações), Edit table (Editar tabela).

  2. Na página Edit table (Editar tabela), role para baixo até a seção Table properties (Propriedades da tabela).

  3. Escolha Add (Adicionar) para adicionar uma chave de partição.

  4. Em Chave, digite partition.pattern. Essa chave define o padrão do caminho da pasta.

  5. Em Value (Valor), insira um padrão de caminho de pasta como StateName=${statename}/ZipCode=${zipcode}/, em que statename e zipcode delimitados por ${} são nomes de colunas de partição. O conector GCS é compatível com esquemas de partição Hive e não Hive.

  6. Quando terminar, escolha Salvar.

  7. Para visualizar as propriedades da tabela que você acabou de criar, escolha a guia Advanced properties (Propriedades avançadas).

Nesse ponto, você pode navegar até o console do Athena. O banco de dados e a tabela que você criou no AWS Glue estão disponíveis para consulta no Athena.

Suporte ao tipo de dados

As tabelas a seguir mostram os tipos de dados com suporte para CSV e Parquet.

CSV

Natureza dos dados Tipo de dados inferido
Os dados parecem um número BIGINT
Os dados parecem uma string VARCHAR
Os dados parecem de ponto flutuante (flutuante, duplo ou decimal) DOUBLE
Os dados parecem uma data Timestamp
Dados que contêm valores verdadeiros/falsos BOOL

Parquet

PARQUET Athena (Seta)
BINARY VARCHAR
BOOLEAN BOOL
DOUBLE DOUBLE
ENUM VARCHAR
FIXED_LEN_BYTE_ARRAY DECIMAL
FLOAT FLOAT (32 bits)
INT32
  1. INT32

  2. DATEDAY (quando o tipo lógico da coluna Parquet é DATE)

INT64
  1. INT64

  2. TIMESTAMP (quando o tipo lógico da coluna Parquet é TIMESTAMP)

INT96 Timestamp
MAP MAP
STRUCT STRUCT
LIST LIST

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

Performance

Quando o esquema da tabela contém campos de partição e a propriedade partition.pattern da tabela está configurada corretamente, você pode incluir o campo de partição na cláusula WHERE de suas consultas. Para essas consultas, o conector GCS usa as colunas de partição para refinar o caminho da pasta GCS e evitar a varredura de arquivos desnecessários nas pastas do GCS.

Para conjuntos de dados Parquet, selecionar um subconjunto de colunas resulta em menos dados sendo verificados. Isso geralmente resulta em um runtime de consulta mais curto quando a projeção de coluna é aplicada.

Para conjuntos de dados CSV, a projeção de colunas não é compatível e não reduz a quantidade de dados que estão sendo digitalizados.

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. O conector GCS examina mais dados para conjuntos de dados maiores do que para conjuntos de dados menores, independentemente da cláusula LIMIT aplicada. Por exemplo, a consulta SELECT * LIMIT 10000 examina mais dados em busca de um conjunto de dados subjacente maior do que de um menor.

Informações de licença

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo pom.xml desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo LICENSE.txt em GitHub.com.

Recursos adicionais

Para obter mais informações sobre esse conector, visite o site correspondente em GitHub.com.