如何使用列中的键进行JSON_EXTRACT?

时间:2019-06-22 14:03:01

标签: google-bigquery standard-sql json-extract

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返回预期结果吗?

1 个答案:

答案 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`