以下返回键' a'的值,即" x"。如果已经知道密钥名称,这很好。
SELECT JSON_EXTRACT('{"a":"x", "b":"y"}', "$['a']") as val
在我的用例中,键名是动态的。因此,上面没有帮助。反正有没有提到第一个子元素而没有提到关键名称' a'在标准SQL?
答案 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