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 como- asia-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 como- asia-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 formato- field: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 formato- gs://bucket_name/[folder_name/]file_pattern.- Pode selecionar vários ficheiros do contentor especificando um caráter universal ( - *) no- file_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 - urisfornecendo vários caminhos.- Os exemplos seguintes mostram valores - urisválidos:- gs://bucket/path1/myfile.csv
- gs://bucket/path1/*.parquet
- gs://bucket/path1/file1*,- gs://bucket1/path1/*
 - Quando especifica valores - urisque 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 como- asia-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 formato- gs://bucket_name/[folder_name/]file_pattern.- Pode selecionar vários ficheiros do contentor especificando um caráter universal ( - *) no- file_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 - urisfornecendo vários caminhos.- Os exemplos seguintes mostram valores - urisválidos:- gs://bucket/path1/myfile.csv
- gs://bucket/path1/*.parquet
- gs://bucket/path1/file1*,- gs://bucket1/path1/*
 - Quando especifica valores - urisque 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 configurationdo objetoJobcom um objetoJobConfiguration.
- Preencha a secção querydo objetoJobConfigurationcom um objetoJobConfigurationQuery.
- Preencha a secção tableDefinitionsdo objetoJobConfigurationQuerycom um objetoExternalDataConfiguration.
- Chame o método jobs.insertpara executar a consulta de forma assíncrona ou o métodojobs.querypara 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.
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.
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.
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.