Uploaded image for project: 'Couchbase Server'
  1. Couchbase Server
  2. MB-47938

CBO: handle nested array index key better

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 7.0.0, Neo
    • Fix Version/s: Neo, 7.0.2
    • Component/s: query
    • Labels:
      None
    • Triage:
      Untriaged
    • Story Points:
      1
    • Is this a Regression?:
      No

      Description

      CBO currently handled one-level array key and one unnest properly. However it does not properly handled nested array key and multiple levels of unnests using nested array key.

        Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

          Hide
          build-team Couchbase Build Team added a comment -

          Build couchbase-server-7.1.0-1143 contains query commit 205ef7c with commit message:
          MB-47938 Better handling of nested array key in CBO

          Show
          build-team Couchbase Build Team added a comment - Build couchbase-server-7.1.0-1143 contains query commit 205ef7c with commit message: MB-47938 Better handling of nested array key in CBO
          Hide
          build-team Couchbase Build Team added a comment -

          Build couchbase-server-7.1.0-1143 contains query-ee commit a599374 with commit message:
          MB-47938 Better handling of nested array key in CBO

          Show
          build-team Couchbase Build Team added a comment - Build couchbase-server-7.1.0-1143 contains query-ee commit a599374 with commit message: MB-47938 Better handling of nested array key in CBO
          Hide
          build-team Couchbase Build Team added a comment -

          Build couchbase-server-7.0.2-6510 contains query commit dc19d4b with commit message:
          MB-47938 Better handling of nested array key in CBO

          Show
          build-team Couchbase Build Team added a comment - Build couchbase-server-7.0.2-6510 contains query commit dc19d4b with commit message: MB-47938 Better handling of nested array key in CBO
          Hide
          build-team Couchbase Build Team added a comment -

          Build couchbase-server-7.0.2-6510 contains query-ee commit 89ba0b5 with commit message:
          MB-47938 Better handling of nested array key in CBO

          Show
          build-team Couchbase Build Team added a comment - Build couchbase-server-7.0.2-6510 contains query-ee commit 89ba0b5 with commit message: MB-47938 Better handling of nested array key in CBO
          Hide
          pierre.regazzoni Pierre Regazzoni added a comment -

          Verified on 7.0.2-6623 and 7.1.0-1223

          cbq> UPDATE STATISTICS FOR INDEX adv_DISTINCT_schedule_special_flights_flight ON `travel-sample`.`inventory`.`route`;
          {
              "requestID": "abfad533-ae3e-4405-87c4-9d282933a47b",
              "signature": null,
              "results": [
              ],
              "status": "success",
              "metrics": {
                  "elapsedTime": "17.788879267s",
                  "executionTime": "17.788609857s",
                  "resultCount": 0,
                  "resultSize": 0,
                  "serviceLoad": 6
              }
          }
          cbq> explain select airline from `travel-sample`.inventory.route WHERE ANY x in schedule SATISFIES (ANY y in x.special_flights SATISFIES y.flight = "AI444" END) END;
          {
              "requestID": "c31c06bd-678a-4a4f-9595-5368470392bd",
              "signature": "json",
              "results": [
              {
                  "cardinality": 1.180408020862191,
                  "cost": 1196.6580057253286,
                  "plan": {
                      "#operator": "Sequence",
                      "~children": [
                          {
                              "#operator": "DistinctScan",
                              "optimizer_estimates": {
                                  "cardinality": 1.180408020862191,
                                  "cost": 1183.1951224885174,
                                  "fr_cost": 1183.1951224885174,
                                  "size": 11
                              },
                              "scan": {
                                  "#operator": "IndexScan3",
                                  "bucket": "travel-sample",
                                  "index": "adv_DISTINCT_schedule_special_flights_flight",
                                  "index_id": "152e98f8b455d8cc",
                                  "index_projection": {
                                      "primary_key": true
                                  },
                                  "keyspace": "route",
                                  "namespace": "default",
                                  "optimizer_estimates": {
                                      "cardinality": 6007.5,
                                      "cost": 1040.0198734054445,
                                      "fr_cost": 12.171122742139898,
                                      "size": 11
                                  },
                                  "scope": "inventory",
                                  "spans": [
                                      {
                                          "exact": true,
                                          "range": [
                                              {
                                                  "high": "\"AI444\"",
                                                  "inclusion": 3,
                                                  "low": "\"AI444\""
                                              }
                                          ]
                                      }
                                  ],
                                  "using": "gsi"
                              }
                          },
                          {
                              "#operator": "Fetch",
                              "bucket": "travel-sample",
                              "keyspace": "route",
                              "namespace": "default",
                              "optimizer_estimates": {
                                  "cardinality": 1.180408020862191,
                                  "cost": 1196.6017409854512,
                                  "fr_cost": 1196.3867600172987,
                                  "size": 568
                              },
                              "scope": "inventory"
                          },
                          {
                              "#operator": "Parallel",
                              "~child": {
                                  "#operator": "Sequence",
                                  "~children": [
                                      {
                                          "#operator": "Filter",
                                          "condition": "any `x` in (`route`.`schedule`) satisfies any `y` in (`x`.`special_flights`) satisfies ((`y`.`flight`) = \"AI444\") end end",
                                          "optimizer_estimates": {
                                              "cardinality": 1.180408020862191,
                                              "cost": 1196.62987335539,
                                              "fr_cost": 1196.4105927678743,
                                              "size": 568
                                          }
                                      },
                                      {
                                          "#operator": "InitialProject",
                                          "optimizer_estimates": {
                                              "cardinality": 1.180408020862191,
                                              "cost": 1196.6580057253286,
                                              "fr_cost": 1196.4344255184499,
                                              "size": 568
                                          },
                                          "result_terms": [
                                              {
                                                  "expr": "(`route`.`airline`)"
                                              }
                                          ]
                                      }
                                  ]
                              }
                          }
                      ]
                  },
                  "text": "select airline from `travel-sample`.inventory.route WHERE ANY x in schedule SATISFIES (ANY y in x.special_flights SATISFIES y.flight = \"AI444\" END) END;"
              }
              ],
              "status": "success",
              "metrics": {
                  "elapsedTime": "5.976571ms",
                  "executionTime": "5.799139ms",
                  "resultCount": 1,
                  "resultSize": 4178,
                  "serviceLoad": 6
              }
          } 

          Above was done with:

          • load travel-sample
          • add nested array: UPDATE `travel-sample`.inventory.route SET schedule[0] = {"day" : 7, "special_flights" : [ {"flight" : "AI444", "utc" : "4:44:44"}

            , {"flight" : "AI333", "utc" : "3:33:33"} ] } WHERE destinationairport = "CDG" AND sourceairport = "TLV"

          • create index: 
            CREATE INDEX adv_DISTINCT_schedule_special_flights_flight ON `default`:`travel-sample`.`inventory`.`route`(DISTINCT ARRAY (DISTINCT ARRAY `y`.`flight` FOR y in `x`.`special_flights` END) FOR x in `schedule` END)
          Show
          pierre.regazzoni Pierre Regazzoni added a comment - Verified on 7.0.2-6623 and 7.1.0-1223 cbq> UPDATE STATISTICS FOR INDEX adv_DISTINCT_schedule_special_flights_flight ON `travel-sample`.`inventory`.`route`; {     "requestID" : "abfad533-ae3e-4405-87c4-9d282933a47b" ,     "signature" : null ,     "results" : [     ],     "status" : "success" ,     "metrics" : {         "elapsedTime" : "17.788879267s" ,         "executionTime" : "17.788609857s" ,         "resultCount" : 0 ,         "resultSize" : 0 ,         "serviceLoad" : 6     } } cbq> explain select airline from `travel-sample`.inventory.route WHERE ANY x in schedule SATISFIES (ANY y in x.special_flights SATISFIES y.flight = "AI444" END) END; {     "requestID" : "c31c06bd-678a-4a4f-9595-5368470392bd" ,     "signature" : "json" ,     "results" : [     {         "cardinality" : 1.180408020862191 ,         "cost" : 1196.6580057253286 ,         "plan" : {             "#operator" : "Sequence" ,             "~children" : [                 {                     "#operator" : "DistinctScan" ,                     "optimizer_estimates" : {                         "cardinality" : 1.180408020862191 ,                         "cost" : 1183.1951224885174 ,                         "fr_cost" : 1183.1951224885174 ,                         "size" : 11                     },                     "scan" : {                         "#operator" : "IndexScan3" ,                         "bucket" : "travel-sample" ,                         "index" : "adv_DISTINCT_schedule_special_flights_flight" ,                         "index_id" : "152e98f8b455d8cc" ,                         "index_projection" : {                             "primary_key" : true                         },                         "keyspace" : "route" ,                         "namespace" : "default" ,                         "optimizer_estimates" : {                             "cardinality" : 6007.5 ,                             "cost" : 1040.0198734054445 ,                             "fr_cost" : 12.171122742139898 ,                             "size" : 11                         },                         "scope" : "inventory" ,                         "spans" : [                             {                                 "exact" : true ,                                 "range" : [                                     {                                         "high" : "\"AI444\"" ,                                         "inclusion" : 3 ,                                         "low" : "\"AI444\""                                     }                                 ]                             }                         ],                         "using" : "gsi"                     }                 },                 {                     "#operator" : "Fetch" ,                     "bucket" : "travel-sample" ,                     "keyspace" : "route" ,                     "namespace" : "default" ,                     "optimizer_estimates" : {                         "cardinality" : 1.180408020862191 ,                         "cost" : 1196.6017409854512 ,                         "fr_cost" : 1196.3867600172987 ,                         "size" : 568                     },                     "scope" : "inventory"                 },                 {                     "#operator" : "Parallel" ,                     "~child" : {                         "#operator" : "Sequence" ,                         "~children" : [                             {                                 "#operator" : "Filter" ,                                 "condition" : "any `x` in (`route`.`schedule`) satisfies any `y` in (`x`.`special_flights`) satisfies ((`y`.`flight`) = \"AI444\") end end" ,                                 "optimizer_estimates" : {                                     "cardinality" : 1.180408020862191 ,                                     "cost" : 1196.62987335539 ,                                     "fr_cost" : 1196.4105927678743 ,                                     "size" : 568                                 }                             },                             {                                 "#operator" : "InitialProject" ,                                 "optimizer_estimates" : {                                     "cardinality" : 1.180408020862191 ,                                     "cost" : 1196.6580057253286 ,                                     "fr_cost" : 1196.4344255184499 ,                                     "size" : 568                                 },                                 "result_terms" : [                                     {                                         "expr" : "(`route`.`airline`)"                                     }                                 ]                             }                         ]                     }                 }             ]         },         "text" : "select airline from `travel-sample`.inventory.route WHERE ANY x in schedule SATISFIES (ANY y in x.special_flights SATISFIES y.flight = \"AI444\" END) END;"     }     ],     "status" : "success" ,     "metrics" : {         "elapsedTime" : "5.976571ms" ,         "executionTime" : "5.799139ms" ,         "resultCount" : 1 ,         "resultSize" : 4178 ,         "serviceLoad" : 6     } } Above was done with: load travel-sample add nested array: UPDATE `travel-sample`.inventory.route SET schedule [0] = {"day" : 7, "special_flights" : [ {"flight" : "AI444", "utc" : "4:44:44"} , {"flight" : "AI333", "utc" : "3:33:33"} ] } WHERE destinationairport = "CDG" AND sourceairport = "TLV" create index:  CREATE INDEX adv_DISTINCT_schedule_special_flights_flight ON `default`:`travel-sample`.`inventory`.`route`(DISTINCT ARRAY (DISTINCT ARRAY `y`.`flight` FOR y in `x`.`special_flights` END) FOR x in `schedule` END)

            People

            Assignee:
            pierre.regazzoni Pierre Regazzoni
            Reporter:
            bingjie.miao Bingjie Miao
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Dates

              Created:
              Updated:
              Resolved:

                Gerrit Reviews

                There are no open Gerrit changes

                  PagerDuty