Crie um ficheiro de definição de tabela para uma origem de dados externa
Esta página descreve como criar um ficheiro de definição de tabela para uma origem de dados externa. Uma origem de dados externa é aquela que pode consultar diretamente, mesmo que os dados não estejam armazenados no BigQuery.
Um ficheiro de definição de tabela contém a definição do esquema e os metadados de uma tabela externa, como o formato de dados da tabela e as propriedades relacionadas. Quando cria um ficheiro de definição de tabela, pode usar a deteção automática do esquema para definir o esquema de uma origem de dados externa. Pode fornecer o esquema incorporado ou um ficheiro JSON com a definição do esquema.
Os ficheiros de definição de tabelas são usados com a ferramenta de linhas de comando bq. As propriedades num ficheiro de definição de tabela também se aplicam à criação de um
ExternalDataConfiguration
quando usa a API REST. Não usa ficheiros de definição de tabelas quando cria uma tabela externa através da consola. Google Cloud
Pode criar ficheiros de definição de tabelas para descrever uma tabela externa permanente ou temporária para as seguintes origens de dados externas:
Cloud Storage
- Valores separados por vírgulas (.csv)
- JSON delimitado por Newline
- Ficheiros Avro
- Ficheiros de exportação do Datastore
- Ficheiros ORC
- Ficheiros Parquet
- Ficheiros de exportação do Firestore
Google Drive
- Valores separados por vírgulas (.csv)
- JSON delimitado por Newline
- Ficheiros Avro
- Google Sheets
Bigtable
Antes de começar
Para criar um ficheiro de definição de tabela, precisa do URI da sua origem de dados:
- Para uma origem de dados do Drive, precisa do URI do Drive
- Para uma origem de dados do Cloud Storage, precisa do URI do Cloud Storage
- Para uma origem de dados do Bigtable, precisa do URI do Bigtable
Crie um ficheiro de definição para ficheiros CSV, JSON ou do Google Sheets
Use um dos seguintes métodos para criar um ficheiro de definição de tabela para ficheiros CSV, JSON ou do Google Sheets no Cloud Storage ou no Drive:
Use a flag autodetect
Se especificar um ficheiro CSV, JSON ou do Google Sheets sem incluir uma descrição do esquema inline ou um ficheiro de esquema, pode usar a flag --autodetect
para definir a opção "autodetect"
como true
no ficheiro de definição da tabela. Quando a deteção automática está ativada, o BigQuery tenta inferir automaticamente o esquema. Para mais informações, consulte o artigo
Deteção automática de esquemas para origens de dados externas.
Use a deteção automática com uma origem de dados do Cloud Storage
Crie um ficheiro de definição de tabela para uma origem de dados do Cloud Storage:
Use o comando
bq mkdef
com a flag--autodetect
para criar um ficheiro de definição de tabela. O comandomkdef
gera um ficheiro de definição de tabela no formato JSON. O exemplo seguinte cria uma definição de tabela e escreve o resultado num ficheiro:/tmp/file_name
.bq mkdef \ --autodetect \ --source_format=SOURCE_FORMAT \ "URI" > /tmp/FILE_NAME
Substitua o seguinte:
SOURCE_FORMAT
: o formato do ficheiroFILE_NAME
: o nome do ficheiro de definição da tabelaURI
: o URI do Cloud StoragePor exemplo,
gs://mybucket/myfile
.
(Opcional) Abra o ficheiro de definição da tabela num editor de texto. Por exemplo, o comando
nano /tmp/file_name
abre o ficheiro no nano. O ficheiro deve ter o seguinte aspeto para uma origem de dados externos CSV. O aviso"autodetect"
está definido paratrue
.{ "autodetect": true, "csvOptions": { "allowJaggedRows": false, "allowQuotedNewlines": false, "encoding": "UTF-8", "fieldDelimiter": ",", "quote": "\"", "skipLeadingRows": 0 }, "sourceFormat": "CSV", "sourceUris": [ "URI" ] }
(Opcional) Edite manualmente o ficheiro de definição da tabela para modificar, adicionar ou eliminar definições gerais, como
maxBadRecords
eignoreUnknownValues
. Não existem definições de configuração específicas para ficheiros de origem JSON, mas existem definições que se aplicam a ficheiros CSV e Folhas de cálculo do Google. Para mais informações, consulteExternalDataConfiguration
na referência da API.
Use a deteção automática com uma origem de dados do Drive
Crie um ficheiro de definição de tabela para uma origem de dados do Drive:
Use o comando
bq mkdef
com a flag--autodetect
para criar uma definição de tabela. O comandomkdef
gera um ficheiro de definição de tabela no formato JSON. O exemplo seguinte cria uma definição de tabela e escreve o resultado num ficheiro:/tmp/file_name
.bq mkdef \ --autodetect \ --source_format=SOURCE_FORMAT \ "URI" > /tmp/FILE_NAME
Substitua o seguinte:
SOURCE_FORMAT
: o formato do ficheiroFILE_NAME
: o nome do ficheiro de definição da tabelaURI
: o URI do DrivePor exemplo,
https://drive.google.com/open?id=123ABCD123AbcD123Abcd
.
Abra o ficheiro de definição da tabela num editor de texto. Por exemplo, o comando
nano /tmp/file_name
abre o ficheiro no nano. O ficheiro deve ter o seguinte aspeto para uma origem de dados externa do Google Sheets. O aviso"autodetect"
está definido paratrue
.{ "autodetect": true, "sourceFormat": "GOOGLE_SHEETS", "sourceUris": [ "URI" ] }
(Opcional) Edite manualmente o ficheiro de definição da tabela para modificar, adicionar ou eliminar definições gerais, como
maxBadRecords
eignoreUnknownValues
. Não existem definições de configuração específicas para ficheiros de origem JSON, mas existem definições que se aplicam a ficheiros CSV e Folhas de cálculo do Google. Para mais informações, consulteExternalDataConfiguration
na referência da API.Para especificar uma folha ou um intervalo de células específico num ficheiro do Google Sheets, adicione a propriedade
range
ao objetoGoogleSheetsOptions
no ficheiro de definição da tabela. Para consultar uma página específica, especifique o nome da página. Para consultar um intervalo de células, especifique o intervalo no formato:sheet_name!top_left_cell_id:bottom_right_cell_id
, por exemplo,"Sheet1!A1:B20"
. Se o parâmetrorange
não for especificado, é usada a primeira folha no ficheiro.
Use um esquema inline
Se não quiser usar a deteção automática de esquemas, pode criar um ficheiro de definição de tabela fornecendo uma definição de esquema inline. Para fornecer uma definição de esquema inline, liste os campos e os tipos de dados na linha de comandos no seguinte formato: FIELD:DATA_TYPE,FIELD:DATA_TYPE
.
Use um esquema inline com uma origem de dados do Cloud Storage ou do Drive
Crie uma definição de tabela para uma origem de dados do Cloud Storage ou do Drive usando uma definição de esquema inline:
Use o comando
bq mkdef
com a flag--noautodetect
para criar uma definição de tabela. O comandomkdef
gera um ficheiro de definição de tabela no formato JSON. O exemplo seguinte cria uma definição de tabela e escreve o resultado num ficheiro:/tmp/file_name
.bq mkdef \ --noautodetect \ --source_format=SOURCE_FORMAT \ "URI" \ FIELD:DATA_TYPE,FIELD:DATA_TYPE > /tmp/FILE_NAME
Substitua o seguinte
SOURCE_FORMAT
: o formato do ficheiro de origemURI
: o URI do Cloud Storage ou o URI do DrivePor exemplo,
gs://mybucket/myfile
para o Cloud Storage ouhttps://drive.google.com/open?id=123ABCD123AbcD123Abcd
para o Drive.FIELD:DATA_TYPE,FIELD:DATA_TYPE
: a definição do esquemaPor exemplo,
Name:STRING,Address:STRING, ...
.FILE_NAME
: o nome do ficheiro de definição da tabela
(Opcional) Abra o ficheiro de definição da tabela num editor de texto. Por exemplo, o comando
nano /tmp/file_name
abre o ficheiro no nano. O ficheiro deve ter o seguinte aspeto. Repare que a opção"autodetect"
não está ativada e as informações do esquema são escritas no ficheiro de definição da tabela.{ "schema": { "fields": [ { "name": "FIELD", "type": "DATA_TYPE" }, { "name": "FIELD", "type": "DATA_TYPE" } ... ] }, "sourceFormat": "NEWLINE_DELIMITED_JSON", "sourceUris": [ "URI" ] }
(Opcional) Edite manualmente o ficheiro de definição da tabela para modificar, adicionar ou eliminar definições gerais, como
maxBadRecords
eignoreUnknownValues
. Não existem definições de configuração específicas para ficheiros de origem JSON, mas existem definições que se aplicam a ficheiros CSV e Folhas de cálculo do Google. Para mais informações, consulteExternalDataConfiguration
na referência da API.
Use um ficheiro de esquema JSON
Se não quiser usar a deteção automática nem fornecer uma definição de esquema inline, pode criar um ficheiro de esquema JSON e referenciá-lo quando criar o ficheiro de definição da tabela. Crie o ficheiro de esquema JSON manualmente na sua máquina local. A referência a um ficheiro de esquema JSON armazenado no Cloud Storage ou no Drive não é suportada.
Use um ficheiro de esquema com uma origem de dados do Cloud Storage
Crie uma definição de tabela para uma origem de dados do Cloud Storage usando um ficheiro de esquema JSON:
Use o comando
bq mkdef
com a flag--noautodetect
para criar uma definição de tabela. O comandomkdef
gera um ficheiro de definição de tabela no formato JSON. O exemplo seguinte cria uma definição de tabela e escreve o resultado num ficheiro:/tmp/file_name
.bq mkdef \ --noautodetect \ --source_format=SOURCE_FORMAT \ "URI" \ PATH_TO_SCHEMA_FILE > /tmp/FILE_NAME
Substitua o seguinte:
SOURCE_FORMAT
: o formato do ficheiroFILE_NAME
: o nome do ficheiro de definição da tabelaURI
: o URI do Cloud StoragePor exemplo,
gs://mybucket/myfile
.PATH_TO_SCHEMA_FILE
: a localização do ficheiro de esquema JSON no seu computador local
(Opcional) Abra o ficheiro de definição da tabela num editor de texto. Por exemplo, o comando
nano /tmp/file_name
abre o ficheiro no
nano. O ficheiro deve ter o seguinte aspeto. Repare que a opção"autodetect"
não está ativada e as informações do esquema são escritas no ficheiro de definição da tabela.{ "schema": { "fields": [ { "name": "FIELD", "type": "DATA_TYPE" }, { "name": "FIELD", "type": "DATA_TYPE" } ... ] }, "sourceFormat": "NEWLINE_DELIMITED_JSON", "sourceUris": [ "URI" ] }
(Opcional) Edite manualmente o ficheiro de definição da tabela para modificar, adicionar ou eliminar definições gerais, como
maxBadRecords
eignoreUnknownValues
. Não existem definições de configuração específicas para ficheiros de origem JSON, mas existem definições que se aplicam a ficheiros CSV e Folhas de cálculo do Google. Para mais informações, consulteExternalDataConfiguration
na referência da API.
Use um ficheiro de esquema com uma origem de dados do Drive
Crie uma definição de tabela para uma origem de dados do Drive usando um ficheiro de esquema JSON:
Use o comando
bq mkdef
com a flag--noautodetect
para criar uma definição de tabela. O comandomkdef
gera um ficheiro de definição de tabela no formato JSON. O exemplo seguinte cria uma definição de tabela e escreve o resultado num ficheiro:/tmp/file_name
.bq mkdef \ --noautodetect \ --source_format=source_format \ "URI" \ PATH_TO_SCHEMA_FILE > /tmp/FILE_NAME
Substitua o seguinte:
SOURCE_FORMAT
: o formato do ficheiro de origemURI
: o URI do DrivePor exemplo,
https://drive.google.com/open?id=123ABCD123AbcD123Abcd
.PATH_TO_SCHEMA_FILE
: a localização do ficheiro de esquema JSON no seu computador localFILE_NAME
: o nome do ficheiro de definição da tabela
Abra o ficheiro de definição da tabela num editor de texto. Por exemplo, o comando
nano /tmp/file_name
abre o ficheiro no nano. O ficheiro deve ter o seguinte aspeto. Repare que"autodetect"
não está ativado e as informações do esquema são escritas no ficheiro de definição da tabela.{ "schema": { "fields": [ { "name": "FIELD", "type": "DATA_TYPE" }, { "name": "FIELD", "type": "DATA_TYPE" } ... ] }, "sourceFormat": "GOOGLE_SHEETS", "sourceUris": [ "URI" ] }
(Opcional) Edite manualmente o ficheiro de definição da tabela para modificar, adicionar ou eliminar definições gerais, como
maxBadRecords
eignoreUnknownValues
. Não existem definições de configuração específicas para ficheiros de origem JSON, mas existem definições que se aplicam a ficheiros CSV e Folhas de cálculo do Google. Para mais informações, consulteExternalDataConfiguration
na referência da API.Para especificar uma folha ou um intervalo de células específico num ficheiro do Google Sheets, adicione a propriedade
range
ao objetoGoogleSheetsOptions
no ficheiro de definição da tabela. Para consultar uma página específica, especifique o nome da página. Para consultar um intervalo de células, especifique o intervalo no formato:sheet_name!top_left_cell_id:bottom_right_cell_id
, por exemplo,"Sheet1!A1:B20"
. Se o parâmetrorange
não for especificado, é usada a primeira folha no ficheiro.
Crie um ficheiro de definição para formatos autodescritivos
O Avro, o Parquet e o ORC são formatos autodescritivos. Os ficheiros de dados nestes formatos contêm as suas próprias informações de esquema. Se usar um destes formatos como uma origem de dados externa, o BigQuery obtém automaticamente o esquema através dos dados de origem. Quando cria uma definição de tabela, não precisa de usar a deteção automática de esquemas nem fornecer uma definição de esquema inline ou um ficheiro de esquema.
Pode criar um ficheiro de definição de tabela para dados Avro, Parquet ou ORC armazenados no Cloud Storage ou no Drive:
Use o comando
bq mkdef
para criar uma definição de tabela.bq mkdef \ --source_format=FORMAT \ "URI" > FILE_NAME
Substitua o seguinte:
FORMAT
: o formato de origemURI
: o URI do Cloud Storage ou o URI do DrivePor exemplo,
gs://mybucket/myfile
para o Cloud Storage ouhttps://drive.google.com/open?id=123ABCD123AbcD123Abcd
para o Drive.FILE_NAME
: o nome do ficheiro de definição da tabela
Opcional: abra o ficheiro de definição da tabela num editor de texto. O ficheiro tem um aspeto semelhante ao seguinte:
{ "sourceFormat": "AVRO", "sourceUris": [ "URI" ] }
Opcional: edite manualmente o ficheiro de definição da tabela para modificar, adicionar ou eliminar definições gerais, como
maxBadRecords
eignoreUnknownValues
. Para mais informações, consulteExternalDataConfiguration
na referência da API.
Crie um ficheiro de definição para dados particionados por Hive
Use o comando bq mkdef
com os indicadores hive_partitioning_mode
e hive_partitioning_source_uri_prefix
para criar um ficheiro de definição para dados particionados por Hive armazenados no Cloud Storage, no Amazon Simple Storage Service (Amazon S3) ou no Azure Blob Storage.
Crie um ficheiro de definição para o Datastore e o Firestore
Se usar uma exportação do Datastore ou do Firestore como uma origem de dados externa, o BigQuery obtém automaticamente o esquema através dos dados de origem autodescritivos. Quando cria uma definição de tabela, não tem de fornecer uma definição de esquema inline nem um ficheiro de esquema.
Pode criar um ficheiro de definição de tabela para dados de exportação do Datastore e do Firestore armazenados no Cloud Storage:
Use o comando
bq mkdef
para criar uma definição de tabela. Não precisa de usar a flag--noautodetect
com ficheiros de cópia de segurança do Datastore ou do Firestore. A deteção automática do esquema está desativada para estes tipos de ficheiros. O comandomkdef
gera um ficheiro de definição de tabela no formato JSON. O exemplo seguinte cria uma definição de tabela e escreve o resultado num ficheiro:/tmp/file_name
.bq mkdef \ --source_format=DATASTORE_BACKUP \ "URI" > /tmp/FILE_NAME
Substitua o seguinte:
URI
: o URI do Cloud StorageFILE_NAME
: o nome do ficheiro de definição da tabela
O formato de origem
DATASTORE_BACKUP
é usado para o Datastore e o Firestore.(Opcional) Abra o ficheiro de definição da tabela num editor de texto. Por exemplo, o comando
nano /tmp/file_name
abre o ficheiro no nano. O ficheiro deve ter o seguinte aspeto. Repare que não é necessária a definição"autodetect"
.{ "sourceFormat": "DATASTORE_BACKUP", "sourceUris": [ "gs://URI" ] }
(Opcional) Edite manualmente o ficheiro de definição da tabela para modificar, adicionar ou eliminar definições, como
maxBadRecords
eignoreUnknownValues
. Não existem definições de configuração específicas dos ficheiros de exportação do Datastore e do Firestore. Para mais informações, consulteExternalDataConfiguration
na referência da API.
Crie um ficheiro de definição para o Bigtable
Quando cria um ficheiro de definição de tabela para o Bigtable, gera manualmente o ficheiro no formato JSON. Atualmente, a utilização do comando mkdef
para criar uma definição de tabela não é suportada para origens de dados do Bigtable.
A deteção automática de esquemas também não é suportada para o Bigtable. Para ver uma lista das opções de definição de tabelas do Bigtable, consulte BigtableOptions
na referência da API REST.
Um ficheiro de definição de tabela JSON para o Bigtable tem o seguinte aspeto. Com este ficheiro de definição de tabela, o BigQuery lê dados de uma única família de colunas, interpretando os valores como números inteiros codificados binários.
{ "sourceFormat": "BIGTABLE", "sourceUris": [ "https://googleapis.com/bigtable/projects/PROJECT_ID/instances/INSTANCE_ID[/appProfiles/APP_PROFILE_ID]/tables/TABLE_NAME" ], "bigtableOptions": { "columnFamilies" : [ { "familyId": "FAMILY_ID", "type": "INTEGER", "encoding": "BINARY" } ] } }
Substitua o seguinte:
PROJECT_ID
: o projeto que contém o seu cluster do BigtableINSTANCE_ID
: o ID da instância do BigtableAPP_PROFILE_ID
(opcional): o ID do perfil da app que quer usar para ler os seus dados do Bigtable. As definições do perfil da app indicam se a tabela externa usa o Data Boost ou nós aprovisionados para computação.TABLE_NAME
: o nome da tabela que está a consultarFAMILY_ID
: o identificador da família de colunas
Para mais informações, consulte o artigo Obtenha o URI do Bigtable.
Suporte de carateres universais para ficheiros de definição de tabelas
Se os seus dados estiverem separados em vários ficheiros, pode usar um caráter universal asterisco (*) para selecionar vários ficheiros. A utilização do caráter universal asterisco tem de seguir estas regras:
- O asterisco pode aparecer no nome do objeto ou no final do nome do objeto.
- A utilização de vários asteriscos não é suportada. Por exemplo, o caminho
gs://mybucket/fed-*/temp/*.csv
é inválido. - A utilização de um asterisco com o nome do contentor não é suportada.
Exemplos:
O exemplo seguinte mostra como selecionar todos os ficheiros em todas as pastas que começam com o prefixo
gs://mybucket/fed-samples/fed-sample
:gs://mybucket/fed-samples/fed-sample*
O exemplo seguinte mostra como selecionar apenas ficheiros com a extensão
.csv
na pasta com o nomefed-samples
e quaisquer subpastas defed-samples
:gs://mybucket/fed-samples/*.csv
O exemplo seguinte mostra como selecionar ficheiros com um padrão de nomenclatura de
fed-sample*.csv
na pasta denominadafed-samples
. Este exemplo não seleciona ficheiros em subpastas defed-samples
.gs://mybucket/fed-samples/fed-sample*.csv
Quando usar a ferramenta de linhas de comando bq, pode ter de usar o caráter de escape no asterisco em algumas plataformas.
Se usar um carater universal de asterisco, coloque o nome do contentor e do ficheiro entre aspas. Por exemplo, se tiver dois ficheiros com os nomes fed-sample000001.csv
e fed-sample000002.csv
e quiser usar um asterisco para selecionar ambos, o URI do contentor seria "gs://mybucket/fed-sample*"
.
O caráter universal *
não é permitido quando cria ficheiros de definição de tabelas
para as seguintes origens de dados:
- Bigtable. Para dados do Bigtable, só é possível especificar uma origem de dados. O valor do URI tem de ser um URL HTTPS válido para uma tabela do Bigtable.
- Datastore ou Firestore. Datastore
ou exportações do Firestore armazenadas no
Cloud Storage. Para as cópias de segurança do Datastore, só é possível especificar uma origem de dados. O valor do URI tem de terminar com
.backup_info
ou.export_metadata
. - Drive. Dados armazenados no Drive.
O que se segue?
- Saiba como consultar dados do Cloud Storage.
- Saiba como consultar dados do Drive.
- Saiba como consultar dados do Bigtable.