0

我有嵌套数组的 json,数据因不同的 json 而异。我将我的 json 解析代码和示例 json 文件放在这里。只有当行标签有很多对象时,查询才会变慢,如下所示,这个 json 查询在一分钟内执行,但是当我有 100 个对象时,最多需要 50 分钟。你可以看到下面的json

    {
  "page_desktop_image": {
    "responseAggregationType": "byPage",
    "rows": [
      {
        "clicks": 5,
        "ctr": 0.003048780487804878,
        "impressions": 1640,
        "keys": [
          "abc"
        ],
        "position": 10.207317073170731
      },
      {
        "clicks": 2,
        "ctr": 0.010638297872340425,
        "impressions": 188,
        "keys": [
          "abc"
        ],
        "position": 28.324468085106382
      },
      {
        "clicks": 0,
        "ctr": 0,
        "impressions": 4,
        "keys": [
          "abc"
        ],
        "position": 237.5
      }
    ]
  },
  "page_desktop_video": {
    "responseAggregationType": "byPage",
    "rows": [
      {
        "clicks": 1,
        "ctr": 0.038461538461538464,
        "impressions": 26,
        "keys": [
          "abc"
        ],
        "position": 4.5
      },
      {
        "clicks": 0,
        "ctr": 0,
        "impressions": 19,
        "keys": [
          "abc"
        ],
        "position": 6.947368421052632
      }
    ]
  },
  "page_desktop_web": {
    "responseAggregationType": "byPage",
    "rows": [
      {
        "clicks": 8578,
        "ctr": 0.28393631458740193,
        "impressions": 30211,
        "keys": [
          "abc"
        ],
        "position": 1.7217900764622156
      },
      {
        "clicks": 0,
        "ctr": 0,
        "impressions": 22,
        "keys": [
          "abc"
        ],
        "position": 12.318181818181818
      }
    ]
  },
  "page_mobile_image": {
    "responseAggregationType": "byPage",
    "rows": [
      {
        "clicks": 3,
        "ctr": 0.028037383177570093,
        "impressions": 107,
        "keys": [
          "abc"
        ],
        "position": 17.018691588785046
      },
      {
        "clicks": 0,
        "ctr": 0,
        "impressions": 37,
        "keys": [
          "abcx"
        ],
        "position": 38.4054054054054
      }
    ]
  },
  "page_mobile_video": {
    "responseAggregationType": "byPage",
    "rows": [
      {
        "clicks": 2,
        "ctr": 0.05128205128205128,
        "impressions": 39,
        "keys": [
          "abc"
        ],
        "position": 6.487179487179487
      },
      {
        "clicks": 0,
        "ctr": 0,
        "impressions": 64,
        "keys": [
          "abc"
        ],
        "position": 4.3125
      }
    ]
  },
  "page_mobile_web": {
    "responseAggregationType": "byPage",
    "rows": [
      {
        "clicks": 3604,
        "ctr": 0.1579385599719532,
        "impressions": 22819,
        "keys": [
          "abc"
        ],
        "position": 2.3936193522941407
      },
            {
        "clicks": 0,
        "ctr": 0,
        "impressions": 12,
        "keys": [
          "abc"
        ],
        "position": 6.583333333333333
      }
    ]
  },
  "page_tablet_image": {
    "responseAggregationType": "byPage",
    "rows": [
      {
        "clicks": 1,
        "ctr": 0.005649717514124294,
        "impressions": 177,
        "keys": [
          "abc"
        ],
        "position": 5.112994350282486
      },
            {
        "clicks": 0,
        "ctr": 0,
        "impressions": 6,
        "keys": [
          "abc"
        ],
        "position": 33.5
      }
    ]
  },
  "page_tablet_video": {
    "responseAggregationType": "byPage",
    "rows": [
      {
        "clicks": 1,
        "ctr": 0.1,
        "impressions": 10,
        "keys": [
          "abc"
        ],
        "position": 18.7
      },
           {
        "clicks": 0,
        "ctr": 0,
        "impressions": 1,
        "keys": [
          "abc"
        ],
        "position": 10
      }
    ]
  },
  "page_tablet_web": {
    "responseAggregationType": "byPage",
    "rows": [
      {
        "clicks": 639,
        "ctr": 0.2729602733874413,
        "impressions": 2341,
        "keys": [
          "abc"
        ],
        "position": 1.5262708244340026
      },
     {
        "clicks": 0,
        "ctr": 0,
        "impressions": 27,
        "keys": [
          "abc"
        ],
        "position": 60.55555555555556
      }
    ]
  }
}

