Criar conjuntos de dados federados do AWS Glue

Neste documento, descrevemos como criar um conjunto de dados federado no BigQuery que está vinculado a um banco de dados existente no AWS Glue.

Um conjunto de dados federado é uma conexão entre o BigQuery e uma fonte de dados externa no nível do conjunto de dados. As tabelas em um conjunto de dados federado são preenchidas automaticamente com base nas tabelas na fonte de dados externa correspondente. Você pode consultar essas tabelas diretamente no BigQuery, mas não é possível fazer modificações, adições ou exclusões. No entanto, as atualizações feitas na fonte de dados externa são refletidas automaticamente no BigQuery.

Antes de começar

Verifique se você tem uma conexão para acessar os dados do AWS Glue.

  • Para criar ou modificar uma conexão, siga as instruções em Conectar-se ao Amazon S3. Ao criar essa conexão, inclua a seguinte declaração de política para o AWS Glue na sua política do Identity and Access Management do AWS para BigQuery. Inclua essa instrução, além das outras permissões, no bucket do Amazon S3 em que os dados nas tabelas do AWS Glue estão armazenados.

    {
     "Effect": "Allow",
     "Action": [
       "glue:GetDatabase",
       "glue:GetTable",
       "glue:GetTables",
       "glue:GetPartitions"
     ],
     "Resource": [
       "arn:aws:glue:REGION:ACCOUNT_ID:catalog",
       "arn:aws:glue:REGION:ACCOUNT_ID:database/DATABASE_NAME",
       "arn:aws:glue:REGION:ACCOUNT_ID:table/DATABASE_NAME/*"
     ]
    }

    Substitua:

    • REGION: a região do AWS, por exemplo, us-east-1.
    • ACCOUNT_ID:: o ID da conta do AWS com 12 dígitos
    • DATABASE_NAME: o nome do banco de dados do AWS Glue

Permissões necessárias

Para receber as permissões necessárias a fim de criar um conjunto de dados federado, peça ao administrador para conceder a você o papel do IAM de Administrador do BigQuery (roles/bigquery.admin). Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Esse papel predefinido contém as permissões necessárias para criar um conjunto de dados federado. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:

Permissões necessárias

As permissões a seguir são necessárias para criar um conjunto de dados federado:

  • bigquery.datasets.create
  • bigquery.connections.use
  • bigquery.connections.delegate

Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.

Para mais informações sobre os papéis e as permissões do IAM no BigQuery, consulte Introdução ao IAM.

Criar um conjunto de dados federado

Para criar um conjunto de dados federado, faça o seguinte:

Console

  1. Abra a página do BigQuery no console do Google Cloud.

    Acesse a página do BigQuery

  2. No painel Explorador, selecione o projeto em que você quer criar o conjunto de dados.

  3. Expanda a opção Ações e clique em Criar conjunto de dados.

  4. Na página Criar conjunto de dados, faça o seguinte:

    • Em Código do conjunto de dados, digite um nome exclusivo.
    • Em Tipo de local, escolha um local da AWS para o conjunto de dados, como aws-us-east-1. Depois que você cria um conjunto de dados, o local não pode ser alterado.
    • Em Conjunto de dados externo, faça o seguinte:

      • Marque a caixa ao lado de Vincular a um conjunto de dados externo.
      • Em Tipo de conjunto de dados externo, selecione AWS Glue.
      • Em Origem externa, insira aws-glue:// seguido pelo nome de recurso da Amazon (ARN) do banco de dados do AWS Glue. Por exemplo: aws-glue://arn:aws:glue:us-east-1:123456789:database/test_database.
      • Em ID da conexão, selecione a conexão da AWS.
    • Não altere as outras configurações.

  5. Clique em Criar conjunto de dados.

SQL

Use a instrução de linguagem de definição de dados (DDL) CREATE EXTERNAL SCHEMA:

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

    CREATE EXTERNAL SCHEMA DATASET_NAME
    WITH CONNECTION PROJECT_ID.CONNECTION_LOCATION.CONNECTION_NAME
      OPTIONS (
        external_source = 'AWS_GLUE_SOURCE',
        location = 'LOCATION');

    Substitua:

    • DATASET_NAME: o nome do novo conjunto de dados no BigQuery.
    • PROJECT_ID: o ID do projeto.
    • CONNECTION_LOCATION: o local da conexão do AWS, por exemplo, aws-us-east-1.
    • CONNECTION_NAME: o nome da conexão do AWS.
    • AWS_GLUE_SOURCE: o nome de recurso da Amazon (ARN, na sigla em inglês) do banco de dados do AWS Glue com um prefixo que identifica a origem. Por exemplo, aws-glue://arn:aws:glue:us-east-1:123456789:database/test_database.
    • LOCATION: o local do novo conjunto de dados no BigQuery. Por exemplo, aws-us-east-1. Depois de criar um conjunto de dados, não será possível alterar o local dele.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.

