Criar tabelas de objetos
Neste documento, descrevemos como acessar dados não estruturados no BigQuery criando uma tabela de objetos.
Para criar uma tabela de objetos, conclua as seguintes tarefas:
- Crie uma conexão para ler informações do objeto do Cloud Storage.
- Conceda permissão para ler informações do Cloud Storage na conta de serviço associada à conexão.
- Crie e associe a tabela de objetos à conexão usando a
instrução
CREATE EXTERNAL TABLE
.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
- Verifique se o administrador do BigQuery criou uma conexão e configurou o acesso ao Cloud Storage.
Funções exigidas
Para trabalhar com tabelas de objetos, seus usuários precisam das seguintes permissões do IAM com base no papel na organização. Para mais informações sobre papéis do usuário, consulte Modelo de segurança. Para mais informações sobre como conceder permissões, consulte Como visualizar os papéis atribuíveis em recursos.
Administrador do data lake
Para receber as permissões necessárias para se conectar ao Cloud Storage, peça ao administrador para conceder a você o papel de Administrador de conexão do BigQuery (
roles/bigquery.connectionAdmin
) no projeto.Para receber as permissões necessárias para criar e gerenciar buckets do Cloud Storage, peça ao administrador para conceder a você o papel de Administrador do Storage (
roles/storage.admin
) no projeto.Esse papel predefinido contém as permissões necessárias para se conectar ao Cloud Storage e criar e gerenciar buckets dele. Para acessar as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
bigquery.connections.create
bigquery.connections.get
bigquery.connections.list
bigquery.connections.update
bigquery.connections.use
bigquery.connections.delete
storage.bucket.*
storage.object.*
Administrador de data warehouse
Para receber as permissões necessárias para criar tabelas de objetos, peça ao administrador para conceder a você os seguintes papéis no projeto:
- Papel de editor de dados do BigQuery (
roles/bigquery.dataEditor
). - Papel de administrador de conexão do BigQuery (
roles/bigquery.connectionAdmin
).
Esse papel predefinido contém as permissões necessárias para criar tabelas de objetos. Para acessar as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
bigquery.tables.create
bigquery.tables.update
bigquery.connections.delegate
- Papel de editor de dados do BigQuery (
Analista de dados
Para ter as permissões necessárias para consultar tabelas de objetos, peça ao administrador que conceda a você os seguintes papéis no projeto:
- Papel de leitor de dados do BigQuery (
roles/bigquery.dataViewer
) - Papel de usuário de conexão do BigQuery (
roles/bigquery.connectionUser
)
Esse papel predefinido contém as permissões necessárias para consultar tabelas de objetos. Para acessar as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
bigquery.jobs.create
bigquery.tables.get
bigquery.tables.getData
bigquery.readsessions.create
Essas permissões também podem ser concedidas com papéis personalizados ou outros papéis predefinidos.
- Papel de leitor de dados do BigQuery (
Criar tabelas de objetos
Antes de criar uma tabela de objetos, é necessário ter um conjunto de dados para conter a tabela. Para mais informações, consulte Como criar conjuntos de dados.
Para criar uma tabela de objetos:
SQL
Use a
instrução CREATE EXTERNAL TABLE
.
No Console do Google Cloud, acesse a página BigQuery.
No editor de consultas, digite a seguinte instrução:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET_ID.TABLE_NAME` WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID` OPTIONS( object_metadata = 'SIMPLE', uris = ['BUCKET_PATH'[,...]], max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE');
Substitua:
PROJECT_ID
: o ID do projetoDATASET_ID
: o ID do conjunto de dados que vai conter a tabela de objetos.TABLE_NAME
: o nome da tabela de objetos.REGION
: a região ou multirregião que contém a conexão.CONNECTION_ID
: o ID da conexão de recursos da nuvem a ser usada com essa tabela de objetos. A conexão determina qual conta de serviço é usada para ler dados a partir do Cloud Storage.Quando você visualiza os detalhes da conexão no console do Google Cloud, esse é o valor na última seção do ID da conexão totalmente qualificado, mostrado em ID da conexão, por exemplo,
projects/myproject/locations/connection_location/connections/myconnection
.BUCKET_PATH
: o caminho para o bucket do Cloud Storage que contém os objetos representados pela tabela de objetos, no formato['gs://bucket_name/[folder_name/]*']
.É possível usar um caractere curinga de asterisco (
*
) em cada caminho para limitar os objetos incluídos na tabela de objetos. Por exemplo, se o bucket contiver vários tipos de dados não estruturados, crie a tabela de objetos usando apenas objetos PDF especificando['gs://bucket_name/*.pdf']
. Para mais informações, consulte Compatibilidade de caracteres curinga com URIs do Cloud Storage.É possível especificar vários buckets para a opção
uris
fornecendo vários caminhos, por exemplo,['gs://mybucket1/*', 'gs://mybucket2/folder5/*']
.Para mais informações sobre o uso de URIs do Cloud Storage no BigQuery, consulte Caminho do recurso do Cloud Storage.
STALENESS_INTERVAL
: especifica se os metadados em cache são usados pelas operações na tabela de objetos e se eles precisam ser atualizados para que possam ser usados pela operação. Para mais informações sobre considerações de armazenamento em cache de metadados, consulte Armazenamento em cache de metadados para desempenho.Para desativar o armazenamento em cache de metadados, especifique 0. Esse é o padrão.
Para ativar o armazenamento em cache de metadados, especifique um valor de literal de intervalo entre 30 minutos e 7 dias. Por exemplo, especifique
INTERVAL 4 HOUR
para um intervalo de inatividade de 4 horas. Com esse valor, as operações na tabela usarão metadados em cache se tiverem sido atualizados nas últimas 4 horas. Se os metadados em cache forem anteriores a isso, a operação recuperará os metadados do Cloud Storage.CACHE_MODE
: especifica se o cache de metadados é atualizado de forma automática ou manual. Para mais informações sobre considerações de armazenamento em cache de metadados, consulte Armazenamento em cache de metadados para desempenho.Defina como
AUTOMATIC
para que o cache de metadados seja atualizado em um intervalo definido pelo sistema, geralmente entre 30 e 60 minutos.Defina como
MANUAL
se quiser atualizar o cache de metadados com uma programação que você determinar. Nesse caso, chame o procedimento do sistemaBQ.REFRESH_EXTERNAL_METADATA_CACHE
para atualizar o cache.Defina
CACHE_MODE
seSTALENESS_INTERVAL
estiver definido como um valor maior que 0.
Clique em
Executar.
Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.
Exemplos
O exemplo a seguir cria uma tabela de objetos com um intervalo de inatividade do cache de metadados de 1 dia:
CREATE EXTERNAL TABLE `my_dataset.object_table` WITH CONNECTION `us.my-connection` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://mybucket/*'], max_staleness = INTERVAL 1 DAY, metadata_cache_mode = 'AUTOMATIC' );
O exemplo a seguir cria uma tabela de objetos sobre os objetos em três Buckets do Cloud Storage:
CREATE EXTERNAL TABLE `my_dataset.object_table` WITH CONNECTION `us.my-connection` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://bucket1/*','gs://bucket2/folder1/*','gs://bucket3/*'] );
O exemplo a seguir cria uma tabela de objetos apenas sobre os objetos PDF em um bucket do Cloud Storage:
CREATE EXTERNAL TABLE `my_dataset.object_table` WITH CONNECTION `us.my-connection` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://bucket1/*.pdf'] );
bq
Use o
comando bq mk
.
bq mk --table \ --external_table_definition=BUCKET_PATH@REGION.CONNECTION_ID \ --object_metadata=SIMPLE \ --max_staleness=STALENESS_INTERVAL \ --metadata_cache_mode=CACHE_MODE \ PROJECT_ID:DATASET_ID.TABLE_NAME
Substitua:
PROJECT_ID
: o ID do projetoDATASET_ID
: o ID do conjunto de dados que vai conter a tabela de objetos.TABLE_NAME
: o nome da tabela de objetos.REGION
: a região ou multirregião que contém a conexão.CONNECTION_ID
: o ID da conexão de recursos da nuvem a ser usada com essa tabela externa. A conexão determina qual conta de serviço é usada para ler dados a partir do Cloud Storage.Quando você visualiza os detalhes da conexão no console do Google Cloud, esse é o valor na última seção do ID da conexão totalmente qualificado, mostrado em ID da conexão, por exemplo,
projects/myproject/locations/connection_location/connections/myconnection
.BUCKET_PATH
: o caminho para o bucket do Cloud Storage que contém os objetos representados pela tabela de objetos, no formatogs://bucket_name/[folder_name/]*
.É possível usar um caractere curinga de asterisco (
*
) em cada caminho para limitar os objetos incluídos na tabela de objetos. Por exemplo, se o bucket contiver vários tipos de dados não estruturados, crie a tabela de objetos usando apenas objetos PDF especificandogs://bucket_name/*.pdf
. Para mais informações, consulte Compatibilidade de caracteres curinga com URIs do Cloud Storage.É possível especificar vários buckets para a opção
uris
fornecendo vários caminhos, por exemplo,gs://mybucket1/*,gs://mybucket2/folder5/*
.Para mais informações sobre o uso de URIs do Cloud Storage no BigQuery, consulte Caminho do recurso do Cloud Storage.
STALENESS_INTERVAL
: especifica se os metadados em cache são usados pelas operações na tabela de objetos e se eles precisam ser atualizados para que possam ser usados pela operação. Para mais informações sobre considerações de armazenamento em cache de metadados, consulte Armazenamento em cache de metadados para desempenho.Para desativar o armazenamento em cache de metadados, especifique 0. Esse é o padrã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 inatividade de quatro horas. Com esse valor, as operações na tabela usarão metadados em cache se tiverem sido atualizados nas últimas 4 horas. Se os metadados em cache forem anteriores a isso, a operação recuperará os metadados do Cloud Storage.CACHE_MODE
: especifica se o cache de metadados é atualizado de forma automática ou manual. Para mais informações sobre considerações de armazenamento em cache de metadados, consulte Armazenamento em cache de metadados para desempenho.Defina como
AUTOMATIC
para que o cache de metadados seja atualizado em um intervalo definido pelo sistema, geralmente entre 30 e 60 minutos.Defina como
MANUAL
se quiser atualizar o cache de metadados com uma programação que você determinar. Nesse caso, chame o procedimento do sistemaBQ.REFRESH_EXTERNAL_METADATA_CACHE
para atualizar o cache.Defina
CACHE_MODE
seSTALENESS_INTERVAL
estiver definido como um valor maior que 0.
Exemplos
O exemplo a seguir cria uma tabela de objetos com um intervalo de inatividade do cache de metadados de 1 dia:
bq mk --table \ --external_table_definition=gs://mybucket/*@us.my-connection \ --object_metadata=SIMPLE \ --max_staleness=0-0 1 0:0:0 \ --metadata_cache_mode=AUTOMATIC \ my_dataset.object_table
O exemplo a seguir cria uma tabela de objetos sobre os objetos em três Buckets do Cloud Storage:
bq mk --table \ --external_table_definition=gs://bucket1/*,gs://bucket2/folder1/*,gs://bucket3/*@us.my-connection \ --object_metadata=SIMPLE \ my_dataset.object_table
O exemplo a seguir cria uma tabela de objetos apenas sobre os objetos PDF em um bucket do Cloud Storage:
bq mk --table \ --external_table_definition=gs://bucket1/*.pdf@us.my-connection \ --object_metadata=SIMPLE \ my_dataset.object_table
API
Chame o
método tables.insert
.
Inclua um
objeto ExternalDataConfiguration
com o campo objectMetadata
definido como SIMPLE
no
recurso Table
que você transmitir.
O exemplo a seguir mostra como chamar esse método usando curl
:
ACCESS_TOKEN=$(gcloud auth print-access-token) curl \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-X POST \
-d '{"tableReference": {"projectId": "my_project", "datasetId": "my_dataset", "tableId": "object_table_name"}, "externalDataConfiguration": {"objectMetadata": "SIMPLE", "sourceUris": ["gs://mybucket/*"]}}' \
https://www.googleapis.com/bigquery/v2/projects/my_project/datasets/my_dataset/tables
Terraform
Neste exemplo, criamos uma tabela de objetos com o armazenamento em cache de metadados ativado com atualização manual.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Os principais campos a serem especificados para uma tabela de objetos são:
google_bigquery_table.external_data_configuration.object_metadata
,
google_bigquery_table.external_data_configuration.metadata_cache_mode
e google_bigquery_table.max_staleness
de dois minutos. Para mais informações sobre cada recurso, consulte a documentação do Terraform no BigQuery.
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
- Inicie o Cloud Shell.
-
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.
-
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 demain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
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.
- Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
- Salve as alterações.
-
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
-
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.
-
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!".
- 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.
Consultar tabelas de objetos
É possível consultar uma tabela de objetos como qualquer outro BigQuery, por exemplo:
SELECT * FROM mydataset.myobjecttable;
Consultar uma tabela de objetos retorna metadados para eles. Para mais informações, consulte Esquema da tabela de objetos.
A seguir
- Saiba como executar inferência em tabelas de objetos de imagem.
- Saiba como analisar tabelas de objetos usando funções remotas.