Esegui query sui dati Amazon S3

Questo documento descrive come eseguire query sui dati archiviati in un Tabella BigLake Amazon Simple Storage Service (Amazon S3).

Prima di iniziare

Assicurati di avere una tabella Amazon S3 BigLake.

Ruoli obbligatori

Per eseguire query sulle tabelle Amazon S3 BigLake, assicurati che il chiamante dell'API BigQuery abbia i seguenti ruoli:

  • Utente connessione BigQuery (roles/bigquery.connectionUser)
  • Visualizzatore dati BigQuery (roles/bigquery.dataViewer)
  • Utente BigQuery (roles/bigquery.user)

Il chiamante può essere il tuo account Account del servizio di connessione Amazon S3. In base alle tue autorizzazioni, puoi concediti questi ruoli o chiedi all'amministratore per concederteli. Per ulteriori informazioni sulla concessione dei ruoli, consulta Visualizzazione dei ruoli assegnabili nelle risorse.

Per visualizzare le autorizzazioni esatte necessarie per eseguire query nelle tabelle Amazon S3 BigLake, espandi Sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Potresti anche riuscire a ottenere queste autorizzazioni con i ruoli personalizzati. o altri ruoli predefiniti.

Esegui query sulle tabelle Amazon S3 BigLake

Dopo aver creato una tabella Amazon S3 BigLake, puoi eseguire una query utilizzando Sintassi GoogleSQL, come se era una tabella BigQuery standard.

I risultati delle query memorizzati nella cache in una tabella temporanea BigQuery. Per eseguire una query su un tabella BigLake, vedi Esegui una query su una tabella BigLake temporanea. Per saperne di più sulle limitazioni e sulle quote di BigQuery Omni, vedi limitazioni e le quote.

Quando crei una prenotazione in una regione BigQuery Omni, utilizza il metodo Versione Enterprise. Per scoprire come creare una prenotazione con una versione, consulta Creare prenotazioni.

Esegui una query su una tabella BigLake Amazon S3:

SQL

Per eseguire una query sulla tabella:

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor query, inserisci la seguente istruzione:

    SELECT * FROM DATASET_NAME.TABLE_NAME;
    

    Sostituisci quanto segue:

    • DATASET_NAME: il nome del set di dati che hai creato
    • TABLE_NAME: il nome della tabella che hai creato

    • Fai clic su Esegui.

Per ulteriori informazioni su come eseguire le query, vedi Eseguire una query interattiva.

Java

Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Java BigQuery documentazione di riferimento.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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

Eseguire una query su una tabella temporanea

BigQuery crea tabelle temporanee per archiviare i risultati delle query. Per recuperare il risultato della query da tabelle temporanee, puoi utilizzare la console Google Cloud o l'API BigQuery.

Seleziona una delle seguenti opzioni:

Console

Quando esegui una query su una tabella BigLake che fa riferimento a dati cloud esterni, puoi visualizzare i risultati della query visualizzati nella console Google Cloud.

API

Per eseguire query su una tabella BigLake utilizzando l'API, segui questi passaggi:

  1. Crea un oggetto Job.
  2. Chiama il metodo jobs.insert per eseguire la query in modo asincrono o utilizzare il metodo jobs.query eseguire la query in modalità sincrona, passando l'oggetto Job.
  3. Leggi le righe con jobs.getQueryResults passando il riferimento del job specificato e i metodi tabledata.list trasmettendo il riferimento alla tabella specificato del risultato della query.

Esegui una query sulla pseudocolonna _FILE_NAME

Le tabelle basate su origini dati esterne forniscono una pseudocolonna denominata _FILE_NAME. Questo contiene il percorso completo del file a cui appartiene la riga. Questa colonna è disponibile solo per le tabelle che fanno riferimento a dati esterni archiviati in Cloud Storage, Google Drive, Amazon S3 e Archiviazione BLOB di Azure.

Il nome della colonna _FILE_NAME è riservato, il che significa che non puoi creare una colonna con lo stesso nome in qualsiasi tabella. Per selezionare il valore di _FILE_NAME, devi utilizzare un alias. La seguente query di esempio dimostra la selezione di _FILE_NAME assegnando l'alias fn alla pseudocolonna.

  bq query \
  --project_id=PROJECT_ID \
  --use_legacy_sql=false \
  'SELECT
     name,
     _FILE_NAME AS fn
   FROM
     `DATASET.TABLE_NAME`
   WHERE
     name contains "Alex"' 

Sostituisci quanto segue:

  • PROJECT_ID è un ID progetto valido (questo flag non è obbligatorio se utilizzi Cloud Shell o se imposti un progetto predefinito in Google Cloud CLI)
  • DATASET è il nome del set di dati in cui è archiviato l'elemento esterno permanente tavola
  • TABLE_NAME è il nome della tabella esterna permanente

Quando la query ha un predicato di filtro nella pseudocolonna _FILE_NAME, BigQuery tenta di saltare la lettura dei file che non soddisfano il filtro. Simile consigli per eseguire query su tabelle partizionate per data di importazione mediante pseudocolonne . si applicano quando si creano predicati di query con la pseudocolonna _FILE_NAME.

Passaggi successivi