bq

Em um ambiente de linha de comando, crie um conjunto de dados usando o comando bq mk:

bq --location=LOCATION mk --dataset \
    --external_source aws-glue://AWS_GLUE_SOURCE \
    --connection_id PROJECT_ID.CONNECTION_LOCATION.CONNECTION_NAME \
    DATASET_NAME

Substitua:

  • LOCATION: o local do novo conjunto de dados no BigQuery. Por exemplo, aws-us-east-1. Depois de criar um conjunto de dados, não será possível alterar o local dele. É possível definir um valor de local padrão usando o arquivo .bigqueryrc.
  • AWS_GLUE_SOURCE: o nome de recurso da Amazon (ARN) do banco de dados do AWS Glue. Por exemplo, arn:aws:glue:us-east-1:123456789:database/test_database.
  • PROJECT_ID: o ID do projeto do BigQuery.
  • CONNECTION_LOCATION: o local da conexão do AWS, por exemplo, aws-us-east-1.
  • CONNECTION_NAME: o nome da conexão do AWS.
  • DATASET_NAME: o nome do novo conjunto de dados no BigQuery. Para criar um conjunto de dados em um projeto diferente do projeto padrão, adicione a ID do projeto ao nome do conjunto de dados no seguinte formato: PROJECT_ID:DATASET_NAME.

Terraform

Use o recurso google_bigquery_dataset.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

O seguinte exemplo cria um conjunto de dados federado do AWS Glue:

resource "google_bigquery_dataset" "dataset" {
  provider                    = google-beta
  dataset_id                  = "example_dataset"
  friendly_name               = "test"
  description                 = "This is a test description."
  location                    = "aws-us-east-1"

external_dataset_reference {
  external_source = "aws-glue://arn:aws:glue:us-east-1:999999999999:database/database"
  connection      = "projects/project/locations/aws-us-east-1/connections/connection"
  }
}

Para aplicar a configuração do Terraform em um projeto do Google Cloud, conclua as etapas nas seções a seguir.

Preparar o Cloud Shell

  1. Inicie o Cloud Shell.
  2. Defina o projeto padrão do Google Cloud em que você quer aplicar as configurações do Terraform.

    Você só precisa executar esse comando uma vez por projeto, e ele pode ser executado em qualquer diretório.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    As variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.

Preparar o diretório

Cada arquivo de configuração do Terraform precisa ter o próprio diretório, também chamado de módulo raiz.

  1. No Cloud Shell, crie um diretório e um novo arquivo dentro dele. O nome do arquivo precisa ter a extensão .tf, por exemplo, main.tf. Neste tutorial, o arquivo é chamado de main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Se você estiver seguindo um tutorial, poderá copiar o exemplo de código em cada seção ou etapa.

    Copie o exemplo de código no main.tf recém-criado.

    Se preferir, copie o código do GitHub. Isso é recomendado quando o snippet do Terraform faz parte de uma solução de ponta a ponta.

  3. Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
  4. Salve as alterações.
  5. Inicialize o Terraform. Você só precisa fazer isso uma vez por diretório.
    terraform init

    Opcionalmente, para usar a versão mais recente do provedor do Google, inclua a opção -upgrade:

    terraform init -upgrade

Aplique as alterações

  1. Revise a configuração e verifique se os recursos que o Terraform vai criar ou atualizar correspondem às suas expectativas:
    terraform plan

    Faça as correções necessárias na configuração.

  2. Para aplicar a configuração do Terraform, execute o comando a seguir e digite yes no prompt:
    terraform apply

    Aguarde até que o Terraform exiba a mensagem "Apply complete!".

  3. Abra seu projeto do Google Cloud para ver os resultados. No console do Google Cloud, navegue até seus recursos na IU para verificar se foram criados ou atualizados pelo Terraform.

API

Chame a função datasets.insert método com umrecurso do conjunto de dados definido e o externalDatasetReference campo para o banco de dados do AWS Glue.

Listar tabelas em um conjunto de dados federado

Se quiser listar as tabelas disponíveis para consulta no conjunto de dados federado, confira Como listar conjuntos de dados.

Receber informações de tabelas

Para informações sobre as tabelas no conjunto de dados federado, como detalhes de esquema, consulte Receber informações da tabela.

Controlar o acesso a tabelas

Para gerenciar o acesso às tabelas no conjunto de dados federado, consulte Controlar o acesso a recursos com o IAM.

