Metadatenindexierung für BigQuery-Tabellen

In diesem Dokument wird die Indexierung von Spaltenmetadaten in BigQuery beschrieben und erklärt, wie Sie dedizierte Ressourcen zuweisen, um die Aktualität des Index und die Abfrageleistung zu verbessern.

BigQuery indexiert automatisch Metadaten für BigQuery-Tabellen mit mehr als 1 GiB. Zu diesen Metadaten gehören der Speicherort der Datei, Partitionierungsinformationen und Attribute auf Spaltenebene, die BigQuery verwendet, um Ihre Abfragen zu optimieren und zu beschleunigen.

Standardmäßig ist die Metadatenindexierung in BigQuery ein kostenloser Hintergrundvorgang, für den keine Maßnahmen von Ihrer Seite erforderlich sind. Die Aktualität des Index hängt jedoch von den verfügbaren kostenlosen Ressourcen ab und es gibt keine Service Level Objectives (SLOs) für die Leistung. Wenn die Aktualität des Index für Ihren Anwendungsfall entscheidend ist, empfehlen wir, eine BACKGROUND Reservierung, bei der Ressourcen für Hintergrundoptimierungsjobs freigegeben werden, zu konfigurieren.

Aktualisierungszeit des Metadatenindex ansehen

Wenn Sie die letzte Aktualisierungszeit des Metadatenindex einer Tabelle sehen möchten, fragen Sie die LAST_METADATA_INDEX_REFRESH_TIME Spalte der INFORMATION_SCHEMA.TABLE_STORAGE Ansicht ab. Gehen Sie dazu so vor:

  1. Rufen Sie in der Google Cloud Console die Seite BigQuery auf.

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    SELECT
      project_id,
      project_number,
      table_name,
      last_metadata_index_refresh_time
    FROM
      [PROJECT_ID.]region-REGION.INFORMATION_SCHEMA.TABLE_STORAGE;

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die ID Ihres Google Cloud Projekts in. Wenn keine Angabe erfolgt, wird das Standardprojekt verwendet.
    • REGION: die Region , in der sich das Projekt befindet, z. B. region-us.
  3. Klicken Sie auf Ausführen.

Nutzung des Spaltenmetadatenindex ansehen

Wenn Sie sehen möchten, ob der Spaltenmetadatenindex nach Abschluss eines Jobs verwendet wurde, prüfen Sie die TableMetadataCacheUsage Eigenschaft der Job-Ressource. Wenn das Feld unusedReason leer ist (nicht ausgefüllt), wurde der Spaltenmetadatenindex verwendet. Wenn es ausgefüllt ist, enthält das zugehörige Feld explanation einen Grund dafür, warum der Spaltenmetadatenindex nicht verwendet wurde.

Sie können die Nutzung des Spaltenmetadatenindex auch mit dem metadata_cache_statistics Feld in der INFORMATION_SCHEMA.JOBS Ansicht ansehen.

Im folgenden Beispiel wird die Nutzung des Spaltenmetadatenindex für den Job my-job angezeigt:

SELECT metadata_cache_statistics
FROM `region-US`.INFORMATION_SCHEMA.JOBS
WHERE job_id = 'my-job';

Ein weiteres Beispiel: Hier wird die Anzahl der Jobs angezeigt, die den Spaltenmetadatenindex für die Tabelle my-table verwendet haben:

SELECT COUNT(*)
FROM
  `region-US`.INFORMATION_SCHEMA.JOBS,
  UNNEST(metadata_cache_statistics.table_metadata_cache_usage) AS stats
WHERE
  stats.table_reference.table_id='my-table' AND
  stats.table_reference.dataset_id='my-dataset' AND
  stats.table_reference.project_id='my-project' AND
  stats.unusedReason IS NULL;

Dedizierte Indexierungsressourcen einrichten

Wenn Sie Ressourcen für Aktualisierungen der Metadatenindexierung in Ihrem Projekt einrichten möchten, muss Ihrem Projekt zuerst eine Reservierung zugewiesen sein. Gehen Sie dazu so vor:

  1. Erstellen Sie eine BACKGROUND Reservierung.
  2. Weisen Sie der Reservierung Ihr Projekt zu.

