Consultar dados do Amazon S3

Este documento descreve como consultar dados armazenados numa tabela do BigLake do Amazon Simple Storage Service (Amazon S3).

Antes de começar

Certifique-se de que tem uma tabela do BigLake do Amazon S3.

Funções necessárias

Para consultar tabelas do BigLake do Amazon S3, certifique-se de que o autor da chamada da API BigQuery tem as seguintes funções:

  • Utilizador de ligação do BigQuery (roles/bigquery.connectionUser)
  • Visualizador de dados do BigQuery (roles/bigquery.dataViewer)
  • Utilizador do BigQuery (roles/bigquery.user)

O autor da chamada pode ser a sua conta ou uma conta de serviço de ligação do Amazon S3. 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 BigLake no Amazon S3, expanda a secção Autorizações necessárias:

Autorizações necessárias

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

Consultar tabelas do BigLake no Amazon S3

Depois de criar uma tabela BigLake do Amazon S3, pode consultá-la através da sintaxe GoogleSQL, tal como se fosse uma tabela padrão do BigQuery.

Os resultados da consulta em cache são armazenados numa tabela temporária do BigQuery. Para consultar uma tabela temporária do BigLake, consulte o artigo Consulte uma tabela temporária do BigLake. Para mais informações acerca das limitações e quotas do BigQuery Omni, consulte as limitações e as quotas.

Quando criar uma reserva numa região do BigQuery Omni, use a edição Enterprise. Para saber como criar uma reserva com uma edição, consulte o artigo Crie reservas.

Execute uma consulta numa tabela do Amazon S3 do BigLake:

SQL

Para consultar a tabela:

  1. Na Trusted Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, introduza a seguinte declaração:

    SELECT * FROM DATASET_NAME.TABLE_NAME;

    Substitua o seguinte:

    • DATASET_NAME: o nome do conjunto de dados que criou
    • TABLE_NAME: o nome da tabela que criou

    • Clique em Executar.

Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

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.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.CsvOptions;
import com.google.cloud.bigquery.DatasetId;
import com.google.cloud.bigquery.ExternalTableDefinition;
import com.google.cloud.bigquery.Field;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.Schema;
import com.google.cloud.bigquery.StandardSQLTypeName;
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.TableInfo;
import com.google.cloud.bigquery.TableResult;

// Sample to queries an external data source aws s3 using a permanent table
public class QueryExternalTableAws {

  public static void main(String[] args) throws InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    String externalTableName = "MY_EXTERNAL_TABLE_NAME";
    // Query to find states starting with 'W'
    String query =
        String.format(
            "SELECT * FROM s%.%s.%s WHERE name LIKE 'W%%'",
            projectId, datasetName, externalTableName);
    queryExternalTableAws(query);
  }

  public static void queryExternalTableAws(String query) throws InterruptedException {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableResult results = bigquery.query(QueryJobConfiguration.of(query));

      results
          .iterateAll()
          .forEach(row -> row.forEach(val -> System.out.printf("%s,", val.toString())));

      System.out.println("Query on aws external permanent table performed successfully.");
    } catch (BigQueryException e) {
      System.out.println("Query not performed \n" + e.toString());
    }
  }
}

Consulte uma tabela temporária

O BigQuery cria tabelas temporárias para armazenar os resultados das consultas. Para obter o resultado da consulta de tabelas temporárias, pode usar a Trusted Cloud consola ou a API BigQuery.

Selecione uma das seguintes opções:

Consola

Quando consulta uma tabela do BigLake que faz referência a dados externos na nuvem, pode ver os resultados da consulta apresentados na Trusted Cloud consola.

API

Para consultar uma tabela do BigLake através da API, siga estes passos:

  1. Crie um objeto Job.
  2. 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.
  3. Leia linhas com o método jobs.getQueryResults transmitindo a referência da tarefa fornecida e os métodos tabledata.list transmitindo a referência da tabela fornecida do resultado da consulta.

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?