A segurança no nível da linha, a segurança no nível da coluna e o mascaramento de dados também têm suporte para tabelas em conjuntos de dados federados.

Operações de esquema que podem invalidar políticas de segurança, como excluir um no AWS Glue, pode fazer com que os jobs falhem até que as políticas sejam atualizado. Além disso, se você excluir uma tabela no AWS Glue e recriar as políticas de segurança não serão mais aplicadas à tabela recriada.

Consultar dados do AWS Glue

Consultar tabelas em conjuntos de dados federados é igual a consultar tabelas em qualquer outro conjunto de dados do BigQuery.

É possível consultar tabelas do AWS Glue nos seguintes formatos:

  • CSV (compactado e descompactado)
  • JSON (compactado e descompactado)
  • Parquet
  • ORC
  • Avro
  • Iceberg

Detalhes do mapeamento de tabelas

Todas as tabelas que você concede acesso no banco de dados do AWS Glue aparecem como uma tabela equivalente no conjunto de dados do BigQuery.

Formato

O formato de cada tabela do BigQuery é determinado pelos seguintes campos da respectiva tabela do AWS Glue:

  • InputFormat (Table.StorageDescriptor.InputFormat)
  • OutputFormat (Table.StorageDescriptor.OutputFormat)
  • SerializationLib (Table.StorageDescriptor.SerdeInfo.SerializationLibrary)

A única exceção são as tabelas Iceberg, que usam o campo TableType (Table.Parameters["table_type"]).

Por exemplo, uma tabela do AWS Glue com os campos a seguir é mapeada para uma tabela ORC no BigQuery:

  • InputFormat = "org.apache.hadoop.hive.ql.io.orc.OrcInputFormat"
  • OutputFormat = "org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat"
  • SerializationLib = "org.apache.hadoop.hive.ql.io.orc.OrcSerde"

Local

O local de cada tabela do BigQuery é determinado pelos seguintes fatores:

  • Tabelas Iceberg: o campo Table.Parameters["metadata_location"] na tabela do AWS Glue
  • Tabelas não particionadas não Iceberg: o campo Table.StorageDescriptor.Location na tabela do AWS Glue
  • Tabelas particionadas não Iceberg: API AWS Glue GetSections

Outras propriedades

Além disso, algumas propriedades da tabela do AWS Glue são mapeadas automaticamente para opções específicas de formato no BigQuery:

Formato SerializationLib Valor da tabela do AWS Glue Opção do BigQuery
CSV LazySimpleSerDe Table.StorageDescriptor.SerdeInfo.Parameters["field.delim"] CsvOptions.fieldDelimiter
CSV LazySimpleSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] CsvOptions.encoding
CSV LazySimpleSerDe Table.StorageDescriptor.Parameters["skip.header.line.count"] CsvOptions.skipLeadingRows
CSV OpenCsvSerDe Table.StorageDescriptor.SerdeInfo.Parameters["separatorChar"] CsvOptions.fieldDelimiter
CSV OpenCsvSerDe Table.StorageDescriptor.SerdeInfo.Parameters["quoteChar"] CsvOptions.quote
CSV OpenCsvSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] CsvOptions.encoding
CSV OpenCsvSerDe Table.StorageDescriptor.Parameters["skip.header.line.count"] CsvOptions.skipLeadingRows
JSON Hive JsonSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] JsonOptions.encoding

Criar uma visualização em um conjunto de dados federado

Não é possível criar uma visualização em um conjunto de dados federado. No entanto, é possível criar uma visualização em um conjunto de dados padrão com base em uma tabela em um conjunto de dados federado. Para mais informações, consulte Criar visualizações.

Excluir um conjunto de dados federado

Excluir um conjunto de dados federado é igual a excluir qualquer outro conjunto de dados do BigQuery. Para mais informações, consulte Excluir conjuntos de dados.

Preços

Para informações sobre preços, consulte Preços do BigQuery Omni.

Limitações

  • Todas as limitações do BigQuery Omni são aplicáveis.
  • Não é possível adicionar, excluir ou atualizar dados ou metadados em tabelas em um conjunto de dados federado do AWS Glue.
  • Não é possível criar tabelas, visualizações ou visualizações materializadas em um conjunto de dados federado do AWS Glue.
  • As visualizações INFORMATION_SCHEMA não têm suporte.
  • Não há suporte para armazenamento em cache de metadados.
  • As configurações no nível do conjunto de dados relacionadas aos padrões de criação de tabelas não afetam os conjuntos de dados federados porque não é possível criar tabelas de modo manual.
  • O tipo de dados UNION do Apache Hive não dá suporte a tabelas Avro.

A seguir