JSON_EXTRACT如何提取动态密钥的值

时间:2017-10-23 02:58:10

标签: google-bigquery

以下返回键' a'的值,即" x"。如果已经知道密钥名称,这很好。

SELECT JSON_EXTRACT('{"a":"x", "b":"y"}', "$['a']") as val

在我的用例中,键名是动态的。因此,上面没有帮助。反正有没有提到第一个子元素而没有提到关键名称' a'在标准SQL?

2 个答案:

答案 0 :(得分:2)

   
#standardSQL
SELECT REGEXP_EXTRACT('{"a":"x", "b":"y"}', r'^{"\w":"(\w)",') AS val

答案 1 :(得分:1)

Mikhail建议在SQL中解决这个问题,但有时正则表达式无法解析复杂的JSON对象。

您可以通过将Javascript与BigQuery SQL查询一起使用来在JSON对象中执行任何操作。

例如:

#standardSQL

CREATE TEMPORARY FUNCTION anyJsonOp(json STRING, langs STRING)
RETURNS STRING
LANGUAGE js AS """ 
  lang = JSON.parse(json).pull_request.base.repo.language;
  if (langs.split(",").indexOf(lang)>-1) {
    return lang
  }
""";

SELECT anyJsonOp(payload, langs), COUNT(*)
FROM `githubarchive.day.20171010` a
CROSS JOIN (SELECT 'JavaScript,Java,Python,Ruby' langs) 
WHERE type='PullRequestEvent'
GROUP BY 1
ORDER BY 2 DESC