Consultar dados do Amazon S3

Neste documento, descrevemos como consultar dados armazenados em uma tabela do BigLake do Amazon Simple Storage Service (Amazon S3).

Antes de começar

Verifique se você tem uma tabela do Amazon S3 BigLake.

Papéis obrigatórios

Para consultar as tabelas do Amazon S3 BigLake, verifique se o autor da chamada da API BigQuery tem os seguintes papéis:

  • Usuário de conexão do BigQuery (roles/bigquery.connectionUser)
  • Leitor de dados do BigQuery (roles/bigquery.dataViewer)
  • Usuário do BigQuery (roles/bigquery.user)

O autor da chamada pode ser sua conta ou uma conta de serviço de conexão do Amazon S3. 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 ver as permissões exatas que são necessárias para consultar as tabelas do Amazon S3 BigLake, expanda a seção Permissões necessárias:

Permissões necessárias

Essas permissões também podem ser concedidas com papéis personalizados ou outros papéis predefinidos.

Consultar tabelas do Amazon S3 BigLake

Após criar uma tabela do Amazon S3 BigLake, consulte-a usando a sintaxe do Google SQL, como se ela fosse uma tabela padrão do BigQuery.

Os resultados de consulta em cache são armazenados em uma tabela temporária do BigQuery. Para conferir uma tabela temporária do BigLake, acesse Consultar uma tabela temporária do BigLake. Para mais informações sobre as limitações e cotas do BigQuery Omni, consulte limitações e cotas.

Ao criar uma reserva em uma região do BigQuery Omni, use a edição Enterprise. Para saber como criar uma reserva com uma edição, consulte Criar reservas.

Execute uma consulta em uma tabela do BigLake Amazon S3:

SQL

Para consultar a tabela:

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

    SELECT * FROM DATASET_NAME.TABLE_NAME;
    

    Substitua:

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

    • Clique em Executar.

Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.

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.

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());
    }
  }
}

Consultar uma tabela temporária

O BigQuery cria tabelas temporárias para armazenar os resultados da consulta. Para recuperar o resultado da consulta de tabelas temporárias, use o console do Google Cloud ou a API BigQuery.

Selecione uma das seguintes opções:

Console

Ao consultar uma tabela do BigLake que faz referência a dados da nuvem externa, você poderá conferir os resultados da consulta exibidos no console do Google Cloud.

API

Para consultar uma tabela do BigLake usando a API, siga estas etapas:

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

Consultar 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