Eseguire query sui dati di Amazon S3

Questo documento descrive come eseguire query sui dati archiviati in una tabella BigLake di Amazon Simple Storage Service (Amazon S3).

Prima di iniziare

Assicurati di avere una tabella BigLake di Amazon S3.

Ruoli obbligatori

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

  • BigQuery Connection User (roles/bigquery.connectionUser)
  • BigQuery Data Viewer (roles/bigquery.dataViewer)
  • Utente BigQuery (roles/bigquery.user)

Il chiamante può essere il tuo account o un account di servizio di connessione Amazon S3. A seconda delle tue autorizzazioni, puoi assegnare questi ruoli a te stesso o chiedere all'amministratore di assegnarli a te. Per saperne di più sulla concessione dei ruoli, consulta Visualizzazione dei ruoli assegnabili sulle risorse.

Per vedere quali sono esattamente le autorizzazioni richieste per eseguire query sulle tabelle BigLake di Amazon S3, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

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

Eseguire query sulle tabelle BigLake di Amazon S3

Dopo aver creato una tabella BigLake di Amazon S3, puoi eseguirne query utilizzando la sintassi GoogleSQL, come se fosse una tabella BigQuery standard.

I risultati delle query memorizzati nella cache vengono archiviati in una tabella temporanea di BigQuery. Per eseguire query su una tabella BigLake temporanea, consulta Eseguire query su una tabella BigLake temporanea. Per saperne di più sulle limitazioni e sulle quote di BigQuery Omni, consulta limitazioni e quote.

Quando crei una prenotazione in una regione BigQuery Omni, utilizza l'edizione Enterprise. Per scoprire come creare una prenotazione con un'edizione, consulta Creare prenotazioni.

Esegui una query su una tabella BigLake di Amazon S3:

SQL

Per eseguire query sulla tabella:

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

    Vai a BigQuery

  2. Nell'editor di 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 saperne di più su come eseguire query, consulta Eseguire una query interattiva.

Java

Prima di provare questo esempio, segui le istruzioni di configurazione Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell' API Java di BigQuery.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, 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 query su una tabella temporanea

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

Seleziona una delle seguenti opzioni:

Console

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

API

Per eseguire query su una tabella BigLake utilizzando l'API:

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

Eseguire query sulla pseudo-colonna _FILE_NAME

Le tabelle basate su origini dati esterne forniscono una pseudo-colonna denominata _FILE_NAME. Questa colonna 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 questo nome in nessuna delle tue tabelle. Per selezionare il valore di _FILE_NAME, devi utilizzare un alias. La seguente query di esempio mostra la selezione di _FILE_NAME assegnando l'alias fn alla pseudo-colonna.

  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 che memorizza la tabella esterna permanente
  • TABLE_NAME è il nome della tabella esterna permanente

Quando la query ha un predicato di filtro sulla pseudo-colonna _FILE_NAME, BigQuery tenta di saltare la lettura dei file che non soddisfano il filtro. Quando crei predicati di query con la pseudo-colonna _FILE_NAME, si applicano consigli simili a quelli per l'esecuzione di query su tabelle partizionate per data di importazione utilizzando le pseudo-colonne.

Passaggi successivi