Abfrage in BigQuery
In diesem Leitfaden wird beschrieben, wie Sie Daten in BigQuery für typische Anwendungsfälle der Manufacturing Data Engine (MDE) abfragen.
Datensätze werden mit Cloud-Metadaten zusammengeführt
Wenn die Materialisierung von Cloud-Metadaten deaktiviert ist, können Sie auf Cloud-Metadateninstanzen zugreifen, indem Sie die entsprechende Datensatz-Tabelle mit der Metadatentabelle metadata-store über die Metadaten-ID instance_id verknüpfen. Verwenden Sie dazu die folgende SQL-Abfrage:
SELECT
dnr.*,
ms.instance
FROM
mde_data.`RECORD_TABLE_NAME` AS dnr
LEFT JOIN
mde_dimension.`metadata-store` AS ms
ON
ms.instance_id = JSON_VALUE(cloud_metadata_ref, "$.BUCKET_NAME.instance_id")
WHERE
DATE(event_timestamp) = 'EVENT_TIMESTAMP'
LIMIT 100
Ersetzen Sie Folgendes:
RECORD_TABLE_NAME: Name der Datensatz-Tabelle.BUCKET_NAME: Name des Cloud-Metadaten-Buckets.EVENT_TIMESTAMP: Zeitstempel des Ereignisses.
Um die Abfrageleistung zu verbessern, können Sie optional die Bucket-Nummer in der ON-Klausel angeben, da metadata-store nach Bucket-Nummer partitioniert ist. Beispiel:
SELECT
dnr.*,
ms.instance
FROM
mde_data.`<RECORD_TABLE_NAME>` AS dnr
LEFT JOIN
mde_dimension.`metadata-store` AS ms
ON
ms.instance_id = JSON_VALUE(cloud_metadata_ref, "$.BUCKET_NAME.instance_id")
AND ms.bucket_number = <BUCKET_NUMBER>
WHERE
DATE(event_timestamp) = 'EVENT_TIMESTAMP'
LIMIT 100
Ersetzen Sie Folgendes:
BUCKET_NAME: Name des Cloud-Metadaten-Buckets.EVENT_TIMESTAMP: Zeitstempel des Ereignisses.
Zugriff auf Instanzattribute für Cloud-Metadaten
Sie können auf Metadaten-Instanzattribute mit der JSON-Punktnotation zugreifen, die immer ein JSON-Objekt zurückgibt, oder mit einer der BigQuery-JSON-Funktionen, z. B. JSON_VALUE, um Strings oder andere Datentypen zu extrahieren. Sehen Sie sich folgendes Beispiel an:
SELECT
dnr.*,
ms.instance.deviceName -- this returns a double quoted JSON string
JSON_VALUE(ms.instance, '$.deviceName') -- this returns a string
FROM
mde_data.`example-record-tbl` AS dnr
LEFT JOIN
mde_dimension.`metadata-store` AS ms
ON
ms.instance_id = JSON_VALUE(cloud_metadata_ref, "$.bucket.instance_id")
WHERE
DATE(event_timestamp) = '2023-01-01'
LIMIT 100
Wenn die Materialisierung von Cloud-Metadaten aktiviert ist, können Sie auch direkt über den Datensatz auf die Attribute der Metadateninstanz zugreifen. Sehen Sie sich folgendes Beispiel an:
SELECT
* (EXCEPT materialized_cloud_metadata),
materialized_cloud_metadata.device.deviceName -- this returns a double quoted JSON string
JSON_VALUE(materialized_cloud_metadata., '$.device.deviceName') -- this returns a string
FROM
mde_data.`example-record-tbl`
WHERE
DATE(event_timestamp) = '2023-01-01'
LIMIT 100
Liste aller Instanz-IDs in cloud_metadata_ref abrufen
So rufen Sie ein Array aller Metadaten-Instanz-IDs ab, die im Feld cloud_metadata_ref eines Datensatzes enthalten sind:
Erstellen Sie die benutzerdefinierte Funktion (UDF) mit der folgenden SQL-Abfrage:
CREATE OR REPLACE FUNCTION `mde_data.get_instance_ids`(input JSON) RETURNS ARRAY<STRING> LANGUAGE js AS R""" return input ? Object.keys(input).map(bucketName => input[bucketName].instance_id).filter(instance_id => instance_id != null) : []; """;Führen Sie die Funktion in einer Abfrage aus:
SELECT mde_data.get_instance_ids(cloud_metadata_ref) as metadata_instance_ids, *, FROM mde_data.`RECORD_TABLE_NAME` WHERE DATE(event_timestamp) = 'EVENT_TIMESTAMP' LIMIT 100Ersetzen Sie Folgendes:
RECORD_TABLE_NAME: Name der Datensatz-Tabelle.EVENT_TIMESTAMP: Zeitstempel des Ereignisses.