sqlglot.parsers.clickhouse
1from __future__ import annotations 2 3import typing as t 4 5from collections import deque 6 7from sqlglot import exp, parser 8from sqlglot.dialects.dialect import ( 9 build_date_delta, 10 build_formatted_time, 11 build_json_extract_path, 12 build_like, 13) 14from sqlglot.helper import seq_get 15from sqlglot.parser import IsPredicatePrecedence 16from sqlglot.tokens import Token, TokenType 17from builtins import type as Type 18 19if t.TYPE_CHECKING: 20 from sqlglot._typing import E 21 from collections.abc import Mapping, Sequence, Collection 22 23 24def _build_datetime_format( 25 expr_type: Type[E], 26) -> t.Callable: 27 def _builder(args: list, dialect: t.Any) -> E: 28 expr = build_formatted_time(expr_type)(args, dialect) 29 30 timezone = seq_get(args, 2) 31 if timezone: 32 expr.set("zone", timezone) 33 34 return expr 35 36 return _builder 37 38 39def _build_count_if(args: list) -> exp.CountIf | exp.CombinedAggFunc: 40 if len(args) == 1: 41 return exp.CountIf(this=seq_get(args, 0)) 42 43 return exp.CombinedAggFunc(this="countIf", expressions=args) 44 45 46def _build_str_to_date(args: list) -> exp.Cast | exp.Anonymous: 47 if len(args) == 3: 48 return exp.Anonymous(this="STR_TO_DATE", expressions=args) 49 50 strtodate = exp.StrToDate.from_arg_list(args) 51 return exp.cast(strtodate, exp.DType.DATETIME.into_expr()) 52 53 54def _build_timestamp_trunc(unit: str) -> t.Callable[[list], exp.TimestampTrunc]: 55 return lambda args: exp.TimestampTrunc( 56 this=seq_get(args, 0), unit=exp.var(unit), zone=seq_get(args, 1) 57 ) 58 59 60def _build_without_extra_args(expr_type: type[exp.Func], name: str) -> t.Callable[[list], exp.Func]: 61 # The optional mode / timezone arguments have no counterpart in expr_type 62 return lambda args: ( 63 expr_type(this=args[0]) if len(args) == 1 else exp.Anonymous(this=name, expressions=args) 64 ) 65 66 67def _build_split_by_char(args: list) -> exp.Split | exp.Anonymous: 68 sep = seq_get(args, 0) 69 if isinstance(sep, exp.Literal): 70 sep_value = sep.to_py() 71 if isinstance(sep_value, str) and len(sep_value.encode("utf-8")) == 1: 72 return _build_split(exp.Split)(args) 73 74 return exp.Anonymous(this="splitByChar", expressions=args) 75 76 77def _build_split(exp_class: Type[E]) -> t.Callable[[list], E]: 78 return lambda args: exp_class( 79 this=seq_get(args, 1), expression=seq_get(args, 0), limit=seq_get(args, 2) 80 ) 81 82 83def _build_array_lambda_func( 84 exp_class: Type[E], name: str 85) -> t.Callable[[list], E | exp.Anonymous]: 86 def _builder(args: list) -> E | exp.Anonymous: 87 # Other dialects can't express arrayMap((x, y) -> x + y, arr1, arr2), which 88 # iterates over multiple arrays at once, so we keep it as an anonymous function 89 if len(args) > 2: 90 return exp.Anonymous(this=name, expressions=args) 91 92 return exp_class(this=seq_get(args, 1), expression=seq_get(args, 0)) 93 94 return _builder 95 96 97# Skip the 'week' unit since ClickHouse's toStartOfWeek 98# uses an extra mode argument to specify the first day of the week 99TIMESTAMP_TRUNC_UNITS = { 100 "MICROSECOND", 101 "MILLISECOND", 102 "SECOND", 103 "MINUTE", 104 "HOUR", 105 "DAY", 106 "MONTH", 107 "QUARTER", 108 "YEAR", 109} 110 111 112_AGG_FUNCTIONS = { 113 "count", 114 "min", 115 "max", 116 "sum", 117 "avg", 118 "any", 119 "stddevPop", 120 "stddevSamp", 121 "varPop", 122 "varSamp", 123 "corr", 124 "covarPop", 125 "covarSamp", 126 "entropy", 127 "exponentialMovingAverage", 128 "intervalLengthSum", 129 "kolmogorovSmirnovTest", 130 "mannWhitneyUTest", 131 "median", 132 "rankCorr", 133 "sumKahan", 134 "studentTTest", 135 "welchTTest", 136 "anyHeavy", 137 "anyLast", 138 "boundingRatio", 139 "first_value", 140 "last_value", 141 "argMin", 142 "argMax", 143 "avgWeighted", 144 "topK", 145 "approx_top_sum", 146 "topKWeighted", 147 "deltaSum", 148 "deltaSumTimestamp", 149 "groupArray", 150 "groupArrayLast", 151 "groupConcat", 152 "groupUniqArray", 153 "groupArrayInsertAt", 154 "groupArrayMovingAvg", 155 "groupArrayMovingSum", 156 "groupArraySample", 157 "groupBitAnd", 158 "groupBitOr", 159 "groupBitXor", 160 "groupBitmap", 161 "groupBitmapAnd", 162 "groupBitmapOr", 163 "groupBitmapXor", 164 "sumWithOverflow", 165 "sumMap", 166 "minMap", 167 "maxMap", 168 "skewSamp", 169 "skewPop", 170 "kurtSamp", 171 "kurtPop", 172 "uniq", 173 "uniqExact", 174 "uniqCombined", 175 "uniqCombined64", 176 "uniqHLL12", 177 "uniqTheta", 178 "quantile", 179 "quantiles", 180 "quantileExact", 181 "quantileExactInclusive", 182 "quantilesExact", 183 "quantilesExactExclusive", 184 "quantileExactLow", 185 "quantilesExactLow", 186 "quantileExactHigh", 187 "quantilesExactHigh", 188 "quantileExactWeighted", 189 "quantilesExactWeighted", 190 "quantileTiming", 191 "quantilesTiming", 192 "quantileTimingWeighted", 193 "quantilesTimingWeighted", 194 "quantileDeterministic", 195 "quantilesDeterministic", 196 "quantileTDigest", 197 "quantilesTDigest", 198 "quantileTDigestWeighted", 199 "quantilesTDigestWeighted", 200 "quantileBFloat16", 201 "quantilesBFloat16", 202 "quantileBFloat16Weighted", 203 "quantilesBFloat16Weighted", 204 "simpleLinearRegression", 205 "stochasticLinearRegression", 206 "stochasticLogisticRegression", 207 "categoricalInformationValue", 208 "contingency", 209 "cramersV", 210 "cramersVBiasCorrected", 211 "theilsU", 212 "maxIntersections", 213 "maxIntersectionsPosition", 214 "meanZTest", 215 "quantileInterpolatedWeighted", 216 "quantilesInterpolatedWeighted", 217 "quantileGK", 218 "quantilesGK", 219 "sparkBar", 220 "sumCount", 221 "largestTriangleThreeBuckets", 222 "histogram", 223 "sequenceMatch", 224 "sequenceCount", 225 "windowFunnel", 226 "retention", 227 "uniqUpTo", 228 "sequenceNextNode", 229 "exponentialTimeDecayedAvg", 230} 231 232# Sorted longest-first so that compound suffixes (e.g. "SimpleState") are matched 233# before their sub-suffixes (e.g. "State") when resolving multi-combinator functions. 234_AGG_FUNCTIONS_SUFFIXES: list[str] = sorted( 235 [ 236 "If", 237 "Array", 238 "ArrayIf", 239 "Map", 240 "SimpleState", 241 "State", 242 "Merge", 243 "MergeState", 244 "ForEach", 245 "Distinct", 246 "OrDefault", 247 "OrNull", 248 "Resample", 249 "ArgMin", 250 "ArgMax", 251 ], 252 key=len, 253 reverse=True, 254) 255 256# Memoized examples of all 0- and 1-suffix aggregate function names 257_AGG_FUNC_MAPPING: Mapping[str, tuple[str, str | None]] = { 258 f"{f}{sfx}": (f, sfx) for sfx in _AGG_FUNCTIONS_SUFFIXES for f in _AGG_FUNCTIONS 259} | {f: (f, None) for f in _AGG_FUNCTIONS} 260 261 262class ClickHouseParser(parser.Parser): 263 IS_PREDICATE_PRECEDENCE = IsPredicatePrecedence.LOW 264 265 SET_OP_MODIFIERS = {"settings", "format"} 266 INTERVAL_SPANS = False 267 OPTIONAL_ALIAS_TOKEN_CTE = False 268 JOINS_HAVE_EQUAL_PRECEDENCE = True 269 270 FUNCTIONS = { 271 **{ 272 k: v 273 for k, v in parser.Parser.FUNCTIONS.items() 274 if k not in ("TRANSFORM", "APPROX_TOP_SUM") 275 }, 276 **{ 277 regexp_extract: lambda args: exp.RegexpExtract( 278 this=seq_get(args, 0), 279 expression=seq_get(args, 1), 280 group=seq_get(args, 2), 281 ) 282 for regexp_extract in ("REGEXPEXTRACT", "REGEXP_EXTRACT", "REGEXP_SUBSTR") 283 }, 284 **{f"TOSTARTOF{unit}": _build_timestamp_trunc(unit=unit) for unit in TIMESTAMP_TRUNC_UNITS}, 285 "ANY": exp.AnyValue.from_arg_list, 286 "ARRAYCOMPACT": exp.ArrayCompact.from_arg_list, 287 "ARRAYCONCAT": exp.ArrayConcat.from_arg_list, 288 "ARRAYDISTINCT": exp.ArrayDistinct.from_arg_list, 289 "ARRAYEXCEPT": exp.ArrayExcept.from_arg_list, 290 "ARRAYSUM": exp.ArraySum.from_arg_list, 291 "ARRAYMAX": exp.ArrayMax.from_arg_list, 292 "ARRAYMIN": exp.ArrayMin.from_arg_list, 293 "ARRAYREVERSE": exp.ArrayReverse.from_arg_list, 294 "ARRAYSLICE": exp.ArraySlice.from_arg_list, 295 "ARRAYFILTER": _build_array_lambda_func(exp.ArrayFilter, "arrayFilter"), 296 "ARRAYMAP": _build_array_lambda_func(exp.Transform, "arrayMap"), 297 "CURRENTDATABASE": exp.CurrentDatabase.from_arg_list, 298 "CURRENTSCHEMAS": exp.CurrentSchemas.from_arg_list, 299 "COUNTIF": _build_count_if, 300 "COUNTMATCHES": exp.RegexpCount.from_arg_list, 301 "CITYHASH64": exp.CityHash64.from_arg_list, 302 "COSINEDISTANCE": exp.CosineDistance.from_arg_list, 303 "VERSION": exp.CurrentVersion.from_arg_list, 304 "DATE_ADD": build_date_delta(exp.DateAdd, default_unit=None), 305 "DATEADD": build_date_delta(exp.DateAdd, default_unit=None), 306 "DATE_DIFF": build_date_delta(exp.DateDiff, default_unit=None, supports_timezone=True), 307 "DATEDIFF": build_date_delta(exp.DateDiff, default_unit=None, supports_timezone=True), 308 "DATE_FORMAT": _build_datetime_format(exp.TimeToStr), 309 "DATE_SUB": build_date_delta(exp.DateSub, default_unit=None), 310 "DATESUB": build_date_delta(exp.DateSub, default_unit=None), 311 "DATETRUNC": exp.DateTrunc.from_arg_list, 312 "FORMATDATETIME": _build_datetime_format(exp.TimeToStr), 313 "GROUPBITAND": exp.BitwiseAndAgg.from_arg_list, 314 "GROUPBITOR": exp.BitwiseOrAgg.from_arg_list, 315 "GROUPBITXOR": exp.BitwiseXorAgg.from_arg_list, 316 "HAS": exp.ArrayContains.from_arg_list, 317 "ILIKE": build_like(exp.ILike), 318 "ISINFINITE": exp.IsInf.from_arg_list, 319 "JSONEXTRACTRAW": build_json_extract_path( 320 exp.JSONExtract, zero_based_indexing=False, arrow_req_json_type=True 321 ), 322 "JSONEXTRACTSTRING": build_json_extract_path( 323 exp.JSONExtractScalar, zero_based_indexing=False, arrow_req_json_type=True 324 ), 325 "LENGTH": lambda args: exp.Length(this=seq_get(args, 0), binary=True), 326 "LIKE": build_like(exp.Like), 327 "L2Distance": exp.EuclideanDistance.from_arg_list, 328 "MAP": parser.build_var_map, 329 "MATCH": exp.RegexpLike.from_arg_list, 330 "NOTLIKE": build_like(exp.Like, not_like=True), 331 "PARSEDATETIME": _build_datetime_format(exp.ParseDatetime), 332 "RANDCANONICAL": exp.Rand.from_arg_list, 333 "STR_TO_DATE": _build_str_to_date, 334 "TIMESTAMP_SUB": build_date_delta(exp.TimestampSub, default_unit=None), 335 "TIMESTAMPSUB": build_date_delta(exp.TimestampSub, default_unit=None), 336 "TIMESTAMP_ADD": build_date_delta(exp.TimestampAdd, default_unit=None), 337 "TIMESTAMPADD": build_date_delta(exp.TimestampAdd, default_unit=None), 338 "TODAYOFWEEK": _build_without_extra_args(exp.DayOfWeekIso, "toDayOfWeek"), 339 "TOISOWEEK": _build_without_extra_args(exp.WeekOfYear, "toISOWeek"), 340 "TOISOYEAR": _build_without_extra_args(exp.YearOfWeekIso, "toISOYear"), 341 "TOMONDAY": _build_timestamp_trunc("WEEK"), 342 "UNIQ": exp.ApproxDistinct.from_arg_list, 343 "MD5": exp.MD5Digest.from_arg_list, 344 "SHA256": lambda args: exp.SHA2(this=seq_get(args, 0), length=exp.Literal.number(256)), 345 "SHA512": lambda args: exp.SHA2(this=seq_get(args, 0), length=exp.Literal.number(512)), 346 "SPLITBYCHAR": _build_split_by_char, 347 "SPLITBYREGEXP": _build_split(exp.RegexpSplit), 348 "SPLITBYSTRING": _build_split(exp.Split), 349 "SUBSTRINGINDEX": exp.SubstringIndex.from_arg_list, 350 "TOTYPENAME": exp.Typeof.from_arg_list, 351 "TRIMBOTH": exp.Trim.from_arg_list, 352 "TRIMLEFT": parser.build_trim, 353 "TRIMRIGHT": lambda args: parser.build_trim(args, is_left=False), 354 "EDITDISTANCE": exp.Levenshtein.from_arg_list, 355 "JAROWINKLERSIMILARITY": exp.JarowinklerSimilarity.from_arg_list, 356 "LEVENSHTEINDISTANCE": exp.Levenshtein.from_arg_list, 357 "UTCTIMESTAMP": exp.UtcTimestamp.from_arg_list, 358 } 359 360 AGG_FUNCTIONS: t.ClassVar = _AGG_FUNCTIONS 361 AGG_FUNCTIONS_SUFFIXES: t.ClassVar = _AGG_FUNCTIONS_SUFFIXES 362 363 FUNC_TOKENS = { 364 *parser.Parser.FUNC_TOKENS, 365 TokenType.AND, 366 TokenType.FILE, 367 TokenType.OR, 368 TokenType.PASTE, 369 TokenType.SET, 370 TokenType.VIEW, 371 } 372 373 RESERVED_TOKENS = parser.Parser.RESERVED_TOKENS - {TokenType.SELECT} 374 375 ID_VAR_TOKENS = { 376 *parser.Parser.ID_VAR_TOKENS, 377 TokenType.LIKE, 378 } 379 380 AGG_FUNC_MAPPING: t.ClassVar = _AGG_FUNC_MAPPING 381 382 @classmethod 383 def _resolve_clickhouse_agg(cls, name: str) -> tuple[str, Sequence[str]] | None: 384 # ClickHouse allows chaining multiple combinators on aggregate functions. 385 # See https://clickhouse.com/docs/sql-reference/aggregate-functions/combinators 386 # N.B. this resolution allows any suffix stack, including ones that ClickHouse rejects 387 # syntactically such as sumMergeMerge (due to repeated adjacent suffixes) 388 389 # Until we are able to identify a 1- or 0-suffix aggregate function by name, 390 # repeatedly strip and queue suffixes (checking longer suffixes first, see comment on 391 # AGG_FUNCTIONS_SUFFIXES_SORTED). This loop only runs for 2 or more suffixes, 392 # as AGG_FUNC_MAPPING memoizes all 0- and 1-suffix 393 accumulated_suffixes: deque[str] = deque() 394 while (parts := _AGG_FUNC_MAPPING.get(name)) is None: 395 for suffix in _AGG_FUNCTIONS_SUFFIXES: 396 if name.endswith(suffix) and len(name) != len(suffix): 397 accumulated_suffixes.appendleft(suffix) 398 name = name[: -len(suffix)] 399 break 400 else: 401 return None 402 403 # We now have a 0- or 1-suffix aggregate 404 agg_func_name, inner_suffix = parts 405 if inner_suffix: 406 # this is a 1-suffix aggregate (either naturally or via repeated suffix 407 # stripping). prepend the innermost suffix. 408 accumulated_suffixes.appendleft(inner_suffix) 409 410 return (agg_func_name, accumulated_suffixes) 411 412 FUNCTION_PARSERS = { 413 **{k: v for k, v in parser.Parser.FUNCTION_PARSERS.items() if k != "MATCH"}, 414 "ARRAYJOIN": lambda self: self.expression(exp.Explode(this=self._parse_expression())), 415 "GROUPCONCAT": lambda self: self._parse_group_concat(), 416 "QUANTILE": lambda self: self._parse_quantile(), 417 "MEDIAN": lambda self: self._parse_quantile(), 418 "COLUMNS": lambda self: self._parse_columns(), 419 "TUPLE": lambda self: exp.Struct.from_arg_list(self._parse_function_args(alias=True)), 420 "AND": lambda self: self._parse_connector_function(exp.and_), 421 "OR": lambda self: self._parse_connector_function(exp.or_), 422 "XOR": lambda self: exp.xor(*self._parse_function_args(alias=False)), 423 "VIEW": lambda self: self.expression( 424 exp.Anonymous(this="view", expressions=[self._parse_select()]) 425 ), 426 } 427 428 PROPERTY_PARSERS = { 429 **{k: v for k, v in parser.Parser.PROPERTY_PARSERS.items() if k != "DYNAMIC"}, 430 "ENGINE": lambda self: self._parse_engine_property(), 431 "REFRESH": lambda self: self._parse_auto_refresh_property(), 432 "UUID": lambda self: self.expression(exp.UuidProperty(this=self._parse_string())), 433 } 434 435 NO_PAREN_FUNCTION_PARSERS = { 436 k: v for k, v in parser.Parser.NO_PAREN_FUNCTION_PARSERS.items() if k != "ANY" 437 } 438 439 NO_PAREN_FUNCTIONS = { 440 k: v 441 for k, v in parser.Parser.NO_PAREN_FUNCTIONS.items() 442 if k != TokenType.CURRENT_TIMESTAMP 443 } 444 445 RANGE_PARSERS = { 446 **parser.Parser.RANGE_PARSERS, 447 TokenType.GLOBAL: lambda self, this: self._parse_global_in(this), 448 } 449 450 COLUMN_OPERATORS = { 451 **{k: v for k, v in parser.Parser.COLUMN_OPERATORS.items() if k != TokenType.PLACEHOLDER}, 452 TokenType.DOTCARET: lambda self, this, field: self.expression( 453 exp.NestedJSONSelect(this=this, expression=field) 454 ), 455 } 456 457 JOIN_KINDS = { 458 *parser.Parser.JOIN_KINDS, 459 TokenType.ALL, 460 TokenType.ANY, 461 TokenType.ASOF, 462 TokenType.ARRAY, 463 TokenType.PASTE, 464 } 465 466 TABLE_ALIAS_TOKENS = parser.Parser.TABLE_ALIAS_TOKENS - { 467 TokenType.ALL, 468 TokenType.ANY, 469 TokenType.ARRAY, 470 TokenType.ASOF, 471 TokenType.FINAL, 472 TokenType.FORMAT, 473 TokenType.PASTE, 474 TokenType.SETTINGS, 475 } 476 477 ALIAS_TOKENS = parser.Parser.ALIAS_TOKENS - { 478 TokenType.FORMAT, 479 TokenType.SETTINGS, 480 } 481 482 LOG_DEFAULTS_TO_LN = True 483 484 QUERY_MODIFIER_PARSERS = { 485 **parser.Parser.QUERY_MODIFIER_PARSERS, 486 TokenType.SETTINGS: lambda self: ( 487 "settings", 488 self._advance() or self._parse_csv(self._parse_assignment), 489 ), 490 TokenType.FORMAT: lambda self: ("format", self._advance() or self._parse_id_var()), 491 } 492 493 CONSTRAINT_PARSERS = { 494 **parser.Parser.CONSTRAINT_PARSERS, 495 "INDEX": lambda self: self._parse_index_constraint(), 496 "CODEC": lambda self: self._parse_compress(), 497 "ASSUME": lambda self: self._parse_assume_constraint(), 498 } 499 500 ALTER_PARSERS = { 501 **parser.Parser.ALTER_PARSERS, 502 "MODIFY": lambda self: self._parse_alter_table_alter(), 503 "REPLACE": lambda self: self._parse_alter_table_replace(), 504 } 505 506 SCHEMA_UNNAMED_CONSTRAINTS = { 507 *parser.Parser.SCHEMA_UNNAMED_CONSTRAINTS, 508 "INDEX", 509 } - {"CHECK"} 510 511 PLACEHOLDER_PARSERS = { 512 **parser.Parser.PLACEHOLDER_PARSERS, 513 TokenType.L_BRACE: lambda self: self._parse_query_parameter(), 514 } 515 516 STATEMENT_PARSERS = { 517 **parser.Parser.STATEMENT_PARSERS, 518 TokenType.DETACH: lambda self: self._parse_detach(), 519 } 520 521 def _parse_wrapped_select_or_assignment(self) -> exp.Expr | None: 522 return self._parse_wrapped( 523 lambda: self._parse_select() or self._parse_assignment(), optional=True 524 ) 525 526 def _parse_check_constraint(self) -> exp.CheckColumnConstraint | None: 527 return self.expression( 528 exp.CheckColumnConstraint(this=self._parse_wrapped_select_or_assignment()) 529 ) 530 531 def _parse_assume_constraint(self) -> exp.AssumeColumnConstraint | None: 532 return self.expression( 533 exp.AssumeColumnConstraint(this=self._parse_wrapped_select_or_assignment()) 534 ) 535 536 def _parse_engine_property(self) -> exp.EngineProperty: 537 self._match(TokenType.EQ) 538 return self.expression( 539 exp.EngineProperty(this=self._parse_field(any_token=True, anonymous_func=True)) 540 ) 541 542 # https://clickhouse.com/docs/en/sql-reference/statements/create/function 543 def _parse_user_defined_function_expression(self) -> exp.Expr | None: 544 return self._parse_lambda() 545 546 def _parse_types( 547 self, 548 check_func: bool = False, 549 schema: bool = False, 550 allow_identifiers: bool = True, 551 with_collation: bool = False, 552 ) -> exp.Expr | None: 553 dtype = super()._parse_types( 554 check_func=check_func, 555 schema=schema, 556 allow_identifiers=allow_identifiers, 557 with_collation=with_collation, 558 ) 559 if isinstance(dtype, exp.DataType) and dtype.args.get("nullable") is not True: 560 # Mark every type as non-nullable which is ClickHouse's default, unless it's 561 # already marked as nullable. This marker helps us transpile types from other 562 # dialects to ClickHouse, so that we can e.g. produce `CAST(x AS Nullable(String))` 563 # from `CAST(x AS TEXT)`. If there is a `NULL` value in `x`, the former would 564 # fail in ClickHouse without the `Nullable` type constructor. 565 dtype.set("nullable", False) 566 567 return dtype 568 569 def _parse_extract(self) -> exp.Extract | exp.Anonymous: 570 index = self._index 571 this = self._parse_bitwise() 572 if self._match(TokenType.FROM): 573 self._retreat(index) 574 return super()._parse_extract() 575 576 # We return Anonymous here because extract and regexpExtract have different semantics, 577 # so parsing extract(foo, bar) into RegexpExtract can potentially break queries. E.g., 578 # `extract('foobar', 'b')` works, but ClickHouse crashes for `regexpExtract('foobar', 'b')`. 579 # 580 # TODO: can we somehow convert the former into an equivalent `regexpExtract` call? 581 self._match(TokenType.COMMA) 582 return self.expression( 583 exp.Anonymous(this="extract", expressions=[this, self._parse_bitwise()]) 584 ) 585 586 def _parse_assignment(self) -> exp.Expr | None: 587 this = super()._parse_assignment() 588 589 if self._match(TokenType.PLACEHOLDER): 590 return self.expression( 591 exp.If( 592 this=this, 593 true=self._parse_assignment(), 594 false=self._match(TokenType.COLON) and self._parse_assignment(), 595 ) 596 ) 597 598 return this 599 600 def _parse_query_parameter(self) -> exp.Expr | None: 601 """ 602 Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier} 603 https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters 604 """ 605 index = self._index 606 607 this = self._parse_id_var() 608 self._match(TokenType.COLON) 609 kind = self._parse_types(check_func=False, allow_identifiers=False) or ( 610 self._match_text_seq("IDENTIFIER") and "Identifier" 611 ) 612 613 if not kind: 614 self._retreat(index) 615 return None 616 elif not self._match(TokenType.R_BRACE): 617 self.raise_error("Expecting }") 618 619 if isinstance(this, exp.Identifier) and not this.quoted: 620 this = exp.var(this.name) 621 622 return self.expression(exp.Placeholder(this=this, kind=kind)) 623 624 def _parse_bracket(self, this: exp.Expr | None = None) -> exp.Expr | None: 625 if this: 626 bracket_json_type = None 627 628 while self._match_pair(TokenType.L_BRACKET, TokenType.R_BRACKET): 629 bracket_json_type = exp.DataType( 630 this=exp.DType.ARRAY, 631 expressions=[ 632 bracket_json_type 633 or exp.DType.JSON.into_expr(dialect=self.dialect, nullable=False) 634 ], 635 nested=True, 636 ) 637 638 if bracket_json_type: 639 return self.expression(exp.JSONCast(this=this, to=bracket_json_type)) 640 641 l_brace = self._match(TokenType.L_BRACE, advance=False) 642 bracket = super()._parse_bracket(this) 643 644 if l_brace and isinstance(bracket, exp.Struct): 645 varmap = exp.VarMap(keys=exp.Array(), values=exp.Array()) 646 for expression in bracket.expressions: 647 if not isinstance(expression, exp.PropertyEQ): 648 break 649 650 varmap.args["keys"].append("expressions", exp.Literal.string(expression.name)) 651 varmap.args["values"].append("expressions", expression.expression) 652 653 return varmap 654 655 return bracket 656 657 def _parse_global_in(self, this: exp.Expr | None) -> exp.Not | exp.In | None: 658 index = self._index - 1 659 is_negated = self._match(TokenType.NOT) 660 if not self._match(TokenType.IN): 661 self._retreat(index) 662 return None 663 664 in_expr = self._parse_in(this) 665 in_expr.set("is_global", True) 666 return self.expression(exp.Not(this=in_expr)) if is_negated else in_expr 667 668 def _parse_table( 669 self, 670 schema: bool = False, 671 joins: bool = False, 672 alias_tokens: Collection[TokenType] | None = None, 673 parse_bracket: bool = False, 674 is_db_reference: bool = False, 675 parse_partition: bool = False, 676 consume_pipe: bool = False, 677 ) -> exp.Expr | None: 678 this = super()._parse_table( 679 schema=schema, 680 joins=joins, 681 alias_tokens=alias_tokens, 682 parse_bracket=parse_bracket, 683 is_db_reference=is_db_reference, 684 ) 685 686 if isinstance(this, exp.Table): 687 inner = this.this 688 alias = this.args.get("alias") 689 690 if isinstance(inner, exp.GenerateSeries) and alias and not alias.columns: 691 alias.set("columns", [exp.to_identifier("generate_series")]) 692 693 if self._match(TokenType.FINAL): 694 this = self.expression(exp.Final(this=this)) 695 696 return this 697 698 def _parse_position(self, haystack_first: bool = False) -> exp.StrPosition: 699 return super()._parse_position(haystack_first=True) 700 701 # https://clickhouse.com/docs/en/sql-reference/statements/select/with/ 702 def _parse_cte(self) -> exp.CTE | exp.FunctionSpecification | None: 703 # WITH <identifier> AS <subquery expression> 704 cte: exp.CTE | exp.FunctionSpecification | None = self._try_parse(super()._parse_cte) 705 706 if not cte: 707 # WITH <expression> AS <identifier> 708 cte = self.expression( 709 exp.CTE(this=self._parse_assignment(), alias=self._parse_table_alias(), scalar=True) 710 ) 711 712 return cte 713 714 def _parse_join_parts( 715 self, 716 ) -> tuple[Token | None, Token | None, Token | None]: 717 method = self._prev if self._match_set((TokenType.GLOBAL, TokenType.NATURAL)) else None 718 719 kind_pre = self._prev if self._match_set(self.JOIN_KINDS) else None 720 side = self._prev if self._match_set(self.JOIN_SIDES) else None 721 kind = self._prev if self._match_set(self.JOIN_KINDS) else None 722 723 return method, side or kind, kind_pre or kind 724 725 def _parse_join( 726 self, 727 skip_join_token: bool = False, 728 parse_bracket: bool = False, 729 alias_tokens: t.Collection[TokenType] | None = None, 730 ) -> exp.Join | None: 731 join = super()._parse_join( 732 skip_join_token=skip_join_token, parse_bracket=True, alias_tokens=alias_tokens 733 ) 734 if join: 735 if join.method == "GLOBAL": 736 join.set("method", None) 737 join.set("global_", "GLOBAL") 738 739 # tbl ARRAY JOIN arr <-- this should be a `Column` reference, not a `Table` 740 # https://clickhouse.com/docs/en/sql-reference/statements/select/array-join 741 if join.kind == "ARRAY": 742 for table in join.find_all(exp.Table): 743 table.replace(table.to_column()) 744 745 return join 746 747 def _parse_function( 748 self, 749 functions: dict[str, t.Callable] | None = None, 750 anonymous: bool = False, 751 optional_parens: bool = True, 752 any_token: bool = False, 753 ) -> exp.Expr | None: 754 expr = super()._parse_function( 755 functions=functions, 756 anonymous=anonymous, 757 optional_parens=optional_parens, 758 any_token=any_token, 759 ) 760 761 func = expr.this if isinstance(expr, exp.Window) else expr 762 763 # Aggregate functions can be split in 2 parts: <func_name><suffix[es]> 764 parts = self._resolve_clickhouse_agg(func.name) if isinstance(func, exp.Anonymous) else None 765 766 if parts: 767 anon_func: exp.Anonymous = t.cast(exp.Anonymous, func) 768 params = self._parse_func_params(anon_func) 769 770 if len(parts[1]) > 0: 771 exp_class: Type[exp.Expr] = ( 772 exp.CombinedParameterizedAgg if params else exp.CombinedAggFunc 773 ) 774 else: 775 exp_class = exp.ParameterizedAgg if params else exp.AnonymousAggFunc 776 777 instance = exp_class(this=anon_func.this, expressions=anon_func.expressions) 778 if params: 779 instance.set("params", params) 780 func = self.expression(instance) 781 782 if isinstance(expr, exp.Window): 783 # The window's func was parsed as Anonymous in base parser, fix its 784 # type to be ClickHouse style CombinedAnonymousAggFunc / AnonymousAggFunc 785 expr.set("this", func) 786 elif params: 787 # Params have blocked super()._parse_function() from parsing the following window 788 # (if that exists) as they're standing between the function call and the window spec 789 expr = self._parse_window(func) 790 else: 791 expr = func 792 793 return expr 794 795 def _parse_func_params(self, this: exp.Func | None = None) -> list[exp.Expr] | None: 796 if self._match_pair(TokenType.R_PAREN, TokenType.L_PAREN): 797 return self._parse_csv(self._parse_lambda) 798 799 if self._match(TokenType.L_PAREN): 800 params = self._parse_csv(self._parse_lambda) 801 self._match_r_paren(this) 802 return params 803 804 return None 805 806 def _parse_group_concat(self) -> exp.GroupConcat: 807 args = self._parse_csv(self._parse_lambda) 808 params = self._parse_func_params() 809 810 if params: 811 # groupConcat(sep [, limit])(expr) 812 separator = seq_get(args, 0) 813 limit = seq_get(args, 1) 814 this: exp.Expr | None = seq_get(params, 0) 815 if limit is not None: 816 this = exp.Limit(this=this, expression=limit) 817 return self.expression(exp.GroupConcat(this=this, separator=separator)) 818 819 # groupConcat(expr) 820 return self.expression(exp.GroupConcat(this=seq_get(args, 0))) 821 822 def _parse_quantile(self) -> exp.Quantile: 823 this = self._parse_lambda() 824 params = self._parse_func_params() 825 if params: 826 return self.expression(exp.Quantile(this=params[0], quantile=this)) 827 return self.expression(exp.Quantile(this=this, quantile=exp.Literal.number(0.5))) 828 829 def _parse_wrapped_id_vars(self, optional: bool = False) -> list[exp.Expr]: 830 return super()._parse_wrapped_id_vars(optional=True) 831 832 def _parse_column_def( 833 self, this: exp.Expr | None, computed_column: bool = True 834 ) -> exp.Expr | None: 835 if self._match(TokenType.DOT): 836 return exp.Dot(this=this, expression=self._parse_id_var()) 837 838 return super()._parse_column_def(this, computed_column=computed_column) 839 840 def _parse_primary_key( 841 self, 842 wrapped_optional: bool = False, 843 in_props: bool = False, 844 named_primary_key: bool = False, 845 ) -> exp.PrimaryKeyColumnConstraint | exp.PrimaryKey: 846 return super()._parse_primary_key( 847 wrapped_optional=wrapped_optional or in_props, 848 in_props=in_props, 849 named_primary_key=named_primary_key, 850 ) 851 852 def _parse_on_property(self) -> exp.Expr | None: 853 index = self._index 854 if self._match_text_seq("CLUSTER"): 855 this = self._parse_string() or self._parse_id_var() 856 if this: 857 return self.expression(exp.OnCluster(this=this)) 858 else: 859 self._retreat(index) 860 return None 861 862 def _parse_auto_refresh_property(self) -> exp.AutoRefreshProperty | None: 863 index = self._index - 1 864 cadence = self._prev.text.upper() if self._match_texts(("EVERY", "AFTER")) else None 865 interval = ( 866 self._parse_interval(require_interval=False, parse_function_unit=False) 867 if cadence 868 else None 869 ) 870 871 if cadence and not interval: 872 self._retreat(index) 873 return None 874 875 offset = None 876 if self._match_text_seq("OFFSET"): 877 offset = self._parse_interval(require_interval=False, parse_function_unit=False) 878 if not offset: 879 self._retreat(index) 880 return None 881 882 randomize = None 883 if self._match_text_seq("RANDOMIZE", "FOR"): 884 randomize = self._parse_interval(require_interval=False, parse_function_unit=False) 885 if not randomize: 886 self._retreat(index) 887 return None 888 889 dependencies = None 890 if self._match_text_seq("DEPENDS", "ON"): 891 dependencies = self._parse_csv(lambda: self._parse_table_parts(schema=True)) 892 if not dependencies: 893 self._retreat(index) 894 return None 895 896 if not cadence and not dependencies: 897 self._retreat(index) 898 return None 899 900 settings = self._parse_settings_property() if self._match_text_seq("SETTINGS") else None 901 902 return self.expression( 903 exp.AutoRefreshProperty( 904 this=interval, 905 cadence=cadence, 906 offset=offset, 907 randomize=randomize, 908 expressions=dependencies, 909 settings=settings, 910 append=self._match_text_seq("APPEND"), 911 ) 912 ) 913 914 def _parse_index_constraint(self, kind: str | None = None) -> exp.IndexColumnConstraint: 915 # INDEX name1 expr TYPE type1(args) GRANULARITY value 916 this = self._parse_id_var() 917 expression = self._parse_assignment() 918 919 index_type = self._match_text_seq("TYPE") and (self._parse_function() or self._parse_var()) 920 921 granularity = self._match_text_seq("GRANULARITY") and self._parse_term() 922 923 return self.expression( 924 exp.IndexColumnConstraint( 925 this=this, expression=expression, index_type=index_type, granularity=granularity 926 ) 927 ) 928 929 def _parse_partition(self) -> exp.Partition | None: 930 # https://clickhouse.com/docs/en/sql-reference/statements/alter/partition#how-to-set-partition-expression 931 if not self._match(TokenType.PARTITION): 932 return None 933 934 if self._match_text_seq("ID"): 935 # Corresponds to the PARTITION ID <string_value> syntax 936 expressions: list[exp.Expr] = [ 937 self.expression(exp.PartitionId(this=self._parse_string())) 938 ] 939 else: 940 expressions = self._parse_expressions() 941 942 return self.expression(exp.Partition(expressions=expressions)) 943 944 def _parse_alter_table_replace(self) -> exp.Expr | None: 945 partition = self._parse_partition() 946 947 if not partition or not self._match(TokenType.FROM): 948 return None 949 950 return self.expression( 951 exp.ReplacePartition(expression=partition, source=self._parse_table_parts()) 952 ) 953 954 def _parse_alter_table_alter(self) -> exp.Expr | None: 955 # MODIFY forms other than MODIFY COLUMN (SQL SECURITY, ORDER BY, TTL, COMMENT, ...) 956 # are parsed as properties, since ALTER can now reach this path too 957 if self._prev.text.upper() == "MODIFY" and not self._match(TokenType.COLUMN, advance=False): 958 if properties := self._parse_properties(): 959 return self.expression( 960 exp.AlterModifySqlSecurity(expressions=properties.expressions) 961 ) 962 return None 963 964 # https://clickhouse.com/docs/sql-reference/statements/alter/column#modify-column 965 alter = super()._parse_alter_table_alter() 966 return None if self._curr else alter 967 968 def _parse_definer(self) -> exp.DefinerProperty | None: 969 self._match(TokenType.EQ) 970 if self._match(TokenType.CURRENT_USER): 971 return exp.DefinerProperty(this=exp.Var(this=self._prev.text.upper())) 972 return exp.DefinerProperty(this=self._parse_string()) 973 974 def _parse_projection_def(self) -> exp.ProjectionDef | None: 975 if not self._match(TokenType.PROJECTION): 976 return None 977 978 return self.expression( 979 exp.ProjectionDef( 980 this=self._parse_id_var(), expression=self._parse_wrapped(self._parse_statement) 981 ) 982 ) 983 984 def _parse_constraint(self) -> exp.Expr | None: 985 return super()._parse_constraint() or self._parse_projection_def() 986 987 def _parse_alias(self, this: exp.Expr | None, explicit: bool = False) -> exp.Expr | None: 988 # In clickhouse "SELECT <expr> APPLY(...)" is a query modifier, 989 # so "APPLY" shouldn't be parsed as <expr>'s alias. However, "SELECT <expr> apply" is a valid alias 990 if self._match_pair(TokenType.APPLY, TokenType.L_PAREN, advance=False): 991 return this 992 993 return super()._parse_alias(this=this, explicit=explicit) 994 995 def _parse_expression(self) -> exp.Expr | None: 996 this = super()._parse_expression() 997 998 # Clickhouse allows "SELECT <expr> [APPLY(func)] [...]]" modifier 999 while self._match_pair(TokenType.APPLY, TokenType.L_PAREN): 1000 this = exp.Apply(this=this, expression=self._parse_var(any_token=True)) 1001 self._match(TokenType.R_PAREN) 1002 1003 return this 1004 1005 def _parse_columns(self) -> exp.Expr: 1006 this: exp.Expr = self.expression(exp.Columns(this=self._parse_lambda())) 1007 1008 while self._next and self._match_text_seq(")", "APPLY", "("): 1009 self._match(TokenType.R_PAREN) 1010 this = exp.Apply(this=this, expression=self._parse_var(any_token=True)) 1011 return this 1012 1013 def _parse_value(self, values: bool = True) -> exp.Tuple | None: 1014 value = super()._parse_value(values=values) 1015 if not value: 1016 return None 1017 1018 # In Clickhouse "SELECT * FROM VALUES (1, 2, 3)" generates a table with a single column, in contrast 1019 # to other dialects. For this case, we canonicalize the values into a tuple-of-tuples AST if it's not already one. 1020 # In INSERT INTO statements the same clause actually references multiple columns (opposite semantics), 1021 # but the final result is not altered by the extra parentheses. 1022 # Note: Clickhouse allows VALUES([structure], value, ...) so the branch checks for the last expression 1023 # A single-value tuple is generated as "(x)", which is parsed back into a Paren 1024 # rather than a Tuple, so it's unwrapped here to keep this rewrite idempotent 1025 expressions = value.expressions 1026 if values and not isinstance(expressions[-1], exp.Tuple): 1027 value.set( 1028 "expressions", 1029 [self.expression(exp.Tuple(expressions=[expr.unnest()])) for expr in expressions], 1030 ) 1031 1032 return value 1033 1034 def _parse_partitioned_by(self) -> exp.PartitionedByProperty: 1035 # ClickHouse allows custom expressions as partition key 1036 # https://clickhouse.com/docs/engines/table-engines/mergetree-family/custom-partitioning-key 1037 return self.expression(exp.PartitionedByProperty(this=self._parse_assignment())) 1038 1039 def _parse_detach(self) -> exp.Detach: 1040 kind = self._match_set(self.DB_CREATABLES) and self._prev.text.upper() 1041 exists = self._parse_exists() 1042 this = self._parse_table_parts() 1043 1044 return self.expression( 1045 exp.Detach( 1046 this=this, 1047 kind=kind, 1048 exists=exists, 1049 cluster=self._parse_on_property() if self._match(TokenType.ON) else None, 1050 permanent=self._match_text_seq("PERMANENTLY"), 1051 sync=self._match_text_seq("SYNC"), 1052 ) 1053 )
TIMESTAMP_TRUNC_UNITS =
{'DAY', 'HOUR', 'MICROSECOND', 'MINUTE', 'SECOND', 'MONTH', 'MILLISECOND', 'YEAR', 'QUARTER'}
263class ClickHouseParser(parser.Parser): 264 IS_PREDICATE_PRECEDENCE = IsPredicatePrecedence.LOW 265 266 SET_OP_MODIFIERS = {"settings", "format"} 267 INTERVAL_SPANS = False 268 OPTIONAL_ALIAS_TOKEN_CTE = False 269 JOINS_HAVE_EQUAL_PRECEDENCE = True 270 271 FUNCTIONS = { 272 **{ 273 k: v 274 for k, v in parser.Parser.FUNCTIONS.items() 275 if k not in ("TRANSFORM", "APPROX_TOP_SUM") 276 }, 277 **{ 278 regexp_extract: lambda args: exp.RegexpExtract( 279 this=seq_get(args, 0), 280 expression=seq_get(args, 1), 281 group=seq_get(args, 2), 282 ) 283 for regexp_extract in ("REGEXPEXTRACT", "REGEXP_EXTRACT", "REGEXP_SUBSTR") 284 }, 285 **{f"TOSTARTOF{unit}": _build_timestamp_trunc(unit=unit) for unit in TIMESTAMP_TRUNC_UNITS}, 286 "ANY": exp.AnyValue.from_arg_list, 287 "ARRAYCOMPACT": exp.ArrayCompact.from_arg_list, 288 "ARRAYCONCAT": exp.ArrayConcat.from_arg_list, 289 "ARRAYDISTINCT": exp.ArrayDistinct.from_arg_list, 290 "ARRAYEXCEPT": exp.ArrayExcept.from_arg_list, 291 "ARRAYSUM": exp.ArraySum.from_arg_list, 292 "ARRAYMAX": exp.ArrayMax.from_arg_list, 293 "ARRAYMIN": exp.ArrayMin.from_arg_list, 294 "ARRAYREVERSE": exp.ArrayReverse.from_arg_list, 295 "ARRAYSLICE": exp.ArraySlice.from_arg_list, 296 "ARRAYFILTER": _build_array_lambda_func(exp.ArrayFilter, "arrayFilter"), 297 "ARRAYMAP": _build_array_lambda_func(exp.Transform, "arrayMap"), 298 "CURRENTDATABASE": exp.CurrentDatabase.from_arg_list, 299 "CURRENTSCHEMAS": exp.CurrentSchemas.from_arg_list, 300 "COUNTIF": _build_count_if, 301 "COUNTMATCHES": exp.RegexpCount.from_arg_list, 302 "CITYHASH64": exp.CityHash64.from_arg_list, 303 "COSINEDISTANCE": exp.CosineDistance.from_arg_list, 304 "VERSION": exp.CurrentVersion.from_arg_list, 305 "DATE_ADD": build_date_delta(exp.DateAdd, default_unit=None), 306 "DATEADD": build_date_delta(exp.DateAdd, default_unit=None), 307 "DATE_DIFF": build_date_delta(exp.DateDiff, default_unit=None, supports_timezone=True), 308 "DATEDIFF": build_date_delta(exp.DateDiff, default_unit=None, supports_timezone=True), 309 "DATE_FORMAT": _build_datetime_format(exp.TimeToStr), 310 "DATE_SUB": build_date_delta(exp.DateSub, default_unit=None), 311 "DATESUB": build_date_delta(exp.DateSub, default_unit=None), 312 "DATETRUNC": exp.DateTrunc.from_arg_list, 313 "FORMATDATETIME": _build_datetime_format(exp.TimeToStr), 314 "GROUPBITAND": exp.BitwiseAndAgg.from_arg_list, 315 "GROUPBITOR": exp.BitwiseOrAgg.from_arg_list, 316 "GROUPBITXOR": exp.BitwiseXorAgg.from_arg_list, 317 "HAS": exp.ArrayContains.from_arg_list, 318 "ILIKE": build_like(exp.ILike), 319 "ISINFINITE": exp.IsInf.from_arg_list, 320 "JSONEXTRACTRAW": build_json_extract_path( 321 exp.JSONExtract, zero_based_indexing=False, arrow_req_json_type=True 322 ), 323 "JSONEXTRACTSTRING": build_json_extract_path( 324 exp.JSONExtractScalar, zero_based_indexing=False, arrow_req_json_type=True 325 ), 326 "LENGTH": lambda args: exp.Length(this=seq_get(args, 0), binary=True), 327 "LIKE": build_like(exp.Like), 328 "L2Distance": exp.EuclideanDistance.from_arg_list, 329 "MAP": parser.build_var_map, 330 "MATCH": exp.RegexpLike.from_arg_list, 331 "NOTLIKE": build_like(exp.Like, not_like=True), 332 "PARSEDATETIME": _build_datetime_format(exp.ParseDatetime), 333 "RANDCANONICAL": exp.Rand.from_arg_list, 334 "STR_TO_DATE": _build_str_to_date, 335 "TIMESTAMP_SUB": build_date_delta(exp.TimestampSub, default_unit=None), 336 "TIMESTAMPSUB": build_date_delta(exp.TimestampSub, default_unit=None), 337 "TIMESTAMP_ADD": build_date_delta(exp.TimestampAdd, default_unit=None), 338 "TIMESTAMPADD": build_date_delta(exp.TimestampAdd, default_unit=None), 339 "TODAYOFWEEK": _build_without_extra_args(exp.DayOfWeekIso, "toDayOfWeek"), 340 "TOISOWEEK": _build_without_extra_args(exp.WeekOfYear, "toISOWeek"), 341 "TOISOYEAR": _build_without_extra_args(exp.YearOfWeekIso, "toISOYear"), 342 "TOMONDAY": _build_timestamp_trunc("WEEK"), 343 "UNIQ": exp.ApproxDistinct.from_arg_list, 344 "MD5": exp.MD5Digest.from_arg_list, 345 "SHA256": lambda args: exp.SHA2(this=seq_get(args, 0), length=exp.Literal.number(256)), 346 "SHA512": lambda args: exp.SHA2(this=seq_get(args, 0), length=exp.Literal.number(512)), 347 "SPLITBYCHAR": _build_split_by_char, 348 "SPLITBYREGEXP": _build_split(exp.RegexpSplit), 349 "SPLITBYSTRING": _build_split(exp.Split), 350 "SUBSTRINGINDEX": exp.SubstringIndex.from_arg_list, 351 "TOTYPENAME": exp.Typeof.from_arg_list, 352 "TRIMBOTH": exp.Trim.from_arg_list, 353 "TRIMLEFT": parser.build_trim, 354 "TRIMRIGHT": lambda args: parser.build_trim(args, is_left=False), 355 "EDITDISTANCE": exp.Levenshtein.from_arg_list, 356 "JAROWINKLERSIMILARITY": exp.JarowinklerSimilarity.from_arg_list, 357 "LEVENSHTEINDISTANCE": exp.Levenshtein.from_arg_list, 358 "UTCTIMESTAMP": exp.UtcTimestamp.from_arg_list, 359 } 360 361 AGG_FUNCTIONS: t.ClassVar = _AGG_FUNCTIONS 362 AGG_FUNCTIONS_SUFFIXES: t.ClassVar = _AGG_FUNCTIONS_SUFFIXES 363 364 FUNC_TOKENS = { 365 *parser.Parser.FUNC_TOKENS, 366 TokenType.AND, 367 TokenType.FILE, 368 TokenType.OR, 369 TokenType.PASTE, 370 TokenType.SET, 371 TokenType.VIEW, 372 } 373 374 RESERVED_TOKENS = parser.Parser.RESERVED_TOKENS - {TokenType.SELECT} 375 376 ID_VAR_TOKENS = { 377 *parser.Parser.ID_VAR_TOKENS, 378 TokenType.LIKE, 379 } 380 381 AGG_FUNC_MAPPING: t.ClassVar = _AGG_FUNC_MAPPING 382 383 @classmethod 384 def _resolve_clickhouse_agg(cls, name: str) -> tuple[str, Sequence[str]] | None: 385 # ClickHouse allows chaining multiple combinators on aggregate functions. 386 # See https://clickhouse.com/docs/sql-reference/aggregate-functions/combinators 387 # N.B. this resolution allows any suffix stack, including ones that ClickHouse rejects 388 # syntactically such as sumMergeMerge (due to repeated adjacent suffixes) 389 390 # Until we are able to identify a 1- or 0-suffix aggregate function by name, 391 # repeatedly strip and queue suffixes (checking longer suffixes first, see comment on 392 # AGG_FUNCTIONS_SUFFIXES_SORTED). This loop only runs for 2 or more suffixes, 393 # as AGG_FUNC_MAPPING memoizes all 0- and 1-suffix 394 accumulated_suffixes: deque[str] = deque() 395 while (parts := _AGG_FUNC_MAPPING.get(name)) is None: 396 for suffix in _AGG_FUNCTIONS_SUFFIXES: 397 if name.endswith(suffix) and len(name) != len(suffix): 398 accumulated_suffixes.appendleft(suffix) 399 name = name[: -len(suffix)] 400 break 401 else: 402 return None 403 404 # We now have a 0- or 1-suffix aggregate 405 agg_func_name, inner_suffix = parts 406 if inner_suffix: 407 # this is a 1-suffix aggregate (either naturally or via repeated suffix 408 # stripping). prepend the innermost suffix. 409 accumulated_suffixes.appendleft(inner_suffix) 410 411 return (agg_func_name, accumulated_suffixes) 412 413 FUNCTION_PARSERS = { 414 **{k: v for k, v in parser.Parser.FUNCTION_PARSERS.items() if k != "MATCH"}, 415 "ARRAYJOIN": lambda self: self.expression(exp.Explode(this=self._parse_expression())), 416 "GROUPCONCAT": lambda self: self._parse_group_concat(), 417 "QUANTILE": lambda self: self._parse_quantile(), 418 "MEDIAN": lambda self: self._parse_quantile(), 419 "COLUMNS": lambda self: self._parse_columns(), 420 "TUPLE": lambda self: exp.Struct.from_arg_list(self._parse_function_args(alias=True)), 421 "AND": lambda self: self._parse_connector_function(exp.and_), 422 "OR": lambda self: self._parse_connector_function(exp.or_), 423 "XOR": lambda self: exp.xor(*self._parse_function_args(alias=False)), 424 "VIEW": lambda self: self.expression( 425 exp.Anonymous(this="view", expressions=[self._parse_select()]) 426 ), 427 } 428 429 PROPERTY_PARSERS = { 430 **{k: v for k, v in parser.Parser.PROPERTY_PARSERS.items() if k != "DYNAMIC"}, 431 "ENGINE": lambda self: self._parse_engine_property(), 432 "REFRESH": lambda self: self._parse_auto_refresh_property(), 433 "UUID": lambda self: self.expression(exp.UuidProperty(this=self._parse_string())), 434 } 435 436 NO_PAREN_FUNCTION_PARSERS = { 437 k: v for k, v in parser.Parser.NO_PAREN_FUNCTION_PARSERS.items() if k != "ANY" 438 } 439 440 NO_PAREN_FUNCTIONS = { 441 k: v 442 for k, v in parser.Parser.NO_PAREN_FUNCTIONS.items() 443 if k != TokenType.CURRENT_TIMESTAMP 444 } 445 446 RANGE_PARSERS = { 447 **parser.Parser.RANGE_PARSERS, 448 TokenType.GLOBAL: lambda self, this: self._parse_global_in(this), 449 } 450 451 COLUMN_OPERATORS = { 452 **{k: v for k, v in parser.Parser.COLUMN_OPERATORS.items() if k != TokenType.PLACEHOLDER}, 453 TokenType.DOTCARET: lambda self, this, field: self.expression( 454 exp.NestedJSONSelect(this=this, expression=field) 455 ), 456 } 457 458 JOIN_KINDS = { 459 *parser.Parser.JOIN_KINDS, 460 TokenType.ALL, 461 TokenType.ANY, 462 TokenType.ASOF, 463 TokenType.ARRAY, 464 TokenType.PASTE, 465 } 466 467 TABLE_ALIAS_TOKENS = parser.Parser.TABLE_ALIAS_TOKENS - { 468 TokenType.ALL, 469 TokenType.ANY, 470 TokenType.ARRAY, 471 TokenType.ASOF, 472 TokenType.FINAL, 473 TokenType.FORMAT, 474 TokenType.PASTE, 475 TokenType.SETTINGS, 476 } 477 478 ALIAS_TOKENS = parser.Parser.ALIAS_TOKENS - { 479 TokenType.FORMAT, 480 TokenType.SETTINGS, 481 } 482 483 LOG_DEFAULTS_TO_LN = True 484 485 QUERY_MODIFIER_PARSERS = { 486 **parser.Parser.QUERY_MODIFIER_PARSERS, 487 TokenType.SETTINGS: lambda self: ( 488 "settings", 489 self._advance() or self._parse_csv(self._parse_assignment), 490 ), 491 TokenType.FORMAT: lambda self: ("format", self._advance() or self._parse_id_var()), 492 } 493 494 CONSTRAINT_PARSERS = { 495 **parser.Parser.CONSTRAINT_PARSERS, 496 "INDEX": lambda self: self._parse_index_constraint(), 497 "CODEC": lambda self: self._parse_compress(), 498 "ASSUME": lambda self: self._parse_assume_constraint(), 499 } 500 501 ALTER_PARSERS = { 502 **parser.Parser.ALTER_PARSERS, 503 "MODIFY": lambda self: self._parse_alter_table_alter(), 504 "REPLACE": lambda self: self._parse_alter_table_replace(), 505 } 506 507 SCHEMA_UNNAMED_CONSTRAINTS = { 508 *parser.Parser.SCHEMA_UNNAMED_CONSTRAINTS, 509 "INDEX", 510 } - {"CHECK"} 511 512 PLACEHOLDER_PARSERS = { 513 **parser.Parser.PLACEHOLDER_PARSERS, 514 TokenType.L_BRACE: lambda self: self._parse_query_parameter(), 515 } 516 517 STATEMENT_PARSERS = { 518 **parser.Parser.STATEMENT_PARSERS, 519 TokenType.DETACH: lambda self: self._parse_detach(), 520 } 521 522 def _parse_wrapped_select_or_assignment(self) -> exp.Expr | None: 523 return self._parse_wrapped( 524 lambda: self._parse_select() or self._parse_assignment(), optional=True 525 ) 526 527 def _parse_check_constraint(self) -> exp.CheckColumnConstraint | None: 528 return self.expression( 529 exp.CheckColumnConstraint(this=self._parse_wrapped_select_or_assignment()) 530 ) 531 532 def _parse_assume_constraint(self) -> exp.AssumeColumnConstraint | None: 533 return self.expression( 534 exp.AssumeColumnConstraint(this=self._parse_wrapped_select_or_assignment()) 535 ) 536 537 def _parse_engine_property(self) -> exp.EngineProperty: 538 self._match(TokenType.EQ) 539 return self.expression( 540 exp.EngineProperty(this=self._parse_field(any_token=True, anonymous_func=True)) 541 ) 542 543 # https://clickhouse.com/docs/en/sql-reference/statements/create/function 544 def _parse_user_defined_function_expression(self) -> exp.Expr | None: 545 return self._parse_lambda() 546 547 def _parse_types( 548 self, 549 check_func: bool = False, 550 schema: bool = False, 551 allow_identifiers: bool = True, 552 with_collation: bool = False, 553 ) -> exp.Expr | None: 554 dtype = super()._parse_types( 555 check_func=check_func, 556 schema=schema, 557 allow_identifiers=allow_identifiers, 558 with_collation=with_collation, 559 ) 560 if isinstance(dtype, exp.DataType) and dtype.args.get("nullable") is not True: 561 # Mark every type as non-nullable which is ClickHouse's default, unless it's 562 # already marked as nullable. This marker helps us transpile types from other 563 # dialects to ClickHouse, so that we can e.g. produce `CAST(x AS Nullable(String))` 564 # from `CAST(x AS TEXT)`. If there is a `NULL` value in `x`, the former would 565 # fail in ClickHouse without the `Nullable` type constructor. 566 dtype.set("nullable", False) 567 568 return dtype 569 570 def _parse_extract(self) -> exp.Extract | exp.Anonymous: 571 index = self._index 572 this = self._parse_bitwise() 573 if self._match(TokenType.FROM): 574 self._retreat(index) 575 return super()._parse_extract() 576 577 # We return Anonymous here because extract and regexpExtract have different semantics, 578 # so parsing extract(foo, bar) into RegexpExtract can potentially break queries. E.g., 579 # `extract('foobar', 'b')` works, but ClickHouse crashes for `regexpExtract('foobar', 'b')`. 580 # 581 # TODO: can we somehow convert the former into an equivalent `regexpExtract` call? 582 self._match(TokenType.COMMA) 583 return self.expression( 584 exp.Anonymous(this="extract", expressions=[this, self._parse_bitwise()]) 585 ) 586 587 def _parse_assignment(self) -> exp.Expr | None: 588 this = super()._parse_assignment() 589 590 if self._match(TokenType.PLACEHOLDER): 591 return self.expression( 592 exp.If( 593 this=this, 594 true=self._parse_assignment(), 595 false=self._match(TokenType.COLON) and self._parse_assignment(), 596 ) 597 ) 598 599 return this 600 601 def _parse_query_parameter(self) -> exp.Expr | None: 602 """ 603 Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier} 604 https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters 605 """ 606 index = self._index 607 608 this = self._parse_id_var() 609 self._match(TokenType.COLON) 610 kind = self._parse_types(check_func=False, allow_identifiers=False) or ( 611 self._match_text_seq("IDENTIFIER") and "Identifier" 612 ) 613 614 if not kind: 615 self._retreat(index) 616 return None 617 elif not self._match(TokenType.R_BRACE): 618 self.raise_error("Expecting }") 619 620 if isinstance(this, exp.Identifier) and not this.quoted: 621 this = exp.var(this.name) 622 623 return self.expression(exp.Placeholder(this=this, kind=kind)) 624 625 def _parse_bracket(self, this: exp.Expr | None = None) -> exp.Expr | None: 626 if this: 627 bracket_json_type = None 628 629 while self._match_pair(TokenType.L_BRACKET, TokenType.R_BRACKET): 630 bracket_json_type = exp.DataType( 631 this=exp.DType.ARRAY, 632 expressions=[ 633 bracket_json_type 634 or exp.DType.JSON.into_expr(dialect=self.dialect, nullable=False) 635 ], 636 nested=True, 637 ) 638 639 if bracket_json_type: 640 return self.expression(exp.JSONCast(this=this, to=bracket_json_type)) 641 642 l_brace = self._match(TokenType.L_BRACE, advance=False) 643 bracket = super()._parse_bracket(this) 644 645 if l_brace and isinstance(bracket, exp.Struct): 646 varmap = exp.VarMap(keys=exp.Array(), values=exp.Array()) 647 for expression in bracket.expressions: 648 if not isinstance(expression, exp.PropertyEQ): 649 break 650 651 varmap.args["keys"].append("expressions", exp.Literal.string(expression.name)) 652 varmap.args["values"].append("expressions", expression.expression) 653 654 return varmap 655 656 return bracket 657 658 def _parse_global_in(self, this: exp.Expr | None) -> exp.Not | exp.In | None: 659 index = self._index - 1 660 is_negated = self._match(TokenType.NOT) 661 if not self._match(TokenType.IN): 662 self._retreat(index) 663 return None 664 665 in_expr = self._parse_in(this) 666 in_expr.set("is_global", True) 667 return self.expression(exp.Not(this=in_expr)) if is_negated else in_expr 668 669 def _parse_table( 670 self, 671 schema: bool = False, 672 joins: bool = False, 673 alias_tokens: Collection[TokenType] | None = None, 674 parse_bracket: bool = False, 675 is_db_reference: bool = False, 676 parse_partition: bool = False, 677 consume_pipe: bool = False, 678 ) -> exp.Expr | None: 679 this = super()._parse_table( 680 schema=schema, 681 joins=joins, 682 alias_tokens=alias_tokens, 683 parse_bracket=parse_bracket, 684 is_db_reference=is_db_reference, 685 ) 686 687 if isinstance(this, exp.Table): 688 inner = this.this 689 alias = this.args.get("alias") 690 691 if isinstance(inner, exp.GenerateSeries) and alias and not alias.columns: 692 alias.set("columns", [exp.to_identifier("generate_series")]) 693 694 if self._match(TokenType.FINAL): 695 this = self.expression(exp.Final(this=this)) 696 697 return this 698 699 def _parse_position(self, haystack_first: bool = False) -> exp.StrPosition: 700 return super()._parse_position(haystack_first=True) 701 702 # https://clickhouse.com/docs/en/sql-reference/statements/select/with/ 703 def _parse_cte(self) -> exp.CTE | exp.FunctionSpecification | None: 704 # WITH <identifier> AS <subquery expression> 705 cte: exp.CTE | exp.FunctionSpecification | None = self._try_parse(super()._parse_cte) 706 707 if not cte: 708 # WITH <expression> AS <identifier> 709 cte = self.expression( 710 exp.CTE(this=self._parse_assignment(), alias=self._parse_table_alias(), scalar=True) 711 ) 712 713 return cte 714 715 def _parse_join_parts( 716 self, 717 ) -> tuple[Token | None, Token | None, Token | None]: 718 method = self._prev if self._match_set((TokenType.GLOBAL, TokenType.NATURAL)) else None 719 720 kind_pre = self._prev if self._match_set(self.JOIN_KINDS) else None 721 side = self._prev if self._match_set(self.JOIN_SIDES) else None 722 kind = self._prev if self._match_set(self.JOIN_KINDS) else None 723 724 return method, side or kind, kind_pre or kind 725 726 def _parse_join( 727 self, 728 skip_join_token: bool = False, 729 parse_bracket: bool = False, 730 alias_tokens: t.Collection[TokenType] | None = None, 731 ) -> exp.Join | None: 732 join = super()._parse_join( 733 skip_join_token=skip_join_token, parse_bracket=True, alias_tokens=alias_tokens 734 ) 735 if join: 736 if join.method == "GLOBAL": 737 join.set("method", None) 738 join.set("global_", "GLOBAL") 739 740 # tbl ARRAY JOIN arr <-- this should be a `Column` reference, not a `Table` 741 # https://clickhouse.com/docs/en/sql-reference/statements/select/array-join 742 if join.kind == "ARRAY": 743 for table in join.find_all(exp.Table): 744 table.replace(table.to_column()) 745 746 return join 747 748 def _parse_function( 749 self, 750 functions: dict[str, t.Callable] | None = None, 751 anonymous: bool = False, 752 optional_parens: bool = True, 753 any_token: bool = False, 754 ) -> exp.Expr | None: 755 expr = super()._parse_function( 756 functions=functions, 757 anonymous=anonymous, 758 optional_parens=optional_parens, 759 any_token=any_token, 760 ) 761 762 func = expr.this if isinstance(expr, exp.Window) else expr 763 764 # Aggregate functions can be split in 2 parts: <func_name><suffix[es]> 765 parts = self._resolve_clickhouse_agg(func.name) if isinstance(func, exp.Anonymous) else None 766 767 if parts: 768 anon_func: exp.Anonymous = t.cast(exp.Anonymous, func) 769 params = self._parse_func_params(anon_func) 770 771 if len(parts[1]) > 0: 772 exp_class: Type[exp.Expr] = ( 773 exp.CombinedParameterizedAgg if params else exp.CombinedAggFunc 774 ) 775 else: 776 exp_class = exp.ParameterizedAgg if params else exp.AnonymousAggFunc 777 778 instance = exp_class(this=anon_func.this, expressions=anon_func.expressions) 779 if params: 780 instance.set("params", params) 781 func = self.expression(instance) 782 783 if isinstance(expr, exp.Window): 784 # The window's func was parsed as Anonymous in base parser, fix its 785 # type to be ClickHouse style CombinedAnonymousAggFunc / AnonymousAggFunc 786 expr.set("this", func) 787 elif params: 788 # Params have blocked super()._parse_function() from parsing the following window 789 # (if that exists) as they're standing between the function call and the window spec 790 expr = self._parse_window(func) 791 else: 792 expr = func 793 794 return expr 795 796 def _parse_func_params(self, this: exp.Func | None = None) -> list[exp.Expr] | None: 797 if self._match_pair(TokenType.R_PAREN, TokenType.L_PAREN): 798 return self._parse_csv(self._parse_lambda) 799 800 if self._match(TokenType.L_PAREN): 801 params = self._parse_csv(self._parse_lambda) 802 self._match_r_paren(this) 803 return params 804 805 return None 806 807 def _parse_group_concat(self) -> exp.GroupConcat: 808 args = self._parse_csv(self._parse_lambda) 809 params = self._parse_func_params() 810 811 if params: 812 # groupConcat(sep [, limit])(expr) 813 separator = seq_get(args, 0) 814 limit = seq_get(args, 1) 815 this: exp.Expr | None = seq_get(params, 0) 816 if limit is not None: 817 this = exp.Limit(this=this, expression=limit) 818 return self.expression(exp.GroupConcat(this=this, separator=separator)) 819 820 # groupConcat(expr) 821 return self.expression(exp.GroupConcat(this=seq_get(args, 0))) 822 823 def _parse_quantile(self) -> exp.Quantile: 824 this = self._parse_lambda() 825 params = self._parse_func_params() 826 if params: 827 return self.expression(exp.Quantile(this=params[0], quantile=this)) 828 return self.expression(exp.Quantile(this=this, quantile=exp.Literal.number(0.5))) 829 830 def _parse_wrapped_id_vars(self, optional: bool = False) -> list[exp.Expr]: 831 return super()._parse_wrapped_id_vars(optional=True) 832 833 def _parse_column_def( 834 self, this: exp.Expr | None, computed_column: bool = True 835 ) -> exp.Expr | None: 836 if self._match(TokenType.DOT): 837 return exp.Dot(this=this, expression=self._parse_id_var()) 838 839 return super()._parse_column_def(this, computed_column=computed_column) 840 841 def _parse_primary_key( 842 self, 843 wrapped_optional: bool = False, 844 in_props: bool = False, 845 named_primary_key: bool = False, 846 ) -> exp.PrimaryKeyColumnConstraint | exp.PrimaryKey: 847 return super()._parse_primary_key( 848 wrapped_optional=wrapped_optional or in_props, 849 in_props=in_props, 850 named_primary_key=named_primary_key, 851 ) 852 853 def _parse_on_property(self) -> exp.Expr | None: 854 index = self._index 855 if self._match_text_seq("CLUSTER"): 856 this = self._parse_string() or self._parse_id_var() 857 if this: 858 return self.expression(exp.OnCluster(this=this)) 859 else: 860 self._retreat(index) 861 return None 862 863 def _parse_auto_refresh_property(self) -> exp.AutoRefreshProperty | None: 864 index = self._index - 1 865 cadence = self._prev.text.upper() if self._match_texts(("EVERY", "AFTER")) else None 866 interval = ( 867 self._parse_interval(require_interval=False, parse_function_unit=False) 868 if cadence 869 else None 870 ) 871 872 if cadence and not interval: 873 self._retreat(index) 874 return None 875 876 offset = None 877 if self._match_text_seq("OFFSET"): 878 offset = self._parse_interval(require_interval=False, parse_function_unit=False) 879 if not offset: 880 self._retreat(index) 881 return None 882 883 randomize = None 884 if self._match_text_seq("RANDOMIZE", "FOR"): 885 randomize = self._parse_interval(require_interval=False, parse_function_unit=False) 886 if not randomize: 887 self._retreat(index) 888 return None 889 890 dependencies = None 891 if self._match_text_seq("DEPENDS", "ON"): 892 dependencies = self._parse_csv(lambda: self._parse_table_parts(schema=True)) 893 if not dependencies: 894 self._retreat(index) 895 return None 896 897 if not cadence and not dependencies: 898 self._retreat(index) 899 return None 900 901 settings = self._parse_settings_property() if self._match_text_seq("SETTINGS") else None 902 903 return self.expression( 904 exp.AutoRefreshProperty( 905 this=interval, 906 cadence=cadence, 907 offset=offset, 908 randomize=randomize, 909 expressions=dependencies, 910 settings=settings, 911 append=self._match_text_seq("APPEND"), 912 ) 913 ) 914 915 def _parse_index_constraint(self, kind: str | None = None) -> exp.IndexColumnConstraint: 916 # INDEX name1 expr TYPE type1(args) GRANULARITY value 917 this = self._parse_id_var() 918 expression = self._parse_assignment() 919 920 index_type = self._match_text_seq("TYPE") and (self._parse_function() or self._parse_var()) 921 922 granularity = self._match_text_seq("GRANULARITY") and self._parse_term() 923 924 return self.expression( 925 exp.IndexColumnConstraint( 926 this=this, expression=expression, index_type=index_type, granularity=granularity 927 ) 928 ) 929 930 def _parse_partition(self) -> exp.Partition | None: 931 # https://clickhouse.com/docs/en/sql-reference/statements/alter/partition#how-to-set-partition-expression 932 if not self._match(TokenType.PARTITION): 933 return None 934 935 if self._match_text_seq("ID"): 936 # Corresponds to the PARTITION ID <string_value> syntax 937 expressions: list[exp.Expr] = [ 938 self.expression(exp.PartitionId(this=self._parse_string())) 939 ] 940 else: 941 expressions = self._parse_expressions() 942 943 return self.expression(exp.Partition(expressions=expressions)) 944 945 def _parse_alter_table_replace(self) -> exp.Expr | None: 946 partition = self._parse_partition() 947 948 if not partition or not self._match(TokenType.FROM): 949 return None 950 951 return self.expression( 952 exp.ReplacePartition(expression=partition, source=self._parse_table_parts()) 953 ) 954 955 def _parse_alter_table_alter(self) -> exp.Expr | None: 956 # MODIFY forms other than MODIFY COLUMN (SQL SECURITY, ORDER BY, TTL, COMMENT, ...) 957 # are parsed as properties, since ALTER can now reach this path too 958 if self._prev.text.upper() == "MODIFY" and not self._match(TokenType.COLUMN, advance=False): 959 if properties := self._parse_properties(): 960 return self.expression( 961 exp.AlterModifySqlSecurity(expressions=properties.expressions) 962 ) 963 return None 964 965 # https://clickhouse.com/docs/sql-reference/statements/alter/column#modify-column 966 alter = super()._parse_alter_table_alter() 967 return None if self._curr else alter 968 969 def _parse_definer(self) -> exp.DefinerProperty | None: 970 self._match(TokenType.EQ) 971 if self._match(TokenType.CURRENT_USER): 972 return exp.DefinerProperty(this=exp.Var(this=self._prev.text.upper())) 973 return exp.DefinerProperty(this=self._parse_string()) 974 975 def _parse_projection_def(self) -> exp.ProjectionDef | None: 976 if not self._match(TokenType.PROJECTION): 977 return None 978 979 return self.expression( 980 exp.ProjectionDef( 981 this=self._parse_id_var(), expression=self._parse_wrapped(self._parse_statement) 982 ) 983 ) 984 985 def _parse_constraint(self) -> exp.Expr | None: 986 return super()._parse_constraint() or self._parse_projection_def() 987 988 def _parse_alias(self, this: exp.Expr | None, explicit: bool = False) -> exp.Expr | None: 989 # In clickhouse "SELECT <expr> APPLY(...)" is a query modifier, 990 # so "APPLY" shouldn't be parsed as <expr>'s alias. However, "SELECT <expr> apply" is a valid alias 991 if self._match_pair(TokenType.APPLY, TokenType.L_PAREN, advance=False): 992 return this 993 994 return super()._parse_alias(this=this, explicit=explicit) 995 996 def _parse_expression(self) -> exp.Expr | None: 997 this = super()._parse_expression() 998 999 # Clickhouse allows "SELECT <expr> [APPLY(func)] [...]]" modifier 1000 while self._match_pair(TokenType.APPLY, TokenType.L_PAREN): 1001 this = exp.Apply(this=this, expression=self._parse_var(any_token=True)) 1002 self._match(TokenType.R_PAREN) 1003 1004 return this 1005 1006 def _parse_columns(self) -> exp.Expr: 1007 this: exp.Expr = self.expression(exp.Columns(this=self._parse_lambda())) 1008 1009 while self._next and self._match_text_seq(")", "APPLY", "("): 1010 self._match(TokenType.R_PAREN) 1011 this = exp.Apply(this=this, expression=self._parse_var(any_token=True)) 1012 return this 1013 1014 def _parse_value(self, values: bool = True) -> exp.Tuple | None: 1015 value = super()._parse_value(values=values) 1016 if not value: 1017 return None 1018 1019 # In Clickhouse "SELECT * FROM VALUES (1, 2, 3)" generates a table with a single column, in contrast 1020 # to other dialects. For this case, we canonicalize the values into a tuple-of-tuples AST if it's not already one. 1021 # In INSERT INTO statements the same clause actually references multiple columns (opposite semantics), 1022 # but the final result is not altered by the extra parentheses. 1023 # Note: Clickhouse allows VALUES([structure], value, ...) so the branch checks for the last expression 1024 # A single-value tuple is generated as "(x)", which is parsed back into a Paren 1025 # rather than a Tuple, so it's unwrapped here to keep this rewrite idempotent 1026 expressions = value.expressions 1027 if values and not isinstance(expressions[-1], exp.Tuple): 1028 value.set( 1029 "expressions", 1030 [self.expression(exp.Tuple(expressions=[expr.unnest()])) for expr in expressions], 1031 ) 1032 1033 return value 1034 1035 def _parse_partitioned_by(self) -> exp.PartitionedByProperty: 1036 # ClickHouse allows custom expressions as partition key 1037 # https://clickhouse.com/docs/engines/table-engines/mergetree-family/custom-partitioning-key 1038 return self.expression(exp.PartitionedByProperty(this=self._parse_assignment())) 1039 1040 def _parse_detach(self) -> exp.Detach: 1041 kind = self._match_set(self.DB_CREATABLES) and self._prev.text.upper() 1042 exists = self._parse_exists() 1043 this = self._parse_table_parts() 1044 1045 return self.expression( 1046 exp.Detach( 1047 this=this, 1048 kind=kind, 1049 exists=exists, 1050 cluster=self._parse_on_property() if self._match(TokenType.ON) else None, 1051 permanent=self._match_text_seq("PERMANENTLY"), 1052 sync=self._match_text_seq("SYNC"), 1053 ) 1054 )
Parser consumes a list of tokens produced by the Tokenizer and produces a parsed syntax tree.
Arguments:
- error_level: The desired error level. Default: ErrorLevel.IMMEDIATE
- error_message_context: The amount of context to capture from a query string when displaying the error message (in number of characters). Default: 100
- max_errors: Maximum number of error messages to include in a raised ParseError. This is only relevant if error_level is ErrorLevel.RAISE. Default: 3
- max_nodes: Maximum number of AST nodes to prevent memory exhaustion. Set to -1 (default) to disable the check.
FUNCTIONS =
{'AI_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.AIAgg'>>, 'AI_CLASSIFY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.AIClassify'>>, 'AI_EMBED': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.AIEmbed'>>, 'A_I_FORECAST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.AIForecast'>>, 'AI_GENERATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.AIGenerate'>>, 'AI_SIMILARITY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.AISimilarity'>>, 'AI_SUMMARIZE_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.AISummarizeAgg'>>, 'ABS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Abs'>>, 'ACOS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Acos'>>, 'ACOSH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Acosh'>>, 'ADD_MONTHS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.AddMonths'>>, 'AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Agg'>>, 'AND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.And'>>, 'ANONYMOUS_AGG_FUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.AnonymousAggFunc'>>, 'ANY_VALUE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.AnyValue'>>, 'APPLY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Apply'>>, 'APPROX_DISTINCT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.ApproxDistinct'>>, 'APPROX_COUNT_DISTINCT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.ApproxDistinct'>>, 'APPROX_PERCENTILE_ACCUMULATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproxPercentileAccumulate'>>, 'APPROX_PERCENTILE_COMBINE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproxPercentileCombine'>>, 'APPROX_PERCENTILE_ESTIMATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproxPercentileEstimate'>>, 'APPROX_QUANTILE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproxQuantile'>>, 'APPROX_QUANTILES': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproxQuantiles'>>, 'APPROX_TOP_K': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproxTopK'>>, 'APPROX_TOP_K_ACCUMULATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproxTopKAccumulate'>>, 'APPROX_TOP_K_COMBINE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproxTopKCombine'>>, 'APPROX_TOP_K_ESTIMATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproxTopKEstimate'>>, 'APPROXIMATE_SIMILARITY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproximateSimilarity'>>, 'APPROXIMATE_JACCARD_INDEX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproximateSimilarity'>>, 'ARG_MAX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ArgMax'>>, 'ARGMAX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ArgMax'>>, 'MAX_BY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ArgMax'>>, 'ARG_MIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ArgMin'>>, 'ARGMIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ArgMin'>>, 'MIN_BY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ArgMin'>>, 'ARRAY': <function Parser.<lambda>>, 'ARRAY_AGG': <function Parser.<lambda>>, 'ARRAY_ALL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayAll'>>, 'ARRAY_ANY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayAny'>>, 'ARRAY_APPEND': <function build_array_append>, 'ARRAY_COMPACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayCompact'>>, 'ARRAY_CONCAT': <function build_array_concat>, 'ARRAY_CAT': <function build_array_concat>, 'ARRAY_CONCAT_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ArrayConcatAgg'>>, 'ARRAY_CONSTRUCT_COMPACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayConstructCompact'>>, 'ARRAY_CONTAINED_BY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayContainedBy'>>, 'ARRAY_CONTAINS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayContains'>>, 'ARRAY_HAS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayContains'>>, 'ARRAY_CONTAINS_ALL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayContainsAll'>>, 'ARRAY_HAS_ALL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayContainsAll'>>, 'ARRAY_DISTINCT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayDistinct'>>, 'ARRAY_EXCEPT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayExcept'>>, 'FILTER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayFilter'>>, 'ARRAY_FILTER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayFilter'>>, 'ARRAY_FIRST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayFirst'>>, 'ARRAY_INSERT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayInsert'>>, 'ARRAY_INTERSECT': <function Parser.<lambda>>, 'ARRAY_INTERSECTION': <function Parser.<lambda>>, 'ARRAY_LAST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayLast'>>, 'ARRAY_MAX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayMax'>>, 'ARRAY_MIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayMin'>>, 'ARRAY_OVERLAPS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayOverlaps'>>, 'ARRAY_POSITION': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayPosition'>>, 'ARRAY_PREPEND': <function build_array_prepend>, 'ARRAY_REMOVE': <function build_array_remove>, 'ARRAY_REMOVE_AT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayRemoveAt'>>, 'ARRAY_REVERSE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayReverse'>>, 'ARRAY_SIZE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArraySize'>>, 'ARRAY_LENGTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArraySize'>>, 'ARRAY_SLICE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArraySlice'>>, 'ARRAY_SORT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArraySort'>>, 'ARRAY_SUM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArraySum'>>, 'ARRAY_TO_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayToString'>>, 'ARRAY_JOIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayToString'>>, 'ARRAY_UNION_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ArrayUnionAgg'>>, 'ARRAY_UNIQUE_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ArrayUniqueAgg'>>, 'ARRAYS_ZIP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArraysZip'>>, 'ASCII': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Ascii'>>, 'ASIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Asin'>>, 'ASINH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Asinh'>>, 'ATAN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Atan'>>, 'ATAN2': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Atan2'>>, 'ATANH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Atanh'>>, 'AVG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Avg'>>, 'BASE64_DECODE_BINARY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Base64DecodeBinary'>>, 'BASE64_DECODE_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Base64DecodeString'>>, 'BASE64_ENCODE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Base64Encode'>>, 'BIT_LENGTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.BitLength'>>, 'BITMAP_BIT_POSITION': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitmapBitPosition'>>, 'BITMAP_BUCKET_NUMBER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitmapBucketNumber'>>, 'BITMAP_CONSTRUCT_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitmapConstructAgg'>>, 'BITMAP_COUNT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitmapCount'>>, 'BITMAP_OR_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitmapOrAgg'>>, 'BITWISE_AND_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitwiseAndAgg'>>, 'BITWISE_COUNT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitwiseCount'>>, 'BITWISE_OR_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitwiseOrAgg'>>, 'BITWISE_XOR_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitwiseXorAgg'>>, 'BOOLAND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Booland'>>, 'BOOLNOT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Boolnot'>>, 'BOOLOR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Boolor'>>, 'BOOLXOR_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BoolxorAgg'>>, 'BYTE_LENGTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ByteLength'>>, 'CASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Case'>>, 'CAST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Cast'>>, 'CAST_TO_STR_TYPE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CastToStrType'>>, 'CBRT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Cbrt'>>, 'CEIL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Ceil'>>, 'CEILING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Ceil'>>, 'CHECK_JSON': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.CheckJson'>>, 'CHECK_XML': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CheckXml'>>, 'CHR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Chr'>>, 'CHAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Chr'>>, 'CITY_HASH64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.CityHash64'>>, 'COALESCE': <function build_coalesce>, 'IFNULL': <function build_coalesce>, 'NVL': <function build_coalesce>, 'CODE_POINTS_TO_BYTES': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.CodePointsToBytes'>>, 'CODE_POINTS_TO_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.CodePointsToString'>>, 'COLLATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Collate'>>, 'COLLATION': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Collation'>>, 'COLUMNS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Columns'>>, 'COMBINED_AGG_FUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.CombinedAggFunc'>>, 'COMBINED_PARAMETERIZED_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.CombinedParameterizedAgg'>>, 'COMPRESS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Compress'>>, 'CONCAT': <function Parser.<lambda>>, 'CONCAT_WS': <function Parser.<lambda>>, 'CONNECT_BY_ROOT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.ConnectByRoot'>>, 'CONTAINS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Contains'>>, 'CONVERT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Convert'>>, 'CONVERT_TIMEZONE': <function build_convert_timezone>, 'CONVERT_TO_CHARSET': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ConvertToCharset'>>, 'CORR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Corr'>>, 'COS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Cos'>>, 'COSH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Cosh'>>, 'COSINE_DISTANCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.CosineDistance'>>, 'COT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Cot'>>, 'COTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Coth'>>, 'COUNT': <function Parser.<lambda>>, 'COUNT_IF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.CountIf'>>, 'COUNTIF': <function _build_count_if>, 'COVAR_POP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.CovarPop'>>, 'COVAR_SAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.CovarSamp'>>, 'CSC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Csc'>>, 'CSCH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Csch'>>, 'CUME_DIST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.CumeDist'>>, 'CURRENT_ACCOUNT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentAccount'>>, 'CURRENT_ACCOUNT_NAME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentAccountName'>>, 'CURRENT_AVAILABLE_ROLES': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentAvailableRoles'>>, 'CURRENT_CATALOG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentCatalog'>>, 'CURRENT_CLIENT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentClient'>>, 'CURRENT_DATABASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentDatabase'>>, 'CURRENT_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.CurrentDate'>>, 'CURRENT_DATETIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.CurrentDatetime'>>, 'CURRENT_IP_ADDRESS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentIpAddress'>>, 'CURRENT_ORGANIZATION_NAME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentOrganizationName'>>, 'CURRENT_ORGANIZATION_USER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentOrganizationUser'>>, 'CURRENT_REGION': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentRegion'>>, 'CURRENT_ROLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentRole'>>, 'CURRENT_ROLE_TYPE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentRoleType'>>, 'CURRENT_SCHEMA': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentSchema'>>, 'CURRENT_SCHEMAS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentSchemas'>>, 'CURRENT_SECONDARY_ROLES': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentSecondaryRoles'>>, 'CURRENT_SESSION': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentSession'>>, 'CURRENT_STATEMENT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentStatement'>>, 'CURRENT_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.CurrentTime'>>, 'CURRENT_TIMESTAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.CurrentTimestamp'>>, 'CURRENT_TIMESTAMP_L_T_Z': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.CurrentTimestampLTZ'>>, 'CURRENT_TIMEZONE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.CurrentTimezone'>>, 'CURRENT_TRANSACTION': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentTransaction'>>, 'CURRENT_USER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentUser'>>, 'CURRENT_USER_ID': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentUserId'>>, 'CURRENT_VERSION': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentVersion'>>, 'CURRENT_WAREHOUSE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentWarehouse'>>, 'DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Date'>>, 'DATE_ADD': <function build_date_delta.<locals>._builder>, 'DATE_BIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DateBin'>>, 'DATEDIFF': <function build_date_delta.<locals>._builder>, 'DATE_DIFF': <function build_date_delta.<locals>._builder>, 'DATE_FROM_PARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DateFromParts'>>, 'DATEFROMPARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DateFromParts'>>, 'DATE_FROM_UNIX_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DateFromUnixDate'>>, 'DATE_STR_TO_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DateStrToDate'>>, 'DATE_SUB': <function build_date_delta.<locals>._builder>, 'DATE_TO_DATE_STR': <function Parser.<lambda>>, 'DATE_TO_DI': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DateToDi'>>, 'DATE_TRUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DateTrunc'>>, 'DATETIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Datetime'>>, 'DATETIME_ADD': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DatetimeAdd'>>, 'DATETIME_DIFF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DatetimeDiff'>>, 'DATETIME_SUB': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DatetimeSub'>>, 'DATETIME_TRUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DatetimeTrunc'>>, 'DAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Day'>>, 'DAY_OF_MONTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DayOfMonth'>>, 'DAYOFMONTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DayOfMonth'>>, 'DAY_OF_WEEK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DayOfWeek'>>, 'DAYOFWEEK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DayOfWeek'>>, 'DAYOFWEEK_ISO': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DayOfWeekIso'>>, 'ISODOW': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DayOfWeekIso'>>, 'DAY_OF_YEAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DayOfYear'>>, 'DAYOFYEAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DayOfYear'>>, 'DAYNAME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Dayname'>>, 'DECODE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Decode'>>, 'DECODE_CASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.DecodeCase'>>, 'DECOMPRESS_BINARY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.DecompressBinary'>>, 'DECOMPRESS_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.DecompressString'>>, 'DECRYPT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Decrypt'>>, 'DECRYPT_RAW': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.DecryptRaw'>>, 'DEGREES': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Degrees'>>, 'DENSE_RANK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.DenseRank'>>, 'DI_TO_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DiToDate'>>, 'DOT_PRODUCT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.DotProduct'>>, 'DYNAMIC_IDENTIFIER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.DynamicIdentifier'>>, 'ELT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Elt'>>, 'ENCODE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Encode'>>, 'ENCRYPT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Encrypt'>>, 'ENCRYPT_RAW': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.EncryptRaw'>>, 'ENDS_WITH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.EndsWith'>>, 'ENDSWITH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.EndsWith'>>, 'EQUAL_NULL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.EqualNull'>>, 'EUCLIDEAN_DISTANCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.EuclideanDistance'>>, 'EXISTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Exists'>>, 'EXP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Exp'>>, 'EXPLODE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Explode'>>, 'EXPLODING_GENERATE_SERIES': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ExplodingGenerateSeries'>>, 'EXTRACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Extract'>>, 'FACTORIAL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Factorial'>>, 'FARM_FINGERPRINT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.FarmFingerprint'>>, 'FARMFINGERPRINT64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.FarmFingerprint'>>, 'FEATURES_AT_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.FeaturesAtTime'>>, 'FIRST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.First'>>, 'FIRST_VALUE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.FirstValue'>>, 'FLATTEN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Flatten'>>, 'FLOAT64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Float64'>>, 'FLOOR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Floor'>>, 'FORMAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Format'>>, 'FROM_BASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.FromBase'>>, 'FROM_BASE32': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.FromBase32'>>, 'FROM_BASE64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.FromBase64'>>, 'FROM_ISO8601_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.FromISO8601Date'>>, 'FROM_ISO8601_TIMESTAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.FromISO8601Timestamp'>>, 'FROM_ISO8601_TIMESTAMP_NANOS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.FromISO8601TimestampNanos'>>, 'FROM_JSON': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.FromJson'>>, 'GAP_FILL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.GapFill'>>, 'GENERATE_BOOL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.GenerateBool'>>, 'GENERATE_DATE_ARRAY': <function Parser.<lambda>>, 'GENERATE_DOUBLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.GenerateDouble'>>, 'GENERATE_EMBEDDING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.GenerateEmbedding'>>, 'GENERATE_INT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.GenerateInt'>>, 'GENERATE_SERIES': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.GenerateSeries'>>, 'GENERATE_TABLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.GenerateTable'>>, 'GENERATE_TEXT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.GenerateText'>>, 'GENERATE_TIMESTAMP_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.GenerateTimestampArray'>>, 'GENERATOR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Generator'>>, 'GET_EXTRACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.GetExtract'>>, 'GET_IGNORE_CASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.GetIgnoreCase'>>, 'GETBIT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Getbit'>>, 'GET_BIT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Getbit'>>, 'GREATEST': <function Parser.<lambda>>, 'GROUP_CONCAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.GroupConcat'>>, 'GROUPING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Grouping'>>, 'GROUPING_ID': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.GroupingId'>>, 'HASH_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.HashAgg'>>, 'HEX': <function build_hex>, 'HEX_DECODE_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.HexDecodeString'>>, 'HLL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.Hll'>>, 'HOST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Host'>>, 'HOUR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Hour'>>, 'IF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.If'>>, 'IIF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.If'>>, 'INITCAP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Initcap'>>, 'INLINE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Inline'>>, 'INT64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Int64'>>, 'IS_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.IsArray'>>, 'IS_ASCII': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.IsAscii'>>, 'IS_INF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.IsInf'>>, 'ISINF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.IsInf'>>, 'IS_NAN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.IsNan'>>, 'ISNAN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.IsNan'>>, 'IS_NULL_VALUE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.IsNullValue'>>, 'J_S_O_N_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONArray'>>, 'J_S_O_N_ARRAY_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONArrayAgg'>>, 'JSON_ARRAY_APPEND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONArrayAppend'>>, 'JSON_ARRAY_CONTAINS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONArrayContains'>>, 'JSON_ARRAY_INSERT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONArrayInsert'>>, 'JSONB_CONTAINS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBContains'>>, 'J_S_O_N_B_CONTAINS_ALL_TOP_KEYS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBContainsAllTopKeys'>>, 'J_S_O_N_B_CONTAINS_ANY_TOP_KEYS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBContainsAnyTopKeys'>>, 'J_S_O_N_B_CONTAINS_TOP_KEY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBContainsTopKey'>>, 'J_S_O_N_B_DELETE_AT_PATH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBDeleteAtPath'>>, 'JSONB_EXISTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBExists'>>, 'JSONB_EXTRACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBExtract'>>, 'JSONB_EXTRACT_SCALAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBExtractScalar'>>, 'J_S_O_N_B_OBJECT_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBObjectAgg'>>, 'J_S_O_N_B_PATH_EXISTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBPathExists'>>, 'J_S_O_N_BOOL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBool'>>, 'J_S_O_N_CAST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.JSONCast'>>, 'J_S_O_N_EXISTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONExists'>>, 'JSON_EXTRACT': <function build_extract_json_with_path.<locals>._builder>, 'JSON_EXTRACT_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONExtractArray'>>, 'JSON_EXTRACT_SCALAR': <function build_extract_json_with_path.<locals>._builder>, 'JSON_FORMAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONFormat'>>, 'JSON_KEYS': <function Parser.<lambda>>, 'J_S_O_N_KEYS_AT_DEPTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONKeysAtDepth'>>, 'J_S_O_N_OBJECT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONObject'>>, 'J_S_O_N_OBJECT_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONObjectAgg'>>, 'JSON_REMOVE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONRemove'>>, 'JSON_SET': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONSet'>>, 'JSON_STRIP_NULLS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONStripNulls'>>, 'J_S_O_N_TABLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONTable'>>, 'JSON_TYPE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONType'>>, 'J_S_O_N_VALUE_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.query.JSONValueArray'>>, 'JAROWINKLER_SIMILARITY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.JarowinklerSimilarity'>>, 'JUSTIFY_DAYS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.JustifyDays'>>, 'JUSTIFY_HOURS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.JustifyHours'>>, 'JUSTIFY_INTERVAL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.JustifyInterval'>>, 'KURTOSIS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Kurtosis'>>, 'LAG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Lag'>>, 'LAST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Last'>>, 'LAST_DAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.LastDay'>>, 'LAST_DAY_OF_MONTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.LastDay'>>, 'LAST_VALUE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.LastValue'>>, 'LAX_BOOL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.LaxBool'>>, 'LAX_FLOAT64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.LaxFloat64'>>, 'LAX_INT64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.LaxInt64'>>, 'LAX_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.LaxString'>>, 'LEAD': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Lead'>>, 'LEAST': <function Parser.<lambda>>, 'LEFT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Left'>>, 'LENGTH': <function ClickHouseParser.<lambda>>, 'LEN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Length'>>, 'CHAR_LENGTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Length'>>, 'CHARACTER_LENGTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Length'>>, 'LEVENSHTEIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Levenshtein'>>, 'LIST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.List'>>, 'LN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Ln'>>, 'LOCALTIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Localtime'>>, 'LOCALTIMESTAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Localtimestamp'>>, 'LOG': <function build_logarithm>, 'LOGICAL_AND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.LogicalAnd'>>, 'BOOL_AND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.LogicalAnd'>>, 'BOOLAND_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.LogicalAnd'>>, 'LOGICAL_OR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.LogicalOr'>>, 'BOOL_OR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.LogicalOr'>>, 'BOOLOR_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.LogicalOr'>>, 'LOWER': <function build_lower>, 'LCASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Lower'>>, 'LOWER_HEX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.LowerHex'>>, 'MD5': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.MD5Digest'>>, 'MD5_DIGEST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.MD5Digest'>>, 'M_D5_NUMBER_LOWER64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.MD5NumberLower64'>>, 'M_D5_NUMBER_UPPER64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.MD5NumberUpper64'>>, 'M_L_FORECAST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.MLForecast'>>, 'M_L_TRANSLATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.MLTranslate'>>, 'MAKE_INTERVAL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.MakeInterval'>>, 'MANHATTAN_DISTANCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.ManhattanDistance'>>, 'MAP': <function build_var_map>, 'MAP_CAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.MapCat'>>, 'MAP_CONTAINS_KEY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.MapContainsKey'>>, 'MAP_DELETE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.MapDelete'>>, 'MAP_FROM_ENTRIES': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.MapFromEntries'>>, 'MAP_INSERT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.MapInsert'>>, 'MAP_KEYS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.MapKeys'>>, 'MAP_PICK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.MapPick'>>, 'MAP_SIZE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.MapSize'>>, 'MATCH_AGAINST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.MatchAgainst'>>, 'MAX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Max'>>, 'MEDIAN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Median'>>, 'MIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Min'>>, 'MINHASH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Minhash'>>, 'MINHASH_COMBINE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.MinhashCombine'>>, 'MINUTE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Minute'>>, 'MODE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Mode'>>, 'MONTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Month'>>, 'MONTHNAME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Monthname'>>, 'MONTHS_BETWEEN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.MonthsBetween'>>, 'NANVL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Nanvl'>>, 'NEGATIVE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Negative'>>, 'NET_FUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.NetFunc'>>, 'NEXT_DAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.NextDay'>>, 'NEXT_VALUE_FOR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ddl.NextValueFor'>>, 'NORMAL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Normal'>>, 'NORMALIZE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Normalize'>>, 'NTH_VALUE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.NthValue'>>, 'NTILE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Ntile'>>, 'NULLIF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Nullif'>>, 'NUMBER_TO_STR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.NumberToStr'>>, 'NVL2': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Nvl2'>>, 'OBJECT_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ObjectAgg'>>, 'OBJECT_ID': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.ObjectId'>>, 'OBJECT_INSERT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.ObjectInsert'>>, 'OBJECT_TRANSFORM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.ObjectTransform'>>, 'OPEN_J_S_O_N': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.OpenJSON'>>, 'OR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.Or'>>, 'OVERLAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Overlay'>>, 'PAD': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Pad'>>, 'PARAMETERIZED_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.ParameterizedAgg'>>, 'PARSE_BIGNUMERIC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ParseBignumeric'>>, 'PARSE_DATETIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.ParseDatetime'>>, 'PARSE_IP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.ParseIp'>>, 'PARSE_JSON': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.ParseJSON'>>, 'JSON_PARSE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.ParseJSON'>>, 'PARSE_NUMERIC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ParseNumeric'>>, 'PARSE_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.ParseTime'>>, 'PARSE_URL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ParseUrl'>>, 'PERCENT_RANK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.PercentRank'>>, 'PERCENTILE_CONT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.PercentileCont'>>, 'PERCENTILE_DISC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.PercentileDisc'>>, 'PI': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Pi'>>, 'POSEXPLODE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Posexplode'>>, 'POSEXPLODE_OUTER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.PosexplodeOuter'>>, 'POWER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.Pow'>>, 'POW': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.Pow'>>, 'PREDICT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Predict'>>, 'PREVIOUS_DAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.PreviousDay'>>, 'QUANTILE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Quantile'>>, 'QUARTER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Quarter'>>, 'RADIANS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Radians'>>, 'RAND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Rand'>>, 'RANDOM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Rand'>>, 'RANDN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Randn'>>, 'RANDSTR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Randstr'>>, 'RANGE_BUCKET': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.RangeBucket'>>, 'RANGE_N': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.RangeN'>>, 'RANK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Rank'>>, 'READ_CSV': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.ReadCSV'>>, 'READ_PARQUET': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.ReadParquet'>>, 'REDUCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Reduce'>>, 'REG_DOMAIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.RegDomain'>>, 'REGEXP_COUNT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.RegexpCount'>>, 'REGEXP_EXTRACT': <function ClickHouseParser.<dictcomp>.<lambda>>, 'REGEXP_EXTRACT_ALL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.RegexpExtractAll'>>, 'REGEXP_FULL_MATCH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.RegexpFullMatch'>>, 'REGEXP_I_LIKE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.RegexpILike'>>, 'REGEXP_INSTR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.RegexpInstr'>>, 'REGEXP_LIKE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.RegexpLike'>>, 'REGEXP_REPLACE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.RegexpReplace'>>, 'REGEXP_SPLIT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.RegexpSplit'>>, 'REGEXP_SUBSTR': <function ClickHouseParser.<dictcomp>.<lambda>>, 'REGR_AVGX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrAvgx'>>, 'REGR_AVGY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrAvgy'>>, 'REGR_COUNT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrCount'>>, 'REGR_INTERCEPT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrIntercept'>>, 'REGR_R2': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrR2'>>, 'REGR_SLOPE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrSlope'>>, 'REGR_SXX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrSxx'>>, 'REGR_SXY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrSxy'>>, 'REGR_SYY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrSyy'>>, 'REGR_VALX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrValx'>>, 'REGR_VALY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrValy'>>, 'REPEAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Repeat'>>, 'REPLACE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Replace'>>, 'REVERSE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Reverse'>>, 'RIGHT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Right'>>, 'RINT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Rint'>>, 'ROUND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Round'>>, 'ROW_NUMBER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RowNumber'>>, 'RTRIMMED_LENGTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.RtrimmedLength'>>, 'SHA': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SHA'>>, 'SHA1': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SHA'>>, 'S_H_A1_DIGEST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SHA1Digest'>>, 'SHA2': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SHA2'>>, 'S_H_A2_DIGEST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SHA2Digest'>>, 'SAFE_ADD': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.SafeAdd'>>, 'SAFE_CONVERT_BYTES_TO_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SafeConvertBytesToString'>>, 'SAFE_DIVIDE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.SafeDivide'>>, 'SAFE_FUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.SafeFunc'>>, 'SAFE_MULTIPLY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.SafeMultiply'>>, 'SAFE_NEGATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.SafeNegate'>>, 'SAFE_SUBTRACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.SafeSubtract'>>, 'SEARCH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Search'>>, 'SEARCH_IP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SearchIp'>>, 'SEC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Sec'>>, 'SECH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Sech'>>, 'SECOND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Second'>>, 'SECRET': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Secret'>>, 'SEQ1': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Seq1'>>, 'SEQ2': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Seq2'>>, 'SEQ4': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Seq4'>>, 'SEQ8': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Seq8'>>, 'SESSION_USER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.SessionUser'>>, 'SHUFFLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Shuffle'>>, 'SIGN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Sign'>>, 'SIGNUM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Sign'>>, 'SIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Sin'>>, 'SINH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Sinh'>>, 'SKEWNESS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Skewness'>>, 'SOUNDEX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Soundex'>>, 'SOUNDEX_P123': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SoundexP123'>>, 'SPACE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Space'>>, 'SPLIT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Split'>>, 'SPLIT_PART': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SplitPart'>>, 'SPLIT_TO_TABLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.SplitToTable'>>, 'SQRT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Sqrt'>>, 'ST_DISTANCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.StDistance'>>, 'ST_POINT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.StPoint'>>, 'ST_MAKEPOINT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.StPoint'>>, 'STACK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Stack'>>, 'STANDARD_HASH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.StandardHash'>>, 'STAR_MAP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.StarMap'>>, 'STARTS_WITH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.StartsWith'>>, 'STARTSWITH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.StartsWith'>>, 'STDDEV': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Stddev'>>, 'STDEV': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Stddev'>>, 'STDDEV_POP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.StddevPop'>>, 'STDDEV_SAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.StddevSamp'>>, 'STR_POSITION': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.StrPosition'>>, 'STR_TO_DATE': <function _build_str_to_date>, 'STR_TO_MAP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.StrToMap'>>, 'STR_TO_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.StrToTime'>>, 'STR_TO_UNIX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.StrToUnix'>>, 'STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.String'>>, 'STRING_TO_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.StringToArray'>>, 'SPLIT_BY_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.StringToArray'>>, 'STRIP_NULL_VALUE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.StripNullValue'>>, 'STRTOK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Strtok'>>, 'STRTOK_SPLIT_TO_TABLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.StrtokSplitToTable'>>, 'STRTOK_TO_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.StrtokToArray'>>, 'STRUCT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Struct'>>, 'STRUCT_EXTRACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.StructExtract'>>, 'STUFF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Stuff'>>, 'INSERT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Stuff'>>, 'SUBSTRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Substring'>>, 'SUBSTR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Substring'>>, 'SUBSTRING_INDEX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SubstringIndex'>>, 'SUM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Sum'>>, 'SYSTIMESTAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Systimestamp'>>, 'TAN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Tan'>>, 'TANH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Tanh'>>, 'TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Time'>>, 'TIME_ADD': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeAdd'>>, 'TIME_DIFF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeDiff'>>, 'TIME_FROM_PARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeFromParts'>>, 'TIMEFROMPARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeFromParts'>>, 'TIME_SLICE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeSlice'>>, 'TIME_STR_TO_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeStrToDate'>>, 'TIME_STR_TO_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeStrToTime'>>, 'TIME_STR_TO_UNIX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeStrToUnix'>>, 'TIME_SUB': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeSub'>>, 'TIME_TO_STR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeToStr'>>, 'TIME_TO_TIME_STR': <function Parser.<lambda>>, 'TIME_TO_UNIX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeToUnix'>>, 'TIME_TRUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeTrunc'>>, 'TIMESTAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Timestamp'>>, 'TIMESTAMP_ADD': <function build_date_delta.<locals>._builder>, 'TIMESTAMPDIFF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimestampDiff'>>, 'TIMESTAMP_DIFF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimestampDiff'>>, 'TIMESTAMP_FROM_PARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimestampFromParts'>>, 'TIMESTAMPFROMPARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimestampFromParts'>>, 'TIMESTAMP_LTZ_FROM_PARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimestampLtzFromParts'>>, 'TIMESTAMPLTZFROMPARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimestampLtzFromParts'>>, 'TIMESTAMP_SUB': <function build_date_delta.<locals>._builder>, 'TIMESTAMP_TRUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimestampTrunc'>>, 'TIMESTAMP_TZ_FROM_PARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimestampTzFromParts'>>, 'TIMESTAMPTZFROMPARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimestampTzFromParts'>>, 'TO_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ToArray'>>, 'TO_BASE32': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ToBase32'>>, 'TO_BASE64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ToBase64'>>, 'TO_BINARY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ToBinary'>>, 'TO_BOOLEAN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.ToBoolean'>>, 'TO_CHAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ToChar'>>, 'TO_CODE_POINTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ToCodePoints'>>, 'TO_DAYS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.ToDays'>>, 'TO_DECFLOAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ToDecfloat'>>, 'TO_DOUBLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ToDouble'>>, 'TO_FILE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ToFile'>>, 'TO_MAP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ToMap'>>, 'TO_NUMBER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ToNumber'>>, 'TO_VARIANT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.ToVariant'>>, 'TRANSLATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Translate'>>, 'TRIM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Trim'>>, 'TRUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Trunc'>>, 'TRUNCATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Trunc'>>, 'TRY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Try'>>, 'TRY_BASE64_DECODE_BINARY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.TryBase64DecodeBinary'>>, 'TRY_BASE64_DECODE_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.TryBase64DecodeString'>>, 'TRY_CAST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.TryCast'>>, 'TRY_HEX_DECODE_BINARY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.TryHexDecodeBinary'>>, 'TRY_HEX_DECODE_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.TryHexDecodeString'>>, 'TRY_TO_DECFLOAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.TryToDecfloat'>>, 'TS_OR_DI_TO_DI': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TsOrDiToDi'>>, 'TS_OR_DS_ADD': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TsOrDsAdd'>>, 'TS_OR_DS_DIFF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TsOrDsDiff'>>, 'TS_OR_DS_TO_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TsOrDsToDate'>>, 'TS_OR_DS_TO_DATE_STR': <function Parser.<lambda>>, 'TS_OR_DS_TO_DATETIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TsOrDsToDatetime'>>, 'TS_OR_DS_TO_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TsOrDsToTime'>>, 'TS_OR_DS_TO_TIMESTAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TsOrDsToTimestamp'>>, 'TYPEOF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.Typeof'>>, 'UNHEX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Unhex'>>, 'UNICODE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Unicode'>>, 'UNIFORM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Uniform'>>, 'UNIX_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UnixDate'>>, 'UNIX_MICROS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UnixMicros'>>, 'UNIX_MILLIS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UnixMillis'>>, 'UNIX_SECONDS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UnixSeconds'>>, 'UNIX_TO_STR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UnixToStr'>>, 'UNIX_TO_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UnixToTime'>>, 'UNIX_TO_TIME_STR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UnixToTimeStr'>>, 'UNNEST': <function Parser.<lambda>>, 'UPPER': <function build_upper>, 'UCASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Upper'>>, 'UTC_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UtcDate'>>, 'UTC_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UtcTime'>>, 'UTC_TIMESTAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UtcTimestamp'>>, 'UUID': <function Parser.<lambda>>, 'GEN_RANDOM_UUID': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Uuid'>>, 'GENERATE_UUID': <function Parser.<lambda>>, 'UUID_STRING': <function Parser.<lambda>>, 'VAR_MAP': <function build_var_map>, 'VARIANCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Variance'>>, 'VARIANCE_SAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Variance'>>, 'VAR_SAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Variance'>>, 'VARIANCE_POP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.VariancePop'>>, 'VAR_POP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.VariancePop'>>, 'VECTOR_SEARCH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.VectorSearch'>>, 'WEEK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Week'>>, 'WEEK_OF_YEAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.WeekOfYear'>>, 'WEEKOFYEAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.WeekOfYear'>>, 'WEEK_START': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.WeekStart'>>, 'WEIGHT_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.WeightString'>>, 'WIDTH_BUCKET': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.WidthBucket'>>, 'XMLELEMENT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.XMLElement'>>, 'XMLGET': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.XMLGet'>>, 'X_M_L_TABLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.XMLTable'>>, 'XOR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.Xor'>>, 'YEAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Year'>>, 'YEAR_OF_WEEK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.YearOfWeek'>>, 'YEAROFWEEK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.YearOfWeek'>>, 'YEAR_OF_WEEK_ISO': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.YearOfWeekIso'>>, 'YEAROFWEEKISO': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.YearOfWeekIso'>>, 'ZIPF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Zipf'>>, 'EXPLODE_OUTER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array._ExplodeOuter'>>, 'SORT_ARRAY': <function build_sort_array>, 'ARRAYAGG': <function Parser.<lambda>>, 'GLOB': <function Parser.<lambda>>, 'JSON_EXTRACT_PATH_TEXT': <function build_extract_json_with_path.<locals>._builder>, 'LIKE': <function build_like.<locals>._builder>, 'LOG2': <function Parser.<lambda>>, 'LOG10': <function Parser.<lambda>>, 'LPAD': <function Parser.<lambda>>, 'LEFTPAD': <function Parser.<lambda>>, 'LTRIM': <function Parser.<lambda>>, 'MOD': <function build_mod>, 'RIGHTPAD': <function Parser.<lambda>>, 'RPAD': <function Parser.<lambda>>, 'RTRIM': <function Parser.<lambda>>, 'SCOPE_RESOLUTION': <function Parser.<lambda>>, 'STRPOS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.StrPosition'>>, 'CHARINDEX': <function Parser.<lambda>>, 'INSTR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.StrPosition'>>, 'LOCATE': <function Parser.<lambda>>, 'TO_HEX': <function build_hex>, 'REGEXPEXTRACT': <function ClickHouseParser.<dictcomp>.<lambda>>, 'TOSTARTOFDAY': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFHOUR': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFMICROSECOND': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFMINUTE': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFSECOND': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFMONTH': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFMILLISECOND': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFYEAR': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFQUARTER': <function _build_timestamp_trunc.<locals>.<lambda>>, 'ANY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.AnyValue'>>, 'ARRAYCOMPACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayCompact'>>, 'ARRAYCONCAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayConcat'>>, 'ARRAYDISTINCT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayDistinct'>>, 'ARRAYEXCEPT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayExcept'>>, 'ARRAYSUM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArraySum'>>, 'ARRAYMAX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayMax'>>, 'ARRAYMIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayMin'>>, 'ARRAYREVERSE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayReverse'>>, 'ARRAYSLICE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArraySlice'>>, 'ARRAYFILTER': <function _build_array_lambda_func.<locals>._builder>, 'ARRAYMAP': <function _build_array_lambda_func.<locals>._builder>, 'CURRENTDATABASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentDatabase'>>, 'CURRENTSCHEMAS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentSchemas'>>, 'COUNTMATCHES': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.RegexpCount'>>, 'CITYHASH64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.CityHash64'>>, 'COSINEDISTANCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.CosineDistance'>>, 'VERSION': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentVersion'>>, 'DATEADD': <function build_date_delta.<locals>._builder>, 'DATE_FORMAT': <function _build_datetime_format.<locals>._builder>, 'DATESUB': <function build_date_delta.<locals>._builder>, 'DATETRUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DateTrunc'>>, 'FORMATDATETIME': <function _build_datetime_format.<locals>._builder>, 'GROUPBITAND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitwiseAndAgg'>>, 'GROUPBITOR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitwiseOrAgg'>>, 'GROUPBITXOR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitwiseXorAgg'>>, 'HAS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayContains'>>, 'ILIKE': <function build_like.<locals>._builder>, 'ISINFINITE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.IsInf'>>, 'JSONEXTRACTRAW': <function build_json_extract_path.<locals>._builder>, 'JSONEXTRACTSTRING': <function build_json_extract_path.<locals>._builder>, 'L2Distance': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.EuclideanDistance'>>, 'MATCH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.RegexpLike'>>, 'NOTLIKE': <function build_like.<locals>._builder>, 'PARSEDATETIME': <function _build_datetime_format.<locals>._builder>, 'RANDCANONICAL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Rand'>>, 'TIMESTAMPSUB': <function build_date_delta.<locals>._builder>, 'TIMESTAMPADD': <function build_date_delta.<locals>._builder>, 'TODAYOFWEEK': <function _build_without_extra_args.<locals>.<lambda>>, 'TOISOWEEK': <function _build_without_extra_args.<locals>.<lambda>>, 'TOISOYEAR': <function _build_without_extra_args.<locals>.<lambda>>, 'TOMONDAY': <function _build_timestamp_trunc.<locals>.<lambda>>, 'UNIQ': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.ApproxDistinct'>>, 'SHA256': <function ClickHouseParser.<lambda>>, 'SHA512': <function ClickHouseParser.<lambda>>, 'SPLITBYCHAR': <function _build_split_by_char>, 'SPLITBYREGEXP': <function _build_split.<locals>.<lambda>>, 'SPLITBYSTRING': <function _build_split.<locals>.<lambda>>, 'SUBSTRINGINDEX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SubstringIndex'>>, 'TOTYPENAME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.Typeof'>>, 'TRIMBOTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Trim'>>, 'TRIMLEFT': <function build_trim>, 'TRIMRIGHT': <function ClickHouseParser.<lambda>>, 'EDITDISTANCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Levenshtein'>>, 'JAROWINKLERSIMILARITY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.JarowinklerSimilarity'>>, 'LEVENSHTEINDISTANCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Levenshtein'>>, 'UTCTIMESTAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UtcTimestamp'>>}
AGG_FUNCTIONS: ClassVar =
{'quantileTimingWeighted', 'quantilesExact', 'simpleLinearRegression', 'groupBitmap', 'sumCount', 'quantileExactHigh', 'anyLast', 'quantilesDeterministic', 'entropy', 'quantileTDigest', 'sequenceNextNode', 'studentTTest', 'rankCorr', 'maxIntersections', 'deltaSum', 'covarSamp', 'varPop', 'stochasticLogisticRegression', 'groupArrayLast', 'groupConcat', 'windowFunnel', 'kolmogorovSmirnovTest', 'maxMap', 'largestTriangleThreeBuckets', 'quantilesExactWeighted', 'quantileExact', 'topKWeighted', 'groupUniqArray', 'uniqExact', 'stddevPop', 'max', 'topK', 'groupBitXor', 'avg', 'uniq', 'quantilesExactHigh', 'quantileExactWeighted', 'minMap', 'anyHeavy', 'groupArraySample', 'theilsU', 'min', 'boundingRatio', 'quantilesTDigest', 'quantileDeterministic', 'last_value', 'cramersV', 'first_value', 'groupBitOr', 'argMin', 'skewPop', 'uniqCombined64', 'quantilesTDigestWeighted', 'uniqTheta', 'quantilesInterpolatedWeighted', 'covarPop', 'cramersVBiasCorrected', 'avgWeighted', 'quantileExactLow', 'groupArray', 'sumWithOverflow', 'quantile', 'categoricalInformationValue', 'exponentialTimeDecayedAvg', 'sparkBar', 'groupBitmapOr', 'argMax', 'quantilesBFloat16Weighted', 'quantiles', 'quantilesTimingWeighted', 'median', 'groupArrayMovingSum', 'sum', 'welchTTest', 'quantileTDigestWeighted', 'quantileTiming', 'sequenceCount', 'histogram', 'quantileBFloat16', 'uniqHLL12', 'quantileExactInclusive', 'approx_top_sum', 'quantileGK', 'kurtPop', 'corr', 'skewSamp', 'quantileBFloat16Weighted', 'quantileInterpolatedWeighted', 'quantilesExactLow', 'groupBitmapXor', 'sumMap', 'stochasticLinearRegression', 'uniqCombined', 'intervalLengthSum', 'sumKahan', 'groupArrayInsertAt', 'maxIntersectionsPosition', 'uniqUpTo', 'groupBitAnd', 'sequenceMatch', 'deltaSumTimestamp', 'any', 'quantilesTiming', 'varSamp', 'groupArrayMovingAvg', 'retention', 'quantilesExactExclusive', 'kurtSamp', 'stddevSamp', 'quantilesBFloat16', 'quantilesGK', 'mannWhitneyUTest', 'exponentialMovingAverage', 'meanZTest', 'groupBitmapAnd', 'count', 'contingency'}
AGG_FUNCTIONS_SUFFIXES: ClassVar =
['SimpleState', 'MergeState', 'OrDefault', 'Distinct', 'Resample', 'ArrayIf', 'ForEach', 'OrNull', 'ArgMin', 'ArgMax', 'Array', 'State', 'Merge', 'Map', 'If']
FUNC_TOKENS =
{<TokenType.AND: 34>, <TokenType.OR: 35>, <TokenType.SESSION_USER: 61>, <TokenType.XOR: 66>, <TokenType.IDENTIFIER: 79>, <TokenType.TABLE: 84>, <TokenType.VAR: 89>, <TokenType.BIT: 98>, <TokenType.BOOLEAN: 99>, <TokenType.TINYINT: 100>, <TokenType.UTINYINT: 101>, <TokenType.SMALLINT: 102>, <TokenType.USMALLINT: 103>, <TokenType.MEDIUMINT: 104>, <TokenType.UMEDIUMINT: 105>, <TokenType.INT: 106>, <TokenType.UINT: 107>, <TokenType.BIGINT: 108>, <TokenType.UBIGINT: 109>, <TokenType.BIGNUM: 110>, <TokenType.INT128: 111>, <TokenType.UINT128: 112>, <TokenType.INT256: 113>, <TokenType.UINT256: 114>, <TokenType.FLOAT: 115>, <TokenType.DOUBLE: 116>, <TokenType.UDOUBLE: 117>, <TokenType.DECIMAL: 118>, <TokenType.DECIMAL32: 119>, <TokenType.DECIMAL64: 120>, <TokenType.DECIMAL128: 121>, <TokenType.DECIMAL256: 122>, <TokenType.DECFLOAT: 123>, <TokenType.UDECIMAL: 124>, <TokenType.BIGDECIMAL: 125>, <TokenType.CHAR: 126>, <TokenType.NCHAR: 127>, <TokenType.VARCHAR: 128>, <TokenType.NVARCHAR: 129>, <TokenType.BPCHAR: 130>, <TokenType.TEXT: 131>, <TokenType.MEDIUMTEXT: 132>, <TokenType.LONGTEXT: 133>, <TokenType.BLOB: 134>, <TokenType.MEDIUMBLOB: 135>, <TokenType.LONGBLOB: 136>, <TokenType.TINYBLOB: 137>, <TokenType.TINYTEXT: 138>, <TokenType.NAME: 139>, <TokenType.BINARY: 140>, <TokenType.VARBINARY: 141>, <TokenType.JSON: 142>, <TokenType.JSONB: 143>, <TokenType.TIME: 144>, <TokenType.TIMETZ: 145>, <TokenType.TIME_NS: 146>, <TokenType.TIMESTAMP: 147>, <TokenType.TIMESTAMPTZ: 148>, <TokenType.TIMESTAMPLTZ: 149>, <TokenType.TIMESTAMPNTZ: 150>, <TokenType.TIMESTAMP_S: 151>, <TokenType.TIMESTAMP_MS: 152>, <TokenType.TIMESTAMP_NS: 153>, <TokenType.DATETIME: 154>, <TokenType.DATETIME2: 155>, <TokenType.DATETIME64: 156>, <TokenType.SMALLDATETIME: 157>, <TokenType.DATE: 158>, <TokenType.DATE32: 159>, <TokenType.INT4RANGE: 160>, <TokenType.INT4MULTIRANGE: 161>, <TokenType.INT8RANGE: 162>, <TokenType.INT8MULTIRANGE: 163>, <TokenType.NUMRANGE: 164>, <TokenType.NUMMULTIRANGE: 165>, <TokenType.TSRANGE: 166>, <TokenType.TSMULTIRANGE: 167>, <TokenType.TSTZRANGE: 168>, <TokenType.TSTZMULTIRANGE: 169>, <TokenType.DATERANGE: 170>, <TokenType.DATEMULTIRANGE: 171>, <TokenType.UUID: 172>, <TokenType.GEOGRAPHY: 173>, <TokenType.GEOGRAPHYPOINT: 174>, <TokenType.NULLABLE: 175>, <TokenType.GEOMETRY: 176>, <TokenType.POINT: 177>, <TokenType.RING: 178>, <TokenType.LINESTRING: 179>, <TokenType.LOCALTIME: 180>, <TokenType.LOCALTIMESTAMP: 181>, <TokenType.MULTILINESTRING: 183>, <TokenType.POLYGON: 184>, <TokenType.MULTIPOLYGON: 185>, <TokenType.HLLSKETCH: 186>, <TokenType.HSTORE: 187>, <TokenType.SUPER: 188>, <TokenType.SERIAL: 189>, <TokenType.SMALLSERIAL: 190>, <TokenType.BIGSERIAL: 191>, <TokenType.XML: 192>, <TokenType.YEAR: 193>, <TokenType.USERDEFINED: 194>, <TokenType.MONEY: 195>, <TokenType.SMALLMONEY: 196>, <TokenType.ROWVERSION: 197>, <TokenType.IMAGE: 198>, <TokenType.VARIANT: 199>, <TokenType.OBJECT: 200>, <TokenType.REF: 201>, <TokenType.INET: 202>, <TokenType.IPADDRESS: 203>, <TokenType.IPPREFIX: 204>, <TokenType.IPV4: 205>, <TokenType.IPV6: 206>, <TokenType.ENUM: 207>, <TokenType.ENUM8: 208>, <TokenType.ENUM16: 209>, <TokenType.FIXEDSTRING: 210>, <TokenType.LOWCARDINALITY: 211>, <TokenType.NESTED: 212>, <TokenType.AGGREGATEFUNCTION: 213>, <TokenType.SIMPLEAGGREGATEFUNCTION: 214>, <TokenType.TDIGEST: 215>, <TokenType.UNKNOWN: 216>, <TokenType.VECTOR: 217>, <TokenType.DYNAMIC: 218>, <TokenType.VOID: 219>, <TokenType.ALL: 222>, <TokenType.ANY: 224>, <TokenType.ARRAY: 226>, <TokenType.COLLATE: 238>, <TokenType.COMMAND: 239>, <TokenType.CURRENT_DATE: 249>, <TokenType.CURRENT_DATETIME: 250>, <TokenType.CURRENT_SCHEMA: 251>, <TokenType.CURRENT_TIME: 252>, <TokenType.CURRENT_TIMESTAMP: 253>, <TokenType.CURRENT_USER: 254>, <TokenType.CURRENT_CATALOG: 257>, <TokenType.DECLARE: 258>, <TokenType.EXISTS: 275>, <TokenType.FILE: 278>, <TokenType.FILTER: 280>, <TokenType.FIRST: 282>, <TokenType.FORMAT: 286>, <TokenType.GET: 290>, <TokenType.GLOB: 291>, <TokenType.ILIKE: 299>, <TokenType.INDEX: 301>, <TokenType.INSERT: 304>, <TokenType.INTERVAL: 308>, <TokenType.ISNULL: 313>, <TokenType.LEFT: 321>, <TokenType.LIKE: 322>, <TokenType.LIST: 324>, <TokenType.MAP: 327>, <TokenType.MERGE: 332>, <TokenType.NEXT: 336>, <TokenType.NOTHING: 337>, <TokenType.NULL: 339>, <TokenType.OBJECT_IDENTIFIER: 340>, <TokenType.OFFSET: 341>, <TokenType.PASTE: 358>, <TokenType.PRIMARY_KEY: 367>, <TokenType.PSEUDO_TYPE: 371>, <TokenType.RANGE: 376>, <TokenType.REPLACE: 380>, <TokenType.RIGHT: 384>, <TokenType.RLIKE: 385>, <TokenType.ROW: 389>, <TokenType.SEQUENCE: 395>, <TokenType.SET: 397>, <TokenType.SOME: 401>, <TokenType.STRUCT: 408>, <TokenType.TRUNCATE: 416>, <TokenType.UNION: 421>, <TokenType.UNNEST: 422>, <TokenType.VIEW: 429>, <TokenType.WINDOW: 435>, <TokenType.UTC_DATE: 438>, <TokenType.UTC_TIME: 439>, <TokenType.UTC_TIMESTAMP: 440>}
RESERVED_TOKENS =
{<TokenType.L_PAREN: 1>, <TokenType.R_PAREN: 2>, <TokenType.L_BRACKET: 3>, <TokenType.R_BRACKET: 4>, <TokenType.L_BRACE: 5>, <TokenType.R_BRACE: 6>, <TokenType.COMMA: 7>, <TokenType.DOT: 8>, <TokenType.DASH: 9>, <TokenType.PLUS: 10>, <TokenType.COLON: 11>, <TokenType.MOD: 333>, <TokenType.SEMICOLON: 19>, <TokenType.STAR: 20>, <TokenType.BACKSLASH: 21>, <TokenType.SLASH: 22>, <TokenType.LT: 23>, <TokenType.UNKNOWN: 216>, <TokenType.GT: 25>, <TokenType.NOT: 27>, <TokenType.EQ: 28>, <TokenType.AMP: 36>, <TokenType.PIPE: 39>, <TokenType.PLACEHOLDER: 361>, <TokenType.CARET: 42>, <TokenType.TILDE: 44>, <TokenType.HASH: 48>, <TokenType.PARAMETER: 58>}
ID_VAR_TOKENS =
{<TokenType.SESSION: 59>, <TokenType.SESSION_USER: 61>, <TokenType.IDENTIFIER: 79>, <TokenType.DATABASE: 80>, <TokenType.COLUMN: 81>, <TokenType.SCHEMA: 83>, <TokenType.TABLE: 84>, <TokenType.WAREHOUSE: 85>, <TokenType.STAGE: 86>, <TokenType.STREAM: 87>, <TokenType.STREAMLIT: 88>, <TokenType.VAR: 89>, <TokenType.BIT: 98>, <TokenType.BOOLEAN: 99>, <TokenType.TINYINT: 100>, <TokenType.UTINYINT: 101>, <TokenType.SMALLINT: 102>, <TokenType.USMALLINT: 103>, <TokenType.MEDIUMINT: 104>, <TokenType.UMEDIUMINT: 105>, <TokenType.INT: 106>, <TokenType.UINT: 107>, <TokenType.BIGINT: 108>, <TokenType.UBIGINT: 109>, <TokenType.BIGNUM: 110>, <TokenType.INT128: 111>, <TokenType.UINT128: 112>, <TokenType.INT256: 113>, <TokenType.UINT256: 114>, <TokenType.FLOAT: 115>, <TokenType.DOUBLE: 116>, <TokenType.UDOUBLE: 117>, <TokenType.DECIMAL: 118>, <TokenType.DECIMAL32: 119>, <TokenType.DECIMAL64: 120>, <TokenType.DECIMAL128: 121>, <TokenType.DECIMAL256: 122>, <TokenType.DECFLOAT: 123>, <TokenType.UDECIMAL: 124>, <TokenType.BIGDECIMAL: 125>, <TokenType.CHAR: 126>, <TokenType.NCHAR: 127>, <TokenType.VARCHAR: 128>, <TokenType.NVARCHAR: 129>, <TokenType.BPCHAR: 130>, <TokenType.TEXT: 131>, <TokenType.MEDIUMTEXT: 132>, <TokenType.LONGTEXT: 133>, <TokenType.BLOB: 134>, <TokenType.MEDIUMBLOB: 135>, <TokenType.LONGBLOB: 136>, <TokenType.TINYBLOB: 137>, <TokenType.TINYTEXT: 138>, <TokenType.NAME: 139>, <TokenType.BINARY: 140>, <TokenType.VARBINARY: 141>, <TokenType.JSON: 142>, <TokenType.JSONB: 143>, <TokenType.TIME: 144>, <TokenType.TIMETZ: 145>, <TokenType.TIME_NS: 146>, <TokenType.TIMESTAMP: 147>, <TokenType.TIMESTAMPTZ: 148>, <TokenType.TIMESTAMPLTZ: 149>, <TokenType.TIMESTAMPNTZ: 150>, <TokenType.TIMESTAMP_S: 151>, <TokenType.TIMESTAMP_MS: 152>, <TokenType.TIMESTAMP_NS: 153>, <TokenType.DATETIME: 154>, <TokenType.DATETIME2: 155>, <TokenType.DATETIME64: 156>, <TokenType.SMALLDATETIME: 157>, <TokenType.DATE: 158>, <TokenType.DATE32: 159>, <TokenType.INT4RANGE: 160>, <TokenType.INT4MULTIRANGE: 161>, <TokenType.INT8RANGE: 162>, <TokenType.INT8MULTIRANGE: 163>, <TokenType.NUMRANGE: 164>, <TokenType.NUMMULTIRANGE: 165>, <TokenType.TSRANGE: 166>, <TokenType.TSMULTIRANGE: 167>, <TokenType.TSTZRANGE: 168>, <TokenType.TSTZMULTIRANGE: 169>, <TokenType.DATERANGE: 170>, <TokenType.DATEMULTIRANGE: 171>, <TokenType.UUID: 172>, <TokenType.GEOGRAPHY: 173>, <TokenType.GEOGRAPHYPOINT: 174>, <TokenType.NULLABLE: 175>, <TokenType.GEOMETRY: 176>, <TokenType.POINT: 177>, <TokenType.RING: 178>, <TokenType.LINESTRING: 179>, <TokenType.LOCALTIME: 180>, <TokenType.LOCALTIMESTAMP: 181>, <TokenType.MULTILINESTRING: 183>, <TokenType.POLYGON: 184>, <TokenType.MULTIPOLYGON: 185>, <TokenType.HLLSKETCH: 186>, <TokenType.HSTORE: 187>, <TokenType.SUPER: 188>, <TokenType.SERIAL: 189>, <TokenType.SMALLSERIAL: 190>, <TokenType.BIGSERIAL: 191>, <TokenType.XML: 192>, <TokenType.YEAR: 193>, <TokenType.USERDEFINED: 194>, <TokenType.MONEY: 195>, <TokenType.SMALLMONEY: 196>, <TokenType.ROWVERSION: 197>, <TokenType.IMAGE: 198>, <TokenType.VARIANT: 199>, <TokenType.OBJECT: 200>, <TokenType.REF: 201>, <TokenType.INET: 202>, <TokenType.IPADDRESS: 203>, <TokenType.IPPREFIX: 204>, <TokenType.IPV4: 205>, <TokenType.IPV6: 206>, <TokenType.ENUM: 207>, <TokenType.ENUM8: 208>, <TokenType.ENUM16: 209>, <TokenType.FIXEDSTRING: 210>, <TokenType.LOWCARDINALITY: 211>, <TokenType.NESTED: 212>, <TokenType.AGGREGATEFUNCTION: 213>, <TokenType.SIMPLEAGGREGATEFUNCTION: 214>, <TokenType.TDIGEST: 215>, <TokenType.UNKNOWN: 216>, <TokenType.VECTOR: 217>, <TokenType.DYNAMIC: 218>, <TokenType.VOID: 219>, <TokenType.ALL: 222>, <TokenType.ANTI: 223>, <TokenType.ANY: 224>, <TokenType.APPLY: 225>, <TokenType.ARRAY: 226>, <TokenType.ASC: 227>, <TokenType.ASOF: 228>, <TokenType.ATTACH: 229>, <TokenType.AUTO_INCREMENT: 230>, <TokenType.BEGIN: 231>, <TokenType.CACHE: 234>, <TokenType.CASE: 235>, <TokenType.COLLATE: 238>, <TokenType.COMMAND: 239>, <TokenType.COMMENT: 240>, <TokenType.COMMIT: 241>, <TokenType.CONNECT: 242>, <TokenType.CONSTRAINT: 244>, <TokenType.COPY: 245>, <TokenType.CUBE: 248>, <TokenType.CURRENT_DATE: 249>, <TokenType.CURRENT_DATETIME: 250>, <TokenType.CURRENT_SCHEMA: 251>, <TokenType.CURRENT_TIME: 252>, <TokenType.CURRENT_TIMESTAMP: 253>, <TokenType.CURRENT_USER: 254>, <TokenType.CURRENT_ROLE: 256>, <TokenType.CURRENT_CATALOG: 257>, <TokenType.DECLARE: 258>, <TokenType.DEFAULT: 259>, <TokenType.DELETE: 260>, <TokenType.DESC: 261>, <TokenType.DESCRIBE: 262>, <TokenType.DETACH: 263>, <TokenType.DISCONNECT: 264>, <TokenType.DICTIONARY: 265>, <TokenType.DIV: 268>, <TokenType.END: 271>, <TokenType.ESCAPE: 272>, <TokenType.EXECUTE: 274>, <TokenType.EXISTS: 275>, <TokenType.FALSE: 276>, <TokenType.FILE: 278>, <TokenType.FILE_FORMAT: 279>, <TokenType.FILTER: 280>, <TokenType.FINAL: 281>, <TokenType.FIRST: 282>, <TokenType.FOREIGN_KEY: 285>, <TokenType.FORMAT: 286>, <TokenType.FULL: 288>, <TokenType.FUNCTION: 289>, <TokenType.GET: 290>, <TokenType.IN: 300>, <TokenType.INDEX: 301>, <TokenType.INTERVAL: 308>, <TokenType.IS: 312>, <TokenType.ISNULL: 313>, <TokenType.KEEP: 316>, <TokenType.KILL: 318>, <TokenType.LEFT: 321>, <TokenType.LIKE: 322>, <TokenType.LIMIT: 323>, <TokenType.LIST: 324>, <TokenType.LOAD: 325>, <TokenType.LOCK: 326>, <TokenType.MAP: 327>, <TokenType.MATCH: 328>, <TokenType.MERGE: 332>, <TokenType.MODEL: 334>, <TokenType.NATURAL: 335>, <TokenType.NEXT: 336>, <TokenType.NOTHING: 337>, <TokenType.NULL: 339>, <TokenType.OBJECT_IDENTIFIER: 340>, <TokenType.OFFSET: 341>, <TokenType.OPERATOR: 344>, <TokenType.ORDINALITY: 348>, <TokenType.OUT: 349>, <TokenType.INOUT: 350>, <TokenType.OVER: 352>, <TokenType.OVERLAPS: 353>, <TokenType.OVERWRITE: 354>, <TokenType.PARTITION: 356>, <TokenType.PASTE: 358>, <TokenType.PERCENT: 359>, <TokenType.PIVOT: 360>, <TokenType.PRAGMA: 365>, <TokenType.PROCEDURE: 368>, <TokenType.PROJECTION: 370>, <TokenType.PSEUDO_TYPE: 371>, <TokenType.PUT: 372>, <TokenType.RANGE: 376>, <TokenType.RECURSIVE: 377>, <TokenType.REFRESH: 378>, <TokenType.RENAME: 379>, <TokenType.REPLACE: 380>, <TokenType.REFERENCES: 383>, <TokenType.RIGHT: 384>, <TokenType.ROLLUP: 388>, <TokenType.ROW: 389>, <TokenType.ROWS: 390>, <TokenType.SEMI: 393>, <TokenType.SEQUENCE: 395>, <TokenType.SET: 397>, <TokenType.SETTINGS: 398>, <TokenType.SHOW: 399>, <TokenType.SOME: 401>, <TokenType.STORAGE_INTEGRATION: 406>, <TokenType.STRAIGHT_JOIN: 407>, <TokenType.STRUCT: 408>, <TokenType.TAG: 411>, <TokenType.TEMPORARY: 412>, <TokenType.TOP: 413>, <TokenType.TRUE: 415>, <TokenType.TRUNCATE: 416>, <TokenType.TRIGGER: 417>, <TokenType.TYPE: 418>, <TokenType.UNNEST: 422>, <TokenType.UNPIVOT: 423>, <TokenType.UPDATE: 424>, <TokenType.USE: 425>, <TokenType.VIEW: 429>, <TokenType.SEMANTIC_VIEW: 430>, <TokenType.VOLATILE: 431>, <TokenType.WINDOW: 435>, <TokenType.UNIQUE: 437>, <TokenType.SINK: 442>, <TokenType.SOURCE: 443>, <TokenType.ANALYZE: 444>, <TokenType.NAMESPACE: 445>, <TokenType.EXPORT: 446>}
AGG_FUNC_MAPPING: ClassVar =
{'quantileTimingWeightedSimpleState': ('quantileTimingWeighted', 'SimpleState'), 'quantilesExactSimpleState': ('quantilesExact', 'SimpleState'), 'simpleLinearRegressionSimpleState': ('simpleLinearRegression', 'SimpleState'), 'groupBitmapSimpleState': ('groupBitmap', 'SimpleState'), 'sumCountSimpleState': ('sumCount', 'SimpleState'), 'quantileExactHighSimpleState': ('quantileExactHigh', 'SimpleState'), 'anyLastSimpleState': ('anyLast', 'SimpleState'), 'quantilesDeterministicSimpleState': ('quantilesDeterministic', 'SimpleState'), 'entropySimpleState': ('entropy', 'SimpleState'), 'quantileTDigestSimpleState': ('quantileTDigest', 'SimpleState'), 'sequenceNextNodeSimpleState': ('sequenceNextNode', 'SimpleState'), 'studentTTestSimpleState': ('studentTTest', 'SimpleState'), 'rankCorrSimpleState': ('rankCorr', 'SimpleState'), 'maxIntersectionsSimpleState': ('maxIntersections', 'SimpleState'), 'deltaSumSimpleState': ('deltaSum', 'SimpleState'), 'covarSampSimpleState': ('covarSamp', 'SimpleState'), 'varPopSimpleState': ('varPop', 'SimpleState'), 'stochasticLogisticRegressionSimpleState': ('stochasticLogisticRegression', 'SimpleState'), 'groupArrayLastSimpleState': ('groupArrayLast', 'SimpleState'), 'groupConcatSimpleState': ('groupConcat', 'SimpleState'), 'windowFunnelSimpleState': ('windowFunnel', 'SimpleState'), 'kolmogorovSmirnovTestSimpleState': ('kolmogorovSmirnovTest', 'SimpleState'), 'maxMapSimpleState': ('maxMap', 'SimpleState'), 'largestTriangleThreeBucketsSimpleState': ('largestTriangleThreeBuckets', 'SimpleState'), 'quantilesExactWeightedSimpleState': ('quantilesExactWeighted', 'SimpleState'), 'quantileExactSimpleState': ('quantileExact', 'SimpleState'), 'topKWeightedSimpleState': ('topKWeighted', 'SimpleState'), 'groupUniqArraySimpleState': ('groupUniqArray', 'SimpleState'), 'uniqExactSimpleState': ('uniqExact', 'SimpleState'), 'stddevPopSimpleState': ('stddevPop', 'SimpleState'), 'maxSimpleState': ('max', 'SimpleState'), 'topKSimpleState': ('topK', 'SimpleState'), 'groupBitXorSimpleState': ('groupBitXor', 'SimpleState'), 'avgSimpleState': ('avg', 'SimpleState'), 'uniqSimpleState': ('uniq', 'SimpleState'), 'quantilesExactHighSimpleState': ('quantilesExactHigh', 'SimpleState'), 'quantileExactWeightedSimpleState': ('quantileExactWeighted', 'SimpleState'), 'minMapSimpleState': ('minMap', 'SimpleState'), 'anyHeavySimpleState': ('anyHeavy', 'SimpleState'), 'groupArraySampleSimpleState': ('groupArraySample', 'SimpleState'), 'theilsUSimpleState': ('theilsU', 'SimpleState'), 'minSimpleState': ('min', 'SimpleState'), 'boundingRatioSimpleState': ('boundingRatio', 'SimpleState'), 'quantilesTDigestSimpleState': ('quantilesTDigest', 'SimpleState'), 'quantileDeterministicSimpleState': ('quantileDeterministic', 'SimpleState'), 'last_valueSimpleState': ('last_value', 'SimpleState'), 'cramersVSimpleState': ('cramersV', 'SimpleState'), 'first_valueSimpleState': ('first_value', 'SimpleState'), 'groupBitOrSimpleState': ('groupBitOr', 'SimpleState'), 'argMinSimpleState': ('argMin', 'SimpleState'), 'skewPopSimpleState': ('skewPop', 'SimpleState'), 'uniqCombined64SimpleState': ('uniqCombined64', 'SimpleState'), 'quantilesTDigestWeightedSimpleState': ('quantilesTDigestWeighted', 'SimpleState'), 'uniqThetaSimpleState': ('uniqTheta', 'SimpleState'), 'quantilesInterpolatedWeightedSimpleState': ('quantilesInterpolatedWeighted', 'SimpleState'), 'covarPopSimpleState': ('covarPop', 'SimpleState'), 'cramersVBiasCorrectedSimpleState': ('cramersVBiasCorrected', 'SimpleState'), 'avgWeightedSimpleState': ('avgWeighted', 'SimpleState'), 'quantileExactLowSimpleState': ('quantileExactLow', 'SimpleState'), 'groupArraySimpleState': ('groupArray', 'SimpleState'), 'sumWithOverflowSimpleState': ('sumWithOverflow', 'SimpleState'), 'quantileSimpleState': ('quantile', 'SimpleState'), 'categoricalInformationValueSimpleState': ('categoricalInformationValue', 'SimpleState'), 'exponentialTimeDecayedAvgSimpleState': ('exponentialTimeDecayedAvg', 'SimpleState'), 'sparkBarSimpleState': ('sparkBar', 'SimpleState'), 'groupBitmapOrSimpleState': ('groupBitmapOr', 'SimpleState'), 'argMaxSimpleState': ('argMax', 'SimpleState'), 'quantilesBFloat16WeightedSimpleState': ('quantilesBFloat16Weighted', 'SimpleState'), 'quantilesSimpleState': ('quantiles', 'SimpleState'), 'quantilesTimingWeightedSimpleState': ('quantilesTimingWeighted', 'SimpleState'), 'medianSimpleState': ('median', 'SimpleState'), 'groupArrayMovingSumSimpleState': ('groupArrayMovingSum', 'SimpleState'), 'sumSimpleState': ('sum', 'SimpleState'), 'welchTTestSimpleState': ('welchTTest', 'SimpleState'), 'quantileTDigestWeightedSimpleState': ('quantileTDigestWeighted', 'SimpleState'), 'quantileTimingSimpleState': ('quantileTiming', 'SimpleState'), 'sequenceCountSimpleState': ('sequenceCount', 'SimpleState'), 'histogramSimpleState': ('histogram', 'SimpleState'), 'quantileBFloat16SimpleState': ('quantileBFloat16', 'SimpleState'), 'uniqHLL12SimpleState': ('uniqHLL12', 'SimpleState'), 'quantileExactInclusiveSimpleState': ('quantileExactInclusive', 'SimpleState'), 'approx_top_sumSimpleState': ('approx_top_sum', 'SimpleState'), 'quantileGKSimpleState': ('quantileGK', 'SimpleState'), 'kurtPopSimpleState': ('kurtPop', 'SimpleState'), 'corrSimpleState': ('corr', 'SimpleState'), 'skewSampSimpleState': ('skewSamp', 'SimpleState'), 'quantileBFloat16WeightedSimpleState': ('quantileBFloat16Weighted', 'SimpleState'), 'quantileInterpolatedWeightedSimpleState': ('quantileInterpolatedWeighted', 'SimpleState'), 'quantilesExactLowSimpleState': ('quantilesExactLow', 'SimpleState'), 'groupBitmapXorSimpleState': ('groupBitmapXor', 'SimpleState'), 'sumMapSimpleState': ('sumMap', 'SimpleState'), 'stochasticLinearRegressionSimpleState': ('stochasticLinearRegression', 'SimpleState'), 'uniqCombinedSimpleState': ('uniqCombined', 'SimpleState'), 'intervalLengthSumSimpleState': ('intervalLengthSum', 'SimpleState'), 'sumKahanSimpleState': ('sumKahan', 'SimpleState'), 'groupArrayInsertAtSimpleState': ('groupArrayInsertAt', 'SimpleState'), 'maxIntersectionsPositionSimpleState': ('maxIntersectionsPosition', 'SimpleState'), 'uniqUpToSimpleState': ('uniqUpTo', 'SimpleState'), 'groupBitAndSimpleState': ('groupBitAnd', 'SimpleState'), 'sequenceMatchSimpleState': ('sequenceMatch', 'SimpleState'), 'deltaSumTimestampSimpleState': ('deltaSumTimestamp', 'SimpleState'), 'anySimpleState': ('any', 'SimpleState'), 'quantilesTimingSimpleState': ('quantilesTiming', 'SimpleState'), 'varSampSimpleState': ('varSamp', 'SimpleState'), 'groupArrayMovingAvgSimpleState': ('groupArrayMovingAvg', 'SimpleState'), 'retentionSimpleState': ('retention', 'SimpleState'), 'quantilesExactExclusiveSimpleState': ('quantilesExactExclusive', 'SimpleState'), 'kurtSampSimpleState': ('kurtSamp', 'SimpleState'), 'stddevSampSimpleState': ('stddevSamp', 'SimpleState'), 'quantilesBFloat16SimpleState': ('quantilesBFloat16', 'SimpleState'), 'quantilesGKSimpleState': ('quantilesGK', 'SimpleState'), 'mannWhitneyUTestSimpleState': ('mannWhitneyUTest', 'SimpleState'), 'exponentialMovingAverageSimpleState': ('exponentialMovingAverage', 'SimpleState'), 'meanZTestSimpleState': ('meanZTest', 'SimpleState'), 'groupBitmapAndSimpleState': ('groupBitmapAnd', 'SimpleState'), 'countSimpleState': ('count', 'SimpleState'), 'contingencySimpleState': ('contingency', 'SimpleState'), 'quantileTimingWeightedMergeState': ('quantileTimingWeighted', 'MergeState'), 'quantilesExactMergeState': ('quantilesExact', 'MergeState'), 'simpleLinearRegressionMergeState': ('simpleLinearRegression', 'MergeState'), 'groupBitmapMergeState': ('groupBitmap', 'MergeState'), 'sumCountMergeState': ('sumCount', 'MergeState'), 'quantileExactHighMergeState': ('quantileExactHigh', 'MergeState'), 'anyLastMergeState': ('anyLast', 'MergeState'), 'quantilesDeterministicMergeState': ('quantilesDeterministic', 'MergeState'), 'entropyMergeState': ('entropy', 'MergeState'), 'quantileTDigestMergeState': ('quantileTDigest', 'MergeState'), 'sequenceNextNodeMergeState': ('sequenceNextNode', 'MergeState'), 'studentTTestMergeState': ('studentTTest', 'MergeState'), 'rankCorrMergeState': ('rankCorr', 'MergeState'), 'maxIntersectionsMergeState': ('maxIntersections', 'MergeState'), 'deltaSumMergeState': ('deltaSum', 'MergeState'), 'covarSampMergeState': ('covarSamp', 'MergeState'), 'varPopMergeState': ('varPop', 'MergeState'), 'stochasticLogisticRegressionMergeState': ('stochasticLogisticRegression', 'MergeState'), 'groupArrayLastMergeState': ('groupArrayLast', 'MergeState'), 'groupConcatMergeState': ('groupConcat', 'MergeState'), 'windowFunnelMergeState': ('windowFunnel', 'MergeState'), 'kolmogorovSmirnovTestMergeState': ('kolmogorovSmirnovTest', 'MergeState'), 'maxMapMergeState': ('maxMap', 'MergeState'), 'largestTriangleThreeBucketsMergeState': ('largestTriangleThreeBuckets', 'MergeState'), 'quantilesExactWeightedMergeState': ('quantilesExactWeighted', 'MergeState'), 'quantileExactMergeState': ('quantileExact', 'MergeState'), 'topKWeightedMergeState': ('topKWeighted', 'MergeState'), 'groupUniqArrayMergeState': ('groupUniqArray', 'MergeState'), 'uniqExactMergeState': ('uniqExact', 'MergeState'), 'stddevPopMergeState': ('stddevPop', 'MergeState'), 'maxMergeState': ('max', 'MergeState'), 'topKMergeState': ('topK', 'MergeState'), 'groupBitXorMergeState': ('groupBitXor', 'MergeState'), 'avgMergeState': ('avg', 'MergeState'), 'uniqMergeState': ('uniq', 'MergeState'), 'quantilesExactHighMergeState': ('quantilesExactHigh', 'MergeState'), 'quantileExactWeightedMergeState': ('quantileExactWeighted', 'MergeState'), 'minMapMergeState': ('minMap', 'MergeState'), 'anyHeavyMergeState': ('anyHeavy', 'MergeState'), 'groupArraySampleMergeState': ('groupArraySample', 'MergeState'), 'theilsUMergeState': ('theilsU', 'MergeState'), 'minMergeState': ('min', 'MergeState'), 'boundingRatioMergeState': ('boundingRatio', 'MergeState'), 'quantilesTDigestMergeState': ('quantilesTDigest', 'MergeState'), 'quantileDeterministicMergeState': ('quantileDeterministic', 'MergeState'), 'last_valueMergeState': ('last_value', 'MergeState'), 'cramersVMergeState': ('cramersV', 'MergeState'), 'first_valueMergeState': ('first_value', 'MergeState'), 'groupBitOrMergeState': ('groupBitOr', 'MergeState'), 'argMinMergeState': ('argMin', 'MergeState'), 'skewPopMergeState': ('skewPop', 'MergeState'), 'uniqCombined64MergeState': ('uniqCombined64', 'MergeState'), 'quantilesTDigestWeightedMergeState': ('quantilesTDigestWeighted', 'MergeState'), 'uniqThetaMergeState': ('uniqTheta', 'MergeState'), 'quantilesInterpolatedWeightedMergeState': ('quantilesInterpolatedWeighted', 'MergeState'), 'covarPopMergeState': ('covarPop', 'MergeState'), 'cramersVBiasCorrectedMergeState': ('cramersVBiasCorrected', 'MergeState'), 'avgWeightedMergeState': ('avgWeighted', 'MergeState'), 'quantileExactLowMergeState': ('quantileExactLow', 'MergeState'), 'groupArrayMergeState': ('groupArray', 'MergeState'), 'sumWithOverflowMergeState': ('sumWithOverflow', 'MergeState'), 'quantileMergeState': ('quantile', 'MergeState'), 'categoricalInformationValueMergeState': ('categoricalInformationValue', 'MergeState'), 'exponentialTimeDecayedAvgMergeState': ('exponentialTimeDecayedAvg', 'MergeState'), 'sparkBarMergeState': ('sparkBar', 'MergeState'), 'groupBitmapOrMergeState': ('groupBitmapOr', 'MergeState'), 'argMaxMergeState': ('argMax', 'MergeState'), 'quantilesBFloat16WeightedMergeState': ('quantilesBFloat16Weighted', 'MergeState'), 'quantilesMergeState': ('quantiles', 'MergeState'), 'quantilesTimingWeightedMergeState': ('quantilesTimingWeighted', 'MergeState'), 'medianMergeState': ('median', 'MergeState'), 'groupArrayMovingSumMergeState': ('groupArrayMovingSum', 'MergeState'), 'sumMergeState': ('sum', 'MergeState'), 'welchTTestMergeState': ('welchTTest', 'MergeState'), 'quantileTDigestWeightedMergeState': ('quantileTDigestWeighted', 'MergeState'), 'quantileTimingMergeState': ('quantileTiming', 'MergeState'), 'sequenceCountMergeState': ('sequenceCount', 'MergeState'), 'histogramMergeState': ('histogram', 'MergeState'), 'quantileBFloat16MergeState': ('quantileBFloat16', 'MergeState'), 'uniqHLL12MergeState': ('uniqHLL12', 'MergeState'), 'quantileExactInclusiveMergeState': ('quantileExactInclusive', 'MergeState'), 'approx_top_sumMergeState': ('approx_top_sum', 'MergeState'), 'quantileGKMergeState': ('quantileGK', 'MergeState'), 'kurtPopMergeState': ('kurtPop', 'MergeState'), 'corrMergeState': ('corr', 'MergeState'), 'skewSampMergeState': ('skewSamp', 'MergeState'), 'quantileBFloat16WeightedMergeState': ('quantileBFloat16Weighted', 'MergeState'), 'quantileInterpolatedWeightedMergeState': ('quantileInterpolatedWeighted', 'MergeState'), 'quantilesExactLowMergeState': ('quantilesExactLow', 'MergeState'), 'groupBitmapXorMergeState': ('groupBitmapXor', 'MergeState'), 'sumMapMergeState': ('sumMap', 'MergeState'), 'stochasticLinearRegressionMergeState': ('stochasticLinearRegression', 'MergeState'), 'uniqCombinedMergeState': ('uniqCombined', 'MergeState'), 'intervalLengthSumMergeState': ('intervalLengthSum', 'MergeState'), 'sumKahanMergeState': ('sumKahan', 'MergeState'), 'groupArrayInsertAtMergeState': ('groupArrayInsertAt', 'MergeState'), 'maxIntersectionsPositionMergeState': ('maxIntersectionsPosition', 'MergeState'), 'uniqUpToMergeState': ('uniqUpTo', 'MergeState'), 'groupBitAndMergeState': ('groupBitAnd', 'MergeState'), 'sequenceMatchMergeState': ('sequenceMatch', 'MergeState'), 'deltaSumTimestampMergeState': ('deltaSumTimestamp', 'MergeState'), 'anyMergeState': ('any', 'MergeState'), 'quantilesTimingMergeState': ('quantilesTiming', 'MergeState'), 'varSampMergeState': ('varSamp', 'MergeState'), 'groupArrayMovingAvgMergeState': ('groupArrayMovingAvg', 'MergeState'), 'retentionMergeState': ('retention', 'MergeState'), 'quantilesExactExclusiveMergeState': ('quantilesExactExclusive', 'MergeState'), 'kurtSampMergeState': ('kurtSamp', 'MergeState'), 'stddevSampMergeState': ('stddevSamp', 'MergeState'), 'quantilesBFloat16MergeState': ('quantilesBFloat16', 'MergeState'), 'quantilesGKMergeState': ('quantilesGK', 'MergeState'), 'mannWhitneyUTestMergeState': ('mannWhitneyUTest', 'MergeState'), 'exponentialMovingAverageMergeState': ('exponentialMovingAverage', 'MergeState'), 'meanZTestMergeState': ('meanZTest', 'MergeState'), 'groupBitmapAndMergeState': ('groupBitmapAnd', 'MergeState'), 'countMergeState': ('count', 'MergeState'), 'contingencyMergeState': ('contingency', 'MergeState'), 'quantileTimingWeightedOrDefault': ('quantileTimingWeighted', 'OrDefault'), 'quantilesExactOrDefault': ('quantilesExact', 'OrDefault'), 'simpleLinearRegressionOrDefault': ('simpleLinearRegression', 'OrDefault'), 'groupBitmapOrDefault': ('groupBitmap', 'OrDefault'), 'sumCountOrDefault': ('sumCount', 'OrDefault'), 'quantileExactHighOrDefault': ('quantileExactHigh', 'OrDefault'), 'anyLastOrDefault': ('anyLast', 'OrDefault'), 'quantilesDeterministicOrDefault': ('quantilesDeterministic', 'OrDefault'), 'entropyOrDefault': ('entropy', 'OrDefault'), 'quantileTDigestOrDefault': ('quantileTDigest', 'OrDefault'), 'sequenceNextNodeOrDefault': ('sequenceNextNode', 'OrDefault'), 'studentTTestOrDefault': ('studentTTest', 'OrDefault'), 'rankCorrOrDefault': ('rankCorr', 'OrDefault'), 'maxIntersectionsOrDefault': ('maxIntersections', 'OrDefault'), 'deltaSumOrDefault': ('deltaSum', 'OrDefault'), 'covarSampOrDefault': ('covarSamp', 'OrDefault'), 'varPopOrDefault': ('varPop', 'OrDefault'), 'stochasticLogisticRegressionOrDefault': ('stochasticLogisticRegression', 'OrDefault'), 'groupArrayLastOrDefault': ('groupArrayLast', 'OrDefault'), 'groupConcatOrDefault': ('groupConcat', 'OrDefault'), 'windowFunnelOrDefault': ('windowFunnel', 'OrDefault'), 'kolmogorovSmirnovTestOrDefault': ('kolmogorovSmirnovTest', 'OrDefault'), 'maxMapOrDefault': ('maxMap', 'OrDefault'), 'largestTriangleThreeBucketsOrDefault': ('largestTriangleThreeBuckets', 'OrDefault'), 'quantilesExactWeightedOrDefault': ('quantilesExactWeighted', 'OrDefault'), 'quantileExactOrDefault': ('quantileExact', 'OrDefault'), 'topKWeightedOrDefault': ('topKWeighted', 'OrDefault'), 'groupUniqArrayOrDefault': ('groupUniqArray', 'OrDefault'), 'uniqExactOrDefault': ('uniqExact', 'OrDefault'), 'stddevPopOrDefault': ('stddevPop', 'OrDefault'), 'maxOrDefault': ('max', 'OrDefault'), 'topKOrDefault': ('topK', 'OrDefault'), 'groupBitXorOrDefault': ('groupBitXor', 'OrDefault'), 'avgOrDefault': ('avg', 'OrDefault'), 'uniqOrDefault': ('uniq', 'OrDefault'), 'quantilesExactHighOrDefault': ('quantilesExactHigh', 'OrDefault'), 'quantileExactWeightedOrDefault': ('quantileExactWeighted', 'OrDefault'), 'minMapOrDefault': ('minMap', 'OrDefault'), 'anyHeavyOrDefault': ('anyHeavy', 'OrDefault'), 'groupArraySampleOrDefault': ('groupArraySample', 'OrDefault'), 'theilsUOrDefault': ('theilsU', 'OrDefault'), 'minOrDefault': ('min', 'OrDefault'), 'boundingRatioOrDefault': ('boundingRatio', 'OrDefault'), 'quantilesTDigestOrDefault': ('quantilesTDigest', 'OrDefault'), 'quantileDeterministicOrDefault': ('quantileDeterministic', 'OrDefault'), 'last_valueOrDefault': ('last_value', 'OrDefault'), 'cramersVOrDefault': ('cramersV', 'OrDefault'), 'first_valueOrDefault': ('first_value', 'OrDefault'), 'groupBitOrOrDefault': ('groupBitOr', 'OrDefault'), 'argMinOrDefault': ('argMin', 'OrDefault'), 'skewPopOrDefault': ('skewPop', 'OrDefault'), 'uniqCombined64OrDefault': ('uniqCombined64', 'OrDefault'), 'quantilesTDigestWeightedOrDefault': ('quantilesTDigestWeighted', 'OrDefault'), 'uniqThetaOrDefault': ('uniqTheta', 'OrDefault'), 'quantilesInterpolatedWeightedOrDefault': ('quantilesInterpolatedWeighted', 'OrDefault'), 'covarPopOrDefault': ('covarPop', 'OrDefault'), 'cramersVBiasCorrectedOrDefault': ('cramersVBiasCorrected', 'OrDefault'), 'avgWeightedOrDefault': ('avgWeighted', 'OrDefault'), 'quantileExactLowOrDefault': ('quantileExactLow', 'OrDefault'), 'groupArrayOrDefault': ('groupArray', 'OrDefault'), 'sumWithOverflowOrDefault': ('sumWithOverflow', 'OrDefault'), 'quantileOrDefault': ('quantile', 'OrDefault'), 'categoricalInformationValueOrDefault': ('categoricalInformationValue', 'OrDefault'), 'exponentialTimeDecayedAvgOrDefault': ('exponentialTimeDecayedAvg', 'OrDefault'), 'sparkBarOrDefault': ('sparkBar', 'OrDefault'), 'groupBitmapOrOrDefault': ('groupBitmapOr', 'OrDefault'), 'argMaxOrDefault': ('argMax', 'OrDefault'), 'quantilesBFloat16WeightedOrDefault': ('quantilesBFloat16Weighted', 'OrDefault'), 'quantilesOrDefault': ('quantiles', 'OrDefault'), 'quantilesTimingWeightedOrDefault': ('quantilesTimingWeighted', 'OrDefault'), 'medianOrDefault': ('median', 'OrDefault'), 'groupArrayMovingSumOrDefault': ('groupArrayMovingSum', 'OrDefault'), 'sumOrDefault': ('sum', 'OrDefault'), 'welchTTestOrDefault': ('welchTTest', 'OrDefault'), 'quantileTDigestWeightedOrDefault': ('quantileTDigestWeighted', 'OrDefault'), 'quantileTimingOrDefault': ('quantileTiming', 'OrDefault'), 'sequenceCountOrDefault': ('sequenceCount', 'OrDefault'), 'histogramOrDefault': ('histogram', 'OrDefault'), 'quantileBFloat16OrDefault': ('quantileBFloat16', 'OrDefault'), 'uniqHLL12OrDefault': ('uniqHLL12', 'OrDefault'), 'quantileExactInclusiveOrDefault': ('quantileExactInclusive', 'OrDefault'), 'approx_top_sumOrDefault': ('approx_top_sum', 'OrDefault'), 'quantileGKOrDefault': ('quantileGK', 'OrDefault'), 'kurtPopOrDefault': ('kurtPop', 'OrDefault'), 'corrOrDefault': ('corr', 'OrDefault'), 'skewSampOrDefault': ('skewSamp', 'OrDefault'), 'quantileBFloat16WeightedOrDefault': ('quantileBFloat16Weighted', 'OrDefault'), 'quantileInterpolatedWeightedOrDefault': ('quantileInterpolatedWeighted', 'OrDefault'), 'quantilesExactLowOrDefault': ('quantilesExactLow', 'OrDefault'), 'groupBitmapXorOrDefault': ('groupBitmapXor', 'OrDefault'), 'sumMapOrDefault': ('sumMap', 'OrDefault'), 'stochasticLinearRegressionOrDefault': ('stochasticLinearRegression', 'OrDefault'), 'uniqCombinedOrDefault': ('uniqCombined', 'OrDefault'), 'intervalLengthSumOrDefault': ('intervalLengthSum', 'OrDefault'), 'sumKahanOrDefault': ('sumKahan', 'OrDefault'), 'groupArrayInsertAtOrDefault': ('groupArrayInsertAt', 'OrDefault'), 'maxIntersectionsPositionOrDefault': ('maxIntersectionsPosition', 'OrDefault'), 'uniqUpToOrDefault': ('uniqUpTo', 'OrDefault'), 'groupBitAndOrDefault': ('groupBitAnd', 'OrDefault'), 'sequenceMatchOrDefault': ('sequenceMatch', 'OrDefault'), 'deltaSumTimestampOrDefault': ('deltaSumTimestamp', 'OrDefault'), 'anyOrDefault': ('any', 'OrDefault'), 'quantilesTimingOrDefault': ('quantilesTiming', 'OrDefault'), 'varSampOrDefault': ('varSamp', 'OrDefault'), 'groupArrayMovingAvgOrDefault': ('groupArrayMovingAvg', 'OrDefault'), 'retentionOrDefault': ('retention', 'OrDefault'), 'quantilesExactExclusiveOrDefault': ('quantilesExactExclusive', 'OrDefault'), 'kurtSampOrDefault': ('kurtSamp', 'OrDefault'), 'stddevSampOrDefault': ('stddevSamp', 'OrDefault'), 'quantilesBFloat16OrDefault': ('quantilesBFloat16', 'OrDefault'), 'quantilesGKOrDefault': ('quantilesGK', 'OrDefault'), 'mannWhitneyUTestOrDefault': ('mannWhitneyUTest', 'OrDefault'), 'exponentialMovingAverageOrDefault': ('exponentialMovingAverage', 'OrDefault'), 'meanZTestOrDefault': ('meanZTest', 'OrDefault'), 'groupBitmapAndOrDefault': ('groupBitmapAnd', 'OrDefault'), 'countOrDefault': ('count', 'OrDefault'), 'contingencyOrDefault': ('contingency', 'OrDefault'), 'quantileTimingWeightedDistinct': ('quantileTimingWeighted', 'Distinct'), 'quantilesExactDistinct': ('quantilesExact', 'Distinct'), 'simpleLinearRegressionDistinct': ('simpleLinearRegression', 'Distinct'), 'groupBitmapDistinct': ('groupBitmap', 'Distinct'), 'sumCountDistinct': ('sumCount', 'Distinct'), 'quantileExactHighDistinct': ('quantileExactHigh', 'Distinct'), 'anyLastDistinct': ('anyLast', 'Distinct'), 'quantilesDeterministicDistinct': ('quantilesDeterministic', 'Distinct'), 'entropyDistinct': ('entropy', 'Distinct'), 'quantileTDigestDistinct': ('quantileTDigest', 'Distinct'), 'sequenceNextNodeDistinct': ('sequenceNextNode', 'Distinct'), 'studentTTestDistinct': ('studentTTest', 'Distinct'), 'rankCorrDistinct': ('rankCorr', 'Distinct'), 'maxIntersectionsDistinct': ('maxIntersections', 'Distinct'), 'deltaSumDistinct': ('deltaSum', 'Distinct'), 'covarSampDistinct': ('covarSamp', 'Distinct'), 'varPopDistinct': ('varPop', 'Distinct'), 'stochasticLogisticRegressionDistinct': ('stochasticLogisticRegression', 'Distinct'), 'groupArrayLastDistinct': ('groupArrayLast', 'Distinct'), 'groupConcatDistinct': ('groupConcat', 'Distinct'), 'windowFunnelDistinct': ('windowFunnel', 'Distinct'), 'kolmogorovSmirnovTestDistinct': ('kolmogorovSmirnovTest', 'Distinct'), 'maxMapDistinct': ('maxMap', 'Distinct'), 'largestTriangleThreeBucketsDistinct': ('largestTriangleThreeBuckets', 'Distinct'), 'quantilesExactWeightedDistinct': ('quantilesExactWeighted', 'Distinct'), 'quantileExactDistinct': ('quantileExact', 'Distinct'), 'topKWeightedDistinct': ('topKWeighted', 'Distinct'), 'groupUniqArrayDistinct': ('groupUniqArray', 'Distinct'), 'uniqExactDistinct': ('uniqExact', 'Distinct'), 'stddevPopDistinct': ('stddevPop', 'Distinct'), 'maxDistinct': ('max', 'Distinct'), 'topKDistinct': ('topK', 'Distinct'), 'groupBitXorDistinct': ('groupBitXor', 'Distinct'), 'avgDistinct': ('avg', 'Distinct'), 'uniqDistinct': ('uniq', 'Distinct'), 'quantilesExactHighDistinct': ('quantilesExactHigh', 'Distinct'), 'quantileExactWeightedDistinct': ('quantileExactWeighted', 'Distinct'), 'minMapDistinct': ('minMap', 'Distinct'), 'anyHeavyDistinct': ('anyHeavy', 'Distinct'), 'groupArraySampleDistinct': ('groupArraySample', 'Distinct'), 'theilsUDistinct': ('theilsU', 'Distinct'), 'minDistinct': ('min', 'Distinct'), 'boundingRatioDistinct': ('boundingRatio', 'Distinct'), 'quantilesTDigestDistinct': ('quantilesTDigest', 'Distinct'), 'quantileDeterministicDistinct': ('quantileDeterministic', 'Distinct'), 'last_valueDistinct': ('last_value', 'Distinct'), 'cramersVDistinct': ('cramersV', 'Distinct'), 'first_valueDistinct': ('first_value', 'Distinct'), 'groupBitOrDistinct': ('groupBitOr', 'Distinct'), 'argMinDistinct': ('argMin', 'Distinct'), 'skewPopDistinct': ('skewPop', 'Distinct'), 'uniqCombined64Distinct': ('uniqCombined64', 'Distinct'), 'quantilesTDigestWeightedDistinct': ('quantilesTDigestWeighted', 'Distinct'), 'uniqThetaDistinct': ('uniqTheta', 'Distinct'), 'quantilesInterpolatedWeightedDistinct': ('quantilesInterpolatedWeighted', 'Distinct'), 'covarPopDistinct': ('covarPop', 'Distinct'), 'cramersVBiasCorrectedDistinct': ('cramersVBiasCorrected', 'Distinct'), 'avgWeightedDistinct': ('avgWeighted', 'Distinct'), 'quantileExactLowDistinct': ('quantileExactLow', 'Distinct'), 'groupArrayDistinct': ('groupArray', 'Distinct'), 'sumWithOverflowDistinct': ('sumWithOverflow', 'Distinct'), 'quantileDistinct': ('quantile', 'Distinct'), 'categoricalInformationValueDistinct': ('categoricalInformationValue', 'Distinct'), 'exponentialTimeDecayedAvgDistinct': ('exponentialTimeDecayedAvg', 'Distinct'), 'sparkBarDistinct': ('sparkBar', 'Distinct'), 'groupBitmapOrDistinct': ('groupBitmapOr', 'Distinct'), 'argMaxDistinct': ('argMax', 'Distinct'), 'quantilesBFloat16WeightedDistinct': ('quantilesBFloat16Weighted', 'Distinct'), 'quantilesDistinct': ('quantiles', 'Distinct'), 'quantilesTimingWeightedDistinct': ('quantilesTimingWeighted', 'Distinct'), 'medianDistinct': ('median', 'Distinct'), 'groupArrayMovingSumDistinct': ('groupArrayMovingSum', 'Distinct'), 'sumDistinct': ('sum', 'Distinct'), 'welchTTestDistinct': ('welchTTest', 'Distinct'), 'quantileTDigestWeightedDistinct': ('quantileTDigestWeighted', 'Distinct'), 'quantileTimingDistinct': ('quantileTiming', 'Distinct'), 'sequenceCountDistinct': ('sequenceCount', 'Distinct'), 'histogramDistinct': ('histogram', 'Distinct'), 'quantileBFloat16Distinct': ('quantileBFloat16', 'Distinct'), 'uniqHLL12Distinct': ('uniqHLL12', 'Distinct'), 'quantileExactInclusiveDistinct': ('quantileExactInclusive', 'Distinct'), 'approx_top_sumDistinct': ('approx_top_sum', 'Distinct'), 'quantileGKDistinct': ('quantileGK', 'Distinct'), 'kurtPopDistinct': ('kurtPop', 'Distinct'), 'corrDistinct': ('corr', 'Distinct'), 'skewSampDistinct': ('skewSamp', 'Distinct'), 'quantileBFloat16WeightedDistinct': ('quantileBFloat16Weighted', 'Distinct'), 'quantileInterpolatedWeightedDistinct': ('quantileInterpolatedWeighted', 'Distinct'), 'quantilesExactLowDistinct': ('quantilesExactLow', 'Distinct'), 'groupBitmapXorDistinct': ('groupBitmapXor', 'Distinct'), 'sumMapDistinct': ('sumMap', 'Distinct'), 'stochasticLinearRegressionDistinct': ('stochasticLinearRegression', 'Distinct'), 'uniqCombinedDistinct': ('uniqCombined', 'Distinct'), 'intervalLengthSumDistinct': ('intervalLengthSum', 'Distinct'), 'sumKahanDistinct': ('sumKahan', 'Distinct'), 'groupArrayInsertAtDistinct': ('groupArrayInsertAt', 'Distinct'), 'maxIntersectionsPositionDistinct': ('maxIntersectionsPosition', 'Distinct'), 'uniqUpToDistinct': ('uniqUpTo', 'Distinct'), 'groupBitAndDistinct': ('groupBitAnd', 'Distinct'), 'sequenceMatchDistinct': ('sequenceMatch', 'Distinct'), 'deltaSumTimestampDistinct': ('deltaSumTimestamp', 'Distinct'), 'anyDistinct': ('any', 'Distinct'), 'quantilesTimingDistinct': ('quantilesTiming', 'Distinct'), 'varSampDistinct': ('varSamp', 'Distinct'), 'groupArrayMovingAvgDistinct': ('groupArrayMovingAvg', 'Distinct'), 'retentionDistinct': ('retention', 'Distinct'), 'quantilesExactExclusiveDistinct': ('quantilesExactExclusive', 'Distinct'), 'kurtSampDistinct': ('kurtSamp', 'Distinct'), 'stddevSampDistinct': ('stddevSamp', 'Distinct'), 'quantilesBFloat16Distinct': ('quantilesBFloat16', 'Distinct'), 'quantilesGKDistinct': ('quantilesGK', 'Distinct'), 'mannWhitneyUTestDistinct': ('mannWhitneyUTest', 'Distinct'), 'exponentialMovingAverageDistinct': ('exponentialMovingAverage', 'Distinct'), 'meanZTestDistinct': ('meanZTest', 'Distinct'), 'groupBitmapAndDistinct': ('groupBitmapAnd', 'Distinct'), 'countDistinct': ('count', 'Distinct'), 'contingencyDistinct': ('contingency', 'Distinct'), 'quantileTimingWeightedResample': ('quantileTimingWeighted', 'Resample'), 'quantilesExactResample': ('quantilesExact', 'Resample'), 'simpleLinearRegressionResample': ('simpleLinearRegression', 'Resample'), 'groupBitmapResample': ('groupBitmap', 'Resample'), 'sumCountResample': ('sumCount', 'Resample'), 'quantileExactHighResample': ('quantileExactHigh', 'Resample'), 'anyLastResample': ('anyLast', 'Resample'), 'quantilesDeterministicResample': ('quantilesDeterministic', 'Resample'), 'entropyResample': ('entropy', 'Resample'), 'quantileTDigestResample': ('quantileTDigest', 'Resample'), 'sequenceNextNodeResample': ('sequenceNextNode', 'Resample'), 'studentTTestResample': ('studentTTest', 'Resample'), 'rankCorrResample': ('rankCorr', 'Resample'), 'maxIntersectionsResample': ('maxIntersections', 'Resample'), 'deltaSumResample': ('deltaSum', 'Resample'), 'covarSampResample': ('covarSamp', 'Resample'), 'varPopResample': ('varPop', 'Resample'), 'stochasticLogisticRegressionResample': ('stochasticLogisticRegression', 'Resample'), 'groupArrayLastResample': ('groupArrayLast', 'Resample'), 'groupConcatResample': ('groupConcat', 'Resample'), 'windowFunnelResample': ('windowFunnel', 'Resample'), 'kolmogorovSmirnovTestResample': ('kolmogorovSmirnovTest', 'Resample'), 'maxMapResample': ('maxMap', 'Resample'), 'largestTriangleThreeBucketsResample': ('largestTriangleThreeBuckets', 'Resample'), 'quantilesExactWeightedResample': ('quantilesExactWeighted', 'Resample'), 'quantileExactResample': ('quantileExact', 'Resample'), 'topKWeightedResample': ('topKWeighted', 'Resample'), 'groupUniqArrayResample': ('groupUniqArray', 'Resample'), 'uniqExactResample': ('uniqExact', 'Resample'), 'stddevPopResample': ('stddevPop', 'Resample'), 'maxResample': ('max', 'Resample'), 'topKResample': ('topK', 'Resample'), 'groupBitXorResample': ('groupBitXor', 'Resample'), 'avgResample': ('avg', 'Resample'), 'uniqResample': ('uniq', 'Resample'), 'quantilesExactHighResample': ('quantilesExactHigh', 'Resample'), 'quantileExactWeightedResample': ('quantileExactWeighted', 'Resample'), 'minMapResample': ('minMap', 'Resample'), 'anyHeavyResample': ('anyHeavy', 'Resample'), 'groupArraySampleResample': ('groupArraySample', 'Resample'), 'theilsUResample': ('theilsU', 'Resample'), 'minResample': ('min', 'Resample'), 'boundingRatioResample': ('boundingRatio', 'Resample'), 'quantilesTDigestResample': ('quantilesTDigest', 'Resample'), 'quantileDeterministicResample': ('quantileDeterministic', 'Resample'), 'last_valueResample': ('last_value', 'Resample'), 'cramersVResample': ('cramersV', 'Resample'), 'first_valueResample': ('first_value', 'Resample'), 'groupBitOrResample': ('groupBitOr', 'Resample'), 'argMinResample': ('argMin', 'Resample'), 'skewPopResample': ('skewPop', 'Resample'), 'uniqCombined64Resample': ('uniqCombined64', 'Resample'), 'quantilesTDigestWeightedResample': ('quantilesTDigestWeighted', 'Resample'), 'uniqThetaResample': ('uniqTheta', 'Resample'), 'quantilesInterpolatedWeightedResample': ('quantilesInterpolatedWeighted', 'Resample'), 'covarPopResample': ('covarPop', 'Resample'), 'cramersVBiasCorrectedResample': ('cramersVBiasCorrected', 'Resample'), 'avgWeightedResample': ('avgWeighted', 'Resample'), 'quantileExactLowResample': ('quantileExactLow', 'Resample'), 'groupArrayResample': ('groupArray', 'Resample'), 'sumWithOverflowResample': ('sumWithOverflow', 'Resample'), 'quantileResample': ('quantile', 'Resample'), 'categoricalInformationValueResample': ('categoricalInformationValue', 'Resample'), 'exponentialTimeDecayedAvgResample': ('exponentialTimeDecayedAvg', 'Resample'), 'sparkBarResample': ('sparkBar', 'Resample'), 'groupBitmapOrResample': ('groupBitmapOr', 'Resample'), 'argMaxResample': ('argMax', 'Resample'), 'quantilesBFloat16WeightedResample': ('quantilesBFloat16Weighted', 'Resample'), 'quantilesResample': ('quantiles', 'Resample'), 'quantilesTimingWeightedResample': ('quantilesTimingWeighted', 'Resample'), 'medianResample': ('median', 'Resample'), 'groupArrayMovingSumResample': ('groupArrayMovingSum', 'Resample'), 'sumResample': ('sum', 'Resample'), 'welchTTestResample': ('welchTTest', 'Resample'), 'quantileTDigestWeightedResample': ('quantileTDigestWeighted', 'Resample'), 'quantileTimingResample': ('quantileTiming', 'Resample'), 'sequenceCountResample': ('sequenceCount', 'Resample'), 'histogramResample': ('histogram', 'Resample'), 'quantileBFloat16Resample': ('quantileBFloat16', 'Resample'), 'uniqHLL12Resample': ('uniqHLL12', 'Resample'), 'quantileExactInclusiveResample': ('quantileExactInclusive', 'Resample'), 'approx_top_sumResample': ('approx_top_sum', 'Resample'), 'quantileGKResample': ('quantileGK', 'Resample'), 'kurtPopResample': ('kurtPop', 'Resample'), 'corrResample': ('corr', 'Resample'), 'skewSampResample': ('skewSamp', 'Resample'), 'quantileBFloat16WeightedResample': ('quantileBFloat16Weighted', 'Resample'), 'quantileInterpolatedWeightedResample': ('quantileInterpolatedWeighted', 'Resample'), 'quantilesExactLowResample': ('quantilesExactLow', 'Resample'), 'groupBitmapXorResample': ('groupBitmapXor', 'Resample'), 'sumMapResample': ('sumMap', 'Resample'), 'stochasticLinearRegressionResample': ('stochasticLinearRegression', 'Resample'), 'uniqCombinedResample': ('uniqCombined', 'Resample'), 'intervalLengthSumResample': ('intervalLengthSum', 'Resample'), 'sumKahanResample': ('sumKahan', 'Resample'), 'groupArrayInsertAtResample': ('groupArrayInsertAt', 'Resample'), 'maxIntersectionsPositionResample': ('maxIntersectionsPosition', 'Resample'), 'uniqUpToResample': ('uniqUpTo', 'Resample'), 'groupBitAndResample': ('groupBitAnd', 'Resample'), 'sequenceMatchResample': ('sequenceMatch', 'Resample'), 'deltaSumTimestampResample': ('deltaSumTimestamp', 'Resample'), 'anyResample': ('any', 'Resample'), 'quantilesTimingResample': ('quantilesTiming', 'Resample'), 'varSampResample': ('varSamp', 'Resample'), 'groupArrayMovingAvgResample': ('groupArrayMovingAvg', 'Resample'), 'retentionResample': ('retention', 'Resample'), 'quantilesExactExclusiveResample': ('quantilesExactExclusive', 'Resample'), 'kurtSampResample': ('kurtSamp', 'Resample'), 'stddevSampResample': ('stddevSamp', 'Resample'), 'quantilesBFloat16Resample': ('quantilesBFloat16', 'Resample'), 'quantilesGKResample': ('quantilesGK', 'Resample'), 'mannWhitneyUTestResample': ('mannWhitneyUTest', 'Resample'), 'exponentialMovingAverageResample': ('exponentialMovingAverage', 'Resample'), 'meanZTestResample': ('meanZTest', 'Resample'), 'groupBitmapAndResample': ('groupBitmapAnd', 'Resample'), 'countResample': ('count', 'Resample'), 'contingencyResample': ('contingency', 'Resample'), 'quantileTimingWeightedArrayIf': ('quantileTimingWeighted', 'ArrayIf'), 'quantilesExactArrayIf': ('quantilesExact', 'ArrayIf'), 'simpleLinearRegressionArrayIf': ('simpleLinearRegression', 'ArrayIf'), 'groupBitmapArrayIf': ('groupBitmap', 'ArrayIf'), 'sumCountArrayIf': ('sumCount', 'ArrayIf'), 'quantileExactHighArrayIf': ('quantileExactHigh', 'ArrayIf'), 'anyLastArrayIf': ('anyLast', 'ArrayIf'), 'quantilesDeterministicArrayIf': ('quantilesDeterministic', 'ArrayIf'), 'entropyArrayIf': ('entropy', 'ArrayIf'), 'quantileTDigestArrayIf': ('quantileTDigest', 'ArrayIf'), 'sequenceNextNodeArrayIf': ('sequenceNextNode', 'ArrayIf'), 'studentTTestArrayIf': ('studentTTest', 'ArrayIf'), 'rankCorrArrayIf': ('rankCorr', 'ArrayIf'), 'maxIntersectionsArrayIf': ('maxIntersections', 'ArrayIf'), 'deltaSumArrayIf': ('deltaSum', 'ArrayIf'), 'covarSampArrayIf': ('covarSamp', 'ArrayIf'), 'varPopArrayIf': ('varPop', 'ArrayIf'), 'stochasticLogisticRegressionArrayIf': ('stochasticLogisticRegression', 'ArrayIf'), 'groupArrayLastArrayIf': ('groupArrayLast', 'ArrayIf'), 'groupConcatArrayIf': ('groupConcat', 'ArrayIf'), 'windowFunnelArrayIf': ('windowFunnel', 'ArrayIf'), 'kolmogorovSmirnovTestArrayIf': ('kolmogorovSmirnovTest', 'ArrayIf'), 'maxMapArrayIf': ('maxMap', 'ArrayIf'), 'largestTriangleThreeBucketsArrayIf': ('largestTriangleThreeBuckets', 'ArrayIf'), 'quantilesExactWeightedArrayIf': ('quantilesExactWeighted', 'ArrayIf'), 'quantileExactArrayIf': ('quantileExact', 'ArrayIf'), 'topKWeightedArrayIf': ('topKWeighted', 'ArrayIf'), 'groupUniqArrayArrayIf': ('groupUniqArray', 'ArrayIf'), 'uniqExactArrayIf': ('uniqExact', 'ArrayIf'), 'stddevPopArrayIf': ('stddevPop', 'ArrayIf'), 'maxArrayIf': ('max', 'ArrayIf'), 'topKArrayIf': ('topK', 'ArrayIf'), 'groupBitXorArrayIf': ('groupBitXor', 'ArrayIf'), 'avgArrayIf': ('avg', 'ArrayIf'), 'uniqArrayIf': ('uniq', 'ArrayIf'), 'quantilesExactHighArrayIf': ('quantilesExactHigh', 'ArrayIf'), 'quantileExactWeightedArrayIf': ('quantileExactWeighted', 'ArrayIf'), 'minMapArrayIf': ('minMap', 'ArrayIf'), 'anyHeavyArrayIf': ('anyHeavy', 'ArrayIf'), 'groupArraySampleArrayIf': ('groupArraySample', 'ArrayIf'), 'theilsUArrayIf': ('theilsU', 'ArrayIf'), 'minArrayIf': ('min', 'ArrayIf'), 'boundingRatioArrayIf': ('boundingRatio', 'ArrayIf'), 'quantilesTDigestArrayIf': ('quantilesTDigest', 'ArrayIf'), 'quantileDeterministicArrayIf': ('quantileDeterministic', 'ArrayIf'), 'last_valueArrayIf': ('last_value', 'ArrayIf'), 'cramersVArrayIf': ('cramersV', 'ArrayIf'), 'first_valueArrayIf': ('first_value', 'ArrayIf'), 'groupBitOrArrayIf': ('groupBitOr', 'ArrayIf'), 'argMinArrayIf': ('argMin', 'ArrayIf'), 'skewPopArrayIf': ('skewPop', 'ArrayIf'), 'uniqCombined64ArrayIf': ('uniqCombined64', 'ArrayIf'), 'quantilesTDigestWeightedArrayIf': ('quantilesTDigestWeighted', 'ArrayIf'), 'uniqThetaArrayIf': ('uniqTheta', 'ArrayIf'), 'quantilesInterpolatedWeightedArrayIf': ('quantilesInterpolatedWeighted', 'ArrayIf'), 'covarPopArrayIf': ('covarPop', 'ArrayIf'), 'cramersVBiasCorrectedArrayIf': ('cramersVBiasCorrected', 'ArrayIf'), 'avgWeightedArrayIf': ('avgWeighted', 'ArrayIf'), 'quantileExactLowArrayIf': ('quantileExactLow', 'ArrayIf'), 'groupArrayArrayIf': ('groupArray', 'ArrayIf'), 'sumWithOverflowArrayIf': ('sumWithOverflow', 'ArrayIf'), 'quantileArrayIf': ('quantile', 'ArrayIf'), 'categoricalInformationValueArrayIf': ('categoricalInformationValue', 'ArrayIf'), 'exponentialTimeDecayedAvgArrayIf': ('exponentialTimeDecayedAvg', 'ArrayIf'), 'sparkBarArrayIf': ('sparkBar', 'ArrayIf'), 'groupBitmapOrArrayIf': ('groupBitmapOr', 'ArrayIf'), 'argMaxArrayIf': ('argMax', 'ArrayIf'), 'quantilesBFloat16WeightedArrayIf': ('quantilesBFloat16Weighted', 'ArrayIf'), 'quantilesArrayIf': ('quantiles', 'ArrayIf'), 'quantilesTimingWeightedArrayIf': ('quantilesTimingWeighted', 'ArrayIf'), 'medianArrayIf': ('median', 'ArrayIf'), 'groupArrayMovingSumArrayIf': ('groupArrayMovingSum', 'ArrayIf'), 'sumArrayIf': ('sum', 'ArrayIf'), 'welchTTestArrayIf': ('welchTTest', 'ArrayIf'), 'quantileTDigestWeightedArrayIf': ('quantileTDigestWeighted', 'ArrayIf'), 'quantileTimingArrayIf': ('quantileTiming', 'ArrayIf'), 'sequenceCountArrayIf': ('sequenceCount', 'ArrayIf'), 'histogramArrayIf': ('histogram', 'ArrayIf'), 'quantileBFloat16ArrayIf': ('quantileBFloat16', 'ArrayIf'), 'uniqHLL12ArrayIf': ('uniqHLL12', 'ArrayIf'), 'quantileExactInclusiveArrayIf': ('quantileExactInclusive', 'ArrayIf'), 'approx_top_sumArrayIf': ('approx_top_sum', 'ArrayIf'), 'quantileGKArrayIf': ('quantileGK', 'ArrayIf'), 'kurtPopArrayIf': ('kurtPop', 'ArrayIf'), 'corrArrayIf': ('corr', 'ArrayIf'), 'skewSampArrayIf': ('skewSamp', 'ArrayIf'), 'quantileBFloat16WeightedArrayIf': ('quantileBFloat16Weighted', 'ArrayIf'), 'quantileInterpolatedWeightedArrayIf': ('quantileInterpolatedWeighted', 'ArrayIf'), 'quantilesExactLowArrayIf': ('quantilesExactLow', 'ArrayIf'), 'groupBitmapXorArrayIf': ('groupBitmapXor', 'ArrayIf'), 'sumMapArrayIf': ('sumMap', 'ArrayIf'), 'stochasticLinearRegressionArrayIf': ('stochasticLinearRegression', 'ArrayIf'), 'uniqCombinedArrayIf': ('uniqCombined', 'ArrayIf'), 'intervalLengthSumArrayIf': ('intervalLengthSum', 'ArrayIf'), 'sumKahanArrayIf': ('sumKahan', 'ArrayIf'), 'groupArrayInsertAtArrayIf': ('groupArrayInsertAt', 'ArrayIf'), 'maxIntersectionsPositionArrayIf': ('maxIntersectionsPosition', 'ArrayIf'), 'uniqUpToArrayIf': ('uniqUpTo', 'ArrayIf'), 'groupBitAndArrayIf': ('groupBitAnd', 'ArrayIf'), 'sequenceMatchArrayIf': ('sequenceMatch', 'ArrayIf'), 'deltaSumTimestampArrayIf': ('deltaSumTimestamp', 'ArrayIf'), 'anyArrayIf': ('any', 'ArrayIf'), 'quantilesTimingArrayIf': ('quantilesTiming', 'ArrayIf'), 'varSampArrayIf': ('varSamp', 'ArrayIf'), 'groupArrayMovingAvgArrayIf': ('groupArrayMovingAvg', 'ArrayIf'), 'retentionArrayIf': ('retention', 'ArrayIf'), 'quantilesExactExclusiveArrayIf': ('quantilesExactExclusive', 'ArrayIf'), 'kurtSampArrayIf': ('kurtSamp', 'ArrayIf'), 'stddevSampArrayIf': ('stddevSamp', 'ArrayIf'), 'quantilesBFloat16ArrayIf': ('quantilesBFloat16', 'ArrayIf'), 'quantilesGKArrayIf': ('quantilesGK', 'ArrayIf'), 'mannWhitneyUTestArrayIf': ('mannWhitneyUTest', 'ArrayIf'), 'exponentialMovingAverageArrayIf': ('exponentialMovingAverage', 'ArrayIf'), 'meanZTestArrayIf': ('meanZTest', 'ArrayIf'), 'groupBitmapAndArrayIf': ('groupBitmapAnd', 'ArrayIf'), 'countArrayIf': ('count', 'ArrayIf'), 'contingencyArrayIf': ('contingency', 'ArrayIf'), 'quantileTimingWeightedForEach': ('quantileTimingWeighted', 'ForEach'), 'quantilesExactForEach': ('quantilesExact', 'ForEach'), 'simpleLinearRegressionForEach': ('simpleLinearRegression', 'ForEach'), 'groupBitmapForEach': ('groupBitmap', 'ForEach'), 'sumCountForEach': ('sumCount', 'ForEach'), 'quantileExactHighForEach': ('quantileExactHigh', 'ForEach'), 'anyLastForEach': ('anyLast', 'ForEach'), 'quantilesDeterministicForEach': ('quantilesDeterministic', 'ForEach'), 'entropyForEach': ('entropy', 'ForEach'), 'quantileTDigestForEach': ('quantileTDigest', 'ForEach'), 'sequenceNextNodeForEach': ('sequenceNextNode', 'ForEach'), 'studentTTestForEach': ('studentTTest', 'ForEach'), 'rankCorrForEach': ('rankCorr', 'ForEach'), 'maxIntersectionsForEach': ('maxIntersections', 'ForEach'), 'deltaSumForEach': ('deltaSum', 'ForEach'), 'covarSampForEach': ('covarSamp', 'ForEach'), 'varPopForEach': ('varPop', 'ForEach'), 'stochasticLogisticRegressionForEach': ('stochasticLogisticRegression', 'ForEach'), 'groupArrayLastForEach': ('groupArrayLast', 'ForEach'), 'groupConcatForEach': ('groupConcat', 'ForEach'), 'windowFunnelForEach': ('windowFunnel', 'ForEach'), 'kolmogorovSmirnovTestForEach': ('kolmogorovSmirnovTest', 'ForEach'), 'maxMapForEach': ('maxMap', 'ForEach'), 'largestTriangleThreeBucketsForEach': ('largestTriangleThreeBuckets', 'ForEach'), 'quantilesExactWeightedForEach': ('quantilesExactWeighted', 'ForEach'), 'quantileExactForEach': ('quantileExact', 'ForEach'), 'topKWeightedForEach': ('topKWeighted', 'ForEach'), 'groupUniqArrayForEach': ('groupUniqArray', 'ForEach'), 'uniqExactForEach': ('uniqExact', 'ForEach'), 'stddevPopForEach': ('stddevPop', 'ForEach'), 'maxForEach': ('max', 'ForEach'), 'topKForEach': ('topK', 'ForEach'), 'groupBitXorForEach': ('groupBitXor', 'ForEach'), 'avgForEach': ('avg', 'ForEach'), 'uniqForEach': ('uniq', 'ForEach'), 'quantilesExactHighForEach': ('quantilesExactHigh', 'ForEach'), 'quantileExactWeightedForEach': ('quantileExactWeighted', 'ForEach'), 'minMapForEach': ('minMap', 'ForEach'), 'anyHeavyForEach': ('anyHeavy', 'ForEach'), 'groupArraySampleForEach': ('groupArraySample', 'ForEach'), 'theilsUForEach': ('theilsU', 'ForEach'), 'minForEach': ('min', 'ForEach'), 'boundingRatioForEach': ('boundingRatio', 'ForEach'), 'quantilesTDigestForEach': ('quantilesTDigest', 'ForEach'), 'quantileDeterministicForEach': ('quantileDeterministic', 'ForEach'), 'last_valueForEach': ('last_value', 'ForEach'), 'cramersVForEach': ('cramersV', 'ForEach'), 'first_valueForEach': ('first_value', 'ForEach'), 'groupBitOrForEach': ('groupBitOr', 'ForEach'), 'argMinForEach': ('argMin', 'ForEach'), 'skewPopForEach': ('skewPop', 'ForEach'), 'uniqCombined64ForEach': ('uniqCombined64', 'ForEach'), 'quantilesTDigestWeightedForEach': ('quantilesTDigestWeighted', 'ForEach'), 'uniqThetaForEach': ('uniqTheta', 'ForEach'), 'quantilesInterpolatedWeightedForEach': ('quantilesInterpolatedWeighted', 'ForEach'), 'covarPopForEach': ('covarPop', 'ForEach'), 'cramersVBiasCorrectedForEach': ('cramersVBiasCorrected', 'ForEach'), 'avgWeightedForEach': ('avgWeighted', 'ForEach'), 'quantileExactLowForEach': ('quantileExactLow', 'ForEach'), 'groupArrayForEach': ('groupArray', 'ForEach'), 'sumWithOverflowForEach': ('sumWithOverflow', 'ForEach'), 'quantileForEach': ('quantile', 'ForEach'), 'categoricalInformationValueForEach': ('categoricalInformationValue', 'ForEach'), 'exponentialTimeDecayedAvgForEach': ('exponentialTimeDecayedAvg', 'ForEach'), 'sparkBarForEach': ('sparkBar', 'ForEach'), 'groupBitmapOrForEach': ('groupBitmapOr', 'ForEach'), 'argMaxForEach': ('argMax', 'ForEach'), 'quantilesBFloat16WeightedForEach': ('quantilesBFloat16Weighted', 'ForEach'), 'quantilesForEach': ('quantiles', 'ForEach'), 'quantilesTimingWeightedForEach': ('quantilesTimingWeighted', 'ForEach'), 'medianForEach': ('median', 'ForEach'), 'groupArrayMovingSumForEach': ('groupArrayMovingSum', 'ForEach'), 'sumForEach': ('sum', 'ForEach'), 'welchTTestForEach': ('welchTTest', 'ForEach'), 'quantileTDigestWeightedForEach': ('quantileTDigestWeighted', 'ForEach'), 'quantileTimingForEach': ('quantileTiming', 'ForEach'), 'sequenceCountForEach': ('sequenceCount', 'ForEach'), 'histogramForEach': ('histogram', 'ForEach'), 'quantileBFloat16ForEach': ('quantileBFloat16', 'ForEach'), 'uniqHLL12ForEach': ('uniqHLL12', 'ForEach'), 'quantileExactInclusiveForEach': ('quantileExactInclusive', 'ForEach'), 'approx_top_sumForEach': ('approx_top_sum', 'ForEach'), 'quantileGKForEach': ('quantileGK', 'ForEach'), 'kurtPopForEach': ('kurtPop', 'ForEach'), 'corrForEach': ('corr', 'ForEach'), 'skewSampForEach': ('skewSamp', 'ForEach'), 'quantileBFloat16WeightedForEach': ('quantileBFloat16Weighted', 'ForEach'), 'quantileInterpolatedWeightedForEach': ('quantileInterpolatedWeighted', 'ForEach'), 'quantilesExactLowForEach': ('quantilesExactLow', 'ForEach'), 'groupBitmapXorForEach': ('groupBitmapXor', 'ForEach'), 'sumMapForEach': ('sumMap', 'ForEach'), 'stochasticLinearRegressionForEach': ('stochasticLinearRegression', 'ForEach'), 'uniqCombinedForEach': ('uniqCombined', 'ForEach'), 'intervalLengthSumForEach': ('intervalLengthSum', 'ForEach'), 'sumKahanForEach': ('sumKahan', 'ForEach'), 'groupArrayInsertAtForEach': ('groupArrayInsertAt', 'ForEach'), 'maxIntersectionsPositionForEach': ('maxIntersectionsPosition', 'ForEach'), 'uniqUpToForEach': ('uniqUpTo', 'ForEach'), 'groupBitAndForEach': ('groupBitAnd', 'ForEach'), 'sequenceMatchForEach': ('sequenceMatch', 'ForEach'), 'deltaSumTimestampForEach': ('deltaSumTimestamp', 'ForEach'), 'anyForEach': ('any', 'ForEach'), 'quantilesTimingForEach': ('quantilesTiming', 'ForEach'), 'varSampForEach': ('varSamp', 'ForEach'), 'groupArrayMovingAvgForEach': ('groupArrayMovingAvg', 'ForEach'), 'retentionForEach': ('retention', 'ForEach'), 'quantilesExactExclusiveForEach': ('quantilesExactExclusive', 'ForEach'), 'kurtSampForEach': ('kurtSamp', 'ForEach'), 'stddevSampForEach': ('stddevSamp', 'ForEach'), 'quantilesBFloat16ForEach': ('quantilesBFloat16', 'ForEach'), 'quantilesGKForEach': ('quantilesGK', 'ForEach'), 'mannWhitneyUTestForEach': ('mannWhitneyUTest', 'ForEach'), 'exponentialMovingAverageForEach': ('exponentialMovingAverage', 'ForEach'), 'meanZTestForEach': ('meanZTest', 'ForEach'), 'groupBitmapAndForEach': ('groupBitmapAnd', 'ForEach'), 'countForEach': ('count', 'ForEach'), 'contingencyForEach': ('contingency', 'ForEach'), 'quantileTimingWeightedOrNull': ('quantileTimingWeighted', 'OrNull'), 'quantilesExactOrNull': ('quantilesExact', 'OrNull'), 'simpleLinearRegressionOrNull': ('simpleLinearRegression', 'OrNull'), 'groupBitmapOrNull': ('groupBitmap', 'OrNull'), 'sumCountOrNull': ('sumCount', 'OrNull'), 'quantileExactHighOrNull': ('quantileExactHigh', 'OrNull'), 'anyLastOrNull': ('anyLast', 'OrNull'), 'quantilesDeterministicOrNull': ('quantilesDeterministic', 'OrNull'), 'entropyOrNull': ('entropy', 'OrNull'), 'quantileTDigestOrNull': ('quantileTDigest', 'OrNull'), 'sequenceNextNodeOrNull': ('sequenceNextNode', 'OrNull'), 'studentTTestOrNull': ('studentTTest', 'OrNull'), 'rankCorrOrNull': ('rankCorr', 'OrNull'), 'maxIntersectionsOrNull': ('maxIntersections', 'OrNull'), 'deltaSumOrNull': ('deltaSum', 'OrNull'), 'covarSampOrNull': ('covarSamp', 'OrNull'), 'varPopOrNull': ('varPop', 'OrNull'), 'stochasticLogisticRegressionOrNull': ('stochasticLogisticRegression', 'OrNull'), 'groupArrayLastOrNull': ('groupArrayLast', 'OrNull'), 'groupConcatOrNull': ('groupConcat', 'OrNull'), 'windowFunnelOrNull': ('windowFunnel', 'OrNull'), 'kolmogorovSmirnovTestOrNull': ('kolmogorovSmirnovTest', 'OrNull'), 'maxMapOrNull': ('maxMap', 'OrNull'), 'largestTriangleThreeBucketsOrNull': ('largestTriangleThreeBuckets', 'OrNull'), 'quantilesExactWeightedOrNull': ('quantilesExactWeighted', 'OrNull'), 'quantileExactOrNull': ('quantileExact', 'OrNull'), 'topKWeightedOrNull': ('topKWeighted', 'OrNull'), 'groupUniqArrayOrNull': ('groupUniqArray', 'OrNull'), 'uniqExactOrNull': ('uniqExact', 'OrNull'), 'stddevPopOrNull': ('stddevPop', 'OrNull'), 'maxOrNull': ('max', 'OrNull'), 'topKOrNull': ('topK', 'OrNull'), 'groupBitXorOrNull': ('groupBitXor', 'OrNull'), 'avgOrNull': ('avg', 'OrNull'), 'uniqOrNull': ('uniq', 'OrNull'), 'quantilesExactHighOrNull': ('quantilesExactHigh', 'OrNull'), 'quantileExactWeightedOrNull': ('quantileExactWeighted', 'OrNull'), 'minMapOrNull': ('minMap', 'OrNull'), 'anyHeavyOrNull': ('anyHeavy', 'OrNull'), 'groupArraySampleOrNull': ('groupArraySample', 'OrNull'), 'theilsUOrNull': ('theilsU', 'OrNull'), 'minOrNull': ('min', 'OrNull'), 'boundingRatioOrNull': ('boundingRatio', 'OrNull'), 'quantilesTDigestOrNull': ('quantilesTDigest', 'OrNull'), 'quantileDeterministicOrNull': ('quantileDeterministic', 'OrNull'), 'last_valueOrNull': ('last_value', 'OrNull'), 'cramersVOrNull': ('cramersV', 'OrNull'), 'first_valueOrNull': ('first_value', 'OrNull'), 'groupBitOrOrNull': ('groupBitOr', 'OrNull'), 'argMinOrNull': ('argMin', 'OrNull'), 'skewPopOrNull': ('skewPop', 'OrNull'), 'uniqCombined64OrNull': ('uniqCombined64', 'OrNull'), 'quantilesTDigestWeightedOrNull': ('quantilesTDigestWeighted', 'OrNull'), 'uniqThetaOrNull': ('uniqTheta', 'OrNull'), 'quantilesInterpolatedWeightedOrNull': ('quantilesInterpolatedWeighted', 'OrNull'), 'covarPopOrNull': ('covarPop', 'OrNull'), 'cramersVBiasCorrectedOrNull': ('cramersVBiasCorrected', 'OrNull'), 'avgWeightedOrNull': ('avgWeighted', 'OrNull'), 'quantileExactLowOrNull': ('quantileExactLow', 'OrNull'), 'groupArrayOrNull': ('groupArray', 'OrNull'), 'sumWithOverflowOrNull': ('sumWithOverflow', 'OrNull'), 'quantileOrNull': ('quantile', 'OrNull'), 'categoricalInformationValueOrNull': ('categoricalInformationValue', 'OrNull'), 'exponentialTimeDecayedAvgOrNull': ('exponentialTimeDecayedAvg', 'OrNull'), 'sparkBarOrNull': ('sparkBar', 'OrNull'), 'groupBitmapOrOrNull': ('groupBitmapOr', 'OrNull'), 'argMaxOrNull': ('argMax', 'OrNull'), 'quantilesBFloat16WeightedOrNull': ('quantilesBFloat16Weighted', 'OrNull'), 'quantilesOrNull': ('quantiles', 'OrNull'), 'quantilesTimingWeightedOrNull': ('quantilesTimingWeighted', 'OrNull'), 'medianOrNull': ('median', 'OrNull'), 'groupArrayMovingSumOrNull': ('groupArrayMovingSum', 'OrNull'), 'sumOrNull': ('sum', 'OrNull'), 'welchTTestOrNull': ('welchTTest', 'OrNull'), 'quantileTDigestWeightedOrNull': ('quantileTDigestWeighted', 'OrNull'), 'quantileTimingOrNull': ('quantileTiming', 'OrNull'), 'sequenceCountOrNull': ('sequenceCount', 'OrNull'), 'histogramOrNull': ('histogram', 'OrNull'), 'quantileBFloat16OrNull': ('quantileBFloat16', 'OrNull'), 'uniqHLL12OrNull': ('uniqHLL12', 'OrNull'), 'quantileExactInclusiveOrNull': ('quantileExactInclusive', 'OrNull'), 'approx_top_sumOrNull': ('approx_top_sum', 'OrNull'), 'quantileGKOrNull': ('quantileGK', 'OrNull'), 'kurtPopOrNull': ('kurtPop', 'OrNull'), 'corrOrNull': ('corr', 'OrNull'), 'skewSampOrNull': ('skewSamp', 'OrNull'), 'quantileBFloat16WeightedOrNull': ('quantileBFloat16Weighted', 'OrNull'), 'quantileInterpolatedWeightedOrNull': ('quantileInterpolatedWeighted', 'OrNull'), 'quantilesExactLowOrNull': ('quantilesExactLow', 'OrNull'), 'groupBitmapXorOrNull': ('groupBitmapXor', 'OrNull'), 'sumMapOrNull': ('sumMap', 'OrNull'), 'stochasticLinearRegressionOrNull': ('stochasticLinearRegression', 'OrNull'), 'uniqCombinedOrNull': ('uniqCombined', 'OrNull'), 'intervalLengthSumOrNull': ('intervalLengthSum', 'OrNull'), 'sumKahanOrNull': ('sumKahan', 'OrNull'), 'groupArrayInsertAtOrNull': ('groupArrayInsertAt', 'OrNull'), 'maxIntersectionsPositionOrNull': ('maxIntersectionsPosition', 'OrNull'), 'uniqUpToOrNull': ('uniqUpTo', 'OrNull'), 'groupBitAndOrNull': ('groupBitAnd', 'OrNull'), 'sequenceMatchOrNull': ('sequenceMatch', 'OrNull'), 'deltaSumTimestampOrNull': ('deltaSumTimestamp', 'OrNull'), 'anyOrNull': ('any', 'OrNull'), 'quantilesTimingOrNull': ('quantilesTiming', 'OrNull'), 'varSampOrNull': ('varSamp', 'OrNull'), 'groupArrayMovingAvgOrNull': ('groupArrayMovingAvg', 'OrNull'), 'retentionOrNull': ('retention', 'OrNull'), 'quantilesExactExclusiveOrNull': ('quantilesExactExclusive', 'OrNull'), 'kurtSampOrNull': ('kurtSamp', 'OrNull'), 'stddevSampOrNull': ('stddevSamp', 'OrNull'), 'quantilesBFloat16OrNull': ('quantilesBFloat16', 'OrNull'), 'quantilesGKOrNull': ('quantilesGK', 'OrNull'), 'mannWhitneyUTestOrNull': ('mannWhitneyUTest', 'OrNull'), 'exponentialMovingAverageOrNull': ('exponentialMovingAverage', 'OrNull'), 'meanZTestOrNull': ('meanZTest', 'OrNull'), 'groupBitmapAndOrNull': ('groupBitmapAnd', 'OrNull'), 'countOrNull': ('count', 'OrNull'), 'contingencyOrNull': ('contingency', 'OrNull'), 'quantileTimingWeightedArgMin': ('quantileTimingWeighted', 'ArgMin'), 'quantilesExactArgMin': ('quantilesExact', 'ArgMin'), 'simpleLinearRegressionArgMin': ('simpleLinearRegression', 'ArgMin'), 'groupBitmapArgMin': ('groupBitmap', 'ArgMin'), 'sumCountArgMin': ('sumCount', 'ArgMin'), 'quantileExactHighArgMin': ('quantileExactHigh', 'ArgMin'), 'anyLastArgMin': ('anyLast', 'ArgMin'), 'quantilesDeterministicArgMin': ('quantilesDeterministic', 'ArgMin'), 'entropyArgMin': ('entropy', 'ArgMin'), 'quantileTDigestArgMin': ('quantileTDigest', 'ArgMin'), 'sequenceNextNodeArgMin': ('sequenceNextNode', 'ArgMin'), 'studentTTestArgMin': ('studentTTest', 'ArgMin'), 'rankCorrArgMin': ('rankCorr', 'ArgMin'), 'maxIntersectionsArgMin': ('maxIntersections', 'ArgMin'), 'deltaSumArgMin': ('deltaSum', 'ArgMin'), 'covarSampArgMin': ('covarSamp', 'ArgMin'), 'varPopArgMin': ('varPop', 'ArgMin'), 'stochasticLogisticRegressionArgMin': ('stochasticLogisticRegression', 'ArgMin'), 'groupArrayLastArgMin': ('groupArrayLast', 'ArgMin'), 'groupConcatArgMin': ('groupConcat', 'ArgMin'), 'windowFunnelArgMin': ('windowFunnel', 'ArgMin'), 'kolmogorovSmirnovTestArgMin': ('kolmogorovSmirnovTest', 'ArgMin'), 'maxMapArgMin': ('maxMap', 'ArgMin'), 'largestTriangleThreeBucketsArgMin': ('largestTriangleThreeBuckets', 'ArgMin'), 'quantilesExactWeightedArgMin': ('quantilesExactWeighted', 'ArgMin'), 'quantileExactArgMin': ('quantileExact', 'ArgMin'), 'topKWeightedArgMin': ('topKWeighted', 'ArgMin'), 'groupUniqArrayArgMin': ('groupUniqArray', 'ArgMin'), 'uniqExactArgMin': ('uniqExact', 'ArgMin'), 'stddevPopArgMin': ('stddevPop', 'ArgMin'), 'maxArgMin': ('max', 'ArgMin'), 'topKArgMin': ('topK', 'ArgMin'), 'groupBitXorArgMin': ('groupBitXor', 'ArgMin'), 'avgArgMin': ('avg', 'ArgMin'), 'uniqArgMin': ('uniq', 'ArgMin'), 'quantilesExactHighArgMin': ('quantilesExactHigh', 'ArgMin'), 'quantileExactWeightedArgMin': ('quantileExactWeighted', 'ArgMin'), 'minMapArgMin': ('minMap', 'ArgMin'), 'anyHeavyArgMin': ('anyHeavy', 'ArgMin'), 'groupArraySampleArgMin': ('groupArraySample', 'ArgMin'), 'theilsUArgMin': ('theilsU', 'ArgMin'), 'minArgMin': ('min', 'ArgMin'), 'boundingRatioArgMin': ('boundingRatio', 'ArgMin'), 'quantilesTDigestArgMin': ('quantilesTDigest', 'ArgMin'), 'quantileDeterministicArgMin': ('quantileDeterministic', 'ArgMin'), 'last_valueArgMin': ('last_value', 'ArgMin'), 'cramersVArgMin': ('cramersV', 'ArgMin'), 'first_valueArgMin': ('first_value', 'ArgMin'), 'groupBitOrArgMin': ('groupBitOr', 'ArgMin'), 'argMinArgMin': ('argMin', 'ArgMin'), 'skewPopArgMin': ('skewPop', 'ArgMin'), 'uniqCombined64ArgMin': ('uniqCombined64', 'ArgMin'), 'quantilesTDigestWeightedArgMin': ('quantilesTDigestWeighted', 'ArgMin'), 'uniqThetaArgMin': ('uniqTheta', 'ArgMin'), 'quantilesInterpolatedWeightedArgMin': ('quantilesInterpolatedWeighted', 'ArgMin'), 'covarPopArgMin': ('covarPop', 'ArgMin'), 'cramersVBiasCorrectedArgMin': ('cramersVBiasCorrected', 'ArgMin'), 'avgWeightedArgMin': ('avgWeighted', 'ArgMin'), 'quantileExactLowArgMin': ('quantileExactLow', 'ArgMin'), 'groupArrayArgMin': ('groupArray', 'ArgMin'), 'sumWithOverflowArgMin': ('sumWithOverflow', 'ArgMin'), 'quantileArgMin': ('quantile', 'ArgMin'), 'categoricalInformationValueArgMin': ('categoricalInformationValue', 'ArgMin'), 'exponentialTimeDecayedAvgArgMin': ('exponentialTimeDecayedAvg', 'ArgMin'), 'sparkBarArgMin': ('sparkBar', 'ArgMin'), 'groupBitmapOrArgMin': ('groupBitmapOr', 'ArgMin'), 'argMaxArgMin': ('argMax', 'ArgMin'), 'quantilesBFloat16WeightedArgMin': ('quantilesBFloat16Weighted', 'ArgMin'), 'quantilesArgMin': ('quantiles', 'ArgMin'), 'quantilesTimingWeightedArgMin': ('quantilesTimingWeighted', 'ArgMin'), 'medianArgMin': ('median', 'ArgMin'), 'groupArrayMovingSumArgMin': ('groupArrayMovingSum', 'ArgMin'), 'sumArgMin': ('sum', 'ArgMin'), 'welchTTestArgMin': ('welchTTest', 'ArgMin'), 'quantileTDigestWeightedArgMin': ('quantileTDigestWeighted', 'ArgMin'), 'quantileTimingArgMin': ('quantileTiming', 'ArgMin'), 'sequenceCountArgMin': ('sequenceCount', 'ArgMin'), 'histogramArgMin': ('histogram', 'ArgMin'), 'quantileBFloat16ArgMin': ('quantileBFloat16', 'ArgMin'), 'uniqHLL12ArgMin': ('uniqHLL12', 'ArgMin'), 'quantileExactInclusiveArgMin': ('quantileExactInclusive', 'ArgMin'), 'approx_top_sumArgMin': ('approx_top_sum', 'ArgMin'), 'quantileGKArgMin': ('quantileGK', 'ArgMin'), 'kurtPopArgMin': ('kurtPop', 'ArgMin'), 'corrArgMin': ('corr', 'ArgMin'), 'skewSampArgMin': ('skewSamp', 'ArgMin'), 'quantileBFloat16WeightedArgMin': ('quantileBFloat16Weighted', 'ArgMin'), 'quantileInterpolatedWeightedArgMin': ('quantileInterpolatedWeighted', 'ArgMin'), 'quantilesExactLowArgMin': ('quantilesExactLow', 'ArgMin'), 'groupBitmapXorArgMin': ('groupBitmapXor', 'ArgMin'), 'sumMapArgMin': ('sumMap', 'ArgMin'), 'stochasticLinearRegressionArgMin': ('stochasticLinearRegression', 'ArgMin'), 'uniqCombinedArgMin': ('uniqCombined', 'ArgMin'), 'intervalLengthSumArgMin': ('intervalLengthSum', 'ArgMin'), 'sumKahanArgMin': ('sumKahan', 'ArgMin'), 'groupArrayInsertAtArgMin': ('groupArrayInsertAt', 'ArgMin'), 'maxIntersectionsPositionArgMin': ('maxIntersectionsPosition', 'ArgMin'), 'uniqUpToArgMin': ('uniqUpTo', 'ArgMin'), 'groupBitAndArgMin': ('groupBitAnd', 'ArgMin'), 'sequenceMatchArgMin': ('sequenceMatch', 'ArgMin'), 'deltaSumTimestampArgMin': ('deltaSumTimestamp', 'ArgMin'), 'anyArgMin': ('any', 'ArgMin'), 'quantilesTimingArgMin': ('quantilesTiming', 'ArgMin'), 'varSampArgMin': ('varSamp', 'ArgMin'), 'groupArrayMovingAvgArgMin': ('groupArrayMovingAvg', 'ArgMin'), 'retentionArgMin': ('retention', 'ArgMin'), 'quantilesExactExclusiveArgMin': ('quantilesExactExclusive', 'ArgMin'), 'kurtSampArgMin': ('kurtSamp', 'ArgMin'), 'stddevSampArgMin': ('stddevSamp', 'ArgMin'), 'quantilesBFloat16ArgMin': ('quantilesBFloat16', 'ArgMin'), 'quantilesGKArgMin': ('quantilesGK', 'ArgMin'), 'mannWhitneyUTestArgMin': ('mannWhitneyUTest', 'ArgMin'), 'exponentialMovingAverageArgMin': ('exponentialMovingAverage', 'ArgMin'), 'meanZTestArgMin': ('meanZTest', 'ArgMin'), 'groupBitmapAndArgMin': ('groupBitmapAnd', 'ArgMin'), 'countArgMin': ('count', 'ArgMin'), 'contingencyArgMin': ('contingency', 'ArgMin'), 'quantileTimingWeightedArgMax': ('quantileTimingWeighted', 'ArgMax'), 'quantilesExactArgMax': ('quantilesExact', 'ArgMax'), 'simpleLinearRegressionArgMax': ('simpleLinearRegression', 'ArgMax'), 'groupBitmapArgMax': ('groupBitmap', 'ArgMax'), 'sumCountArgMax': ('sumCount', 'ArgMax'), 'quantileExactHighArgMax': ('quantileExactHigh', 'ArgMax'), 'anyLastArgMax': ('anyLast', 'ArgMax'), 'quantilesDeterministicArgMax': ('quantilesDeterministic', 'ArgMax'), 'entropyArgMax': ('entropy', 'ArgMax'), 'quantileTDigestArgMax': ('quantileTDigest', 'ArgMax'), 'sequenceNextNodeArgMax': ('sequenceNextNode', 'ArgMax'), 'studentTTestArgMax': ('studentTTest', 'ArgMax'), 'rankCorrArgMax': ('rankCorr', 'ArgMax'), 'maxIntersectionsArgMax': ('maxIntersections', 'ArgMax'), 'deltaSumArgMax': ('deltaSum', 'ArgMax'), 'covarSampArgMax': ('covarSamp', 'ArgMax'), 'varPopArgMax': ('varPop', 'ArgMax'), 'stochasticLogisticRegressionArgMax': ('stochasticLogisticRegression', 'ArgMax'), 'groupArrayLastArgMax': ('groupArrayLast', 'ArgMax'), 'groupConcatArgMax': ('groupConcat', 'ArgMax'), 'windowFunnelArgMax': ('windowFunnel', 'ArgMax'), 'kolmogorovSmirnovTestArgMax': ('kolmogorovSmirnovTest', 'ArgMax'), 'maxMapArgMax': ('maxMap', 'ArgMax'), 'largestTriangleThreeBucketsArgMax': ('largestTriangleThreeBuckets', 'ArgMax'), 'quantilesExactWeightedArgMax': ('quantilesExactWeighted', 'ArgMax'), 'quantileExactArgMax': ('quantileExact', 'ArgMax'), 'topKWeightedArgMax': ('topKWeighted', 'ArgMax'), 'groupUniqArrayArgMax': ('groupUniqArray', 'ArgMax'), 'uniqExactArgMax': ('uniqExact', 'ArgMax'), 'stddevPopArgMax': ('stddevPop', 'ArgMax'), 'maxArgMax': ('max', 'ArgMax'), 'topKArgMax': ('topK', 'ArgMax'), 'groupBitXorArgMax': ('groupBitXor', 'ArgMax'), 'avgArgMax': ('avg', 'ArgMax'), 'uniqArgMax': ('uniq', 'ArgMax'), 'quantilesExactHighArgMax': ('quantilesExactHigh', 'ArgMax'), 'quantileExactWeightedArgMax': ('quantileExactWeighted', 'ArgMax'), 'minMapArgMax': ('minMap', 'ArgMax'), 'anyHeavyArgMax': ('anyHeavy', 'ArgMax'), 'groupArraySampleArgMax': ('groupArraySample', 'ArgMax'), 'theilsUArgMax': ('theilsU', 'ArgMax'), 'minArgMax': ('min', 'ArgMax'), 'boundingRatioArgMax': ('boundingRatio', 'ArgMax'), 'quantilesTDigestArgMax': ('quantilesTDigest', 'ArgMax'), 'quantileDeterministicArgMax': ('quantileDeterministic', 'ArgMax'), 'last_valueArgMax': ('last_value', 'ArgMax'), 'cramersVArgMax': ('cramersV', 'ArgMax'), 'first_valueArgMax': ('first_value', 'ArgMax'), 'groupBitOrArgMax': ('groupBitOr', 'ArgMax'), 'argMinArgMax': ('argMin', 'ArgMax'), 'skewPopArgMax': ('skewPop', 'ArgMax'), 'uniqCombined64ArgMax': ('uniqCombined64', 'ArgMax'), 'quantilesTDigestWeightedArgMax': ('quantilesTDigestWeighted', 'ArgMax'), 'uniqThetaArgMax': ('uniqTheta', 'ArgMax'), 'quantilesInterpolatedWeightedArgMax': ('quantilesInterpolatedWeighted', 'ArgMax'), 'covarPopArgMax': ('covarPop', 'ArgMax'), 'cramersVBiasCorrectedArgMax': ('cramersVBiasCorrected', 'ArgMax'), 'avgWeightedArgMax': ('avgWeighted', 'ArgMax'), 'quantileExactLowArgMax': ('quantileExactLow', 'ArgMax'), 'groupArrayArgMax': ('groupArray', 'ArgMax'), 'sumWithOverflowArgMax': ('sumWithOverflow', 'ArgMax'), 'quantileArgMax': ('quantile', 'ArgMax'), 'categoricalInformationValueArgMax': ('categoricalInformationValue', 'ArgMax'), 'exponentialTimeDecayedAvgArgMax': ('exponentialTimeDecayedAvg', 'ArgMax'), 'sparkBarArgMax': ('sparkBar', 'ArgMax'), 'groupBitmapOrArgMax': ('groupBitmapOr', 'ArgMax'), 'argMaxArgMax': ('argMax', 'ArgMax'), 'quantilesBFloat16WeightedArgMax': ('quantilesBFloat16Weighted', 'ArgMax'), 'quantilesArgMax': ('quantiles', 'ArgMax'), 'quantilesTimingWeightedArgMax': ('quantilesTimingWeighted', 'ArgMax'), 'medianArgMax': ('median', 'ArgMax'), 'groupArrayMovingSumArgMax': ('groupArrayMovingSum', 'ArgMax'), 'sumArgMax': ('sum', 'ArgMax'), 'welchTTestArgMax': ('welchTTest', 'ArgMax'), 'quantileTDigestWeightedArgMax': ('quantileTDigestWeighted', 'ArgMax'), 'quantileTimingArgMax': ('quantileTiming', 'ArgMax'), 'sequenceCountArgMax': ('sequenceCount', 'ArgMax'), 'histogramArgMax': ('histogram', 'ArgMax'), 'quantileBFloat16ArgMax': ('quantileBFloat16', 'ArgMax'), 'uniqHLL12ArgMax': ('uniqHLL12', 'ArgMax'), 'quantileExactInclusiveArgMax': ('quantileExactInclusive', 'ArgMax'), 'approx_top_sumArgMax': ('approx_top_sum', 'ArgMax'), 'quantileGKArgMax': ('quantileGK', 'ArgMax'), 'kurtPopArgMax': ('kurtPop', 'ArgMax'), 'corrArgMax': ('corr', 'ArgMax'), 'skewSampArgMax': ('skewSamp', 'ArgMax'), 'quantileBFloat16WeightedArgMax': ('quantileBFloat16Weighted', 'ArgMax'), 'quantileInterpolatedWeightedArgMax': ('quantileInterpolatedWeighted', 'ArgMax'), 'quantilesExactLowArgMax': ('quantilesExactLow', 'ArgMax'), 'groupBitmapXorArgMax': ('groupBitmapXor', 'ArgMax'), 'sumMapArgMax': ('sumMap', 'ArgMax'), 'stochasticLinearRegressionArgMax': ('stochasticLinearRegression', 'ArgMax'), 'uniqCombinedArgMax': ('uniqCombined', 'ArgMax'), 'intervalLengthSumArgMax': ('intervalLengthSum', 'ArgMax'), 'sumKahanArgMax': ('sumKahan', 'ArgMax'), 'groupArrayInsertAtArgMax': ('groupArrayInsertAt', 'ArgMax'), 'maxIntersectionsPositionArgMax': ('maxIntersectionsPosition', 'ArgMax'), 'uniqUpToArgMax': ('uniqUpTo', 'ArgMax'), 'groupBitAndArgMax': ('groupBitAnd', 'ArgMax'), 'sequenceMatchArgMax': ('sequenceMatch', 'ArgMax'), 'deltaSumTimestampArgMax': ('deltaSumTimestamp', 'ArgMax'), 'anyArgMax': ('any', 'ArgMax'), 'quantilesTimingArgMax': ('quantilesTiming', 'ArgMax'), 'varSampArgMax': ('varSamp', 'ArgMax'), 'groupArrayMovingAvgArgMax': ('groupArrayMovingAvg', 'ArgMax'), 'retentionArgMax': ('retention', 'ArgMax'), 'quantilesExactExclusiveArgMax': ('quantilesExactExclusive', 'ArgMax'), 'kurtSampArgMax': ('kurtSamp', 'ArgMax'), 'stddevSampArgMax': ('stddevSamp', 'ArgMax'), 'quantilesBFloat16ArgMax': ('quantilesBFloat16', 'ArgMax'), 'quantilesGKArgMax': ('quantilesGK', 'ArgMax'), 'mannWhitneyUTestArgMax': ('mannWhitneyUTest', 'ArgMax'), 'exponentialMovingAverageArgMax': ('exponentialMovingAverage', 'ArgMax'), 'meanZTestArgMax': ('meanZTest', 'ArgMax'), 'groupBitmapAndArgMax': ('groupBitmapAnd', 'ArgMax'), 'countArgMax': ('count', 'ArgMax'), 'contingencyArgMax': ('contingency', 'ArgMax'), 'quantileTimingWeightedArray': ('quantileTimingWeighted', 'Array'), 'quantilesExactArray': ('quantilesExact', 'Array'), 'simpleLinearRegressionArray': ('simpleLinearRegression', 'Array'), 'groupBitmapArray': ('groupBitmap', 'Array'), 'sumCountArray': ('sumCount', 'Array'), 'quantileExactHighArray': ('quantileExactHigh', 'Array'), 'anyLastArray': ('anyLast', 'Array'), 'quantilesDeterministicArray': ('quantilesDeterministic', 'Array'), 'entropyArray': ('entropy', 'Array'), 'quantileTDigestArray': ('quantileTDigest', 'Array'), 'sequenceNextNodeArray': ('sequenceNextNode', 'Array'), 'studentTTestArray': ('studentTTest', 'Array'), 'rankCorrArray': ('rankCorr', 'Array'), 'maxIntersectionsArray': ('maxIntersections', 'Array'), 'deltaSumArray': ('deltaSum', 'Array'), 'covarSampArray': ('covarSamp', 'Array'), 'varPopArray': ('varPop', 'Array'), 'stochasticLogisticRegressionArray': ('stochasticLogisticRegression', 'Array'), 'groupArrayLastArray': ('groupArrayLast', 'Array'), 'groupConcatArray': ('groupConcat', 'Array'), 'windowFunnelArray': ('windowFunnel', 'Array'), 'kolmogorovSmirnovTestArray': ('kolmogorovSmirnovTest', 'Array'), 'maxMapArray': ('maxMap', 'Array'), 'largestTriangleThreeBucketsArray': ('largestTriangleThreeBuckets', 'Array'), 'quantilesExactWeightedArray': ('quantilesExactWeighted', 'Array'), 'quantileExactArray': ('quantileExact', 'Array'), 'topKWeightedArray': ('topKWeighted', 'Array'), 'groupUniqArrayArray': ('groupUniqArray', 'Array'), 'uniqExactArray': ('uniqExact', 'Array'), 'stddevPopArray': ('stddevPop', 'Array'), 'maxArray': ('max', 'Array'), 'topKArray': ('topK', 'Array'), 'groupBitXorArray': ('groupBitXor', 'Array'), 'avgArray': ('avg', 'Array'), 'uniqArray': ('uniq', 'Array'), 'quantilesExactHighArray': ('quantilesExactHigh', 'Array'), 'quantileExactWeightedArray': ('quantileExactWeighted', 'Array'), 'minMapArray': ('minMap', 'Array'), 'anyHeavyArray': ('anyHeavy', 'Array'), 'groupArraySampleArray': ('groupArraySample', 'Array'), 'theilsUArray': ('theilsU', 'Array'), 'minArray': ('min', 'Array'), 'boundingRatioArray': ('boundingRatio', 'Array'), 'quantilesTDigestArray': ('quantilesTDigest', 'Array'), 'quantileDeterministicArray': ('quantileDeterministic', 'Array'), 'last_valueArray': ('last_value', 'Array'), 'cramersVArray': ('cramersV', 'Array'), 'first_valueArray': ('first_value', 'Array'), 'groupBitOrArray': ('groupBitOr', 'Array'), 'argMinArray': ('argMin', 'Array'), 'skewPopArray': ('skewPop', 'Array'), 'uniqCombined64Array': ('uniqCombined64', 'Array'), 'quantilesTDigestWeightedArray': ('quantilesTDigestWeighted', 'Array'), 'uniqThetaArray': ('uniqTheta', 'Array'), 'quantilesInterpolatedWeightedArray': ('quantilesInterpolatedWeighted', 'Array'), 'covarPopArray': ('covarPop', 'Array'), 'cramersVBiasCorrectedArray': ('cramersVBiasCorrected', 'Array'), 'avgWeightedArray': ('avgWeighted', 'Array'), 'quantileExactLowArray': ('quantileExactLow', 'Array'), 'groupArrayArray': ('groupArray', 'Array'), 'sumWithOverflowArray': ('sumWithOverflow', 'Array'), 'quantileArray': ('quantile', 'Array'), 'categoricalInformationValueArray': ('categoricalInformationValue', 'Array'), 'exponentialTimeDecayedAvgArray': ('exponentialTimeDecayedAvg', 'Array'), 'sparkBarArray': ('sparkBar', 'Array'), 'groupBitmapOrArray': ('groupBitmapOr', 'Array'), 'argMaxArray': ('argMax', 'Array'), 'quantilesBFloat16WeightedArray': ('quantilesBFloat16Weighted', 'Array'), 'quantilesArray': ('quantiles', 'Array'), 'quantilesTimingWeightedArray': ('quantilesTimingWeighted', 'Array'), 'medianArray': ('median', 'Array'), 'groupArrayMovingSumArray': ('groupArrayMovingSum', 'Array'), 'sumArray': ('sum', 'Array'), 'welchTTestArray': ('welchTTest', 'Array'), 'quantileTDigestWeightedArray': ('quantileTDigestWeighted', 'Array'), 'quantileTimingArray': ('quantileTiming', 'Array'), 'sequenceCountArray': ('sequenceCount', 'Array'), 'histogramArray': ('histogram', 'Array'), 'quantileBFloat16Array': ('quantileBFloat16', 'Array'), 'uniqHLL12Array': ('uniqHLL12', 'Array'), 'quantileExactInclusiveArray': ('quantileExactInclusive', 'Array'), 'approx_top_sumArray': ('approx_top_sum', 'Array'), 'quantileGKArray': ('quantileGK', 'Array'), 'kurtPopArray': ('kurtPop', 'Array'), 'corrArray': ('corr', 'Array'), 'skewSampArray': ('skewSamp', 'Array'), 'quantileBFloat16WeightedArray': ('quantileBFloat16Weighted', 'Array'), 'quantileInterpolatedWeightedArray': ('quantileInterpolatedWeighted', 'Array'), 'quantilesExactLowArray': ('quantilesExactLow', 'Array'), 'groupBitmapXorArray': ('groupBitmapXor', 'Array'), 'sumMapArray': ('sumMap', 'Array'), 'stochasticLinearRegressionArray': ('stochasticLinearRegression', 'Array'), 'uniqCombinedArray': ('uniqCombined', 'Array'), 'intervalLengthSumArray': ('intervalLengthSum', 'Array'), 'sumKahanArray': ('sumKahan', 'Array'), 'groupArrayInsertAtArray': ('groupArrayInsertAt', 'Array'), 'maxIntersectionsPositionArray': ('maxIntersectionsPosition', 'Array'), 'uniqUpToArray': ('uniqUpTo', 'Array'), 'groupBitAndArray': ('groupBitAnd', 'Array'), 'sequenceMatchArray': ('sequenceMatch', 'Array'), 'deltaSumTimestampArray': ('deltaSumTimestamp', 'Array'), 'anyArray': ('any', 'Array'), 'quantilesTimingArray': ('quantilesTiming', 'Array'), 'varSampArray': ('varSamp', 'Array'), 'groupArrayMovingAvgArray': ('groupArrayMovingAvg', 'Array'), 'retentionArray': ('retention', 'Array'), 'quantilesExactExclusiveArray': ('quantilesExactExclusive', 'Array'), 'kurtSampArray': ('kurtSamp', 'Array'), 'stddevSampArray': ('stddevSamp', 'Array'), 'quantilesBFloat16Array': ('quantilesBFloat16', 'Array'), 'quantilesGKArray': ('quantilesGK', 'Array'), 'mannWhitneyUTestArray': ('mannWhitneyUTest', 'Array'), 'exponentialMovingAverageArray': ('exponentialMovingAverage', 'Array'), 'meanZTestArray': ('meanZTest', 'Array'), 'groupBitmapAndArray': ('groupBitmapAnd', 'Array'), 'countArray': ('count', 'Array'), 'contingencyArray': ('contingency', 'Array'), 'quantileTimingWeightedState': ('quantileTimingWeighted', 'State'), 'quantilesExactState': ('quantilesExact', 'State'), 'simpleLinearRegressionState': ('simpleLinearRegression', 'State'), 'groupBitmapState': ('groupBitmap', 'State'), 'sumCountState': ('sumCount', 'State'), 'quantileExactHighState': ('quantileExactHigh', 'State'), 'anyLastState': ('anyLast', 'State'), 'quantilesDeterministicState': ('quantilesDeterministic', 'State'), 'entropyState': ('entropy', 'State'), 'quantileTDigestState': ('quantileTDigest', 'State'), 'sequenceNextNodeState': ('sequenceNextNode', 'State'), 'studentTTestState': ('studentTTest', 'State'), 'rankCorrState': ('rankCorr', 'State'), 'maxIntersectionsState': ('maxIntersections', 'State'), 'deltaSumState': ('deltaSum', 'State'), 'covarSampState': ('covarSamp', 'State'), 'varPopState': ('varPop', 'State'), 'stochasticLogisticRegressionState': ('stochasticLogisticRegression', 'State'), 'groupArrayLastState': ('groupArrayLast', 'State'), 'groupConcatState': ('groupConcat', 'State'), 'windowFunnelState': ('windowFunnel', 'State'), 'kolmogorovSmirnovTestState': ('kolmogorovSmirnovTest', 'State'), 'maxMapState': ('maxMap', 'State'), 'largestTriangleThreeBucketsState': ('largestTriangleThreeBuckets', 'State'), 'quantilesExactWeightedState': ('quantilesExactWeighted', 'State'), 'quantileExactState': ('quantileExact', 'State'), 'topKWeightedState': ('topKWeighted', 'State'), 'groupUniqArrayState': ('groupUniqArray', 'State'), 'uniqExactState': ('uniqExact', 'State'), 'stddevPopState': ('stddevPop', 'State'), 'maxState': ('max', 'State'), 'topKState': ('topK', 'State'), 'groupBitXorState': ('groupBitXor', 'State'), 'avgState': ('avg', 'State'), 'uniqState': ('uniq', 'State'), 'quantilesExactHighState': ('quantilesExactHigh', 'State'), 'quantileExactWeightedState': ('quantileExactWeighted', 'State'), 'minMapState': ('minMap', 'State'), 'anyHeavyState': ('anyHeavy', 'State'), 'groupArraySampleState': ('groupArraySample', 'State'), 'theilsUState': ('theilsU', 'State'), 'minState': ('min', 'State'), 'boundingRatioState': ('boundingRatio', 'State'), 'quantilesTDigestState': ('quantilesTDigest', 'State'), 'quantileDeterministicState': ('quantileDeterministic', 'State'), 'last_valueState': ('last_value', 'State'), 'cramersVState': ('cramersV', 'State'), 'first_valueState': ('first_value', 'State'), 'groupBitOrState': ('groupBitOr', 'State'), 'argMinState': ('argMin', 'State'), 'skewPopState': ('skewPop', 'State'), 'uniqCombined64State': ('uniqCombined64', 'State'), 'quantilesTDigestWeightedState': ('quantilesTDigestWeighted', 'State'), 'uniqThetaState': ('uniqTheta', 'State'), 'quantilesInterpolatedWeightedState': ('quantilesInterpolatedWeighted', 'State'), 'covarPopState': ('covarPop', 'State'), 'cramersVBiasCorrectedState': ('cramersVBiasCorrected', 'State'), 'avgWeightedState': ('avgWeighted', 'State'), 'quantileExactLowState': ('quantileExactLow', 'State'), 'groupArrayState': ('groupArray', 'State'), 'sumWithOverflowState': ('sumWithOverflow', 'State'), 'quantileState': ('quantile', 'State'), 'categoricalInformationValueState': ('categoricalInformationValue', 'State'), 'exponentialTimeDecayedAvgState': ('exponentialTimeDecayedAvg', 'State'), 'sparkBarState': ('sparkBar', 'State'), 'groupBitmapOrState': ('groupBitmapOr', 'State'), 'argMaxState': ('argMax', 'State'), 'quantilesBFloat16WeightedState': ('quantilesBFloat16Weighted', 'State'), 'quantilesState': ('quantiles', 'State'), 'quantilesTimingWeightedState': ('quantilesTimingWeighted', 'State'), 'medianState': ('median', 'State'), 'groupArrayMovingSumState': ('groupArrayMovingSum', 'State'), 'sumState': ('sum', 'State'), 'welchTTestState': ('welchTTest', 'State'), 'quantileTDigestWeightedState': ('quantileTDigestWeighted', 'State'), 'quantileTimingState': ('quantileTiming', 'State'), 'sequenceCountState': ('sequenceCount', 'State'), 'histogramState': ('histogram', 'State'), 'quantileBFloat16State': ('quantileBFloat16', 'State'), 'uniqHLL12State': ('uniqHLL12', 'State'), 'quantileExactInclusiveState': ('quantileExactInclusive', 'State'), 'approx_top_sumState': ('approx_top_sum', 'State'), 'quantileGKState': ('quantileGK', 'State'), 'kurtPopState': ('kurtPop', 'State'), 'corrState': ('corr', 'State'), 'skewSampState': ('skewSamp', 'State'), 'quantileBFloat16WeightedState': ('quantileBFloat16Weighted', 'State'), 'quantileInterpolatedWeightedState': ('quantileInterpolatedWeighted', 'State'), 'quantilesExactLowState': ('quantilesExactLow', 'State'), 'groupBitmapXorState': ('groupBitmapXor', 'State'), 'sumMapState': ('sumMap', 'State'), 'stochasticLinearRegressionState': ('stochasticLinearRegression', 'State'), 'uniqCombinedState': ('uniqCombined', 'State'), 'intervalLengthSumState': ('intervalLengthSum', 'State'), 'sumKahanState': ('sumKahan', 'State'), 'groupArrayInsertAtState': ('groupArrayInsertAt', 'State'), 'maxIntersectionsPositionState': ('maxIntersectionsPosition', 'State'), 'uniqUpToState': ('uniqUpTo', 'State'), 'groupBitAndState': ('groupBitAnd', 'State'), 'sequenceMatchState': ('sequenceMatch', 'State'), 'deltaSumTimestampState': ('deltaSumTimestamp', 'State'), 'anyState': ('any', 'State'), 'quantilesTimingState': ('quantilesTiming', 'State'), 'varSampState': ('varSamp', 'State'), 'groupArrayMovingAvgState': ('groupArrayMovingAvg', 'State'), 'retentionState': ('retention', 'State'), 'quantilesExactExclusiveState': ('quantilesExactExclusive', 'State'), 'kurtSampState': ('kurtSamp', 'State'), 'stddevSampState': ('stddevSamp', 'State'), 'quantilesBFloat16State': ('quantilesBFloat16', 'State'), 'quantilesGKState': ('quantilesGK', 'State'), 'mannWhitneyUTestState': ('mannWhitneyUTest', 'State'), 'exponentialMovingAverageState': ('exponentialMovingAverage', 'State'), 'meanZTestState': ('meanZTest', 'State'), 'groupBitmapAndState': ('groupBitmapAnd', 'State'), 'countState': ('count', 'State'), 'contingencyState': ('contingency', 'State'), 'quantileTimingWeightedMerge': ('quantileTimingWeighted', 'Merge'), 'quantilesExactMerge': ('quantilesExact', 'Merge'), 'simpleLinearRegressionMerge': ('simpleLinearRegression', 'Merge'), 'groupBitmapMerge': ('groupBitmap', 'Merge'), 'sumCountMerge': ('sumCount', 'Merge'), 'quantileExactHighMerge': ('quantileExactHigh', 'Merge'), 'anyLastMerge': ('anyLast', 'Merge'), 'quantilesDeterministicMerge': ('quantilesDeterministic', 'Merge'), 'entropyMerge': ('entropy', 'Merge'), 'quantileTDigestMerge': ('quantileTDigest', 'Merge'), 'sequenceNextNodeMerge': ('sequenceNextNode', 'Merge'), 'studentTTestMerge': ('studentTTest', 'Merge'), 'rankCorrMerge': ('rankCorr', 'Merge'), 'maxIntersectionsMerge': ('maxIntersections', 'Merge'), 'deltaSumMerge': ('deltaSum', 'Merge'), 'covarSampMerge': ('covarSamp', 'Merge'), 'varPopMerge': ('varPop', 'Merge'), 'stochasticLogisticRegressionMerge': ('stochasticLogisticRegression', 'Merge'), 'groupArrayLastMerge': ('groupArrayLast', 'Merge'), 'groupConcatMerge': ('groupConcat', 'Merge'), 'windowFunnelMerge': ('windowFunnel', 'Merge'), 'kolmogorovSmirnovTestMerge': ('kolmogorovSmirnovTest', 'Merge'), 'maxMapMerge': ('maxMap', 'Merge'), 'largestTriangleThreeBucketsMerge': ('largestTriangleThreeBuckets', 'Merge'), 'quantilesExactWeightedMerge': ('quantilesExactWeighted', 'Merge'), 'quantileExactMerge': ('quantileExact', 'Merge'), 'topKWeightedMerge': ('topKWeighted', 'Merge'), 'groupUniqArrayMerge': ('groupUniqArray', 'Merge'), 'uniqExactMerge': ('uniqExact', 'Merge'), 'stddevPopMerge': ('stddevPop', 'Merge'), 'maxMerge': ('max', 'Merge'), 'topKMerge': ('topK', 'Merge'), 'groupBitXorMerge': ('groupBitXor', 'Merge'), 'avgMerge': ('avg', 'Merge'), 'uniqMerge': ('uniq', 'Merge'), 'quantilesExactHighMerge': ('quantilesExactHigh', 'Merge'), 'quantileExactWeightedMerge': ('quantileExactWeighted', 'Merge'), 'minMapMerge': ('minMap', 'Merge'), 'anyHeavyMerge': ('anyHeavy', 'Merge'), 'groupArraySampleMerge': ('groupArraySample', 'Merge'), 'theilsUMerge': ('theilsU', 'Merge'), 'minMerge': ('min', 'Merge'), 'boundingRatioMerge': ('boundingRatio', 'Merge'), 'quantilesTDigestMerge': ('quantilesTDigest', 'Merge'), 'quantileDeterministicMerge': ('quantileDeterministic', 'Merge'), 'last_valueMerge': ('last_value', 'Merge'), 'cramersVMerge': ('cramersV', 'Merge'), 'first_valueMerge': ('first_value', 'Merge'), 'groupBitOrMerge': ('groupBitOr', 'Merge'), 'argMinMerge': ('argMin', 'Merge'), 'skewPopMerge': ('skewPop', 'Merge'), 'uniqCombined64Merge': ('uniqCombined64', 'Merge'), 'quantilesTDigestWeightedMerge': ('quantilesTDigestWeighted', 'Merge'), 'uniqThetaMerge': ('uniqTheta', 'Merge'), 'quantilesInterpolatedWeightedMerge': ('quantilesInterpolatedWeighted', 'Merge'), 'covarPopMerge': ('covarPop', 'Merge'), 'cramersVBiasCorrectedMerge': ('cramersVBiasCorrected', 'Merge'), 'avgWeightedMerge': ('avgWeighted', 'Merge'), 'quantileExactLowMerge': ('quantileExactLow', 'Merge'), 'groupArrayMerge': ('groupArray', 'Merge'), 'sumWithOverflowMerge': ('sumWithOverflow', 'Merge'), 'quantileMerge': ('quantile', 'Merge'), 'categoricalInformationValueMerge': ('categoricalInformationValue', 'Merge'), 'exponentialTimeDecayedAvgMerge': ('exponentialTimeDecayedAvg', 'Merge'), 'sparkBarMerge': ('sparkBar', 'Merge'), 'groupBitmapOrMerge': ('groupBitmapOr', 'Merge'), 'argMaxMerge': ('argMax', 'Merge'), 'quantilesBFloat16WeightedMerge': ('quantilesBFloat16Weighted', 'Merge'), 'quantilesMerge': ('quantiles', 'Merge'), 'quantilesTimingWeightedMerge': ('quantilesTimingWeighted', 'Merge'), 'medianMerge': ('median', 'Merge'), 'groupArrayMovingSumMerge': ('groupArrayMovingSum', 'Merge'), 'sumMerge': ('sum', 'Merge'), 'welchTTestMerge': ('welchTTest', 'Merge'), 'quantileTDigestWeightedMerge': ('quantileTDigestWeighted', 'Merge'), 'quantileTimingMerge': ('quantileTiming', 'Merge'), 'sequenceCountMerge': ('sequenceCount', 'Merge'), 'histogramMerge': ('histogram', 'Merge'), 'quantileBFloat16Merge': ('quantileBFloat16', 'Merge'), 'uniqHLL12Merge': ('uniqHLL12', 'Merge'), 'quantileExactInclusiveMerge': ('quantileExactInclusive', 'Merge'), 'approx_top_sumMerge': ('approx_top_sum', 'Merge'), 'quantileGKMerge': ('quantileGK', 'Merge'), 'kurtPopMerge': ('kurtPop', 'Merge'), 'corrMerge': ('corr', 'Merge'), 'skewSampMerge': ('skewSamp', 'Merge'), 'quantileBFloat16WeightedMerge': ('quantileBFloat16Weighted', 'Merge'), 'quantileInterpolatedWeightedMerge': ('quantileInterpolatedWeighted', 'Merge'), 'quantilesExactLowMerge': ('quantilesExactLow', 'Merge'), 'groupBitmapXorMerge': ('groupBitmapXor', 'Merge'), 'sumMapMerge': ('sumMap', 'Merge'), 'stochasticLinearRegressionMerge': ('stochasticLinearRegression', 'Merge'), 'uniqCombinedMerge': ('uniqCombined', 'Merge'), 'intervalLengthSumMerge': ('intervalLengthSum', 'Merge'), 'sumKahanMerge': ('sumKahan', 'Merge'), 'groupArrayInsertAtMerge': ('groupArrayInsertAt', 'Merge'), 'maxIntersectionsPositionMerge': ('maxIntersectionsPosition', 'Merge'), 'uniqUpToMerge': ('uniqUpTo', 'Merge'), 'groupBitAndMerge': ('groupBitAnd', 'Merge'), 'sequenceMatchMerge': ('sequenceMatch', 'Merge'), 'deltaSumTimestampMerge': ('deltaSumTimestamp', 'Merge'), 'anyMerge': ('any', 'Merge'), 'quantilesTimingMerge': ('quantilesTiming', 'Merge'), 'varSampMerge': ('varSamp', 'Merge'), 'groupArrayMovingAvgMerge': ('groupArrayMovingAvg', 'Merge'), 'retentionMerge': ('retention', 'Merge'), 'quantilesExactExclusiveMerge': ('quantilesExactExclusive', 'Merge'), 'kurtSampMerge': ('kurtSamp', 'Merge'), 'stddevSampMerge': ('stddevSamp', 'Merge'), 'quantilesBFloat16Merge': ('quantilesBFloat16', 'Merge'), 'quantilesGKMerge': ('quantilesGK', 'Merge'), 'mannWhitneyUTestMerge': ('mannWhitneyUTest', 'Merge'), 'exponentialMovingAverageMerge': ('exponentialMovingAverage', 'Merge'), 'meanZTestMerge': ('meanZTest', 'Merge'), 'groupBitmapAndMerge': ('groupBitmapAnd', 'Merge'), 'countMerge': ('count', 'Merge'), 'contingencyMerge': ('contingency', 'Merge'), 'quantileTimingWeightedMap': ('quantileTimingWeighted', 'Map'), 'quantilesExactMap': ('quantilesExact', 'Map'), 'simpleLinearRegressionMap': ('simpleLinearRegression', 'Map'), 'groupBitmapMap': ('groupBitmap', 'Map'), 'sumCountMap': ('sumCount', 'Map'), 'quantileExactHighMap': ('quantileExactHigh', 'Map'), 'anyLastMap': ('anyLast', 'Map'), 'quantilesDeterministicMap': ('quantilesDeterministic', 'Map'), 'entropyMap': ('entropy', 'Map'), 'quantileTDigestMap': ('quantileTDigest', 'Map'), 'sequenceNextNodeMap': ('sequenceNextNode', 'Map'), 'studentTTestMap': ('studentTTest', 'Map'), 'rankCorrMap': ('rankCorr', 'Map'), 'maxIntersectionsMap': ('maxIntersections', 'Map'), 'deltaSumMap': ('deltaSum', 'Map'), 'covarSampMap': ('covarSamp', 'Map'), 'varPopMap': ('varPop', 'Map'), 'stochasticLogisticRegressionMap': ('stochasticLogisticRegression', 'Map'), 'groupArrayLastMap': ('groupArrayLast', 'Map'), 'groupConcatMap': ('groupConcat', 'Map'), 'windowFunnelMap': ('windowFunnel', 'Map'), 'kolmogorovSmirnovTestMap': ('kolmogorovSmirnovTest', 'Map'), 'maxMapMap': ('maxMap', 'Map'), 'largestTriangleThreeBucketsMap': ('largestTriangleThreeBuckets', 'Map'), 'quantilesExactWeightedMap': ('quantilesExactWeighted', 'Map'), 'quantileExactMap': ('quantileExact', 'Map'), 'topKWeightedMap': ('topKWeighted', 'Map'), 'groupUniqArrayMap': ('groupUniqArray', 'Map'), 'uniqExactMap': ('uniqExact', 'Map'), 'stddevPopMap': ('stddevPop', 'Map'), 'maxMap': ('maxMap', None), 'topKMap': ('topK', 'Map'), 'groupBitXorMap': ('groupBitXor', 'Map'), 'avgMap': ('avg', 'Map'), 'uniqMap': ('uniq', 'Map'), 'quantilesExactHighMap': ('quantilesExactHigh', 'Map'), 'quantileExactWeightedMap': ('quantileExactWeighted', 'Map'), 'minMapMap': ('minMap', 'Map'), 'anyHeavyMap': ('anyHeavy', 'Map'), 'groupArraySampleMap': ('groupArraySample', 'Map'), 'theilsUMap': ('theilsU', 'Map'), 'minMap': ('minMap', None), 'boundingRatioMap': ('boundingRatio', 'Map'), 'quantilesTDigestMap': ('quantilesTDigest', 'Map'), 'quantileDeterministicMap': ('quantileDeterministic', 'Map'), 'last_valueMap': ('last_value', 'Map'), 'cramersVMap': ('cramersV', 'Map'), 'first_valueMap': ('first_value', 'Map'), 'groupBitOrMap': ('groupBitOr', 'Map'), 'argMinMap': ('argMin', 'Map'), 'skewPopMap': ('skewPop', 'Map'), 'uniqCombined64Map': ('uniqCombined64', 'Map'), 'quantilesTDigestWeightedMap': ('quantilesTDigestWeighted', 'Map'), 'uniqThetaMap': ('uniqTheta', 'Map'), 'quantilesInterpolatedWeightedMap': ('quantilesInterpolatedWeighted', 'Map'), 'covarPopMap': ('covarPop', 'Map'), 'cramersVBiasCorrectedMap': ('cramersVBiasCorrected', 'Map'), 'avgWeightedMap': ('avgWeighted', 'Map'), 'quantileExactLowMap': ('quantileExactLow', 'Map'), 'groupArrayMap': ('groupArray', 'Map'), 'sumWithOverflowMap': ('sumWithOverflow', 'Map'), 'quantileMap': ('quantile', 'Map'), 'categoricalInformationValueMap': ('categoricalInformationValue', 'Map'), 'exponentialTimeDecayedAvgMap': ('exponentialTimeDecayedAvg', 'Map'), 'sparkBarMap': ('sparkBar', 'Map'), 'groupBitmapOrMap': ('groupBitmapOr', 'Map'), 'argMaxMap': ('argMax', 'Map'), 'quantilesBFloat16WeightedMap': ('quantilesBFloat16Weighted', 'Map'), 'quantilesMap': ('quantiles', 'Map'), 'quantilesTimingWeightedMap': ('quantilesTimingWeighted', 'Map'), 'medianMap': ('median', 'Map'), 'groupArrayMovingSumMap': ('groupArrayMovingSum', 'Map'), 'sumMap': ('sumMap', None), 'welchTTestMap': ('welchTTest', 'Map'), 'quantileTDigestWeightedMap': ('quantileTDigestWeighted', 'Map'), 'quantileTimingMap': ('quantileTiming', 'Map'), 'sequenceCountMap': ('sequenceCount', 'Map'), 'histogramMap': ('histogram', 'Map'), 'quantileBFloat16Map': ('quantileBFloat16', 'Map'), 'uniqHLL12Map': ('uniqHLL12', 'Map'), 'quantileExactInclusiveMap': ('quantileExactInclusive', 'Map'), 'approx_top_sumMap': ('approx_top_sum', 'Map'), 'quantileGKMap': ('quantileGK', 'Map'), 'kurtPopMap': ('kurtPop', 'Map'), 'corrMap': ('corr', 'Map'), 'skewSampMap': ('skewSamp', 'Map'), 'quantileBFloat16WeightedMap': ('quantileBFloat16Weighted', 'Map'), 'quantileInterpolatedWeightedMap': ('quantileInterpolatedWeighted', 'Map'), 'quantilesExactLowMap': ('quantilesExactLow', 'Map'), 'groupBitmapXorMap': ('groupBitmapXor', 'Map'), 'sumMapMap': ('sumMap', 'Map'), 'stochasticLinearRegressionMap': ('stochasticLinearRegression', 'Map'), 'uniqCombinedMap': ('uniqCombined', 'Map'), 'intervalLengthSumMap': ('intervalLengthSum', 'Map'), 'sumKahanMap': ('sumKahan', 'Map'), 'groupArrayInsertAtMap': ('groupArrayInsertAt', 'Map'), 'maxIntersectionsPositionMap': ('maxIntersectionsPosition', 'Map'), 'uniqUpToMap': ('uniqUpTo', 'Map'), 'groupBitAndMap': ('groupBitAnd', 'Map'), 'sequenceMatchMap': ('sequenceMatch', 'Map'), 'deltaSumTimestampMap': ('deltaSumTimestamp', 'Map'), 'anyMap': ('any', 'Map'), 'quantilesTimingMap': ('quantilesTiming', 'Map'), 'varSampMap': ('varSamp', 'Map'), 'groupArrayMovingAvgMap': ('groupArrayMovingAvg', 'Map'), 'retentionMap': ('retention', 'Map'), 'quantilesExactExclusiveMap': ('quantilesExactExclusive', 'Map'), 'kurtSampMap': ('kurtSamp', 'Map'), 'stddevSampMap': ('stddevSamp', 'Map'), 'quantilesBFloat16Map': ('quantilesBFloat16', 'Map'), 'quantilesGKMap': ('quantilesGK', 'Map'), 'mannWhitneyUTestMap': ('mannWhitneyUTest', 'Map'), 'exponentialMovingAverageMap': ('exponentialMovingAverage', 'Map'), 'meanZTestMap': ('meanZTest', 'Map'), 'groupBitmapAndMap': ('groupBitmapAnd', 'Map'), 'countMap': ('count', 'Map'), 'contingencyMap': ('contingency', 'Map'), 'quantileTimingWeightedIf': ('quantileTimingWeighted', 'If'), 'quantilesExactIf': ('quantilesExact', 'If'), 'simpleLinearRegressionIf': ('simpleLinearRegression', 'If'), 'groupBitmapIf': ('groupBitmap', 'If'), 'sumCountIf': ('sumCount', 'If'), 'quantileExactHighIf': ('quantileExactHigh', 'If'), 'anyLastIf': ('anyLast', 'If'), 'quantilesDeterministicIf': ('quantilesDeterministic', 'If'), 'entropyIf': ('entropy', 'If'), 'quantileTDigestIf': ('quantileTDigest', 'If'), 'sequenceNextNodeIf': ('sequenceNextNode', 'If'), 'studentTTestIf': ('studentTTest', 'If'), 'rankCorrIf': ('rankCorr', 'If'), 'maxIntersectionsIf': ('maxIntersections', 'If'), 'deltaSumIf': ('deltaSum', 'If'), 'covarSampIf': ('covarSamp', 'If'), 'varPopIf': ('varPop', 'If'), 'stochasticLogisticRegressionIf': ('stochasticLogisticRegression', 'If'), 'groupArrayLastIf': ('groupArrayLast', 'If'), 'groupConcatIf': ('groupConcat', 'If'), 'windowFunnelIf': ('windowFunnel', 'If'), 'kolmogorovSmirnovTestIf': ('kolmogorovSmirnovTest', 'If'), 'maxMapIf': ('maxMap', 'If'), 'largestTriangleThreeBucketsIf': ('largestTriangleThreeBuckets', 'If'), 'quantilesExactWeightedIf': ('quantilesExactWeighted', 'If'), 'quantileExactIf': ('quantileExact', 'If'), 'topKWeightedIf': ('topKWeighted', 'If'), 'groupUniqArrayIf': ('groupUniqArray', 'If'), 'uniqExactIf': ('uniqExact', 'If'), 'stddevPopIf': ('stddevPop', 'If'), 'maxIf': ('max', 'If'), 'topKIf': ('topK', 'If'), 'groupBitXorIf': ('groupBitXor', 'If'), 'avgIf': ('avg', 'If'), 'uniqIf': ('uniq', 'If'), 'quantilesExactHighIf': ('quantilesExactHigh', 'If'), 'quantileExactWeightedIf': ('quantileExactWeighted', 'If'), 'minMapIf': ('minMap', 'If'), 'anyHeavyIf': ('anyHeavy', 'If'), 'groupArraySampleIf': ('groupArraySample', 'If'), 'theilsUIf': ('theilsU', 'If'), 'minIf': ('min', 'If'), 'boundingRatioIf': ('boundingRatio', 'If'), 'quantilesTDigestIf': ('quantilesTDigest', 'If'), 'quantileDeterministicIf': ('quantileDeterministic', 'If'), 'last_valueIf': ('last_value', 'If'), 'cramersVIf': ('cramersV', 'If'), 'first_valueIf': ('first_value', 'If'), 'groupBitOrIf': ('groupBitOr', 'If'), 'argMinIf': ('argMin', 'If'), 'skewPopIf': ('skewPop', 'If'), 'uniqCombined64If': ('uniqCombined64', 'If'), 'quantilesTDigestWeightedIf': ('quantilesTDigestWeighted', 'If'), 'uniqThetaIf': ('uniqTheta', 'If'), 'quantilesInterpolatedWeightedIf': ('quantilesInterpolatedWeighted', 'If'), 'covarPopIf': ('covarPop', 'If'), 'cramersVBiasCorrectedIf': ('cramersVBiasCorrected', 'If'), 'avgWeightedIf': ('avgWeighted', 'If'), 'quantileExactLowIf': ('quantileExactLow', 'If'), 'groupArrayIf': ('groupArray', 'If'), 'sumWithOverflowIf': ('sumWithOverflow', 'If'), 'quantileIf': ('quantile', 'If'), 'categoricalInformationValueIf': ('categoricalInformationValue', 'If'), 'exponentialTimeDecayedAvgIf': ('exponentialTimeDecayedAvg', 'If'), 'sparkBarIf': ('sparkBar', 'If'), 'groupBitmapOrIf': ('groupBitmapOr', 'If'), 'argMaxIf': ('argMax', 'If'), 'quantilesBFloat16WeightedIf': ('quantilesBFloat16Weighted', 'If'), 'quantilesIf': ('quantiles', 'If'), 'quantilesTimingWeightedIf': ('quantilesTimingWeighted', 'If'), 'medianIf': ('median', 'If'), 'groupArrayMovingSumIf': ('groupArrayMovingSum', 'If'), 'sumIf': ('sum', 'If'), 'welchTTestIf': ('welchTTest', 'If'), 'quantileTDigestWeightedIf': ('quantileTDigestWeighted', 'If'), 'quantileTimingIf': ('quantileTiming', 'If'), 'sequenceCountIf': ('sequenceCount', 'If'), 'histogramIf': ('histogram', 'If'), 'quantileBFloat16If': ('quantileBFloat16', 'If'), 'uniqHLL12If': ('uniqHLL12', 'If'), 'quantileExactInclusiveIf': ('quantileExactInclusive', 'If'), 'approx_top_sumIf': ('approx_top_sum', 'If'), 'quantileGKIf': ('quantileGK', 'If'), 'kurtPopIf': ('kurtPop', 'If'), 'corrIf': ('corr', 'If'), 'skewSampIf': ('skewSamp', 'If'), 'quantileBFloat16WeightedIf': ('quantileBFloat16Weighted', 'If'), 'quantileInterpolatedWeightedIf': ('quantileInterpolatedWeighted', 'If'), 'quantilesExactLowIf': ('quantilesExactLow', 'If'), 'groupBitmapXorIf': ('groupBitmapXor', 'If'), 'sumMapIf': ('sumMap', 'If'), 'stochasticLinearRegressionIf': ('stochasticLinearRegression', 'If'), 'uniqCombinedIf': ('uniqCombined', 'If'), 'intervalLengthSumIf': ('intervalLengthSum', 'If'), 'sumKahanIf': ('sumKahan', 'If'), 'groupArrayInsertAtIf': ('groupArrayInsertAt', 'If'), 'maxIntersectionsPositionIf': ('maxIntersectionsPosition', 'If'), 'uniqUpToIf': ('uniqUpTo', 'If'), 'groupBitAndIf': ('groupBitAnd', 'If'), 'sequenceMatchIf': ('sequenceMatch', 'If'), 'deltaSumTimestampIf': ('deltaSumTimestamp', 'If'), 'anyIf': ('any', 'If'), 'quantilesTimingIf': ('quantilesTiming', 'If'), 'varSampIf': ('varSamp', 'If'), 'groupArrayMovingAvgIf': ('groupArrayMovingAvg', 'If'), 'retentionIf': ('retention', 'If'), 'quantilesExactExclusiveIf': ('quantilesExactExclusive', 'If'), 'kurtSampIf': ('kurtSamp', 'If'), 'stddevSampIf': ('stddevSamp', 'If'), 'quantilesBFloat16If': ('quantilesBFloat16', 'If'), 'quantilesGKIf': ('quantilesGK', 'If'), 'mannWhitneyUTestIf': ('mannWhitneyUTest', 'If'), 'exponentialMovingAverageIf': ('exponentialMovingAverage', 'If'), 'meanZTestIf': ('meanZTest', 'If'), 'groupBitmapAndIf': ('groupBitmapAnd', 'If'), 'countIf': ('count', 'If'), 'contingencyIf': ('contingency', 'If'), 'quantileTimingWeighted': ('quantileTimingWeighted', None), 'quantilesExact': ('quantilesExact', None), 'simpleLinearRegression': ('simpleLinearRegression', None), 'groupBitmap': ('groupBitmap', None), 'sumCount': ('sumCount', None), 'quantileExactHigh': ('quantileExactHigh', None), 'anyLast': ('anyLast', None), 'quantilesDeterministic': ('quantilesDeterministic', None), 'entropy': ('entropy', None), 'quantileTDigest': ('quantileTDigest', None), 'sequenceNextNode': ('sequenceNextNode', None), 'studentTTest': ('studentTTest', None), 'rankCorr': ('rankCorr', None), 'maxIntersections': ('maxIntersections', None), 'deltaSum': ('deltaSum', None), 'covarSamp': ('covarSamp', None), 'varPop': ('varPop', None), 'stochasticLogisticRegression': ('stochasticLogisticRegression', None), 'groupArrayLast': ('groupArrayLast', None), 'groupConcat': ('groupConcat', None), 'windowFunnel': ('windowFunnel', None), 'kolmogorovSmirnovTest': ('kolmogorovSmirnovTest', None), 'largestTriangleThreeBuckets': ('largestTriangleThreeBuckets', None), 'quantilesExactWeighted': ('quantilesExactWeighted', None), 'quantileExact': ('quantileExact', None), 'topKWeighted': ('topKWeighted', None), 'groupUniqArray': ('groupUniqArray', None), 'uniqExact': ('uniqExact', None), 'stddevPop': ('stddevPop', None), 'max': ('max', None), 'topK': ('topK', None), 'groupBitXor': ('groupBitXor', None), 'avg': ('avg', None), 'uniq': ('uniq', None), 'quantilesExactHigh': ('quantilesExactHigh', None), 'quantileExactWeighted': ('quantileExactWeighted', None), 'anyHeavy': ('anyHeavy', None), 'groupArraySample': ('groupArraySample', None), 'theilsU': ('theilsU', None), 'min': ('min', None), 'boundingRatio': ('boundingRatio', None), 'quantilesTDigest': ('quantilesTDigest', None), 'quantileDeterministic': ('quantileDeterministic', None), 'last_value': ('last_value', None), 'cramersV': ('cramersV', None), 'first_value': ('first_value', None), 'groupBitOr': ('groupBitOr', None), 'argMin': ('argMin', None), 'skewPop': ('skewPop', None), 'uniqCombined64': ('uniqCombined64', None), 'quantilesTDigestWeighted': ('quantilesTDigestWeighted', None), 'uniqTheta': ('uniqTheta', None), 'quantilesInterpolatedWeighted': ('quantilesInterpolatedWeighted', None), 'covarPop': ('covarPop', None), 'cramersVBiasCorrected': ('cramersVBiasCorrected', None), 'avgWeighted': ('avgWeighted', None), 'quantileExactLow': ('quantileExactLow', None), 'groupArray': ('groupArray', None), 'sumWithOverflow': ('sumWithOverflow', None), 'quantile': ('quantile', None), 'categoricalInformationValue': ('categoricalInformationValue', None), 'exponentialTimeDecayedAvg': ('exponentialTimeDecayedAvg', None), 'sparkBar': ('sparkBar', None), 'groupBitmapOr': ('groupBitmapOr', None), 'argMax': ('argMax', None), 'quantilesBFloat16Weighted': ('quantilesBFloat16Weighted', None), 'quantiles': ('quantiles', None), 'quantilesTimingWeighted': ('quantilesTimingWeighted', None), 'median': ('median', None), 'groupArrayMovingSum': ('groupArrayMovingSum', None), 'sum': ('sum', None), 'welchTTest': ('welchTTest', None), 'quantileTDigestWeighted': ('quantileTDigestWeighted', None), 'quantileTiming': ('quantileTiming', None), 'sequenceCount': ('sequenceCount', None), 'histogram': ('histogram', None), 'quantileBFloat16': ('quantileBFloat16', None), 'uniqHLL12': ('uniqHLL12', None), 'quantileExactInclusive': ('quantileExactInclusive', None), 'approx_top_sum': ('approx_top_sum', None), 'quantileGK': ('quantileGK', None), 'kurtPop': ('kurtPop', None), 'corr': ('corr', None), 'skewSamp': ('skewSamp', None), 'quantileBFloat16Weighted': ('quantileBFloat16Weighted', None), 'quantileInterpolatedWeighted': ('quantileInterpolatedWeighted', None), 'quantilesExactLow': ('quantilesExactLow', None), 'groupBitmapXor': ('groupBitmapXor', None), 'stochasticLinearRegression': ('stochasticLinearRegression', None), 'uniqCombined': ('uniqCombined', None), 'intervalLengthSum': ('intervalLengthSum', None), 'sumKahan': ('sumKahan', None), 'groupArrayInsertAt': ('groupArrayInsertAt', None), 'maxIntersectionsPosition': ('maxIntersectionsPosition', None), 'uniqUpTo': ('uniqUpTo', None), 'groupBitAnd': ('groupBitAnd', None), 'sequenceMatch': ('sequenceMatch', None), 'deltaSumTimestamp': ('deltaSumTimestamp', None), 'any': ('any', None), 'quantilesTiming': ('quantilesTiming', None), 'varSamp': ('varSamp', None), 'groupArrayMovingAvg': ('groupArrayMovingAvg', None), 'retention': ('retention', None), 'quantilesExactExclusive': ('quantilesExactExclusive', None), 'kurtSamp': ('kurtSamp', None), 'stddevSamp': ('stddevSamp', None), 'quantilesBFloat16': ('quantilesBFloat16', None), 'quantilesGK': ('quantilesGK', None), 'mannWhitneyUTest': ('mannWhitneyUTest', None), 'exponentialMovingAverage': ('exponentialMovingAverage', None), 'meanZTest': ('meanZTest', None), 'groupBitmapAnd': ('groupBitmapAnd', None), 'count': ('count', None), 'contingency': ('contingency', None)}
FUNCTION_PARSERS =
{'ARG_MAX': <function Parser.<dictcomp>.<lambda>>, 'ARGMAX': <function Parser.<dictcomp>.<lambda>>, 'MAX_BY': <function Parser.<dictcomp>.<lambda>>, 'ARG_MIN': <function Parser.<dictcomp>.<lambda>>, 'ARGMIN': <function Parser.<dictcomp>.<lambda>>, 'MIN_BY': <function Parser.<dictcomp>.<lambda>>, 'CAST': <function Parser.<lambda>>, 'CEIL': <function Parser.<lambda>>, 'CONVERT': <function Parser.<lambda>>, 'CHAR': <function Parser.<lambda>>, 'CHR': <function Parser.<lambda>>, 'DECODE': <function Parser.<lambda>>, 'EXTRACT': <function Parser.<lambda>>, 'FLOOR': <function Parser.<lambda>>, 'GAP_FILL': <function Parser.<lambda>>, 'INITCAP': <function Parser.<lambda>>, 'JSON_OBJECT': <function Parser.<lambda>>, 'JSON_OBJECTAGG': <function Parser.<lambda>>, 'JSON_TABLE': <function Parser.<lambda>>, 'NORMALIZE': <function Parser.<lambda>>, 'OPENJSON': <function Parser.<lambda>>, 'OVERLAY': <function Parser.<lambda>>, 'POSITION': <function Parser.<lambda>>, 'SAFE_CAST': <function Parser.<lambda>>, 'STRING_AGG': <function Parser.<lambda>>, 'SUBSTRING': <function Parser.<lambda>>, 'TRIM': <function Parser.<lambda>>, 'TRY_CAST': <function Parser.<lambda>>, 'TRY_CONVERT': <function Parser.<lambda>>, 'WEIGHT_STRING': <function Parser.<lambda>>, 'XMLELEMENT': <function Parser.<lambda>>, 'XMLTABLE': <function Parser.<lambda>>, 'ARRAYJOIN': <function ClickHouseParser.<lambda>>, 'GROUPCONCAT': <function ClickHouseParser.<lambda>>, 'QUANTILE': <function ClickHouseParser.<lambda>>, 'MEDIAN': <function ClickHouseParser.<lambda>>, 'COLUMNS': <function ClickHouseParser.<lambda>>, 'TUPLE': <function ClickHouseParser.<lambda>>, 'AND': <function ClickHouseParser.<lambda>>, 'OR': <function ClickHouseParser.<lambda>>, 'XOR': <function ClickHouseParser.<lambda>>, 'VIEW': <function ClickHouseParser.<lambda>>}
PROPERTY_PARSERS =
{'ALLOWED_VALUES': <function Parser.<lambda>>, 'ALGORITHM': <function Parser.<lambda>>, 'AUTO': <function Parser.<lambda>>, 'AUTO_INCREMENT': <function Parser.<lambda>>, 'BACKUP': <function Parser.<lambda>>, 'BLOCKCOMPRESSION': <function Parser.<lambda>>, 'CALLED': <function Parser.<lambda>>, 'CHARSET': <function Parser.<lambda>>, 'CHECKSUM': <function Parser.<lambda>>, 'CLUSTER BY': <function Parser.<lambda>>, 'CLUSTERED': <function Parser.<lambda>>, 'COLLATE': <function Parser.<lambda>>, 'COMMENT': <function Parser.<lambda>>, 'CONTAINS': <function Parser.<lambda>>, 'COPY': <function Parser.<lambda>>, 'DATABLOCKSIZE': <function Parser.<lambda>>, 'DATA_DELETION': <function Parser.<lambda>>, 'DEFINER': <function Parser.<lambda>>, 'DETERMINISTIC': <function Parser.<lambda>>, 'DISTRIBUTED': <function Parser.<lambda>>, 'DUPLICATE': <function Parser.<lambda>>, 'DISTKEY': <function Parser.<lambda>>, 'DISTSTYLE': <function Parser.<lambda>>, 'EMPTY': <function Parser.<lambda>>, 'ENGINE': <function ClickHouseParser.<lambda>>, 'ENVIRONMENT': <function Parser.<lambda>>, 'HANDLER': <function Parser.<lambda>>, 'EXECUTE': <function Parser.<lambda>>, 'EXTERNAL': <function Parser.<lambda>>, 'FALLBACK': <function Parser.<lambda>>, 'FORMAT': <function Parser.<lambda>>, 'FREESPACE': <function Parser.<lambda>>, 'GLOBAL': <function Parser.<lambda>>, 'HEAP': <function Parser.<lambda>>, 'ICEBERG': <function Parser.<lambda>>, 'IMMUTABLE': <function Parser.<lambda>>, 'INHERITS': <function Parser.<lambda>>, 'INPUT': <function Parser.<lambda>>, 'JOURNAL': <function Parser.<lambda>>, 'LANGUAGE': <function Parser.<lambda>>, 'LAYOUT': <function Parser.<lambda>>, 'LIFETIME': <function Parser.<lambda>>, 'LIKE': <function Parser.<lambda>>, 'LOCATION': <function Parser.<lambda>>, 'LOCK': <function Parser.<lambda>>, 'LOCKING': <function Parser.<lambda>>, 'LOG': <function Parser.<lambda>>, 'MATERIALIZED': <function Parser.<lambda>>, 'MERGEBLOCKRATIO': <function Parser.<lambda>>, 'MODIFIES': <function Parser.<lambda>>, 'MULTISET': <function Parser.<lambda>>, 'NO': <function Parser.<lambda>>, 'ON': <function Parser.<lambda>>, 'ORDER BY': <function Parser.<lambda>>, 'OUTPUT': <function Parser.<lambda>>, 'PARTITION': <function Parser.<lambda>>, 'PARTITION BY': <function Parser.<lambda>>, 'PARTITIONED BY': <function Parser.<lambda>>, 'PARTITIONED_BY': <function Parser.<lambda>>, 'PRIMARY KEY': <function Parser.<lambda>>, 'RANGE': <function Parser.<lambda>>, 'READS': <function Parser.<lambda>>, 'REMOTE': <function Parser.<lambda>>, 'RETURNS': <function Parser.<lambda>>, 'STRICT': <function Parser.<lambda>>, 'STREAMING': <function Parser.<lambda>>, 'ROW': <function Parser.<lambda>>, 'ROW_FORMAT': <function Parser.<lambda>>, 'SAMPLE': <function Parser.<lambda>>, 'SECURE': <function Parser.<lambda>>, 'SECURITY': <function Parser.<lambda>>, 'SQL SECURITY': <function Parser.<lambda>>, 'SET': <function Parser.<lambda>>, 'SETTINGS': <function Parser.<lambda>>, 'SHARING': <function Parser.<lambda>>, 'SORTKEY': <function Parser.<lambda>>, 'SOURCE': <function Parser.<lambda>>, 'STABLE': <function Parser.<lambda>>, 'STORED': <function Parser.<lambda>>, 'SYSTEM_VERSIONING': <function Parser.<lambda>>, 'TBLPROPERTIES': <function Parser.<lambda>>, 'TEMP': <function Parser.<lambda>>, 'TEMPORARY': <function Parser.<lambda>>, 'TO': <function Parser.<lambda>>, 'TRANSIENT': <function Parser.<lambda>>, 'TRANSFORM': <function Parser.<lambda>>, 'TTL': <function Parser.<lambda>>, 'USING': <function Parser.<lambda>>, 'UNLOGGED': <function Parser.<lambda>>, 'VOLATILE': <function Parser.<lambda>>, 'WITH': <function Parser.<lambda>>, 'REFRESH': <function ClickHouseParser.<lambda>>, 'UUID': <function ClickHouseParser.<lambda>>}
NO_PAREN_FUNCTION_PARSERS =
{'CASE': <function Parser.<lambda>>, 'CONNECT_BY_ROOT': <function Parser.<lambda>>, 'IF': <function Parser.<lambda>>}
NO_PAREN_FUNCTIONS =
{<TokenType.CURRENT_DATE: 249>: <class 'sqlglot.expressions.temporal.CurrentDate'>, <TokenType.CURRENT_DATETIME: 250>: <class 'sqlglot.expressions.temporal.CurrentDate'>, <TokenType.CURRENT_TIME: 252>: <class 'sqlglot.expressions.temporal.CurrentTime'>, <TokenType.CURRENT_USER: 254>: <class 'sqlglot.expressions.functions.CurrentUser'>, <TokenType.CURRENT_ROLE: 256>: <class 'sqlglot.expressions.functions.CurrentRole'>}
RANGE_PARSERS =
{<TokenType.AT_GT: 56>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.BETWEEN: 232>: <function Parser.<lambda>>, <TokenType.GLOB: 291>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.ILIKE: 299>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.IN: 300>: <function Parser.<lambda>>, <TokenType.IRLIKE: 311>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.IS: 312>: <function Parser.<lambda>>, <TokenType.LIKE: 322>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.LT_AT: 55>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.OVERLAPS: 353>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.RLIKE: 385>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.SIMILAR_TO: 400>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.FOR: 283>: <function Parser.<lambda>>, <TokenType.QMARK_AMP: 68>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.QMARK_PIPE: 69>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.HASH_DASH: 70>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.AT_QMARK: 54>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.ADJACENT: 65>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.OPERATOR: 344>: <function Parser.<lambda>>, <TokenType.AMP_LT: 63>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.AMP_GT: 64>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.CARET_AT: 43>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.GLOBAL: 292>: <function ClickHouseParser.<lambda>>}
COLUMN_OPERATORS =
{<TokenType.DOT: 8>: None, <TokenType.DOTCOLON: 12>: <function Parser.<lambda>>, <TokenType.DCOLON: 14>: <function Parser.<lambda>>, <TokenType.ARROW: 45>: <function Parser.<lambda>>, <TokenType.DARROW: 46>: <function Parser.<lambda>>, <TokenType.HASH_ARROW: 49>: <function Parser.<lambda>>, <TokenType.DHASH_ARROW: 50>: <function Parser.<lambda>>, <TokenType.DOTCARET: 13>: <function ClickHouseParser.<lambda>>}
JOIN_KINDS =
{<TokenType.SEMI: 393>, <TokenType.STRAIGHT_JOIN: 407>, <TokenType.ALL: 222>, <TokenType.OUTER: 351>, <TokenType.ANY: 224>, <TokenType.ANTI: 223>, <TokenType.ARRAY: 226>, <TokenType.ASOF: 228>, <TokenType.PASTE: 358>, <TokenType.INNER: 303>, <TokenType.CROSS: 247>}
TABLE_ALIAS_TOKENS =
{<TokenType.SESSION: 59>, <TokenType.SESSION_USER: 61>, <TokenType.IDENTIFIER: 79>, <TokenType.DATABASE: 80>, <TokenType.COLUMN: 81>, <TokenType.SCHEMA: 83>, <TokenType.TABLE: 84>, <TokenType.WAREHOUSE: 85>, <TokenType.STAGE: 86>, <TokenType.STREAM: 87>, <TokenType.STREAMLIT: 88>, <TokenType.VAR: 89>, <TokenType.BIT: 98>, <TokenType.BOOLEAN: 99>, <TokenType.TINYINT: 100>, <TokenType.UTINYINT: 101>, <TokenType.SMALLINT: 102>, <TokenType.USMALLINT: 103>, <TokenType.MEDIUMINT: 104>, <TokenType.UMEDIUMINT: 105>, <TokenType.INT: 106>, <TokenType.UINT: 107>, <TokenType.BIGINT: 108>, <TokenType.UBIGINT: 109>, <TokenType.BIGNUM: 110>, <TokenType.INT128: 111>, <TokenType.UINT128: 112>, <TokenType.INT256: 113>, <TokenType.UINT256: 114>, <TokenType.FLOAT: 115>, <TokenType.DOUBLE: 116>, <TokenType.UDOUBLE: 117>, <TokenType.DECIMAL: 118>, <TokenType.DECIMAL32: 119>, <TokenType.DECIMAL64: 120>, <TokenType.DECIMAL128: 121>, <TokenType.DECIMAL256: 122>, <TokenType.DECFLOAT: 123>, <TokenType.UDECIMAL: 124>, <TokenType.BIGDECIMAL: 125>, <TokenType.CHAR: 126>, <TokenType.NCHAR: 127>, <TokenType.VARCHAR: 128>, <TokenType.NVARCHAR: 129>, <TokenType.BPCHAR: 130>, <TokenType.TEXT: 131>, <TokenType.MEDIUMTEXT: 132>, <TokenType.LONGTEXT: 133>, <TokenType.BLOB: 134>, <TokenType.MEDIUMBLOB: 135>, <TokenType.LONGBLOB: 136>, <TokenType.TINYBLOB: 137>, <TokenType.TINYTEXT: 138>, <TokenType.NAME: 139>, <TokenType.BINARY: 140>, <TokenType.VARBINARY: 141>, <TokenType.JSON: 142>, <TokenType.JSONB: 143>, <TokenType.TIME: 144>, <TokenType.TIMETZ: 145>, <TokenType.TIME_NS: 146>, <TokenType.TIMESTAMP: 147>, <TokenType.TIMESTAMPTZ: 148>, <TokenType.TIMESTAMPLTZ: 149>, <TokenType.TIMESTAMPNTZ: 150>, <TokenType.TIMESTAMP_S: 151>, <TokenType.TIMESTAMP_MS: 152>, <TokenType.TIMESTAMP_NS: 153>, <TokenType.DATETIME: 154>, <TokenType.DATETIME2: 155>, <TokenType.DATETIME64: 156>, <TokenType.SMALLDATETIME: 157>, <TokenType.DATE: 158>, <TokenType.DATE32: 159>, <TokenType.INT4RANGE: 160>, <TokenType.INT4MULTIRANGE: 161>, <TokenType.INT8RANGE: 162>, <TokenType.INT8MULTIRANGE: 163>, <TokenType.NUMRANGE: 164>, <TokenType.NUMMULTIRANGE: 165>, <TokenType.TSRANGE: 166>, <TokenType.TSMULTIRANGE: 167>, <TokenType.TSTZRANGE: 168>, <TokenType.TSTZMULTIRANGE: 169>, <TokenType.DATERANGE: 170>, <TokenType.DATEMULTIRANGE: 171>, <TokenType.UUID: 172>, <TokenType.GEOGRAPHY: 173>, <TokenType.GEOGRAPHYPOINT: 174>, <TokenType.NULLABLE: 175>, <TokenType.GEOMETRY: 176>, <TokenType.POINT: 177>, <TokenType.RING: 178>, <TokenType.LINESTRING: 179>, <TokenType.LOCALTIME: 180>, <TokenType.LOCALTIMESTAMP: 181>, <TokenType.MULTILINESTRING: 183>, <TokenType.POLYGON: 184>, <TokenType.MULTIPOLYGON: 185>, <TokenType.HLLSKETCH: 186>, <TokenType.HSTORE: 187>, <TokenType.SUPER: 188>, <TokenType.SERIAL: 189>, <TokenType.SMALLSERIAL: 190>, <TokenType.BIGSERIAL: 191>, <TokenType.XML: 192>, <TokenType.YEAR: 193>, <TokenType.USERDEFINED: 194>, <TokenType.MONEY: 195>, <TokenType.SMALLMONEY: 196>, <TokenType.ROWVERSION: 197>, <TokenType.IMAGE: 198>, <TokenType.VARIANT: 199>, <TokenType.OBJECT: 200>, <TokenType.REF: 201>, <TokenType.INET: 202>, <TokenType.IPADDRESS: 203>, <TokenType.IPPREFIX: 204>, <TokenType.IPV4: 205>, <TokenType.IPV6: 206>, <TokenType.ENUM: 207>, <TokenType.ENUM8: 208>, <TokenType.ENUM16: 209>, <TokenType.FIXEDSTRING: 210>, <TokenType.LOWCARDINALITY: 211>, <TokenType.NESTED: 212>, <TokenType.AGGREGATEFUNCTION: 213>, <TokenType.SIMPLEAGGREGATEFUNCTION: 214>, <TokenType.TDIGEST: 215>, <TokenType.UNKNOWN: 216>, <TokenType.VECTOR: 217>, <TokenType.DYNAMIC: 218>, <TokenType.VOID: 219>, <TokenType.APPLY: 225>, <TokenType.ASC: 227>, <TokenType.ATTACH: 229>, <TokenType.AUTO_INCREMENT: 230>, <TokenType.BEGIN: 231>, <TokenType.CACHE: 234>, <TokenType.CASE: 235>, <TokenType.COLLATE: 238>, <TokenType.COMMAND: 239>, <TokenType.COMMENT: 240>, <TokenType.COMMIT: 241>, <TokenType.CONNECT: 242>, <TokenType.CONSTRAINT: 244>, <TokenType.COPY: 245>, <TokenType.CUBE: 248>, <TokenType.CURRENT_DATE: 249>, <TokenType.CURRENT_DATETIME: 250>, <TokenType.CURRENT_SCHEMA: 251>, <TokenType.CURRENT_TIME: 252>, <TokenType.CURRENT_TIMESTAMP: 253>, <TokenType.CURRENT_USER: 254>, <TokenType.CURRENT_ROLE: 256>, <TokenType.CURRENT_CATALOG: 257>, <TokenType.DECLARE: 258>, <TokenType.DEFAULT: 259>, <TokenType.DELETE: 260>, <TokenType.DESC: 261>, <TokenType.DESCRIBE: 262>, <TokenType.DETACH: 263>, <TokenType.DISCONNECT: 264>, <TokenType.DICTIONARY: 265>, <TokenType.DIV: 268>, <TokenType.END: 271>, <TokenType.ESCAPE: 272>, <TokenType.EXECUTE: 274>, <TokenType.EXISTS: 275>, <TokenType.FALSE: 276>, <TokenType.FILE: 278>, <TokenType.FILE_FORMAT: 279>, <TokenType.FILTER: 280>, <TokenType.FIRST: 282>, <TokenType.FOREIGN_KEY: 285>, <TokenType.FUNCTION: 289>, <TokenType.GET: 290>, <TokenType.IN: 300>, <TokenType.INDEX: 301>, <TokenType.INTERVAL: 308>, <TokenType.IS: 312>, <TokenType.ISNULL: 313>, <TokenType.KEEP: 316>, <TokenType.KILL: 318>, <TokenType.LIMIT: 323>, <TokenType.LIST: 324>, <TokenType.LOAD: 325>, <TokenType.MAP: 327>, <TokenType.MATCH: 328>, <TokenType.MERGE: 332>, <TokenType.MODEL: 334>, <TokenType.NEXT: 336>, <TokenType.NOTHING: 337>, <TokenType.NULL: 339>, <TokenType.OBJECT_IDENTIFIER: 340>, <TokenType.OFFSET: 341>, <TokenType.OPERATOR: 344>, <TokenType.ORDINALITY: 348>, <TokenType.OUT: 349>, <TokenType.INOUT: 350>, <TokenType.OVER: 352>, <TokenType.OVERLAPS: 353>, <TokenType.OVERWRITE: 354>, <TokenType.PARTITION: 356>, <TokenType.PERCENT: 359>, <TokenType.PIVOT: 360>, <TokenType.PRAGMA: 365>, <TokenType.PROCEDURE: 368>, <TokenType.PROJECTION: 370>, <TokenType.PSEUDO_TYPE: 371>, <TokenType.PUT: 372>, <TokenType.RANGE: 376>, <TokenType.RECURSIVE: 377>, <TokenType.REFRESH: 378>, <TokenType.RENAME: 379>, <TokenType.REPLACE: 380>, <TokenType.REFERENCES: 383>, <TokenType.ROLLUP: 388>, <TokenType.ROW: 389>, <TokenType.ROWS: 390>, <TokenType.SEQUENCE: 395>, <TokenType.SET: 397>, <TokenType.SHOW: 399>, <TokenType.SOME: 401>, <TokenType.STORAGE_INTEGRATION: 406>, <TokenType.STRAIGHT_JOIN: 407>, <TokenType.STRUCT: 408>, <TokenType.TAG: 411>, <TokenType.TEMPORARY: 412>, <TokenType.TOP: 413>, <TokenType.TRUE: 415>, <TokenType.TRUNCATE: 416>, <TokenType.TRIGGER: 417>, <TokenType.TYPE: 418>, <TokenType.UNNEST: 422>, <TokenType.UNPIVOT: 423>, <TokenType.UPDATE: 424>, <TokenType.USE: 425>, <TokenType.VIEW: 429>, <TokenType.SEMANTIC_VIEW: 430>, <TokenType.VOLATILE: 431>, <TokenType.UNIQUE: 437>, <TokenType.SINK: 442>, <TokenType.SOURCE: 443>, <TokenType.ANALYZE: 444>, <TokenType.NAMESPACE: 445>, <TokenType.EXPORT: 446>}
ALIAS_TOKENS =
{<TokenType.SESSION: 59>, <TokenType.SESSION_USER: 61>, <TokenType.IDENTIFIER: 79>, <TokenType.DATABASE: 80>, <TokenType.COLUMN: 81>, <TokenType.SCHEMA: 83>, <TokenType.TABLE: 84>, <TokenType.WAREHOUSE: 85>, <TokenType.STAGE: 86>, <TokenType.STREAM: 87>, <TokenType.STREAMLIT: 88>, <TokenType.VAR: 89>, <TokenType.BIT: 98>, <TokenType.BOOLEAN: 99>, <TokenType.TINYINT: 100>, <TokenType.UTINYINT: 101>, <TokenType.SMALLINT: 102>, <TokenType.USMALLINT: 103>, <TokenType.MEDIUMINT: 104>, <TokenType.UMEDIUMINT: 105>, <TokenType.INT: 106>, <TokenType.UINT: 107>, <TokenType.BIGINT: 108>, <TokenType.UBIGINT: 109>, <TokenType.BIGNUM: 110>, <TokenType.INT128: 111>, <TokenType.UINT128: 112>, <TokenType.INT256: 113>, <TokenType.UINT256: 114>, <TokenType.FLOAT: 115>, <TokenType.DOUBLE: 116>, <TokenType.UDOUBLE: 117>, <TokenType.DECIMAL: 118>, <TokenType.DECIMAL32: 119>, <TokenType.DECIMAL64: 120>, <TokenType.DECIMAL128: 121>, <TokenType.DECIMAL256: 122>, <TokenType.DECFLOAT: 123>, <TokenType.UDECIMAL: 124>, <TokenType.BIGDECIMAL: 125>, <TokenType.CHAR: 126>, <TokenType.NCHAR: 127>, <TokenType.VARCHAR: 128>, <TokenType.NVARCHAR: 129>, <TokenType.BPCHAR: 130>, <TokenType.TEXT: 131>, <TokenType.MEDIUMTEXT: 132>, <TokenType.LONGTEXT: 133>, <TokenType.BLOB: 134>, <TokenType.MEDIUMBLOB: 135>, <TokenType.LONGBLOB: 136>, <TokenType.TINYBLOB: 137>, <TokenType.TINYTEXT: 138>, <TokenType.NAME: 139>, <TokenType.BINARY: 140>, <TokenType.VARBINARY: 141>, <TokenType.JSON: 142>, <TokenType.JSONB: 143>, <TokenType.TIME: 144>, <TokenType.TIMETZ: 145>, <TokenType.TIME_NS: 146>, <TokenType.TIMESTAMP: 147>, <TokenType.TIMESTAMPTZ: 148>, <TokenType.TIMESTAMPLTZ: 149>, <TokenType.TIMESTAMPNTZ: 150>, <TokenType.TIMESTAMP_S: 151>, <TokenType.TIMESTAMP_MS: 152>, <TokenType.TIMESTAMP_NS: 153>, <TokenType.DATETIME: 154>, <TokenType.DATETIME2: 155>, <TokenType.DATETIME64: 156>, <TokenType.SMALLDATETIME: 157>, <TokenType.DATE: 158>, <TokenType.DATE32: 159>, <TokenType.INT4RANGE: 160>, <TokenType.INT4MULTIRANGE: 161>, <TokenType.INT8RANGE: 162>, <TokenType.INT8MULTIRANGE: 163>, <TokenType.NUMRANGE: 164>, <TokenType.NUMMULTIRANGE: 165>, <TokenType.TSRANGE: 166>, <TokenType.TSMULTIRANGE: 167>, <TokenType.TSTZRANGE: 168>, <TokenType.TSTZMULTIRANGE: 169>, <TokenType.DATERANGE: 170>, <TokenType.DATEMULTIRANGE: 171>, <TokenType.UUID: 172>, <TokenType.GEOGRAPHY: 173>, <TokenType.GEOGRAPHYPOINT: 174>, <TokenType.NULLABLE: 175>, <TokenType.GEOMETRY: 176>, <TokenType.POINT: 177>, <TokenType.RING: 178>, <TokenType.LINESTRING: 179>, <TokenType.LOCALTIME: 180>, <TokenType.LOCALTIMESTAMP: 181>, <TokenType.MULTILINESTRING: 183>, <TokenType.POLYGON: 184>, <TokenType.MULTIPOLYGON: 185>, <TokenType.HLLSKETCH: 186>, <TokenType.HSTORE: 187>, <TokenType.SUPER: 188>, <TokenType.SERIAL: 189>, <TokenType.SMALLSERIAL: 190>, <TokenType.BIGSERIAL: 191>, <TokenType.XML: 192>, <TokenType.YEAR: 193>, <TokenType.USERDEFINED: 194>, <TokenType.MONEY: 195>, <TokenType.SMALLMONEY: 196>, <TokenType.ROWVERSION: 197>, <TokenType.IMAGE: 198>, <TokenType.VARIANT: 199>, <TokenType.OBJECT: 200>, <TokenType.REF: 201>, <TokenType.INET: 202>, <TokenType.IPADDRESS: 203>, <TokenType.IPPREFIX: 204>, <TokenType.IPV4: 205>, <TokenType.IPV6: 206>, <TokenType.ENUM: 207>, <TokenType.ENUM8: 208>, <TokenType.ENUM16: 209>, <TokenType.FIXEDSTRING: 210>, <TokenType.LOWCARDINALITY: 211>, <TokenType.NESTED: 212>, <TokenType.AGGREGATEFUNCTION: 213>, <TokenType.SIMPLEAGGREGATEFUNCTION: 214>, <TokenType.TDIGEST: 215>, <TokenType.UNKNOWN: 216>, <TokenType.VECTOR: 217>, <TokenType.DYNAMIC: 218>, <TokenType.VOID: 219>, <TokenType.ALL: 222>, <TokenType.ANTI: 223>, <TokenType.ANY: 224>, <TokenType.APPLY: 225>, <TokenType.ARRAY: 226>, <TokenType.ASC: 227>, <TokenType.ASOF: 228>, <TokenType.ATTACH: 229>, <TokenType.AUTO_INCREMENT: 230>, <TokenType.BEGIN: 231>, <TokenType.CACHE: 234>, <TokenType.CASE: 235>, <TokenType.COLLATE: 238>, <TokenType.COMMAND: 239>, <TokenType.COMMENT: 240>, <TokenType.COMMIT: 241>, <TokenType.CONNECT: 242>, <TokenType.CONSTRAINT: 244>, <TokenType.COPY: 245>, <TokenType.CUBE: 248>, <TokenType.CURRENT_DATE: 249>, <TokenType.CURRENT_DATETIME: 250>, <TokenType.CURRENT_SCHEMA: 251>, <TokenType.CURRENT_TIME: 252>, <TokenType.CURRENT_TIMESTAMP: 253>, <TokenType.CURRENT_USER: 254>, <TokenType.CURRENT_ROLE: 256>, <TokenType.CURRENT_CATALOG: 257>, <TokenType.DECLARE: 258>, <TokenType.DEFAULT: 259>, <TokenType.DELETE: 260>, <TokenType.DESC: 261>, <TokenType.DESCRIBE: 262>, <TokenType.DETACH: 263>, <TokenType.DISCONNECT: 264>, <TokenType.DICTIONARY: 265>, <TokenType.DIV: 268>, <TokenType.END: 271>, <TokenType.ESCAPE: 272>, <TokenType.EXECUTE: 274>, <TokenType.EXISTS: 275>, <TokenType.FALSE: 276>, <TokenType.FILE: 278>, <TokenType.FILE_FORMAT: 279>, <TokenType.FILTER: 280>, <TokenType.FINAL: 281>, <TokenType.FIRST: 282>, <TokenType.FOREIGN_KEY: 285>, <TokenType.FULL: 288>, <TokenType.FUNCTION: 289>, <TokenType.GET: 290>, <TokenType.IN: 300>, <TokenType.INDEX: 301>, <TokenType.INTERVAL: 308>, <TokenType.IS: 312>, <TokenType.ISNULL: 313>, <TokenType.KEEP: 316>, <TokenType.KILL: 318>, <TokenType.LEFT: 321>, <TokenType.LIMIT: 323>, <TokenType.LIST: 324>, <TokenType.LOAD: 325>, <TokenType.LOCK: 326>, <TokenType.MAP: 327>, <TokenType.MATCH: 328>, <TokenType.MERGE: 332>, <TokenType.MODEL: 334>, <TokenType.NATURAL: 335>, <TokenType.NEXT: 336>, <TokenType.NOTHING: 337>, <TokenType.NULL: 339>, <TokenType.OBJECT_IDENTIFIER: 340>, <TokenType.OFFSET: 341>, <TokenType.OPERATOR: 344>, <TokenType.ORDINALITY: 348>, <TokenType.OUT: 349>, <TokenType.INOUT: 350>, <TokenType.OVER: 352>, <TokenType.OVERLAPS: 353>, <TokenType.OVERWRITE: 354>, <TokenType.PARTITION: 356>, <TokenType.PASTE: 358>, <TokenType.PERCENT: 359>, <TokenType.PIVOT: 360>, <TokenType.PRAGMA: 365>, <TokenType.PROCEDURE: 368>, <TokenType.PROJECTION: 370>, <TokenType.PSEUDO_TYPE: 371>, <TokenType.PUT: 372>, <TokenType.RANGE: 376>, <TokenType.RECURSIVE: 377>, <TokenType.REFRESH: 378>, <TokenType.RENAME: 379>, <TokenType.REPLACE: 380>, <TokenType.REFERENCES: 383>, <TokenType.RIGHT: 384>, <TokenType.ROLLUP: 388>, <TokenType.ROW: 389>, <TokenType.ROWS: 390>, <TokenType.SEMI: 393>, <TokenType.SEQUENCE: 395>, <TokenType.SET: 397>, <TokenType.SHOW: 399>, <TokenType.SOME: 401>, <TokenType.STORAGE_INTEGRATION: 406>, <TokenType.STRAIGHT_JOIN: 407>, <TokenType.STRUCT: 408>, <TokenType.TAG: 411>, <TokenType.TEMPORARY: 412>, <TokenType.TOP: 413>, <TokenType.TRUE: 415>, <TokenType.TRUNCATE: 416>, <TokenType.TRIGGER: 417>, <TokenType.TYPE: 418>, <TokenType.UNNEST: 422>, <TokenType.UNPIVOT: 423>, <TokenType.UPDATE: 424>, <TokenType.USE: 425>, <TokenType.VIEW: 429>, <TokenType.SEMANTIC_VIEW: 430>, <TokenType.VOLATILE: 431>, <TokenType.WINDOW: 435>, <TokenType.UNIQUE: 437>, <TokenType.SINK: 442>, <TokenType.SOURCE: 443>, <TokenType.ANALYZE: 444>, <TokenType.NAMESPACE: 445>, <TokenType.EXPORT: 446>}
QUERY_MODIFIER_PARSERS =
{<TokenType.MATCH_RECOGNIZE: 330>: <function Parser.<lambda>>, <TokenType.PREWHERE: 366>: <function Parser.<lambda>>, <TokenType.WHERE: 434>: <function Parser.<lambda>>, <TokenType.GROUP_BY: 294>: <function Parser.<lambda>>, <TokenType.HAVING: 296>: <function Parser.<lambda>>, <TokenType.QUALIFY: 373>: <function Parser.<lambda>>, <TokenType.WINDOW: 435>: <function Parser.<lambda>>, <TokenType.ORDER_BY: 345>: <function Parser.<lambda>>, <TokenType.LIMIT: 323>: <function Parser.<lambda>>, <TokenType.FETCH: 277>: <function Parser.<lambda>>, <TokenType.OFFSET: 341>: <function Parser.<lambda>>, <TokenType.FOR: 283>: <function Parser.<lambda>>, <TokenType.LOCK: 326>: <function Parser.<lambda>>, <TokenType.TABLE_SAMPLE: 410>: <function Parser.<lambda>>, <TokenType.USING: 426>: <function Parser.<lambda>>, <TokenType.CLUSTER_BY: 237>: <function Parser.<lambda>>, <TokenType.DISTRIBUTE_BY: 267>: <function Parser.<lambda>>, <TokenType.SORT_BY: 402>: <function Parser.<lambda>>, <TokenType.CONNECT_BY: 243>: <function Parser.<lambda>>, <TokenType.SETTINGS: 398>: <function ClickHouseParser.<lambda>>, <TokenType.FORMAT: 286>: <function ClickHouseParser.<lambda>>}
CONSTRAINT_PARSERS =
{'AUTOINCREMENT': <function Parser.<lambda>>, 'AUTO_INCREMENT': <function Parser.<lambda>>, 'CASESPECIFIC': <function Parser.<lambda>>, 'CHECK': <function Parser.<lambda>>, 'COLLATE': <function Parser.<lambda>>, 'COMMENT': <function Parser.<lambda>>, 'COMPRESS': <function Parser.<lambda>>, 'CLUSTERED': <function Parser.<lambda>>, 'NONCLUSTERED': <function Parser.<lambda>>, 'DEFAULT': <function Parser.<lambda>>, 'ENCODE': <function Parser.<lambda>>, 'EPHEMERAL': <function Parser.<lambda>>, 'EXCLUDE': <function Parser.<lambda>>, 'FOREIGN KEY': <function Parser.<lambda>>, 'FORMAT': <function Parser.<lambda>>, 'GENERATED': <function Parser.<lambda>>, 'IDENTITY': <function Parser.<lambda>>, 'INLINE': <function Parser.<lambda>>, 'LIKE': <function Parser.<lambda>>, 'NOT': <function Parser.<lambda>>, 'NULL': <function Parser.<lambda>>, 'ON': <function Parser.<lambda>>, 'PATH': <function Parser.<lambda>>, 'PERIOD': <function Parser.<lambda>>, 'PRIMARY KEY': <function Parser.<lambda>>, 'REFERENCES': <function Parser.<lambda>>, 'TITLE': <function Parser.<lambda>>, 'TTL': <function Parser.<lambda>>, 'UNIQUE': <function Parser.<lambda>>, 'UPPERCASE': <function Parser.<lambda>>, 'WITH': <function Parser.<lambda>>, 'BUCKET': <function Parser.<lambda>>, 'TRUNCATE': <function Parser.<lambda>>, 'INDEX': <function ClickHouseParser.<lambda>>, 'CODEC': <function ClickHouseParser.<lambda>>, 'ASSUME': <function ClickHouseParser.<lambda>>}
ALTER_PARSERS =
{'ADD': <function Parser.<lambda>>, 'AS': <function Parser.<lambda>>, 'ALTER': <function Parser.<lambda>>, 'CLUSTER BY': <function Parser.<lambda>>, 'DELETE': <function Parser.<lambda>>, 'DROP': <function Parser.<lambda>>, 'RENAME': <function Parser.<lambda>>, 'SET': <function Parser.<lambda>>, 'SWAP': <function Parser.<lambda>>, 'MODIFY': <function ClickHouseParser.<lambda>>, 'REPLACE': <function ClickHouseParser.<lambda>>}
SCHEMA_UNNAMED_CONSTRAINTS =
{'FOREIGN KEY', 'UNIQUE', 'PRIMARY KEY', 'EXCLUDE', 'PERIOD', 'BUCKET', 'LIKE', 'TRUNCATE', 'INDEX'}
PLACEHOLDER_PARSERS =
{<TokenType.PLACEHOLDER: 361>: <function Parser.<lambda>>, <TokenType.PARAMETER: 58>: <function Parser.<lambda>>, <TokenType.COLON: 11>: <function Parser.<lambda>>, <TokenType.L_BRACE: 5>: <function ClickHouseParser.<lambda>>}
STATEMENT_PARSERS =
{<TokenType.ALTER: 221>: <function Parser.<lambda>>, <TokenType.ANALYZE: 444>: <function Parser.<lambda>>, <TokenType.BEGIN: 231>: <function Parser.<lambda>>, <TokenType.CACHE: 234>: <function Parser.<lambda>>, <TokenType.COMMENT: 240>: <function Parser.<lambda>>, <TokenType.COMMIT: 241>: <function Parser.<lambda>>, <TokenType.COPY: 245>: <function Parser.<lambda>>, <TokenType.CREATE: 246>: <function Parser.<lambda>>, <TokenType.DECLARE: 258>: <function Parser.<lambda>>, <TokenType.DELETE: 260>: <function Parser.<lambda>>, <TokenType.DESC: 261>: <function Parser.<lambda>>, <TokenType.DESCRIBE: 262>: <function Parser.<lambda>>, <TokenType.DROP: 269>: <function Parser.<lambda>>, <TokenType.GRANT: 293>: <function Parser.<lambda>>, <TokenType.REVOKE: 382>: <function Parser.<lambda>>, <TokenType.INSERT: 304>: <function Parser.<lambda>>, <TokenType.KILL: 318>: <function Parser.<lambda>>, <TokenType.LOAD: 325>: <function Parser.<lambda>>, <TokenType.MERGE: 332>: <function Parser.<lambda>>, <TokenType.PIVOT: 360>: <function Parser.<lambda>>, <TokenType.PRAGMA: 365>: <function Parser.<lambda>>, <TokenType.REFRESH: 378>: <function Parser.<lambda>>, <TokenType.ROLLBACK: 387>: <function Parser.<lambda>>, <TokenType.SET: 397>: <function Parser.<lambda>>, <TokenType.TRUNCATE: 416>: <function Parser.<lambda>>, <TokenType.UNCACHE: 419>: <function Parser.<lambda>>, <TokenType.UNPIVOT: 423>: <function Parser.<lambda>>, <TokenType.UPDATE: 424>: <function Parser.<lambda>>, <TokenType.USE: 425>: <function Parser.<lambda>>, <TokenType.SEMICOLON: 19>: <function Parser.<lambda>>, <TokenType.DETACH: 263>: <function ClickHouseParser.<lambda>>}
Inherited Members
- sqlglot.parser.Parser
- Parser
- STRUCT_TYPE_TOKENS
- NESTED_TYPE_TOKENS
- ENUM_TYPE_TOKENS
- AGGREGATE_TYPE_TOKENS
- TYPE_TOKENS
- SIGNED_TO_UNSIGNED_TYPE_TOKEN
- SUBQUERY_PREDICATES
- SUBQUERY_TOKENS
- TEXT_MATCH_EXCLUDED_TOKENS
- DB_CREATABLES
- CREATABLES
- TRIGGER_EVENTS
- ALTERABLES
- COLON_PLACEHOLDER_TOKENS
- ARRAY_CONSTRUCTORS
- COMMENT_TABLE_ALIAS_TOKENS
- UPDATE_ALIAS_TOKENS
- TRIM_TYPES
- IDENTIFIER_TOKENS
- BRACKETS
- COLUMN_POSTFIX_TOKENS
- TABLE_POSTFIX_TOKENS
- CONJUNCTION
- ASSIGNMENT
- DISJUNCTION
- EQUALITY
- COMPARISON
- BITWISE
- TERM
- FACTOR
- EXPONENT
- TIMES
- TIMESTAMPS
- SET_OPERATIONS
- JOIN_METHODS
- JOIN_SIDES
- JOIN_HINTS
- SUPPORTS_DIRECTED_JOIN
- TABLE_TERMINATORS
- LAMBDAS
- TYPED_LAMBDA_ARGS
- LAMBDA_ARG_TERMINATORS
- JSON_OPERATORS
- CAST_COLUMN_OPERATORS
- EXPRESSION_PARSERS
- UNARY_PARSERS
- STRING_PARSERS
- NUMERIC_PARSERS
- PRIMARY_PARSERS
- PIPE_SYNTAX_TRANSFORM_PARSERS
- ALTER_ALTER_PARSERS
- RESERVED_CONSTRAINT_KINDS
- INVALID_FUNC_NAME_TOKENS
- FUNCTIONS_WITH_ALIASED_ARGS
- KEY_VALUE_DEFINITIONS
- QUERY_MODIFIER_TOKENS
- SET_PARSERS
- SHOW_PARSERS
- TYPE_LITERAL_PARSERS
- TYPE_CONVERTERS
- DDL_SELECT_TOKENS
- PRE_VOLATILE_TOKENS
- TRANSACTION_KIND
- TRANSACTION_CHARACTERISTICS
- CONFLICT_ACTIONS
- TRIGGER_TIMING
- TRIGGER_DEFERRABLE
- CREATE_SEQUENCE
- ISOLATED_LOADING_OPTIONS
- USABLES
- CAST_ACTIONS
- SCHEMA_BINDING_OPTIONS
- PROCEDURE_OPTIONS
- EXECUTE_AS_OPTIONS
- KEY_CONSTRAINT_OPTIONS
- WINDOW_EXCLUDE_OPTIONS
- INSERT_ALTERNATIVES
- CLONE_KEYWORDS
- VERSION_PHRASES
- HISTORICAL_DATA_PREFIX
- HISTORICAL_DATA_KIND
- OPCLASS_FOLLOW_KEYWORDS
- OPTYPE_FOLLOW_TOKENS
- TABLE_INDEX_HINT_TOKENS
- VIEW_ATTRIBUTES
- WINDOW_ALIAS_TOKENS
- WINDOW_BEFORE_PAREN_TOKENS
- WINDOW_SIDES
- JSON_KEY_VALUE_SEPARATOR_TOKENS
- FETCH_TOKENS
- ADD_CONSTRAINT_TOKENS
- ADD_CONSTRAINT_KEYWORDS
- DISTINCT_TOKENS
- UNNEST_OFFSET_ALIAS_TOKENS
- SELECT_START_TOKENS
- COPY_INTO_VARLEN_OPTIONS
- IS_PREDICATE_TOKENS
- IS_JSON_PREDICATE_KIND
- ODBC_DATETIME_LITERALS
- ON_CONDITION_TOKENS
- PRIVILEGE_FOLLOW_TOKENS
- DESCRIBE_STYLES
- SET_ASSIGNMENT_DELIMITERS
- ANALYZE_STYLES
- ANALYZE_EXPRESSION_PARSERS
- PARTITION_KEYWORDS
- AMBIGUOUS_ALIAS_TOKENS
- OPERATION_MODIFIERS
- RECURSIVE_CTE_SEARCH_KIND
- SECURITY_PROPERTY_KEYWORDS
- MODIFIABLES
- STRICT_CAST
- PREFIXED_PIVOT_COLUMNS
- IDENTIFY_PIVOT_STRINGS
- UNPIVOT_VALUE_COLUMNS_FIRST
- PIVOT_COLUMN_NAMING
- TABLESAMPLE_CSV
- DEFAULT_SAMPLING_METHOD
- SET_REQUIRES_ASSIGNMENT_DELIMITER
- TRIM_PATTERN_FIRST
- STRING_ALIASES
- MODIFIERS_ATTACHED_TO_SET_OP
- NO_PAREN_IF_COMMANDS
- JSON_ARROWS_REQUIRE_JSON_TYPE
- COLON_IS_VARIANT_EXTRACT
- COLON_CHAIN_IS_SINGLE_EXTRACT
- VALUES_FOLLOWED_BY_PAREN
- SUPPORTS_IMPLICIT_UNNEST
- SUPPORTS_TABLE_QUERY
- SUPPORTS_DIGIT_PREFIXED_FIELD_NAMES
- SUPPORTS_PARTITION_SELECTION
- WRAPPED_TRANSFORM_COLUMN_CONSTRAINT
- ALTER_RENAME_REQUIRES_COLUMN
- ALTER_DROP_REQUIRES_COLUMN
- ALTER_TABLE_PARTITIONS
- ALTER_TABLE_MIXED_ACTIONS
- ALTER_TABLE_REQUIRES_ACTION
- ALTER_COLUMN_TYPE_REQUIRES_KEYWORD
- ZONE_AWARE_TIMESTAMP_CONSTRUCTOR
- MAP_KEYS_ARE_ARBITRARY_EXPRESSIONS
- JSON_EXTRACT_REQUIRES_JSON_EXPRESSION
- ADD_JOIN_ON_TRUE
- SUPPORTS_OMITTED_INTERVAL_SPAN_UNIT
- ADJACENT_STRINGS_CANNOT_BE_CONNECTED
- SUPPORTS_NTH_VALUE_FROM_MODIFIER
- QUOTED_TYPES_TO_PRESERVE
- SHOW_TRIE
- SET_TRIE
- error_level
- error_message_context
- max_errors
- max_nodes
- dialect
- sql
- errors
- reset
- raise_error
- validate_expression
- parse
- parse_into
- check_errors
- expression
- parse_set_operation
- build_cast