Nachdem Sie Ihre Reservierung eingerichtet haben, wählen Sie eine der folgenden Methoden aus, um Ihrem Metadatenindexierungsjob Slots zuzuweisen. Standardmäßig werden auf diese Weise zugewiesene Slots für andere Jobs freigegeben, wenn sie nicht verwendet werden. Weitere Informationen finden Sie unter siehe Inaktive Slots.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Kapazitätsverwaltung auf.

    Zur Kapazitätsverwaltung

  2. Klicken Sie auf Reservierungsaktionen > Zuweisung erstellen.

  3. Wählen Sie Ihr Reservierungsprojekt aus.

  4. Legen Sie für Jobtyp den Wert Hintergrund fest.

  5. Klicken Sie auf Erstellen.

bq

Führen Sie den Befehl bq mk aus.

bq mk \
  --project_id=ADMIN_PROJECT_ID \
  --location=LOCATION \
  --reservation_assignment \
  --reservation_id=RESERVATION_NAME \
  --assignee_id=PROJECT_ID \
  --job_type=BACKGROUND \
  --assignee_type=PROJECT

Ersetzen Sie Folgendes:

  • ADMIN_PROJECT_ID: die Projekt-ID des Administrationsprojekts , dem die Reservierungsressource gehört
  • LOCATION: der Standort der Reservierung
  • RESERVATION_NAME: der Name der Reservierung
  • PROJECT_ID: die Projekt-ID, die dieser Reservierung zugewiesen werden soll

SQL

Verwenden Sie die CREATE ASSIGNMENT DDL-Anweisung, um einer Reservierung ein Projekt zuzuweisen.

  1. Rufen Sie in der Google Cloud Console die Seite BigQuery auf.

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    CREATE ASSIGNMENT
    ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME.ASSIGNMENT_ID
    OPTIONS (
      assignee = 'projects/PROJECT_ID',
      job_type = 'BACKGROUND');
    Ersetzen Sie Folgendes:

    • ADMIN_PROJECT_ID: die Projekt-ID des Administrationsprojekts , dem die Reservierungsressource gehört
    • LOCATION: der Standort der Reservierung
    • RESERVATION_NAME: Der Name der Reservierung.
    • ASSIGNMENT_ID: die ID der Zuweisung Die ID muss für das Projekt und den Standort eindeutig sein, mit einem Kleinbuchstaben oder einer Zahl beginnen und enden und darf nur Kleinbuchstaben, Zahlen und Bindestriche enthalten.
    • PROJECT_ID: die Projekt-ID mit den Tabellen Dieses Projekt wird der Reservierung zugewiesen.
  3. Klicken Sie auf Ausführen.

Informationen zu Indexierungsjobs ansehen

Nachdem Sie Ihre dedizierten Indexierungsjobs eingerichtet haben, können Sie Informationen zu den Indexierungsjobs mit der JOBS Ansicht ansehen. Das folgende SQL-Beispiel zeigt die fünf letzten Aktualisierungsjobs in PROJECT_NAME.

SELECT *
FROM
  region-us.INFORMATION_SCHEMA.JOBS
WHERE
  project_id = 'PROJECT_NAME'
  AND SEARCH(job_id, '`metadata_cache_refresh`')
ORDER BY
  creation_time DESC
LIMIT 5;

Ersetzen Sie PROJECT_NAME durch den Namen des Projekts, das Ihre Metadatenindexierungsjobs enthält.

Benachrichtigungen zur Metadatenindexierung konfigurieren

Der Benachrichtigungsprozess von Cloud Monitoring informiert Sie, wenn die BigQuery-Leistung nicht die definierten Kriterien erfüllt. Weitere Informationen finden Sie unter Benachrichtigungen. Bei der Metadatenindexierung können Sie Benachrichtigungen für die Slotnutzung und Veraltung konfigurieren.

Benachrichtigung zur Slotnutzung

