Crie conjuntos de dados federados do AWS Glue
Este documento descreve como criar um conjunto de dados federado no BigQuery que esteja associado a uma base de dados existente no AWS Glue.
Um conjunto de dados federado é uma ligação entre o BigQuery e uma origem de dados externa ao nível do conjunto de dados. As tabelas num conjunto de dados federado são preenchidas automaticamente a partir das tabelas na origem de dados externa correspondente. Pode consultar estas tabelas diretamente no BigQuery, mas não pode fazer modificações, adições nem eliminações. No entanto, todas as atualizações que fizer na origem de dados externa são automaticamente refletidas no BigQuery.
Antes de começar
Certifique-se de que tem uma ligação para aceder aos dados do AWS Glue.
Para criar ou modificar uma associação, siga as instruções no artigo Ligar ao Amazon S3. Quando criar essa associação, inclua a seguinte declaração de política para o AWS Glue na sua política de gestão de identidade e de acesso da AWS para o BigQuery. Inclua esta declaração, além das outras autorizações no contentor do Amazon S3 onde os dados nas suas 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 o seguinte:
REGION
: a região da AWS, por exemplo,us-east-1
ACCOUNT_ID:
: o ID da conta da AWS de 12 dígitosDATABASE_NAME
: o nome da base de dados do AWS Glue
Autorizações necessárias
Para receber as autorizações de que precisa para criar um conjunto de dados federado, peça ao seu administrador para lhe conceder a função do IAM administrador do BigQuery (roles/bigquery.admin
).
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Esta função predefinida contém as autorizações necessárias para criar um conjunto de dados federado. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:
Autorizações necessárias
São necessárias as seguintes autorizações para criar um conjunto de dados federado:
-
bigquery.datasets.create
-
bigquery.connections.use
-
bigquery.connections.delegate
Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.
Para mais informações acerca das funções e autorizações do IAM no BigQuery, consulte o artigo Introdução ao IAM.
Crie um conjunto de dados federado
Para criar um conjunto de dados federado, faça o seguinte:
Consola
Abra a página do BigQuery na Google Cloud consola.
No painel Explorador, selecione o projeto onde quer criar o conjunto de dados.
Expanda a opção
Ações e clique em Criar conjunto de dados.Na página Criar conjunto de dados, faça o seguinte:
- Para ID do conjunto de dados, introduza um nome exclusivo para o conjunto de dados.
- Para Tipo de localização, escolha uma localização da AWS para o conjunto de dados, como
aws-us-east-1
. Depois de criar um conjunto de dados, não é possível alterar a localização. Para o conjunto de dados externo, faça o seguinte:
- Selecione a caixa junto a Associar a um conjunto de dados externo.
- Para Tipo de conjunto de dados externo, selecione
AWS Glue
. - Para Origem externa, introduza
aws-glue://
seguido do Nome do recurso da Amazon (ARN) da base de dados do AWS Glue, por exemplo,aws-glue://arn:aws:glue:us-east-1:123456789:database/test_database
. - Para ID da associação, selecione a sua associação da AWS.
Deixe as outras predefinições inalteradas.
Clique em Criar conjunto de dados.
SQL
Use a
CREATE EXTERNAL SCHEMA
declaração de linguagem de definição de dados (LDD).
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, introduza a seguinte declaração:
CREATE EXTERNAL SCHEMA DATASET_NAME WITH CONNECTION PROJECT_ID.CONNECTION_LOCATION.CONNECTION_NAME OPTIONS ( external_source = 'AWS_GLUE_SOURCE', location = 'LOCATION');
Substitua o seguinte:
DATASET_NAME
: o nome do seu novo conjunto de dados no BigQuery.PROJECT_ID
: o ID do seu projeto.CONNECTION_LOCATION
: a localização da sua ligação à AWS, por exemplo,aws-us-east-1
.CONNECTION_NAME
: o nome da sua ligação à AWS.AWS_GLUE_SOURCE
: o Amazon Resource Name (ARN) da base 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
: a localização do seu novo conjunto de dados no BigQuery, por exemplo,aws-us-east-1
. Depois de criar um conjunto de dados, não pode alterar a respetiva localização.
Clique em
Executar.
Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.
bq
Num ambiente de linha de comandos, 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 o seguinte:
LOCATION
: a localização do seu novo conjunto de dados no BigQuery, por exemplo,aws-us-east-1
. Depois de criar um conjunto de dados, não pode alterar a respetiva localização. Pode definir um valor de localização predefinido através do ficheiro.bigqueryrc
.AWS_GLUE_SOURCE
: o nome do recurso da Amazon (ARN) da base de dados do AWS Glue, por exemplo,arn:aws:glue:us-east-1:123456789:database/test_database
.PROJECT_ID
: o ID do seu projeto do BigQuery.CONNECTION_LOCATION
: a localização da sua ligação à AWS, por exemplo,aws-us-east-1
.CONNECTION_NAME
: o nome da sua ligação AWS.DATASET_NAME
: o nome do novo conjunto de dados no BigQuery. Para criar um conjunto de dados num projeto que não seja o seu projeto predefinido, adicione o ID do projeto ao nome do conjunto de dados no seguinte formato:PROJECT_ID
:DATASET_NAME
.
Terraform
Use o
google_bigquery_dataset
recurso.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
O exemplo seguinte 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 num Google Cloud projeto, conclua os passos nas secções seguintes.
Prepare o Cloud Shell
- Inicie o Cloud Shell.
-
Defina o Google Cloud projeto predefinido onde quer aplicar as suas configurações do Terraform.
Só tem de executar este comando uma vez por projeto e pode executá-lo em qualquer diretório.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
As variáveis de ambiente são substituídas se definir valores explícitos no ficheiro de configuração do Terraform.
Prepare o diretório
Cada ficheiro de configuração do Terraform tem de ter o seu próprio diretório (também denominado módulo raiz).
-
No Cloud Shell, crie um diretório e um novo ficheiro nesse diretório. O nome do ficheiro tem de ter a extensão
.tf
, por exemplo,main.tf
. Neste tutorial, o ficheiro é denominadomain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se estiver a seguir um tutorial, pode copiar o código de exemplo em cada secção ou passo.
Copie o exemplo de código para o ficheiro
main.tf
criado recentemente.Opcionalmente, copie o código do GitHub. Isto é recomendado quando o fragmento do Terraform faz parte de uma solução completa.
- Reveja e modifique os parâmetros de exemplo para aplicar ao seu ambiente.
- Guarde as alterações.
-
Inicialize o Terraform. Só tem de fazer isto uma vez por diretório.
terraform init
Opcionalmente, para usar a versão mais recente do fornecedor Google, inclua a opção
-upgrade
:terraform init -upgrade
Aplique as alterações
-
Reveja a configuração e verifique se os recursos que o Terraform vai criar ou
atualizar correspondem às suas expetativas:
terraform plan
Faça as correções necessárias à configuração.
-
Aplique a configuração do Terraform executando o seguinte comando e introduzindo
yes
no comando:terraform apply
Aguarde até que o Terraform apresente a mensagem "Apply complete!" (Aplicação concluída!).
- Abra o seu Google Cloud projeto para ver os resultados. Na Google Cloud consola, navegue para os seus recursos na IU para se certificar de que o Terraform os criou ou atualizou.
API
Chame o método
datasets.insert
com um recurso de conjunto de dados definido
e o campo externalDatasetReference
para a sua base de dados do AWS Glue.
Liste tabelas num conjunto de dados federado
Para listar as tabelas disponíveis para consulta no seu conjunto de dados federado, consulte o artigo Listar conjuntos de dados.
Obtenha informações da tabela
Para obter informações sobre as tabelas no seu conjunto de dados federado, como detalhes do esquema, consulte o artigo Obtenha informações sobre tabelas.
Controle o acesso às tabelas
Para gerir o acesso às tabelas no seu conjunto de dados federado, consulte o artigo Controlar o acesso aos recursos com a IAM.
A segurança ao nível da linha, a segurança ao nível da coluna e a ocultação de dados também são suportadas para tabelas em conjuntos de dados federados.
As operações de esquema que podem invalidar as políticas de segurança, como eliminar uma coluna no AWS Glue, podem fazer com que as tarefas falhem até que as políticas sejam atualizadas. Além disso, se eliminar uma tabela no AWS Glue e a recriar, as suas políticas de segurança deixam de se aplicar à 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.
Pode consultar tabelas do AWS Glue nos seguintes formatos:
- CSV (comprimido e não comprimido)
- JSON (comprimido e não comprimido)
- Parquet
- ORC
- Avro
- Icebergue
- Delta Lake
Detalhes do mapeamento de tabelas
Todas as tabelas às quais concede acesso na sua base de dados do AWS Glue aparecem como uma tabela equivalente no seu conjunto de dados do BigQuery.
Formato
O formato de cada tabela do BigQuery é determinado pelos seguintes campos da respetiva 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 seguintes campos é 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"
Localização
A localização de cada tabela do BigQuery é determinada pelo seguinte:
- Tabelas Iceberg: o campo
Table.Parameters["metadata_location"]
na tabela do AWS Glue - Tabelas não particionadas do Iceberg: o campo
Table.StorageDescriptor.Location
na tabela do AWS Glue - Tabelas particionadas não Iceberg: a API AWS Glue GetPartitions
Outras propriedades
Além disso, algumas propriedades da tabela do AWS Glue são mapeadas automaticamente para opções específicas do 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 |
Crie uma vista num conjunto de dados federado
Não pode criar uma vista num conjunto de dados federado. No entanto, pode criar uma vista num conjunto de dados padrão com base numa tabela num conjunto de dados federado. Para mais informações, consulte Crie visualizações de propriedade.
Elimine um conjunto de dados federado
A eliminação de um conjunto de dados federado é igual à eliminação de qualquer outro conjunto de dados do BigQuery. Para mais informações, consulte o artigo Elimine conjuntos de dados.
Preços
Para informações sobre os preços, consulte os preços do BigQuery Omni.
Limitações
- Aplicam-se todas as limitações do BigQuery Omni.
- Não pode adicionar, eliminar nem atualizar dados ou metadados em tabelas num conjunto de dados federado do AWS Glue.
- Não pode criar novas tabelas, vistas nem vistas materializadas num conjunto de dados federado do AWS Glue.
- As
INFORMATION_SCHEMA
visualizações não são suportadas. - O armazenamento em cache de metadados não é suportado.
- As definições ao nível do conjunto de dados relacionadas com as predefinições de criação de tabelas não afetam os conjuntos de dados federados porque não pode criar tabelas manualmente.
- O tipo de dados
UNION
do Apache Hive não é suportado para tabelas Avro. - Aplicam-se limitações de tabelas externas.
O que se segue?
- Saiba mais acerca do BigQuery Omni.
- Experimente o BigQuery Omni com o laboratório da AWS.