Consultar dados do Cloud Storage em tabelas BigLake

Este documento descreve como consultar dados armazenados numa tabela BigLake do Cloud Storage.

Antes de começar

Certifique-se de que tem uma tabela do BigLake do Cloud Storage.

Funções necessárias

Para consultar tabelas do BigLake no 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)

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 necessárias para consultar tabelas do Cloud Storage BigLake, expanda a secção Autorizações necessárias:

Autorizações necessárias

Também pode obter estas autorizações com funções personalizadas ou outras funções predefinidas

Consultar tabelas do BigLake

Depois de criar uma tabela BigLake do Cloud Storage, pode consultá-la através da sintaxe GoogleSQL, tal como se fosse uma tabela padrão do BigQuery. Por exemplo, SELECT field1, field2 FROM mydataset.my_cloud_storage_table;.

Consultar tabelas do BigLake com ferramentas de tratamento de dados externos

Pode usar conetores do BigQuery com outras ferramentas de processamento de dados para aceder a tabelas do BigLake no Cloud Storage. Para mais informações, consulte o artigo Conetores.

Apache Spark

O exemplo seguinte usa o Dataproc, mas também funciona com qualquer implementação do Spark que use o conetor Spark-BigQuery.

Neste exemplo, fornece o conetor Spark-BigQuery como uma ação de inicialização quando cria um cluster. Esta ação permite-lhe usar um bloco de notas do Zeppelin e praticar o percurso do utilizador analista de dados.

As versões do conetor Spark-BigQuery estão listadas no repositório GoogleCloudDataproc/spark-bigquery-connector do GitHub.

Crie um cluster de nó único com a ação de inicialização para o conetor do Spark-BigQuery:

gcloud dataproc clusters create biglake-demo-cluster \
    --optional-components=ZEPPELIN \
    --region=REGION \
    --enable-component-gateway \
    --single-node \
    --initialization-actions gs://goog-dataproc-initialization-actions-REGION/connectors/connectors.sh \
    --metadata spark-bigquery-connector-url= gs://spark-lib/bigquery/spark-bigquery-with-dependencies_SCALA_VERSION-CONNECTOR_VERSION.jar

Apache Hive

O exemplo seguinte usa o Dataproc, mas também funciona com qualquer implementação do Hive que use o conetor Hive-BigQuery.

Neste exemplo, fornece o conector Hive-BigQuery como uma ação de inicialização quando cria um cluster.

As versões do conetor Hive-BigQuery estão listadas no repositório do GitHub GoogleCloudDataproc/hive-bigquery-connector.

Crie um cluster de nó único com a ação de inicialização para o conetor do Hive-BigQuery:

gcloud dataproc clusters create biglake-hive-demo-cluster \
    --region=REGION \
    --single-node \
    --initialization-actions gs://goog-dataproc-initialization-actions-REGION/connectors/connectors.sh \
    --metadata hive-bigquery-connector-url=gs://goog-dataproc-artifacts-REGION/hive-bigquery/hive-bigquery-connector-CONNECTOR_VERSION.jar

Para mais informações acerca do conetor Hive-BigQuery, consulte o artigo Use o conetor Hive-BigQuery.

Dataflow

Para ler tabelas do BigLake a partir do Dataflow, use o conetor do Dataflow no modo DIRECT_READ para usar a API BigQuery Storage. A leitura a partir de uma string de consulta também é suportada. Consulte o BigQuery I/O na documentação do Apache Beam.

Consultar tabelas temporárias do BigLake

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:

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

Use o comando bq query com a flag --external_table_definition.

(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@us.myconnection \
'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@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \
'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 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.

  • PROJECT_ID: o projeto que contém a ligação.

  • REGION: a região que contém a ligação, por exemplo, us.

  • CONNECTION_ID: o nome da associação, por exemplo, myconnection.

  • 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@us.myconnection \
'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@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \
'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 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.

  • PROJECT_ID: o projeto que contém a ligação.

  • REGION: a região que contém a ligação, por exemplo, us.

  • CONNECTION_ID: o nome da associação, por exemplo, myconnection.

  • 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@us.myconnection \
  'SELECT
      Region,
      Total_sales
    FROM
      sales'

API

Para executar uma consulta através da API, siga estes passos:

  1. Crie um objeto Job.
  2. Preencha a secção configuration do objeto Job com um objeto JobConfiguration.
  3. Preencha a secção query do objeto JobConfiguration com um objeto JobConfigurationQuery.
  4. Preencha a secção tableDefinitions do objeto JobConfigurationQuery com um objeto ExternalDataConfiguration. Especifique a ligação a usar para ligar ao Cloud Storage no campo connectionId.
  5. Chame o método jobs.insert para executar a consulta de forma assíncrona ou o método jobs.query para executar a consulta de forma síncrona, transmitindo o objeto Job.

O que se segue?