这是我的 json 解析代码:

    SELECT 
                 JSON_FILE:page_desktop_image:responseAggregationType::String as responseAggregationType_desk_image
                   , r_desk_image.value:clicks as clicks_desk_image
                   , r_desk_image.value:ctr as ctr_desk_image
                   , r_desk_image.value:impressions as impressions_desk_image
                   , array_to_string(r_desk_image.value:keys , '') as keys_desk_image
                   , r_desk_image.value:position as position_desk_image
                   ,JSON_FILE:page_desktop_video:responseAggregationType::String as responseAggregationType_desk_video
                   , r_desk_video.value:clicks as clicks_desk_video
                   , r_desk_video.value:ctr as ctr_desk_video
                   , r_desk_video.value:impressions as impressions_desk_video
                   , array_to_string(r_desk_video.value:keys,'') as keys_desk_video
                   , r_desk_video.value:position as position_desk_video
                   ,JSON_FILE:page_desktop_web:responseAggregationType::String as responseAggregationType_desk_web
                   , r_desk_web.value:clicks as clicks_desk_web
                   , r_desk_web.value:ctr as ctr_desk_web
                   , r_desk_web.value:impressions as impressions_desk_web
                   , array_to_string(r_desk_web.value:keys,'') as keys_desk_web
                   , r_desk_web.value:position as position_desk_web
                   ,JSON_FILE:page_mobile_image:responseAggregationType::String as responseAggregationType_mob_image
                   , r_mob_image.value:clicks as clicks_mob_image
                   , r_mob_image.value:ctr as ctr_mob_image
                   , r_mob_image.value:impressions as impressions__mob_image
                   , array_to_string(r_mob_image.value:keys,'') as keys_mob_image
                   , r_mob_image.value:position as position_mob_image
                   ,JSON_FILE:page_mobile_video:responseAggregationType::String as responseAggregationType_mob_video
                   , r_mob_video.value:clicks as clicks_mob_video
                   , r_mob_video.value:ctr as ctr_mob_video
                   , r_mob_video.value:impressions as impressions_mob_video
                   , array_to_string(r_mob_video.value:keys,'') as keys_mob_video
                   , r_mob_video.value:position as position_mob_video
                   ,JSON_FILE:page_mobile_web:responseAggregationType::String as responseAggregationType_mob_web
                   , r_mob_web.value:clicks as clicks_mob_web
                   , r_mob_web.value:ctr as ctr_mob_web
                   , r_mob_web.value:impressions as impressions_mob_web
                   , array_to_string(r_mob_web.value:keys,'') as keys_mob_web
                   , r_mob_web.value:position as position_mob_web
                   ,JSON_FILE:page_tablet_image:responseAggregationType::String as responseAggregationType_tab_image
                   , r_tab_image.value:clicks as clicks_tab_image
                   , r_tab_image.value:ctr as ctr_tab_image
                   , r_tab_image.value:impressions as impressions_tab_image
                   , array_to_string(r_tab_image.value:keys,'') as keys_tab_image
                   , r_tab_image.value:position as position_tab_image
                   ,JSON_FILE:page_tablet_video:responseAggregationType::String as responseAggregationType_tab_video
                   , r_tab_video.value:clicks as clicks_tab_video
                   , r_tab_video.value:ctr as ctr_tab_video
                   , r_tab_video.value:impressions as impressions_tab_video
                   , array_to_string(r_tab_video.value:keys,'') as keys_tab_video
                   , r_tab_video.value:position as position_tab_video
                   ,JSON_FILE:page_tablet_web:responseAggregationType::String as responseAggregationType_tab_web
                   , r_tab_web.value:clicks as clicks_tab_web
                   , r_tab_web.value:ctr as ctr_tab_web
                   , r_tab_web.value:impressions as impressions_tab_web
                   , array_to_string(r_tab_web.value:keys ,'') as keys_tab_web
                   , r_tab_web.value:position as position_tab_web
              from GSC_JSONS
                   ,lateral flatten(input => JSON_FILE:page_desktop_image:rows) as r_desk_image
                   ,lateral flatten(input => JSON_FILE:page_desktop_video:rows) as r_desk_video
                   ,lateral flatten(input => JSON_FILE:page_desktop_web:rows) as r_desk_web
                   ,lateral flatten(input => JSON_FILE:page_mobile_image:rows) as r_mob_image
                   ,lateral flatten(input => JSON_FILE:page_mobile_video:rows) as r_mob_video
                   ,lateral flatten(input => JSON_FILE:page_mobile_web:rows) as r_mob_web
                   ,lateral flatten(input => JSON_FILE:page_tablet_image:rows) as r_tab_image
                   ,lateral flatten(input => JSON_FILE:page_tablet_video:rows) as r_tab_video
                   ,lateral flatten(input => JSON_FILE:page_tablet_web:rows) as r_tab_web

如果有人知道解决方法,请告诉我。我知道为什么它很慢,因为它为每个对象进行交叉连接,但我想更快地执行它。

4

2 回答 2

0

我建议您在展平的输出之上创建一个物化视图。 https://docs.snowflake.com/en/user-guide/views-materialized.html

