Skip to content

Conversation

@qianheng-aws
Copy link
Collaborator

@qianheng-aws qianheng-aws commented Jul 23, 2025

Description

  1. Support aggregation push down with scripts
  2. Support push down for some new added UDAF
  3. Fix sort push down after aggregation by push the sort into agg bucket.

Related Issues

Resolves
#3386
#3385

Check List

  • New functionality includes testing.
  • New functionality has been documented.
  • New functionality has javadoc added.
  • New functionality has a user manual doc added.
  • API changes companion pull request created.
  • Commits are signed per the DCO using --signoff.
  • Public documentation issue/PR created.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Signed-off-by: Heng Qian <qianheng@amazon.com>
Signed-off-by: Heng Qian <qianheng@amazon.com>
@qianheng-aws
Copy link
Collaborator Author

qianheng-aws commented Jul 24, 2025

CI failed because of the sort push down after aggregation is implemented improperly. Per v2's implementation, we should push down sort's collation into the inner of AggregationBuilder instead of the outer

For instance, when do push down for PPL

source = big5
| eval range_bucket = case(
   `metrics.size` < -10, 'range_1',
   `metrics.size` >= -10 and `metrics.size` < 10, 'range_2',
   `metrics.size` >= 10 and `metrics.size` < 100, 'range_3',
   `metrics.size` >= 100 and `metrics.size` < 1000, 'range_4',
   `metrics.size` >= 1000 and `metrics.size` < 2000, 'range_5',
   `metrics.size` >= 2000, 'range_6')
| stats min(`metrics.tmin`) as tmin, avg(`metrics.size`) as tavg, max(`metrics.size`) as tmax by range_bucket, span(`@timestamp`, 1h) as auto_span
| sort + range_bucket, + auto_span

In Calcite, it will build SearchRequest like below:

{
  "from": 0,
  "size": 0,
  "timeout": "1m",
  "sort": [
    {
      "range_bucket": {
        "order": "asc",
        "missing": "_first"
      }
    },
    {
      "auto_span": {
        "order": "asc",
        "missing": "_first"
      }
    }
  ],
  "aggregations": {
    "composite_buckets": {
      "composite": {
        "size": 1000,
        "sources": [
          {
            "range_bucket": {
              "terms": {
                "script": {
                  "source": "{\"langType\":\"calcite\" …"
                }
              }
            }
            ...
            ...
          }
        ]
      }
    }
  }
}

And then cause exception:

QueryShardException[No mapping found for [range_bucket] in order to sort on]\

@yuancu

Signed-off-by: Heng Qian <qianheng@amazon.com>
@qianheng-aws
Copy link
Collaborator Author

qianheng-aws commented Jul 24, 2025

CI failed because of the sort push down after aggregation is implemented improperly. Per v2's implementation, we should push down sort's collation inner AggregationBuilder instead of outer.

Fixed by the lasted commit. The correct DSL should be:

{
    "from": 0,
    "size": 0,
    "timeout": "1m",
    "aggregations": {
        "composite_buckets": {
            "composite": {
                "size": 10,
                "sources": [
                    {
                        "range_bucket": {
                            "terms": {
                                "script": {
                                    "source": "{\"langType\":\"calcite\",\"script\":\"......\"}",
                                    "lang": "opensearch_compounded_script",
                                    "params": {
                                        "utcTimestamp": 1753349341218939000
                                    }
                                },
                                "missing_bucket": true,
                                "missing_order": "first",
                                "order": "asc"
                            }
                        }
                    },
                    {
                        "auto_span": {
                            "date_histogram": {
                                "field": "@timestamp",
                                "missing_bucket": true,
                                "missing_order": "first",
                                "order": "asc",
                                "fixed_interval": "1h"
                            }
                        }
                    }
                ]
            },
         ...
         ...
        }
    }
}

Signed-off-by: Heng Qian <qianheng@amazon.com>
Signed-off-by: Heng Qian <qianheng@amazon.com>
@qianheng-aws
Copy link
Collaborator Author

qianheng-aws commented Jul 24, 2025

Ignore q30 because of too many scripts push down, which will then trigger ResourceMonitor restriction.

This query will produce 89 scripts if push down enabled.

SELECT SUM(ResolutionWidth), SUM(ResolutionWidth + 1), ... SUM(ResolutionWidth + 89) FROM hits;

It should be addressed in a separate PR by merging multi-scripts or preventing such script push down.

As said in this comments #3859 (comment), filter script push down may trigger similar issue if filter conditions produce too many scripts

@penghuo
Copy link
Collaborator

penghuo commented Jul 24, 2025

Ignore q30 because of too many scripts push down, which will then trigger ResourceMonitor restriction.

Could u explain more about restriction?

I try a more complex one, it works

###
POST {{baseUrl}}/demo-index/_bulk
Content-Type: application/x-ndjson

{ "index": {} }
{ "region": "us-east", "sales": 100 }
{ "index": {} }
{ "region": "us-east", "sales": 200 }
{ "index": {} }
{ "region": "us-west", "sales": 300 }
{ "index": {} }
{ "region": "us-west", "sales": 400 }

###
POST {{baseUrl}}/_plugins/_ppl/_explain
Content-Type: application/x-ndjson

