Consultar dados do Cloud Storage em tabelas externas
Neste documento, descrevemos como consultar dados armazenados em uma tabela externa do Cloud Storage.
Antes de começar
Verifique se você tem uma tabela externa do Cloud Storage.
Funções exigidas
Para consultar tabelas externas do Cloud Storage, verifique se você tem os seguintes papéis:
- Leitor de dados do BigQuery (
roles/bigquery.dataViewer
) - Usuário do BigQuery (
roles/bigquery.user
) - Leitor de objetos do Storage (
roles/storage.objectViewer
)
Dependendo das suas permissões, é possível conceder esses papéis a você mesmo ou pedir ao administrador para concedê-los. Para mais informações sobre como conceder papéis, consulte Como visualizar os papéis atribuíveis em recursos.
Para conferir as permissões exatas do BigQuery necessárias para consultar tabelas externas, expanda a seção Permissões necessárias:
Permissões necessárias
bigquery.jobs.create
bigquery.readsessions.create
: obrigatório apenas se você estiver lendo dados com a API BigQuery Storage Readbigquery.tables.get
bigquery.tables.getData
Essas permissões também podem ser concedidas com papéis personalizados ou outros papéis predefinidos.
Consultar tabelas externas permanentes
Após criar uma tabela externa do Cloud Storage, consulte-a usando a sintaxe do Google SQL, como se ela fosse uma tabela padrão do BigQuery. Por exemplo, SELECT field1, field2
FROM mydataset.my_cloud_storage_table;
.
Consultar tabelas externas temporárias
A consulta a uma fonte de dados externa usando uma tabela temporária é útil quando você quer consultar dados externos apenas uma vez, com um propósito específico, ou executar processos de Extração, transformação e carregamento (ETL).
Para consultar uma fonte de dados externa sem criar uma tabela permanente, forneça uma definição de tabela para a tabela temporária e use-a em um comando ou uma chamada para consultar a tabela temporária. É possível fornecer a definição da tabela de uma destas maneiras:
- Um arquivo de definição da tabela
- uma definição de esquema in-line;
- Um arquivo de esquema JSON
O arquivo de definição de tabela ou esquema fornecido é usado para criar a tabela externa temporária, e a consulta será executada nela.
A tabela externa temporária não é criada em um dos conjuntos de dados do BigQuery. Como ela não fica armazenada permanentemente em um conjunto de dados, não é possível compartilhá-la com outros.
É possível criar e consultar uma tabela temporária vinculada a uma fonte de dados externa usando a ferramenta de linha de comando bq, a API ou as bibliotecas de cliente.
bq
É possível consultar uma tabela temporária vinculada a uma fonte de dados externa usando o comando bq query
com a flag --external_table_definition
.
Ao usar
a ferramenta de linha de comando bq para consultar uma tabela temporária vinculada a uma fonte de dados externa,
é possível identificar o esquema dessa tabela usando:
- um arquivo de definição de tabela (armazenado em sua máquina local);
- uma definição de esquema in-line;
- um arquivo de esquema JSON (armazenado em sua máquina local).
Opcional: forneça a sinalização --location
e defina o valor do
local.
Para consultar uma tabela temporária vinculada à sua fonte de dados externa usando um arquivo de definição de tabela, digite o seguinte comando:
bq --location=LOCATION query \ --external_table_definition=TABLE::DEFINITION_FILE \ '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;TABLE
: o nome da tabela temporária que você está criandoDEFINITION_FILE
: o caminho para o arquivo de definição de tabelas na máquina local.QUERY
: a consulta que você está enviando para a tabela temporária.
Por exemplo, o comando a seguir cria e consulta uma tabela temporária
chamada sales
usando um arquivo de definição de tabela chamado sales_def
.
bq query \
--external_table_definition=sales::sales_def \
'SELECT
Region,
Total_sales
FROM
sales'
Para consultar uma tabela temporária vinculada à sua fonte de dados externa usando uma definição de esquema in-line, digite o seguinte comando.
bq --location=LOCATION query \ --external_table_definition=TABLE::SCHEMA@SOURCE_FORMAT=BUCKET_PATH \ '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;TABLE
: o nome da tabela temporária que você está criandoSCHEMA
: a definição de esquema in-line no formatofield:data_type,field:data_type
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.
QUERY
: a consulta que você está enviando para a tabela temporária.
Por exemplo, o comando a seguir cria e consulta uma tabela temporária
chamada sales
vinculada a um arquivo CSV armazenado no Cloud Storage com a
seguinte definição de esquema:
Region:STRING,Quarter:STRING,Total_sales:INTEGER
.
bq query \
--external_table_definition=sales::Region:STRING,Quarter:STRING,Total_sales:INTEGER@CSV=gs://mybucket/sales.csv \
'SELECT
Region,
Total_sales
FROM
sales'
Para consultar uma tabela temporária vinculada à sua fonte de dados externa usando um arquivo de esquema JSON, digite o seguinte comando:
bq --location=LOCATION query \ --external_table_definition=SCHEMA_FILE@SOURCE_FORMAT=BUCKET_PATH \ '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;SCHEMA_FILE
: o caminho para o arquivo de esquema JSON na máquina localSOURCE_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.
QUERY
: a consulta que você está enviando para a tabela temporária.
Por exemplo, o comando a seguir cria e consulta uma tabela temporária
chamada sales
vinculada a um arquivo CSV armazenado no Cloud Storage usando o
arquivo de esquema /tmp/sales_schema.json
.
bq query \ --external_table_definition=sales::/tmp/sales_schema.json@CSV=gs://mybucket/sales.csv \ 'SELECT Region, Total_sales FROM sales'
API
Para executar uma consulta usando a API, siga estas etapas:
- Criar um objeto
Job
. - Preencha a seção
configuration
do objetoJob
com um objetoJobConfiguration
. - Preencha a seção
query
do objetoJobConfiguration
com um objetoJobConfigurationQuery
. - Preencha a seção
tableDefinitions
do objetoJobConfigurationQuery
com um objetoExternalDataConfiguration
. - Chame o método
jobs.insert
para executar a consulta de forma assíncrona ou o métodojobs.query
para executar a consulta de forma síncrona, transmitindo no objetoJob
.
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.
Consulte a pseudocoluna _FILE_NAME
:
Tabelas baseadas em fontes de dados externas fornecem uma pseudocoluna denominada _FILE_NAME
. Ela contém o caminho totalmente qualificado para o arquivo ao qual a linha pertence. Essa coluna está disponível apenas para tabelas com referência a dados externos armazenados no Cloud Storage, Google Drive, Amazon S3 e Armazenamento de Blobs do Azure.
O nome de coluna _FILE_NAME
é reservado. Por isso, não crie nenhuma coluna com esse nome nas tabelas. Para selecionar o valor de _FILE_NAME
, use um alias. O exemplo de consulta a seguir mostra a seleção de _FILE_NAME
ao atribuir o alias fn
na pseudocoluna.
bq query \
--project_id=PROJECT_ID \
--use_legacy_sql=false \
'SELECT
name,
_FILE_NAME AS fn
FROM
`DATASET.TABLE_NAME`
WHERE
name contains "Alex"'
Substitua:
-
PROJECT_ID
é um ID de projeto válido (essa flag não é necessária se você usa o Cloud Shell ou configurou um projeto padrão na CLI do Google Cloud) -
DATASET
é o nome do conjunto de dados que armazena a tabela externa permanente -
TABLE_NAME
é o nome da tabela externa permanente.
Quando a consulta tem um predicado de filtro na pseudocoluna _FILE_NAME
, o BigQuery tenta ignorar a leitura de arquivos que não satisfazem esse filtro. Recomendações semelhantes às consultas de tabelas particionadas por tempo de processamento usando pseudocolunas são aplicadas ao criar predicados de consulta com a pseudocoluna _FILE_NAME
.
A seguir
- Saiba mais sobre como usar o SQL no BigQuery.
- Saiba mais sobre tabelas externas.
- Saiba mais sobre as cotas do BigQuery.