Im Cache gespeicherte Abfrageergebnisse verwenden
BigQuery schreibt alle Abfrageergebnisse in eine Tabelle. Die Tabelle wird entweder vom Nutzer explizit angegeben (Zieltabelle) oder ist eine temporäre, im Cache gespeicherte Ergebnistabelle. Wenn Sie die exakt gleiche Abfrage noch einmal ausführen, gibt BigQuery die Ergebnisse aus der im Cache gespeicherten Tabelle zurück, sofern vorhanden. Temporäre, im Cache gespeicherte Ergebnistabellen werden nutzer- und projektspezifisch verwaltet. Je nach Version haben Sie möglicherweise Zugriff auf im Cache gespeicherte Ergebnisse von anderen Nutzern, die Abfragen im selben Projekt ausführen. Für im Cache gespeicherte Tabellen mit Abfrageergebnissen fallen keine Speicherkosten an. Wenn Sie jedoch Abfrageergebnisse in eine permanente Tabelle schreiben, wird das Speichern der Daten in Rechnung gestellt.
Alle Abfrageergebnisse, sowohl für interaktive Abfragen als auch für Batchabfragen, werden etwa 24 Stunden lang in temporären Tabellen im Cache gespeichert. Dafür gelten einige Ausnahmen.
Beschränkungen
Bei der Verwendung des Abfrage-Cache gelten folgende Einschränkungen:
- Wenn Sie eine Abfrage mehrfach ausführen, versucht BigQuery, im Cache gespeicherte Ergebnisse wiederzuverwenden. Der duplizierte Abfragetext muss mit der ursprünglichen Abfrage übereinstimmen, um Daten aus dem Cache abzurufen.
- Damit Abfrageergebnisse in einer im Cache gespeicherten Ergebnistabelle erhalten bleiben, muss der Ergebnissatz kleiner als die maximale Antwortgröße sein. Weitere Informationen zum Verwalten großer Ergebnissätze finden Sie unter Umfangreiche Abfrageergebnisse schreiben.
- Sie können nicht mithilfe von DML-Anweisungen auf im Cache gespeicherte Ergebnistabellen zugreifen.
- Obwohl die aktuelle Semantik es zulässt, wird davon abgeraten, im Cache gespeicherte Ergebnisse als Eingabe für abhängige Jobs zu verwenden. Sie sollten z. B. keine Abfragejobs senden, mit denen Ergebnisse aus der Cachetabelle abgerufen werden. Schreiben Sie Ihre Ergebnisse stattdessen in eine benannte Zieltabelle. Mit Features wie dem Attribut
defaultTableExpirationMs
auf Dataset-Ebene kann dafür gesorgt werden, dass Daten nach einem bestimmten Zeitraum automatisch ablaufen, um die Bereinigung zu vereinfachen.
Preise und Kontingente
Im Cache gespeicherte Abfrageergebnisse werden als temporäre Tabellen gespeichert. Für die Speicherung von im Cache gespeicherten Abfrageergebnissen in temporären Tabellen fallen keine Kosten an. Wenn Abfrageergebnisse aus einer im Cache gespeicherten Ergebnistabelle abgerufen werden, wird für das Jobstatistikattribut statistics.query.cacheHit
der Wert true
zurückgegeben. Diese Abfrage wird Ihnen nicht in Rechnung gestellt. Obwohl Abfragen, für die im Cache gespeicherte Ergebnisse verwendet werden, für Sie kostenlos sind, unterliegen sie den BigQuery-Kontingentrichtlinien.
Mit Abfragen, für die im Cache gespeicherte Ergebnisse verwendet werden, können nicht nur die Kosten gesenkt werden. Sie sind auch deutlich schneller, weil BigQuery nicht den Ergebnissatz zu berechnen braucht.
Ausnahmen für das Abfrage-Caching
Abfrageergebnisse werden unter den folgenden Bedingungen nicht im Cache gespeichert:
- Wenn in der Jobkonfiguration, der Google Cloud Console, dem bq-Befehlszeilentool oder der API eine Zieltabelle angegeben ist.
- Angegebene Tabellen oder logische Ansichten wurden geändert, seit die Ergebnisse im Cache gespeichert wurden.
- Wenn in der Abfrage angegebene Tabellen kürzlich Streaming-Insert-Anweisungen erhalten haben (Tabelle enthält Daten im schreiboptimierten Speicher), auch wenn keine neuen Zeilen angekommen sind.
- In der Abfrage werden nicht deterministische Funktionen verwendet, z. B. Funktionen für Datum und Uhrzeit wie
CURRENT_TIMESTAMP()
undCURRENT_DATE
. Andere Funktionen wieSESSION_USER()
geben je nach Ausführungszeitpunkt einer Abfrage unterschiedliche Werte zurück. - Sie fragen mehrere Tabellen mit einem Platzhalter ab.
- Die im Cache gespeicherten Ergebnisse sind abgelaufen. Die typische Aufbewahrungsdauer im Cache beträgt 24 Stunden. Im Cache gespeicherte Ergebnisse werden aber auf Best-Effort-Basis bereitgestellt und können auch früher ungültig werden.
- Wenn die Abfrage nicht in Cloud Storage mit einer externen Datenquelle ausgeführt wird. (GoogleSQL-Abfragen in Cloud Storage werden durch im Cache gespeicherte Abfrageergebnisse unterstützt.)
- Wenn die Abfrage für eine durch Sicherheit auf Zeilenebene geschützte Tabelle ausgeführt wird, werden die Ergebnisse nicht im Cache gespeichert.
- Wenn die Abfrage für eine durch Sicherheit auf Spaltenebene geschützte Tabelle ausgeführt wird, werden die Ergebnisse möglicherweise nicht im Cache gespeichert.
Im Cache gespeicherte Ergebnisse speichern
Wenn Sie eine Abfrage ausführen, wird eine temporäre, im Cache gespeicherte Ergebnistabelle in einem speziellen ausgeblendeten Dataset erstellt, das als anonymes Dataset bezeichnet wird.
Im Gegensatz zu regulären Datasets, die Berechtigungen vom Modell der IAM-Ressourcenhierarchie (Projekt- und Organisationsberechtigungen) übernehmen, ist der Zugriff auf anonyme Datasets auf die jeweiligen Eigentümer beschränkt. Der Eigentümer eines anonymen Datasets ist der Nutzer, der die Abfrage ausgeführt hat, die das im Cache gespeicherte Ergebnis zurückgegeben hat. Darüber hinaus wird die Berechtigung bigquery.jobs.create
für das Projekt geprüft, um zu bestätigen, dass der Nutzer Zugriff auf das Projekt hat.
BigQuery unterstützt die Freigabe anonymer Datasets nicht. Wenn Sie vorhaben, Abfrageergebnisse mit anderen Nutzern zu teilen, sollten Sie keine im Cache gespeicherten Ergebnisse aus einem anonymen Dataset verwenden. Schreiben Sie die Ergebnisse stattdessen in eine benannte Zieltabelle.
Obwohl der Nutzer, der die Abfrage ausführt, uneingeschränkten Zugriff auf das Dataset und die im Cache gespeicherte Ergebnistabelle hat, wird davon abgeraten, diese als Eingabe für abhängige Jobs zu verwenden.
Die Namen eines anonymen Datasets beginnen mit einem Unterstrich. Dadurch werden sie in der Dataset-Liste der Google Cloud Console ausgeblendet. Mit dem bq-Befehlszeilentool oder der API können Sie anonyme Datasets auflisten und Zugriffssteuerungen für anonyme Datasets prüfen.
Weitere Informationen zum Auflisten und Abrufen von Informationen zu Datasets, einschließlich anonymer Datasets, finden Sie unter Datasets auflisten.
Nutzerübergreifendes Caching
Wenn Sie die Enterprise oder Enterprise Plus Version verwenden und die erforderlichen Berechtigungen zum Ausführen einer Abfrage haben, die in Ihrem Projekt für einen anderen Nutzer im Cache gespeichert ist, generiert BigQuery das im Cache gespeicherte Ergebnis. Das im Cache gespeicherte Ergebnis wird in Ihr persönliches anonymes Dataset kopiert und verbleibt dort bis 24 Stunden nach dem Ausführen der Abfrage. Für nutzerübergreifendes Caching gelten die gleichen Limits und Ausnahmen wie für das Caching einzelner Nutzer.
Abruf von im Cache gespeicherten Ergebnissen deaktivieren
Mit der Option Im Cache gespeicherte Ergebnisse verwenden werden Ergebnisse aus einer früheren Ausführung der gleichen Abfrage wiederverwendet, sofern sich die abgefragten Tabellen nicht geändert haben. Die Verwendung von im Cache gespeicherten Ergebnissen ist nur bei wiederholten Abfragen sinnvoll. Bei neuen Abfragen hat die Option Im Cache gespeicherte Ergebnisse verwenden keine Wirkung, auch wenn sie standardmäßig aktiviert ist.
Wenn Sie eine Abfrage bei deaktivierter Option Im Cache gespeicherte Ergebnisse verwenden wiederholen, wird das vorhandene im Cache gespeicherte Ergebnis überschrieben. BigQuery muss dann das Abfrageergebnis neu berechnen und die Abfrage wird Ihnen in Rechnung gestellt. Dies ist insbesondere in Benchmark-Szenarien hilfreich.
Wenn Sie das Abrufen von im Cache gespeicherten Ergebnissen deaktivieren und eine Liveauswertung eines Abfragejobs erzwingen möchten, können Sie das Attribut configuration.query.useQueryCache
Ihres Abfragejobs auf false
setzen.
So deaktivieren Sie die Option Im Cache gespeicherte Ergebnisse verwenden:
Console
Öffnen Sie die Google Cloud Console.
Zur Seite „BigQuery“Klicken Sie auf Neue Abfrage erstellen.
Geben Sie im Textbereich des Abfrageeditors eine gültige SQL-Abfrage ein.
Klicken Sie auf Mehr und wählen Sie Abfrageeinstellungen.
Deaktivieren Sie unter Cache-Einstellung die Option Im Cache gespeicherte Ergebnisse verwenden.
bq
Verwenden Sie das Flag nouse_cache
, um den Abfrage-Cache zu überschreiben. Im folgenden Beispiel wird BigQuery gezwungen, die Abfrage zu verarbeiten, ohne die vorhandenen, im Cache gespeicherten Ergebnisse zu verwenden:
bq query \
--nouse_cache \
--batch \
'SELECT
name,
count
FROM
`my-project`.mydataset.names_2013
WHERE
gender = "M"
ORDER BY
count DESC
LIMIT
6'
API
Wenn eine Abfrage ohne Verwendung der im Cache gespeicherten Ergebnisse verarbeitet werden soll, setzen Sie in der query
-Jobkonfiguration das Attribut useQueryCache
auf false
.
Go
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Java
Soll eine Abfrage ausgeführt werden, ohne die im Cache gespeicherten Ergebnisse zu verwenden, legen Sie für „useQueryCache“ beim Erstellen einer QueryJobConfiguration den Wert false
fest.
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Java-Einrichtungsanleitung 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.
Node.js
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Node.js in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Node.js API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
PHP
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von PHP in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery PHP API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Python
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Verwendung des Cache gewährleisten
Wenn Sie zur Ausführung von Abfragen die Methode jobs.insert
verwenden, können Sie erzwingen, dass Abfragejobs fehlschlagen, wenn keine im Cache gespeicherten Ergebnisse verwendet werden können. Legen Sie dazu das Attribut createDisposition
der query
-Jobkonfiguration auf CREATE_NEVER
fest.
Wenn das Abfrageergebnis im Cache nicht existiert, wird ein NOT_FOUND
-Fehler zurückgegeben.
bq
Verwenden Sie das Flag --require_cache
, um Ergebnisse aus dem Abfragecache anzufordern. Im folgenden Beispiel wird BigQuery gezwungen, die Abfrage zu verarbeiten, wenn die Ergebnisse im Cache vorhanden sind:
bq query \
--require_cache \
--batch \
'SELECT
name,
count
FROM
`my-project`.mydataset.names_2013
WHERE
gender = "M"
ORDER BY
count DESC
LIMIT
6'
API
Zur Verarbeitung einer Abfrage mit vorhandenen im Cache gespeicherten Ergebnissen legen Sie für das Attribut createDisposition
in der query
-Jobkonfiguration CREATE_NEVER
fest.
Verwendung des Cache überprüfen
Verwenden Sie eine der folgenden Methoden, um festzustellen, ob BigQuery ein Ergebnis aus dem Cache zurückgegeben hat:
- Google Cloud Console verwenden. Gehen Sie zu Abfrageergebnisse und klicken Sie auf Jobinformationen. Verarbeitete Byte zeigt 0 B (im Cache gespeicherte Ergebnisse) an.
- BigQuery API verwenden.
Das Attribut
cacheHit
im Abfrageergebnis ist auftrue
gesetzt.
Auswirkungen der Sicherheit auf Spaltenebene
Standardmäßig speichert BigQuery Abfrageergebnisse 24 Stunden lang im Cache, mit den zuvor genannten Ausnahmen. Abfragen für eine durch Sicherheit auf Spaltenebene geschützte Tabelle werden möglicherweise nicht im Cache gespeichert. Wenn BigQuery das Ergebnis im Cache speichert, gilt die 24-Stunden-Cache-Lebensdauer.
Eine Änderung, z. B. das Entfernen einer Gruppe oder eines Nutzers aus der Rolle detaillierter Lesezugriff für Data Catalog, die für ein Richtlinien-Tag verwendet wird, macht den 24-Stunden-Cache nicht ungültig. Eine Änderung an der Zugriffssteuerungsgruppe detaillierter Lesezugriff für Data Catalog selbst wird sofort übernommen, aber der Cache wird dadurch nicht ungültig.
Dies hat zur Folge, dass durch die Abfrage die Abfrageergebnisse für den Nutzer auf dem Bildschirm sichtbar bleiben. Der Nutzer kann diese Ergebnisse auch dann aus dem Cache abrufen, selbst wenn er innerhalb der letzten 24 Stunden den Zugriff auf die Daten verloren hat.
In den 24 Stunden nach der Entfernung eines Nutzers aus der Rolle Detaillierter Lesezugriff für Data Catalog für ein Richtlinien-Tag hat der Nutzer nur Zugriff auf die im Cache gespeicherten Daten, die ihm zuvor angezeigt wurden. Wenn Zeilen zur Tabelle hinzugefügt werden, sieht der Nutzer die hinzugefügten Zeilen nicht, selbst wenn die Ergebnisse im Cache gespeichert werden.