无法使用横向展平等查询半结构化数据

Can't query semi-structured data using lateral flatten etc

我在 table 中得到了一些数据,其中一列是一个包含大量 JSON 数据的变体。我可以成功地展平数组和数组中的数组以访问其中的数据,但我正在努力展平键值对以访问给定键的值。

我在 https://docs.snowflake.net/manuals/user-guide/json-basics-tutorial.html 看到文档将其映射到我的用例导致结果中出现 NULL 值。

我的变体部分显示在下面 - 特别是它的值,如 MatchStatus 和我有兴趣提取的变量下的 key/values。

感谢任何有用的建议。

所描述的 JSON 具有简单的类路径结构,其中包含各种级别的对象(没有数组)。

根据 Snowflake's semi-structured data documentation,使用圆点表示法提取遵循(平面嵌套)路径的值:

Insert a colon : between the VARIANT column name
and any first-level element: <column>:<level1_element>.

Use dot notation to traverse a path in a JSON object:
<column>:<level1_element>.<level2_element>.<level3_element>.

一个例子(注意第三行和第四行中点的链接使用):

SELECT
  badminton_odds:Id as id,
  badminton_odds:PricingRequest.MatchStatus as match_status,
  badminton_odds:PricingRequest.Variables.Dispersion as var_dispersion
FROM odds_table

您不需要 FLATTEN 进行简单的奇异值提取。当您需要将一些系列数据分解为多行时(例如在数组的情况下),请使用 FLATTEN。

例如,如果问题中描述的 JSON 是单个数组元素在此类对象的长数组中的外观,您可以使用 FLATTEN 先将整个数组分解为行,然后应用路径样式提取以从每一行中检索值。