0

ここhttps://cloud.google.com/bigquery/sql-reference/dml-syntaxにある例に従って、テーブルの第 3 レベル (specifications.dimensions) を次のように更新できる方法を考え出しました。

UPDATE sd97dwo.DetailedInventory
SET specifications.dimensions = 
    STRUCT<depth FLOAT64, height FLOAT64, width FLOAT64>(1, 2, 3)
WHERE 
    product like '%washer%'
    AND EXISTS(select 1 from unnest(comments) as c where c.comment like '%comment%')

私たちが今やろうとしているのは、同じディメンション構造体にレコードを追加するようにテーブルを更新することです。しかし、私たちが試みているさまざまな方法は成功していません。誰かがアイデアを持っているかどうかを見たかった. 最も近いものは以下でしたが、もちろん、specifications.dimensions のすべてのレコードを (複数の結果として) 返すため、「スカラー サブクエリが複数の要素を生成しました」というエラーが発生します。

UPDATE sd97dwo.DetailedInventory
SET specifications.dimensions
    = (SELECT specifications.dimensions
    UNION ALL
    SELECT STRUCT<depth FLOAT64, height FLOAT64, width FLOAT64>(4.0,5.0,6.0))
WHERE 
    product like '%washer%'
    AND EXISTS(select 1 from unnest(comments) as c where c.comment like '%comment%')
4

1 に答える 1

3

私たちが今やろうとしているのは、同じディメンション構造体にレコードを追加するようにテーブルを更新することです。

あなたのスキーマは何ですか?DML ドキュメントと同じスキーマを使用している場合、「仕様」も「寸法」も繰り返しフィールドではありません。したがって、追加することはできません。ただし、次のように直接更新できます。

UPDATE sd97dwo.DetailedInventory
SET specifications.dimensions.depth = 1,
     specifications.dimensions.height = 2,
     specifications.dimensions.width = 3
WHERE 
    product like '%washer%'
    AND EXISTS(select 1 from unnest(comments) as c where c.comment like '%comment%')
于 2016-09-30T19:49:20.177 に答える