Amazon S3-Daten abfragen

In diesem Dokument wird die Abfrage von Daten beschrieben, die in einer BigLake-Tabelle von Amazon Simple Storage Service (Amazon S3) gespeichert sind.

Hinweis

Prüfen Sie, ob Sie eine Amazon S3-BigLake-Tabelle haben.

Erforderliche Rollen

Zum Abfragen von Amazon S3 BigLake-Tabellen muss der Aufrufer der BigQuery API die folgenden Rollen haben:

  • BigQuery-Verbindungsnutzer (roles/bigquery.connectionUser)
  • BigQuery Datenbetrachter (roles/bigquery.dataViewer)
  • BigQuery-Nutzer (roles/bigquery.user)

Der Aufrufer kann Ihr Konto oder ein Amazon S3-Verbindungsdienstkonto sein. Abhängig von Ihren Berechtigungen können Sie diese Rollen selbst zuweisen oder Ihren Administrator bitten, sie Ihnen zu gewähren. Weitere Informationen zum Gewähren von Berechtigungen finden Sie unter Zuweisbare Rollen für Ressourcen aufrufen.

Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die genauen Berechtigungen anzuzeigen, die zum Abfragen von Amazon S3 BigLake-Tabellen erforderlich sind:

Erforderliche Berechtigungen

Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Amazon S3 BigLake-Tabellen abfragen

Nachdem Sie eine Amazon S3-BigLake-Tabelle erstellt haben, können Sie sie mit der GoogleSQL-Syntax abfragen, so als wäre sie eine Standard-BigQuery-Tabelle.

Die im Cache gespeicherten Abfrageergebnisse werden in einer temporären BigQuery-Tabelle gespeichert. Informationen zum Abfragen einer temporären BigLake-Tabelle finden Sie unter Temporäre BigLake-Tabelle abfragen. Weitere Informationen zu den Einschränkungen und Kontingenten in BigQuery Omni finden Sie unter Einschränkungen und Kontingente.

Verwenden Sie beim Erstellen einer Reservierung in einer BigQuery Omni-Region die Enterprise Edition. Informationen zum Erstellen einer Reservierung mit einer Version finden Sie unter Reservierungen erstellen.

Führen Sie eine Abfrage für eine BigLake-Amazon S3-Tabelle aus:

SQL

So fragen Sie die Tabelle ab:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    SELECT * FROM DATASET_NAME.TABLE_NAME;
    

    Ersetzen Sie Folgendes:

    • DATASET_NAME: der Name des Datasets, das Sie erstellt haben
    • TABLE_NAME: der Name der von Ihnen erstellten Tabelle

    • Klicken Sie auf Ausführen.

Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.

Java

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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

Temporäre Tabelle abfragen

BigQuery erstellt temporäre Tabellen zum Speichern von Abfrageergebnissen. Sie können das Abfrageergebnis aus temporären Tabellen mit der Google Cloud Console oder der BigQuery API abrufen.

Wählen Sie eine der folgenden Optionen aus:

Console

Wenn Sie eine BigLake-Tabelle abfragen, die auf externe Cloud-Daten verweist, können Sie die in der Google Cloud Console angezeigten Abfrageergebnisse aufrufen.

API

So fragen Sie eine BigLake-Tabelle mithilfe der API ab:

  1. Erstellen Sie ein Jobobjekt.
  2. Rufen Sie die Methode jobs.insert auf, um die Abfrage asynchron auszuführen, oder die Methode jobs.query, um die Abfrage synchron auszuführen. Übergeben Sie dabei das Job-Objekt.
  3. Lesen Sie Zeilen mit jobs.getQueryResults, indem Sie die angegebene Jobreferenz übergeben, und mit tabledata.list, indem Sie die angegebene Tabellenreferenz des Abfrageergebnisses übergeben.

Pseudospalte _FILE_NAME abfragen

Auf externen Datenquellen basierende Tabellen enthalten die Pseudospalte _FILE_NAME. In dieser Spalte wird der vollqualifizierte Pfad zu der Datei angegeben, zu der die Zeile gehört. Diese Spalte ist nur für Tabellen verfügbar, die auf externe Daten verweisen, die in Cloud Storage, Google Drive, Amazon S3 oder Azure Blob Storage gespeichert sind.

Der Spaltenname _FILE_NAME ist reserviert, d. h. Sie können keine Spalte mit diesem Namen in Ihren Tabellen erstellen. Zur Auswahl des Werts _FILE_NAME müssen Sie ein Alias verwenden. Die folgende Beispielabfrage zeigt, wie Sie _FILE_NAME auswählen, indem Sie der Pseudospalte den Alias fn zuweisen.

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

Ersetzen Sie Folgendes:

  • PROJECT_ID ist eine gültige Projekt-ID. Dieses Flag ist nicht erforderlich, wenn Sie Cloud Shell verwenden oder in der Google Cloud CLI ein Standardprojekt einrichten.
  • DATASET ist der Name des Datasets, in dem die permanente externe Tabelle gespeichert ist.
  • TABLE_NAME ist der Name der permanenten externen Tabelle.

Wenn die Abfrage ein Filterprädikat in der Pseudospalte _FILE_NAME hat, versucht BigQuery, beim Lesen Dateien zu überspringen, die nicht dem Filter entsprechen. Ähnliche Empfehlungen wie beim Abfragen von nach Aufnahmezeit partitionierten Tabellen mithilfe von Pseudospalten gelten bei der Erstellung von Abfrageprädikaten mit der Pseudospalte _FILE_NAME.

Nächste Schritte