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, consulte Conectar-se ao Amazon S3 e inclua a seguinte declaração de política adicional para o AWS Glue na política do Identity and Access Management do AWS para o BigQuery:

    {
     "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 para criar um conjunto de dados federado, peça ao administrador para conceder a você o papel do IAM Administrador do BigQuery (roles/bigquery.admin). Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

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 papéis personalizados 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:

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.

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.

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

A seguir