BigQuery でクエリを実行する
このガイドでは、一般的な Manufacturing Data Engine(MDE)のユースケースで BigQuery のデータに対してクエリを実行する方法について説明します。
レコードがクラウド メタデータと結合される
クラウド メタデータの具体化が無効になっている場合は、次の SQL クエリを使用して、関連するレコード テーブルをメタデータ instance_id の metadata-store と結合することで、クラウド メタデータ インスタンスにアクセスできます。
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
次のように置き換えます。
RECORD_TABLE_NAME: レコード テーブルの名前。BUCKET_NAME: クラウド メタデータ バケットの名前。EVENT_TIMESTAMP: イベントのタイムスタンプ。
クエリのパフォーマンスを向上させるため、metadata-store はバケット番号でパーティショニングされているため、次の SQL クエリのように、ON 句でバケット番号を任意で指定できます。
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
次のように置き換えます。
BUCKET_NAME: クラウド メタデータ バケットの名前。EVENT_TIMESTAMP: イベントのタイムスタンプ。
Cloud メタデータ インスタンス属性へのアクセス
メタデータ インスタンス属性には、常に JSON オブジェクトを返す JSON ドット表記を使用するか、BigQuery JSON 関数(JSON_VALUE など)を使用して文字列やその他のデータ型を抽出できます。次の例をご覧ください。
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
同様に、クラウド メタデータの具体化が有効になっている場合は、レコードからメタデータ インスタンス属性に直接アクセスできます。次の例をご覧ください。
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
cloud_metadata_ref に含まれるすべてのインスタンス ID のリストを取得する
レコードの cloud_metadata_ref フィールドに含まれるすべてのメタデータ インスタンス ID の配列を取得する手順は次のとおりです。
次の SQL クエリを使用して、ユーザー定義関数(UDF)を作成します。
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) : []; """;クエリで関数を実行します。
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 100次のように置き換えます。
RECORD_TABLE_NAME: レコード テーブルの名前。EVENT_TIMESTAMP: イベントのタイムスタンプ。