Bigquery JSON_EXTRACT函数将字符串作为返回值的键。是否可以从列中获取字符串?
要处理的json_string_expr
就像{'A': '123', 'B': '456'}
。
我想从列list
中获取密钥。
Bigquery表和预期结果如下。
| json_string_expr | list | expected_result
|{'A': '123', 'B': '456'} | A | '123'
|{'A': '789', 'B': '012'} | B | '012'
JSON_EXTRACT(json_string_expr, '$.list')
无法给出预期的结果,因为该函数需要$.
之后的字符串。
知道如何使用标准SQL返回预期结果吗?
答案 0 :(得分:2)
以下是用于BigQuery标准SQL
不幸的是,JSONPath必须是字符串文字或查询参数,因此请参见下面的解决方法
app.get('/', (req, res) => {
var batData = [];
//console.log("get req");
MongoClient.connect(url, (err,db)=>{
if(err) throw err;
console.log("Enter DB");
var dbo = db.db("MatchDB");
batData = dbo.collection("Batting").find().toArray((err,res)=>{
console.log("Query Success");
});
console.log("Exit DB");
db.close();
})
// batData remains empty when these lines of code executes.
res.render('index', {
batting: batData
});
});
另一个不太冗长的版本是
#standardSQL
SELECT json_string_expr, list,
(SELECT SPLIT(kv, ':')[SAFE_OFFSET(1)]
FROM UNNEST(SPLIT(REGEXP_REPLACE(json_string_expr, r"[{} ']", ''))) kv
WHERE SPLIT(kv, ':')[SAFE_OFFSET(0)] = list
) value
FROM `project.dataset.table`
如果将上述两个版本都应用于您问题中的样本数据-结果为
#standardSQL
SELECT json_string_expr, list,
REGEXP_EXTRACT(json_string_expr, CONCAT(r"'", list, "': '(.*?)'")) value
FROM `project.dataset.table`