Consultar dados do Cloud Storage em tabelas externas
Este documento descreve como consultar dados armazenados numa tabela externa do Cloud Storage.
Antes de começar
Certifique-se de que tem uma tabela externa do Cloud Storage.
Funções necessárias
Para consultar tabelas externas do Cloud Storage, certifique-se de que tem as seguintes funções:
- Visualizador de dados do BigQuery (
roles/bigquery.dataViewer
) - Utilizador do BigQuery (
roles/bigquery.user
) - Visualizador de objetos de armazenamento (
roles/storage.objectViewer
)
Consoante as suas autorizações, pode atribuir estas funções a si próprio ou pedir ao seu administrador para as atribuir. Para mais informações sobre a concessão de funções, consulte o artigo Ver as funções atribuíveis aos recursos.
Para ver as autorizações exatas do BigQuery necessárias para consultar tabelas externas, expanda a secção Autorizações necessárias:
Autorizações necessárias
bigquery.jobs.create
bigquery.readsessions.create
(Só é necessário se estiver a ler dados com a API BigQuery Storage Read)bigquery.tables.get
bigquery.tables.getData
Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.
Consultar tabelas externas permanentes
Depois de criar uma tabela externa do Cloud Storage, pode consultá-la através da
sintaxe do GoogleSQL, tal como se 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 de uma origem de dados externa através de uma tabela temporária é útil para consultas únicas e ad hoc sobre dados externos ou para processos de extração, transformação e carregamento (ETL).
Para consultar uma origem de dados externa sem criar uma tabela permanente, fornece uma definição de tabela para a tabela temporária e, em seguida, usa essa definição de tabela num comando ou numa chamada para consultar a tabela temporária. Pode fornecer a definição da tabela de qualquer uma das seguintes formas:
- Um ficheiro de definição de tabela
- Uma definição de esquema inline
- Um ficheiro de esquema JSON
O ficheiro de definição da tabela ou o esquema fornecido é usado para criar a tabela externa temporária e a consulta é executada na tabela externa temporária.
Quando usa uma tabela externa temporária, não cria uma tabela num dos seus conjuntos de dados do BigQuery. Uma vez que a tabela não está armazenada permanentemente num conjunto de dados, não pode ser partilhada com outras pessoas.
Pode criar e consultar uma tabela temporária associada a uma origem de dados externa através da ferramenta de linha de comandos bq, da API ou das bibliotecas de cliente.
bq
Consulta uma tabela temporária associada a uma origem de dados externa através do comando bq query
com a flag --external_table_definition
.
Quando usa a ferramenta de linhas de comando bq para consultar uma tabela temporária associada a uma origem de dados externa, pode identificar o esquema da tabela através do seguinte:
- Um ficheiro de definição de tabela (armazenado no seu computador local)
- Uma definição de esquema inline
- Um ficheiro de esquema JSON (armazenado no seu computador local)
(Opcional) Forneça a flag --location
e defina o valor para a sua
localização.
Para consultar uma tabela temporária associada à sua origem de dados externa através de um ficheiro de definição de tabela, introduza o seguinte comando.
bq --location=LOCATION query \ --external_table_definition=TABLE::DEFINITION_FILE \ 'QUERY'
Substitua o seguinte:
LOCATION
: o nome da sua localização. A flag--location
é opcional. Por exemplo, se estiver a usar o BigQuery na região de Tóquio, pode definir o valor da flag comoasia-northeast1
. Pode predefinir um valor para a localização através do ficheiro.bigqueryrc.TABLE
: o nome da tabela temporária que está a criar.DEFINITION_FILE
: o caminho para o ficheiro de definição da tabela no seu computador local.QUERY
: a consulta que está a enviar para a tabela temporária.
Por exemplo, o seguinte comando cria e consulta uma tabela temporária
denominada sales
através de um ficheiro de definição de tabela denominado sales_def
.
bq query \
--external_table_definition=sales::sales_def \
'SELECT
Region,
Total_sales
FROM
sales'
Para consultar uma tabela temporária associada à sua origem de dados externa através de uma definição de esquema inline, introduza o seguinte comando.
bq --location=LOCATION query \ --external_table_definition=TABLE::SCHEMA@SOURCE_FORMAT=BUCKET_PATH \ 'QUERY'
Substitua o seguinte:
LOCATION
: o nome da sua localização. A flag--location
é opcional. Por exemplo, se estiver a usar o BigQuery na região de Tóquio, pode definir o valor da flag comoasia-northeast1
. Pode predefinir um valor para a localização através do ficheiro.bigqueryrc.TABLE
: o nome da tabela temporária que está a criar.SCHEMA
: a definição do esquema inline no formatofield:data_type,field:data_type
.SOURCE_FORMAT
: o formato da origem de dados externa, por exemplo,CSV
.BUCKET_PATH
: o caminho para o contentor do Cloud Storage que contém os dados da tabela, no formatogs://bucket_name/[folder_name/]file_pattern
.Pode selecionar vários ficheiros do contentor especificando um caráter universal (
*
) nofile_pattern
. Por exemplo,gs://mybucket/file00*.parquet
. Para mais informações, consulte o artigo Suporte de carateres universais para URIs do Cloud Storage.Pode especificar vários contentores para a opção
uris
fornecendo vários caminhos.Os exemplos seguintes mostram valores
uris
válidos:gs://bucket/path1/myfile.csv
gs://bucket/path1/*.parquet
gs://bucket/path1/file1*
,gs://bucket1/path1/*
Quando especifica valores
uris
que segmentam vários ficheiros, todos esses ficheiros têm de partilhar um esquema compatível.Para mais informações sobre a utilização de URIs do Cloud Storage no BigQuery, consulte o caminho de recurso do Cloud Storage.
QUERY
: a consulta que está a enviar para a tabela temporária.
Por exemplo, o comando seguinte cria e consulta uma tabela temporária
denominada sales
associada a um ficheiro 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 associada à sua origem de dados externa através de um ficheiro de esquema JSON, introduza o seguinte comando.
bq --location=LOCATION query \ --external_table_definition=SCHEMA_FILE@SOURCE_FORMAT=BUCKET_PATH \ 'QUERY'
Substitua o seguinte:
LOCATION
: o nome da sua localização. A flag--location
é opcional. Por exemplo, se estiver a usar o BigQuery na região de Tóquio, pode definir o valor da flag comoasia-northeast1
. Pode predefinir um valor para a localização através do ficheiro.bigqueryrc.SCHEMA_FILE
: o caminho para o ficheiro de esquema JSON no seu computador local.SOURCE_FORMAT
: o formato da origem de dados externa, por exemplo,CSV
.BUCKET_PATH
: o caminho para o contentor do Cloud Storage que contém os dados da tabela, no formatogs://bucket_name/[folder_name/]file_pattern
.Pode selecionar vários ficheiros do contentor especificando um caráter universal (
*
) nofile_pattern
. Por exemplo,gs://mybucket/file00*.parquet
. Para mais informações, consulte o artigo Suporte de carateres universais para URIs do Cloud Storage.Pode especificar vários contentores para a opção
uris
fornecendo vários caminhos.Os exemplos seguintes mostram valores
uris
válidos:gs://bucket/path1/myfile.csv
gs://bucket/path1/*.parquet
gs://bucket/path1/file1*
,gs://bucket1/path1/*
Quando especifica valores
uris
que segmentam vários ficheiros, todos esses ficheiros têm de partilhar um esquema compatível.Para mais informações sobre a utilização de URIs do Cloud Storage no BigQuery, consulte o caminho de recurso do Cloud Storage.
QUERY
: a consulta que está a enviar para a tabela temporária.
Por exemplo, o comando seguinte cria e consulta uma tabela temporária
denominada sales
associada a um ficheiro CSV armazenado no Cloud Storage através do
ficheiro 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 através da API, siga estes passos:
- Crie um objeto
Job
. - Preencha a secção
configuration
do objetoJob
com um objetoJobConfiguration
. - Preencha a secção
query
do objetoJobConfiguration
com um objetoJobConfigurationQuery
. - Preencha a secçã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 o objetoJob
.
Java
Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
Node.js
Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Node.js BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
Python
Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Python BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
Consulte a pseudocoluna _FILE_NAME
As tabelas baseadas em origens de dados externas fornecem uma pseudocoluna denominada _FILE_NAME
. Esta coluna contém o caminho totalmente qualificado para o ficheiro ao qual a linha pertence. Esta coluna está
disponível apenas para tabelas que referenciam dados externos armazenados no
Cloud Storage, Google Drive,
Amazon S3 e armazenamento de blobs do Azure.
O nome da coluna _FILE_NAME
está reservado, o que significa que não pode criar uma coluna com esse nome em nenhuma das suas tabelas. Para selecionar o valor de _FILE_NAME
, tem de usar um alias. A consulta de exemplo seguinte demonstra a seleção de _FILE_NAME
através da atribuição
do alias fn
à 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 o seguinte:
-
PROJECT_ID
é um ID do projeto válido (esta flag não é necessária se usar o Cloud Shell ou se definir um projeto predefinido na CLI 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 ficheiros que não satisfazem o filtro. As recomendações
semelhantes às
consultas de tabelas particionadas por tempo de carregamento com pseudocolunas
aplicam-se quando cria predicados de consulta com a pseudocoluna _FILE_NAME
.
O que se segue?
- Saiba como usar o SQL no BigQuery.
- Saiba mais sobre as tabelas externas.
- Saiba mais acerca das quotas do BigQuery.