从标准 SQL 中的字符串中提取最大的 key:value 对

Extract the highest key:value pair from a string in Standard SQL

我下面有如下数据类型,是116=0.2875这样的键值对类型。 Big Query 已将其存储为字符串。我需要做的是从每一行中提取密钥,即 116。

为了使事情变得更复杂,如果一行有多个键值对,要提取的迭代是右侧数字最大的迭代,例如 {1=0.1,2=0.8},因此提取的数字将是 2.

我正在努力使用 SQL 来执行此操作,特别是因为有些行有一个值而有些行有多个:

这与我设法达到的目标一样接近,我可以创建一些代码来提取最高的右手值(我不需要),但我似乎无法创建一些东西来获得整个 key/value 对,这对我来说很好,对我有用,或者只是钥匙,那会很棒。

  column
  ,(SELECT MAX(CAST(Values AS NUMERIC)) FROM UNNEST(JSON_EXTRACT_ARRAY(REPLACE(REPLACE(REPLACE(column,"{","["),"}","]"),"=",","))) AS Values WHERE Values LIKE "%.%") AS Highest
  from `table`

这是一些示例数据:

1   {99=0.25}
2   {99=0.25}
3   {99=0.25}
4   {116=0.2875, 119=0.6, 87=0.5142857142857143}
5   {105=0.308724832214765}
6   {105=0.308724832214765}
7   {139=0.5712754555198284}
8   {127=0.5767967894928858}    
9   {134=0.2530120481927711, 129=0.29696599825632086, 73=0.2662459427947186}    
10  {80=0.21242613001118038}

如能就此难题提供任何帮助,我们将不胜感激!

考虑以下方法

select column, 
  ( select cast(split(kv, '=')[offset(0)] as int64)
    from unnest(regexp_extract_all(column, r'(\d+=\d+.\d+)')) kv
    order by cast(split(kv, '=')[offset(1)] as float64) desc 
    limit 1
  ) key
from your_table               

如果应用于您问题中的示例数据 - 输出为