ObjectRef-Spalten in Tabellenschemas angeben
In diesem Dokument wird beschrieben, wie Sie ein BigQuery-Standardtabellenschema mit Spalten definieren, in denen ObjectRef-Werte gespeichert werden können.
ObjectRef -Werte enthalten Metadaten und Verbindungsinformationen für Objekte in Cloud Storage. Verwenden Sie ObjectRef-Werte, wenn Sie unstrukturierte Daten in eine Standardtabelle einfügen müssen. In einer Produkttabelle können Sie beispielsweise Produktbilder in derselben Zeile wie die übrigen Produktinformationen speichern, indem Sie eine Spalte mit ObjectRef-Werten hinzufügen. Sie können
Werte in STRUCT Spalten speichern, die das
ObjectRef Format verwenden,
das
STRUCT<uri STRING, version STRING, authorizer STRING, details JSON> ist.ObjectRef
Weitere Informationen zum Arbeiten mit multimodalen Daten finden Sie unter
Multimodale Daten analysieren.
Eine Anleitung zum Arbeiten mit ObjectRef Daten finden Sie unter
Multimodale Daten mit SQL analysieren.
Vorbereitung
Wenn Sie ObjectRef-Werte in einer Standardtabelle füllen und aktualisieren möchten, muss die Tabelle eine STRING-Spalte mit URI-Informationen für die zugehörigen Cloud Storage-Objekte enthalten.
Sie benötigen einen Cloud Storage-Bucket, der dieselben Objekte enthält, die in den URI-Daten der Zielstandardtabelle angegeben sind.
ObjectRef-Werte verwalten
Alle von Ihnen erstellten Objekttabellen haben eine ref-Spalte, die einen ObjectRef-Wert für das jeweilige Objekt enthält. Wenn Sie eine vorhandene Objekttabelle haben, können Sie sie mit Ihrer Standardtabelle in der Spalte für Objekt-URIs verknüpfen, um ObjectRef-Werte zu füllen und zu aktualisieren. Das ist effizienter, da Metadaten nicht noch einmal aus Cloud Storage abgerufen werden müssen, um einen neuen ObjectRef-Wert zu erstellen.
Wenn Sie bereits ein
Storage Insights-Dataset für Objektmetadaten,
haben, können Sie die Spalte ref.uri oder selfLink verwenden, um die Standardtabelle
mit dem Storage Insights-Dataset zu verknüpfen und so ObjectRef-Werte zu füllen und zu aktualisieren.
Alle ObjectRef-Werte, die in Storage Insights-Datasets erstellt wurden, haben keinen Autorisierer. Wenn Sie diese Objekte abfragen möchten, müssen Sie entweder
direkten Zugriff auf das Objekt haben
oder der ObjectRef einen Autorisierer hinzufügen, um den
delegierten Zugriff zu verwenden.
Wenn Sie keine vorhandene Objekttabelle oder kein Storage Insights-Dataset haben,
können Sie die
OBJ.MAKE_REF
Funktion verwenden, um ObjectRef Werte zu füllen und zu aktualisieren, indem Sie Objektmetadaten
direkt aus Cloud Storage abrufen. Dieser Ansatz ist möglicherweise weniger skalierbar, da Objektmetadaten aus Cloud Storage abgerufen werden müssen.
ObjectRef-Spalte erstellen
Wählen Sie eine der folgenden Optionen aus, um eine ObjectRef-Spalte in einer Standardtabelle zu erstellen und zu füllen:
SQL-Funktionen
Erstellen und füllen Sie eine ObjectRef-Spalte basierend auf der Ausgabe der Funktion OBJ.MAKE_REF:
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
Geben Sie im Abfrageeditor die folgende Anweisung ein:
CREATE OR REPLACE TABLE PROJECT_ID.DATASET_ID.TABLE_NAME AS SELECT TABLE_NAME.*, OBJ.MAKE_REF(uri, 'CONNECTION_ID') AS objectrefcolumn FROM DATASET_ID.TABLE_NAME;
Dabei gilt:
PROJECT_ID: Ihre Projekt-ID. Sie können dieses Argument überspringen, wenn Sie die Tabelle in Ihrem aktuellen Projekt erstellen.DATASET_ID: die ID des Datasets, das Sie erstellen.TABLE_NAME: der Name der Standardtabelle, die Sie neu erstellen.CONNECTION_ID: einSTRING-Wert, der eine Cloud-Ressourcenverbindung enthält, mit der der Dienst auf die Objekte in Cloud Storage zugreifen kann, im Formatlocation.connection_id. Beispiel:us-west1.myconnection. Sie können die Verbindungs-ID abrufen, indem Sie sich die Verbindungsdetails in der Google Cloud Console ansehen und den Wert im letzten Abschnitt der voll qualifizierten Verbindungs-ID kopieren, der unter Verbindungs-ID angezeigt wird. Beispiel:projects/myproject/locations/connection_location/connections/myconnection.Sie müssen dem Dienstkonto der Verbindung die Rolle Storage-Objekt-Nutzer (
roles/storage.objectUser) für alle Cloud Storage-Bucket zuweisen, in denen Sie damit auf Objekte zugreifen.Die Verbindung muss sich im selben Projekt und in derselben Region wie die Abfrage befinden, in der Sie die Funktion aufrufen.
Klicken Sie auf Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.
Objekttabelle
Erstellen und füllen Sie eine ObjectRef-Spalte basierend auf Daten aus der ref-Spalte einer Objekttabelle:
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
Geben Sie im Abfrageeditor die folgende Anweisung ein:
CREATE OR REPLACE TABLE PROJECT_ID.DATASET_ID.TABLE_NAME AS SELECT TABLE_NAME.*, OBJECT_TABLE.ref AS objectrefcolumn FROM DATASET_ID.TABLE_NAME INNER JOIN DATASET_ID.OBJECT_TABLE ON OBJECT_TABLE.uri = TABLE_NAME.uri;
Dabei gilt:
PROJECT_ID: Ihre Projekt-ID. Sie können dieses Argument überspringen, wenn Sie die Tabelle in Ihrem aktuellen Projekt erstellen.DATASET_ID: die ID des Datasets, das Sie erstellen.TABLE_NAME: der Name der Standardtabelle, die Sie neu erstellen.OBJECT_TABLE: der Name der Objekttabelle, die die Objektdaten enthält, die Sie in die Standard tabelle einfügen möchten.
Klicken Sie auf Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.
ARRAY<ObjectRef>-Spalte erstellen
Sie können eine
ARRAY<STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>>
-Spalte erstellen, um Arrays von ObjectRef
-Werten zu enthalten. Sie können beispielsweise ein Video in einzelne Bilder zerlegen und diese Bilder dann als Array von ObjectRef-Werten speichern.
Mit der
ARRAY_AGG Funktion
können Sie Arrays von ObjectRef Werten aggregieren. Bei Bedarf können Sie mit der ORDER BY Klausel
die Objektreihenfolge beibehalten. Mit dem
UNNEST Operator
können Sie ein Array von ObjectRef-Werten in einzelne ObjectRef-Werte parsen.
Bei Bedarf können Sie mit der WITH OFFSET-Klausel die Objektreihenfolge beibehalten.
Sie können Objektmetadaten wie den URI-Pfad und den Objektnamen verwenden, um ObjectRef-Werte, die Objektteile darstellen, einem ObjectRef-Wert zuzuordnen, der das ursprüngliche Objekt darstellt.
Ein Beispiel für die Arbeit mit Arrays von ObjectRef-Werten finden Sie im
Abschnitt Geordnete multimodale Daten mit ARRAY<ObjectRef>-Werten verarbeiten
der Anleitung
Multimodale Daten mit SQL analysieren.
ObjectRef-Spalte aktualisieren
Wählen Sie eine der folgenden Optionen aus, um eine ObjectRef-Spalte in einer Standardtabelle zu aktualisieren:
Objekttabelle
Aktualisieren Sie eine ObjectRef-Spalte mit Daten aus der ref-Spalte einer Objekttabelle:
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
Geben Sie im Abfrageeditor die folgende Anweisung ein:
UPDATE PROJECT_ID.DATASET_ID.TABLE_NAME SET objectrefcolumn = (SELECT ref FROM DATASET_ID.OBJECT_TABLE WHERE OBJECT_TABLE.uri = TABLE_NAME.uri) WHERE uri != "";
Dabei gilt:
PROJECT_ID: Ihre Projekt-ID. Sie können dieses Argument überspringen, wenn Sie die Tabelle in Ihrem aktuellen Projekt erstellen.DATASET_ID: die ID des Datasets, das Sie erstellen.TABLE_NAME: der Name der Standardtabelle, die Sie neu erstellen.OBJECT_TABLE: der Name der Objekttabelle, die dieselben Objektdaten wie die Spalte der StandardtabelleObjectRefenthält.
Klicken Sie auf Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.
SQL-Funktionen
Aktualisieren Sie eine ObjectRef-Spalte mit der Ausgabe der Funktionen OBJ.FETCH_METADATA und OBJ.MAKE_REF:
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
Geben Sie im Abfrageeditor die folgende Anweisung ein:
UPDATE PROJECT_ID.DATASET_ID.TABLE_NAME SET objectrefcolumn = (SELECT OBJ.MAKE_REF(uri, 'CONNECTION_ID')) WHERE uri != "";
Dabei gilt:
PROJECT_ID: Ihre Projekt-ID. Sie können dieses Argument überspringen, wenn Sie die Tabelle in Ihrem aktuellen Projekt erstellen.DATASET_ID: die ID des Datasets, das Sie erstellen.TABLE_NAME: der Name der Standardtabelle, die Sie neu erstellen.CONNECTION_ID: einSTRING-Wert, der eine Cloud-Ressourcenverbindung enthält, mit der der Dienst auf die Objekte in Cloud Storage zugreifen kann, im Formatlocation.connection_id. Beispiel:us-west1.myconnection. Sie können die Verbindungs-ID abrufen, indem Sie sich die Verbindungsdetails in der Google Cloud Console ansehen und den Wert im letzten Abschnitt der voll qualifizierten Verbindungs-ID kopieren, der unter Verbindungs-ID angezeigt wird. Beispiel:projects/myproject/locations/connection_location/connections/myconnection.Sie müssen dem Dienstkonto der Verbindung die Rolle Storage-Objekt-Nutzer (
roles/storage.objectUser) für alle Cloud Storage-Bucket zuweisen, in denen Sie damit auf Objekte zugreifen.Die Verbindung muss sich im selben Projekt und in derselben Region wie die Abfrage befinden, in der Sie die Funktion aufrufen.
Klicken Sie auf Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.