Diese Benachrichtigung wird gesendet, wenn Ihre Hintergrundreservierung einen definierten Prozentsatz ihrer Zuweisung überschreitet. Der Standardwert ist 95%. Sie können diese Benachrichtigung für eine bestimmte Reservierung oder für jede Hintergrundreservierung konfigurieren. Wenn diese Benachrichtigung ausgelöst wird, empfehlen wir, dass Sie die Größe Ihrer Reservierung erhöhen.

So konfigurieren Sie diese Benachrichtigung für jede Hintergrundreservierung:

  1. Richten Sie einen Monitoring-Benachrichtigungskanal ein, falls Sie dies noch nicht getan haben.
  2. Rufen Sie die Seite Integrationen auf.

    Zu „Integrationen“

  3. Suchen Sie nach der BigQuery -Integration und klicken Sie auf Details ansehen.

  4. Wählen Sie auf dem Tab Benachrichtigungen die Option Slotnutzung – Hintergrund-Metadatencache-Slotnutzung zu hoch aus.

  5. Optional: Wenn Sie diese Benachrichtigung weiter anpassen möchten, klicken Sie auf Optionen anzeigen > Benachrichtigungsrichtlinie anpassen.

  6. Wählen Sie unter Benachrichtigungen konfigurieren Ihren Benachrichtigungskanal aus.

  7. Klicken Sie auf Erstellen.

Benachrichtigung zu Veraltung

Diese Benachrichtigung wird gesendet, wenn die durchschnittliche Veraltung des Spaltenmetadatenindex im Vergleich zum vorhandenen Durchschnitt zu stark ansteigt. Der Standardgrenzwert ist, wenn der Durchschnitt über 4 Stunden mehr als doppelt so hoch ist wie der vorherige Durchschnitt für mehr als 30 Minuten. Wenn diese Benachrichtigung ausgelöst wird, empfehlen wir, die Größe Ihrer Reservierung zu erhöhen oder eine Hintergrundreservierung zu erstellen, falls Sie noch keine haben.

So konfigurieren Sie diese Benachrichtigung:

  1. Richten Sie einen Monitoring-Benachrichtigungskanal ein, falls Sie dies noch nicht getan haben.
  2. Rufen Sie die Seite Integrationen auf.

    Zu „Integrationen“

  3. Suchen Sie nach der BigQuery -Integration und klicken Sie auf Details ansehen.

  4. Wählen Sie auf dem Tab Benachrichtigungen die Option Veraltung des Spaltenmetadatenindex – prozentualer Anstieg zu hoch aus.

  5. Optional: Wenn Sie diese Benachrichtigung weiter anpassen möchten, klicken Sie auf Optionen anzeigen > Benachrichtigungsrichtlinie anpassen.

  6. Wählen Sie unter Benachrichtigungen konfigurieren Ihren Benachrichtigungskanal aus.

  7. Klicken Sie auf Erstellen.

Hinweise zur Leistung

BigQuery bereinigt Daten zwar automatisch mithilfe von Partitionierung und Clustering, aber die Metadatenindexierung kann Abfragen weiter optimieren, indem Daten basierend auf Spalten bereinigt werden, die nicht für die Partitionierung oder das Clustering verwendet werden. Die Effektivität dieser Bereinigung steigt, wenn eine Abhängigkeit zwischen der Filterspalte und den Partitionierungs- oder Clustering-Spalten der Tabelle besteht. In diesen Fällen werden möglicherweise weniger Byte gescannt als erwartet, auch wenn nach Spalten gefiltert wird, die nicht explizit Teil der Clustering-Konfiguration der Tabelle sind. Wenn eine Tabelle nur partitioniert, aber nicht geclustert ist, ist die Effektivität der Bereinigung für On-Demand-Abfragen begrenzt und Sie sehen möglicherweise keine Reduzierung der gescannten Byte.

Beschränkungen

Leistungsverbesserungen bei Metadatenabfragen gelten nur für die Anweisungen SELECT, INSERT und CREATE TABLE AS SELECT. Anweisungen der Datenbearbeitungssprache (Data Manipulation Language, DML) profitieren nicht von der Metadatenindexierung.

Nächste Schritte