以下
BigQueryの標準SQLのため
まず例キーを抽出することですこれはRの下にあなたを与える各行
#standardSQL
WITH `project.dataset.yourTbale` AS (
SELECT 1 AS id, '{"Weights":{"blue":1.0,"purple":0.0,"yellow":1.0,"green":1.0}}' AS json
UNION ALL SELECT 2, '{"Weights":{"blue":1.0,"red":2.0,"yellow":1.0,"orange":3.0}}'
)
SELECT id,
REPLACE(SPLIT(pair, ':')[OFFSET (0)], '"', '') color,
SAFE_CAST(SPLIT(pair, ':')[OFFSET (1)] AS FLOAT64) value
FROM `project.dataset.yourTbale`,
UNNEST(SPLIT(REGEXP_REPLACE(JSON_EXTRACT(json, '$.Weights'), r'{|}', ''))) pair
if there is a way to sum up all the values of the colors
のあなたの元の質問に上記の拡張、さらには潜在的に特定の色(複数可)をフィルタリングしてより多くのそれを拡張することは簡単ですので、今
id color value
1 blue 1.0
1 purple 0.0
1 yellow 1.0
1 green 1.0
2 blue 1.0
2 red 2.0
2 yellow 1.0
2 orange 3.0
をesult - 結果としてで
#standardSQL
WITH `project.dataset.yourTbale` AS (
SELECT 1 AS id, '{"Weights":{"blue":1.0,"purple":0.0,"yellow":1.0,"green":1.0}}' AS json
UNION ALL SELECT 2, '{"Weights":{"blue":1.0,"red":2.0,"yellow":1.0,"orange":3.0}}'
)
SELECT id,
SUM(SAFE_CAST(SPLIT(pair, ':')[OFFSET (1)] AS FLOAT64)) AS total
FROM `project.dataset.yourTbale`,
UNNEST(SPLIT(REGEXP_REPLACE(JSON_EXTRACT(json, '$.Weights'), r'{|}', ''))) pair
WHERE REPLACE(SPLIT(pair, ':')[OFFSET (0)], '"', '') != 'blue'
GROUP BY id
以下の例を参照してください(計算から色=青を除く)
id total
1 2.0
2 6.0
作業には最適です。どうもありがとう ! – tototl