雪花从嵌套 JSON 中获取 MIN/MAX 个值

Snowflake Get MIN/MAX values from Nested JSON

我在雪花列中有以下示例结构,表示地图多边形的一系列坐标。每对值由“经度、纬度”组成,如下所示:

COLUMN ZONE

{
  "coordinates": [
    [
      [
        -58.467372,
        -34.557908
      ],
      [
        -58.457565,
        -34.569341
      ],
      [
        -58.446836,
        -34.573511
      ],
      [
        -58.43482,
        -34.553367
      ],
      [
        -58.441944,
        -34.547923
      ]
    ]
  ],
  "type": "POLYGON"
}

我需要为每个 table 行获取最小的经度和最小的纬度以及最大的经度和纬度。 所以,对于这个例子,我需要得到类似的东西:

最小值:-58.467372,-34.573511 最大值:-58.43482,-34.547923

你们知道这是否可以使用查询吗?

我尽可能导航 json 以获取坐标集,但我不确定如何从那里继续。我尝试对坐标列执行 MIN,但我不确定如何仅引用“纬度”或“经度”值。

这显然行不通:

MIN(ZONE['coordinates'][0])

有什么建议吗?

您可以使用一些 Snowflake GIS 函数来执行此操作,并处理输入数据以便于解析:

with data as ( 
select '
{
  "coordinates": [
    [
      [
        -58.467372,
        -34.557908
      ],
      [
        -58.457565,
        -34.569341
      ],
      [
        -58.446836,
        -34.573511
      ],
      [
        -58.43482,
        -34.553367
      ],
      [
        -58.441944,
        -34.547923
      ]
    ]
  ],
  "type": "POLYGON"
}
' x
)

select st_xmin(g), st_xmax(g), st_ymin(g), st_ymax(g)
from (
    select to_geography(replace(x, 'POLYGON', 'MultiLineString')) g
    from data
)