Crie tabelas externas do BigLake para o Cloud Storage
Este documento descreve como criar uma tabela do BigLake do Cloud Storage. Uma tabela do BigLake permite-lhe usar a delegação de acesso para consultar dados estruturados no Cloud Storage. A delegação de acesso desassocia o acesso à tabela do BigLake do acesso ao repositório de dados subjacente.
Antes de começar
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery Connection API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.Se quiser ler tabelas do BigLake a partir de motores de código aberto, como o Apache Spark, tem de ativar a API BigQuery Storage Read.
-
In the Google Cloud console, activate Cloud Shell.
Certifique-se de que tem um conjunto de dados do BigQuery.
Certifique-se de que a versão do Google Cloud SDK é a 366.0.0 ou posterior:
gcloud version
Se necessário, atualize o SDK do Google Cloud.
- Opcional: para o Terraform, é necessária a versão 4.25.0 ou posterior.
terraform-provider-google
As versões doterraform-provider-google
estão listadas no GitHub. Pode transferir a versão mais recente do Terraform a partir das transferências do HashiCorp Terraform.
- Opcional: para o Terraform, é necessária a versão 4.25.0 ou posterior.
Crie uma associação de recursos da nuvem ou configure uma associação predefinida à sua origem de dados externa. As associações requerem funções e autorizações adicionais. Para mais informações, consulte o artigo Crie uma ligação de recursos do Google Cloud e a vista geral da ligação predefinida.
bigquery.tables.create
bigquery.connections.delegate
Aceda à página do BigQuery.
No painel Explorador, expanda o projeto e selecione um conjunto de dados.
Expanda a opção
Ações e clique em Criar tabela.Na secção Origem, especifique os seguintes detalhes:
Em Criar tabela a partir de, selecione Google Cloud Storage
Para Selecionar ficheiro do contentor do GCS ou usar um padrão de URI, procure selecione um contentor e um ficheiro a usar ou escreva o caminho no formato
gs://bucket_name/[folder_name/]file_name
.Não pode especificar vários URIs na consola Google Cloud , mas pode selecionar vários ficheiros especificando um caráter universal (
*
). Por exemplo,gs://mybucket/file_name*
. Para mais informações, consulte o artigo Suporte de carateres universais para URIs do Cloud Storage.O contentor do Cloud Storage tem de estar na mesma localização que o conjunto de dados que contém a tabela que está a criar.
Em Formato de ficheiro, selecione o formato que corresponde ao seu ficheiro.
Na secção Destino, especifique os seguintes detalhes:
Para Projeto, escolha o projeto no qual criar a tabela.
Para Conjunto de dados, escolha o conjunto de dados no qual criar a tabela.
Em Tabela, introduza o nome da tabela que está a criar.
Para Tipo de tabela, selecione Tabela externa.
Selecione Criar uma tabela do BigLake com uma ligação de recursos da nuvem.
Para o ID da associação, selecione a associação que criou anteriormente.
Na secção Esquema, pode ativar a deteção automática de esquemas ou especificar manualmente um esquema se tiver um ficheiro de origem. Se não tiver um ficheiro de origem, tem de especificar manualmente um esquema.
Para ativar a deteção automática do esquema, selecione a opção Deteção automática.
Para especificar manualmente um esquema, desmarque a opção Deteção automática. Ative a opção Editar como texto e introduza o esquema de tabela como uma matriz JSON.
Para ignorar linhas com valores de colunas adicionais que não correspondem ao esquema, expanda a secção Opções avançadas e selecione Valores desconhecidos.
Clique em Criar tabela.
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, introduza a seguinte declaração:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH CONNECTION {`PROJECT_ID.REGION.CONNECTION_ID` | DEFAULT} OPTIONS ( format ="TABLE_FORMAT", uris = ['BUCKET_PATH'[,...]], max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE' );
Substitua o seguinte:
PROJECT_ID
: o nome do seu projeto no qual quer criar a tabela, por exemplo,myproject
DATASET
: o nome do conjunto de dados do BigQuery no qual quer criar a tabela, por exemplo,mydataset
EXTERNAL_TABLE_NAME
: o nome da tabela que quer criar, por exemplo,mytable
REGION
: a região que contém a ligação, por exemplo,us
CONNECTION_ID
: o ID de associação, por exemplo,myconnection
Quando vê os detalhes da associação na Google Cloud consola, o ID da associação é o valor na última secção do ID da associação totalmente qualificado que é apresentado em ID da associação, por exemplo
projects/myproject/locations/connection_location/connections/myconnection
.Para usar uma ligação predefinida, especifique
DEFAULT
em vez da string de ligação que contém PROJECT_ID.REGION.CONNECTION_ID.TABLE_FORMAT
: o formato da tabela que quer criar, por exemplo,PARQUET
Para mais informações sobre os formatos suportados, consulte as Limitações.
BUCKET_PATH
: o caminho para o contentor do Cloud Storage que contém os dados da tabela externa, no formato['gs://bucket_name/[folder_name/]file_name']
.Pode selecionar vários ficheiros do contentor especificando um caráter universal de asterisco (
*
) no caminho. Por exemplo,['gs://mybucket/file_name*']
. Para mais informações, consulte o artigo Suporte de carateres universais para URIs do Cloud Storage.Pode especificar vários contentores para a opção
uris
fornecendo vários caminhos.Os exemplos seguintes mostram valores
uris
válidos:['gs://bucket/path1/myfile.csv']
['gs://bucket/path1/*.csv']
['gs://bucket/path1/*', 'gs://bucket/path2/file00*']
Quando especifica valores
uris
que segmentam vários ficheiros, todos esses ficheiros têm de partilhar um esquema compatível.Para mais informações sobre a utilização de URIs do Cloud Storage no BigQuery, consulte o artigo Caminho de recurso do Cloud Storage.
STALENESS_INTERVAL
: especifica se as operações contra a tabela do BigLake usam metadados em cache e qual a atualização dos metadados em cache necessária para que a operação os use. Para mais informações sobre considerações relativas ao armazenamento em cache de metadados, consulte o artigo Armazenamento em cache de metadados para desempenho.Para desativar a colocação em cache de metadados, especifique 0. Esta é a predefinição.
Para ativar o armazenamento em cache de metadados, especifique um valor literal de intervalo entre 30 minutos e 7 dias. Por exemplo, especifique
INTERVAL 4 HOUR
para um intervalo de desatualização de 4 horas. Com este valor, as operações na tabela usam metadados em cache se tiverem sido atualizados nas últimas 4 horas. Se os metadados em cache forem mais antigos, a operação obtém os metadados do Cloud Storage.CACHE_MODE
: especifica se a cache de metadados é atualizada automaticamente ou manualmente. Para mais informações sobre considerações de colocação em cache de metadados, consulte Colocação em cache de metadados para desempenho.Definido como
AUTOMATIC
para que a cache de metadados seja atualizada a um intervalo definido pelo sistema, normalmente entre 30 e 60 minutos.Defina como
MANUAL
se quiser atualizar a cache de metadados de acordo com uma programação que determinar. Neste caso, pode chamar o procedimento do sistemaBQ.REFRESH_EXTERNAL_METADATA_CACHE
para atualizar a cache.Tem de definir
CACHE_MODE
seSTALENESS_INTERVAL
estiver definido como um valor superior a 0.
Clique em
Executar.CONNECTION_ID
: o ID da associação, por exemplo,myconnection
Quando vê os detalhes da associação na Google Cloud consola, o ID da associação é o valor na última secção do ID da associação totalmente qualificado que é apresentado em ID da associação, por exemplo
projects/myproject/locations/connection_location/connections/myconnection
.Para usar uma ligação predefinida, especifique
DEFAULT
em vez da string de ligação que contém PROJECT_ID.REGION.CONNECTION_ID.SOURCE_FORMAT
: o formato da origem de dados externa. Por exemplo,PARQUET
.BUCKET_PATH
: o caminho para o contentor do Cloud Storage que contém os dados da tabela, no formatogs://bucket_name/[folder_name/]file_pattern
.Pode selecionar vários ficheiros do contentor especificando um caráter universal (
*
) nofile_pattern
. Por exemplo,gs://mybucket/file00*.parquet
. Para mais informações, consulte o artigo Suporte de carateres universais para URIs do Cloud Storage.Pode especificar vários contentores para a opção
uris
fornecendo vários caminhos.Os exemplos seguintes mostram valores
uris
válidos:gs://bucket/path1/myfile.csv
gs://bucket/path1/*.parquet
gs://bucket/path1/file1*
,gs://bucket1/path1/*
Quando especifica valores
uris
que segmentam vários ficheiros, todos esses ficheiros têm de partilhar um esquema compatível.Para mais informações sobre a utilização de URIs do Cloud Storage no BigQuery, consulte o caminho de recurso do Cloud Storage.
DEFINITION_FILE
: o caminho para o ficheiro de definição da tabela no seu computador local.STALENESS_INTERVAL
: especifica se as operações contra a tabela do BigLake usam metadados em cache e qual a antiguidade máxima dos metadados em cache para que a operação os use. Para mais informações sobre considerações relativas ao armazenamento em cache de metadados, consulte o artigo Armazenamento em cache de metadados para desempenho.Para desativar a colocação em cache de metadados, especifique 0. Esta é a predefinição.
Para ativar o armazenamento em cache de metadados, especifique um valor de intervalo entre 30 minutos e 7 dias, usando o formato
Y-M D H:M:S
descrito na documentação do tipo de dadosINTERVAL
. Por exemplo, especifique0-0 0 4:0:0
para um intervalo de desatualização de 4 horas. Com este valor, as operações na tabela usam metadados em cache se tiverem sido atualizados nas últimas 4 horas. Se os metadados em cache forem mais antigos, a operação obtém os metadados do Cloud Storage.DATASET
: o nome do conjunto de dados do BigQuery no qual quer criar uma tabela. Por exemplo,mydataset
EXTERNAL_TABLE_NAME
: o nome da tabela que quer criar, por exemplo,mytable
SCHEMA
: o esquema da tabela do BigLakeSOURCE_FORMAT
: o formato da origem de dados externaPor exemplo,
CSV
.BUCKET_PATH
: o caminho para o contentor do Cloud Storage que contém os dados da tabela, no formatogs://bucket_name/[folder_name/]file_pattern
.Pode selecionar vários ficheiros do contentor especificando um caráter universal (
*
) nofile_pattern
. Por exemplo,gs://mybucket/file00*.parquet
. Para mais informações, consulte o artigo Suporte de carateres universais para URIs do Cloud Storage.Pode especificar vários contentores para a opção
uris
fornecendo vários caminhos.Os exemplos seguintes mostram valores
uris
válidos:gs://bucket/path1/myfile.csv
gs://bucket/path1/*.parquet
gs://bucket/path1/file1*
,gs://bucket1/path1/*
Quando especifica valores
uris
que segmentam vários ficheiros, todos esses ficheiros têm de partilhar um esquema compatível.Para mais informações sobre a utilização de URIs do Cloud Storage no BigQuery, consulte o caminho de recurso do Cloud Storage.
PROJECT_ID
: o nome do projeto no qual quer criar a tabela, por exemplo,myproject
REGION
: a região que contém a ligação,us
CONNECTION_ID
: o ID da associação, por exemplo,myconnection
Quando vê os detalhes da associação na Google Cloud consola, o ID da associação é o valor na última secção do ID da associação totalmente qualificado que é apresentado em ID da associação, por exemplo
projects/myproject/locations/connection_location/connections/myconnection
.Para usar uma ligação predefinida, especifique
DEFAULT
em vez da string de ligação que contém PROJECT_ID.REGION.CONNECTION_ID.DATASET_NAME
: o nome do conjunto de dados onde quer criar a tabela do BigLakeTABLE_NAME
: o nome da tabela do BigLakeSCHEMA
: o esquema da tabela do BigLake- 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.
-
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
-
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.
Aceda à página do BigQuery.
No painel Explorador, expanda o projeto e selecione um conjunto de dados.
Clique em
Ver ações e, de seguida, em Criar tabela. É apresentado o painel Criar tabela.Na secção Origem, especifique os seguintes detalhes:
Em Criar tabela a partir de, selecione Google Cloud Storage.
Indique o caminho para a pasta através de caracteres universais. Por exemplo,
my_bucket/my_files*
. A pasta tem de estar na mesma localização que o conjunto de dados que contém a tabela que quer criar, acrescentar ou substituir.Na lista Formato de ficheiro, selecione o tipo de ficheiro.
Selecione a caixa de verificação Particionamento de dados de origem e, de seguida, especifique os seguintes detalhes:
- Para Selecionar prefixo de URI de origem, introduza o prefixo de URI. Por exemplo,
gs://my_bucket/my_files
. - Opcional: para exigir um filtro de partição em todas as consultas para esta tabela, selecione a caixa de verificação Exigir filtro de partição. A exigência de um filtro de partição pode reduzir o custo e melhorar o desempenho. Para mais informações, consulte o artigo Exigir filtros de predicados em chaves de partição em consultas.
Na secção Modo de inferência de partição, selecione uma das seguintes opções:
- Inferir automaticamente tipos: defina o modo de deteção do esquema de partição como
AUTO
. - Todas as colunas são strings: defina o modo de deteção do esquema de partição como
STRINGS
. - Fornecer os meus próprios: defina o modo de deteção do esquema de partição como
CUSTOM
e introduza manualmente as informações do esquema para as chaves de partição. Para mais informações, consulte o artigo Forneça um esquema de chave de partição personalizado.
- Inferir automaticamente tipos: defina o modo de deteção do esquema de partição como
- Para Selecionar prefixo de URI de origem, introduza o prefixo de URI. Por exemplo,
Na secção Destino, especifique os seguintes detalhes:
- Para Projeto, selecione o projeto no qual quer criar a tabela.
- Em Conjunto de dados, selecione o conjunto de dados no qual quer criar a tabela.
- Para Tabela, introduza o nome da tabela que quer criar.
- Para Tipo de tabela, selecione Tabela externa.
- Selecione a caixa de verificação Criar uma tabela do BigLake com uma ligação de recursos da nuvem.
- Em ID da associação, selecione a associação que criou anteriormente.
Na secção Esquema, ative a deteção automática de esquemas selecionando a opção Deteção automática.
Para ignorar linhas com valores de colunas adicionais que não correspondem ao esquema, expanda a secção Opções avançadas e selecione Valores desconhecidos.
Clique em Criar tabela.
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, introduza a seguinte declaração:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH PARTITION COLUMNS ( PARTITION_COLUMN PARTITION_COLUMN_TYPE, ) WITH CONNECTION {`PROJECT_ID.REGION.CONNECTION_ID` | DEFAULT} OPTIONS ( hive_partition_uri_prefix = "HIVE_PARTITION_URI_PREFIX", uris=['FILE_PATH'], max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE', format ="TABLE_FORMAT" );
Substitua o seguinte:
PROJECT_ID
: o nome do seu projeto no qual quer criar a tabela, por exemplo,myproject
DATASET
: o nome do conjunto de dados do BigQuery no qual quer criar a tabela, por exemplo,mydataset
EXTERNAL_TABLE_NAME
: o nome da tabela que quer criar, por exemplo,mytable
PARTITION_COLUMN
: o nome da coluna de partiçãoPARTITION_COLUMN_TYPE
: o tipo da coluna de partiçãoREGION
: a região que contém a ligação, por exemplo,us
CONNECTION_ID
: o ID de associação, por exemplo,myconnection
Quando vê os detalhes da associação na consola Google Cloud , o ID da associação é o valor na última secção do ID da associação totalmente qualificado que é apresentado em ID da associação, por exemplo
projects/myproject/locations/connection_location/connections/myconnection
.Para usar uma ligação predefinida, especifique
DEFAULT
em vez da string de ligação que contém PROJECT_ID.REGION.CONNECTION_ID.HIVE_PARTITION_URI_PREFIX
: particionamento de colmeias prefixo do URI, por exemplo,gs://mybucket/
FILE_PATH
: caminho para a origem de dados da tabela externa que quer criar, por exemplo,gs://mybucket/*.parquet
STALENESS_INTERVAL
: especifica se as operações contra a tabela do BigLake usam metadados em cache e qual a atualização dos metadados em cache necessária para que a operação os use. Para mais informações sobre considerações relativas ao armazenamento em cache de metadados, consulte o artigo Armazenamento em cache de metadados para desempenho.Para desativar a colocação em cache de metadados, especifique 0. Esta é a predefinição.
Para ativar o armazenamento em cache de metadados, especifique um valor literal de intervalo entre 30 minutos e 7 dias. Por exemplo, especifique
INTERVAL 4 HOUR
para um intervalo de desatualização de 4 horas. Com este valor, as operações na tabela usam metadados em cache se tiverem sido atualizados nas últimas 4 horas. Se os metadados em cache forem mais antigos, a operação obtém os metadados do Cloud Storage.CACHE_MODE
: especifica se a cache de metadados é atualizada automaticamente ou manualmente. Para mais informações acerca das considerações sobre o armazenamento em cache de metadados, consulte Armazenamento em cache de metadados para desempenho.Definido como
AUTOMATIC
para que a cache de metadados seja atualizada a um intervalo definido pelo sistema, normalmente entre 30 e 60 minutos.Defina como
MANUAL
se quiser atualizar a cache de metadados de acordo com uma programação que determinar. Neste caso, pode chamar o procedimento do sistemaBQ.REFRESH_EXTERNAL_METADATA_CACHE
para atualizar a cache.Tem de definir
CACHE_MODE
seSTALENESS_INTERVAL
estiver definido como um valor superior a 0.TABLE_FORMAT
: o formato da tabela que quer criar, por exemplo,PARQUET
Clique em
Executar.- O esquema é detetado automaticamente.
- O intervalo de desatualização da cache de metadados para a tabela é de 1 dia.
- A cache de metadados é atualizada automaticamente.
- O esquema está especificado.
- O intervalo de desatualização da cache de metadados para a tabela é de 8 horas.
- A cache de metadados tem de ser atualizada manualmente.
SOURCE_FORMAT
: o formato da origem de dados externa. Por exemplo,CSV
.REGION
: a região que contém a ligação, por exemplo,us
.CONNECTION_ID
: o ID da associação, por exemplo,myconnection
.Quando vê os detalhes da associação na Google Cloud consola, o ID da associação é o valor na última secção do ID da associação totalmente qualificado que é apresentado em ID da associação, por exemplo
projects/myproject/locations/connection_location/connections/myconnection
.Para usar uma ligação predefinida, especifique
DEFAULT
em vez da string de ligação que contém PROJECT_ID.REGION.CONNECTION_ID.PARTITIONING_MODE
: o modo de partição do Hive. Use um dos seguintes valores:AUTO
: detetar automaticamente os nomes e os tipos das chaves.STRINGS
: converta automaticamente os nomes das chaves em strings.CUSTOM
: codifique o esquema de chaves no prefixo do URI de origem.
GCS_URI_SHARED_PREFIX
: o prefixo do URI de origem.BOOLEAN
: especifica se é necessário um filtro de predicado no momento da consulta. Esta flag é opcional. O valor predefinido éfalse
.CACHE_MODE
: especifica se a cache de metadados é atualizada automaticamente ou manualmente. Só tem de incluir esta sinalização se também planear usar a sinalização--max_staleness
no comandobq mk
subsequente para ativar o armazenamento em cache de metadados. Para mais informações sobre considerações relativas ao armazenamento em cache de metadados, consulte o artigo Armazenamento em cache de metadados para desempenho.Defina como
AUTOMATIC
para que a cache de metadados seja atualizada num intervalo definido pelo sistema, normalmente entre 30 e 60 minutos.Defina como
MANUAL
se quiser atualizar a cache de metadados de acordo com uma programação que determinar. Neste caso, pode chamar o procedimento do sistemaBQ.REFRESH_EXTERNAL_METADATA_CACHE
para atualizar a cache.Tem de definir
CACHE_MODE
seSTALENESS_INTERVAL
estiver definido como um valor superior a 0.GCS_URIS
: o caminho para a pasta do Cloud Storage, usando o formato de carateres universais.DEFINITION_FILE
: o caminho para o ficheiro de definição da tabela no seu computador local.DEFINITION_FILE
: o caminho para o ficheiro de definição da tabela.STALENESS_INTERVAL
: especifica se as operações contra a tabela do BigLake usam metadados em cache e qual a antiguidade máxima dos metadados em cache para que a operação os use. Se incluir esta flag, também tem de ter especificado um valor para a flag--metadata_cache_mode
no comandobq mkdef
anterior. Para mais informações sobre considerações de colocação em cache de metadados, consulte o artigo Colocação em cache de metadados para desempenho.Para desativar a colocação em cache de metadados, especifique 0. Esta é a predefinição.
Para ativar o armazenamento em cache de metadados, especifique um valor de intervalo entre 30 minutos e 7 dias, usando o formato
Y-M D H:M:S
descrito na documentação doINTERVAL
tipo de dados. Por exemplo, especifique0-0 0 4:0:0
para um intervalo de desatualização de 4 horas. Com este valor, as operações na tabela usam metadados em cache se tiverem sido atualizados nas últimas 4 horas. Se os metadados em cache forem mais antigos, a operação obtém os metadados do Cloud Storage.DATASET_NAME
: o nome do conjunto de dados que contém a tabela.TABLE_NAME
: o nome da tabela que está a criar.SCHEMA
: especifica um caminho para um ficheiro de esquema JSON, ou especifica o esquema no formuláriofield:data_type,field:data_type,...
. Para usar a deteção automática do esquema, omita este argumento.- 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.
-
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
-
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.
Para ver instruções sobre como configurar a segurança ao nível da coluna, consulte o guia de segurança ao nível da coluna.
Para ver instruções sobre como configurar a ocultação de dados, consulte o guia de ocultação de dados.
Para ver instruções sobre como configurar a segurança ao nível da linha, consulte o guia de segurança ao nível da linha.
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, introduza a seguinte declaração:
CREATE OR REPLACE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH CONNECTION {`REGION.CONNECTION_ID` | DEFAULT} OPTIONS( format ="TABLE_FORMAT", uris = ['BUCKET_PATH'], max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE' );
Substitua o seguinte:
PROJECT_ID
: o nome do projeto que contém a tabelaDATASET
: o nome do conjunto de dados que contém a tabelaEXTERNAL_TABLE_NAME
: o nome da tabelaREGION
: a região que contém a ligaçãoCONNECTION_ID
: o nome da ligação a usarPara usar uma associação predefinida, especifique
DEFAULT
em vez da string de associação que contémREGION.CONNECTION_ID
.TABLE_FORMAT
: o formato usado pela tabelaNão pode alterar esta opção quando atualiza a tabela.
BUCKET_PATH
: o caminho para o contentor do Cloud Storage que contém os dados da tabela externa, no formato['gs://bucket_name/[folder_name/]file_name']
.Pode selecionar vários ficheiros do contentor especificando um caráter universal de asterisco (
*
) no caminho. Por exemplo,['gs://mybucket/file_name*']
. Para mais informações, consulte o artigo Suporte de carateres universais para URIs do Cloud Storage.Pode especificar vários contentores para a opção
uris
fornecendo vários caminhos.Os exemplos seguintes mostram valores
uris
válidos:['gs://bucket/path1/myfile.csv']
['gs://bucket/path1/*.csv']
['gs://bucket/path1/*', 'gs://bucket/path2/file00*']
Quando especifica valores
uris
que segmentam vários ficheiros, todos esses ficheiros têm de partilhar um esquema compatível.Para mais informações sobre a utilização de URIs do Cloud Storage no BigQuery, consulte o artigo Caminho de recurso do Cloud Storage.
STALENESS_INTERVAL
: especifica se os metadados em cache são usados por operações na tabela e qual a atualidade dos metadados em cache para que a operação os usePara mais informações sobre considerações relativas ao armazenamento em cache de metadados, consulte o artigo Armazenamento em cache de metadados para desempenho.
Para desativar a colocação em cache de metadados, especifique 0. Esta é a predefinição.
Para ativar o armazenamento em cache de metadados, especifique um valor literal de intervalo entre 30 minutos e 7 dias. Por exemplo, especifique
INTERVAL 4 HOUR
para um intervalo de desatualização de 4 horas. Com este valor, as operações na tabela usam metadados em cache se tiverem sido atualizados nas últimas 4 horas. Se os metadados em cache forem mais antigos, a operação obtém os metadados do Cloud Storage.CACHE_MODE
: especifica se a cache de metadados é atualizada automaticamente ou manualmentePara mais informações sobre considerações de colocação em cache de metadados, consulte Colocação em cache de metadados para desempenho.
Definido como
AUTOMATIC
para que a cache de metadados seja atualizada a um intervalo definido pelo sistema, normalmente entre 30 e 60 minutos.Defina como
MANUAL
se quiser atualizar a cache de metadados de acordo com uma programação que determinar. Neste caso, pode chamar o procedimento do sistemaBQ.REFRESH_EXTERNAL_METADATA_CACHE
para atualizar a cache.Tem de definir
CACHE_MODE
seSTALENESS_INTERVAL
estiver definido como um valor superior a 0.
Clique em
Executar.Gere uma definição de tabela externa, que descreve os aspetos da tabela a alterar:
bq mkdef --connection_id=PROJECT_ID.REGION.CONNECTION_ID \ --source_format=TABLE_FORMAT \ --metadata_cache_mode=CACHE_MODE \ "BUCKET_PATH" > /tmp/DEFINITION_FILE
Substitua o seguinte:
PROJECT_ID
: o nome do projeto que contém a associaçãoREGION
: a região que contém a ligaçãoCONNECTION_ID
: o nome da associação a usarTABLE_FORMAT
: o formato usado pela tabela. Não pode alterar esta opção quando atualiza a tabela.CACHE_MODE
: especifica se a cache de metadados é atualizada automaticamente ou manualmente. Para mais informações sobre considerações relativas ao armazenamento em cache de metadados, consulte Armazenamento em cache de metadados para desempenho.Defina como
AUTOMATIC
para que a cache de metadados seja atualizada a um intervalo definido pelo sistema, normalmente entre 30 e 60 minutos.Defina como
MANUAL
se quiser atualizar a cache de metadados de acordo com um horário que determinar. Neste caso, pode chamar o procedimento do sistemaBQ.REFRESH_EXTERNAL_METADATA_CACHE
para atualizar a cache.Tem de definir
CACHE_MODE
seSTALENESS_INTERVAL
estiver definido como um valor superior a 0.BUCKET_PATH
: o caminho para o contentor de armazenamento na nuvem que contém os dados da tabela externa, no formatogs://bucket_name/[folder_name/]file_name
.Pode limitar os ficheiros selecionados do contentor especificando um caráter universal (
*
) no caminho. Por exemplo,gs://mybucket/file_name*
. Para mais informações, consulte o artigo Suporte de carateres universais para URIs do Cloud Storage.Pode especificar vários contentores para a opção
uris
fornecendo vários caminhos.Os exemplos seguintes mostram valores
uris
válidos:gs://bucket/path1/myfile.csv
gs://bucket/path1/*.csv
gs://bucket/path1/*,gs://bucket/path2/file00*
Quando especifica valores
uris
que segmentam vários ficheiros, todos esses ficheiros têm de partilhar um esquema compatível.Para mais informações sobre a utilização de URIs do Cloud Storage no BigQuery, consulte o caminho de recurso do Cloud Storage.
DEFINITION_FILE
: o nome do ficheiro de definição da tabela que está a criar.
Atualize a tabela com a nova definição de tabela externa:
bq update --max_staleness=STALENESS_INTERVAL \ --external_table_definition=/tmp/DEFINITION_FILE \ PROJECT_ID:DATASET.EXTERNAL_TABLE_NAME
Substitua o seguinte:
STALENESS_INTERVAL
: especifica se as operações contra a tabela usam metadados em cache e qual a antiguidade máxima dos metadados em cache para que a operação os use. Para mais informações sobre considerações de colocação em cache de metadados, consulte o artigo Colocação em cache de metadados para desempenho.Para desativar a colocação em cache de metadados, especifique 0. Esta é a predefinição.
Para ativar o armazenamento em cache de metadados, especifique um valor de intervalo entre 30 minutos e 7 dias, usando o formato
Y-M D H:M:S
descrito na documentação do tipo de dadosINTERVAL
. Por exemplo, especifique0-0 0 4:0:0
para um intervalo de desatualização de 4 horas. Com este valor, as operações na tabela usam metadados em cache se tiverem sido atualizados nas últimas 4 horas. Se os metadados em cache forem mais antigos, a operação obtém os metadados do Cloud Storage.DEFINITION_FILE
: o nome do ficheiro de definição da tabela que criou ou atualizou.PROJECT_ID
: o nome do projeto que contém a tabelaDATASET
: o nome do conjunto de dados que contém a tabelaEXTERNAL_TABLE_NAME
: o nome da tabela
- Saiba mais acerca do BigLake.
- Saiba mais sobre o Cloud Storage.
- Saiba como consultar dados dos Amazon Web Services (AWS).
- Saiba como consultar dados do Microsoft Azure.
Funções necessárias
Para criar uma tabela do BigLake, precisa das seguintes autorizações de gestão de identidade e acesso (IAM) do BigQuery:
A função predefinida de administrador do BigQuery (roles/bigquery.admin
) do
Identity and Access Management inclui estas autorizações.
Se não for um principal nesta função, peça ao seu administrador para lhe conceder acesso ou criar a tabela do BigLake por si.
Para mais informações sobre as funções e as autorizações de gestão de identidades e acessos no BigQuery, consulte o artigo Funções e autorizações predefinidas.
Consideração da localização
Quando usa o Cloud Storage para armazenar ficheiros de dados, pode melhorar o desempenho usando contentores de região única ou dupla região do Cloud Storage em vez de contentores multirregionais.
Crie tabelas BigLake em dados não particionados
Se já criou tabelas no BigQuery, o processo de criação de uma tabela do BigLake é semelhante. A sua tabela pode usar qualquer formato de ficheiro suportado pelo BigLake. Para mais informações, consulte Limitações.
Antes de criar uma tabela do BigLake, tem de ter um conjunto de dados e uma ligação de recursos da nuvem que possa aceder ao Cloud Storage.
Para criar uma tabela do BigLake, selecione uma das seguintes opções:
Consola
Depois de criar a tabela permanente, pode executar uma consulta na tabela como se fosse uma tabela nativa do BigQuery. Depois de a consulta ser concluída, pode exportar os resultados como ficheiros CSV ou JSON, guardar os resultados como uma tabela ou guardar os resultados no Google Sheets.
SQL
Use a
CREATE EXTERNAL TABLE
declaração DDL.
Pode especificar o esquema explicitamente ou usar a deteção automática de esquemas para inferir o esquema dos dados externos.
Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.
bq
Opção 1: ficheiro de definição da tabela
Use o comando bq mkdef
para criar um ficheiro de definição de tabela e, em seguida, transmita o caminho para
o comando bq mk
da seguinte forma:
bq mkdef \ --connection_id=CONNECTION_ID \ --source_format=SOURCE_FORMAT \ BUCKET_PATH > DEFINITION_FILE bq mk --table \ --external_table_definition=DEFINITION_FILE \ --max_staleness=STALENESS_INTERVAL \ PROJECT_ID:DATASET.EXTERNAL_TABLE_NAME \ SCHEMA
Substitua o seguinte:
Exemplo:
bq mkdef --connection_id=myconnection --metadata_cache_mode=CACHE_MODE --source_format=CSV 'gs://mybucket/*.csv' > mytable_def bq mk --table --external_table_definition=mytable_def='gs://mybucket/*.csv' --max_staleness=0-0 0 4:0:0 myproject:mydataset.mybiglaketable Region:STRING,Quarter:STRING,Total_sales:INTEGER
Para usar a deteção automática de esquemas, defina a flag --autodetect=true
no comando mkdef
e omita o esquema:
bq mkdef \ --connection_id=myconnection \ --metadata_cache_mode=CACHE_MODE \ --source_format=CSV --autodetect=true \ gs://mybucket/*.csv > mytable_def bq mk \ --table \ --external_table_definition=mytable_def=gs://mybucket/*.csv \ --max_staleness=0-0 0 4:0:0 \ myproject:mydataset.myexternaltable
Opção 2: definição de tabela inline
Em vez de criar um ficheiro de definição de tabela, pode transmitir a definição de tabela diretamente para o comando bq mk
.
Use o decorador @connection
para especificar a ligação a usar no final do indicador --external_table_definition
.
bq mk --table \ --external_table_definition=@SOURCE_FORMAT=BUCKET_PATH@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \ DATASET_NAME.TABLE_NAME \ SCHEMA
Substitua o seguinte:
Exemplo:
bq mk --table \ --external_table_definition=@CSV=gs://mybucket/*.parquet@projects/myproject/locations/us/connections/myconnection \ --max_staleness=0-0 0 4:0:0 \ myproject:mydataset.myexternaltable \ Region:STRING,Quarter:STRING,Total_sales:INTEGER
API
Chame o método tables.insert
da API e crie um
ExternalDataConfiguration
no recurso Table
que transmite.
Especifique a propriedade schema
ou defina a propriedade autodetect
como true
para ativar a deteção automática do esquema para
origens de dados suportadas.
Especifique a propriedade connectionId
para identificar a ligação a usar para se ligar ao Cloud Storage.
Terraform
Este exemplo cria uma tabela do BigLake em dados não particionados.
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.
Para aplicar a configuração do Terraform num Google Cloud projeto, conclua os passos nas secções seguintes.
Prepare o Cloud Shell
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).
Aplique as alterações
O BigLake suporta a deteção automática de esquemas. No entanto, se não tiver fornecido um esquema e não tiver sido concedido acesso à conta de serviço nos passos anteriores, estes passos falham com uma mensagem de acesso negado se tentar detetar automaticamente o esquema.
Crie tabelas BigLake em dados particionados do Apache Hive
Pode criar uma tabela BigLake para dados particionados do Hive no Cloud Storage. Depois de criar uma tabela particionada externamente, não pode alterar a chave de partição. Tem de recriar a tabela para alterar a chave de partição.
Para criar uma tabela do BigLake com base em dados particionados do Hive no Cloud Storage, selecione uma das seguintes opções:
Consola
SQL
Use a
CREATE EXTERNAL TABLE
declaração DDL:
Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.
Exemplos
O exemplo seguinte cria uma tabela do BigLake sobre dados particionados onde:
CREATE EXTERNAL TABLE `my_dataset.my_table` WITH PARTITION COLUMNS ( sku STRING, ) WITH CONNECTION `us.my-connection` OPTIONS( hive_partition_uri_prefix = "gs://mybucket/products", uris = ['gs://mybucket/products/*'], max_staleness = INTERVAL 1 DAY, metadata_cache_mode = 'AUTOMATIC' );
O exemplo seguinte cria uma tabela do BigLake sobre dados particionados onde:
CREATE EXTERNAL TABLE `my_dataset.my_table` ( ProductId INTEGER, ProductName STRING, ProductType STRING ) WITH PARTITION COLUMNS ( sku STRING, ) WITH CONNECTION `us.my-connection` OPTIONS( hive_partition_uri_prefix = "gs://mybucket/products", uris = ['gs://mybucket/products/*'], max_staleness = INTERVAL 8 HOUR, metadata_cache_mode = 'MANUAL' );
bq
Primeiro, use o comando
bq mkdef
para
criar um ficheiro de definição de tabela:
bq mkdef \ --source_format=SOURCE_FORMAT \ --connection_id=REGION.CONNECTION_ID \ --hive_partitioning_mode=PARTITIONING_MODE \ --hive_partitioning_source_uri_prefix=GCS_URI_SHARED_PREFIX \ --require_hive_partition_filter=BOOLEAN \ --metadata_cache_mode=CACHE_MODE \ GCS_URIS > DEFINITION_FILE
Substitua o seguinte:
Se PARTITIONING_MODE
for CUSTOM
, inclua o esquema da chave de partição no prefixo do URI de origem, usando o seguinte formato:
--hive_partitioning_source_uri_prefix=GCS_URI_SHARED_PREFIX/{KEY1:TYPE1}/{KEY2:TYPE2}/...
Depois de criar o ficheiro de definição da tabela, use o comando
bq mk
para
criar a tabela do BigLake:
bq mk --external_table_definition=DEFINITION_FILE \ --max_staleness=STALENESS_INTERVAL \ DATASET_NAME.TABLE_NAME \ SCHEMA
Substitua o seguinte:
Exemplos
O exemplo seguinte usa o modo de partição do AUTO
Hive e também
define a cache de metadados com um intervalo de desatualização de 12 horas e para ser
atualizada automaticamente:
bq mkdef --source_format=CSV \
--connection_id=us.my-connection \
--hive_partitioning_mode=AUTO \
--hive_partitioning_source_uri_prefix=gs://myBucket/myTable \
--metadata_cache_mode=AUTOMATIC \
gs://myBucket/myTable/* > mytable_def
bq mk --external_table_definition=mytable_def \
--max_staleness=0-0 0 12:0:0 \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
O exemplo seguinte usa o modo de partição do Hive STRING
:
bq mkdef --source_format=CSV \
--connection_id=us.my-connection \
--hive_partitioning_mode=STRING \
--hive_partitioning_source_uri_prefix=gs://myBucket/myTable \
gs://myBucket/myTable/* > mytable_def
bq mk --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
O exemplo seguinte usa o modo de partição do Hive CUSTOM
:
bq mkdef --source_format=CSV \
--connection_id=us.my-connection \
--hive_partitioning_mode=CUSTOM \
--hive_partitioning_source_uri_prefix=gs://myBucket/myTable/{dt:DATE}/{val:STRING} \
gs://myBucket/myTable/* > mytable_def
bq mk --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
API
Para definir a partição do Hive através da API BigQuery, inclua o objeto
hivePartitioningOptions
no objeto ExternalDataConfiguration
quando criar o ficheiro de definição de tabelas.
Para criar uma tabela do BigLake, também tem de especificar um valor para o campo connectionId
.
Se definir o campo hivePartitioningOptions.mode
como CUSTOM
, tem de codificar o esquema da chave de partição no campo hivePartitioningOptions.sourceUriPrefix
da seguinte forma: gs://BUCKET/PATH_TO_TABLE/{KEY1:TYPE1}/{KEY2:TYPE2}/...
Para aplicar a utilização de um filtro de predicado no momento da consulta, defina o campo hivePartitioningOptions.requirePartitionFilter
como true
.
Terraform
Este exemplo cria uma tabela do BigLake em dados particionados.
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.
Para aplicar a configuração do Terraform num Google Cloud projeto, conclua os passos nas secções seguintes.
Prepare o Cloud Shell
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).
Aplique as alterações
Configure políticas de controlo de acesso
Pode usar vários métodos para controlar o acesso a tabelas do BigLake:
Por exemplo, suponhamos que quer limitar o acesso a linhas para a tabela mytable
no conjunto de dados mydataset
:
+---------+---------+-------+ | country | product | price | +---------+---------+-------+ | US | phone | 100 | | JP | tablet | 300 | | UK | laptop | 200 | +---------+---------+-------+
Pode criar um filtro ao nível da linha para a Kim (kim@example.com
) que restringe o respetivo acesso a linhas em que country
é igual a US
.
CREATE ROW ACCESS POLICY only_us_filter ON mydataset.mytable GRANT TO ('user:kim@example.com') FILTER USING (country = 'US');
Em seguida, a Kim executa a seguinte consulta:
SELECT * FROM projectid.mydataset.mytable;
A saída mostra apenas as linhas em que country
é igual a US
:
+---------+---------+-------+ | country | product | price | +---------+---------+-------+ | US | phone | 100 | +---------+---------+-------+
Consultar tabelas do BigLake
Para mais informações, consulte o artigo Consultar dados do Cloud Storage em tabelas BigLake.
Atualize tabelas do BigLake
Pode atualizar as tabelas do BigLake, se necessário, por exemplo, para alterar a colocação em cache de metadados. Para obter detalhes da tabela, como o formato de origem e o URI de origem, consulte o artigo Obtenha informações da tabela.
Também pode usar este mesmo procedimento para atualizar tabelas externas baseadas no Cloud Storage para tabelas BigLake associando a tabela externa a uma ligação. Para mais informações, consulte o artigo Atualize tabelas externas para tabelas BigLake.
Para atualizar uma tabela do BigLake, selecione uma das seguintes opções:
SQL
Use a declaração DDL CREATE OR REPLACE EXTERNAL TABLE
para atualizar uma tabela:
Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.
bq
Use os comandos bq mkdef
e
bq update
para atualizar uma tabela:
Exemplo
O exemplo seguinte atualiza mytable
para usar metadados em cache, desde que tenham sido atualizados nas últimas 4,5 horas, e também para atualizar automaticamente os metadados em cache:
bq update --project_id=myproject --max_staleness='0-0 0 4:30:0' \
--external_table_definition=enable_metadata.json mydataset.mytable
Em que enable_metadata.json
tem o seguinte conteúdo:
json
{
"metadataCacheMode": "AUTOMATIC"
}
Registo de auditoria
Para informações sobre a registo no BigQuery, consulte o artigo Introdução à monitorização do BigQuery. Para saber mais sobre como iniciar sessão Google Cloud, consulte o Cloud Logging.