{
  "query": "source=demo-index | eval sales1=sales+1, sales2=sales+2, sales3=sales+3, sales4=sales+4, sales5=sales+5, sales6=sales+6, sales7=sales+7, sales8=sales+8, sales9=sales+9, sales10=sales+10, sales11=sales+11, sales12=sales+12, sales13=sales+13, sales14=sales+14, sales15=sales+15, sales16=sales+16, sales17=sales+17, sales18=sales+18, sales19=sales+19, sales20=sales+20, sales21=sales+21, sales22=sales+22, sales23=sales+23, sales24=sales+24, sales25=sales+25, sales26=sales+26, sales27=sales+27, sales28=sales+28, sales29=sales+29, sales30=sales+30, sales31=sales+31, sales32=sales+32, sales33=sales+33, sales34=sales+34, sales35=sales+35, sales36=sales+36, sales37=sales+37, sales38=sales+38, sales39=sales+39, sales40=sales+40, sales41=sales+41, sales42=sales+42, sales43=sales+43, sales44=sales+44, sales45=sales+45, sales46=sales+46, sales47=sales+47, sales48=sales+48, sales49=sales+49, sales50=sales+50, sales51=sales+51, sales52=sales+52, sales53=sales+53, sales54=sales+54, sales55=sales+55, sales56=sales+56, sales57=sales+57, sales58=sales+58, sales59=sales+59, sales60=sales+60, sales61=sales+61, sales62=sales+62, sales63=sales+63, sales64=sales+64, sales65=sales+65, sales66=sales+66, sales67=sales+67, sales68=sales+68, sales69=sales+69, sales70=sales+70, sales71=sales+71, sales72=sales+72, sales73=sales+73, sales74=sales+74, sales75=sales+75, sales76=sales+76, sales77=sales+77, sales78=sales+78, sales79=sales+79, sales80=sales+80, sales81=sales+81, sales82=sales+82, sales83=sales+83, sales84=sales+84, sales85=sales+85, sales86=sales+86, sales87=sales+87, sales88=sales+88, sales89=sales+89, sales90=sales+90, sales91=sales+91, sales92=sales+92, sales93=sales+93, sales94=sales+94, sales95=sales+95, sales96=sales+96, sales97=sales+97, sales98=sales+98, sales99=sales+99, sales100=sales+100, sales101=sales+101, sales102=sales+102, sales103=sales+103, sales104=sales+104, sales105=sales+105, sales106=sales+106, sales107=sales+107, sales108=sales+108, sales109=sales+109, sales110=sales+110, sales111=sales+111, sales112=sales+112, sales113=sales+113, sales114=sales+114, sales115=sales+115, sales116=sales+116, sales117=sales+117, sales118=sales+118, sales119=sales+119, sales120=sales+120, sales121=sales+121, sales122=sales+122, sales123=sales+123, sales124=sales+124, sales125=sales+125, sales126=sales+126, sales127=sales+127, sales128=sales+128, sales129=sales+129, sales130=sales+130, sales131=sales+131, sales132=sales+132, sales133=sales+133, sales134=sales+134, sales135=sales+135, sales136=sales+136, sales137=sales+137, sales138=sales+138, sales139=sales+139, sales140=sales+140, sales141=sales+141, sales142=sales+142, sales143=sales+143, sales144=sales+144, sales145=sales+145, sales146=sales+146, sales147=sales+147, sales148=sales+148, sales149=sales+149, sales150=sales+150, sales151=sales+151, sales152=sales+152, sales153=sales+153, sales154=sales+154, sales155=sales+155, sales156=sales+156, sales157=sales+157, sales158=sales+158, sales159=sales+159, sales160=sales+160, sales161=sales+161, sales162=sales+162, sales163=sales+163, sales164=sales+164, sales165=sales+165, sales166=sales+166, sales167=sales+167, sales168=sales+168, sales169=sales+169, sales170=sales+170, sales171=sales+171, sales172=sales+172, sales173=sales+173, sales174=sales+174, sales175=sales+175, sales176=sales+176, sales177=sales+177, sales178=sales+178, sales179=sales+179, sales180=sales+180, sales181=sales+181, sales182=sales+182, sales183=sales+183, sales184=sales+184, sales185=sales+185, sales186=sales+186, sales187=sales+187, sales188=sales+188, sales189=sales+189, sales190=sales+190, sales191=sales+191, sales192=sales+192, sales193=sales+193, sales194=sales+194, sales195=sales+195, sales196=sales+196, sales197=sales+197, sales198=sales+198, sales199=sales+199, sales200=sales+200, sales201=sales+201, sales202=sales+202, sales203=sales+203, sales204=sales+204, sales205=sales+205, sales206=sales+206, sales207=sales+207, sales208=sales+208, sales209=sales+209, sales210=sales+210, sales211=sales+211, sales212=sales+212, sales213=sales+213, sales214=sales+214, sales215=sales+215, sales216=sales+216, sales217=sales+217, sales218=sales+218, sales219=sales+219, sales220=sales+220, sales221=sales+221, sales222=sales+222, sales223=sales+223, sales224=sales+224, sales225=sales+225, sales226=sales+226, sales227=sales+227, sales228=sales+228, sales229=sales+229, sales230=sales+230, sales231=sales+231, sales232=sales+232, sales233=sales+233, sales234=sales+234, sales235=sales+235, sales236=sales+236, sales237=sales+237, sales238=sales+238, sales239=sales+239, sales240=sales+240, sales241=sales+241, sales242=sales+242, sales243=sales+243, sales244=sales+244, sales245=sales+245, sales246=sales+246, sales247=sales+247, sales248=sales+248, sales249=sales+249, sales250=sales+250, sales251=sales+251, sales252=sales+252, sales253=sales+253, sales254=sales+254, sales255=sales+255, sales256=sales+256, sales257=sales+257, sales258=sales+258, sales259=sales+259, sales260=sales+260, sales261=sales+261, sales262=sales+262, sales263=sales+263, sales264=sales+264, sales265=sales+265, sales266=sales+266, sales267=sales+267, sales268=sales+268, sales269=sales+269, sales270=sales+270, sales271=sales+271, sales272=sales+272, sales273=sales+273, sales274=sales+274, sales275=sales+275, sales276=sales+276, sales277=sales+277, sales278=sales+278, sales279=sales+279, sales280=sales+280, sales281=sales+281, sales282=sales+282, sales283=sales+283, sales284=sales+284, sales285=sales+285, sales286=sales+286, sales287=sales+287, sales288=sales+288, sales289=sales+289, sales290=sales+290, sales291=sales+291, sales292=sales+292, sales293=sales+293, sales294=sales+294, sales295=sales+295, sales296=sales+296, sales297=sales+297, sales298=sales+298, sales299=sales+299, sales300=sales+300, sales301=sales+301, sales302=sales+302, sales303=sales+303, sales304=sales+304, sales305=sales+305, sales306=sales+306, sales307=sales+307, sales308=sales+308, sales309=sales+309, sales310=sales+310, sales311=sales+311, sales312=sales+312, sales313=sales+313, sales314=sales+314, sales315=sales+315, sales316=sales+316, sales317=sales+317, sales318=sales+318, sales319=sales+319, sales320=sales+320, sales321=sales+321, sales322=sales+322, sales323=sales+323, sales324=sales+324, sales325=sales+325, sales326=sales+326, sales327=sales+327, sales328=sales+328, sales329=sales+329, sales330=sales+330, sales331=sales+331, sales332=sales+332, sales333=sales+333, sales334=sales+334, sales335=sales+335, sales336=sales+336, sales337=sales+337, sales338=sales+338, sales339=sales+339, sales340=sales+340, sales341=sales+341, sales342=sales+342, sales343=sales+343, sales344=sales+344, sales345=sales+345, sales346=sales+346, sales347=sales+347, sales348=sales+348, sales349=sales+349, sales350=sales+350, sales351=sales+351, sales352=sales+352, sales353=sales+353, sales354=sales+354, sales355=sales+355, sales356=sales+356, sales357=sales+357, sales358=sales+358, sales359=sales+359, sales360=sales+360, sales361=sales+361, sales362=sales+362, sales363=sales+363, sales364=sales+364, sales365=sales+365, sales366=sales+366, sales367=sales+367, sales368=sales+368, sales369=sales+369, sales370=sales+370, sales371=sales+371, sales372=sales+372, sales373=sales+373, sales374=sales+374, sales375=sales+375, sales376=sales+376, sales377=sales+377, sales378=sales+378, sales379=sales+379, sales380=sales+380, sales381=sales+381, sales382=sales+382, sales383=sales+383, sales384=sales+384, sales385=sales+385, sales386=sales+386, sales387=sales+387, sales388=sales+388, sales389=sales+389, sales390=sales+390, sales391=sales+391, sales392=sales+392, sales393=sales+393, sales394=sales+394, sales395=sales+395, sales396=sales+396, sales397=sales+397, sales398=sales+398, sales399=sales+399, sales400=sales+400, sales401=sales+401, sales402=sales+402, sales403=sales+403, sales404=sales+404, sales405=sales+405, sales406=sales+406, sales407=sales+407, sales408=sales+408, sales409=sales+409, sales410=sales+410, sales411=sales+411, sales412=sales+412, sales413=sales+413, sales414=sales+414, sales415=sales+415, sales416=sales+416, sales417=sales+417, sales418=sales+418, sales419=sales+419, sales420=sales+420, sales421=sales+421, sales422=sales+422, sales423=sales+423, sales424=sales+424, sales425=sales+425, sales426=sales+426, sales427=sales+427, sales428=sales+428, sales429=sales+429, sales430=sales+430, sales431=sales+431, sales432=sales+432, sales433=sales+433, sales434=sales+434, sales435=sales+435, sales436=sales+436, sales437=sales+437, sales438=sales+438, sales439=sales+439, sales440=sales+440, sales441=sales+441, sales442=sales+442, sales443=sales+443, sales444=sales+444, sales445=sales+445, sales446=sales+446, sales447=sales+447, sales448=sales+448, sales449=sales+449, sales450=sales+450, sales451=sales+451, sales452=sales+452, sales453=sales+453, sales454=sales+454, sales455=sales+455, sales456=sales+456, sales457=sales+457, sales458=sales+458, sales459=sales+459, sales460=sales+460, sales461=sales+461, sales462=sales+462, sales463=sales+463, sales464=sales+464, sales465=sales+465, sales466=sales+466, sales467=sales+467, sales468=sales+468, sales469=sales+469, sales470=sales+470, sales471=sales+471, sales472=sales+472, sales473=sales+473, sales474=sales+474, sales475=sales+475, sales476=sales+476, sales477=sales+477, sales478=sales+478, sales479=sales+479, sales480=sales+480, sales481=sales+481, sales482=sales+482, sales483=sales+483, sales484=sales+484, sales485=sales+485, sales486=sales+486, sales487=sales+487, sales488=sales+488, sales489=sales+489, sales490=sales+490, sales491=sales+491, sales492=sales+492, sales493=sales+493, sales494=sales+494, sales495=sales+495, sales496=sales+496, sales497=sales+497, sales498=sales+498, sales499=sales+499, sales500=sales+500, sales501=sales+501, sales502=sales+502, sales503=sales+503, sales504=sales+504, sales505=sales+505, sales506=sales+506, sales507=sales+507, sales508=sales+508, sales509=sales+509, sales510=sales+510, sales511=sales+511, sales512=sales+512, sales513=sales+513, sales514=sales+514, sales515=sales+515, sales516=sales+516, sales517=sales+517, sales518=sales+518, sales519=sales+519, sales520=sales+520, sales521=sales+521, sales522=sales+522, sales523=sales+523, sales524=sales+524, sales525=sales+525, sales526=sales+526, sales527=sales+527, sales528=sales+528, sales529=sales+529, sales530=sales+530, sales531=sales+531, sales532=sales+532, sales533=sales+533, sales534=sales+534, sales535=sales+535, sales536=sales+536, sales537=sales+537, sales538=sales+538, sales539=sales+539, sales540=sales+540, sales541=sales+541, sales542=sales+542, sales543=sales+543, sales544=sales+544, sales545=sales+545, sales546=sales+546, sales547=sales+547, sales548=sales+548, sales549=sales+549, sales550=sales+550, sales551=sales+551, sales552=sales+552, sales553=sales+553, sales554=sales+554, sales555=sales+555, sales556=sales+556, sales557=sales+557, sales558=sales+558, sales559=sales+559, sales560=sales+560, sales561=sales+561, sales562=sales+562, sales563=sales+563, sales564=sales+564, sales565=sales+565, sales566=sales+566, sales567=sales+567, sales568=sales+568, sales569=sales+569, sales570=sales+570, sales571=sales+571, sales572=sales+572, sales573=sales+573, sales574=sales+574, sales575=sales+575, sales576=sales+576, sales577=sales+577, sales578=sales+578, sales579=sales+579, sales580=sales+580, sales581=sales+581, sales582=sales+582, sales583=sales+583, sales584=sales+584, sales585=sales+585, sales586=sales+586, sales587=sales+587, sales588=sales+588, sales589=sales+589, sales590=sales+590, sales591=sales+591, sales592=sales+592, sales593=sales+593, sales594=sales+594, sales595=sales+595, sales596=sales+596, sales597=sales+597, sales598=sales+598, sales599=sales+599, sales600=sales+600, sales601=sales+601, sales602=sales+602, sales603=sales+603, sales604=sales+604, sales605=sales+605, sales606=sales+606, sales607=sales+607, sales608=sales+608, sales609=sales+609, sales610=sales+610, sales611=sales+611, sales612=sales+612, sales613=sales+613, sales614=sales+614, sales615=sales+615, sales616=sales+616, sales617=sales+617, sales618=sales+618, sales619=sales+619, sales620=sales+620, sales621=sales+621, sales622=sales+622, sales623=sales+623, sales624=sales+624, sales625=sales+625, sales626=sales+626, sales627=sales+627, sales628=sales+628, sales629=sales+629, sales630=sales+630, sales631=sales+631, sales632=sales+632, sales633=sales+633, sales634=sales+634, sales635=sales+635, sales636=sales+636, sales637=sales+637, sales638=sales+638, sales639=sales+639, sales640=sales+640, sales641=sales+641, sales642=sales+642, sales643=sales+643, sales644=sales+644, sales645=sales+645, sales646=sales+646, sales647=sales+647, sales648=sales+648, sales649=sales+649, sales650=sales+650, sales651=sales+651, sales652=sales+652, sales653=sales+653, sales654=sales+654, sales655=sales+655, sales656=sales+656, sales657=sales+657, sales658=sales+658, sales659=sales+659, sales660=sales+660, sales661=sales+661, sales662=sales+662, sales663=sales+663, sales664=sales+664, sales665=sales+665, sales666=sales+666, sales667=sales+667, sales668=sales+668, sales669=sales+669, sales670=sales+670, sales671=sales+671, sales672=sales+672, sales673=sales+673, sales674=sales+674, sales675=sales+675, sales676=sales+676, sales677=sales+677, sales678=sales+678, sales679=sales+679, sales680=sales+680, sales681=sales+681, sales682=sales+682, sales683=sales+683, sales684=sales+684, sales685=sales+685, sales686=sales+686, sales687=sales+687, sales688=sales+688, sales689=sales+689, sales690=sales+690, sales691=sales+691, sales692=sales+692, sales693=sales+693, sales694=sales+694, sales695=sales+695, sales696=sales+696, sales697=sales+697, sales698=sales+698, sales699=sales+699, sales700=sales+700, sales701=sales+701, sales702=sales+702, sales703=sales+703, sales704=sales+704, sales705=sales+705, sales706=sales+706, sales707=sales+707, sales708=sales+708, sales709=sales+709, sales710=sales+710, sales711=sales+711, sales712=sales+712, sales713=sales+713, sales714=sales+714, sales715=sales+715, sales716=sales+716, sales717=sales+717, sales718=sales+718, sales719=sales+719, sales720=sales+720, sales721=sales+721, sales722=sales+722, sales723=sales+723, sales724=sales+724, sales725=sales+725, sales726=sales+726, sales727=sales+727, sales728=sales+728, sales729=sales+729, sales730=sales+730, sales731=sales+731, sales732=sales+732, sales733=sales+733, sales734=sales+734, sales735=sales+735, sales736=sales+736, sales737=sales+737, sales738=sales+738, sales739=sales+739, sales740=sales+740, sales741=sales+741, sales742=sales+742, sales743=sales+743, sales744=sales+744, sales745=sales+745, sales746=sales+746, sales747=sales+747, sales748=sales+748, sales749=sales+749, sales750=sales+750, sales751=sales+751, sales752=sales+752, sales753=sales+753, sales754=sales+754, sales755=sales+755, sales756=sales+756, sales757=sales+757, sales758=sales+758, sales759=sales+759, sales760=sales+760, sales761=sales+761, sales762=sales+762, sales763=sales+763, sales764=sales+764, sales765=sales+765, sales766=sales+766, sales767=sales+767, sales768=sales+768, sales769=sales+769, sales770=sales+770, sales771=sales+771, sales772=sales+772, sales773=sales+773, sales774=sales+774, sales775=sales+775, sales776=sales+776, sales777=sales+777, sales778=sales+778, sales779=sales+779, sales780=sales+780, sales781=sales+781, sales782=sales+782, sales783=sales+783, sales784=sales+784, sales785=sales+785, sales786=sales+786, sales787=sales+787, sales788=sales+788, sales789=sales+789, sales790=sales+790, sales791=sales+791, sales792=sales+792, sales793=sales+793, sales794=sales+794, sales795=sales+795, sales796=sales+796, sales797=sales+797, sales798=sales+798, sales799=sales+799, sales800=sales+800, sales801=sales+801, sales802=sales+802, sales803=sales+803, sales804=sales+804, sales805=sales+805, sales806=sales+806, sales807=sales+807, sales808=sales+808, sales809=sales+809, sales810=sales+810, sales811=sales+811, sales812=sales+812, sales813=sales+813, sales814=sales+814, sales815=sales+815, sales816=sales+816, sales817=sales+817, sales818=sales+818, sales819=sales+819, sales820=sales+820, sales821=sales+821, sales822=sales+822, sales823=sales+823, sales824=sales+824, sales825=sales+825, sales826=sales+826, sales827=sales+827, sales828=sales+828, sales829=sales+829, sales830=sales+830, sales831=sales+831, sales832=sales+832, sales833=sales+833, sales834=sales+834, sales835=sales+835, sales836=sales+836, sales837=sales+837, sales838=sales+838, sales839=sales+839, sales840=sales+840, sales841=sales+841, sales842=sales+842, sales843=sales+843, sales844=sales+844, sales845=sales+845, sales846=sales+846, sales847=sales+847, sales848=sales+848, sales849=sales+849, sales850=sales+850, sales851=sales+851, sales852=sales+852, sales853=sales+853, sales854=sales+854, sales855=sales+855, sales856=sales+856, sales857=sales+857, sales858=sales+858, sales859=sales+859, sales860=sales+860, sales861=sales+861, sales862=sales+862, sales863=sales+863, sales864=sales+864, sales865=sales+865, sales866=sales+866, sales867=sales+867, sales868=sales+868, sales869=sales+869, sales870=sales+870, sales871=sales+871, sales872=sales+872, sales873=sales+873, sales874=sales+874, sales875=sales+875, sales876=sales+876, sales877=sales+877, sales878=sales+878, sales879=sales+879, sales880=sales+880, sales881=sales+881, sales882=sales+882, sales883=sales+883, sales884=sales+884, sales885=sales+885, sales886=sales+886, sales887=sales+887, sales888=sales+888, sales889=sales+889, sales890=sales+890, sales891=sales+891, sales892=sales+892, sales893=sales+893, sales894=sales+894, sales895=sales+895, sales896=sales+896, sales897=sales+897, sales898=sales+898, sales899=sales+899, sales900=sales+900, sales901=sales+901, sales902=sales+902, sales903=sales+903, sales904=sales+904, sales905=sales+905, sales906=sales+906, sales907=sales+907, sales908=sales+908, sales909=sales+909, sales910=sales+910, sales911=sales+911, sales912=sales+912, sales913=sales+913, sales914=sales+914, sales915=sales+915, sales916=sales+916, sales917=sales+917, sales918=sales+918, sales919=sales+919, sales920=sales+920, sales921=sales+921, sales922=sales+922, sales923=sales+923, sales924=sales+924, sales925=sales+925, sales926=sales+926, sales927=sales+927, sales928=sales+928, sales929=sales+929, sales930=sales+930, sales931=sales+931, sales932=sales+932, sales933=sales+933, sales934=sales+934, sales935=sales+935, sales936=sales+936, sales937=sales+937, sales938=sales+938, sales939=sales+939, sales940=sales+940, sales941=sales+941, sales942=sales+942, sales943=sales+943, sales944=sales+944, sales945=sales+945, sales946=sales+946, sales947=sales+947, sales948=sales+948, sales949=sales+949, sales950=sales+950, sales951=sales+951, sales952=sales+952, sales953=sales+953, sales954=sales+954, sales955=sales+955, sales956=sales+956, sales957=sales+957, sales958=sales+958, sales959=sales+959, sales960=sales+960, sales961=sales+961, sales962=sales+962, sales963=sales+963, sales964=sales+964, sales965=sales+965, sales966=sales+966, sales967=sales+967, sales968=sales+968, sales969=sales+969, sales970=sales+970, sales971=sales+971, sales972=sales+972, sales973=sales+973, sales974=sales+974, sales975=sales+975, sales976=sales+976, sales977=sales+977, sales978=sales+978, sales979=sales+979, sales980=sales+980, sales981=sales+981, sales982=sales+982, sales983=sales+983, sales984=sales+984, sales985=sales+985, sales986=sales+986, sales987=sales+987, sales988=sales+988, sales989=sales+989, sales990=sales+990, sales991=sales+991, sales992=sales+992, sales993=sales+993, sales994=sales+994, sales995=sales+995, sales996=sales+996, sales997=sales+997, sales998=sales+998, sales999=sales+999, sales1000=sales+1000 | stats sum(sales) as sum0, sum(sales1) as sum1, sum(sales2) as sum2, sum(sales3) as sum3, sum(sales4) as sum4, sum(sales5) as sum5, sum(sales6) as sum6, sum(sales7) as sum7, sum(sales8) as sum8, sum(sales9) as sum9, sum(sales10) as sum10, sum(sales11) as sum11, sum(sales12) as sum12, sum(sales13) as sum13, sum(sales14) as sum14, sum(sales15) as sum15, sum(sales16) as sum16, sum(sales17) as sum17, sum(sales18) as sum18, sum(sales19) as sum19, sum(sales20) as sum20, sum(sales21) as sum21, sum(sales22) as sum22, sum(sales23) as sum23, sum(sales24) as sum24, sum(sales25) as sum25, sum(sales26) as sum26, sum(sales27) as sum27, sum(sales28) as sum28, sum(sales29) as sum29, sum(sales30) as sum30, sum(sales31) as sum31, sum(sales32) as sum32, sum(sales33) as sum33, sum(sales34) as sum34, sum(sales35) as sum35, sum(sales36) as sum36, sum(sales37) as sum37, sum(sales38) as sum38, sum(sales39) as sum39, sum(sales40) as sum40, sum(sales41) as sum41, sum(sales42) as sum42, sum(sales43) as sum43, sum(sales44) as sum44, sum(sales45) as sum45, sum(sales46) as sum46, sum(sales47) as sum47, sum(sales48) as sum48, sum(sales49) as sum49, sum(sales50) as sum50, sum(sales51) as sum51, sum(sales52) as sum52, sum(sales53) as sum53, sum(sales54) as sum54, sum(sales55) as sum55, sum(sales56) as sum56, sum(sales57) as sum57, sum(sales58) as sum58, sum(sales59) as sum59, sum(sales60) as sum60, sum(sales61) as sum61, sum(sales62) as sum62, sum(sales63) as sum63, sum(sales64) as sum64, sum(sales65) as sum65, sum(sales66) as sum66, sum(sales67) as sum67, sum(sales68) as sum68, sum(sales69) as sum69, sum(sales70) as sum70, sum(sales71) as sum71, sum(sales72) as sum72, sum(sales73) as sum73, sum(sales74) as sum74, sum(sales75) as sum75, sum(sales76) as sum76, sum(sales77) as sum77, sum(sales78) as sum78, sum(sales79) as sum79, sum(sales80) as sum80, sum(sales81) as sum81, sum(sales82) as sum82, sum(sales83) as sum83, sum(sales84) as sum84, sum(sales85) as sum85, sum(sales86) as sum86, sum(sales87) as sum87, sum(sales88) as sum88, sum(sales89) as sum89, sum(sales90) as sum90, sum(sales91) as sum91, sum(sales92) as sum92, sum(sales93) as sum93, sum(sales94) as sum94, sum(sales95) as sum95, sum(sales96) as sum96, sum(sales97) as sum97, sum(sales98) as sum98, sum(sales99) as sum99, sum(sales100) as sum100, sum(sales101) as sum101, sum(sales102) as sum102, sum(sales103) as sum103, sum(sales104) as sum104, sum(sales105) as sum105, sum(sales106) as sum106, sum(sales107) as sum107, sum(sales108) as sum108, sum(sales109) as sum109, sum(sales110) as sum110, sum(sales111) as sum111, sum(sales112) as sum112, sum(sales113) as sum113, sum(sales114) as sum114, sum(sales115) as sum115, sum(sales116) as sum116, sum(sales117) as sum117, sum(sales118) as sum118, sum(sales119) as sum119, sum(sales120) as sum120, sum(sales121) as sum121, sum(sales122) as sum122, sum(sales123) as sum123, sum(sales124) as sum124, sum(sales125) as sum125, sum(sales126) as sum126, sum(sales127) as sum127, sum(sales128) as sum128, sum(sales129) as sum129, sum(sales130) as sum130, sum(sales131) as sum131, sum(sales132) as sum132, sum(sales133) as sum133, sum(sales134) as sum134, sum(sales135) as sum135, sum(sales136) as sum136, sum(sales137) as sum137, sum(sales138) as sum138, sum(sales139) as sum139, sum(sales140) as sum140, sum(sales141) as sum141, sum(sales142) as sum142, sum(sales143) as sum143, sum(sales144) as sum144, sum(sales145) as sum145, sum(sales146) as sum146, sum(sales147) as sum147, sum(sales148) as sum148, sum(sales149) as sum149, sum(sales150) as sum150, sum(sales151) as sum151, sum(sales152) as sum152, sum(sales153) as sum153, sum(sales154) as sum154, sum(sales155) as sum155, sum(sales156) as sum156, sum(sales157) as sum157, sum(sales158) as sum158, sum(sales159) as sum159, sum(sales160) as sum160, sum(sales161) as sum161, sum(sales162) as sum162, sum(sales163) as sum163, sum(sales164) as sum164, sum(sales165) as sum165, sum(sales166) as sum166, sum(sales167) as sum167, sum(sales168) as sum168, sum(sales169) as sum169, sum(sales170) as sum170, sum(sales171) as sum171, sum(sales172) as sum172, sum(sales173) as sum173, sum(sales174) as sum174, sum(sales175) as sum175, sum(sales176) as sum176, sum(sales177) as sum177, sum(sales178) as sum178, sum(sales179) as sum179, sum(sales180) as sum180, sum(sales181) as sum181, sum(sales182) as sum182, sum(sales183) as sum183, sum(sales184) as sum184, sum(sales185) as sum185, sum(sales186) as sum186, sum(sales187) as sum187, sum(sales188) as sum188, sum(sales189) as sum189, sum(sales190) as sum190, sum(sales191) as sum191, sum(sales192) as sum192, sum(sales193) as sum193, sum(sales194) as sum194, sum(sales195) as sum195, sum(sales196) as sum196, sum(sales197) as sum197, sum(sales198) as sum198, sum(sales199) as sum199, sum(sales200) as sum200, sum(sales201) as sum201, sum(sales202) as sum202, sum(sales203) as sum203, sum(sales204) as sum204, sum(sales205) as sum205, sum(sales206) as sum206, sum(sales207) as sum207, sum(sales208) as sum208, sum(sales209) as sum209, sum(sales210) as sum210, sum(sales211) as sum211, sum(sales212) as sum212, sum(sales213) as sum213, sum(sales214) as sum214, sum(sales215) as sum215, sum(sales216) as sum216, sum(sales217) as sum217, sum(sales218) as sum218, sum(sales219) as sum219, sum(sales220) as sum220, sum(sales221) as sum221, sum(sales222) as sum222, sum(sales223) as sum223, sum(sales224) as sum224, sum(sales225) as sum225, sum(sales226) as sum226, sum(sales227) as sum227, sum(sales228) as sum228, sum(sales229) as sum229, sum(sales230) as sum230, sum(sales231) as sum231, sum(sales232) as sum232, sum(sales233) as sum233, sum(sales234) as sum234, sum(sales235) as sum235, sum(sales236) as sum236, sum(sales237) as sum237, sum(sales238) as sum238, sum(sales239) as sum239, sum(sales240) as sum240, sum(sales241) as sum241, sum(sales242) as sum242, sum(sales243) as sum243, sum(sales244) as sum244, sum(sales245) as sum245, sum(sales246) as sum246, sum(sales247) as sum247, sum(sales248) as sum248, sum(sales249) as sum249, sum(sales250) as sum250, sum(sales251) as sum251, sum(sales252) as sum252, sum(sales253) as sum253, sum(sales254) as sum254, sum(sales255) as sum255, sum(sales256) as sum256, sum(sales257) as sum257, sum(sales258) as sum258, sum(sales259) as sum259, sum(sales260) as sum260, sum(sales261) as sum261, sum(sales262) as sum262, sum(sales263) as sum263, sum(sales264) as sum264, sum(sales265) as sum265, sum(sales266) as sum266, sum(sales267) as sum267, sum(sales268) as sum268, sum(sales269) as sum269, sum(sales270) as sum270, sum(sales271) as sum271, sum(sales272) as sum272, sum(sales273) as sum273, sum(sales274) as sum274, sum(sales275) as sum275, sum(sales276) as sum276, sum(sales277) as sum277, sum(sales278) as sum278, sum(sales279) as sum279, sum(sales280) as sum280, sum(sales281) as sum281, sum(sales282) as sum282, sum(sales283) as sum283, sum(sales284) as sum284, sum(sales285) as sum285, sum(sales286) as sum286, sum(sales287) as sum287, sum(sales288) as sum288, sum(sales289) as sum289, sum(sales290) as sum290, sum(sales291) as sum291, sum(sales292) as sum292, sum(sales293) as sum293, sum(sales294) as sum294, sum(sales295) as sum295, sum(sales296) as sum296, sum(sales297) as sum297, sum(sales298) as sum298, sum(sales299) as sum299, sum(sales300) as sum300, sum(sales301) as sum301, sum(sales302) as sum302, sum(sales303) as sum303, sum(sales304) as sum304, sum(sales305) as sum305, sum(sales306) as sum306, sum(sales307) as sum307, sum(sales308) as sum308, sum(sales309) as sum309, sum(sales310) as sum310, sum(sales311) as sum311, sum(sales312) as sum312, sum(sales313) as sum313, sum(sales314) as sum314, sum(sales315) as sum315, sum(sales316) as sum316, sum(sales317) as sum317, sum(sales318) as sum318, sum(sales319) as sum319, sum(sales320) as sum320, sum(sales321) as sum321, sum(sales322) as sum322, sum(sales323) as sum323, sum(sales324) as sum324, sum(sales325) as sum325, sum(sales326) as sum326, sum(sales327) as sum327, sum(sales328) as sum328, sum(sales329) as sum329, sum(sales330) as sum330, sum(sales331) as sum331, sum(sales332) as sum332, sum(sales333) as sum333, sum(sales334) as sum334, sum(sales335) as sum335, sum(sales336) as sum336, sum(sales337) as sum337, sum(sales338) as sum338, sum(sales339) as sum339, sum(sales340) as sum340, sum(sales341) as sum341, sum(sales342) as sum342, sum(sales343) as sum343, sum(sales344) as sum344, sum(sales345) as sum345, sum(sales346) as sum346, sum(sales347) as sum347, sum(sales348) as sum348, sum(sales349) as sum349, sum(sales350) as sum350, sum(sales351) as sum351, sum(sales352) as sum352, sum(sales353) as sum353, sum(sales354) as sum354, sum(sales355) as sum355, sum(sales356) as sum356, sum(sales357) as sum357, sum(sales358) as sum358, sum(sales359) as sum359, sum(sales360) as sum360, sum(sales361) as sum361, sum(sales362) as sum362, sum(sales363) as sum363, sum(sales364) as sum364, sum(sales365) as sum365, sum(sales366) as sum366, sum(sales367) as sum367, sum(sales368) as sum368, sum(sales369) as sum369, sum(sales370) as sum370, sum(sales371) as sum371, sum(sales372) as sum372, sum(sales373) as sum373, sum(sales374) as sum374, sum(sales375) as sum375, sum(sales376) as sum376, sum(sales377) as sum377, sum(sales378) as sum378, sum(sales379) as sum379, sum(sales380) as sum380, sum(sales381) as sum381, sum(sales382) as sum382, sum(sales383) as sum383, sum(sales384) as sum384, sum(sales385) as sum385, sum(sales386) as sum386, sum(sales387) as sum387, sum(sales388) as sum388, sum(sales389) as sum389, sum(sales390) as sum390, sum(sales391) as sum391, sum(sales392) as sum392, sum(sales393) as sum393, sum(sales394) as sum394, sum(sales395) as sum395, sum(sales396) as sum396, sum(sales397) as sum397, sum(sales398) as sum398, sum(sales399) as sum399, sum(sales400) as sum400, sum(sales401) as sum401, sum(sales402) as sum402, sum(sales403) as sum403, sum(sales404) as sum404, sum(sales405) as sum405, sum(sales406) as sum406, sum(sales407) as sum407, sum(sales408) as sum408, sum(sales409) as sum409, sum(sales410) as sum410, sum(sales411) as sum411, sum(sales412) as sum412, sum(sales413) as sum413, sum(sales414) as sum414, sum(sales415) as sum415, sum(sales416) as sum416, sum(sales417) as sum417, sum(sales418) as sum418, sum(sales419) as sum419, sum(sales420) as sum420, sum(sales421) as sum421, sum(sales422) as sum422, sum(sales423) as sum423, sum(sales424) as sum424, sum(sales425) as sum425, sum(sales426) as sum426, sum(sales427) as sum427, sum(sales428) as sum428, sum(sales429) as sum429, sum(sales430) as sum430, sum(sales431) as sum431, sum(sales432) as sum432, sum(sales433) as sum433, sum(sales434) as sum434, sum(sales435) as sum435, sum(sales436) as sum436, sum(sales437) as sum437, sum(sales438) as sum438, sum(sales439) as sum439, sum(sales440) as sum440, sum(sales441) as sum441, sum(sales442) as sum442, sum(sales443) as sum443, sum(sales444) as sum444, sum(sales445) as sum445, sum(sales446) as sum446, sum(sales447) as sum447, sum(sales448) as sum448, sum(sales449) as sum449, sum(sales450) as sum450, sum(sales451) as sum451, sum(sales452) as sum452, sum(sales453) as sum453, sum(sales454) as sum454, sum(sales455) as sum455, sum(sales456) as sum456, sum(sales457) as sum457, sum(sales458) as sum458, sum(sales459) as sum459, sum(sales460) as sum460, sum(sales461) as sum461, sum(sales462) as sum462, sum(sales463) as sum463, sum(sales464) as sum464, sum(sales465) as sum465, sum(sales466) as sum466, sum(sales467) as sum467, sum(sales468) as sum468, sum(sales469) as sum469, sum(sales470) as sum470, sum(sales471) as sum471, sum(sales472) as sum472, sum(sales473) as sum473, sum(sales474) as sum474, sum(sales475) as sum475, sum(sales476) as sum476, sum(sales477) as sum477, sum(sales478) as sum478, sum(sales479) as sum479, sum(sales480) as sum480, sum(sales481) as sum481, sum(sales482) as sum482, sum(sales483) as sum483, sum(sales484) as sum484, sum(sales485) as sum485, sum(sales486) as sum486, sum(sales487) as sum487, sum(sales488) as sum488, sum(sales489) as sum489, sum(sales490) as sum490, sum(sales491) as sum491, sum(sales492) as sum492, sum(sales493) as sum493, sum(sales494) as sum494, sum(sales495) as sum495, sum(sales496) as sum496, sum(sales497) as sum497, sum(sales498) as sum498, sum(sales499) as sum499, sum(sales500) as sum500, sum(sales501) as sum501, sum(sales502) as sum502, sum(sales503) as sum503, sum(sales504) as sum504, sum(sales505) as sum505, sum(sales506) as sum506, sum(sales507) as sum507, sum(sales508) as sum508, sum(sales509) as sum509, sum(sales510) as sum510, sum(sales511) as sum511, sum(sales512) as sum512, sum(sales513) as sum513, sum(sales514) as sum514, sum(sales515) as sum515, sum(sales516) as sum516, sum(sales517) as sum517, sum(sales518) as sum518, sum(sales519) as sum519, sum(sales520) as sum520, sum(sales521) as sum521, sum(sales522) as sum522, sum(sales523) as sum523, sum(sales524) as sum524, sum(sales525) as sum525, sum(sales526) as sum526, sum(sales527) as sum527, sum(sales528) as sum528, sum(sales529) as sum529, sum(sales530) as sum530, sum(sales531) as sum531, sum(sales532) as sum532, sum(sales533) as sum533, sum(sales534) as sum534, sum(sales535) as sum535, sum(sales536) as sum536, sum(sales537) as sum537, sum(sales538) as sum538, sum(sales539) as sum539, sum(sales540) as sum540, sum(sales541) as sum541, sum(sales542) as sum542, sum(sales543) as sum543, sum(sales544) as sum544, sum(sales545) as sum545, sum(sales546) as sum546, sum(sales547) as sum547, sum(sales548) as sum548, sum(sales549) as sum549, sum(sales550) as sum550, sum(sales551) as sum551, sum(sales552) as sum552, sum(sales553) as sum553, sum(sales554) as sum554, sum(sales555) as sum555, sum(sales556) as sum556, sum(sales557) as sum557, sum(sales558) as sum558, sum(sales559) as sum559, sum(sales560) as sum560, sum(sales561) as sum561, sum(sales562) as sum562, sum(sales563) as sum563, sum(sales564) as sum564, sum(sales565) as sum565, sum(sales566) as sum566, sum(sales567) as sum567, sum(sales568) as sum568, sum(sales569) as sum569, sum(sales570) as sum570, sum(sales571) as sum571, sum(sales572) as sum572, sum(sales573) as sum573, sum(sales574) as sum574, sum(sales575) as sum575, sum(sales576) as sum576, sum(sales577) as sum577, sum(sales578) as sum578, sum(sales579) as sum579, sum(sales580) as sum580, sum(sales581) as sum581, sum(sales582) as sum582, sum(sales583) as sum583, sum(sales584) as sum584, sum(sales585) as sum585, sum(sales586) as sum586, sum(sales587) as sum587, sum(sales588) as sum588, sum(sales589) as sum589, sum(sales590) as sum590, sum(sales591) as sum591, sum(sales592) as sum592, sum(sales593) as sum593, sum(sales594) as sum594, sum(sales595) as sum595, sum(sales596) as sum596, sum(sales597) as sum597, sum(sales598) as sum598, sum(sales599) as sum599, sum(sales600) as sum600, sum(sales601) as sum601, sum(sales602) as sum602, sum(sales603) as sum603, sum(sales604) as sum604, sum(sales605) as sum605, sum(sales606) as sum606, sum(sales607) as sum607, sum(sales608) as sum608, sum(sales609) as sum609, sum(sales610) as sum610, sum(sales611) as sum611, sum(sales612) as sum612, sum(sales613) as sum613, sum(sales614) as sum614, sum(sales615) as sum615, sum(sales616) as sum616, sum(sales617) as sum617, sum(sales618) as sum618, sum(sales619) as sum619, sum(sales620) as sum620, sum(sales621) as sum621, sum(sales622) as sum622, sum(sales623) as sum623, sum(sales624) as sum624, sum(sales625) as sum625, sum(sales626) as sum626, sum(sales627) as sum627, sum(sales628) as sum628, sum(sales629) as sum629, sum(sales630) as sum630, sum(sales631) as sum631, sum(sales632) as sum632, sum(sales633) as sum633, sum(sales634) as sum634, sum(sales635) as sum635, sum(sales636) as sum636, sum(sales637) as sum637, sum(sales638) as sum638, sum(sales639) as sum639, sum(sales640) as sum640, sum(sales641) as sum641, sum(sales642) as sum642, sum(sales643) as sum643, sum(sales644) as sum644, sum(sales645) as sum645, sum(sales646) as sum646, sum(sales647) as sum647, sum(sales648) as sum648, sum(sales649) as sum649, sum(sales650) as sum650, sum(sales651) as sum651, sum(sales652) as sum652, sum(sales653) as sum653, sum(sales654) as sum654, sum(sales655) as sum655, sum(sales656) as sum656, sum(sales657) as sum657, sum(sales658) as sum658, sum(sales659) as sum659, sum(sales660) as sum660, sum(sales661) as sum661, sum(sales662) as sum662, sum(sales663) as sum663, sum(sales664) as sum664, sum(sales665) as sum665, sum(sales666) as sum666, sum(sales667) as sum667, sum(sales668) as sum668, sum(sales669) as sum669, sum(sales670) as sum670, sum(sales671) as sum671, sum(sales672) as sum672, sum(sales673) as sum673, sum(sales674) as sum674, sum(sales675) as sum675, sum(sales676) as sum676, sum(sales677) as sum677, sum(sales678) as sum678, sum(sales679) as sum679, sum(sales680) as sum680, sum(sales681) as sum681, sum(sales682) as sum682, sum(sales683) as sum683, sum(sales684) as sum684, sum(sales685) as sum685, sum(sales686) as sum686, sum(sales687) as sum687, sum(sales688) as sum688, sum(sales689) as sum689, sum(sales690) as sum690, sum(sales691) as sum691, sum(sales692) as sum692, sum(sales693) as sum693, sum(sales694) as sum694, sum(sales695) as sum695, sum(sales696) as sum696, sum(sales697) as sum697, sum(sales698) as sum698, sum(sales699) as sum699, sum(sales700) as sum700, sum(sales701) as sum701, sum(sales702) as sum702, sum(sales703) as sum703, sum(sales704) as sum704, sum(sales705) as sum705, sum(sales706) as sum706, sum(sales707) as sum707, sum(sales708) as sum708, sum(sales709) as sum709, sum(sales710) as sum710, sum(sales711) as sum711, sum(sales712) as sum712, sum(sales713) as sum713, sum(sales714) as sum714, sum(sales715) as sum715, sum(sales716) as sum716, sum(sales717) as sum717, sum(sales718) as sum718, sum(sales719) as sum719, sum(sales720) as sum720, sum(sales721) as sum721, sum(sales722) as sum722, sum(sales723) as sum723, sum(sales724) as sum724, sum(sales725) as sum725, sum(sales726) as sum726, sum(sales727) as sum727, sum(sales728) as sum728, sum(sales729) as sum729, sum(sales730) as sum730, sum(sales731) as sum731, sum(sales732) as sum732, sum(sales733) as sum733, sum(sales734) as sum734, sum(sales735) as sum735, sum(sales736) as sum736, sum(sales737) as sum737, sum(sales738) as sum738, sum(sales739) as sum739, sum(sales740) as sum740, sum(sales741) as sum741, sum(sales742) as sum742, sum(sales743) as sum743, sum(sales744) as sum744, sum(sales745) as sum745, sum(sales746) as sum746, sum(sales747) as sum747, sum(sales748) as sum748, sum(sales749) as sum749, sum(sales750) as sum750, sum(sales751) as sum751, sum(sales752) as sum752, sum(sales753) as sum753, sum(sales754) as sum754, sum(sales755) as sum755, sum(sales756) as sum756, sum(sales757) as sum757, sum(sales758) as sum758, sum(sales759) as sum759, sum(sales760) as sum760, sum(sales761) as sum761, sum(sales762) as sum762, sum(sales763) as sum763, sum(sales764) as sum764, sum(sales765) as sum765, sum(sales766) as sum766, sum(sales767) as sum767, sum(sales768) as sum768, sum(sales769) as sum769, sum(sales770) as sum770, sum(sales771) as sum771, sum(sales772) as sum772, sum(sales773) as sum773, sum(sales774) as sum774, sum(sales775) as sum775, sum(sales776) as sum776, sum(sales777) as sum777, sum(sales778) as sum778, sum(sales779) as sum779, sum(sales780) as sum780, sum(sales781) as sum781, sum(sales782) as sum782, sum(sales783) as sum783, sum(sales784) as sum784, sum(sales785) as sum785, sum(sales786) as sum786, sum(sales787) as sum787, sum(sales788) as sum788, sum(sales789) as sum789, sum(sales790) as sum790, sum(sales791) as sum791, sum(sales792) as sum792, sum(sales793) as sum793, sum(sales794) as sum794, sum(sales795) as sum795, sum(sales796) as sum796, sum(sales797) as sum797, sum(sales798) as sum798, sum(sales799) as sum799, sum(sales800) as sum800, sum(sales801) as sum801, sum(sales802) as sum802, sum(sales803) as sum803, sum(sales804) as sum804, sum(sales805) as sum805, sum(sales806) as sum806, sum(sales807) as sum807, sum(sales808) as sum808, sum(sales809) as sum809, sum(sales810) as sum810, sum(sales811) as sum811, sum(sales812) as sum812, sum(sales813) as sum813, sum(sales814) as sum814, sum(sales815) as sum815, sum(sales816) as sum816, sum(sales817) as sum817, sum(sales818) as sum818, sum(sales819) as sum819, sum(sales820) as sum820, sum(sales821) as sum821, sum(sales822) as sum822, sum(sales823) as sum823, sum(sales824) as sum824, sum(sales825) as sum825, sum(sales826) as sum826, sum(sales827) as sum827, sum(sales828) as sum828, sum(sales829) as sum829, sum(sales830) as sum830, sum(sales831) as sum831, sum(sales832) as sum832, sum(sales833) as sum833, sum(sales834) as sum834, sum(sales835) as sum835, sum(sales836) as sum836, sum(sales837) as sum837, sum(sales838) as sum838, sum(sales839) as sum839, sum(sales840) as sum840, sum(sales841) as sum841, sum(sales842) as sum842, sum(sales843) as sum843, sum(sales844) as sum844, sum(sales845) as sum845, sum(sales846) as sum846, sum(sales847) as sum847, sum(sales848) as sum848, sum(sales849) as sum849, sum(sales850) as sum850, sum(sales851) as sum851, sum(sales852) as sum852, sum(sales853) as sum853, sum(sales854) as sum854, sum(sales855) as sum855, sum(sales856) as sum856, sum(sales857) as sum857, sum(sales858) as sum858, sum(sales859) as sum859, sum(sales860) as sum860, sum(sales861) as sum861, sum(sales862) as sum862, sum(sales863) as sum863, sum(sales864) as sum864, sum(sales865) as sum865, sum(sales866) as sum866, sum(sales867) as sum867, sum(sales868) as sum868, sum(sales869) as sum869, sum(sales870) as sum870, sum(sales871) as sum871, sum(sales872) as sum872, sum(sales873) as sum873, sum(sales874) as sum874, sum(sales875) as sum875, sum(sales876) as sum876, sum(sales877) as sum877, sum(sales878) as sum878, sum(sales879) as sum879, sum(sales880) as sum880, sum(sales881) as sum881, sum(sales882) as sum882, sum(sales883) as sum883, sum(sales884) as sum884, sum(sales885) as sum885, sum(sales886) as sum886, sum(sales887) as sum887, sum(sales888) as sum888, sum(sales889) as sum889, sum(sales890) as sum890, sum(sales891) as sum891, sum(sales892) as sum892, sum(sales893) as sum893, sum(sales894) as sum894, sum(sales895) as sum895, sum(sales896) as sum896, sum(sales897) as sum897, sum(sales898) as sum898, sum(sales899) as sum899, sum(sales900) as sum900, sum(sales901) as sum901, sum(sales902) as sum902, sum(sales903) as sum903, sum(sales904) as sum904, sum(sales905) as sum905, sum(sales906) as sum906, sum(sales907) as sum907, sum(sales908) as sum908, sum(sales909) as sum909, sum(sales910) as sum910, sum(sales911) as sum911, sum(sales912) as sum912, sum(sales913) as sum913, sum(sales914) as sum914, sum(sales915) as sum915, sum(sales916) as sum916, sum(sales917) as sum917, sum(sales918) as sum918, sum(sales919) as sum919, sum(sales920) as sum920, sum(sales921) as sum921, sum(sales922) as sum922, sum(sales923) as sum923, sum(sales924) as sum924, sum(sales925) as sum925, sum(sales926) as sum926, sum(sales927) as sum927, sum(sales928) as sum928, sum(sales929) as sum929, sum(sales930) as sum930, sum(sales931) as sum931, sum(sales932) as sum932, sum(sales933) as sum933, sum(sales934) as sum934, sum(sales935) as sum935, sum(sales936) as sum936, sum(sales937) as sum937, sum(sales938) as sum938, sum(sales939) as sum939, sum(sales940) as sum940, sum(sales941) as sum941, sum(sales942) as sum942, sum(sales943) as sum943, sum(sales944) as sum944, sum(sales945) as sum945, sum(sales946) as sum946, sum(sales947) as sum947, sum(sales948) as sum948, sum(sales949) as sum949, sum(sales950) as sum950, sum(sales951) as sum951, sum(sales952) as sum952, sum(sales953) as sum953, sum(sales954) as sum954, sum(sales955) as sum955, sum(sales956) as sum956, sum(sales957) as sum957, sum(sales958) as sum958, sum(sales959) as sum959, sum(sales960) as sum960, sum(sales961) as sum961, sum(sales962) as sum962, sum(sales963) as sum963, sum(sales964) as sum964, sum(sales965) as sum965, sum(sales966) as sum966, sum(sales967) as sum967, sum(sales968) as sum968, sum(sales969) as sum969, sum(sales970) as sum970, sum(sales971) as sum971, sum(sales972) as sum972, sum(sales973) as sum973, sum(sales974) as sum974, sum(sales975) as sum975, sum(sales976) as sum976, sum(sales977) as sum977, sum(sales978) as sum978, sum(sales979) as sum979, sum(sales980) as sum980, sum(sales981) as sum981, sum(sales982) as sum982, sum(sales983) as sum983, sum(sales984) as sum984, sum(sales985) as sum985, sum(sales986) as sum986, sum(sales987) as sum987, sum(sales988) as sum988, sum(sales989) as sum989, sum(sales990) as sum990, sum(sales991) as sum991, sum(sales992) as sum992, sum(sales993) as sum993, sum(sales994) as sum994, sum(sales995) as sum995, sum(sales996) as sum996, sum(sales997) as sum997, sum(sales998) as sum998, sum(sales999) as sum999, sum(sales1000) as sum1000"
}


