旧版UDF-确定字典/地图中的最大值

时间:2019-04-02 16:59:48

标签: javascript sql database google-bigquery legacy-sql

我有一个JSON地图/字典,我想在其中找到最大的价值,但是在编写UDF(使用旧版SQL语法)时遇到了问题。我在网上找不到很多资源或示例,但是我确实看到了很多有关Standard SQL的信息。谁能提供使用旧版SQL处理地图,字典和用户定义函数的帮助或好的在线示例?谢谢!

示例输入: {“ cat_age”:14,“ dog_age”:4} (这是我表中的一列,我们将其命名为“ AgeColumn”)

输出: 14

1 个答案:

答案 0 :(得分:0)

以下是用于BigQuery标准SQL

#standardSQL
SELECT col, 
  (
    SELECT AS STRUCT CAST(SPLIT(item, ':')[SAFE_OFFSET(1)] AS INT64) age, item 
    FROM UNNEST(SPLIT(REGEXP_REPLACE(col, r'{|}', ''))) item
    ORDER BY CAST(SPLIT(item, ':')[SAFE_OFFSET(1)] AS INT64) DESC
    LIMIT 1
  ).*
FROM `project.dataset.table`   

您可以使用下面的示例中的虚拟数据进行测试,测试

#standardSQL
WITH `project.dataset.table` AS (
  SELECT '{“cat_age”: 14, “dog_age”: 4}' col UNION ALL
  SELECT '{“cat_age”: 11, “dog_age”: 16}' 
)
SELECT col, 
  (
    SELECT AS STRUCT CAST(SPLIT(item, ':')[SAFE_OFFSET(1)] AS INT64) age, item 
    FROM UNNEST(SPLIT(REGEXP_REPLACE(col, r'{|}', ''))) item
    ORDER BY CAST(SPLIT(item, ':')[SAFE_OFFSET(1)] AS INT64) DESC
    LIMIT 1
  ).*
FROM `project.dataset.table`   

有结果

Row     col                                 age     item     
1       {“cat_age”: 14, “dog_age”: 4}       14      “cat_age”: 14    
2       {“cat_age”: 11, “dog_age”: 16}      16      “dog_age”: 16    
相关问题