CREATE MATERIALIZED VIEW myview AS
SELECT 
    JSON_FILE:page_desktop_image:responseAggregationType::String as responseAggregationType_desk_image
    , r_desk_image.value:clicks as clicks_desk_image
    , r_desk_image.value:ctr as ctr_desk_image
    , r_desk_image.value:impressions as impressions_desk_image
    , array_to_string(r_desk_image.value:keys , '') as keys_desk_image
    , r_desk_image.value:position as position_desk_image
    ,JSON_FILE:page_desktop_video:responseAggregationType::String as responseAggregationType_desk_video
    , r_desk_video.value:clicks as clicks_desk_video
    , r_desk_video.value:ctr as ctr_desk_video
    , r_desk_video.value:impressions as impressions_desk_video
    , array_to_string(r_desk_video.value:keys,'') as keys_desk_video
    , r_desk_video.value:position as position_desk_video
    ,JSON_FILE:page_desktop_web:responseAggregationType::String as responseAggregationType_desk_web
    , r_desk_web.value:clicks as clicks_desk_web
    , r_desk_web.value:ctr as ctr_desk_web
    , r_desk_web.value:impressions as impressions_desk_web
    , array_to_string(r_desk_web.value:keys,'') as keys_desk_web
    , r_desk_web.value:position as position_desk_web
    ,JSON_FILE:page_mobile_image:responseAggregationType::String as responseAggregationType_mob_image
    , r_mob_image.value:clicks as clicks_mob_image
    , r_mob_image.value:ctr as ctr_mob_image
    , r_mob_image.value:impressions as impressions__mob_image
    , array_to_string(r_mob_image.value:keys,'') as keys_mob_image
    , r_mob_image.value:position as position_mob_image
    ,JSON_FILE:page_mobile_video:responseAggregationType::String as responseAggregationType_mob_video
    , r_mob_video.value:clicks as clicks_mob_video
    , r_mob_video.value:ctr as ctr_mob_video
    , r_mob_video.value:impressions as impressions_mob_video
    , array_to_string(r_mob_video.value:keys,'') as keys_mob_video
    , r_mob_video.value:position as position_mob_video
    ,JSON_FILE:page_mobile_web:responseAggregationType::String as responseAggregationType_mob_web
    , r_mob_web.value:clicks as clicks_mob_web
    , r_mob_web.value:ctr as ctr_mob_web
    , r_mob_web.value:impressions as impressions_mob_web
    , array_to_string(r_mob_web.value:keys,'') as keys_mob_web
    , r_mob_web.value:position as position_mob_web
    ,JSON_FILE:page_tablet_image:responseAggregationType::String as responseAggregationType_tab_image
    , r_tab_image.value:clicks as clicks_tab_image
    , r_tab_image.value:ctr as ctr_tab_image
    , r_tab_image.value:impressions as impressions_tab_image
    , array_to_string(r_tab_image.value:keys,'') as keys_tab_image
    , r_tab_image.value:position as position_tab_image
    ,JSON_FILE:page_tablet_video:responseAggregationType::String as responseAggregationType_tab_video
    , r_tab_video.value:clicks as clicks_tab_video
    , r_tab_video.value:ctr as ctr_tab_video
    , r_tab_video.value:impressions as impressions_tab_video
    , array_to_string(r_tab_video.value:keys,'') as keys_tab_video
    , r_tab_video.value:position as position_tab_video
    ,JSON_FILE:page_tablet_web:responseAggregationType::String as responseAggregationType_tab_web
    , r_tab_web.value:clicks as clicks_tab_web
    , r_tab_web.value:ctr as ctr_tab_web
    , r_tab_web.value:impressions as impressions_tab_web
    , array_to_string(r_tab_web.value:keys ,'') as keys_tab_web
    , r_tab_web.value:position as position_tab_web
FROM gsc_jsons
    ,lateral flatten(input => JSON_FILE:page_desktop_image:rows) as r_desk_image
    ,lateral flatten(input => JSON_FILE:page_desktop_video:rows) as r_desk_video
    ,lateral flatten(input => JSON_FILE:page_desktop_web:rows) as r_desk_web
    ,lateral flatten(input => JSON_FILE:page_mobile_image:rows) as r_mob_image
    ,lateral flatten(input => JSON_FILE:page_mobile_video:rows) as r_mob_video
    ,lateral flatten(input => JSON_FILE:page_mobile_web:rows) as r_mob_web
    ,lateral flatten(input => JSON_FILE:page_tablet_image:rows) as r_tab_image
    ,lateral flatten(input => JSON_FILE:page_tablet_video:rows) as r_tab_video
    ,lateral flatten(input => JSON_FILE:page_tablet_web:rows) as r_tab_web
于 2021-07-28T10:54:33.840 回答
-1

如果我的回答对您有帮助,请将此答案标记为有用。

于 2021-08-04T11:20:58.167 回答