Criar tabelas externas no Cloud Storage
Com o BigQuery, é possível realizar a consulta de dados do Cloud Storage nos seguintes formatos:
- Valores separados por vírgula (CSV, na sigla em inglês)
- JSON (delimitado por nova linha)
- Avro
- ORC
- Parquet
- Exportações do Datastore
- Exportações do Firestore
O BigQuery é compatível com a consulta de dados do Cloud Storage destas classes de armazenamento:
- Padrão
- Nearline
- Coldline
- Arquivar
Para consultar uma tabela externa do Cloud Storage, você precisa ter permissões na tabela externa e nos arquivos dele. Recomendamos o uso de uma tabela do BigLake, se possível. As tabelas do BigLake fornecem delegação de acesso. Assim, você só precisa de permissões na tabela do BigLake para consultar os dados do Cloud Storage.
Considere a localização do seu conjunto de dados e do bucket do Cloud Storage ao consultar dados armazenados nele.
Antes de começar
Atribua papéis do Identity and Access Management (IAM) que concedam aos usuários as permissões necessárias para realizar cada tarefa deste documento. As permissões necessárias para executar uma tarefa (se houver) são listadas na seção "Permissões necessárias".
Funções exigidas
Para criar uma tabela externa, você precisa da permissão bigquery.tables.create
do BigQuery Identity and Access Management (IAM).
Cada um dos seguintes papéis predefinidos do Identity and Access Management inclui esta permissão:
- Editor de dados do BigQuery (
roles/bigquery.dataEditor
) - Proprietário de dados do BigQuery (
roles/bigquery.dataOwner
) - Administrador do BigQuery (
roles/bigquery.admin
)
Você também precisa das seguintes permissões para acessar o bucket do Cloud Storage que contém seus dados:
storage.buckets.get
storage.objects.get
storage.objects.list
(obrigatório se você estiver usando um caractere curinga de URI)
O papel predefinido de gerenciamento de identidade e acesso do Cloud Storage (roles/storage.admin
)
inclui essas permissões.
Se você não for um principal em qualquer um desses papéis, peça ao administrador para conceder acesso a você ou criar a tabela externa para você.
Para mais informações sobre os papéis e as permissões do Identity and Access Management no BigQuery, consulte Papéis e permissões predefinidos.
Escopos de acesso a instâncias do Compute Engine
Em uma instância do Compute Engine, se você precisar consultar uma tabela externa
vinculada a uma origem do Cloud Storage, ela precisará ter pelo menos o
escopo de acesso somente leitura do Cloud Storage
(https://www.googleapis.com/auth/devstorage.read_only
).
Os escopos controlam o acesso da instância do Compute Engine aos produtos do Google Cloud, incluindo o Cloud Storage. Os aplicativos executados na instância usam a conta de serviço anexada à instância para chamar APIs do Google Cloud.
Por padrão, se você configurar uma instância do Compute Engine para ser executada como a
conta de serviço padrão do Compute Engine,
ela terá vários escopos padrão,
incluindo o escopo https://www.googleapis.com/auth/devstorage.read_only
.
Se, em vez disso, você configurar a instância com uma conta de serviço personalizada,
conceda explicitamente o escopo
https://www.googleapis.com/auth/devstorage.read_only
à instância.
Para mais informações sobre como aplicar escopos a uma instância do Compute Engine, consulte Como alterar a conta de serviço e os escopos de acesso de uma instância. Acesse Contas de serviço para saber mais sobre esse tipo de conta do Compute Engine.
Criar tabelas externas em dados não particionados
É possível criar uma tabela permanente vinculada à sua fonte de dados externa da seguinte forma:
- Como usar o console do Google Cloud
- Usando o comando
bq mk
. - Criando um
ExternalDataConfiguration
ao usar o método de APItables.insert
- Executando a instrução da linguagem de definição de dados (DDL, na sigla em inglês)
CREATE EXTERNAL TABLE
. - Como usar bibliotecas de cliente
Selecione uma das seguintes opções:
Console
Acessar a página do BigQuery.
No painel Explorer, expanda o projeto e selecione um conjunto de dados.
Expanda a opção
Ações e clique em Criar tabela.Na seção Origem, especifique os seguintes campos:
Em Criar tabela de, selecione Google Cloud Storage.
Em Selecionar arquivo do bucket do GCS ou usar um padrão de URI, procure para selecionar um bucket e um arquivo a ser usado ou digite o caminho no formato
gs://bucket_name/[folder_name/]file_name
.Não é possível especificar vários URIs no console do Google Cloud, mas é possível selecionar vários arquivos especificando um caractere curinga de asterisco (
*
). Por exemplo,gs://mybucket/file_name*
. Para mais informações, consulte Compatibilidade de caracteres curinga com URIs do Cloud Storage.O bucket do Cloud Storage precisa estar no mesmo local que o conjunto de dados que contém a tabela que você está criando.
Em Formato do arquivo, selecione o formato que corresponde ao seu arquivo.
Na seção Destino, especifique os seguintes detalhes:
Em Projeto, selecione o projeto em que a tabela será criada.
Em Conjunto de dados, selecione o conjunto de dados em que a tabela será criada.
Em Tabela, insira o nome da tabela que você está criando.
Em Tipo de tabela, selecione Tabela externa.
Na seção Esquema, é possível ativar a detecção automática de esquema ou especificar manualmente um esquema se você tiver um arquivo de origem. Se você não tiver um arquivo de origem, especifique um esquema manualmente.
Para ativar a detecção automática de esquema, selecione a opção Detectar automaticamente.
Para especificar um esquema manualmente, deixe a opção Detectar automaticamente desmarcada. Ative Editar como texto e insira o esquema da tabela como uma matriz JSON.
Para ignorar linhas com valores de coluna extras que não correspondem ao esquema, expanda a seção Opções avançadas e selecione Valores desconhecidos.
Clique em Criar tabela.
Após a criação da tabela permanente, é possível executar uma consulta na tabela como se ela fosse nativa do BigQuery. Após a conclusão da consulta, será possível exportar os resultados como arquivos CSV ou JSON, salvá-los como uma tabela ou nas Planilhas Google.
SQL
É possível criar uma tabela externa permanente executando a instrução DDL CREATE EXTERNAL TABLE
.
É possível especificar o esquema explicitamente ou usar a
detecção automática de esquema para inferir o esquema
a partir dos dados externos.
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.EXTERNAL_TABLE_NAME` OPTIONS ( format ="TABLE_FORMAT", uris = ['BUCKET_PATH'[,...]] );
Substitua:
PROJECT_ID
: o nome do projeto em que você quer criar a tabela, por exemplo,myproject
DATASET
: o nome do conjunto de dados do BigQuery em que você quer criar a tabela (por exemplo,mydataset
)EXTERNAL_TABLE_NAME
: o nome da tabela que você quer criar, por exemplo,mytable
TABLE_FORMAT
: o formato da tabela que você quer criar, por exemplo,PARQUET
BUCKET_PATH
: o caminho para o bucket do Cloud Storage que contém os dados da tabela externa, no formato['gs://bucket_name/[folder_name/]file_name']
.É possível selecionar vários arquivos do bucket especificando um caractere curinga de asterisco (
*
) no caminho. Por exemplo,['gs://mybucket/file_name*']
. 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 múltiplos caminhos.Os exemplos a seguir mostram valores
uris
válidos:['gs://bucket/path1/myfile.csv']
['gs://bucket/path1/*.csv']
['gs://bucket/path1/*', 'gs://bucket/path2/file00*']
Quando você especifica valores
uris
voltados para vários arquivos, todos eles precisam compartilhar um esquema compatível.Para mais informações sobre o uso de URIs do Cloud Storage no BigQuery, consulte Caminho do recurso do Cloud Storage.
Clique em
Executar.
Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.
Exemplos
No exemplo a seguir, a detecção automática de esquema é usada para criar uma tabela externa chamada sales
vinculada a um arquivo CSV armazenado no Cloud Storage:
CREATE OR REPLACE EXTERNAL TABLE mydataset.sales OPTIONS ( format = 'CSV', uris = ['gs://mybucket/sales.csv']);
O próximo exemplo especifica um esquema explicitamente e ignora a primeira linha no arquivo CSV:
CREATE OR REPLACE EXTERNAL TABLE mydataset.sales ( Region STRING, Quarter STRING, Total_Sales INT64 ) OPTIONS ( format = 'CSV', uris = ['gs://mybucket/sales.csv'], skip_leading_rows = 1);
bq
Para criar uma tabela externa, use o
comando bq mk
com a
sinalização
--external_table_definition
. Essa sinalização contém um caminho para um
arquivo de definição de tabelas ou uma definição de tabela
in-line.
Opção 1: arquivo de definição da tabela
Use o comando
bq mkdef
para criar um arquivo de definição de tabela e, em seguida, transmita o caminho do arquivo para
o comando bq mk
da seguinte maneira:
bq mkdef --source_format=SOURCE_FORMAT \ BUCKET_PATH > DEFINITION_FILE bq mk --table \ --external_table_definition=DEFINITION_FILE \ DATASET_NAME.TABLE_NAME \ SCHEMA
Substitua:
SOURCE_FORMAT
: o formato da fonte de dados externa, por exemplo,CSV
.BUCKET_PATH
: o caminho para o bucket do Cloud Storage que contém os dados da tabela, no formatogs://bucket_name/[folder_name/]file_pattern
.É possível selecionar vários arquivos do bucket especificando um caractere curinga de asterisco (
*
) nofile_pattern
. Por exemplo,gs://mybucket/file00*.parquet
. Para mais informações, consulte Suporte a caracteres curinga para URIs do Cloud Storage.É possível especificar vários buckets para a opção
uris
fornecendo múltiplos caminhos.Os exemplos a seguir mostram valores
uris
válidos:gs://bucket/path1/myfile.csv
gs://bucket/path1/*.parquet
gs://bucket/path1/file1*
,gs://bucket1/path1/*
Quando você especifica valores
uris
voltados para vários arquivos, todos eles precisam compartilhar um esquema compatível.Para mais informações sobre o uso de URIs do Cloud Storage no BigQuery, consulte Caminho do recurso do Cloud Storage.
DEFINITION_FILE
: o caminho para o arquivo de definição de tabelas na máquina local.DATASET_NAME
: o nome do conjunto de dados onde está a tabelaTABLE_NAME
: o nome da tabela que você está criando;SCHEMA
especifica um caminho para um arquivo de esquema JSON ou especifica o esquema no formatofield:data_type,field:data_type,...
.
Exemplo:
bq mkdef --source_format=CSV gs://mybucket/sales.csv > mytable_def
bq mk --table --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
Para usar a detecção automática de esquema, defina a sinalização --autodetect=true
no
comando mkdef
e omita o esquema:
bq mkdef --source_format=CSV --autodetect=true \
gs://mybucket/sales.csv > mytable_def
bq mk --table --external_table_definition=mytable_def \
mydataset.mytable
Opção 2: definição da tabela in-line
Em vez de criar um arquivo de definição de tabela, é possível transmitir a definição
da tabela diretamente para o comando bq mk
:
bq mk --table \ --external_table_definition=@SOURCE_FORMAT=BUCKET_PATH \ DATASET_NAME.TABLE_NAME \ SCHEMA
Substitua:
SOURCE_FORMAT
: o formato da fonte de dados externa.Por exemplo,
CSV
.BUCKET_PATH
: o caminho para o bucket do Cloud Storage que contém os dados da tabela, no formatogs://bucket_name/[folder_name/]file_pattern
.É possível selecionar vários arquivos do bucket especificando um caractere curinga de asterisco (
*
) nofile_pattern
. Por exemplo,gs://mybucket/file00*.parquet
. Para mais informações, consulte Suporte a caracteres curinga para URIs do Cloud Storage.É possível especificar vários buckets para a opção
uris
fornecendo múltiplos caminhos.Os exemplos a seguir mostram valores
uris
válidos:gs://bucket/path1/myfile.csv
gs://bucket/path1/*.parquet
gs://bucket/path1/file1*
,gs://bucket1/path1/*
Quando você especifica valores
uris
voltados para vários arquivos, todos eles precisam compartilhar um esquema compatível.Para mais informações sobre o uso de URIs do Cloud Storage no BigQuery, consulte Caminho do recurso do Cloud Storage.
DATASET_NAME
: o nome do conjunto de dados onde está a tabela.TABLE_NAME
: o nome da tabela que você está criando;SCHEMA
especifica um caminho para um arquivo de esquema JSON ou especifica o esquema no formatofield:data_type,field:data_type,...
. Para usar a detecção automática de esquema, omita esse argumento.
Exemplo:
bq mkdef --source_format=CSV gs://mybucket/sales.csv > mytable_def
bq mk --table --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
API
Chame o método de API tables.insert
e crie um
ExternalDataConfiguration
no recurso Table
que você transmite.
Especifique a propriedade schema
ou defina a
propriedade autodetect
como true
para ativar a detecção automática de esquema para
fontes de dados compatíveis.
Java
Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Node.js
Antes de testar esta amostra, siga as instruções de configuração do Node.js no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Node.js.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Python
Antes de testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Criar tabelas externas em dados particionados
É possível criar uma tabela externa para dados particionados do Hive que residem no Cloud Storage. Depois de criar uma tabela particionada externamente, não será possível alterar a chave de partição. Você precisa recriar a tabela para alterar a chave de partição.
Para criar uma tabela externa para dados particionados no Hive, escolha uma das seguintes opções:
Console
No console do Google Cloud, acesse o BigQuery.
- No painel Explorer, expanda o projeto e selecione um conjunto de dados.
- Clique em Acessar ações e depois em Criar tabela. O painel Criar tabela será aberto.
- Na seção Origem, especifique os seguintes campos:
- Em Criar tabela de, selecione Google Cloud Storage.
- Em Selecionar arquivo do bucket do Cloud Storage, insira o caminho para a
pasta do Cloud Storage usando caracteres curinga.
Por exemplo,
my_bucket/my_files*
. O bucket do Cloud Storage precisa estar no mesmo local que o conjunto de dados que contém a tabela que você quer criar, anexar ou substituir. - Na lista Formato de arquivo, selecione o tipo de arquivo.
- Marque a caixa de seleção Particionamento de dados de origem e, em Selecionar
prefixo de URI de origem, insira o prefixo de URI do Cloud Storage. Por exemplo,
gs://my_bucket/my_files
. - Na seção Modo de inferência de partição, selecione uma das seguintes opções:
- Inferir automaticamente os tipos: para definir o modo de detecção do esquema de partição como
AUTO
. - Todas as colunas são strings para definir o modo de detecção de esquema de partição como
STRINGS
. - Forneça meu próprio: para definir o modo de detecção de esquema de partição como
CUSTOM
e insira manualmente as informações do esquema para as chaves de partição. Para mais informações, consulte Oferecer um esquema personalizado de chave de partição.
- Inferir automaticamente os tipos: para definir o modo de detecção do esquema de partição como
- Opcional: Para exigir um filtro de partição em todas as consultas desta tabela, marque a caixa de seleção Exigir filtro de partição. A exigência de um filtro de partição pode reduzir custos e melhorar o desempenho. Para mais informações, consulte Como exigir filtros de predicado em chaves de partição em consultas.
- Na seção Destino, especifique os seguintes campos:
- Em Projeto, selecione o projeto em que você quer criar a tabela.
- Em Conjunto de dados, selecione o conjunto de dados em que você quer criar a tabela.
- Em Tabela, insira o nome da tabela que você quer criar.
- Em Tipo de tabela, selecione Tabela externa.
- Na seção Esquema, insira a definição do esquema.
- Para ativar a detecção automática de esquema, selecione Detecção automática.
- Para ignorar linhas com valores de coluna extras que não correspondem ao esquema, expanda a seção Opções avançadas e selecione Valores desconhecidos.
- Selecione Criar tabela.
SQL
Use a
instrução DDL CREATE EXTERNAL TABLE
.
O exemplo a seguir usa a detecção automática de chaves de particionamento do Hive:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH PARTITION COLUMNS OPTIONS ( format = 'SOURCE_FORMAT', uris = ['GCS_URIS'], hive_partition_uri_prefix = 'GCS_URI_SHARED_PREFIX', require_hive_partition_filter = BOOLEAN);
Substitua:
SOURCE_FORMAT
: o formato da fonte de dados externa, comoPARQUET
GCS_URIS
: o caminho para a pasta do Cloud Storage, usando o formato de caractere curingaGCS_URI_SHARED_PREFIX
: o prefixo de URI de origem sem o caractere curingaBOOLEAN
: especifica se um filtro de predicado é necessário no momento da consulta. Essa flag é opcional. O valor padrão éfalse
.
O exemplo a seguir usa chaves e tipos de particionamento do Hive personalizados listando-os
na cláusula WITH PARTITION COLUMNS
:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH PARTITION COLUMNS (PARTITION_COLUMN_LIST) OPTIONS ( format = 'SOURCE_FORMAT', uris = ['GCS_URIS'], hive_partition_uri_prefix = 'GCS_URI_SHARED_PREFIX', require_hive_partition_filter = BOOLEAN);
Substitua:
PARTITION_COLUMN_LIST
: uma lista de colunas que seguem a mesma ordem no caminho da pasta do Cloud Storage, no formato de:
KEY1 TYPE1, KEY2 TYPE2
No exemplo a seguir, criamos uma tabela particionada externamente. Ela usa a detecção
automática de esquema para detectar o esquema de arquivo e o layout de particionamento
do Hive. Se o caminho externo for
gs://bucket/path/field_1=first/field_2=1/data.parquet
, as colunas de partição
serão detectadas como field_1
(STRING
) e field_2
(INT64
).
CREATE EXTERNAL TABLE dataset.AutoHivePartitionedTable WITH PARTITION COLUMNS OPTIONS ( uris = ['gs://bucket/path/*'], format = 'PARQUET', hive_partition_uri_prefix = 'gs://bucket/path', require_hive_partition_filter = false);
O exemplo a seguir cria uma tabela particionada externamente especificando
explicitamente as colunas de partição. Neste exemplo, consideramos que o caminho do arquivo
externo tem o padrão gs://bucket/path/field_1=first/field_2=1/data.parquet
.
CREATE EXTERNAL TABLE dataset.CustomHivePartitionedTable WITH PARTITION COLUMNS ( field_1 STRING, -- column order must match the external path field_2 INT64) OPTIONS ( uris = ['gs://bucket/path/*'], format = 'PARQUET', hive_partition_uri_prefix = 'gs://bucket/path', require_hive_partition_filter = false);
bq
Primeiro, use o
comando bq mkdef
para
criar um arquivo de definição de tabela:
bq mkdef \ --source_format=SOURCE_FORMAT \ --hive_partitioning_mode=PARTITIONING_MODE \ --hive_partitioning_source_uri_prefix=GCS_URI_SHARED_PREFIX \ --require_hive_partition_filter=BOOLEAN \ GCS_URIS > DEFINITION_FILE
Substitua:
SOURCE_FORMAT
: o formato da fonte de dados externa. Por exemplo,CSV
.PARTITIONING_MODE
: o modo de particionamento do Hive. Use um dos seguintes valores:AUTO
: detecta automaticamente os nomes e tipos de chaves.STRINGS
: converte automaticamente os nomes das chaves em strings.CUSTOM
: codifique o esquema da chave no prefixo do URI de origem.
GCS_URI_SHARED_PREFIX
: o prefixo de URI de origem.BOOLEAN
: especifica se um filtro de predicado é necessário no momento da consulta. Essa flag é opcional. O valor padrão éfalse
.GCS_URIS
: o caminho para a pasta do Cloud Storage, usando o formato de caractere curingaDEFINITION_FILE
: o caminho para o arquivo de definição de tabelas na máquina local.
Se PARTITIONING_MODE
for CUSTOM
, inclua o esquema da chave de partição
no prefixo do URI de origem, usando este formato:
--hive_partitioning_source_uri_prefix=GCS_URI_SHARED_PREFIX/{KEY1:TYPE1}/{KEY2:TYPE2}/...
Depois de criar o arquivo de definição de tabela, use o
comando bq mk
para
criar a tabela externa:
bq mk --external_table_definition=DEFINITION_FILE \ DATASET_NAME.TABLE_NAME \ SCHEMA
Substitua:
DEFINITION_FILE
: o caminho para o arquivo de definição da tabela.DATASET_NAME
: o nome do conjunto de dados onde está a tabelaTABLE_NAME
: o nome da tabela que você está criando;SCHEMA
especifica um caminho para um arquivo de esquema JSON ou especifica o esquema no formatofield:data_type,field:data_type,...
. Para usar a detecção automática de esquema, omita esse argumento.
Exemplos
O exemplo a seguir usa o modo de particionamento do Hive AUTO
:
bq mkdef --source_format=CSV \
--hive_partitioning_mode=AUTO \
--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 a seguir usa o modo de particionamento do Hive STRING
:
bq mkdef --source_format=CSV \
--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 a seguir usa o modo de particionamento do Hive CUSTOM
:
bq mkdef --source_format=CSV \
--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 o particionamento do Hive usando a API BigQuery, inclua um hivePartitioningOptions no objeto ExternalDataConfiguration quando você criar oarquivo de definição de tabela.
Se você definir o campo hivePartitioningOptions.mode
como CUSTOM
, será
necessário codificar o esquema da chave de partição no campo
hivePartitioningOptions.sourceUriPrefix
da seguinte maneira:
gs://BUCKET/PATH_TO_TABLE/{KEY1:TYPE1}/{KEY2:TYPE2}/...
Para aplicar o uso de um filtro de predicado no momento da consulta, defina o campo
hivePartitioningOptions.requirePartitionFilter
como true
.
Java
Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Consultar tabelas externas
Para mais informações, consulte Consultar dados do Cloud Storage em tabelas externas.
Fazer upgrade de tabelas externas para o BigLake
É possível fazer upgrade com base no Cloud Storage para tabelas do BigLake associando a tabela externa a uma conexão. Se você quiser usar o armazenamento em cache de metadados com a tabela do BigLake, especifique as configurações para isso ao mesmo tempo. Para acessar detalhes como o formato e o URI de origem da tabela, consulte Receber informações da tabela.
Para atualizar uma tabela externa para uma do BigLake, selecione uma das seguintes opções:
SQL
Use a
instrução DDL CREATE OR REPLACE EXTERNAL TABLE
para atualizar uma tabela:
No Console do Google Cloud, acesse a página BigQuery.
No editor de consultas, digite a seguinte instrução:
CREATE OR REPLACE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH CONNECTION `REGION.CONNECTION_ID` OPTIONS( format ="TABLE_FORMAT", uris = ['BUCKET_PATH'], max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE' );
Substitua:
PROJECT_ID
: o nome do projeto que contém a tabelaDATASET
: o nome do conjunto de dados onde está a tabelaEXTERNAL_TABLE_NAME
: o nome da tabelaREGION
: a região que contém a conexãoCONNECTION_ID
: o nome da conexão a ser usadaTABLE_FORMAT
: o formato usado pela tabelaNão é possível mudar isso durante a atualização da tabela.
BUCKET_PATH
: o caminho para o bucket do Cloud Storage que contém os dados da tabela externa, no formato['gs://bucket_name/[folder_name/]file_name']
.É possível selecionar vários arquivos do bucket especificando um caractere curinga de asterisco (
*
) no caminho. Por exemplo,['gs://mybucket/file_name*']
. 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 múltiplos caminhos.Os exemplos a seguir mostram valores
uris
válidos:['gs://bucket/path1/myfile.csv']
['gs://bucket/path1/*.csv']
['gs://bucket/path1/*', 'gs://bucket/path2/file00*']
Quando você especifica valores
uris
voltados para vários arquivos, todos eles precisam compartilhar um esquema compatível.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 e quando eles precisam ser atualizados para que a operação possa usá-los.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.
bq
Use os comandos bq mkdef
e bq update
para atualizar uma tabela:
Gere uma definição de tabela externa que descreva os aspectos da tabela a serem alterados:
bq mkdef --connection_id=PROJECT_ID.REGION.CONNECTION_ID \ --source_format=TABLE_FORMAT \ --metadata_cache_mode=CACHE_MODE \ "BUCKET_PATH" > /tmp/DEFINITION_FILE
Substitua:
PROJECT_ID
: o nome do projeto que contém a conexão.REGION
: a região que contém a conexão.CONNECTION_ID
: o nome da conexão a ser usada.TABLE_FORMAT
: o formato usado pela tabela. Não é possível mudar isso durante a atualização da tabela.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.BUCKET_PATH
: o caminho para o bucket do Cloud Storage que contém os dados da tabela externa, no formatogs://bucket_name/[folder_name/]file_name
.É possível limitar os arquivos selecionados no bucket especificando um caractere curinga de asterisco (
*
) no caminho. Por exemplo,gs://mybucket/file_name*
. 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 múltiplos caminhos.Os exemplos a seguir mostram valores
uris
válidos:gs://bucket/path1/myfile.csv
gs://bucket/path1/*.csv
gs://bucket/path1/*,gs://bucket/path2/file00*
Quando você especifica valores
uris
voltados para vários arquivos, todos eles precisam compartilhar um esquema compatível.Para mais informações sobre o uso de URIs do Cloud Storage no BigQuery, consulte Caminho do recurso do Cloud Storage.
DEFINITION_FILE
: o nome do arquivo de definição de tabela que você está criando.
Atualize a tabela usando 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:
STALENESS_INTERVAL
: especifica se os metadados em cache são usados pelas operações na tabela e quando eles precisam ser atualizados para que a operação possa usá-los. Para saber mais 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 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.DEFINITION_FILE
: o nome do arquivo de definição da tabela que você criou ou atualizou.PROJECT_ID
: o nome do projeto que contém a tabela.DATASET
: o nome do conjunto de dados onde está a tabelaEXTERNAL_TABLE_NAME
: o nome da tabela
Caminho do recurso do Cloud Storage
Ao criar uma tabela externa com base em uma fonte de dados do Cloud Storage, forneça o caminho para os dados.
O caminho do recurso do Cloud Storage contém o nome do bucket e o objeto (nome de arquivo). Por exemplo, se o bucket do Cloud Storage se chamar
mybucket
e o arquivo de dados for denominado myfile.csv
, o caminho de recurso será
gs://mybucket/myfile.csv
.
O BigQuery não oferece suporte a caminhos de recursos do Cloud Storage
que incluam várias barras consecutivas após a barra dupla inicial.
Os nomes de objeto do Cloud Storage podem conter vários caracteres de barra ("/") consecutivos. No entanto, o BigQuery os converte em uma única barra. Por exemplo, o caminho de recurso a seguir, ainda que
válido no Cloud Storage, não funciona no BigQuery:
gs://bucket/my//object//name
.
Para recuperar o caminho do recurso do Cloud Storage:
Abra o Console do Cloud Storage.
Procure a localização do objeto (arquivo) que contém os dados de origem.
Clique no nome do objeto.
A página Detalhes do objeto é aberta.
Copie o valor fornecido no campo gsutil URI, que começa com
gs://
.
Compatibilidade com caracteres curinga para URIs do Cloud Storage
Se os dados estiverem separados em vários arquivos, use um caractere curinga (*) para selecionar vários arquivos. O uso do caractere curinga de asterisco precisa seguir estas regras:
- O caractere curinga pode ser exibido dentro ou no final do nome do objeto.
- Não é possível usar vários asteriscos. Por exemplo, o caminho
gs://mybucket/fed-*/temp/*.csv
é inválido. - Não é possível usar um asterisco com o nome do bucket.
Exemplos:
O exemplo a seguir mostra como selecionar todos os arquivos em todas as pastas que começam com o prefixo
gs://mybucket/fed-samples/fed-sample
:gs://mybucket/fed-samples/fed-sample*
O exemplo a seguir mostra como selecionar apenas arquivos com uma extensão
.csv
na pasta chamadafed-samples
e em qualquer subpasta defed-samples
:gs://mybucket/fed-samples/*.csv
O exemplo a seguir mostra como selecionar arquivos com um padrão de nomenclatura de
fed-sample*.csv
na pasta chamadafed-samples
. Este exemplo não seleciona arquivos em subpastas defed-samples
.gs://mybucket/fed-samples/fed-sample*.csv
Ao usar a ferramenta de linha de comando bq, talvez seja necessário evitar o asterisco em algumas plataformas.
Não é possível usar um caractere curinga de asterisco ao criar tabelas externas vinculadas a exportações do Datastore ou do Firestore.
Limitações
Para informações sobre limitações aplicáveis a tabelas externas, consulte Limitações de tabelas externas.
A seguir
- Saiba mais sobre tabelas externas.
- Saiba mais sobre as tabelas BigLake.