Legacy UDF - 确定字典/地图中的最大值
Posted
技术标签:
【中文标题】Legacy UDF - 确定字典/地图中的最大值【英文标题】:Legacy UDF - Determine largest value in a dictionary/map 【发布时间】:2019-04-02 16:59:48 【问题描述】:我有一个 JSON 映射/字典,我想在其中找到最大值,但我在编写 UDF 时遇到了问题(使用旧版 SQL 语法)。我在网上找不到很多资源或示例,但我确实看到了很多标准 SQL。任何人都可以提供使用旧版 SQL 处理地图、字典和用户定义函数的帮助或在线示例吗?谢谢!
示例输入: “cat_age”: 14, “dog_age”: 4 (这是我表中的一列,我们将列名称为“AgeColumn”)
输出: 14
【问题讨论】:
至少提供输入数据和预期输出的示例! 我会更新的!很抱歉@MikhailBerlyant 您希望每行的最大值还是整列的最大值? @MikhailBerlyant 每行! 抱歉一直问 - 为什么要遗留?为什么不标准? 【参考方案1】:以下是 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
【讨论】:
谢谢@Mikhail!我会搞砸这个并花更多时间更好地理解它。 P.S.不,这与 UDF 无关,因为我在这里看不到使用它的任何原因以上是关于Legacy UDF - 确定字典/地图中的最大值的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Azure 流分析中的“类字典”结构转换为带有 javascript UDF 的多维数组?