/** Ignore queries that are not supported by Calcite. */
/**
* Ignore queries that are not supported by Calcite. Ignore q33 because of too much script push
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

q33 -> q30

@qianheng-aws
Copy link
Collaborator Author

qianheng-aws commented Jul 25, 2025

I try a more complex one, it works

Single q30 query can run successfully as well on my local test. It won't always trigger that exception.

As seen in the CI before ignoring q30, https://github.com/opensearch-project/sql/actions/runs/16497630130/job/46647212530, some tests can pass while others failed with exception.

PPLClickBenchIT > test FAILED
    org.opensearch.client.ResponseException: method [POST], host [http://127.0.0.1:61272/], URI [/_plugins/_ppl], status line [HTTP/1.1 500 Internal Server Error]
    {
      "error": {
        "reason": "There was internal problem at backend",
        "details": "insufficient resources to run the query, quit.",
        "type": "IllegalStateException"
      },
      "status": 500
    }

I think it depends on the tension of the node on the specific point, maybe impacted by JVM GC.

Signed-off-by: Heng Qian <qianheng@amazon.com>
@penghuo
Copy link
Collaborator

penghuo commented Jul 25, 2025

I try a more complex one, it works

Single q30 query can run successfully as well on my local test. It won't always trigger that exception.

As seen in the CI before ignoring q30, https://github.com/opensearch-project/sql/actions/runs/16497630130/job/46647212530, some tests can pass while others failed with exception.

PPLClickBenchIT > test FAILED
    org.opensearch.client.ResponseException: method [POST], host [http://127.0.0.1:61272/], URI [/_plugins/_ppl], status line [HTTP/1.1 500 Internal Server Error]
    {
      "error": {
        "reason": "There was internal problem at backend",
        "details": "insufficient resources to run the query, quit.",
        "type": "IllegalStateException"
      },
      "status": 500
    }

I think it depends on the tension of the node on the specific point, maybe impacted by JVM GC.

Script push down will trigger exception. We can track the solution in seperate PR.

    {
      "error": {
        "reason": "Error occurred in OpenSearch engine: all shards failed",
        "details": "Shard[0]: CircuitBreakingException[[script] Too many dynamic script compilations within, max: [75/5m]; please use indexed, or scripts with parameters instead; this limit can be changed by the [script.context.aggs.max_compilations_rate] setting]\n\nFor more details, please send request for Json format to see the raw response from OpenSearch engine.",
        "type": "SearchPhaseExecutionException"
      },
      "status": 429
    }

@LantaoJin LantaoJin merged commit b0c0700 into opensearch-project:main Jul 26, 2025
23 checks passed
@opensearch-trigger-bot
Copy link
Contributor

The backport to 2.19-dev failed:

The process '/usr/bin/git' failed with exit code 128

To backport manually, run these commands in your terminal:

# Navigate to the root of your repository
cd $(git rev-parse --show-toplevel)
# Fetch latest updates from GitHub
git fetch
# Create a new working tree
git worktree add ../.worktrees/sql/backport-2.19-dev 2.19-dev
# Navigate to the new working tree
pushd ../.worktrees/sql/backport-2.19-dev
# Create a new branch
git switch --create backport/backport-3916-to-2.19-dev
# Cherry-pick the merged commit of this pull request and resolve the conflicts
git cherry-pick -x --mainline 1 b0c07008f8e5a6401f350da142e65fce649c7e60
# Push it to GitHub
git push --set-upstream origin backport/backport-3916-to-2.19-dev
# Go back to the original working tree
popd
# Delete the working tree
git worktree remove ../.worktrees/sql/backport-2.19-dev

Then, create a pull request where the base branch is 2.19-dev and the compare/head branch is backport/backport-3916-to-2.19-dev.

qianheng-aws added a commit to qianheng-aws/sql that referenced this pull request Jul 28, 2025
* Support aggregation push down with scripts

Signed-off-by: Heng Qian <qianheng@amazon.com>

* Fix IT

Signed-off-by: Heng Qian <qianheng@amazon.com>

* Fix sort push down after aggregation

Signed-off-by: Heng Qian <qianheng@amazon.com>

* Fix IT

Signed-off-by: Heng Qian <qianheng@amazon.com>

* Ignore q33 in clickbench because of ResourceMonitor restriction

Signed-off-by: Heng Qian <qianheng@amazon.com>

* Correct ignored query name in the comment - from q33 to q30

Signed-off-by: Heng Qian <qianheng@amazon.com>

---------

Signed-off-by: Heng Qian <qianheng@amazon.com>
(cherry picked from commit b0c0700)
penghuo pushed a commit that referenced this pull request Jul 29, 2025
#3926)

* Support aggregation push down with scripts (#3916)

* Support aggregation push down with scripts

Signed-off-by: Heng Qian <qianheng@amazon.com>

* Fix IT

Signed-off-by: Heng Qian <qianheng@amazon.com>

* Fix sort push down after aggregation

Signed-off-by: Heng Qian <qianheng@amazon.com>

* Fix IT

Signed-off-by: Heng Qian <qianheng@amazon.com>

* Ignore q33 in clickbench because of ResourceMonitor restriction

Signed-off-by: Heng Qian <qianheng@amazon.com>

* Correct ignored query name in the comment - from q33 to q30

Signed-off-by: Heng Qian <qianheng@amazon.com>

---------

Signed-off-by: Heng Qian <qianheng@amazon.com>
(cherry picked from commit b0c0700)

* Change java style to 11

Signed-off-by: Heng Qian <qianheng@amazon.com>

---------

Signed-off-by: Heng Qian <qianheng@amazon.com>
@LantaoJin LantaoJin added the backport-manually Filed a PR to backport manually. label Jul 31, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport 2.19-dev backport-failed backport-manually Filed a PR to backport manually. calcite calcite migration releated enhancement New feature or request pushdown pushdown related issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants