【问题标题】:Need help parsing this in snowflake需要帮助在雪花中解析这个
【发布时间】:2020-09-28 18:03:14
【问题描述】:

[{“腿”:[{“点”:[{“纬度”:29.76524,“经度”:-95.35406},{“纬度”:30.74438,“经度”:-101.71203},{“纬度” :30.74421,“经度”:-101.71247 },{“纬度”:30.74404,“经度”:-101.71289 },{“纬度”:30.74366,“经度”:-101.71374 },{“纬度”:30.74346,“经度” “:-101.71415 },{“纬度”:30.74303,“经度”:-101.71495 },{“纬度”:30.74274,“经度”:-101.71543 },{“纬度”:30.74234,“经度”:-101.71606 } ,{“纬度”:31.82985,“经度”:-102.34753},{“纬度”:31.8302,“经度”:-102.34597},{“纬度”:31.83029,“经度”:-102.34557},{“纬度” :31.83038,“经度”:-102.34526 },{“纬度”:31.83051,“经度”:-102.3448 },{“纬度”:31.83081,“经度”:-102.344 },{“纬度”:31.83099,“经度” “:-102.34356 },{“纬度”:31.83113,“经度”:-102.34328 },{“纬度”:31.83145,“经度”:-102.34271 },{“纬度”:31.83174,“经度”:-102.34226 } ,{“拉纬度:31.83207,“经度”:-102.34181 },{“纬度”:31.83267,“经度”:-102.34109 },{“纬度”:31.83317,“经度”:-102.34053 },{“纬度”:31.83359, “经度”:-102.34007 },{“纬度”:31.8339,“经度”:-102.33971 },{“纬度”:31.83499,“经度”:-102.33852 },{“纬度”:31.83547,“经度”:- 102.338 },{“纬度”:31.83553,“经度”:-102.33793 },{“纬度”:31.83685,“经度”:-102.33648 },{“纬度”:31.83764,“经度”:-102.3356 },{“纬度:31.83838,“经度”:-102.33479 },{“纬度”:31.84575,“经度”:-102.32666 },{“纬度”:31.84603,“经度”:-102.32636 },{“纬度”:31.84679, “经度”:-102.32551 },{“纬度”:31.84878,“经度”:-102.32333 },{“纬度”:31.85095,“经度”:-102.32094 },{“纬度”:31.85131,“经度”:- 102.32054 },{“纬度”:31.85134,“经度”:-102.32044 },{“纬度”:31.85259,“经度”:-102.31886 },{“纬度”:31.85273,“经度”:-10 2.31859 },{“纬度”:31.85462,“经度”:-102.3165 },{“纬度”:31.85467,“经度”:-102.31644 },{“纬度”:31.85489,“经度”:-102.3162 },{“纬度:31.85505,“经度”:-102.3164 },{“纬度”:31.8552,“经度”:-102.3166 },{“纬度”:31.85533,“经度”:-102.31677 },{“纬度”:31.85506, “经度”:-102.31706 },{“纬度”:31.85655,“经度”:-102.32234 },{“纬度”:31.85851,“经度”:-102.32294 }],“摘要”:{“到达时间”:“2020 -06-04T01:22:22-05:00”、“departureTime”:“2020-06-03T17:28:11-05:00”、“lengthInMeters”:863989、“trafficDelayInSeconds”:528、“travelTimeInSeconds”: 28451 } } ],“sections”:[{“endPointIndex”:5797,“sectionType”:“TRAVEL_MODE”,“startPointIndex”:0,“travelMode”:“car”}],“summary”:{“arrivalTime”: “2020-06-04T01:22:22-05:00”、“departureTime”:“2020-06-03T17:28:11-05:00”、“lengthInMeters”:863989、“trafficDelayInSeconds”:528、“travelTimeInSeconds ": 28451 } } ]

【问题讨论】:

  • 您好 Og101010,欢迎来到 StackOverflow。您能否提供更多解释并提供您已经编写的代码?参观stackoverflow.com/tour。这对于了解可以接受哪种类型的问题很重要!
  • 我假设这是您希望解析的 VARIANT 列 JSON。你能告诉我们你想查询哪些元素和格式吗?似乎有几个层和一些数组,可以单独读取。如果你想把整个事情弄平,就会产生大量重复的数据。
  • 此外,您可能希望在加载数据时去掉那些外部方括号。它会让解析变得更容易。

标签: sql json snowflake-cloud-data-platform snowflake-schema snowflake-task


【解决方案1】:

我会查阅文档,尤其是 https://docs.snowflake.com/en/sql-reference/functions/flatten.htmlhttps://docs.snowflake.com/en/user-guide/semistructured-concepts.html

这将取决于您如何加载数据,但这里有一个示例查询可以帮助您入门:

with tbl as (select parse_json($1)::variant list_json from values ('[ { "legs": [ { "points": [ { "latitude": 29.76524, "longitude": -95.35406 }, { "latitude": 30.74438, "longitude": -101.71203 }, { "latitude": 30.74421, "longitude": -101.71247 }, { "latitude": 30.74404, "longitude": -101.71289 }, { "latitude": 30.74366, "longitude": -101.71374 }, { "latitude": 30.74346, "longitude": -101.71415 }, { "latitude": 30.74303, "longitude": -101.71495 }, { "latitude": 30.74274, "longitude": -101.71543 }, { "latitude": 30.74234, "longitude": -101.71606 }, { "latitude": 31.82985, "longitude": -102.34753 }, { "latitude": 31.8302, "longitude": -102.34597 }, { "latitude": 31.83029, "longitude": -102.34557 }, { "latitude": 31.83038, "longitude": -102.34526 }, { "latitude": 31.83051, "longitude": -102.3448 }, { "latitude": 31.83081, "longitude": -102.344 }, { "latitude": 31.83099, "longitude": -102.34356 }, { "latitude": 31.83113, "longitude": -102.34328 }, { "latitude": 31.83145, "longitude": -102.34271 }, { "latitude": 31.83174, "longitude": -102.34226 }, { "latitude": 31.83207, "longitude": -102.34181 }, { "latitude": 31.83267, "longitude": -102.34109 }, { "latitude": 31.83317, "longitude": -102.34053 }, { "latitude": 31.83359, "longitude": -102.34007 }, { "latitude": 31.8339, "longitude": -102.33971 }, { "latitude": 31.83499, "longitude": -102.33852 }, { "latitude": 31.83547, "longitude": -102.338 }, { "latitude": 31.83553, "longitude": -102.33793 }, { "latitude": 31.83685, "longitude": -102.33648 }, { "latitude": 31.83764, "longitude": -102.3356 }, { "latitude": 31.83838, "longitude": -102.33479 }, { "latitude": 31.84575, "longitude": -102.32666 }, { "latitude": 31.84603, "longitude": -102.32636 }, { "latitude": 31.84679, "longitude": -102.32551 }, { "latitude": 31.84878, "longitude": -102.32333 }, { "latitude": 31.85095, "longitude": -102.32094 }, { "latitude": 31.85131, "longitude": -102.32054 }, { "latitude": 31.85134, "longitude": -102.32044 }, { "latitude": 31.85259, "longitude": -102.31886 }, { "latitude": 31.85273, "longitude": -102.31859 }, { "latitude": 31.85462, "longitude": -102.3165 }, { "latitude": 31.85467, "longitude": -102.31644 }, { "latitude": 31.85489, "longitude": -102.3162 }, { "latitude": 31.85505, "longitude": -102.3164 }, { "latitude": 31.8552, "longitude": -102.3166 }, { "latitude": 31.85533, "longitude": -102.31677 }, { "latitude": 31.85506, "longitude": -102.31706 }, { "latitude": 31.85655, "longitude": -102.32234 }, { "latitude": 31.85851, "longitude": -102.32294 } ], "summary": { "arrivalTime": "2020-06-04T01:22:22-05:00", "departureTime": "2020-06-03T17:28:11-05:00", "lengthInMeters": 863989, "trafficDelayInSeconds": 528, "travelTimeInSeconds": 28451 } } ], "sections": [ { "endPointIndex": 5797, "sectionType": "TRAVEL_MODE", "startPointIndex": 0, "travelMode": "car" } ], "summary": { "arrivalTime": "2020-06-04T01:22:22-05:00", "departureTime": "2020-06-03T17:28:11-05:00", "lengthInMeters": 863989, "trafficDelayInSeconds": 528, "travelTimeInSeconds": 28451 } } ]') t)
     ,flat_tbl as (select unnested.value json from tbl, lateral flatten(list_json) unnested)

select
    legs.value:summary.trafficDelayInSeconds trafficDelayInSeconds,
    legs.value:summary summary,
    points.value point
from flat_tbl,
    lateral flatten(json:legs) legs,
    lateral flatten(legs.value:points) points
;

它会产生这样的结果,这只是对您在解析方面可能要做的事情的猜测。

TRAFFICDELAYINSECONDS   SUMMARY POINT
528 {    "arrivalTime": "2020-06-04T01:22:22-05:00",    "departureTime": "2020-06-03T17:28:11-05:00",    "lengthInMeters": 863989,    "trafficDelayInSeconds": 528,    "travelTimeInSeconds": 28451  }  {    "latitude": 29.76524,    "longitude": -95.35406  }
528 {    "arrivalTime": "2020-06-04T01:22:22-05:00",    "departureTime": "2020-06-03T17:28:11-05:00",    "lengthInMeters": 863989,    "trafficDelayInSeconds": 528,    "travelTimeInSeconds": 28451  }  {    "latitude": 30.74438,    "longitude": -101.71203  }
528 {    "arrivalTime": "2020-06-04T01:22:22-05:00",    "departureTime": "2020-06-03T17:28:11-05:00",    "lengthInMeters": 863989,    "trafficDelayInSeconds": 528,    "travelTimeInSeconds": 28451  }  {    "latitude": 30.74421,    "longitude": -101.71247  }
528 {    "arrivalTime": "2020-06-04T01:22:22-05:00",    "departureTime": "2020-06-03T17:28:11-05:00",    "lengthInMeters": 863989,    "trafficDelayInSeconds": 528,    "travelTimeInSeconds": 28451  }  {    "latitude": 30.74404,    "longitude": -101.71289  }
528 {    "arrivalTime": "2020-06-04T01:22:22-05:00",    "departureTime": "2020-06-03T17:28:11-05:00",    "lengthInMeters": 863989,    "trafficDelayInSeconds": 528,    "travelTimeInSeconds": 28451  }  {    "latitude": 30.74366,    "longitude": -101.71374  }
528 {    "arrivalTime": "2020-06-04T01:22:22-05:00",    "departureTime": "2020-06-03T17:28:11-05:00",    "lengthInMeters": 863989,    "trafficDelayInSeconds": 528,    "travelTimeInSeconds": 28451  }  {    "latitude": 30.74346,    "longitude": -101.71415  }
528 {    "arrivalTime": "2020-06-04T01:22:22-05:00",    "departureTime": "2020-06-03T17:28:11-05:00",    "lengthInMeters": 863989,    "trafficDelayInSeconds": 528,    "travelTimeInSeconds": 28451  }  {    "latitude": 30.74303,    "longitude": -101.71495  }
528 {    "arrivalTime": "2020-06-04T01:22:22-05:00",    "departureTime": "2020-06-03T17:28:11-05:00",    "lengthInMeters": 863989,    "trafficDelayInSeconds": 528,    "travelTimeInSeconds": 28451  }  {    "latitude": 30.74274,    "longitude": -101.71543  }
528 {    "arrivalTime": "2020-06-04T01:22:22-05:00",    "departureTime": "2020-06-03T17:28:11-05:00",    "lengthInMeters": 863989,    "trafficDelayInSeconds": 528,    "travelTimeInSeconds": 28451  }  {    "latitude": 30.74234,    "longitude": -101.71606  }
528 {    "arrivalTime": "2020-06-04T01:22:22-05:00",    "departureTime": "2020-06-03T17:28:11-05:00",    "lengthInMeters": 863989,    "trafficDelayInSeconds": 528,    "travelTimeInSeconds": 28451  }  {    "latitude": 31.82985,    "longitude": -102.34753  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-04
    • 1970-01-01
    • 2011-08-15
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    相关资源
    最近更新 更多