Como modificar esquemas de tabelas
Neste documento, você verá como modificar definições de esquema para tabelas atuais do BigQuery.
É possível fazer a maioria das modificações de esquema descritas neste documento usando as instruções SQL (linguagem de definição de dados) (DDL) do SQL. Essas instruções não geram cobranças.
É possível modificar um esquema de tabela de todas as maneiras descritas nesta página exportando dados da sua tabela para o Cloud Storage e, em seguida, carregando os dados em uma nova tabela com a definição de esquema modificada. Os jobs de carregamento e exportação do BigQuery são gratuitos, mas você tem custos para armazenar os dados exportados no Cloud Storage. As seções a seguir descrevem outras maneiras de executar vários tipos de modificações de esquema.
Adicionar uma coluna
É possível adicionar colunas à definição de esquema de uma tabela usando uma das seguintes opções:
- Adicione uma nova coluna vazia.
- Substitua uma tabela por um job de carregamento ou consulta.
- Anexe dados a uma tabela com um job de carregamento ou de consulta.
Qualquer coluna adicionada precisará aderir às regras do BigQuery para nomes de colunas. Para mais informações sobre como criar componentes de esquema, consulte Como especificar um esquema.
Adicionar uma coluna vazia
Ao adicionar novas colunas a um esquema de tabela atual, as colunas precisarão ser NULLABLE
ou REPEATED
. Não é possível adicionar uma coluna REQUIRED
a um esquema de tabela atual. Adicionar uma coluna REQUIRED
a um esquema de tabela
existente na API ou na ferramenta de linha de comando bq causa um erro. No entanto, é possível
criar uma coluna REQUIRED
aninhada como parte de um novo campo RECORD
.
É possível adicionar colunas REQUIRED
somente quando você
cria uma tabela durante o carregamento de dados ou quando cria uma tabela vazia com uma
definição de esquema.
Para adicionar colunas vazias à definição de esquema de uma tabela:
Console
No Console do Google Cloud, acesse a página do BigQuery.
No painel Explorer, expanda o projeto e o conjunto de dados e selecione a tabela.
No painel de detalhes, clique na guia Visualizar.
Clique em Editar esquema. Talvez seja necessário rolar para ver esse botão.
Na página Esquema atual, em Novos campos, clique em Adicionar campo.
- Em Nome, digite o nome da coluna.
- Em Tipo, escolha o tipo de dados.
- Em Modo, escolha
NULLABLE
ouREPEATED
.
Ao terminar de adicionar colunas, clique em Salvar.
SQL
Use a
instrução DDL ALTER TABLE ADD COLUMN
:
No Console do Google Cloud, acesse a página BigQuery.
No editor de consultas, digite a seguinte instrução:
ALTER TABLE mydataset.mytable ADD COLUMN new_column STRING;
Clique em
Executar.
Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.
bq
Emita o comando bq update
e forneça um arquivo de esquema JSON. Se a tabela que você está atualizando estiver em um projeto diferente do padrão, adicione o ID do projeto ao nome do conjunto de dados neste formato: PROJECT_ID:DATASET
.
bq update PROJECT_ID:DATASET.TABLE SCHEMA
Substitua:
PROJECT_ID
: o ID do projetoDATASET
: o nome do conjunto de dados com a tabela que você está atualizando.TABLE
: o nome da tabela que você está atualizando.SCHEMA
: o caminho para o arquivo de esquema JSON na máquina local
Ao especificar um esquema inline, não é possível especificar a descrição
da coluna, o modo e o tipo
RECORD
(STRUCT
). Todos os modos de coluna assumem NULLABLE
como padrão. Sendo assim, se você for adicionar uma nova coluna aninhada a um RECORD
, será necessário fornecer um arquivo de esquema JSON.
Se você tentar adicionar colunas usando uma definição de esquema in-line, será necessário fornecer toda a definição de esquema, incluindo as novas colunas. Como não
é possível especificar modos de coluna usando uma definição de esquema in-line, a atualização
muda qualquer coluna REPEATED
existente para NULLABLE
, o que
produz o seguinte erro: BigQuery error in update
operation: Provided Schema does not match Table
PROJECT_ID:dataset.table. Field field has changed mode
from REPEATED to NULLABLE.
O método preferido de adicionar colunas a uma tabela existente usando a ferramenta de linha de comando bq é fornecer um arquivo de esquema JSON.
Para adicionar colunas vazias ao esquema de uma tabela usando um arquivo de esquema JSON, siga estas etapas:
Primeiro, emita o comando
bq show
com a sinalização--schema
e grave o esquema da tabela atual em um arquivo. Se a tabela que você está atualizando estiver em um projeto diferente do padrão, adicione o ID do projeto ao nome do conjunto de dados neste formato:PROJECT_ID:DATASET
.bq show \ --schema \ --format=prettyjson \ PROJECT_ID:DATASET.TABLE > SCHEMA
Substitua:
PROJECT_ID
: o ID do projetoDATASET
: o nome do conjunto de dados com a tabela que você está atualizando.TABLE
: o nome da tabela que você está atualizando.SCHEMA
: o arquivo de definição de esquema gravado na máquina local.
Por exemplo, para gravar a definição de esquema de
mydataset.mytable
em um arquivo, digite o comando a seguir.mydataset.mytable
está no projeto padrão.bq show \ --schema \ --format=prettyjson \ mydataset.mytable > /tmp/myschema.json
Abra o arquivo de esquema em um editor de texto. Ele será semelhante a este:
[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" } ]
Adicione as novas colunas ao final da definição de esquema. Caso tente adicionar novas colunas em outro local na matriz, este erro será retornado:
BigQuery error in update operation: Precondition Failed
.Com um arquivo JSON, é possível especificar descrições, modos
NULLABLE
ouREPEATED
e tiposRECORD
para novas colunas. Por exemplo, com a definição de esquema da etapa anterior, a nova matriz JSON será semelhante ao exemplo a seguir. Neste exemplo, é adicionada uma nova colunaNULLABLE
chamadacolumn4
.column4
inclui uma descrição.[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" }, { "description": "my new column", "mode": "NULLABLE", "name": "column4", "type": "STRING" } ]
Para mais informações sobre como trabalhar com arquivos de esquema JSON, consulte Como especificar um arquivo de esquema JSON.
Depois de atualizar o arquivo de esquema, emita o comando a seguir para atualizar o esquema da tabela. Se a tabela que você está atualizando estiver em um projeto diferente do padrão, adicione o ID do projeto ao nome do conjunto de dados neste formato:
PROJECT_ID:DATASET
.bq update PROJECT_ID:DATASET.TABLE SCHEMA
Substitua:
PROJECT_ID
: o ID do projetoDATASET
: o nome do conjunto de dados com a tabela que você está atualizando.TABLE
: o nome da tabela que você está atualizando.SCHEMA
: o arquivo de definição de esquema gravado na máquina local.
Por exemplo, digite o comando a seguir para atualizar a definição de esquema de
mydataset.mytable
no projeto padrão. O caminho para o arquivo de esquema na máquina local é/tmp/myschema.json
.bq update mydataset.mytable /tmp/myschema.json
API
Chame o método tables.patch
e use a propriedade schema
para adicionar colunas vazias à definição de esquema. Como o método tables.update
substitui todo o recurso da tabela, é melhor usar o método tables.patch
.
Go
Antes de testar esta amostra, siga as instruções de configuração do Go 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 Go.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
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.
Anexe um novo objeto SchemaField a uma cópia de Table.schema e substitua o valor da propriedade Table.schema pelo esquema atualizado.Adicionar uma coluna aninhada a uma coluna RECORD
Além de adicionar novas colunas a um esquema de tabela, também é possível acrescentar novas colunas aninhadas a uma coluna RECORD
. O processo de adição de uma nova coluna aninhada é
parecido com o de adição de uma nova coluna comum.
Console
Ainda não é
possível adicionar um novo campo aninhado a uma coluna RECORD
atual no console do Google Cloud.
SQL
No momento, não é possível adicionar um novo campo aninhado a uma coluna RECORD
usando uma instrução DDL SQL.
bq
Emita o comando bq update
e forneça um arquivo de esquema JSON que inclua o campo aninhado na definição de esquema da coluna RECORD
atual. Se a tabela que você está atualizando estiver em um projeto diferente do padrão, adicione o ID do projeto ao nome do conjunto de dados neste formato: PROJECT_ID:DATASET
.
bq update PROJECT_ID:DATASET.TABLE SCHEMA
Substitua:
PROJECT_ID
: o ID do projetoDATASET
: o nome do conjunto de dados com a tabela que você está atualizando.TABLE
: o nome da tabela que você está atualizando.SCHEMA
: o caminho para o arquivo de esquema JSON na máquina local
Ao especificar um esquema inline, não é possível especificar a descrição
da coluna, o modo e o tipo
RECORD
(STRUCT
). Todos os modos de coluna assumem NULLABLE
como padrão. Sendo assim, se você for adicionar uma nova coluna aninhada a um RECORD
, será necessário fornecer um arquivo de esquema JSON.
Para adicionar uma coluna aninhada a um RECORD
usando um arquivo de esquema JSON, siga estas etapas:
Primeiro, emita o comando
bq show
com a sinalização--schema
e grave o esquema da tabela atual em um arquivo. Se a tabela que você está atualizando estiver em um projeto diferente do padrão, adicione o ID do projeto ao nome do conjunto de dados neste formato:PROJECT_ID:DATASET.TABLE
.bq show \ --schema \ --format=prettyjson \ PROJECT_ID:DATASET.TABLE > SCHEMA
Substitua:
PROJECT_ID
: o ID do projetoDATASET
: o nome do conjunto de dados com a tabela que você está atualizando.TABLE
: o nome da tabela que você está atualizando.SCHEMA
: o arquivo de definição de esquema gravado na máquina local.
Por exemplo, para gravar a definição de esquema de
mydataset.mytable
em um arquivo, digite o comando a seguir.mydataset.mytable
está no projeto padrão.bq show \ --schema \ --format=prettyjson \ mydataset.mytable > /tmp/myschema.json
Abra o arquivo de esquema em um editor de texto. O esquema será semelhante ao mostrado abaixo. Neste exemplo,
column3
é uma coluna repetida aninhada. As colunas aninhadas sãonested1
enested2
. A matrizfields
lista os campos aninhados emcolumn3
.[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "fields": [ { "mode": "NULLABLE", "name": "nested1", "type": "STRING" }, { "mode": "NULLABLE", "name": "nested2", "type": "STRING" } ], "mode": "REPEATED", "name": "column3", "type": "RECORD" } ]
Adicione a nova coluna aninhada ao final da matriz
fields
. Neste exemplo,nested3
é a nova coluna aninhada.[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "fields": [ { "mode": "NULLABLE", "name": "nested1", "type": "STRING" }, { "mode": "NULLABLE", "name": "nested2", "type": "STRING" }, { "mode": "NULLABLE", "name": "nested3", "type": "STRING" } ], "mode": "REPEATED", "name": "column3", "type": "RECORD" } ]
Para mais informações sobre como trabalhar com arquivos de esquema JSON, consulte Como especificar um arquivo de esquema JSON.
Depois de atualizar o arquivo de esquema, emita o comando a seguir para atualizar o esquema da tabela. Se a tabela que você está atualizando estiver em um projeto diferente do padrão, adicione o ID do projeto ao nome do conjunto de dados neste formato:
PROJECT_ID:DATASET
.bq update PROJECT_ID:DATASET.TABLE SCHEMA
Substitua:
PROJECT_ID
: o ID do projetoDATASET
: o nome do conjunto de dados com a tabela que você está atualizando.TABLE
: o nome da tabela que você está atualizando.SCHEMA
: o caminho para o arquivo de esquema JSON na máquina local
Por exemplo, digite o comando a seguir para atualizar a definição de esquema de
mydataset.mytable
no projeto padrão. O caminho para o arquivo de esquema na máquina local é/tmp/myschema.json
.bq update mydataset.mytable /tmp/myschema.json
API
Chame o método tables.patch
e use a propriedade schema
para adicionar colunas aninhadas à definição de esquema. Como o método tables.update
substitui todo o recurso da tabela, é melhor usar o método tables.patch
.
Adicionar colunas ao substituir ou anexar dados
É possível adicionar novas colunas a uma tabela atual ao carregar dados nela e optar por substituí-la. Ao substituir uma tabela atual, o esquema dos dados sendo carregados é usado para substituir o esquema dessa tabela. Para informações sobre como substituir uma tabela usando um job de carregamento, consulte o documento do formato dos seus dados:
Adicionar colunas em um job de anexação de carregamento
É possível adicionar colunas a uma tabela ao anexar dados a ela em um job de carregamento. O novo esquema é determinado por um dos seguintes itens:
- Detecção automática (para arquivos CSV e JSON)
- Um esquema especificado em um arquivo de esquema JSON (para arquivos CSV e JSON)
- Os dados de origem autodescritivos de arquivos de exportação Avro, ORC, Parquet e Datastore
Se você especificar o esquema em um arquivo JSON, as novas colunas precisarão ser definidas nele. Se as novas definições de coluna estiverem ausentes, um erro será retornado quando você tentar anexar os dados.
Ao adicionar novas colunas durante uma operação de anexação, os valores nelas são definidos como NULL
nas linhas atuais.
Para adicionar uma nova coluna ao anexar dados a uma tabela durante um job de carregamento, use uma das seguintes opções:
bq
Use o comando bq load
para carregar os dados e especifique a sinalização --noreplace
para indicar que você os está anexando a uma tabela atual.
Se os dados sendo anexados estiverem em CSV ou em formato JSON delimitado por nova linha, especifique a sinalização --autodetect
para usar a detecção automática de esquema ou forneça o esquema em um arquivo de esquema JSON. As colunas adicionadas podem ser inferidas automaticamente dos arquivos de exportação do Avro ou do Cloud Datastore.
Defina a sinalização --schema_update_option
como ALLOW_FIELD_ADDITION
para indicar que o dados sendo anexados contêm novas colunas.
Se a tabela sendo anexada estiver em um conjunto de dados em um projeto diferente do padrão, adicione o ID do projeto ao nome do conjunto de dados no formato a seguir: PROJECT_ID:DATASET
.
Opcional: forneça a sinalização --location
e defina o valor do
local.
Digite o comando load
a seguir:
bq --location=LOCATION load \ --noreplace \ --autodetect \ --schema_update_option=ALLOW_FIELD_ADDITION \ --source_format=FORMAT \ PROJECT_ID:DATASET.TABLE \ PATH_TO_SOURCE \ SCHEMA
Substitua:
LOCATION
: o nome do seu local. A sinalização--location
é opcional. Por exemplo, se você estiver usando o BigQuery na região de Tóquio, defina o valor da sinalização comoasia-northeast1
. É possível definir um valor padrão para o local usando o arquivo .bigqueryrc;FORMAT
: o formato do esquema.NEWLINE_DELIMITED_JSON
,CSV
,AVRO
,PARQUET
,ORC
, ouDATASTORE_BACKUP
.PROJECT_ID
: o ID do projetoDATASET
: o nome do conjunto de dados onde está a tabela.TABLE
: o nome da tabela que você está criando;PATH_TO_SOURCE
: um URI do Cloud Storage totalmente qualificado, uma lista de URIs separada por vírgula ou o caminho para um arquivo de dados na máquina local.SCHEMA
: o caminho para um arquivo de esquema JSON local. Um arquivo de esquema é necessário somente para arquivos CSV e JSON quando--autodetect
não estiver especificado. Os esquemas do Avro e do Cloud Datastore são inferidos com base nos dados de origem.
Por exemplo:
Digite os comandos a seguir para adicionar um arquivo local do Avro, /tmp/mydata.avro
, a mydataset.mytable
usando um job de carregamento. Como os esquemas podem ser inferidos automaticamente via dados do Avro, não é necessário usar a flag --autodetect
. mydataset
está no projeto padrão.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_ADDITION \
--source_format=AVRO \
mydataset.mytable \
/tmp/mydata.avro
Digite o comando a seguir para anexar um arquivo de dados JSON delimitado por nova linha no Cloud Storage a mydataset.mytable
usando um job de carregamento. A sinalização --autodetect
é usada para detectar as novas colunas. mydataset
está no projeto padrão.
bq load \
--noreplace \
--autodetect \
--schema_update_option=ALLOW_FIELD_ADDITION \
--source_format=NEWLINE_DELIMITED_JSON \
mydataset.mytable \
gs://mybucket/mydata.json
Digite o comando a seguir para anexar um arquivo de dados JSON delimitado por nova linha no Cloud Storage a mydataset.mytable
usando um job de carregamento. O esquema contendo as novas colunas está especificado em um arquivo de esquema JSON local, /tmp/myschema.json
. mydataset
está em myotherproject
, e não no projeto padrão.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_ADDITION \
--source_format=NEWLINE_DELIMITED_JSON \
myotherproject:mydataset.mytable \
gs://mybucket/mydata.json \
/tmp/myschema.json
API
Chame o método jobs.insert
. Em seguida, configure um job de load
e defina as propriedades a seguir:
- Faça referência aos dados no Cloud Storage usando a propriedade
sourceUris
. - Especifique o formato de dados definindo a propriedade
sourceFormat
. - Especifique o esquema na propriedade
schema
. - Especifique a opção de atualização de esquema usando a propriedade
schemaUpdateOptions
. - Defina a disposição de gravação da tabela de destino como
WRITE_APPEND
usando a propriedadewriteDisposition
.
Go
Antes de testar esta amostra, siga as instruções de configuração do Go 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 Go.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
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.
Adicionar colunas em um job de anexação de consulta
É possível adicionar colunas a uma tabela ao anexar resultados de consulta a ela.
Ao adicionar colunas usando uma operação de anexação em um job de consulta, o esquema dos resultados dessa consulta é usado para atualizar o esquema da tabela de destino. Não é possível consultar uma tabela em um local e gravar os resultados em uma tabela de outro local.
Para adicionar uma nova coluna ao anexar dados a uma tabela durante um job de consulta, selecione uma das seguintes opções:
bq
Use o comando bq query
para consultar seus dados e especifique a sinalização --destination_table
para indicar qual tabela está sendo anexada.
Para mostrar que você está anexando resultados de consulta a uma tabela de destino atual, especifique a sinalização --append_table
.
Defina a sinalização --schema_update_option
como ALLOW_FIELD_ADDITION
para indicar que os resultados da consulta sendo anexados contêm novas colunas.
Especifique a sinalização use_legacy_sql=false
para usar a sintaxe do GoogleSQL para a
consulta.
Se a tabela sendo anexada estiver em um conjunto de dados em um projeto diferente do padrão, adicione o ID do projeto ao nome do conjunto de dados no formato a seguir: PROJECT_ID:DATASET
. A tabela
sendo consultada e a tabela de destino precisam estar no mesmo local.
Opcional: forneça a sinalização --location
e defina o valor do
local.
bq --location=LOCATION query \ --destination_table PROJECT_ID:DATASET.TABLE \ --append_table \ --schema_update_option=ALLOW_FIELD_ADDITION \ --use_legacy_sql=false \ 'QUERY'
Substitua:
LOCATION
: o nome do seu local. A sinalização--location
é opcional. Por exemplo, se você estiver usando o BigQuery na região de Tóquio, defina o valor da sinalização comoasia-northeast1
. É possível definir um valor padrão para o local usando o arquivo .bigqueryrc. Não é possível anexar resultados de consulta em uma tabela de outro local.PROJECT_ID
: o ID do projetodataset
: o nome do conjunto de dados que contém a tabela a ser anexada.TABLE
: o nome da tabela que você está criando.QUERY
: uma consulta na sintaxe do GoogleSQL.
Exemplos:
Digite o comando a seguir para consultar mydataset.mytable
no projeto padrão e para anexar os resultados da consulta a mydataset.mytable2
, que também está no projeto padrão.
bq query \
--destination_table mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_ADDITION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
Digite o comando a seguir para consultar mydataset.mytable
no projeto padrão e para anexar os resultados da consulta a mydataset.mytable2
em myotherproject
.
bq query \
--destination_table myotherproject:mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_ADDITION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
API
Chame o método jobs.insert
. Em seguida, configure um job de query
e defina as propriedades a seguir:
- Especifique a tabela de destino usando a propriedade
destinationTable
. - Defina a disposição de gravação da tabela de destino como
WRITE_APPEND
usando a propriedadewriteDisposition
. - Especifique a opção de atualização de esquema usando a propriedade
schemaUpdateOptions
. - Especifique a consulta GoogleSQL usando a propriedade
query
.
Go
Antes de testar esta amostra, siga as instruções de configuração do Go 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 Go.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
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.
Alterar o nome de uma coluna
Para renomear uma coluna em uma tabela, use a
instrução DDL ALTER TABLE RENAME COLUMN
. O exemplo a seguir renomeia a coluna old_name
para new_name
em mytable
:
ALTER TABLE mydataset.mytable
RENAME COLUMN old_name TO new_name;
Para mais informações sobre instruções ALTER TABLE RENAME COLUMN
, consulte Detalhes sobre DDL.
Alterar o tipo de dados de uma coluna
A alteração do tipo de dados de uma coluna está indisponível no console do Google Cloud, na ferramenta de linha de comando bq ou na API BigQuery. Se você tentar atualizar uma tabela usando um esquema que especifique um novo tipo de dado para uma coluna, isso resultará no seguinte erro.
Alterar o tipo de dados de uma coluna com uma instrução DDL
Você pode usar o GoogleSQL para fazer certas alterações no tipo de dados de uma coluna. Para mais informações e uma lista completa de conversões de tipos de dados compatíveis, consulte a instrução DDL ALTER COLUMN SET DATA TYPE
.
O exemplo a seguir cria uma tabela com uma coluna do tipo INT64
e
atualiza o tipo para NUMERIC
:
CREATE TABLE mydataset.mytable(c1 INT64); ALTER TABLE mydataset.mytable ALTER COLUMN c1 SET DATA TYPE NUMERIC;
O exemplo a seguir cria uma tabela com uma coluna aninhada com dois campos e, em seguida, atualiza o tipo de uma das colunas de INT
para NUMERIC
:
CREATE TABLE mydataset.mytable(s1 STRUCT); ALTER TABLE mydataset.mytable ALTER COLUMN s1 SET DATA TYPE STRUCT;
Transmitir o tipo de dados de uma coluna
Para alterar o tipo de dados de uma coluna para um tipo transmitível, use uma consulta SQL para selecionar os dados da tabela, transmitir as colunas relevantes e substituir a tabela. A transmissão e a substituição não são recomendadas para tabelas muito grandes porque exigem uma verificação completa da tabela.
No exemplo a seguir, você verá uma consulta SQL que seleciona todos os dados de
column_two
e column_three
em mydataset.mytable
e converte column_one
de DATE
para STRING
. O resultado da consulta é usado para substituir a tabela atual. A tabela substituída armazena column_one
como um tipo de dados STRING
.
Quando a função CAST
é usada, pode ocorrer falha na consulta se o BigQuery não conseguir executar a conversão. Para ver detalhes sobre as regras de uso de cast no GoogleSQL, consulte
Como usar cast.
Console
No Console do Google Cloud, acesse a página BigQuery.
No Editor de consultas, digite a seguinte consulta para selecionar todos os dados de
column_two
ecolumn_three
emmydataset.mytable
e para convertercolumn_one
deDATE
paraSTRING
. Na consulta, um alias é usado para aplicar a função cast acolumn_one
com o mesmo nome.mydataset.mytable
está no projeto padrão.SELECT column_two, column_three, CAST(column_one AS STRING) AS column_one FROM mydataset.mytable;
Clique em Mais e selecione Configurações de consulta.
Na seção Destino, faça o seguinte:
Selecione Definir uma tabela de destino para os resultados da consulta.
Em Nome do projeto, deixe o valor definido como pertencente ao projeto padrão. Este é o projeto que contém
mydataset.mytable
.Em Conjunto de dados, escolha
mydataset
.No campo ID da tabela, insira
mytable
.Em Preferência de gravação na tabela de destino, selecione em Substituir tabela. Isso substitui
mytable
usando os resultados da consulta.
Se quiser, escolha o local dos seus dados.
Para atualizar as configurações, clique em Salvar.
Clique em
Executar.Quando o job de consulta for concluído, o tipo de dados de
column_one
seráSTRING
.
bq
Insira o seguinte comando bq query
para selecionar todos os dados de column_two
e column_three
em mydataset.mytable
e para converter column_one
de DATE
para STRING
. Na consulta, um alias é usado para aplicar a função cast a column_one
com o mesmo nome. mydataset.mytable
está no projeto padrão.
Os resultados da consulta são gravados em mydataset.mytable
usando a sinalização --destination_table
, e a sinalização --replace
é usada para substituir mytable
. Especifique a sinalização use_legacy_sql=false
para usar
a sintaxe do GoogleSQL.
Forneça a sinalização --location
e defina o valor como seu
local.
bq query \
--destination_table mydataset.mytable \
--replace \
--use_legacy_sql=false \
'SELECT
column_two,
column_three,
CAST(column_one AS STRING) AS column_one
FROM
mydataset.mytable'
API
Para selecionar todos os dados de column_two
e column_three
em mydataset.mytable
e para converter column_one
de DATE
para STRING
, chame o método jobs.insert
e configure um job query
. Opcional, especifique seu local na property location
da seção jobReference
.
A consulta SQL usada no job de consulta seria SELECT column_two,
column_three, CAST(column_one AS STRING) AS column_one FROM
mydataset.mytable
. Na consulta, um alias é usado para aplicar a função cast a column_one
com o mesmo nome.
Para substituir mytable
pelos resultados da consulta, inclua mydataset.mytable
na property configuration.query.destinationTable
e especifique WRITE_TRUNCATE
na property configuration.query.writeDisposition
.
Alterar o modo de uma coluna
A única modificação compatível com o modo de uma coluna é
alterá-la de REQUIRED
para NULLABLE
. A alteração do modo de uma coluna de REQUIRED
para NULLABLE
também é chamada de relaxamento de coluna. Também é possível relaxar uma
coluna ao carregar dados para substituir uma tabela existente
ou quando você anexa dados a uma tabela. Não é possível alterar o modo de uma coluna de
NULLABLE
para REQUIRED
.
Crie uma coluna NULLABLE
em uma tabela existente.
Para mudar o modo de uma coluna de REQUIRED
para NULLABLE
, selecione uma das
seguintes opções:
Console
Acessar a página do BigQuery.
No painel Explorer, expanda o projeto e o conjunto de dados e selecione a tabela.
No painel de detalhes, clique na guia Visualizar.
Clique em Editar esquema. Talvez seja necessário rolar para ver esse botão.
Na página Esquema atual, localize o campo que você quer alterar.
Na lista suspensa Modo para esse campo, selecione
NULLABLE
.Para atualizar as configurações, clique em Salvar.
SQL
Use a
instrução DDL ALTER COLUMN DROP NOT NULL
.
O exemplo a seguir muda o modo da coluna mycolumn
de
REQUIRED
para NULLABLE
:
No Console do Google Cloud, acesse a página BigQuery.
No editor de consultas, digite a seguinte instrução:
ALTER TABLE mydataset.mytable ALTER COLUMN mycolumn DROP NOT NULL;
Clique em
Executar.
Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.
bq
Primeiro, emita o comando
bq show
com a sinalização--schema
e grave o esquema da tabela atual em um arquivo. Se a tabela que você está atualizando estiver em um projeto diferente do padrão, adicione o ID do projeto ao nome do conjunto de dados neste formato:PROJECT_ID:DATASET
.bq show \ --schema \ --format=prettyjson \ PROJECT_ID:DATASET.TABLE > SCHEMA_FILE
Substitua:
PROJECT_ID
: o ID do projetoDATASET
: o nome do conjunto de dados com a tabela que você está atualizando.TABLE
: o nome da tabela que você está atualizando.SCHEMA_FILE
: o arquivo de definição de esquema gravado na máquina local.
Por exemplo, para gravar a definição de esquema de
mydataset.mytable
em um arquivo, digite o comando a seguir.mydataset.mytable
está no projeto padrão.bq show \ --schema \ --format=prettyjson \ mydataset.mytable > /tmp/myschema.json
Abra o arquivo de esquema em um editor de texto. Ele será semelhante a este:
[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" } ]
Altere o modo de uma coluna atual de
REQUIRED
paraNULLABLE
. Neste exemplo, o modo decolumn1
é relaxado.[ { "mode": "NULLABLE", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" } ]
Para mais informações sobre como trabalhar com arquivos de esquema JSON, consulte Como especificar um arquivo de esquema JSON.
Depois de atualizar o arquivo de esquema, emita o comando a seguir para atualizar o esquema da tabela. Se a tabela que você está atualizando estiver em um projeto diferente do padrão, adicione o ID do projeto ao nome do conjunto de dados neste formato:
PROJECT_ID:DATASET
.bq update PROJECT_ID:DATASET.TABLE SCHEMA
Substitua:
PROJECT_ID
: o ID do projetoDATASET
: o nome do conjunto de dados com a tabela que você está atualizando.TABLE
: o nome da tabela que você está atualizando.SCHEMA
: o caminho para o arquivo de esquema JSON na máquina local
Por exemplo, digite o comando a seguir para atualizar a definição de esquema de
mydataset.mytable
no projeto padrão. O caminho para o arquivo de esquema na máquina local é/tmp/myschema.json
.bq update mydataset.mytable /tmp/myschema.json
API
Chame tables.patch
e use a propriedade schema
para alterar uma coluna REQUIRED
para NULLABLE
na definição do esquema. Como o método tables.update
substitui todo o recurso da tabela, é melhor usar o método tables.patch
.
Go
Antes de testar esta amostra, siga as instruções de configuração do Go 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 Go.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
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.
Substitua a propriedade Table.schema por uma lista de objetos SchemaField com a propriedade mode definida como'NULLABLE'
Crie uma coluna NULLABLE
com um job de carregamento de anexação
É possível relaxar o modo de uma coluna ao anexar dados a uma tabela em um job de carregamento. Selecione uma das seguintes opções com base no tipo de arquivo:
- Ao anexar dados de arquivos CSV e JSON, relaxe o modo de colunas individuais especificando um arquivo de esquema JSON.
- Ao anexar dados de arquivos Avro, ORC ou Parquet, relaxe as colunas para
NULL
no esquema e deixe a inferência do esquema detectar as colunas relaxadas.
Para transformar uma coluna de REQUIRED
para NULLABLE
ao anexar dados a uma tabela
durante um job de carregamento, selecione uma das seguintes opções:
Console
Ainda não é possível transformar o modo de coluna usando o console do Google Cloud.
bq
Use o comando bq load
para carregar os dados e especifique a sinalização --noreplace
para indicar que você os está anexando a uma tabela atual.
Se os dados que você anexar estiverem em CSV ou em formato JSON delimitado por nova linha, especifique as colunas de relaxamento em um arquivo de esquema JSON local. Se preferir, use a sinalização --autodetect
para utilizar a detecção de esquemas e descobrir colunas de relaxamento nos dados de origem.
As colunas de relaxamento podem ser inferidas automaticamente de arquivos Avro, ORC e Parquet. O relaxamento de coluna não se aplica a anexos de exportação do Cloud Datastore. As colunas em tabelas criadas durante o carregamento de arquivos de exportação do Datastore são sempre NULLABLE
.
Defina a sinalização --schema_update_option
como ALLOW_FIELD_RELAXATION
para indicar que os dados sendo anexados contêm colunas relaxadas.
Se a tabela sendo anexada estiver em um conjunto de dados em um projeto diferente do padrão, adicione o ID do projeto ao nome do conjunto de dados no formato a seguir: PROJECT_ID:DATASET
.
Opcional: forneça a sinalização --location
e defina o valor do
local.
Digite o comando load
a seguir:
bq --location=LOCATION load \ --noreplace \ --schema_update_option=ALLOW_FIELD_RELAXATION \ --source_format=FORMAT \ PROJECT_ID:DATASET.TABLE \ PATH_TO_SOURCE \ SCHEMA
Substitua:
LOCATION
: o nome do seu local. A sinalização--location
é opcional. Por exemplo, se você estiver usando o BigQuery na região de Tóquio, defina o valor da sinalização comoasia-northeast1
. É possível definir um valor padrão para o local usando o arquivo .bigqueryrc;FORMAT
:NEWLINE_DELIMITED_JSON
,CSV
,PARQUET
,ORC
, ouAVRO
. Os arquivosDATASTORE_BACKUP
não exigem relaxamento de colunas. As colunas em tabelas criadas de arquivos de exportação do Datastore são sempreNULLABLE
.PROJECT_ID
: o ID do projetodataset é o nome do conjunto de dados que contém a tabela.
TABLE
: o nome da tabela que você está anexando.PATH_TO_SOURCE
: um URI do Cloud Storage totalmente qualificado, uma lista de URIs separada por vírgula ou o caminho para um arquivo de dados na máquina local.SCHEMA
: o caminho para um arquivo de esquema JSON local. Esta opção é usada apenas para arquivos CSV e JSON. As colunas relaxadas são inferidas automaticamente de arquivos Avro.
Por exemplo:
Digite os comandos a seguir para adicionar um arquivo local do Avro, /tmp/mydata.avro
, a mydataset.mytable
usando um job de carregamento. Como as colunas relaxadas podem ser inferidas automaticamente via dados do Avro, não é necessário especificar um arquivo de esquema. mydataset
está no projeto padrão.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--source_format=AVRO \
mydataset.mytable \
/tmp/mydata.avro
Digite o comando a seguir para anexar dados de um arquivo JSON delimitado por nova linha no Cloud Storage a mydataset.mytable
usando um job de carregamento. O esquema contendo as colunas relaxadas está em um arquivo de esquema JSON local — /tmp/myschema.json
. mydataset
está no projeto padrão.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--source_format=NEWLINE_DELIMITED_JSON \
mydataset.mytable \
gs://mybucket/mydata.json \
/tmp/myschema.json
Digite o comando a seguir para anexar dados em um arquivo CSV na máquina local a mydataset.mytable
usando um job de carregamento. O comando usa a detecção automática de esquema para descobrir colunas relaxadas nos dados de origem. mydataset
está em myotherproject
, e não no projeto padrão.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--source_format=CSV \
--autodetect \
myotherproject:mydataset.mytable \
mydata.csv
API
Chame o método jobs.insert
. Em seguida, configure um job de load
e defina as propriedades a seguir:
- Faça referência aos dados no Cloud Storage usando a propriedade
sourceUris
. - Especifique o formato de dados definindo a propriedade
sourceFormat
. - Especifique o esquema na propriedade
schema
. - Especifique a opção de atualização de esquema usando a propriedade
schemaUpdateOptions
. - Defina a disposição de gravação da tabela de destino como
WRITE_APPEND
usando a propriedadewriteDisposition
.
Go
Antes de testar esta amostra, siga as instruções de configuração do Go 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 Go.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
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.
Transformar todas as colunas em NULLABLE
com um job de anexação
É possível relaxar todas as colunas em uma tabela ao anexar resultados da consulta a ela. É
possível relaxar todos os campos obrigatórios na tabela de destino definindo a sinalização --schema_update_option
como ALLOW_FIELD_RELAXATION
. Não é possível
relaxar colunas individuais em uma tabela de destino usando um anexo de consulta. Para transformar
colunas individuais com um job de anexação de carregamento, consulte Criar uma coluna NULLABLE
com um job de anexação.
Para transformar todas as colunas ao anexar resultados de consulta em uma tabela de destino, selecione uma das seguintes opções:
Console
Ainda não é possível transformar o modo de coluna usando o console do Google Cloud.
bq
Use o comando bq query
para consultar seus dados e especifique a sinalização --destination_table
para indicar qual tabela está sendo anexada.
Para mostrar que você está anexando resultados de consulta a uma tabela de destino atual, especifique a sinalização --append_table
.
Defina a sinalização --schema_update_option
como ALLOW_FIELD_RELAXATION
para indicar que todas as colunas REQUIRED
na tabela sendo anexada precisam ser alteradas para NULLABLE
.
Especifique a sinalização use_legacy_sql=false
para usar a sintaxe do GoogleSQL para a
consulta.
Se a tabela sendo anexada estiver em um conjunto de dados em um projeto diferente do padrão, adicione o ID do projeto ao nome do conjunto de dados no formato a seguir: PROJECT_ID:DATASET
.
Opcional: forneça a sinalização --location
e defina o valor do
local.
bq --location=LOCATION query \ --destination_table PROJECT_ID:DATASET.TABLE \ --append_table \ --schema_update_option=ALLOW_FIELD_RELAXATION \ --use_legacy_sql=false \ 'QUERY'
Substitua:
LOCATION
: o nome do seu local. A sinalização--location
é opcional. Por exemplo, se você estiver usando o BigQuery na região de Tóquio, defina o valor da sinalização comoasia-northeast1
. É possível definir um valor padrão para o local usando o arquivo .bigqueryrc;PROJECT_ID
: o ID do projetoDATASET
: o nome do conjunto de dados que contém a tabela a ser anexada.TABLE
: o nome da tabela que você está criando.QUERY
: uma consulta na sintaxe do GoogleSQL.
Exemplos:
Digite o comando a seguir para consultar mydataset.mytable
no projeto padrão e anexe os resultados da consulta a mydataset.mytable2
, que também está no projeto padrão. Esse comando altera todas as colunas REQUIRED
na tabela de destino para NULLABLE
.
bq query \
--destination_table mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
Digite o comando a seguir para consultar mydataset.mytable
no projeto padrão e para anexar os resultados da consulta a mydataset.mytable2
em myotherproject
. Esse comando altera todas as colunas REQUIRED
na tabela de destino para NULLABLE
.
bq query \
--destination_table myotherproject:mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
API
Chame o método jobs.insert
. Em seguida, configure um job de query
e defina as propriedades a seguir:
- Especifique a tabela de destino usando a propriedade
destinationTable
. - Defina a disposição de gravação da tabela de destino como
WRITE_APPEND
usando a propriedadewriteDisposition
. - Especifique a opção de atualização de esquema usando a propriedade
schemaUpdateOptions
. - Especifique a consulta GoogleSQL usando a propriedade
query
.
Go
Antes de testar esta amostra, siga as instruções de configuração do Go 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 Go.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
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.
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.
Alterar o valor padrão de uma coluna
Para alterar o valor padrão de uma coluna, selecione uma das seguintes opções:
Console
No Console do Google Cloud, acesse a página BigQuery.
No painel Explorer, expanda o projeto e o conjunto de dados e selecione a tabela.
No painel de detalhes, clique na guia Visualizar.
Clique em Editar esquema. Talvez seja necessário rolar para conferir esse botão.
Na página Esquema atual, localize o campo de nível superior que você quer mudar.
Insira o valor padrão para esse campo.
Clique em Save.
SQL
Use a
instrução DDL ALTER COLUMN SET DEFAULT
.
No Console do Google Cloud, acesse a página BigQuery.
No editor de consultas, digite a seguinte instrução:
ALTER TABLE mydataset.mytable ALTER COLUMN column_name SET DEFAULT default_expression;
Clique em
Executar.
Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.
Excluir uma coluna
É possível excluir uma coluna de uma tabela usando a
instrução DDL ALTER TABLE DROP COLUMN
.
A instrução não libera imediatamente o armazenamento associado à coluna descartada. Para saber mais sobre o impacto no armazenamento ao soltar uma coluna no armazenamento, consulte os detalhes da instrução ALTER TABLE DROP COLUMN
.
Há duas opções para recuperar imediatamente o armazenamento:
- Substitua uma tabela por uma consulta
SELECT * EXCEPT
. - Exporte os dados para o Cloud Storage, exclua as colunas indesejadas e carregue os dados em uma nova tabela com o esquema correto.