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 # Tested in ClickHouse's playground, it seems that the following two queries do the same thing 266 # * select x from t1 union all select x from t2 limit 1; 267 # * select x from t1 union all (select x from t2 limit 1); 268 MODIFIERS_ATTACHED_TO_SET_OP = False 269 INTERVAL_SPANS = False 270 OPTIONAL_ALIAS_TOKEN_CTE = False 271 JOINS_HAVE_EQUAL_PRECEDENCE = True 272 273 FUNCTIONS = { 274 **{ 275 k: v 276 for k, v in parser.Parser.FUNCTIONS.items() 277 if k not in ("TRANSFORM", "APPROX_TOP_SUM") 278 }, 279 **{ 280 regexp_extract: lambda args: exp.RegexpExtract( 281 this=seq_get(args, 0), 282 expression=seq_get(args, 1), 283 group=seq_get(args, 2), 284 ) 285 for regexp_extract in ("REGEXPEXTRACT", "REGEXP_EXTRACT", "REGEXP_SUBSTR") 286 }, 287 **{f"TOSTARTOF{unit}": _build_timestamp_trunc(unit=unit) for unit in TIMESTAMP_TRUNC_UNITS}, 288 "ANY": exp.AnyValue.from_arg_list, 289 "ARRAYCOMPACT": exp.ArrayCompact.from_arg_list, 290 "ARRAYCONCAT": exp.ArrayConcat.from_arg_list, 291 "ARRAYDISTINCT": exp.ArrayDistinct.from_arg_list, 292 "ARRAYEXCEPT": exp.ArrayExcept.from_arg_list, 293 "ARRAYSUM": exp.ArraySum.from_arg_list, 294 "ARRAYMAX": exp.ArrayMax.from_arg_list, 295 "ARRAYMIN": exp.ArrayMin.from_arg_list, 296 "ARRAYREVERSE": exp.ArrayReverse.from_arg_list, 297 "ARRAYSLICE": exp.ArraySlice.from_arg_list, 298 "ARRAYFILTER": _build_array_lambda_func(exp.ArrayFilter, "arrayFilter"), 299 "ARRAYMAP": _build_array_lambda_func(exp.Transform, "arrayMap"), 300 "CURRENTDATABASE": exp.CurrentDatabase.from_arg_list, 301 "CURRENTSCHEMAS": exp.CurrentSchemas.from_arg_list, 302 "COUNTIF": _build_count_if, 303 "COUNTMATCHES": exp.RegexpCount.from_arg_list, 304 "CITYHASH64": exp.CityHash64.from_arg_list, 305 "COSINEDISTANCE": exp.CosineDistance.from_arg_list, 306 "VERSION": exp.CurrentVersion.from_arg_list, 307 "DATE_ADD": build_date_delta(exp.DateAdd, default_unit=None), 308 "DATEADD": build_date_delta(exp.DateAdd, default_unit=None), 309 "DATE_DIFF": build_date_delta(exp.DateDiff, default_unit=None, supports_timezone=True), 310 "DATEDIFF": build_date_delta(exp.DateDiff, default_unit=None, supports_timezone=True), 311 "DATE_FORMAT": _build_datetime_format(exp.TimeToStr), 312 "DATE_SUB": build_date_delta(exp.DateSub, default_unit=None), 313 "DATESUB": build_date_delta(exp.DateSub, default_unit=None), 314 "DATETRUNC": exp.DateTrunc.from_arg_list, 315 "FORMATDATETIME": _build_datetime_format(exp.TimeToStr), 316 "GROUPBITAND": exp.BitwiseAndAgg.from_arg_list, 317 "GROUPBITOR": exp.BitwiseOrAgg.from_arg_list, 318 "GROUPBITXOR": exp.BitwiseXorAgg.from_arg_list, 319 "HAS": exp.ArrayContains.from_arg_list, 320 "ILIKE": build_like(exp.ILike), 321 "ISINFINITE": exp.IsInf.from_arg_list, 322 "JSONEXTRACTRAW": build_json_extract_path( 323 exp.JSONExtract, zero_based_indexing=False, arrow_req_json_type=True 324 ), 325 "JSONEXTRACTSTRING": build_json_extract_path( 326 exp.JSONExtractScalar, zero_based_indexing=False, arrow_req_json_type=True 327 ), 328 "LENGTH": lambda args: exp.Length(this=seq_get(args, 0), binary=True), 329 "LIKE": build_like(exp.Like), 330 "L2Distance": exp.EuclideanDistance.from_arg_list, 331 "MAP": parser.build_var_map, 332 "MATCH": exp.RegexpLike.from_arg_list, 333 "NOTLIKE": build_like(exp.Like, not_like=True), 334 "PARSEDATETIME": _build_datetime_format(exp.ParseDatetime), 335 "RANDCANONICAL": exp.Rand.from_arg_list, 336 "STR_TO_DATE": _build_str_to_date, 337 "TIMESTAMP_SUB": build_date_delta(exp.TimestampSub, default_unit=None), 338 "TIMESTAMPSUB": build_date_delta(exp.TimestampSub, default_unit=None), 339 "TIMESTAMP_ADD": build_date_delta(exp.TimestampAdd, default_unit=None), 340 "TIMESTAMPADD": build_date_delta(exp.TimestampAdd, default_unit=None), 341 "TODAYOFWEEK": _build_without_extra_args(exp.DayOfWeekIso, "toDayOfWeek"), 342 "TOISOWEEK": _build_without_extra_args(exp.WeekOfYear, "toISOWeek"), 343 "TOISOYEAR": _build_without_extra_args(exp.YearOfWeekIso, "toISOYear"), 344 "TOMONDAY": _build_timestamp_trunc("WEEK"), 345 "UNIQ": exp.ApproxDistinct.from_arg_list, 346 "MD5": exp.MD5Digest.from_arg_list, 347 "SHA256": lambda args: exp.SHA2(this=seq_get(args, 0), length=exp.Literal.number(256)), 348 "SHA512": lambda args: exp.SHA2(this=seq_get(args, 0), length=exp.Literal.number(512)), 349 "SPLITBYCHAR": _build_split_by_char, 350 "SPLITBYREGEXP": _build_split(exp.RegexpSplit), 351 "SPLITBYSTRING": _build_split(exp.Split), 352 "SUBSTRINGINDEX": exp.SubstringIndex.from_arg_list, 353 "TOTYPENAME": exp.Typeof.from_arg_list, 354 "TRIMBOTH": exp.Trim.from_arg_list, 355 "TRIMLEFT": parser.build_trim, 356 "TRIMRIGHT": lambda args: parser.build_trim(args, is_left=False), 357 "EDITDISTANCE": exp.Levenshtein.from_arg_list, 358 "JAROWINKLERSIMILARITY": exp.JarowinklerSimilarity.from_arg_list, 359 "LEVENSHTEINDISTANCE": exp.Levenshtein.from_arg_list, 360 "UTCTIMESTAMP": exp.UtcTimestamp.from_arg_list, 361 } 362 363 AGG_FUNCTIONS: t.ClassVar = _AGG_FUNCTIONS 364 AGG_FUNCTIONS_SUFFIXES: t.ClassVar = _AGG_FUNCTIONS_SUFFIXES 365 366 FUNC_TOKENS = { 367 *parser.Parser.FUNC_TOKENS, 368 TokenType.AND, 369 TokenType.FILE, 370 TokenType.OR, 371 TokenType.PASTE, 372 TokenType.SET, 373 TokenType.VIEW, 374 } 375 376 RESERVED_TOKENS = parser.Parser.RESERVED_TOKENS - {TokenType.SELECT} 377 378 ID_VAR_TOKENS = { 379 *parser.Parser.ID_VAR_TOKENS, 380 TokenType.LIKE, 381 } 382 383 AGG_FUNC_MAPPING: t.ClassVar = _AGG_FUNC_MAPPING 384 385 @classmethod 386 def _resolve_clickhouse_agg(cls, name: str) -> tuple[str, Sequence[str]] | None: 387 # ClickHouse allows chaining multiple combinators on aggregate functions. 388 # See https://clickhouse.com/docs/sql-reference/aggregate-functions/combinators 389 # N.B. this resolution allows any suffix stack, including ones that ClickHouse rejects 390 # syntactically such as sumMergeMerge (due to repeated adjacent suffixes) 391 392 # Until we are able to identify a 1- or 0-suffix aggregate function by name, 393 # repeatedly strip and queue suffixes (checking longer suffixes first, see comment on 394 # AGG_FUNCTIONS_SUFFIXES_SORTED). This loop only runs for 2 or more suffixes, 395 # as AGG_FUNC_MAPPING memoizes all 0- and 1-suffix 396 accumulated_suffixes: deque[str] = deque() 397 while (parts := _AGG_FUNC_MAPPING.get(name)) is None: 398 for suffix in _AGG_FUNCTIONS_SUFFIXES: 399 if name.endswith(suffix) and len(name) != len(suffix): 400 accumulated_suffixes.appendleft(suffix) 401 name = name[: -len(suffix)] 402 break 403 else: 404 return None 405 406 # We now have a 0- or 1-suffix aggregate 407 agg_func_name, inner_suffix = parts 408 if inner_suffix: 409 # this is a 1-suffix aggregate (either naturally or via repeated suffix 410 # stripping). prepend the innermost suffix. 411 accumulated_suffixes.appendleft(inner_suffix) 412 413 return (agg_func_name, accumulated_suffixes) 414 415 FUNCTION_PARSERS = { 416 **{k: v for k, v in parser.Parser.FUNCTION_PARSERS.items() if k != "MATCH"}, 417 "ARRAYJOIN": lambda self: self.expression(exp.Explode(this=self._parse_expression())), 418 "GROUPCONCAT": lambda self: self._parse_group_concat(), 419 "QUANTILE": lambda self: self._parse_quantile(), 420 "MEDIAN": lambda self: self._parse_quantile(), 421 "COLUMNS": lambda self: self._parse_columns(), 422 "TUPLE": lambda self: exp.Struct.from_arg_list(self._parse_function_args(alias=True)), 423 "AND": lambda self: self._parse_connector_function(exp.and_), 424 "OR": lambda self: self._parse_connector_function(exp.or_), 425 "XOR": lambda self: exp.xor(*self._parse_function_args(alias=False)), 426 "VIEW": lambda self: self.expression( 427 exp.Anonymous(this="view", expressions=[self._parse_select()]) 428 ), 429 } 430 431 PROPERTY_PARSERS = { 432 **{k: v for k, v in parser.Parser.PROPERTY_PARSERS.items() if k != "DYNAMIC"}, 433 "ENGINE": lambda self: self._parse_engine_property(), 434 "REFRESH": lambda self: self._parse_auto_refresh_property(), 435 "UUID": lambda self: self.expression(exp.UuidProperty(this=self._parse_string())), 436 } 437 438 NO_PAREN_FUNCTION_PARSERS = { 439 k: v for k, v in parser.Parser.NO_PAREN_FUNCTION_PARSERS.items() if k != "ANY" 440 } 441 442 NO_PAREN_FUNCTIONS = { 443 k: v 444 for k, v in parser.Parser.NO_PAREN_FUNCTIONS.items() 445 if k != TokenType.CURRENT_TIMESTAMP 446 } 447 448 RANGE_PARSERS = { 449 **parser.Parser.RANGE_PARSERS, 450 TokenType.GLOBAL: lambda self, this: self._parse_global_in(this), 451 } 452 453 COLUMN_OPERATORS = { 454 **{k: v for k, v in parser.Parser.COLUMN_OPERATORS.items() if k != TokenType.PLACEHOLDER}, 455 TokenType.DOTCARET: lambda self, this, field: self.expression( 456 exp.NestedJSONSelect(this=this, expression=field) 457 ), 458 } 459 460 JOIN_KINDS = { 461 *parser.Parser.JOIN_KINDS, 462 TokenType.ALL, 463 TokenType.ANY, 464 TokenType.ASOF, 465 TokenType.ARRAY, 466 TokenType.PASTE, 467 } 468 469 TABLE_ALIAS_TOKENS = parser.Parser.TABLE_ALIAS_TOKENS - { 470 TokenType.ALL, 471 TokenType.ANY, 472 TokenType.ARRAY, 473 TokenType.ASOF, 474 TokenType.FINAL, 475 TokenType.FORMAT, 476 TokenType.PASTE, 477 TokenType.SETTINGS, 478 } 479 480 ALIAS_TOKENS = parser.Parser.ALIAS_TOKENS - { 481 TokenType.FORMAT, 482 TokenType.SETTINGS, 483 } 484 485 LOG_DEFAULTS_TO_LN = True 486 487 QUERY_MODIFIER_PARSERS = { 488 **parser.Parser.QUERY_MODIFIER_PARSERS, 489 TokenType.SETTINGS: lambda self: ( 490 "settings", 491 self._advance() or self._parse_csv(self._parse_assignment), 492 ), 493 TokenType.FORMAT: lambda self: ("format", self._advance() or self._parse_id_var()), 494 } 495 496 CONSTRAINT_PARSERS = { 497 **parser.Parser.CONSTRAINT_PARSERS, 498 "INDEX": lambda self: self._parse_index_constraint(), 499 "CODEC": lambda self: self._parse_compress(), 500 "ASSUME": lambda self: self._parse_assume_constraint(), 501 } 502 503 ALTER_PARSERS = { 504 **parser.Parser.ALTER_PARSERS, 505 "MODIFY": lambda self: self._parse_alter_table_alter(), 506 "REPLACE": lambda self: self._parse_alter_table_replace(), 507 } 508 509 SCHEMA_UNNAMED_CONSTRAINTS = { 510 *parser.Parser.SCHEMA_UNNAMED_CONSTRAINTS, 511 "INDEX", 512 } - {"CHECK"} 513 514 PLACEHOLDER_PARSERS = { 515 **parser.Parser.PLACEHOLDER_PARSERS, 516 TokenType.L_BRACE: lambda self: self._parse_query_parameter(), 517 } 518 519 STATEMENT_PARSERS = { 520 **parser.Parser.STATEMENT_PARSERS, 521 TokenType.DETACH: lambda self: self._parse_detach(), 522 } 523 524 def _parse_wrapped_select_or_assignment(self) -> exp.Expr | None: 525 return self._parse_wrapped( 526 lambda: self._parse_select() or self._parse_assignment(), optional=True 527 ) 528 529 def _parse_check_constraint(self) -> exp.CheckColumnConstraint | None: 530 return self.expression( 531 exp.CheckColumnConstraint(this=self._parse_wrapped_select_or_assignment()) 532 ) 533 534 def _parse_assume_constraint(self) -> exp.AssumeColumnConstraint | None: 535 return self.expression( 536 exp.AssumeColumnConstraint(this=self._parse_wrapped_select_or_assignment()) 537 ) 538 539 def _parse_engine_property(self) -> exp.EngineProperty: 540 self._match(TokenType.EQ) 541 return self.expression( 542 exp.EngineProperty(this=self._parse_field(any_token=True, anonymous_func=True)) 543 ) 544 545 # https://clickhouse.com/docs/en/sql-reference/statements/create/function 546 def _parse_user_defined_function_expression(self) -> exp.Expr | None: 547 return self._parse_lambda() 548 549 def _parse_types( 550 self, 551 check_func: bool = False, 552 schema: bool = False, 553 allow_identifiers: bool = True, 554 with_collation: bool = False, 555 ) -> exp.Expr | None: 556 dtype = super()._parse_types( 557 check_func=check_func, 558 schema=schema, 559 allow_identifiers=allow_identifiers, 560 with_collation=with_collation, 561 ) 562 if isinstance(dtype, exp.DataType) and dtype.args.get("nullable") is not True: 563 # Mark every type as non-nullable which is ClickHouse's default, unless it's 564 # already marked as nullable. This marker helps us transpile types from other 565 # dialects to ClickHouse, so that we can e.g. produce `CAST(x AS Nullable(String))` 566 # from `CAST(x AS TEXT)`. If there is a `NULL` value in `x`, the former would 567 # fail in ClickHouse without the `Nullable` type constructor. 568 dtype.set("nullable", False) 569 570 return dtype 571 572 def _parse_extract(self) -> exp.Extract | exp.Anonymous: 573 index = self._index 574 this = self._parse_bitwise() 575 if self._match(TokenType.FROM): 576 self._retreat(index) 577 return super()._parse_extract() 578 579 # We return Anonymous here because extract and regexpExtract have different semantics, 580 # so parsing extract(foo, bar) into RegexpExtract can potentially break queries. E.g., 581 # `extract('foobar', 'b')` works, but ClickHouse crashes for `regexpExtract('foobar', 'b')`. 582 # 583 # TODO: can we somehow convert the former into an equivalent `regexpExtract` call? 584 self._match(TokenType.COMMA) 585 return self.expression( 586 exp.Anonymous(this="extract", expressions=[this, self._parse_bitwise()]) 587 ) 588 589 def _parse_assignment(self) -> exp.Expr | None: 590 this = super()._parse_assignment() 591 592 if self._match(TokenType.PLACEHOLDER): 593 return self.expression( 594 exp.If( 595 this=this, 596 true=self._parse_assignment(), 597 false=self._match(TokenType.COLON) and self._parse_assignment(), 598 ) 599 ) 600 601 return this 602 603 def _parse_query_parameter(self) -> exp.Expr | None: 604 """ 605 Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier} 606 https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters 607 """ 608 index = self._index 609 610 this = self._parse_id_var() 611 self._match(TokenType.COLON) 612 kind = self._parse_types(check_func=False, allow_identifiers=False) or ( 613 self._match_text_seq("IDENTIFIER") and "Identifier" 614 ) 615 616 if not kind: 617 self._retreat(index) 618 return None 619 elif not self._match(TokenType.R_BRACE): 620 self.raise_error("Expecting }") 621 622 if isinstance(this, exp.Identifier) and not this.quoted: 623 this = exp.var(this.name) 624 625 return self.expression(exp.Placeholder(this=this, kind=kind)) 626 627 def _parse_bracket(self, this: exp.Expr | None = None) -> exp.Expr | None: 628 if this: 629 bracket_json_type = None 630 631 while self._match_pair(TokenType.L_BRACKET, TokenType.R_BRACKET): 632 bracket_json_type = exp.DataType( 633 this=exp.DType.ARRAY, 634 expressions=[ 635 bracket_json_type 636 or exp.DType.JSON.into_expr(dialect=self.dialect, nullable=False) 637 ], 638 nested=True, 639 ) 640 641 if bracket_json_type: 642 return self.expression(exp.JSONCast(this=this, to=bracket_json_type)) 643 644 l_brace = self._match(TokenType.L_BRACE, advance=False) 645 bracket = super()._parse_bracket(this) 646 647 if l_brace and isinstance(bracket, exp.Struct): 648 varmap = exp.VarMap(keys=exp.Array(), values=exp.Array()) 649 for expression in bracket.expressions: 650 if not isinstance(expression, exp.PropertyEQ): 651 break 652 653 varmap.args["keys"].append("expressions", exp.Literal.string(expression.name)) 654 varmap.args["values"].append("expressions", expression.expression) 655 656 return varmap 657 658 return bracket 659 660 def _parse_global_in(self, this: exp.Expr | None) -> exp.Not | exp.In | None: 661 index = self._index - 1 662 is_negated = self._match(TokenType.NOT) 663 if not self._match(TokenType.IN): 664 self._retreat(index) 665 return None 666 667 in_expr = self._parse_in(this) 668 in_expr.set("is_global", True) 669 return self.expression(exp.Not(this=in_expr)) if is_negated else in_expr 670 671 def _parse_table( 672 self, 673 schema: bool = False, 674 joins: bool = False, 675 alias_tokens: Collection[TokenType] | None = None, 676 parse_bracket: bool = False, 677 is_db_reference: bool = False, 678 parse_partition: bool = False, 679 consume_pipe: bool = False, 680 ) -> exp.Expr | None: 681 this = super()._parse_table( 682 schema=schema, 683 joins=joins, 684 alias_tokens=alias_tokens, 685 parse_bracket=parse_bracket, 686 is_db_reference=is_db_reference, 687 ) 688 689 if isinstance(this, exp.Table): 690 inner = this.this 691 alias = this.args.get("alias") 692 693 if isinstance(inner, exp.GenerateSeries) and alias and not alias.columns: 694 alias.set("columns", [exp.to_identifier("generate_series")]) 695 696 if self._match(TokenType.FINAL): 697 this = self.expression(exp.Final(this=this)) 698 699 return this 700 701 def _parse_position(self, haystack_first: bool = False) -> exp.StrPosition: 702 return super()._parse_position(haystack_first=True) 703 704 # https://clickhouse.com/docs/en/sql-reference/statements/select/with/ 705 def _parse_cte(self) -> exp.CTE | exp.FunctionSpecification | None: 706 # WITH <identifier> AS <subquery expression> 707 cte: exp.CTE | exp.FunctionSpecification | None = self._try_parse(super()._parse_cte) 708 709 if not cte: 710 # WITH <expression> AS <identifier> 711 cte = self.expression( 712 exp.CTE(this=self._parse_assignment(), alias=self._parse_table_alias(), scalar=True) 713 ) 714 715 return cte 716 717 def _parse_join_parts( 718 self, 719 ) -> tuple[Token | None, Token | None, Token | None]: 720 is_global = self._prev if self._match(TokenType.GLOBAL) else None 721 722 kind_pre = self._prev if self._match_set(self.JOIN_KINDS) else None 723 side = self._prev if self._match_set(self.JOIN_SIDES) else None 724 kind = self._prev if self._match_set(self.JOIN_KINDS) else None 725 726 return is_global, side or kind, kind_pre or kind 727 728 def _parse_join( 729 self, 730 skip_join_token: bool = False, 731 parse_bracket: bool = False, 732 alias_tokens: t.Collection[TokenType] | None = None, 733 ) -> exp.Join | None: 734 join = super()._parse_join( 735 skip_join_token=skip_join_token, parse_bracket=True, alias_tokens=alias_tokens 736 ) 737 if join: 738 method = join.args.get("method") 739 join.set("method", None) 740 join.set("global_", method) 741 742 # tbl ARRAY JOIN arr <-- this should be a `Column` reference, not a `Table` 743 # https://clickhouse.com/docs/en/sql-reference/statements/select/array-join 744 if join.kind == "ARRAY": 745 for table in join.find_all(exp.Table): 746 table.replace(table.to_column()) 747 748 return join 749 750 def _parse_function( 751 self, 752 functions: dict[str, t.Callable] | None = None, 753 anonymous: bool = False, 754 optional_parens: bool = True, 755 any_token: bool = False, 756 ) -> exp.Expr | None: 757 expr = super()._parse_function( 758 functions=functions, 759 anonymous=anonymous, 760 optional_parens=optional_parens, 761 any_token=any_token, 762 ) 763 764 func = expr.this if isinstance(expr, exp.Window) else expr 765 766 # Aggregate functions can be split in 2 parts: <func_name><suffix[es]> 767 parts = self._resolve_clickhouse_agg(func.name) if isinstance(func, exp.Anonymous) else None 768 769 if parts: 770 anon_func: exp.Anonymous = t.cast(exp.Anonymous, func) 771 params = self._parse_func_params(anon_func) 772 773 if len(parts[1]) > 0: 774 exp_class: Type[exp.Expr] = ( 775 exp.CombinedParameterizedAgg if params else exp.CombinedAggFunc 776 ) 777 else: 778 exp_class = exp.ParameterizedAgg if params else exp.AnonymousAggFunc 779 780 instance = exp_class(this=anon_func.this, expressions=anon_func.expressions) 781 if params: 782 instance.set("params", params) 783 func = self.expression(instance) 784 785 if isinstance(expr, exp.Window): 786 # The window's func was parsed as Anonymous in base parser, fix its 787 # type to be ClickHouse style CombinedAnonymousAggFunc / AnonymousAggFunc 788 expr.set("this", func) 789 elif params: 790 # Params have blocked super()._parse_function() from parsing the following window 791 # (if that exists) as they're standing between the function call and the window spec 792 expr = self._parse_window(func) 793 else: 794 expr = func 795 796 return expr 797 798 def _parse_func_params(self, this: exp.Func | None = None) -> list[exp.Expr] | None: 799 if self._match_pair(TokenType.R_PAREN, TokenType.L_PAREN): 800 return self._parse_csv(self._parse_lambda) 801 802 if self._match(TokenType.L_PAREN): 803 params = self._parse_csv(self._parse_lambda) 804 self._match_r_paren(this) 805 return params 806 807 return None 808 809 def _parse_group_concat(self) -> exp.GroupConcat: 810 args = self._parse_csv(self._parse_lambda) 811 params = self._parse_func_params() 812 813 if params: 814 # groupConcat(sep [, limit])(expr) 815 separator = seq_get(args, 0) 816 limit = seq_get(args, 1) 817 this: exp.Expr | None = seq_get(params, 0) 818 if limit is not None: 819 this = exp.Limit(this=this, expression=limit) 820 return self.expression(exp.GroupConcat(this=this, separator=separator)) 821 822 # groupConcat(expr) 823 return self.expression(exp.GroupConcat(this=seq_get(args, 0))) 824 825 def _parse_quantile(self) -> exp.Quantile: 826 this = self._parse_lambda() 827 params = self._parse_func_params() 828 if params: 829 return self.expression(exp.Quantile(this=params[0], quantile=this)) 830 return self.expression(exp.Quantile(this=this, quantile=exp.Literal.number(0.5))) 831 832 def _parse_wrapped_id_vars(self, optional: bool = False) -> list[exp.Expr]: 833 return super()._parse_wrapped_id_vars(optional=True) 834 835 def _parse_column_def( 836 self, this: exp.Expr | None, computed_column: bool = True 837 ) -> exp.Expr | None: 838 if self._match(TokenType.DOT): 839 return exp.Dot(this=this, expression=self._parse_id_var()) 840 841 return super()._parse_column_def(this, computed_column=computed_column) 842 843 def _parse_primary_key( 844 self, 845 wrapped_optional: bool = False, 846 in_props: bool = False, 847 named_primary_key: bool = False, 848 ) -> exp.PrimaryKeyColumnConstraint | exp.PrimaryKey: 849 return super()._parse_primary_key( 850 wrapped_optional=wrapped_optional or in_props, 851 in_props=in_props, 852 named_primary_key=named_primary_key, 853 ) 854 855 def _parse_on_property(self) -> exp.Expr | None: 856 index = self._index 857 if self._match_text_seq("CLUSTER"): 858 this = self._parse_string() or self._parse_id_var() 859 if this: 860 return self.expression(exp.OnCluster(this=this)) 861 else: 862 self._retreat(index) 863 return None 864 865 def _parse_auto_refresh_property(self) -> exp.AutoRefreshProperty | None: 866 index = self._index - 1 867 cadence = self._prev.text.upper() if self._match_texts(("EVERY", "AFTER")) else None 868 interval = ( 869 self._parse_interval(require_interval=False, parse_function_unit=False) 870 if cadence 871 else None 872 ) 873 874 if cadence and not interval: 875 self._retreat(index) 876 return None 877 878 offset = None 879 if self._match_text_seq("OFFSET"): 880 offset = self._parse_interval(require_interval=False, parse_function_unit=False) 881 if not offset: 882 self._retreat(index) 883 return None 884 885 randomize = None 886 if self._match_text_seq("RANDOMIZE", "FOR"): 887 randomize = self._parse_interval(require_interval=False, parse_function_unit=False) 888 if not randomize: 889 self._retreat(index) 890 return None 891 892 dependencies = None 893 if self._match_text_seq("DEPENDS", "ON"): 894 dependencies = self._parse_csv(lambda: self._parse_table_parts(schema=True)) 895 if not dependencies: 896 self._retreat(index) 897 return None 898 899 if not cadence and not dependencies: 900 self._retreat(index) 901 return None 902 903 settings = self._parse_settings_property() if self._match_text_seq("SETTINGS") else None 904 905 return self.expression( 906 exp.AutoRefreshProperty( 907 this=interval, 908 cadence=cadence, 909 offset=offset, 910 randomize=randomize, 911 expressions=dependencies, 912 settings=settings, 913 append=self._match_text_seq("APPEND"), 914 ) 915 ) 916 917 def _parse_index_constraint(self, kind: str | None = None) -> exp.IndexColumnConstraint: 918 # INDEX name1 expr TYPE type1(args) GRANULARITY value 919 this = self._parse_id_var() 920 expression = self._parse_assignment() 921 922 index_type = self._match_text_seq("TYPE") and (self._parse_function() or self._parse_var()) 923 924 granularity = self._match_text_seq("GRANULARITY") and self._parse_term() 925 926 return self.expression( 927 exp.IndexColumnConstraint( 928 this=this, expression=expression, index_type=index_type, granularity=granularity 929 ) 930 ) 931 932 def _parse_partition(self) -> exp.Partition | None: 933 # https://clickhouse.com/docs/en/sql-reference/statements/alter/partition#how-to-set-partition-expression 934 if not self._match(TokenType.PARTITION): 935 return None 936 937 if self._match_text_seq("ID"): 938 # Corresponds to the PARTITION ID <string_value> syntax 939 expressions: list[exp.Expr] = [ 940 self.expression(exp.PartitionId(this=self._parse_string())) 941 ] 942 else: 943 expressions = self._parse_expressions() 944 945 return self.expression(exp.Partition(expressions=expressions)) 946 947 def _parse_alter_table_replace(self) -> exp.Expr | None: 948 partition = self._parse_partition() 949 950 if not partition or not self._match(TokenType.FROM): 951 return None 952 953 return self.expression( 954 exp.ReplacePartition(expression=partition, source=self._parse_table_parts()) 955 ) 956 957 def _parse_alter_table_alter(self) -> exp.Expr | None: 958 # MODIFY forms other than MODIFY COLUMN (SQL SECURITY, ORDER BY, TTL, COMMENT, ...) 959 # are parsed as properties, since ALTER can now reach this path too 960 if self._prev.text.upper() == "MODIFY" and not self._match(TokenType.COLUMN, advance=False): 961 if properties := self._parse_properties(): 962 return self.expression( 963 exp.AlterModifySqlSecurity(expressions=properties.expressions) 964 ) 965 return None 966 967 # https://clickhouse.com/docs/sql-reference/statements/alter/column#modify-column 968 alter = super()._parse_alter_table_alter() 969 return None if self._curr else alter 970 971 def _parse_definer(self) -> exp.DefinerProperty | None: 972 self._match(TokenType.EQ) 973 if self._match(TokenType.CURRENT_USER): 974 return exp.DefinerProperty(this=exp.Var(this=self._prev.text.upper())) 975 return exp.DefinerProperty(this=self._parse_string()) 976 977 def _parse_projection_def(self) -> exp.ProjectionDef | None: 978 if not self._match(TokenType.PROJECTION): 979 return None 980 981 return self.expression( 982 exp.ProjectionDef( 983 this=self._parse_id_var(), expression=self._parse_wrapped(self._parse_statement) 984 ) 985 ) 986 987 def _parse_constraint(self) -> exp.Expr | None: 988 return super()._parse_constraint() or self._parse_projection_def() 989 990 def _parse_alias(self, this: exp.Expr | None, explicit: bool = False) -> exp.Expr | None: 991 # In clickhouse "SELECT <expr> APPLY(...)" is a query modifier, 992 # so "APPLY" shouldn't be parsed as <expr>'s alias. However, "SELECT <expr> apply" is a valid alias 993 if self._match_pair(TokenType.APPLY, TokenType.L_PAREN, advance=False): 994 return this 995 996 return super()._parse_alias(this=this, explicit=explicit) 997 998 def _parse_expression(self) -> exp.Expr | None: 999 this = super()._parse_expression() 1000 1001 # Clickhouse allows "SELECT <expr> [APPLY(func)] [...]]" modifier 1002 while self._match_pair(TokenType.APPLY, TokenType.L_PAREN): 1003 this = exp.Apply(this=this, expression=self._parse_var(any_token=True)) 1004 self._match(TokenType.R_PAREN) 1005 1006 return this 1007 1008 def _parse_columns(self) -> exp.Expr: 1009 this: exp.Expr = self.expression(exp.Columns(this=self._parse_lambda())) 1010 1011 while self._next and self._match_text_seq(")", "APPLY", "("): 1012 self._match(TokenType.R_PAREN) 1013 this = exp.Apply(this=this, expression=self._parse_var(any_token=True)) 1014 return this 1015 1016 def _parse_value(self, values: bool = True) -> exp.Tuple | None: 1017 value = super()._parse_value(values=values) 1018 if not value: 1019 return None 1020 1021 # In Clickhouse "SELECT * FROM VALUES (1, 2, 3)" generates a table with a single column, in contrast 1022 # to other dialects. For this case, we canonicalize the values into a tuple-of-tuples AST if it's not already one. 1023 # In INSERT INTO statements the same clause actually references multiple columns (opposite semantics), 1024 # but the final result is not altered by the extra parentheses. 1025 # Note: Clickhouse allows VALUES([structure], value, ...) so the branch checks for the last expression 1026 # A single-value tuple is generated as "(x)", which is parsed back into a Paren 1027 # rather than a Tuple, so it's unwrapped here to keep this rewrite idempotent 1028 expressions = value.expressions 1029 if values and not isinstance(expressions[-1], exp.Tuple): 1030 value.set( 1031 "expressions", 1032 [self.expression(exp.Tuple(expressions=[expr.unnest()])) for expr in expressions], 1033 ) 1034 1035 return value 1036 1037 def _parse_partitioned_by(self) -> exp.PartitionedByProperty: 1038 # ClickHouse allows custom expressions as partition key 1039 # https://clickhouse.com/docs/engines/table-engines/mergetree-family/custom-partitioning-key 1040 return self.expression(exp.PartitionedByProperty(this=self._parse_assignment())) 1041 1042 def _parse_detach(self) -> exp.Detach: 1043 kind = self._match_set(self.DB_CREATABLES) and self._prev.text.upper() 1044 exists = self._parse_exists() 1045 this = self._parse_table_parts() 1046 1047 return self.expression( 1048 exp.Detach( 1049 this=this, 1050 kind=kind, 1051 exists=exists, 1052 cluster=self._parse_on_property() if self._match(TokenType.ON) else None, 1053 permanent=self._match_text_seq("PERMANENTLY"), 1054 sync=self._match_text_seq("SYNC"), 1055 ) 1056 )
TIMESTAMP_TRUNC_UNITS =
{'DAY', 'HOUR', 'MINUTE', 'MILLISECOND', 'MONTH', 'YEAR', 'SECOND', 'MICROSECOND', 'QUARTER'}
263class ClickHouseParser(parser.Parser): 264 IS_PREDICATE_PRECEDENCE = IsPredicatePrecedence.LOW 265 266 # Tested in ClickHouse's playground, it seems that the following two queries do the same thing 267 # * select x from t1 union all select x from t2 limit 1; 268 # * select x from t1 union all (select x from t2 limit 1); 269 MODIFIERS_ATTACHED_TO_SET_OP = False 270 INTERVAL_SPANS = False 271 OPTIONAL_ALIAS_TOKEN_CTE = False 272 JOINS_HAVE_EQUAL_PRECEDENCE = True 273 274 FUNCTIONS = { 275 **{ 276 k: v 277 for k, v in parser.Parser.FUNCTIONS.items() 278 if k not in ("TRANSFORM", "APPROX_TOP_SUM") 279 }, 280 **{ 281 regexp_extract: lambda args: exp.RegexpExtract( 282 this=seq_get(args, 0), 283 expression=seq_get(args, 1), 284 group=seq_get(args, 2), 285 ) 286 for regexp_extract in ("REGEXPEXTRACT", "REGEXP_EXTRACT", "REGEXP_SUBSTR") 287 }, 288 **{f"TOSTARTOF{unit}": _build_timestamp_trunc(unit=unit) for unit in TIMESTAMP_TRUNC_UNITS}, 289 "ANY": exp.AnyValue.from_arg_list, 290 "ARRAYCOMPACT": exp.ArrayCompact.from_arg_list, 291 "ARRAYCONCAT": exp.ArrayConcat.from_arg_list, 292 "ARRAYDISTINCT": exp.ArrayDistinct.from_arg_list, 293 "ARRAYEXCEPT": exp.ArrayExcept.from_arg_list, 294 "ARRAYSUM": exp.ArraySum.from_arg_list, 295 "ARRAYMAX": exp.ArrayMax.from_arg_list, 296 "ARRAYMIN": exp.ArrayMin.from_arg_list, 297 "ARRAYREVERSE": exp.ArrayReverse.from_arg_list, 298 "ARRAYSLICE": exp.ArraySlice.from_arg_list, 299 "ARRAYFILTER": _build_array_lambda_func(exp.ArrayFilter, "arrayFilter"), 300 "ARRAYMAP": _build_array_lambda_func(exp.Transform, "arrayMap"), 301 "CURRENTDATABASE": exp.CurrentDatabase.from_arg_list, 302 "CURRENTSCHEMAS": exp.CurrentSchemas.from_arg_list, 303 "COUNTIF": _build_count_if, 304 "COUNTMATCHES": exp.RegexpCount.from_arg_list, 305 "CITYHASH64": exp.CityHash64.from_arg_list, 306 "COSINEDISTANCE": exp.CosineDistance.from_arg_list, 307 "VERSION": exp.CurrentVersion.from_arg_list, 308 "DATE_ADD": build_date_delta(exp.DateAdd, default_unit=None), 309 "DATEADD": build_date_delta(exp.DateAdd, default_unit=None), 310 "DATE_DIFF": build_date_delta(exp.DateDiff, default_unit=None, supports_timezone=True), 311 "DATEDIFF": build_date_delta(exp.DateDiff, default_unit=None, supports_timezone=True), 312 "DATE_FORMAT": _build_datetime_format(exp.TimeToStr), 313 "DATE_SUB": build_date_delta(exp.DateSub, default_unit=None), 314 "DATESUB": build_date_delta(exp.DateSub, default_unit=None), 315 "DATETRUNC": exp.DateTrunc.from_arg_list, 316 "FORMATDATETIME": _build_datetime_format(exp.TimeToStr), 317 "GROUPBITAND": exp.BitwiseAndAgg.from_arg_list, 318 "GROUPBITOR": exp.BitwiseOrAgg.from_arg_list, 319 "GROUPBITXOR": exp.BitwiseXorAgg.from_arg_list, 320 "HAS": exp.ArrayContains.from_arg_list, 321 "ILIKE": build_like(exp.ILike), 322 "ISINFINITE": exp.IsInf.from_arg_list, 323 "JSONEXTRACTRAW": build_json_extract_path( 324 exp.JSONExtract, zero_based_indexing=False, arrow_req_json_type=True 325 ), 326 "JSONEXTRACTSTRING": build_json_extract_path( 327 exp.JSONExtractScalar, zero_based_indexing=False, arrow_req_json_type=True 328 ), 329 "LENGTH": lambda args: exp.Length(this=seq_get(args, 0), binary=True), 330 "LIKE": build_like(exp.Like), 331 "L2Distance": exp.EuclideanDistance.from_arg_list, 332 "MAP": parser.build_var_map, 333 "MATCH": exp.RegexpLike.from_arg_list, 334 "NOTLIKE": build_like(exp.Like, not_like=True), 335 "PARSEDATETIME": _build_datetime_format(exp.ParseDatetime), 336 "RANDCANONICAL": exp.Rand.from_arg_list, 337 "STR_TO_DATE": _build_str_to_date, 338 "TIMESTAMP_SUB": build_date_delta(exp.TimestampSub, default_unit=None), 339 "TIMESTAMPSUB": build_date_delta(exp.TimestampSub, default_unit=None), 340 "TIMESTAMP_ADD": build_date_delta(exp.TimestampAdd, default_unit=None), 341 "TIMESTAMPADD": build_date_delta(exp.TimestampAdd, default_unit=None), 342 "TODAYOFWEEK": _build_without_extra_args(exp.DayOfWeekIso, "toDayOfWeek"), 343 "TOISOWEEK": _build_without_extra_args(exp.WeekOfYear, "toISOWeek"), 344 "TOISOYEAR": _build_without_extra_args(exp.YearOfWeekIso, "toISOYear"), 345 "TOMONDAY": _build_timestamp_trunc("WEEK"), 346 "UNIQ": exp.ApproxDistinct.from_arg_list, 347 "MD5": exp.MD5Digest.from_arg_list, 348 "SHA256": lambda args: exp.SHA2(this=seq_get(args, 0), length=exp.Literal.number(256)), 349 "SHA512": lambda args: exp.SHA2(this=seq_get(args, 0), length=exp.Literal.number(512)), 350 "SPLITBYCHAR": _build_split_by_char, 351 "SPLITBYREGEXP": _build_split(exp.RegexpSplit), 352 "SPLITBYSTRING": _build_split(exp.Split), 353 "SUBSTRINGINDEX": exp.SubstringIndex.from_arg_list, 354 "TOTYPENAME": exp.Typeof.from_arg_list, 355 "TRIMBOTH": exp.Trim.from_arg_list, 356 "TRIMLEFT": parser.build_trim, 357 "TRIMRIGHT": lambda args: parser.build_trim(args, is_left=False), 358 "EDITDISTANCE": exp.Levenshtein.from_arg_list, 359 "JAROWINKLERSIMILARITY": exp.JarowinklerSimilarity.from_arg_list, 360 "LEVENSHTEINDISTANCE": exp.Levenshtein.from_arg_list, 361 "UTCTIMESTAMP": exp.UtcTimestamp.from_arg_list, 362 } 363 364 AGG_FUNCTIONS: t.ClassVar = _AGG_FUNCTIONS 365 AGG_FUNCTIONS_SUFFIXES: t.ClassVar = _AGG_FUNCTIONS_SUFFIXES 366 367 FUNC_TOKENS = { 368 *parser.Parser.FUNC_TOKENS, 369 TokenType.AND, 370 TokenType.FILE, 371 TokenType.OR, 372 TokenType.PASTE, 373 TokenType.SET, 374 TokenType.VIEW, 375 } 376 377 RESERVED_TOKENS = parser.Parser.RESERVED_TOKENS - {TokenType.SELECT} 378 379 ID_VAR_TOKENS = { 380 *parser.Parser.ID_VAR_TOKENS, 381 TokenType.LIKE, 382 } 383 384 AGG_FUNC_MAPPING: t.ClassVar = _AGG_FUNC_MAPPING 385 386 @classmethod 387 def _resolve_clickhouse_agg(cls, name: str) -> tuple[str, Sequence[str]] | None: 388 # ClickHouse allows chaining multiple combinators on aggregate functions. 389 # See https://clickhouse.com/docs/sql-reference/aggregate-functions/combinators 390 # N.B. this resolution allows any suffix stack, including ones that ClickHouse rejects 391 # syntactically such as sumMergeMerge (due to repeated adjacent suffixes) 392 393 # Until we are able to identify a 1- or 0-suffix aggregate function by name, 394 # repeatedly strip and queue suffixes (checking longer suffixes first, see comment on 395 # AGG_FUNCTIONS_SUFFIXES_SORTED). This loop only runs for 2 or more suffixes, 396 # as AGG_FUNC_MAPPING memoizes all 0- and 1-suffix 397 accumulated_suffixes: deque[str] = deque() 398 while (parts := _AGG_FUNC_MAPPING.get(name)) is None: 399 for suffix in _AGG_FUNCTIONS_SUFFIXES: 400 if name.endswith(suffix) and len(name) != len(suffix): 401 accumulated_suffixes.appendleft(suffix) 402 name = name[: -len(suffix)] 403 break 404 else: 405 return None 406 407 # We now have a 0- or 1-suffix aggregate 408 agg_func_name, inner_suffix = parts 409 if inner_suffix: 410 # this is a 1-suffix aggregate (either naturally or via repeated suffix 411 # stripping). prepend the innermost suffix. 412 accumulated_suffixes.appendleft(inner_suffix) 413 414 return (agg_func_name, accumulated_suffixes) 415 416 FUNCTION_PARSERS = { 417 **{k: v for k, v in parser.Parser.FUNCTION_PARSERS.items() if k != "MATCH"}, 418 "ARRAYJOIN": lambda self: self.expression(exp.Explode(this=self._parse_expression())), 419 "GROUPCONCAT": lambda self: self._parse_group_concat(), 420 "QUANTILE": lambda self: self._parse_quantile(), 421 "MEDIAN": lambda self: self._parse_quantile(), 422 "COLUMNS": lambda self: self._parse_columns(), 423 "TUPLE": lambda self: exp.Struct.from_arg_list(self._parse_function_args(alias=True)), 424 "AND": lambda self: self._parse_connector_function(exp.and_), 425 "OR": lambda self: self._parse_connector_function(exp.or_), 426 "XOR": lambda self: exp.xor(*self._parse_function_args(alias=False)), 427 "VIEW": lambda self: self.expression( 428 exp.Anonymous(this="view", expressions=[self._parse_select()]) 429 ), 430 } 431 432 PROPERTY_PARSERS = { 433 **{k: v for k, v in parser.Parser.PROPERTY_PARSERS.items() if k != "DYNAMIC"}, 434 "ENGINE": lambda self: self._parse_engine_property(), 435 "REFRESH": lambda self: self._parse_auto_refresh_property(), 436 "UUID": lambda self: self.expression(exp.UuidProperty(this=self._parse_string())), 437 } 438 439 NO_PAREN_FUNCTION_PARSERS = { 440 k: v for k, v in parser.Parser.NO_PAREN_FUNCTION_PARSERS.items() if k != "ANY" 441 } 442 443 NO_PAREN_FUNCTIONS = { 444 k: v 445 for k, v in parser.Parser.NO_PAREN_FUNCTIONS.items() 446 if k != TokenType.CURRENT_TIMESTAMP 447 } 448 449 RANGE_PARSERS = { 450 **parser.Parser.RANGE_PARSERS, 451 TokenType.GLOBAL: lambda self, this: self._parse_global_in(this), 452 } 453 454 COLUMN_OPERATORS = { 455 **{k: v for k, v in parser.Parser.COLUMN_OPERATORS.items() if k != TokenType.PLACEHOLDER}, 456 TokenType.DOTCARET: lambda self, this, field: self.expression( 457 exp.NestedJSONSelect(this=this, expression=field) 458 ), 459 } 460 461 JOIN_KINDS = { 462 *parser.Parser.JOIN_KINDS, 463 TokenType.ALL, 464 TokenType.ANY, 465 TokenType.ASOF, 466 TokenType.ARRAY, 467 TokenType.PASTE, 468 } 469 470 TABLE_ALIAS_TOKENS = parser.Parser.TABLE_ALIAS_TOKENS - { 471 TokenType.ALL, 472 TokenType.ANY, 473 TokenType.ARRAY, 474 TokenType.ASOF, 475 TokenType.FINAL, 476 TokenType.FORMAT, 477 TokenType.PASTE, 478 TokenType.SETTINGS, 479 } 480 481 ALIAS_TOKENS = parser.Parser.ALIAS_TOKENS - { 482 TokenType.FORMAT, 483 TokenType.SETTINGS, 484 } 485 486 LOG_DEFAULTS_TO_LN = True 487 488 QUERY_MODIFIER_PARSERS = { 489 **parser.Parser.QUERY_MODIFIER_PARSERS, 490 TokenType.SETTINGS: lambda self: ( 491 "settings", 492 self._advance() or self._parse_csv(self._parse_assignment), 493 ), 494 TokenType.FORMAT: lambda self: ("format", self._advance() or self._parse_id_var()), 495 } 496 497 CONSTRAINT_PARSERS = { 498 **parser.Parser.CONSTRAINT_PARSERS, 499 "INDEX": lambda self: self._parse_index_constraint(), 500 "CODEC": lambda self: self._parse_compress(), 501 "ASSUME": lambda self: self._parse_assume_constraint(), 502 } 503 504 ALTER_PARSERS = { 505 **parser.Parser.ALTER_PARSERS, 506 "MODIFY": lambda self: self._parse_alter_table_alter(), 507 "REPLACE": lambda self: self._parse_alter_table_replace(), 508 } 509 510 SCHEMA_UNNAMED_CONSTRAINTS = { 511 *parser.Parser.SCHEMA_UNNAMED_CONSTRAINTS, 512 "INDEX", 513 } - {"CHECK"} 514 515 PLACEHOLDER_PARSERS = { 516 **parser.Parser.PLACEHOLDER_PARSERS, 517 TokenType.L_BRACE: lambda self: self._parse_query_parameter(), 518 } 519 520 STATEMENT_PARSERS = { 521 **parser.Parser.STATEMENT_PARSERS, 522 TokenType.DETACH: lambda self: self._parse_detach(), 523 } 524 525 def _parse_wrapped_select_or_assignment(self) -> exp.Expr | None: 526 return self._parse_wrapped( 527 lambda: self._parse_select() or self._parse_assignment(), optional=True 528 ) 529 530 def _parse_check_constraint(self) -> exp.CheckColumnConstraint | None: 531 return self.expression( 532 exp.CheckColumnConstraint(this=self._parse_wrapped_select_or_assignment()) 533 ) 534 535 def _parse_assume_constraint(self) -> exp.AssumeColumnConstraint | None: 536 return self.expression( 537 exp.AssumeColumnConstraint(this=self._parse_wrapped_select_or_assignment()) 538 ) 539 540 def _parse_engine_property(self) -> exp.EngineProperty: 541 self._match(TokenType.EQ) 542 return self.expression( 543 exp.EngineProperty(this=self._parse_field(any_token=True, anonymous_func=True)) 544 ) 545 546 # https://clickhouse.com/docs/en/sql-reference/statements/create/function 547 def _parse_user_defined_function_expression(self) -> exp.Expr | None: 548 return self._parse_lambda() 549 550 def _parse_types( 551 self, 552 check_func: bool = False, 553 schema: bool = False, 554 allow_identifiers: bool = True, 555 with_collation: bool = False, 556 ) -> exp.Expr | None: 557 dtype = super()._parse_types( 558 check_func=check_func, 559 schema=schema, 560 allow_identifiers=allow_identifiers, 561 with_collation=with_collation, 562 ) 563 if isinstance(dtype, exp.DataType) and dtype.args.get("nullable") is not True: 564 # Mark every type as non-nullable which is ClickHouse's default, unless it's 565 # already marked as nullable. This marker helps us transpile types from other 566 # dialects to ClickHouse, so that we can e.g. produce `CAST(x AS Nullable(String))` 567 # from `CAST(x AS TEXT)`. If there is a `NULL` value in `x`, the former would 568 # fail in ClickHouse without the `Nullable` type constructor. 569 dtype.set("nullable", False) 570 571 return dtype 572 573 def _parse_extract(self) -> exp.Extract | exp.Anonymous: 574 index = self._index 575 this = self._parse_bitwise() 576 if self._match(TokenType.FROM): 577 self._retreat(index) 578 return super()._parse_extract() 579 580 # We return Anonymous here because extract and regexpExtract have different semantics, 581 # so parsing extract(foo, bar) into RegexpExtract can potentially break queries. E.g., 582 # `extract('foobar', 'b')` works, but ClickHouse crashes for `regexpExtract('foobar', 'b')`. 583 # 584 # TODO: can we somehow convert the former into an equivalent `regexpExtract` call? 585 self._match(TokenType.COMMA) 586 return self.expression( 587 exp.Anonymous(this="extract", expressions=[this, self._parse_bitwise()]) 588 ) 589 590 def _parse_assignment(self) -> exp.Expr | None: 591 this = super()._parse_assignment() 592 593 if self._match(TokenType.PLACEHOLDER): 594 return self.expression( 595 exp.If( 596 this=this, 597 true=self._parse_assignment(), 598 false=self._match(TokenType.COLON) and self._parse_assignment(), 599 ) 600 ) 601 602 return this 603 604 def _parse_query_parameter(self) -> exp.Expr | None: 605 """ 606 Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier} 607 https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters 608 """ 609 index = self._index 610 611 this = self._parse_id_var() 612 self._match(TokenType.COLON) 613 kind = self._parse_types(check_func=False, allow_identifiers=False) or ( 614 self._match_text_seq("IDENTIFIER") and "Identifier" 615 ) 616 617 if not kind: 618 self._retreat(index) 619 return None 620 elif not self._match(TokenType.R_BRACE): 621 self.raise_error("Expecting }") 622 623 if isinstance(this, exp.Identifier) and not this.quoted: 624 this = exp.var(this.name) 625 626 return self.expression(exp.Placeholder(this=this, kind=kind)) 627 628 def _parse_bracket(self, this: exp.Expr | None = None) -> exp.Expr | None: 629 if this: 630 bracket_json_type = None 631 632 while self._match_pair(TokenType.L_BRACKET, TokenType.R_BRACKET): 633 bracket_json_type = exp.DataType( 634 this=exp.DType.ARRAY, 635 expressions=[ 636 bracket_json_type 637 or exp.DType.JSON.into_expr(dialect=self.dialect, nullable=False) 638 ], 639 nested=True, 640 ) 641 642 if bracket_json_type: 643 return self.expression(exp.JSONCast(this=this, to=bracket_json_type)) 644 645 l_brace = self._match(TokenType.L_BRACE, advance=False) 646 bracket = super()._parse_bracket(this) 647 648 if l_brace and isinstance(bracket, exp.Struct): 649 varmap = exp.VarMap(keys=exp.Array(), values=exp.Array()) 650 for expression in bracket.expressions: 651 if not isinstance(expression, exp.PropertyEQ): 652 break 653 654 varmap.args["keys"].append("expressions", exp.Literal.string(expression.name)) 655 varmap.args["values"].append("expressions", expression.expression) 656 657 return varmap 658 659 return bracket 660 661 def _parse_global_in(self, this: exp.Expr | None) -> exp.Not | exp.In | None: 662 index = self._index - 1 663 is_negated = self._match(TokenType.NOT) 664 if not self._match(TokenType.IN): 665 self._retreat(index) 666 return None 667 668 in_expr = self._parse_in(this) 669 in_expr.set("is_global", True) 670 return self.expression(exp.Not(this=in_expr)) if is_negated else in_expr 671 672 def _parse_table( 673 self, 674 schema: bool = False, 675 joins: bool = False, 676 alias_tokens: Collection[TokenType] | None = None, 677 parse_bracket: bool = False, 678 is_db_reference: bool = False, 679 parse_partition: bool = False, 680 consume_pipe: bool = False, 681 ) -> exp.Expr | None: 682 this = super()._parse_table( 683 schema=schema, 684 joins=joins, 685 alias_tokens=alias_tokens, 686 parse_bracket=parse_bracket, 687 is_db_reference=is_db_reference, 688 ) 689 690 if isinstance(this, exp.Table): 691 inner = this.this 692 alias = this.args.get("alias") 693 694 if isinstance(inner, exp.GenerateSeries) and alias and not alias.columns: 695 alias.set("columns", [exp.to_identifier("generate_series")]) 696 697 if self._match(TokenType.FINAL): 698 this = self.expression(exp.Final(this=this)) 699 700 return this 701 702 def _parse_position(self, haystack_first: bool = False) -> exp.StrPosition: 703 return super()._parse_position(haystack_first=True) 704 705 # https://clickhouse.com/docs/en/sql-reference/statements/select/with/ 706 def _parse_cte(self) -> exp.CTE | exp.FunctionSpecification | None: 707 # WITH <identifier> AS <subquery expression> 708 cte: exp.CTE | exp.FunctionSpecification | None = self._try_parse(super()._parse_cte) 709 710 if not cte: 711 # WITH <expression> AS <identifier> 712 cte = self.expression( 713 exp.CTE(this=self._parse_assignment(), alias=self._parse_table_alias(), scalar=True) 714 ) 715 716 return cte 717 718 def _parse_join_parts( 719 self, 720 ) -> tuple[Token | None, Token | None, Token | None]: 721 is_global = self._prev if self._match(TokenType.GLOBAL) else None 722 723 kind_pre = self._prev if self._match_set(self.JOIN_KINDS) else None 724 side = self._prev if self._match_set(self.JOIN_SIDES) else None 725 kind = self._prev if self._match_set(self.JOIN_KINDS) else None 726 727 return is_global, side or kind, kind_pre or kind 728 729 def _parse_join( 730 self, 731 skip_join_token: bool = False, 732 parse_bracket: bool = False, 733 alias_tokens: t.Collection[TokenType] | None = None, 734 ) -> exp.Join | None: 735 join = super()._parse_join( 736 skip_join_token=skip_join_token, parse_bracket=True, alias_tokens=alias_tokens 737 ) 738 if join: 739 method = join.args.get("method") 740 join.set("method", None) 741 join.set("global_", method) 742 743 # tbl ARRAY JOIN arr <-- this should be a `Column` reference, not a `Table` 744 # https://clickhouse.com/docs/en/sql-reference/statements/select/array-join 745 if join.kind == "ARRAY": 746 for table in join.find_all(exp.Table): 747 table.replace(table.to_column()) 748 749 return join 750 751 def _parse_function( 752 self, 753 functions: dict[str, t.Callable] | None = None, 754 anonymous: bool = False, 755 optional_parens: bool = True, 756 any_token: bool = False, 757 ) -> exp.Expr | None: 758 expr = super()._parse_function( 759 functions=functions, 760 anonymous=anonymous, 761 optional_parens=optional_parens, 762 any_token=any_token, 763 ) 764 765 func = expr.this if isinstance(expr, exp.Window) else expr 766 767 # Aggregate functions can be split in 2 parts: <func_name><suffix[es]> 768 parts = self._resolve_clickhouse_agg(func.name) if isinstance(func, exp.Anonymous) else None 769 770 if parts: 771 anon_func: exp.Anonymous = t.cast(exp.Anonymous, func) 772 params = self._parse_func_params(anon_func) 773 774 if len(parts[1]) > 0: 775 exp_class: Type[exp.Expr] = ( 776 exp.CombinedParameterizedAgg if params else exp.CombinedAggFunc 777 ) 778 else: 779 exp_class = exp.ParameterizedAgg if params else exp.AnonymousAggFunc 780 781 instance = exp_class(this=anon_func.this, expressions=anon_func.expressions) 782 if params: 783 instance.set("params", params) 784 func = self.expression(instance) 785 786 if isinstance(expr, exp.Window): 787 # The window's func was parsed as Anonymous in base parser, fix its 788 # type to be ClickHouse style CombinedAnonymousAggFunc / AnonymousAggFunc 789 expr.set("this", func) 790 elif params: 791 # Params have blocked super()._parse_function() from parsing the following window 792 # (if that exists) as they're standing between the function call and the window spec 793 expr = self._parse_window(func) 794 else: 795 expr = func 796 797 return expr 798 799 def _parse_func_params(self, this: exp.Func | None = None) -> list[exp.Expr] | None: 800 if self._match_pair(TokenType.R_PAREN, TokenType.L_PAREN): 801 return self._parse_csv(self._parse_lambda) 802 803 if self._match(TokenType.L_PAREN): 804 params = self._parse_csv(self._parse_lambda) 805 self._match_r_paren(this) 806 return params 807 808 return None 809 810 def _parse_group_concat(self) -> exp.GroupConcat: 811 args = self._parse_csv(self._parse_lambda) 812 params = self._parse_func_params() 813 814 if params: 815 # groupConcat(sep [, limit])(expr) 816 separator = seq_get(args, 0) 817 limit = seq_get(args, 1) 818 this: exp.Expr | None = seq_get(params, 0) 819 if limit is not None: 820 this = exp.Limit(this=this, expression=limit) 821 return self.expression(exp.GroupConcat(this=this, separator=separator)) 822 823 # groupConcat(expr) 824 return self.expression(exp.GroupConcat(this=seq_get(args, 0))) 825 826 def _parse_quantile(self) -> exp.Quantile: 827 this = self._parse_lambda() 828 params = self._parse_func_params() 829 if params: 830 return self.expression(exp.Quantile(this=params[0], quantile=this)) 831 return self.expression(exp.Quantile(this=this, quantile=exp.Literal.number(0.5))) 832 833 def _parse_wrapped_id_vars(self, optional: bool = False) -> list[exp.Expr]: 834 return super()._parse_wrapped_id_vars(optional=True) 835 836 def _parse_column_def( 837 self, this: exp.Expr | None, computed_column: bool = True 838 ) -> exp.Expr | None: 839 if self._match(TokenType.DOT): 840 return exp.Dot(this=this, expression=self._parse_id_var()) 841 842 return super()._parse_column_def(this, computed_column=computed_column) 843 844 def _parse_primary_key( 845 self, 846 wrapped_optional: bool = False, 847 in_props: bool = False, 848 named_primary_key: bool = False, 849 ) -> exp.PrimaryKeyColumnConstraint | exp.PrimaryKey: 850 return super()._parse_primary_key( 851 wrapped_optional=wrapped_optional or in_props, 852 in_props=in_props, 853 named_primary_key=named_primary_key, 854 ) 855 856 def _parse_on_property(self) -> exp.Expr | None: 857 index = self._index 858 if self._match_text_seq("CLUSTER"): 859 this = self._parse_string() or self._parse_id_var() 860 if this: 861 return self.expression(exp.OnCluster(this=this)) 862 else: 863 self._retreat(index) 864 return None 865 866 def _parse_auto_refresh_property(self) -> exp.AutoRefreshProperty | None: 867 index = self._index - 1 868 cadence = self._prev.text.upper() if self._match_texts(("EVERY", "AFTER")) else None 869 interval = ( 870 self._parse_interval(require_interval=False, parse_function_unit=False) 871 if cadence 872 else None 873 ) 874 875 if cadence and not interval: 876 self._retreat(index) 877 return None 878 879 offset = None 880 if self._match_text_seq("OFFSET"): 881 offset = self._parse_interval(require_interval=False, parse_function_unit=False) 882 if not offset: 883 self._retreat(index) 884 return None 885 886 randomize = None 887 if self._match_text_seq("RANDOMIZE", "FOR"): 888 randomize = self._parse_interval(require_interval=False, parse_function_unit=False) 889 if not randomize: 890 self._retreat(index) 891 return None 892 893 dependencies = None 894 if self._match_text_seq("DEPENDS", "ON"): 895 dependencies = self._parse_csv(lambda: self._parse_table_parts(schema=True)) 896 if not dependencies: 897 self._retreat(index) 898 return None 899 900 if not cadence and not dependencies: 901 self._retreat(index) 902 return None 903 904 settings = self._parse_settings_property() if self._match_text_seq("SETTINGS") else None 905 906 return self.expression( 907 exp.AutoRefreshProperty( 908 this=interval, 909 cadence=cadence, 910 offset=offset, 911 randomize=randomize, 912 expressions=dependencies, 913 settings=settings, 914 append=self._match_text_seq("APPEND"), 915 ) 916 ) 917 918 def _parse_index_constraint(self, kind: str | None = None) -> exp.IndexColumnConstraint: 919 # INDEX name1 expr TYPE type1(args) GRANULARITY value 920 this = self._parse_id_var() 921 expression = self._parse_assignment() 922 923 index_type = self._match_text_seq("TYPE") and (self._parse_function() or self._parse_var()) 924 925 granularity = self._match_text_seq("GRANULARITY") and self._parse_term() 926 927 return self.expression( 928 exp.IndexColumnConstraint( 929 this=this, expression=expression, index_type=index_type, granularity=granularity 930 ) 931 ) 932 933 def _parse_partition(self) -> exp.Partition | None: 934 # https://clickhouse.com/docs/en/sql-reference/statements/alter/partition#how-to-set-partition-expression 935 if not self._match(TokenType.PARTITION): 936 return None 937 938 if self._match_text_seq("ID"): 939 # Corresponds to the PARTITION ID <string_value> syntax 940 expressions: list[exp.Expr] = [ 941 self.expression(exp.PartitionId(this=self._parse_string())) 942 ] 943 else: 944 expressions = self._parse_expressions() 945 946 return self.expression(exp.Partition(expressions=expressions)) 947 948 def _parse_alter_table_replace(self) -> exp.Expr | None: 949 partition = self._parse_partition() 950 951 if not partition or not self._match(TokenType.FROM): 952 return None 953 954 return self.expression( 955 exp.ReplacePartition(expression=partition, source=self._parse_table_parts()) 956 ) 957 958 def _parse_alter_table_alter(self) -> exp.Expr | None: 959 # MODIFY forms other than MODIFY COLUMN (SQL SECURITY, ORDER BY, TTL, COMMENT, ...) 960 # are parsed as properties, since ALTER can now reach this path too 961 if self._prev.text.upper() == "MODIFY" and not self._match(TokenType.COLUMN, advance=False): 962 if properties := self._parse_properties(): 963 return self.expression( 964 exp.AlterModifySqlSecurity(expressions=properties.expressions) 965 ) 966 return None 967 968 # https://clickhouse.com/docs/sql-reference/statements/alter/column#modify-column 969 alter = super()._parse_alter_table_alter() 970 return None if self._curr else alter 971 972 def _parse_definer(self) -> exp.DefinerProperty | None: 973 self._match(TokenType.EQ) 974 if self._match(TokenType.CURRENT_USER): 975 return exp.DefinerProperty(this=exp.Var(this=self._prev.text.upper())) 976 return exp.DefinerProperty(this=self._parse_string()) 977 978 def _parse_projection_def(self) -> exp.ProjectionDef | None: 979 if not self._match(TokenType.PROJECTION): 980 return None 981 982 return self.expression( 983 exp.ProjectionDef( 984 this=self._parse_id_var(), expression=self._parse_wrapped(self._parse_statement) 985 ) 986 ) 987 988 def _parse_constraint(self) -> exp.Expr | None: 989 return super()._parse_constraint() or self._parse_projection_def() 990 991 def _parse_alias(self, this: exp.Expr | None, explicit: bool = False) -> exp.Expr | None: 992 # In clickhouse "SELECT <expr> APPLY(...)" is a query modifier, 993 # so "APPLY" shouldn't be parsed as <expr>'s alias. However, "SELECT <expr> apply" is a valid alias 994 if self._match_pair(TokenType.APPLY, TokenType.L_PAREN, advance=False): 995 return this 996 997 return super()._parse_alias(this=this, explicit=explicit) 998 999 def _parse_expression(self) -> exp.Expr | None: 1000 this = super()._parse_expression() 1001 1002 # Clickhouse allows "SELECT <expr> [APPLY(func)] [...]]" modifier 1003 while self._match_pair(TokenType.APPLY, TokenType.L_PAREN): 1004 this = exp.Apply(this=this, expression=self._parse_var(any_token=True)) 1005 self._match(TokenType.R_PAREN) 1006 1007 return this 1008 1009 def _parse_columns(self) -> exp.Expr: 1010 this: exp.Expr = self.expression(exp.Columns(this=self._parse_lambda())) 1011 1012 while self._next and self._match_text_seq(")", "APPLY", "("): 1013 self._match(TokenType.R_PAREN) 1014 this = exp.Apply(this=this, expression=self._parse_var(any_token=True)) 1015 return this 1016 1017 def _parse_value(self, values: bool = True) -> exp.Tuple | None: 1018 value = super()._parse_value(values=values) 1019 if not value: 1020 return None 1021 1022 # In Clickhouse "SELECT * FROM VALUES (1, 2, 3)" generates a table with a single column, in contrast 1023 # to other dialects. For this case, we canonicalize the values into a tuple-of-tuples AST if it's not already one. 1024 # In INSERT INTO statements the same clause actually references multiple columns (opposite semantics), 1025 # but the final result is not altered by the extra parentheses. 1026 # Note: Clickhouse allows VALUES([structure], value, ...) so the branch checks for the last expression 1027 # A single-value tuple is generated as "(x)", which is parsed back into a Paren 1028 # rather than a Tuple, so it's unwrapped here to keep this rewrite idempotent 1029 expressions = value.expressions 1030 if values and not isinstance(expressions[-1], exp.Tuple): 1031 value.set( 1032 "expressions", 1033 [self.expression(exp.Tuple(expressions=[expr.unnest()])) for expr in expressions], 1034 ) 1035 1036 return value 1037 1038 def _parse_partitioned_by(self) -> exp.PartitionedByProperty: 1039 # ClickHouse allows custom expressions as partition key 1040 # https://clickhouse.com/docs/engines/table-engines/mergetree-family/custom-partitioning-key 1041 return self.expression(exp.PartitionedByProperty(this=self._parse_assignment())) 1042 1043 def _parse_detach(self) -> exp.Detach: 1044 kind = self._match_set(self.DB_CREATABLES) and self._prev.text.upper() 1045 exists = self._parse_exists() 1046 this = self._parse_table_parts() 1047 1048 return self.expression( 1049 exp.Detach( 1050 this=this, 1051 kind=kind, 1052 exists=exists, 1053 cluster=self._parse_on_property() if self._match(TokenType.ON) else None, 1054 permanent=self._match_text_seq("PERMANENTLY"), 1055 sync=self._match_text_seq("SYNC"), 1056 ) 1057 )
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_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>>, 'TOSTARTOFMINUTE': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFMILLISECOND': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFMONTH': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFYEAR': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFSECOND': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFMICROSECOND': <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 =
{'studentTTest', 'corr', 'covarPop', 'avgWeighted', 'quantilesExactExclusive', 'sumCount', 'quantilesBFloat16', 'argMax', 'simpleLinearRegression', 'quantileExactInclusive', 'stochasticLogisticRegression', 'stddevPop', 'rankCorr', 'quantiles', 'approx_top_sum', 'sequenceCount', 'quantilesExactHigh', 'contingency', 'quantilesBFloat16Weighted', 'anyHeavy', 'topKWeighted', 'maxIntersections', 'min', 'quantileTimingWeighted', 'kurtPop', 'uniqCombined64', 'quantileGK', 'skewSamp', 'boundingRatio', 'quantilesTDigestWeighted', 'minMap', 'max', 'quantilesTDigest', 'mannWhitneyUTest', 'uniqExact', 'avg', 'uniqTheta', 'groupArrayInsertAt', 'categoricalInformationValue', 'quantileExactWeighted', 'quantileTDigestWeighted', 'groupBitmap', 'groupUniqArray', 'intervalLengthSum', 'groupBitmapOr', 'stochasticLinearRegression', 'anyLast', 'quantilesDeterministic', 'varSamp', 'quantileExactHigh', 'quantilesExactLow', 'varPop', 'exponentialMovingAverage', 'deltaSum', 'uniq', 'quantile', 'argMin', 'retention', 'topK', 'groupArray', 'groupArrayMovingAvg', 'groupConcat', 'quantilesExact', 'sumMap', 'quantileExact', 'last_value', 'quantilesGK', 'deltaSumTimestamp', 'groupArrayLast', 'sparkBar', 'entropy', 'quantileDeterministic', 'groupArrayMovingSum', 'sequenceMatch', 'quantileTiming', 'groupBitOr', 'exponentialTimeDecayedAvg', 'cramersVBiasCorrected', 'kolmogorovSmirnovTest', 'groupBitXor', 'meanZTest', 'quantileInterpolatedWeighted', 'quantileTDigest', 'quantilesInterpolatedWeighted', 'histogram', 'count', 'sequenceNextNode', 'kurtSamp', 'sumKahan', 'quantileBFloat16Weighted', 'first_value', 'largestTriangleThreeBuckets', 'groupBitAnd', 'quantileExactLow', 'any', 'maxIntersectionsPosition', 'stddevSamp', 'uniqHLL12', 'quantilesTimingWeighted', 'uniqUpTo', 'sum', 'groupBitmapXor', 'groupArraySample', 'theilsU', 'median', 'cramersV', 'skewPop', 'windowFunnel', 'quantileBFloat16', 'welchTTest', 'quantilesExactWeighted', 'groupBitmapAnd', 'sumWithOverflow', 'maxMap', 'covarSamp', 'quantilesTiming', 'uniqCombined'}
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.INET: 201>, <TokenType.IPADDRESS: 202>, <TokenType.IPPREFIX: 203>, <TokenType.IPV4: 204>, <TokenType.IPV6: 205>, <TokenType.ENUM: 206>, <TokenType.ENUM8: 207>, <TokenType.ENUM16: 208>, <TokenType.FIXEDSTRING: 209>, <TokenType.LOWCARDINALITY: 210>, <TokenType.NESTED: 211>, <TokenType.AGGREGATEFUNCTION: 212>, <TokenType.SIMPLEAGGREGATEFUNCTION: 213>, <TokenType.TDIGEST: 214>, <TokenType.UNKNOWN: 215>, <TokenType.VECTOR: 216>, <TokenType.DYNAMIC: 217>, <TokenType.VOID: 218>, <TokenType.ALL: 221>, <TokenType.ANY: 223>, <TokenType.ARRAY: 225>, <TokenType.COLLATE: 237>, <TokenType.COMMAND: 238>, <TokenType.CURRENT_DATE: 247>, <TokenType.CURRENT_DATETIME: 248>, <TokenType.CURRENT_SCHEMA: 249>, <TokenType.CURRENT_TIME: 250>, <TokenType.CURRENT_TIMESTAMP: 251>, <TokenType.CURRENT_USER: 252>, <TokenType.CURRENT_CATALOG: 255>, <TokenType.DECLARE: 256>, <TokenType.EXISTS: 272>, <TokenType.FILE: 275>, <TokenType.FILTER: 277>, <TokenType.FIRST: 279>, <TokenType.FORMAT: 283>, <TokenType.GET: 287>, <TokenType.GLOB: 288>, <TokenType.ILIKE: 296>, <TokenType.INDEX: 298>, <TokenType.INSERT: 301>, <TokenType.INTERVAL: 305>, <TokenType.ISNULL: 310>, <TokenType.LEFT: 318>, <TokenType.LIKE: 319>, <TokenType.LIST: 321>, <TokenType.MAP: 324>, <TokenType.MERGE: 329>, <TokenType.NEXT: 333>, <TokenType.NOTHING: 334>, <TokenType.NULL: 336>, <TokenType.OBJECT_IDENTIFIER: 337>, <TokenType.OFFSET: 338>, <TokenType.PASTE: 355>, <TokenType.PRIMARY_KEY: 364>, <TokenType.PSEUDO_TYPE: 368>, <TokenType.RANGE: 373>, <TokenType.REPLACE: 377>, <TokenType.RIGHT: 381>, <TokenType.RLIKE: 382>, <TokenType.ROW: 386>, <TokenType.SEQUENCE: 392>, <TokenType.SET: 394>, <TokenType.SOME: 398>, <TokenType.STRUCT: 405>, <TokenType.TRUNCATE: 413>, <TokenType.UNION: 418>, <TokenType.UNNEST: 419>, <TokenType.VIEW: 426>, <TokenType.WINDOW: 432>, <TokenType.UTC_DATE: 435>, <TokenType.UTC_TIME: 436>, <TokenType.UTC_TIMESTAMP: 437>}
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: 330>, <TokenType.SEMICOLON: 19>, <TokenType.STAR: 20>, <TokenType.BACKSLASH: 21>, <TokenType.SLASH: 22>, <TokenType.LT: 23>, <TokenType.UNKNOWN: 215>, <TokenType.GT: 25>, <TokenType.NOT: 27>, <TokenType.EQ: 28>, <TokenType.AMP: 36>, <TokenType.PLACEHOLDER: 358>, <TokenType.PIPE: 39>, <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.INET: 201>, <TokenType.IPADDRESS: 202>, <TokenType.IPPREFIX: 203>, <TokenType.IPV4: 204>, <TokenType.IPV6: 205>, <TokenType.ENUM: 206>, <TokenType.ENUM8: 207>, <TokenType.ENUM16: 208>, <TokenType.FIXEDSTRING: 209>, <TokenType.LOWCARDINALITY: 210>, <TokenType.NESTED: 211>, <TokenType.AGGREGATEFUNCTION: 212>, <TokenType.SIMPLEAGGREGATEFUNCTION: 213>, <TokenType.TDIGEST: 214>, <TokenType.UNKNOWN: 215>, <TokenType.VECTOR: 216>, <TokenType.DYNAMIC: 217>, <TokenType.VOID: 218>, <TokenType.ALL: 221>, <TokenType.ANTI: 222>, <TokenType.ANY: 223>, <TokenType.APPLY: 224>, <TokenType.ARRAY: 225>, <TokenType.ASC: 226>, <TokenType.ASOF: 227>, <TokenType.ATTACH: 228>, <TokenType.AUTO_INCREMENT: 229>, <TokenType.BEGIN: 230>, <TokenType.CACHE: 233>, <TokenType.CASE: 234>, <TokenType.COLLATE: 237>, <TokenType.COMMAND: 238>, <TokenType.COMMENT: 239>, <TokenType.COMMIT: 240>, <TokenType.CONSTRAINT: 242>, <TokenType.COPY: 243>, <TokenType.CUBE: 246>, <TokenType.CURRENT_DATE: 247>, <TokenType.CURRENT_DATETIME: 248>, <TokenType.CURRENT_SCHEMA: 249>, <TokenType.CURRENT_TIME: 250>, <TokenType.CURRENT_TIMESTAMP: 251>, <TokenType.CURRENT_USER: 252>, <TokenType.CURRENT_ROLE: 254>, <TokenType.CURRENT_CATALOG: 255>, <TokenType.DECLARE: 256>, <TokenType.DEFAULT: 257>, <TokenType.DELETE: 258>, <TokenType.DESC: 259>, <TokenType.DESCRIBE: 260>, <TokenType.DETACH: 261>, <TokenType.DICTIONARY: 262>, <TokenType.DIV: 265>, <TokenType.END: 268>, <TokenType.ESCAPE: 269>, <TokenType.EXECUTE: 271>, <TokenType.EXISTS: 272>, <TokenType.FALSE: 273>, <TokenType.FILE: 275>, <TokenType.FILE_FORMAT: 276>, <TokenType.FILTER: 277>, <TokenType.FINAL: 278>, <TokenType.FIRST: 279>, <TokenType.FOREIGN_KEY: 282>, <TokenType.FORMAT: 283>, <TokenType.FULL: 285>, <TokenType.FUNCTION: 286>, <TokenType.GET: 287>, <TokenType.INDEX: 298>, <TokenType.INTERVAL: 305>, <TokenType.IS: 309>, <TokenType.ISNULL: 310>, <TokenType.KEEP: 313>, <TokenType.KILL: 315>, <TokenType.LEFT: 318>, <TokenType.LIKE: 319>, <TokenType.LIMIT: 320>, <TokenType.LIST: 321>, <TokenType.LOAD: 322>, <TokenType.LOCK: 323>, <TokenType.MAP: 324>, <TokenType.MATCH: 325>, <TokenType.MERGE: 329>, <TokenType.MODEL: 331>, <TokenType.NATURAL: 332>, <TokenType.NEXT: 333>, <TokenType.NOTHING: 334>, <TokenType.NULL: 336>, <TokenType.OBJECT_IDENTIFIER: 337>, <TokenType.OFFSET: 338>, <TokenType.OPERATOR: 341>, <TokenType.ORDINALITY: 345>, <TokenType.OUT: 346>, <TokenType.INOUT: 347>, <TokenType.OVER: 349>, <TokenType.OVERLAPS: 350>, <TokenType.OVERWRITE: 351>, <TokenType.PARTITION: 353>, <TokenType.PASTE: 355>, <TokenType.PERCENT: 356>, <TokenType.PIVOT: 357>, <TokenType.PRAGMA: 362>, <TokenType.PROCEDURE: 365>, <TokenType.PROJECTION: 367>, <TokenType.PSEUDO_TYPE: 368>, <TokenType.PUT: 369>, <TokenType.RANGE: 373>, <TokenType.RECURSIVE: 374>, <TokenType.REFRESH: 375>, <TokenType.RENAME: 376>, <TokenType.REPLACE: 377>, <TokenType.REFERENCES: 380>, <TokenType.RIGHT: 381>, <TokenType.ROLLUP: 385>, <TokenType.ROW: 386>, <TokenType.ROWS: 387>, <TokenType.SEMI: 390>, <TokenType.SEQUENCE: 392>, <TokenType.SET: 394>, <TokenType.SETTINGS: 395>, <TokenType.SHOW: 396>, <TokenType.SOME: 398>, <TokenType.STORAGE_INTEGRATION: 403>, <TokenType.STRAIGHT_JOIN: 404>, <TokenType.STRUCT: 405>, <TokenType.TAG: 408>, <TokenType.TEMPORARY: 409>, <TokenType.TOP: 410>, <TokenType.TRUE: 412>, <TokenType.TRUNCATE: 413>, <TokenType.TRIGGER: 414>, <TokenType.TYPE: 415>, <TokenType.UNNEST: 419>, <TokenType.UNPIVOT: 420>, <TokenType.UPDATE: 421>, <TokenType.USE: 422>, <TokenType.VIEW: 426>, <TokenType.SEMANTIC_VIEW: 427>, <TokenType.VOLATILE: 428>, <TokenType.WINDOW: 432>, <TokenType.UNIQUE: 434>, <TokenType.SINK: 439>, <TokenType.SOURCE: 440>, <TokenType.ANALYZE: 441>, <TokenType.NAMESPACE: 442>, <TokenType.EXPORT: 443>}
AGG_FUNC_MAPPING: ClassVar =
{'studentTTestSimpleState': ('studentTTest', 'SimpleState'), 'corrSimpleState': ('corr', 'SimpleState'), 'covarPopSimpleState': ('covarPop', 'SimpleState'), 'avgWeightedSimpleState': ('avgWeighted', 'SimpleState'), 'quantilesExactExclusiveSimpleState': ('quantilesExactExclusive', 'SimpleState'), 'sumCountSimpleState': ('sumCount', 'SimpleState'), 'quantilesBFloat16SimpleState': ('quantilesBFloat16', 'SimpleState'), 'argMaxSimpleState': ('argMax', 'SimpleState'), 'simpleLinearRegressionSimpleState': ('simpleLinearRegression', 'SimpleState'), 'quantileExactInclusiveSimpleState': ('quantileExactInclusive', 'SimpleState'), 'stochasticLogisticRegressionSimpleState': ('stochasticLogisticRegression', 'SimpleState'), 'stddevPopSimpleState': ('stddevPop', 'SimpleState'), 'rankCorrSimpleState': ('rankCorr', 'SimpleState'), 'quantilesSimpleState': ('quantiles', 'SimpleState'), 'approx_top_sumSimpleState': ('approx_top_sum', 'SimpleState'), 'sequenceCountSimpleState': ('sequenceCount', 'SimpleState'), 'quantilesExactHighSimpleState': ('quantilesExactHigh', 'SimpleState'), 'contingencySimpleState': ('contingency', 'SimpleState'), 'quantilesBFloat16WeightedSimpleState': ('quantilesBFloat16Weighted', 'SimpleState'), 'anyHeavySimpleState': ('anyHeavy', 'SimpleState'), 'topKWeightedSimpleState': ('topKWeighted', 'SimpleState'), 'maxIntersectionsSimpleState': ('maxIntersections', 'SimpleState'), 'minSimpleState': ('min', 'SimpleState'), 'quantileTimingWeightedSimpleState': ('quantileTimingWeighted', 'SimpleState'), 'kurtPopSimpleState': ('kurtPop', 'SimpleState'), 'uniqCombined64SimpleState': ('uniqCombined64', 'SimpleState'), 'quantileGKSimpleState': ('quantileGK', 'SimpleState'), 'skewSampSimpleState': ('skewSamp', 'SimpleState'), 'boundingRatioSimpleState': ('boundingRatio', 'SimpleState'), 'quantilesTDigestWeightedSimpleState': ('quantilesTDigestWeighted', 'SimpleState'), 'minMapSimpleState': ('minMap', 'SimpleState'), 'maxSimpleState': ('max', 'SimpleState'), 'quantilesTDigestSimpleState': ('quantilesTDigest', 'SimpleState'), 'mannWhitneyUTestSimpleState': ('mannWhitneyUTest', 'SimpleState'), 'uniqExactSimpleState': ('uniqExact', 'SimpleState'), 'avgSimpleState': ('avg', 'SimpleState'), 'uniqThetaSimpleState': ('uniqTheta', 'SimpleState'), 'groupArrayInsertAtSimpleState': ('groupArrayInsertAt', 'SimpleState'), 'categoricalInformationValueSimpleState': ('categoricalInformationValue', 'SimpleState'), 'quantileExactWeightedSimpleState': ('quantileExactWeighted', 'SimpleState'), 'quantileTDigestWeightedSimpleState': ('quantileTDigestWeighted', 'SimpleState'), 'groupBitmapSimpleState': ('groupBitmap', 'SimpleState'), 'groupUniqArraySimpleState': ('groupUniqArray', 'SimpleState'), 'intervalLengthSumSimpleState': ('intervalLengthSum', 'SimpleState'), 'groupBitmapOrSimpleState': ('groupBitmapOr', 'SimpleState'), 'stochasticLinearRegressionSimpleState': ('stochasticLinearRegression', 'SimpleState'), 'anyLastSimpleState': ('anyLast', 'SimpleState'), 'quantilesDeterministicSimpleState': ('quantilesDeterministic', 'SimpleState'), 'varSampSimpleState': ('varSamp', 'SimpleState'), 'quantileExactHighSimpleState': ('quantileExactHigh', 'SimpleState'), 'quantilesExactLowSimpleState': ('quantilesExactLow', 'SimpleState'), 'varPopSimpleState': ('varPop', 'SimpleState'), 'exponentialMovingAverageSimpleState': ('exponentialMovingAverage', 'SimpleState'), 'deltaSumSimpleState': ('deltaSum', 'SimpleState'), 'uniqSimpleState': ('uniq', 'SimpleState'), 'quantileSimpleState': ('quantile', 'SimpleState'), 'argMinSimpleState': ('argMin', 'SimpleState'), 'retentionSimpleState': ('retention', 'SimpleState'), 'topKSimpleState': ('topK', 'SimpleState'), 'groupArraySimpleState': ('groupArray', 'SimpleState'), 'groupArrayMovingAvgSimpleState': ('groupArrayMovingAvg', 'SimpleState'), 'groupConcatSimpleState': ('groupConcat', 'SimpleState'), 'quantilesExactSimpleState': ('quantilesExact', 'SimpleState'), 'sumMapSimpleState': ('sumMap', 'SimpleState'), 'quantileExactSimpleState': ('quantileExact', 'SimpleState'), 'last_valueSimpleState': ('last_value', 'SimpleState'), 'quantilesGKSimpleState': ('quantilesGK', 'SimpleState'), 'deltaSumTimestampSimpleState': ('deltaSumTimestamp', 'SimpleState'), 'groupArrayLastSimpleState': ('groupArrayLast', 'SimpleState'), 'sparkBarSimpleState': ('sparkBar', 'SimpleState'), 'entropySimpleState': ('entropy', 'SimpleState'), 'quantileDeterministicSimpleState': ('quantileDeterministic', 'SimpleState'), 'groupArrayMovingSumSimpleState': ('groupArrayMovingSum', 'SimpleState'), 'sequenceMatchSimpleState': ('sequenceMatch', 'SimpleState'), 'quantileTimingSimpleState': ('quantileTiming', 'SimpleState'), 'groupBitOrSimpleState': ('groupBitOr', 'SimpleState'), 'exponentialTimeDecayedAvgSimpleState': ('exponentialTimeDecayedAvg', 'SimpleState'), 'cramersVBiasCorrectedSimpleState': ('cramersVBiasCorrected', 'SimpleState'), 'kolmogorovSmirnovTestSimpleState': ('kolmogorovSmirnovTest', 'SimpleState'), 'groupBitXorSimpleState': ('groupBitXor', 'SimpleState'), 'meanZTestSimpleState': ('meanZTest', 'SimpleState'), 'quantileInterpolatedWeightedSimpleState': ('quantileInterpolatedWeighted', 'SimpleState'), 'quantileTDigestSimpleState': ('quantileTDigest', 'SimpleState'), 'quantilesInterpolatedWeightedSimpleState': ('quantilesInterpolatedWeighted', 'SimpleState'), 'histogramSimpleState': ('histogram', 'SimpleState'), 'countSimpleState': ('count', 'SimpleState'), 'sequenceNextNodeSimpleState': ('sequenceNextNode', 'SimpleState'), 'kurtSampSimpleState': ('kurtSamp', 'SimpleState'), 'sumKahanSimpleState': ('sumKahan', 'SimpleState'), 'quantileBFloat16WeightedSimpleState': ('quantileBFloat16Weighted', 'SimpleState'), 'first_valueSimpleState': ('first_value', 'SimpleState'), 'largestTriangleThreeBucketsSimpleState': ('largestTriangleThreeBuckets', 'SimpleState'), 'groupBitAndSimpleState': ('groupBitAnd', 'SimpleState'), 'quantileExactLowSimpleState': ('quantileExactLow', 'SimpleState'), 'anySimpleState': ('any', 'SimpleState'), 'maxIntersectionsPositionSimpleState': ('maxIntersectionsPosition', 'SimpleState'), 'stddevSampSimpleState': ('stddevSamp', 'SimpleState'), 'uniqHLL12SimpleState': ('uniqHLL12', 'SimpleState'), 'quantilesTimingWeightedSimpleState': ('quantilesTimingWeighted', 'SimpleState'), 'uniqUpToSimpleState': ('uniqUpTo', 'SimpleState'), 'sumSimpleState': ('sum', 'SimpleState'), 'groupBitmapXorSimpleState': ('groupBitmapXor', 'SimpleState'), 'groupArraySampleSimpleState': ('groupArraySample', 'SimpleState'), 'theilsUSimpleState': ('theilsU', 'SimpleState'), 'medianSimpleState': ('median', 'SimpleState'), 'cramersVSimpleState': ('cramersV', 'SimpleState'), 'skewPopSimpleState': ('skewPop', 'SimpleState'), 'windowFunnelSimpleState': ('windowFunnel', 'SimpleState'), 'quantileBFloat16SimpleState': ('quantileBFloat16', 'SimpleState'), 'welchTTestSimpleState': ('welchTTest', 'SimpleState'), 'quantilesExactWeightedSimpleState': ('quantilesExactWeighted', 'SimpleState'), 'groupBitmapAndSimpleState': ('groupBitmapAnd', 'SimpleState'), 'sumWithOverflowSimpleState': ('sumWithOverflow', 'SimpleState'), 'maxMapSimpleState': ('maxMap', 'SimpleState'), 'covarSampSimpleState': ('covarSamp', 'SimpleState'), 'quantilesTimingSimpleState': ('quantilesTiming', 'SimpleState'), 'uniqCombinedSimpleState': ('uniqCombined', 'SimpleState'), 'studentTTestMergeState': ('studentTTest', 'MergeState'), 'corrMergeState': ('corr', 'MergeState'), 'covarPopMergeState': ('covarPop', 'MergeState'), 'avgWeightedMergeState': ('avgWeighted', 'MergeState'), 'quantilesExactExclusiveMergeState': ('quantilesExactExclusive', 'MergeState'), 'sumCountMergeState': ('sumCount', 'MergeState'), 'quantilesBFloat16MergeState': ('quantilesBFloat16', 'MergeState'), 'argMaxMergeState': ('argMax', 'MergeState'), 'simpleLinearRegressionMergeState': ('simpleLinearRegression', 'MergeState'), 'quantileExactInclusiveMergeState': ('quantileExactInclusive', 'MergeState'), 'stochasticLogisticRegressionMergeState': ('stochasticLogisticRegression', 'MergeState'), 'stddevPopMergeState': ('stddevPop', 'MergeState'), 'rankCorrMergeState': ('rankCorr', 'MergeState'), 'quantilesMergeState': ('quantiles', 'MergeState'), 'approx_top_sumMergeState': ('approx_top_sum', 'MergeState'), 'sequenceCountMergeState': ('sequenceCount', 'MergeState'), 'quantilesExactHighMergeState': ('quantilesExactHigh', 'MergeState'), 'contingencyMergeState': ('contingency', 'MergeState'), 'quantilesBFloat16WeightedMergeState': ('quantilesBFloat16Weighted', 'MergeState'), 'anyHeavyMergeState': ('anyHeavy', 'MergeState'), 'topKWeightedMergeState': ('topKWeighted', 'MergeState'), 'maxIntersectionsMergeState': ('maxIntersections', 'MergeState'), 'minMergeState': ('min', 'MergeState'), 'quantileTimingWeightedMergeState': ('quantileTimingWeighted', 'MergeState'), 'kurtPopMergeState': ('kurtPop', 'MergeState'), 'uniqCombined64MergeState': ('uniqCombined64', 'MergeState'), 'quantileGKMergeState': ('quantileGK', 'MergeState'), 'skewSampMergeState': ('skewSamp', 'MergeState'), 'boundingRatioMergeState': ('boundingRatio', 'MergeState'), 'quantilesTDigestWeightedMergeState': ('quantilesTDigestWeighted', 'MergeState'), 'minMapMergeState': ('minMap', 'MergeState'), 'maxMergeState': ('max', 'MergeState'), 'quantilesTDigestMergeState': ('quantilesTDigest', 'MergeState'), 'mannWhitneyUTestMergeState': ('mannWhitneyUTest', 'MergeState'), 'uniqExactMergeState': ('uniqExact', 'MergeState'), 'avgMergeState': ('avg', 'MergeState'), 'uniqThetaMergeState': ('uniqTheta', 'MergeState'), 'groupArrayInsertAtMergeState': ('groupArrayInsertAt', 'MergeState'), 'categoricalInformationValueMergeState': ('categoricalInformationValue', 'MergeState'), 'quantileExactWeightedMergeState': ('quantileExactWeighted', 'MergeState'), 'quantileTDigestWeightedMergeState': ('quantileTDigestWeighted', 'MergeState'), 'groupBitmapMergeState': ('groupBitmap', 'MergeState'), 'groupUniqArrayMergeState': ('groupUniqArray', 'MergeState'), 'intervalLengthSumMergeState': ('intervalLengthSum', 'MergeState'), 'groupBitmapOrMergeState': ('groupBitmapOr', 'MergeState'), 'stochasticLinearRegressionMergeState': ('stochasticLinearRegression', 'MergeState'), 'anyLastMergeState': ('anyLast', 'MergeState'), 'quantilesDeterministicMergeState': ('quantilesDeterministic', 'MergeState'), 'varSampMergeState': ('varSamp', 'MergeState'), 'quantileExactHighMergeState': ('quantileExactHigh', 'MergeState'), 'quantilesExactLowMergeState': ('quantilesExactLow', 'MergeState'), 'varPopMergeState': ('varPop', 'MergeState'), 'exponentialMovingAverageMergeState': ('exponentialMovingAverage', 'MergeState'), 'deltaSumMergeState': ('deltaSum', 'MergeState'), 'uniqMergeState': ('uniq', 'MergeState'), 'quantileMergeState': ('quantile', 'MergeState'), 'argMinMergeState': ('argMin', 'MergeState'), 'retentionMergeState': ('retention', 'MergeState'), 'topKMergeState': ('topK', 'MergeState'), 'groupArrayMergeState': ('groupArray', 'MergeState'), 'groupArrayMovingAvgMergeState': ('groupArrayMovingAvg', 'MergeState'), 'groupConcatMergeState': ('groupConcat', 'MergeState'), 'quantilesExactMergeState': ('quantilesExact', 'MergeState'), 'sumMapMergeState': ('sumMap', 'MergeState'), 'quantileExactMergeState': ('quantileExact', 'MergeState'), 'last_valueMergeState': ('last_value', 'MergeState'), 'quantilesGKMergeState': ('quantilesGK', 'MergeState'), 'deltaSumTimestampMergeState': ('deltaSumTimestamp', 'MergeState'), 'groupArrayLastMergeState': ('groupArrayLast', 'MergeState'), 'sparkBarMergeState': ('sparkBar', 'MergeState'), 'entropyMergeState': ('entropy', 'MergeState'), 'quantileDeterministicMergeState': ('quantileDeterministic', 'MergeState'), 'groupArrayMovingSumMergeState': ('groupArrayMovingSum', 'MergeState'), 'sequenceMatchMergeState': ('sequenceMatch', 'MergeState'), 'quantileTimingMergeState': ('quantileTiming', 'MergeState'), 'groupBitOrMergeState': ('groupBitOr', 'MergeState'), 'exponentialTimeDecayedAvgMergeState': ('exponentialTimeDecayedAvg', 'MergeState'), 'cramersVBiasCorrectedMergeState': ('cramersVBiasCorrected', 'MergeState'), 'kolmogorovSmirnovTestMergeState': ('kolmogorovSmirnovTest', 'MergeState'), 'groupBitXorMergeState': ('groupBitXor', 'MergeState'), 'meanZTestMergeState': ('meanZTest', 'MergeState'), 'quantileInterpolatedWeightedMergeState': ('quantileInterpolatedWeighted', 'MergeState'), 'quantileTDigestMergeState': ('quantileTDigest', 'MergeState'), 'quantilesInterpolatedWeightedMergeState': ('quantilesInterpolatedWeighted', 'MergeState'), 'histogramMergeState': ('histogram', 'MergeState'), 'countMergeState': ('count', 'MergeState'), 'sequenceNextNodeMergeState': ('sequenceNextNode', 'MergeState'), 'kurtSampMergeState': ('kurtSamp', 'MergeState'), 'sumKahanMergeState': ('sumKahan', 'MergeState'), 'quantileBFloat16WeightedMergeState': ('quantileBFloat16Weighted', 'MergeState'), 'first_valueMergeState': ('first_value', 'MergeState'), 'largestTriangleThreeBucketsMergeState': ('largestTriangleThreeBuckets', 'MergeState'), 'groupBitAndMergeState': ('groupBitAnd', 'MergeState'), 'quantileExactLowMergeState': ('quantileExactLow', 'MergeState'), 'anyMergeState': ('any', 'MergeState'), 'maxIntersectionsPositionMergeState': ('maxIntersectionsPosition', 'MergeState'), 'stddevSampMergeState': ('stddevSamp', 'MergeState'), 'uniqHLL12MergeState': ('uniqHLL12', 'MergeState'), 'quantilesTimingWeightedMergeState': ('quantilesTimingWeighted', 'MergeState'), 'uniqUpToMergeState': ('uniqUpTo', 'MergeState'), 'sumMergeState': ('sum', 'MergeState'), 'groupBitmapXorMergeState': ('groupBitmapXor', 'MergeState'), 'groupArraySampleMergeState': ('groupArraySample', 'MergeState'), 'theilsUMergeState': ('theilsU', 'MergeState'), 'medianMergeState': ('median', 'MergeState'), 'cramersVMergeState': ('cramersV', 'MergeState'), 'skewPopMergeState': ('skewPop', 'MergeState'), 'windowFunnelMergeState': ('windowFunnel', 'MergeState'), 'quantileBFloat16MergeState': ('quantileBFloat16', 'MergeState'), 'welchTTestMergeState': ('welchTTest', 'MergeState'), 'quantilesExactWeightedMergeState': ('quantilesExactWeighted', 'MergeState'), 'groupBitmapAndMergeState': ('groupBitmapAnd', 'MergeState'), 'sumWithOverflowMergeState': ('sumWithOverflow', 'MergeState'), 'maxMapMergeState': ('maxMap', 'MergeState'), 'covarSampMergeState': ('covarSamp', 'MergeState'), 'quantilesTimingMergeState': ('quantilesTiming', 'MergeState'), 'uniqCombinedMergeState': ('uniqCombined', 'MergeState'), 'studentTTestOrDefault': ('studentTTest', 'OrDefault'), 'corrOrDefault': ('corr', 'OrDefault'), 'covarPopOrDefault': ('covarPop', 'OrDefault'), 'avgWeightedOrDefault': ('avgWeighted', 'OrDefault'), 'quantilesExactExclusiveOrDefault': ('quantilesExactExclusive', 'OrDefault'), 'sumCountOrDefault': ('sumCount', 'OrDefault'), 'quantilesBFloat16OrDefault': ('quantilesBFloat16', 'OrDefault'), 'argMaxOrDefault': ('argMax', 'OrDefault'), 'simpleLinearRegressionOrDefault': ('simpleLinearRegression', 'OrDefault'), 'quantileExactInclusiveOrDefault': ('quantileExactInclusive', 'OrDefault'), 'stochasticLogisticRegressionOrDefault': ('stochasticLogisticRegression', 'OrDefault'), 'stddevPopOrDefault': ('stddevPop', 'OrDefault'), 'rankCorrOrDefault': ('rankCorr', 'OrDefault'), 'quantilesOrDefault': ('quantiles', 'OrDefault'), 'approx_top_sumOrDefault': ('approx_top_sum', 'OrDefault'), 'sequenceCountOrDefault': ('sequenceCount', 'OrDefault'), 'quantilesExactHighOrDefault': ('quantilesExactHigh', 'OrDefault'), 'contingencyOrDefault': ('contingency', 'OrDefault'), 'quantilesBFloat16WeightedOrDefault': ('quantilesBFloat16Weighted', 'OrDefault'), 'anyHeavyOrDefault': ('anyHeavy', 'OrDefault'), 'topKWeightedOrDefault': ('topKWeighted', 'OrDefault'), 'maxIntersectionsOrDefault': ('maxIntersections', 'OrDefault'), 'minOrDefault': ('min', 'OrDefault'), 'quantileTimingWeightedOrDefault': ('quantileTimingWeighted', 'OrDefault'), 'kurtPopOrDefault': ('kurtPop', 'OrDefault'), 'uniqCombined64OrDefault': ('uniqCombined64', 'OrDefault'), 'quantileGKOrDefault': ('quantileGK', 'OrDefault'), 'skewSampOrDefault': ('skewSamp', 'OrDefault'), 'boundingRatioOrDefault': ('boundingRatio', 'OrDefault'), 'quantilesTDigestWeightedOrDefault': ('quantilesTDigestWeighted', 'OrDefault'), 'minMapOrDefault': ('minMap', 'OrDefault'), 'maxOrDefault': ('max', 'OrDefault'), 'quantilesTDigestOrDefault': ('quantilesTDigest', 'OrDefault'), 'mannWhitneyUTestOrDefault': ('mannWhitneyUTest', 'OrDefault'), 'uniqExactOrDefault': ('uniqExact', 'OrDefault'), 'avgOrDefault': ('avg', 'OrDefault'), 'uniqThetaOrDefault': ('uniqTheta', 'OrDefault'), 'groupArrayInsertAtOrDefault': ('groupArrayInsertAt', 'OrDefault'), 'categoricalInformationValueOrDefault': ('categoricalInformationValue', 'OrDefault'), 'quantileExactWeightedOrDefault': ('quantileExactWeighted', 'OrDefault'), 'quantileTDigestWeightedOrDefault': ('quantileTDigestWeighted', 'OrDefault'), 'groupBitmapOrDefault': ('groupBitmap', 'OrDefault'), 'groupUniqArrayOrDefault': ('groupUniqArray', 'OrDefault'), 'intervalLengthSumOrDefault': ('intervalLengthSum', 'OrDefault'), 'groupBitmapOrOrDefault': ('groupBitmapOr', 'OrDefault'), 'stochasticLinearRegressionOrDefault': ('stochasticLinearRegression', 'OrDefault'), 'anyLastOrDefault': ('anyLast', 'OrDefault'), 'quantilesDeterministicOrDefault': ('quantilesDeterministic', 'OrDefault'), 'varSampOrDefault': ('varSamp', 'OrDefault'), 'quantileExactHighOrDefault': ('quantileExactHigh', 'OrDefault'), 'quantilesExactLowOrDefault': ('quantilesExactLow', 'OrDefault'), 'varPopOrDefault': ('varPop', 'OrDefault'), 'exponentialMovingAverageOrDefault': ('exponentialMovingAverage', 'OrDefault'), 'deltaSumOrDefault': ('deltaSum', 'OrDefault'), 'uniqOrDefault': ('uniq', 'OrDefault'), 'quantileOrDefault': ('quantile', 'OrDefault'), 'argMinOrDefault': ('argMin', 'OrDefault'), 'retentionOrDefault': ('retention', 'OrDefault'), 'topKOrDefault': ('topK', 'OrDefault'), 'groupArrayOrDefault': ('groupArray', 'OrDefault'), 'groupArrayMovingAvgOrDefault': ('groupArrayMovingAvg', 'OrDefault'), 'groupConcatOrDefault': ('groupConcat', 'OrDefault'), 'quantilesExactOrDefault': ('quantilesExact', 'OrDefault'), 'sumMapOrDefault': ('sumMap', 'OrDefault'), 'quantileExactOrDefault': ('quantileExact', 'OrDefault'), 'last_valueOrDefault': ('last_value', 'OrDefault'), 'quantilesGKOrDefault': ('quantilesGK', 'OrDefault'), 'deltaSumTimestampOrDefault': ('deltaSumTimestamp', 'OrDefault'), 'groupArrayLastOrDefault': ('groupArrayLast', 'OrDefault'), 'sparkBarOrDefault': ('sparkBar', 'OrDefault'), 'entropyOrDefault': ('entropy', 'OrDefault'), 'quantileDeterministicOrDefault': ('quantileDeterministic', 'OrDefault'), 'groupArrayMovingSumOrDefault': ('groupArrayMovingSum', 'OrDefault'), 'sequenceMatchOrDefault': ('sequenceMatch', 'OrDefault'), 'quantileTimingOrDefault': ('quantileTiming', 'OrDefault'), 'groupBitOrOrDefault': ('groupBitOr', 'OrDefault'), 'exponentialTimeDecayedAvgOrDefault': ('exponentialTimeDecayedAvg', 'OrDefault'), 'cramersVBiasCorrectedOrDefault': ('cramersVBiasCorrected', 'OrDefault'), 'kolmogorovSmirnovTestOrDefault': ('kolmogorovSmirnovTest', 'OrDefault'), 'groupBitXorOrDefault': ('groupBitXor', 'OrDefault'), 'meanZTestOrDefault': ('meanZTest', 'OrDefault'), 'quantileInterpolatedWeightedOrDefault': ('quantileInterpolatedWeighted', 'OrDefault'), 'quantileTDigestOrDefault': ('quantileTDigest', 'OrDefault'), 'quantilesInterpolatedWeightedOrDefault': ('quantilesInterpolatedWeighted', 'OrDefault'), 'histogramOrDefault': ('histogram', 'OrDefault'), 'countOrDefault': ('count', 'OrDefault'), 'sequenceNextNodeOrDefault': ('sequenceNextNode', 'OrDefault'), 'kurtSampOrDefault': ('kurtSamp', 'OrDefault'), 'sumKahanOrDefault': ('sumKahan', 'OrDefault'), 'quantileBFloat16WeightedOrDefault': ('quantileBFloat16Weighted', 'OrDefault'), 'first_valueOrDefault': ('first_value', 'OrDefault'), 'largestTriangleThreeBucketsOrDefault': ('largestTriangleThreeBuckets', 'OrDefault'), 'groupBitAndOrDefault': ('groupBitAnd', 'OrDefault'), 'quantileExactLowOrDefault': ('quantileExactLow', 'OrDefault'), 'anyOrDefault': ('any', 'OrDefault'), 'maxIntersectionsPositionOrDefault': ('maxIntersectionsPosition', 'OrDefault'), 'stddevSampOrDefault': ('stddevSamp', 'OrDefault'), 'uniqHLL12OrDefault': ('uniqHLL12', 'OrDefault'), 'quantilesTimingWeightedOrDefault': ('quantilesTimingWeighted', 'OrDefault'), 'uniqUpToOrDefault': ('uniqUpTo', 'OrDefault'), 'sumOrDefault': ('sum', 'OrDefault'), 'groupBitmapXorOrDefault': ('groupBitmapXor', 'OrDefault'), 'groupArraySampleOrDefault': ('groupArraySample', 'OrDefault'), 'theilsUOrDefault': ('theilsU', 'OrDefault'), 'medianOrDefault': ('median', 'OrDefault'), 'cramersVOrDefault': ('cramersV', 'OrDefault'), 'skewPopOrDefault': ('skewPop', 'OrDefault'), 'windowFunnelOrDefault': ('windowFunnel', 'OrDefault'), 'quantileBFloat16OrDefault': ('quantileBFloat16', 'OrDefault'), 'welchTTestOrDefault': ('welchTTest', 'OrDefault'), 'quantilesExactWeightedOrDefault': ('quantilesExactWeighted', 'OrDefault'), 'groupBitmapAndOrDefault': ('groupBitmapAnd', 'OrDefault'), 'sumWithOverflowOrDefault': ('sumWithOverflow', 'OrDefault'), 'maxMapOrDefault': ('maxMap', 'OrDefault'), 'covarSampOrDefault': ('covarSamp', 'OrDefault'), 'quantilesTimingOrDefault': ('quantilesTiming', 'OrDefault'), 'uniqCombinedOrDefault': ('uniqCombined', 'OrDefault'), 'studentTTestDistinct': ('studentTTest', 'Distinct'), 'corrDistinct': ('corr', 'Distinct'), 'covarPopDistinct': ('covarPop', 'Distinct'), 'avgWeightedDistinct': ('avgWeighted', 'Distinct'), 'quantilesExactExclusiveDistinct': ('quantilesExactExclusive', 'Distinct'), 'sumCountDistinct': ('sumCount', 'Distinct'), 'quantilesBFloat16Distinct': ('quantilesBFloat16', 'Distinct'), 'argMaxDistinct': ('argMax', 'Distinct'), 'simpleLinearRegressionDistinct': ('simpleLinearRegression', 'Distinct'), 'quantileExactInclusiveDistinct': ('quantileExactInclusive', 'Distinct'), 'stochasticLogisticRegressionDistinct': ('stochasticLogisticRegression', 'Distinct'), 'stddevPopDistinct': ('stddevPop', 'Distinct'), 'rankCorrDistinct': ('rankCorr', 'Distinct'), 'quantilesDistinct': ('quantiles', 'Distinct'), 'approx_top_sumDistinct': ('approx_top_sum', 'Distinct'), 'sequenceCountDistinct': ('sequenceCount', 'Distinct'), 'quantilesExactHighDistinct': ('quantilesExactHigh', 'Distinct'), 'contingencyDistinct': ('contingency', 'Distinct'), 'quantilesBFloat16WeightedDistinct': ('quantilesBFloat16Weighted', 'Distinct'), 'anyHeavyDistinct': ('anyHeavy', 'Distinct'), 'topKWeightedDistinct': ('topKWeighted', 'Distinct'), 'maxIntersectionsDistinct': ('maxIntersections', 'Distinct'), 'minDistinct': ('min', 'Distinct'), 'quantileTimingWeightedDistinct': ('quantileTimingWeighted', 'Distinct'), 'kurtPopDistinct': ('kurtPop', 'Distinct'), 'uniqCombined64Distinct': ('uniqCombined64', 'Distinct'), 'quantileGKDistinct': ('quantileGK', 'Distinct'), 'skewSampDistinct': ('skewSamp', 'Distinct'), 'boundingRatioDistinct': ('boundingRatio', 'Distinct'), 'quantilesTDigestWeightedDistinct': ('quantilesTDigestWeighted', 'Distinct'), 'minMapDistinct': ('minMap', 'Distinct'), 'maxDistinct': ('max', 'Distinct'), 'quantilesTDigestDistinct': ('quantilesTDigest', 'Distinct'), 'mannWhitneyUTestDistinct': ('mannWhitneyUTest', 'Distinct'), 'uniqExactDistinct': ('uniqExact', 'Distinct'), 'avgDistinct': ('avg', 'Distinct'), 'uniqThetaDistinct': ('uniqTheta', 'Distinct'), 'groupArrayInsertAtDistinct': ('groupArrayInsertAt', 'Distinct'), 'categoricalInformationValueDistinct': ('categoricalInformationValue', 'Distinct'), 'quantileExactWeightedDistinct': ('quantileExactWeighted', 'Distinct'), 'quantileTDigestWeightedDistinct': ('quantileTDigestWeighted', 'Distinct'), 'groupBitmapDistinct': ('groupBitmap', 'Distinct'), 'groupUniqArrayDistinct': ('groupUniqArray', 'Distinct'), 'intervalLengthSumDistinct': ('intervalLengthSum', 'Distinct'), 'groupBitmapOrDistinct': ('groupBitmapOr', 'Distinct'), 'stochasticLinearRegressionDistinct': ('stochasticLinearRegression', 'Distinct'), 'anyLastDistinct': ('anyLast', 'Distinct'), 'quantilesDeterministicDistinct': ('quantilesDeterministic', 'Distinct'), 'varSampDistinct': ('varSamp', 'Distinct'), 'quantileExactHighDistinct': ('quantileExactHigh', 'Distinct'), 'quantilesExactLowDistinct': ('quantilesExactLow', 'Distinct'), 'varPopDistinct': ('varPop', 'Distinct'), 'exponentialMovingAverageDistinct': ('exponentialMovingAverage', 'Distinct'), 'deltaSumDistinct': ('deltaSum', 'Distinct'), 'uniqDistinct': ('uniq', 'Distinct'), 'quantileDistinct': ('quantile', 'Distinct'), 'argMinDistinct': ('argMin', 'Distinct'), 'retentionDistinct': ('retention', 'Distinct'), 'topKDistinct': ('topK', 'Distinct'), 'groupArrayDistinct': ('groupArray', 'Distinct'), 'groupArrayMovingAvgDistinct': ('groupArrayMovingAvg', 'Distinct'), 'groupConcatDistinct': ('groupConcat', 'Distinct'), 'quantilesExactDistinct': ('quantilesExact', 'Distinct'), 'sumMapDistinct': ('sumMap', 'Distinct'), 'quantileExactDistinct': ('quantileExact', 'Distinct'), 'last_valueDistinct': ('last_value', 'Distinct'), 'quantilesGKDistinct': ('quantilesGK', 'Distinct'), 'deltaSumTimestampDistinct': ('deltaSumTimestamp', 'Distinct'), 'groupArrayLastDistinct': ('groupArrayLast', 'Distinct'), 'sparkBarDistinct': ('sparkBar', 'Distinct'), 'entropyDistinct': ('entropy', 'Distinct'), 'quantileDeterministicDistinct': ('quantileDeterministic', 'Distinct'), 'groupArrayMovingSumDistinct': ('groupArrayMovingSum', 'Distinct'), 'sequenceMatchDistinct': ('sequenceMatch', 'Distinct'), 'quantileTimingDistinct': ('quantileTiming', 'Distinct'), 'groupBitOrDistinct': ('groupBitOr', 'Distinct'), 'exponentialTimeDecayedAvgDistinct': ('exponentialTimeDecayedAvg', 'Distinct'), 'cramersVBiasCorrectedDistinct': ('cramersVBiasCorrected', 'Distinct'), 'kolmogorovSmirnovTestDistinct': ('kolmogorovSmirnovTest', 'Distinct'), 'groupBitXorDistinct': ('groupBitXor', 'Distinct'), 'meanZTestDistinct': ('meanZTest', 'Distinct'), 'quantileInterpolatedWeightedDistinct': ('quantileInterpolatedWeighted', 'Distinct'), 'quantileTDigestDistinct': ('quantileTDigest', 'Distinct'), 'quantilesInterpolatedWeightedDistinct': ('quantilesInterpolatedWeighted', 'Distinct'), 'histogramDistinct': ('histogram', 'Distinct'), 'countDistinct': ('count', 'Distinct'), 'sequenceNextNodeDistinct': ('sequenceNextNode', 'Distinct'), 'kurtSampDistinct': ('kurtSamp', 'Distinct'), 'sumKahanDistinct': ('sumKahan', 'Distinct'), 'quantileBFloat16WeightedDistinct': ('quantileBFloat16Weighted', 'Distinct'), 'first_valueDistinct': ('first_value', 'Distinct'), 'largestTriangleThreeBucketsDistinct': ('largestTriangleThreeBuckets', 'Distinct'), 'groupBitAndDistinct': ('groupBitAnd', 'Distinct'), 'quantileExactLowDistinct': ('quantileExactLow', 'Distinct'), 'anyDistinct': ('any', 'Distinct'), 'maxIntersectionsPositionDistinct': ('maxIntersectionsPosition', 'Distinct'), 'stddevSampDistinct': ('stddevSamp', 'Distinct'), 'uniqHLL12Distinct': ('uniqHLL12', 'Distinct'), 'quantilesTimingWeightedDistinct': ('quantilesTimingWeighted', 'Distinct'), 'uniqUpToDistinct': ('uniqUpTo', 'Distinct'), 'sumDistinct': ('sum', 'Distinct'), 'groupBitmapXorDistinct': ('groupBitmapXor', 'Distinct'), 'groupArraySampleDistinct': ('groupArraySample', 'Distinct'), 'theilsUDistinct': ('theilsU', 'Distinct'), 'medianDistinct': ('median', 'Distinct'), 'cramersVDistinct': ('cramersV', 'Distinct'), 'skewPopDistinct': ('skewPop', 'Distinct'), 'windowFunnelDistinct': ('windowFunnel', 'Distinct'), 'quantileBFloat16Distinct': ('quantileBFloat16', 'Distinct'), 'welchTTestDistinct': ('welchTTest', 'Distinct'), 'quantilesExactWeightedDistinct': ('quantilesExactWeighted', 'Distinct'), 'groupBitmapAndDistinct': ('groupBitmapAnd', 'Distinct'), 'sumWithOverflowDistinct': ('sumWithOverflow', 'Distinct'), 'maxMapDistinct': ('maxMap', 'Distinct'), 'covarSampDistinct': ('covarSamp', 'Distinct'), 'quantilesTimingDistinct': ('quantilesTiming', 'Distinct'), 'uniqCombinedDistinct': ('uniqCombined', 'Distinct'), 'studentTTestResample': ('studentTTest', 'Resample'), 'corrResample': ('corr', 'Resample'), 'covarPopResample': ('covarPop', 'Resample'), 'avgWeightedResample': ('avgWeighted', 'Resample'), 'quantilesExactExclusiveResample': ('quantilesExactExclusive', 'Resample'), 'sumCountResample': ('sumCount', 'Resample'), 'quantilesBFloat16Resample': ('quantilesBFloat16', 'Resample'), 'argMaxResample': ('argMax', 'Resample'), 'simpleLinearRegressionResample': ('simpleLinearRegression', 'Resample'), 'quantileExactInclusiveResample': ('quantileExactInclusive', 'Resample'), 'stochasticLogisticRegressionResample': ('stochasticLogisticRegression', 'Resample'), 'stddevPopResample': ('stddevPop', 'Resample'), 'rankCorrResample': ('rankCorr', 'Resample'), 'quantilesResample': ('quantiles', 'Resample'), 'approx_top_sumResample': ('approx_top_sum', 'Resample'), 'sequenceCountResample': ('sequenceCount', 'Resample'), 'quantilesExactHighResample': ('quantilesExactHigh', 'Resample'), 'contingencyResample': ('contingency', 'Resample'), 'quantilesBFloat16WeightedResample': ('quantilesBFloat16Weighted', 'Resample'), 'anyHeavyResample': ('anyHeavy', 'Resample'), 'topKWeightedResample': ('topKWeighted', 'Resample'), 'maxIntersectionsResample': ('maxIntersections', 'Resample'), 'minResample': ('min', 'Resample'), 'quantileTimingWeightedResample': ('quantileTimingWeighted', 'Resample'), 'kurtPopResample': ('kurtPop', 'Resample'), 'uniqCombined64Resample': ('uniqCombined64', 'Resample'), 'quantileGKResample': ('quantileGK', 'Resample'), 'skewSampResample': ('skewSamp', 'Resample'), 'boundingRatioResample': ('boundingRatio', 'Resample'), 'quantilesTDigestWeightedResample': ('quantilesTDigestWeighted', 'Resample'), 'minMapResample': ('minMap', 'Resample'), 'maxResample': ('max', 'Resample'), 'quantilesTDigestResample': ('quantilesTDigest', 'Resample'), 'mannWhitneyUTestResample': ('mannWhitneyUTest', 'Resample'), 'uniqExactResample': ('uniqExact', 'Resample'), 'avgResample': ('avg', 'Resample'), 'uniqThetaResample': ('uniqTheta', 'Resample'), 'groupArrayInsertAtResample': ('groupArrayInsertAt', 'Resample'), 'categoricalInformationValueResample': ('categoricalInformationValue', 'Resample'), 'quantileExactWeightedResample': ('quantileExactWeighted', 'Resample'), 'quantileTDigestWeightedResample': ('quantileTDigestWeighted', 'Resample'), 'groupBitmapResample': ('groupBitmap', 'Resample'), 'groupUniqArrayResample': ('groupUniqArray', 'Resample'), 'intervalLengthSumResample': ('intervalLengthSum', 'Resample'), 'groupBitmapOrResample': ('groupBitmapOr', 'Resample'), 'stochasticLinearRegressionResample': ('stochasticLinearRegression', 'Resample'), 'anyLastResample': ('anyLast', 'Resample'), 'quantilesDeterministicResample': ('quantilesDeterministic', 'Resample'), 'varSampResample': ('varSamp', 'Resample'), 'quantileExactHighResample': ('quantileExactHigh', 'Resample'), 'quantilesExactLowResample': ('quantilesExactLow', 'Resample'), 'varPopResample': ('varPop', 'Resample'), 'exponentialMovingAverageResample': ('exponentialMovingAverage', 'Resample'), 'deltaSumResample': ('deltaSum', 'Resample'), 'uniqResample': ('uniq', 'Resample'), 'quantileResample': ('quantile', 'Resample'), 'argMinResample': ('argMin', 'Resample'), 'retentionResample': ('retention', 'Resample'), 'topKResample': ('topK', 'Resample'), 'groupArrayResample': ('groupArray', 'Resample'), 'groupArrayMovingAvgResample': ('groupArrayMovingAvg', 'Resample'), 'groupConcatResample': ('groupConcat', 'Resample'), 'quantilesExactResample': ('quantilesExact', 'Resample'), 'sumMapResample': ('sumMap', 'Resample'), 'quantileExactResample': ('quantileExact', 'Resample'), 'last_valueResample': ('last_value', 'Resample'), 'quantilesGKResample': ('quantilesGK', 'Resample'), 'deltaSumTimestampResample': ('deltaSumTimestamp', 'Resample'), 'groupArrayLastResample': ('groupArrayLast', 'Resample'), 'sparkBarResample': ('sparkBar', 'Resample'), 'entropyResample': ('entropy', 'Resample'), 'quantileDeterministicResample': ('quantileDeterministic', 'Resample'), 'groupArrayMovingSumResample': ('groupArrayMovingSum', 'Resample'), 'sequenceMatchResample': ('sequenceMatch', 'Resample'), 'quantileTimingResample': ('quantileTiming', 'Resample'), 'groupBitOrResample': ('groupBitOr', 'Resample'), 'exponentialTimeDecayedAvgResample': ('exponentialTimeDecayedAvg', 'Resample'), 'cramersVBiasCorrectedResample': ('cramersVBiasCorrected', 'Resample'), 'kolmogorovSmirnovTestResample': ('kolmogorovSmirnovTest', 'Resample'), 'groupBitXorResample': ('groupBitXor', 'Resample'), 'meanZTestResample': ('meanZTest', 'Resample'), 'quantileInterpolatedWeightedResample': ('quantileInterpolatedWeighted', 'Resample'), 'quantileTDigestResample': ('quantileTDigest', 'Resample'), 'quantilesInterpolatedWeightedResample': ('quantilesInterpolatedWeighted', 'Resample'), 'histogramResample': ('histogram', 'Resample'), 'countResample': ('count', 'Resample'), 'sequenceNextNodeResample': ('sequenceNextNode', 'Resample'), 'kurtSampResample': ('kurtSamp', 'Resample'), 'sumKahanResample': ('sumKahan', 'Resample'), 'quantileBFloat16WeightedResample': ('quantileBFloat16Weighted', 'Resample'), 'first_valueResample': ('first_value', 'Resample'), 'largestTriangleThreeBucketsResample': ('largestTriangleThreeBuckets', 'Resample'), 'groupBitAndResample': ('groupBitAnd', 'Resample'), 'quantileExactLowResample': ('quantileExactLow', 'Resample'), 'anyResample': ('any', 'Resample'), 'maxIntersectionsPositionResample': ('maxIntersectionsPosition', 'Resample'), 'stddevSampResample': ('stddevSamp', 'Resample'), 'uniqHLL12Resample': ('uniqHLL12', 'Resample'), 'quantilesTimingWeightedResample': ('quantilesTimingWeighted', 'Resample'), 'uniqUpToResample': ('uniqUpTo', 'Resample'), 'sumResample': ('sum', 'Resample'), 'groupBitmapXorResample': ('groupBitmapXor', 'Resample'), 'groupArraySampleResample': ('groupArraySample', 'Resample'), 'theilsUResample': ('theilsU', 'Resample'), 'medianResample': ('median', 'Resample'), 'cramersVResample': ('cramersV', 'Resample'), 'skewPopResample': ('skewPop', 'Resample'), 'windowFunnelResample': ('windowFunnel', 'Resample'), 'quantileBFloat16Resample': ('quantileBFloat16', 'Resample'), 'welchTTestResample': ('welchTTest', 'Resample'), 'quantilesExactWeightedResample': ('quantilesExactWeighted', 'Resample'), 'groupBitmapAndResample': ('groupBitmapAnd', 'Resample'), 'sumWithOverflowResample': ('sumWithOverflow', 'Resample'), 'maxMapResample': ('maxMap', 'Resample'), 'covarSampResample': ('covarSamp', 'Resample'), 'quantilesTimingResample': ('quantilesTiming', 'Resample'), 'uniqCombinedResample': ('uniqCombined', 'Resample'), 'studentTTestArrayIf': ('studentTTest', 'ArrayIf'), 'corrArrayIf': ('corr', 'ArrayIf'), 'covarPopArrayIf': ('covarPop', 'ArrayIf'), 'avgWeightedArrayIf': ('avgWeighted', 'ArrayIf'), 'quantilesExactExclusiveArrayIf': ('quantilesExactExclusive', 'ArrayIf'), 'sumCountArrayIf': ('sumCount', 'ArrayIf'), 'quantilesBFloat16ArrayIf': ('quantilesBFloat16', 'ArrayIf'), 'argMaxArrayIf': ('argMax', 'ArrayIf'), 'simpleLinearRegressionArrayIf': ('simpleLinearRegression', 'ArrayIf'), 'quantileExactInclusiveArrayIf': ('quantileExactInclusive', 'ArrayIf'), 'stochasticLogisticRegressionArrayIf': ('stochasticLogisticRegression', 'ArrayIf'), 'stddevPopArrayIf': ('stddevPop', 'ArrayIf'), 'rankCorrArrayIf': ('rankCorr', 'ArrayIf'), 'quantilesArrayIf': ('quantiles', 'ArrayIf'), 'approx_top_sumArrayIf': ('approx_top_sum', 'ArrayIf'), 'sequenceCountArrayIf': ('sequenceCount', 'ArrayIf'), 'quantilesExactHighArrayIf': ('quantilesExactHigh', 'ArrayIf'), 'contingencyArrayIf': ('contingency', 'ArrayIf'), 'quantilesBFloat16WeightedArrayIf': ('quantilesBFloat16Weighted', 'ArrayIf'), 'anyHeavyArrayIf': ('anyHeavy', 'ArrayIf'), 'topKWeightedArrayIf': ('topKWeighted', 'ArrayIf'), 'maxIntersectionsArrayIf': ('maxIntersections', 'ArrayIf'), 'minArrayIf': ('min', 'ArrayIf'), 'quantileTimingWeightedArrayIf': ('quantileTimingWeighted', 'ArrayIf'), 'kurtPopArrayIf': ('kurtPop', 'ArrayIf'), 'uniqCombined64ArrayIf': ('uniqCombined64', 'ArrayIf'), 'quantileGKArrayIf': ('quantileGK', 'ArrayIf'), 'skewSampArrayIf': ('skewSamp', 'ArrayIf'), 'boundingRatioArrayIf': ('boundingRatio', 'ArrayIf'), 'quantilesTDigestWeightedArrayIf': ('quantilesTDigestWeighted', 'ArrayIf'), 'minMapArrayIf': ('minMap', 'ArrayIf'), 'maxArrayIf': ('max', 'ArrayIf'), 'quantilesTDigestArrayIf': ('quantilesTDigest', 'ArrayIf'), 'mannWhitneyUTestArrayIf': ('mannWhitneyUTest', 'ArrayIf'), 'uniqExactArrayIf': ('uniqExact', 'ArrayIf'), 'avgArrayIf': ('avg', 'ArrayIf'), 'uniqThetaArrayIf': ('uniqTheta', 'ArrayIf'), 'groupArrayInsertAtArrayIf': ('groupArrayInsertAt', 'ArrayIf'), 'categoricalInformationValueArrayIf': ('categoricalInformationValue', 'ArrayIf'), 'quantileExactWeightedArrayIf': ('quantileExactWeighted', 'ArrayIf'), 'quantileTDigestWeightedArrayIf': ('quantileTDigestWeighted', 'ArrayIf'), 'groupBitmapArrayIf': ('groupBitmap', 'ArrayIf'), 'groupUniqArrayArrayIf': ('groupUniqArray', 'ArrayIf'), 'intervalLengthSumArrayIf': ('intervalLengthSum', 'ArrayIf'), 'groupBitmapOrArrayIf': ('groupBitmapOr', 'ArrayIf'), 'stochasticLinearRegressionArrayIf': ('stochasticLinearRegression', 'ArrayIf'), 'anyLastArrayIf': ('anyLast', 'ArrayIf'), 'quantilesDeterministicArrayIf': ('quantilesDeterministic', 'ArrayIf'), 'varSampArrayIf': ('varSamp', 'ArrayIf'), 'quantileExactHighArrayIf': ('quantileExactHigh', 'ArrayIf'), 'quantilesExactLowArrayIf': ('quantilesExactLow', 'ArrayIf'), 'varPopArrayIf': ('varPop', 'ArrayIf'), 'exponentialMovingAverageArrayIf': ('exponentialMovingAverage', 'ArrayIf'), 'deltaSumArrayIf': ('deltaSum', 'ArrayIf'), 'uniqArrayIf': ('uniq', 'ArrayIf'), 'quantileArrayIf': ('quantile', 'ArrayIf'), 'argMinArrayIf': ('argMin', 'ArrayIf'), 'retentionArrayIf': ('retention', 'ArrayIf'), 'topKArrayIf': ('topK', 'ArrayIf'), 'groupArrayArrayIf': ('groupArray', 'ArrayIf'), 'groupArrayMovingAvgArrayIf': ('groupArrayMovingAvg', 'ArrayIf'), 'groupConcatArrayIf': ('groupConcat', 'ArrayIf'), 'quantilesExactArrayIf': ('quantilesExact', 'ArrayIf'), 'sumMapArrayIf': ('sumMap', 'ArrayIf'), 'quantileExactArrayIf': ('quantileExact', 'ArrayIf'), 'last_valueArrayIf': ('last_value', 'ArrayIf'), 'quantilesGKArrayIf': ('quantilesGK', 'ArrayIf'), 'deltaSumTimestampArrayIf': ('deltaSumTimestamp', 'ArrayIf'), 'groupArrayLastArrayIf': ('groupArrayLast', 'ArrayIf'), 'sparkBarArrayIf': ('sparkBar', 'ArrayIf'), 'entropyArrayIf': ('entropy', 'ArrayIf'), 'quantileDeterministicArrayIf': ('quantileDeterministic', 'ArrayIf'), 'groupArrayMovingSumArrayIf': ('groupArrayMovingSum', 'ArrayIf'), 'sequenceMatchArrayIf': ('sequenceMatch', 'ArrayIf'), 'quantileTimingArrayIf': ('quantileTiming', 'ArrayIf'), 'groupBitOrArrayIf': ('groupBitOr', 'ArrayIf'), 'exponentialTimeDecayedAvgArrayIf': ('exponentialTimeDecayedAvg', 'ArrayIf'), 'cramersVBiasCorrectedArrayIf': ('cramersVBiasCorrected', 'ArrayIf'), 'kolmogorovSmirnovTestArrayIf': ('kolmogorovSmirnovTest', 'ArrayIf'), 'groupBitXorArrayIf': ('groupBitXor', 'ArrayIf'), 'meanZTestArrayIf': ('meanZTest', 'ArrayIf'), 'quantileInterpolatedWeightedArrayIf': ('quantileInterpolatedWeighted', 'ArrayIf'), 'quantileTDigestArrayIf': ('quantileTDigest', 'ArrayIf'), 'quantilesInterpolatedWeightedArrayIf': ('quantilesInterpolatedWeighted', 'ArrayIf'), 'histogramArrayIf': ('histogram', 'ArrayIf'), 'countArrayIf': ('count', 'ArrayIf'), 'sequenceNextNodeArrayIf': ('sequenceNextNode', 'ArrayIf'), 'kurtSampArrayIf': ('kurtSamp', 'ArrayIf'), 'sumKahanArrayIf': ('sumKahan', 'ArrayIf'), 'quantileBFloat16WeightedArrayIf': ('quantileBFloat16Weighted', 'ArrayIf'), 'first_valueArrayIf': ('first_value', 'ArrayIf'), 'largestTriangleThreeBucketsArrayIf': ('largestTriangleThreeBuckets', 'ArrayIf'), 'groupBitAndArrayIf': ('groupBitAnd', 'ArrayIf'), 'quantileExactLowArrayIf': ('quantileExactLow', 'ArrayIf'), 'anyArrayIf': ('any', 'ArrayIf'), 'maxIntersectionsPositionArrayIf': ('maxIntersectionsPosition', 'ArrayIf'), 'stddevSampArrayIf': ('stddevSamp', 'ArrayIf'), 'uniqHLL12ArrayIf': ('uniqHLL12', 'ArrayIf'), 'quantilesTimingWeightedArrayIf': ('quantilesTimingWeighted', 'ArrayIf'), 'uniqUpToArrayIf': ('uniqUpTo', 'ArrayIf'), 'sumArrayIf': ('sum', 'ArrayIf'), 'groupBitmapXorArrayIf': ('groupBitmapXor', 'ArrayIf'), 'groupArraySampleArrayIf': ('groupArraySample', 'ArrayIf'), 'theilsUArrayIf': ('theilsU', 'ArrayIf'), 'medianArrayIf': ('median', 'ArrayIf'), 'cramersVArrayIf': ('cramersV', 'ArrayIf'), 'skewPopArrayIf': ('skewPop', 'ArrayIf'), 'windowFunnelArrayIf': ('windowFunnel', 'ArrayIf'), 'quantileBFloat16ArrayIf': ('quantileBFloat16', 'ArrayIf'), 'welchTTestArrayIf': ('welchTTest', 'ArrayIf'), 'quantilesExactWeightedArrayIf': ('quantilesExactWeighted', 'ArrayIf'), 'groupBitmapAndArrayIf': ('groupBitmapAnd', 'ArrayIf'), 'sumWithOverflowArrayIf': ('sumWithOverflow', 'ArrayIf'), 'maxMapArrayIf': ('maxMap', 'ArrayIf'), 'covarSampArrayIf': ('covarSamp', 'ArrayIf'), 'quantilesTimingArrayIf': ('quantilesTiming', 'ArrayIf'), 'uniqCombinedArrayIf': ('uniqCombined', 'ArrayIf'), 'studentTTestForEach': ('studentTTest', 'ForEach'), 'corrForEach': ('corr', 'ForEach'), 'covarPopForEach': ('covarPop', 'ForEach'), 'avgWeightedForEach': ('avgWeighted', 'ForEach'), 'quantilesExactExclusiveForEach': ('quantilesExactExclusive', 'ForEach'), 'sumCountForEach': ('sumCount', 'ForEach'), 'quantilesBFloat16ForEach': ('quantilesBFloat16', 'ForEach'), 'argMaxForEach': ('argMax', 'ForEach'), 'simpleLinearRegressionForEach': ('simpleLinearRegression', 'ForEach'), 'quantileExactInclusiveForEach': ('quantileExactInclusive', 'ForEach'), 'stochasticLogisticRegressionForEach': ('stochasticLogisticRegression', 'ForEach'), 'stddevPopForEach': ('stddevPop', 'ForEach'), 'rankCorrForEach': ('rankCorr', 'ForEach'), 'quantilesForEach': ('quantiles', 'ForEach'), 'approx_top_sumForEach': ('approx_top_sum', 'ForEach'), 'sequenceCountForEach': ('sequenceCount', 'ForEach'), 'quantilesExactHighForEach': ('quantilesExactHigh', 'ForEach'), 'contingencyForEach': ('contingency', 'ForEach'), 'quantilesBFloat16WeightedForEach': ('quantilesBFloat16Weighted', 'ForEach'), 'anyHeavyForEach': ('anyHeavy', 'ForEach'), 'topKWeightedForEach': ('topKWeighted', 'ForEach'), 'maxIntersectionsForEach': ('maxIntersections', 'ForEach'), 'minForEach': ('min', 'ForEach'), 'quantileTimingWeightedForEach': ('quantileTimingWeighted', 'ForEach'), 'kurtPopForEach': ('kurtPop', 'ForEach'), 'uniqCombined64ForEach': ('uniqCombined64', 'ForEach'), 'quantileGKForEach': ('quantileGK', 'ForEach'), 'skewSampForEach': ('skewSamp', 'ForEach'), 'boundingRatioForEach': ('boundingRatio', 'ForEach'), 'quantilesTDigestWeightedForEach': ('quantilesTDigestWeighted', 'ForEach'), 'minMapForEach': ('minMap', 'ForEach'), 'maxForEach': ('max', 'ForEach'), 'quantilesTDigestForEach': ('quantilesTDigest', 'ForEach'), 'mannWhitneyUTestForEach': ('mannWhitneyUTest', 'ForEach'), 'uniqExactForEach': ('uniqExact', 'ForEach'), 'avgForEach': ('avg', 'ForEach'), 'uniqThetaForEach': ('uniqTheta', 'ForEach'), 'groupArrayInsertAtForEach': ('groupArrayInsertAt', 'ForEach'), 'categoricalInformationValueForEach': ('categoricalInformationValue', 'ForEach'), 'quantileExactWeightedForEach': ('quantileExactWeighted', 'ForEach'), 'quantileTDigestWeightedForEach': ('quantileTDigestWeighted', 'ForEach'), 'groupBitmapForEach': ('groupBitmap', 'ForEach'), 'groupUniqArrayForEach': ('groupUniqArray', 'ForEach'), 'intervalLengthSumForEach': ('intervalLengthSum', 'ForEach'), 'groupBitmapOrForEach': ('groupBitmapOr', 'ForEach'), 'stochasticLinearRegressionForEach': ('stochasticLinearRegression', 'ForEach'), 'anyLastForEach': ('anyLast', 'ForEach'), 'quantilesDeterministicForEach': ('quantilesDeterministic', 'ForEach'), 'varSampForEach': ('varSamp', 'ForEach'), 'quantileExactHighForEach': ('quantileExactHigh', 'ForEach'), 'quantilesExactLowForEach': ('quantilesExactLow', 'ForEach'), 'varPopForEach': ('varPop', 'ForEach'), 'exponentialMovingAverageForEach': ('exponentialMovingAverage', 'ForEach'), 'deltaSumForEach': ('deltaSum', 'ForEach'), 'uniqForEach': ('uniq', 'ForEach'), 'quantileForEach': ('quantile', 'ForEach'), 'argMinForEach': ('argMin', 'ForEach'), 'retentionForEach': ('retention', 'ForEach'), 'topKForEach': ('topK', 'ForEach'), 'groupArrayForEach': ('groupArray', 'ForEach'), 'groupArrayMovingAvgForEach': ('groupArrayMovingAvg', 'ForEach'), 'groupConcatForEach': ('groupConcat', 'ForEach'), 'quantilesExactForEach': ('quantilesExact', 'ForEach'), 'sumMapForEach': ('sumMap', 'ForEach'), 'quantileExactForEach': ('quantileExact', 'ForEach'), 'last_valueForEach': ('last_value', 'ForEach'), 'quantilesGKForEach': ('quantilesGK', 'ForEach'), 'deltaSumTimestampForEach': ('deltaSumTimestamp', 'ForEach'), 'groupArrayLastForEach': ('groupArrayLast', 'ForEach'), 'sparkBarForEach': ('sparkBar', 'ForEach'), 'entropyForEach': ('entropy', 'ForEach'), 'quantileDeterministicForEach': ('quantileDeterministic', 'ForEach'), 'groupArrayMovingSumForEach': ('groupArrayMovingSum', 'ForEach'), 'sequenceMatchForEach': ('sequenceMatch', 'ForEach'), 'quantileTimingForEach': ('quantileTiming', 'ForEach'), 'groupBitOrForEach': ('groupBitOr', 'ForEach'), 'exponentialTimeDecayedAvgForEach': ('exponentialTimeDecayedAvg', 'ForEach'), 'cramersVBiasCorrectedForEach': ('cramersVBiasCorrected', 'ForEach'), 'kolmogorovSmirnovTestForEach': ('kolmogorovSmirnovTest', 'ForEach'), 'groupBitXorForEach': ('groupBitXor', 'ForEach'), 'meanZTestForEach': ('meanZTest', 'ForEach'), 'quantileInterpolatedWeightedForEach': ('quantileInterpolatedWeighted', 'ForEach'), 'quantileTDigestForEach': ('quantileTDigest', 'ForEach'), 'quantilesInterpolatedWeightedForEach': ('quantilesInterpolatedWeighted', 'ForEach'), 'histogramForEach': ('histogram', 'ForEach'), 'countForEach': ('count', 'ForEach'), 'sequenceNextNodeForEach': ('sequenceNextNode', 'ForEach'), 'kurtSampForEach': ('kurtSamp', 'ForEach'), 'sumKahanForEach': ('sumKahan', 'ForEach'), 'quantileBFloat16WeightedForEach': ('quantileBFloat16Weighted', 'ForEach'), 'first_valueForEach': ('first_value', 'ForEach'), 'largestTriangleThreeBucketsForEach': ('largestTriangleThreeBuckets', 'ForEach'), 'groupBitAndForEach': ('groupBitAnd', 'ForEach'), 'quantileExactLowForEach': ('quantileExactLow', 'ForEach'), 'anyForEach': ('any', 'ForEach'), 'maxIntersectionsPositionForEach': ('maxIntersectionsPosition', 'ForEach'), 'stddevSampForEach': ('stddevSamp', 'ForEach'), 'uniqHLL12ForEach': ('uniqHLL12', 'ForEach'), 'quantilesTimingWeightedForEach': ('quantilesTimingWeighted', 'ForEach'), 'uniqUpToForEach': ('uniqUpTo', 'ForEach'), 'sumForEach': ('sum', 'ForEach'), 'groupBitmapXorForEach': ('groupBitmapXor', 'ForEach'), 'groupArraySampleForEach': ('groupArraySample', 'ForEach'), 'theilsUForEach': ('theilsU', 'ForEach'), 'medianForEach': ('median', 'ForEach'), 'cramersVForEach': ('cramersV', 'ForEach'), 'skewPopForEach': ('skewPop', 'ForEach'), 'windowFunnelForEach': ('windowFunnel', 'ForEach'), 'quantileBFloat16ForEach': ('quantileBFloat16', 'ForEach'), 'welchTTestForEach': ('welchTTest', 'ForEach'), 'quantilesExactWeightedForEach': ('quantilesExactWeighted', 'ForEach'), 'groupBitmapAndForEach': ('groupBitmapAnd', 'ForEach'), 'sumWithOverflowForEach': ('sumWithOverflow', 'ForEach'), 'maxMapForEach': ('maxMap', 'ForEach'), 'covarSampForEach': ('covarSamp', 'ForEach'), 'quantilesTimingForEach': ('quantilesTiming', 'ForEach'), 'uniqCombinedForEach': ('uniqCombined', 'ForEach'), 'studentTTestOrNull': ('studentTTest', 'OrNull'), 'corrOrNull': ('corr', 'OrNull'), 'covarPopOrNull': ('covarPop', 'OrNull'), 'avgWeightedOrNull': ('avgWeighted', 'OrNull'), 'quantilesExactExclusiveOrNull': ('quantilesExactExclusive', 'OrNull'), 'sumCountOrNull': ('sumCount', 'OrNull'), 'quantilesBFloat16OrNull': ('quantilesBFloat16', 'OrNull'), 'argMaxOrNull': ('argMax', 'OrNull'), 'simpleLinearRegressionOrNull': ('simpleLinearRegression', 'OrNull'), 'quantileExactInclusiveOrNull': ('quantileExactInclusive', 'OrNull'), 'stochasticLogisticRegressionOrNull': ('stochasticLogisticRegression', 'OrNull'), 'stddevPopOrNull': ('stddevPop', 'OrNull'), 'rankCorrOrNull': ('rankCorr', 'OrNull'), 'quantilesOrNull': ('quantiles', 'OrNull'), 'approx_top_sumOrNull': ('approx_top_sum', 'OrNull'), 'sequenceCountOrNull': ('sequenceCount', 'OrNull'), 'quantilesExactHighOrNull': ('quantilesExactHigh', 'OrNull'), 'contingencyOrNull': ('contingency', 'OrNull'), 'quantilesBFloat16WeightedOrNull': ('quantilesBFloat16Weighted', 'OrNull'), 'anyHeavyOrNull': ('anyHeavy', 'OrNull'), 'topKWeightedOrNull': ('topKWeighted', 'OrNull'), 'maxIntersectionsOrNull': ('maxIntersections', 'OrNull'), 'minOrNull': ('min', 'OrNull'), 'quantileTimingWeightedOrNull': ('quantileTimingWeighted', 'OrNull'), 'kurtPopOrNull': ('kurtPop', 'OrNull'), 'uniqCombined64OrNull': ('uniqCombined64', 'OrNull'), 'quantileGKOrNull': ('quantileGK', 'OrNull'), 'skewSampOrNull': ('skewSamp', 'OrNull'), 'boundingRatioOrNull': ('boundingRatio', 'OrNull'), 'quantilesTDigestWeightedOrNull': ('quantilesTDigestWeighted', 'OrNull'), 'minMapOrNull': ('minMap', 'OrNull'), 'maxOrNull': ('max', 'OrNull'), 'quantilesTDigestOrNull': ('quantilesTDigest', 'OrNull'), 'mannWhitneyUTestOrNull': ('mannWhitneyUTest', 'OrNull'), 'uniqExactOrNull': ('uniqExact', 'OrNull'), 'avgOrNull': ('avg', 'OrNull'), 'uniqThetaOrNull': ('uniqTheta', 'OrNull'), 'groupArrayInsertAtOrNull': ('groupArrayInsertAt', 'OrNull'), 'categoricalInformationValueOrNull': ('categoricalInformationValue', 'OrNull'), 'quantileExactWeightedOrNull': ('quantileExactWeighted', 'OrNull'), 'quantileTDigestWeightedOrNull': ('quantileTDigestWeighted', 'OrNull'), 'groupBitmapOrNull': ('groupBitmap', 'OrNull'), 'groupUniqArrayOrNull': ('groupUniqArray', 'OrNull'), 'intervalLengthSumOrNull': ('intervalLengthSum', 'OrNull'), 'groupBitmapOrOrNull': ('groupBitmapOr', 'OrNull'), 'stochasticLinearRegressionOrNull': ('stochasticLinearRegression', 'OrNull'), 'anyLastOrNull': ('anyLast', 'OrNull'), 'quantilesDeterministicOrNull': ('quantilesDeterministic', 'OrNull'), 'varSampOrNull': ('varSamp', 'OrNull'), 'quantileExactHighOrNull': ('quantileExactHigh', 'OrNull'), 'quantilesExactLowOrNull': ('quantilesExactLow', 'OrNull'), 'varPopOrNull': ('varPop', 'OrNull'), 'exponentialMovingAverageOrNull': ('exponentialMovingAverage', 'OrNull'), 'deltaSumOrNull': ('deltaSum', 'OrNull'), 'uniqOrNull': ('uniq', 'OrNull'), 'quantileOrNull': ('quantile', 'OrNull'), 'argMinOrNull': ('argMin', 'OrNull'), 'retentionOrNull': ('retention', 'OrNull'), 'topKOrNull': ('topK', 'OrNull'), 'groupArrayOrNull': ('groupArray', 'OrNull'), 'groupArrayMovingAvgOrNull': ('groupArrayMovingAvg', 'OrNull'), 'groupConcatOrNull': ('groupConcat', 'OrNull'), 'quantilesExactOrNull': ('quantilesExact', 'OrNull'), 'sumMapOrNull': ('sumMap', 'OrNull'), 'quantileExactOrNull': ('quantileExact', 'OrNull'), 'last_valueOrNull': ('last_value', 'OrNull'), 'quantilesGKOrNull': ('quantilesGK', 'OrNull'), 'deltaSumTimestampOrNull': ('deltaSumTimestamp', 'OrNull'), 'groupArrayLastOrNull': ('groupArrayLast', 'OrNull'), 'sparkBarOrNull': ('sparkBar', 'OrNull'), 'entropyOrNull': ('entropy', 'OrNull'), 'quantileDeterministicOrNull': ('quantileDeterministic', 'OrNull'), 'groupArrayMovingSumOrNull': ('groupArrayMovingSum', 'OrNull'), 'sequenceMatchOrNull': ('sequenceMatch', 'OrNull'), 'quantileTimingOrNull': ('quantileTiming', 'OrNull'), 'groupBitOrOrNull': ('groupBitOr', 'OrNull'), 'exponentialTimeDecayedAvgOrNull': ('exponentialTimeDecayedAvg', 'OrNull'), 'cramersVBiasCorrectedOrNull': ('cramersVBiasCorrected', 'OrNull'), 'kolmogorovSmirnovTestOrNull': ('kolmogorovSmirnovTest', 'OrNull'), 'groupBitXorOrNull': ('groupBitXor', 'OrNull'), 'meanZTestOrNull': ('meanZTest', 'OrNull'), 'quantileInterpolatedWeightedOrNull': ('quantileInterpolatedWeighted', 'OrNull'), 'quantileTDigestOrNull': ('quantileTDigest', 'OrNull'), 'quantilesInterpolatedWeightedOrNull': ('quantilesInterpolatedWeighted', 'OrNull'), 'histogramOrNull': ('histogram', 'OrNull'), 'countOrNull': ('count', 'OrNull'), 'sequenceNextNodeOrNull': ('sequenceNextNode', 'OrNull'), 'kurtSampOrNull': ('kurtSamp', 'OrNull'), 'sumKahanOrNull': ('sumKahan', 'OrNull'), 'quantileBFloat16WeightedOrNull': ('quantileBFloat16Weighted', 'OrNull'), 'first_valueOrNull': ('first_value', 'OrNull'), 'largestTriangleThreeBucketsOrNull': ('largestTriangleThreeBuckets', 'OrNull'), 'groupBitAndOrNull': ('groupBitAnd', 'OrNull'), 'quantileExactLowOrNull': ('quantileExactLow', 'OrNull'), 'anyOrNull': ('any', 'OrNull'), 'maxIntersectionsPositionOrNull': ('maxIntersectionsPosition', 'OrNull'), 'stddevSampOrNull': ('stddevSamp', 'OrNull'), 'uniqHLL12OrNull': ('uniqHLL12', 'OrNull'), 'quantilesTimingWeightedOrNull': ('quantilesTimingWeighted', 'OrNull'), 'uniqUpToOrNull': ('uniqUpTo', 'OrNull'), 'sumOrNull': ('sum', 'OrNull'), 'groupBitmapXorOrNull': ('groupBitmapXor', 'OrNull'), 'groupArraySampleOrNull': ('groupArraySample', 'OrNull'), 'theilsUOrNull': ('theilsU', 'OrNull'), 'medianOrNull': ('median', 'OrNull'), 'cramersVOrNull': ('cramersV', 'OrNull'), 'skewPopOrNull': ('skewPop', 'OrNull'), 'windowFunnelOrNull': ('windowFunnel', 'OrNull'), 'quantileBFloat16OrNull': ('quantileBFloat16', 'OrNull'), 'welchTTestOrNull': ('welchTTest', 'OrNull'), 'quantilesExactWeightedOrNull': ('quantilesExactWeighted', 'OrNull'), 'groupBitmapAndOrNull': ('groupBitmapAnd', 'OrNull'), 'sumWithOverflowOrNull': ('sumWithOverflow', 'OrNull'), 'maxMapOrNull': ('maxMap', 'OrNull'), 'covarSampOrNull': ('covarSamp', 'OrNull'), 'quantilesTimingOrNull': ('quantilesTiming', 'OrNull'), 'uniqCombinedOrNull': ('uniqCombined', 'OrNull'), 'studentTTestArgMin': ('studentTTest', 'ArgMin'), 'corrArgMin': ('corr', 'ArgMin'), 'covarPopArgMin': ('covarPop', 'ArgMin'), 'avgWeightedArgMin': ('avgWeighted', 'ArgMin'), 'quantilesExactExclusiveArgMin': ('quantilesExactExclusive', 'ArgMin'), 'sumCountArgMin': ('sumCount', 'ArgMin'), 'quantilesBFloat16ArgMin': ('quantilesBFloat16', 'ArgMin'), 'argMaxArgMin': ('argMax', 'ArgMin'), 'simpleLinearRegressionArgMin': ('simpleLinearRegression', 'ArgMin'), 'quantileExactInclusiveArgMin': ('quantileExactInclusive', 'ArgMin'), 'stochasticLogisticRegressionArgMin': ('stochasticLogisticRegression', 'ArgMin'), 'stddevPopArgMin': ('stddevPop', 'ArgMin'), 'rankCorrArgMin': ('rankCorr', 'ArgMin'), 'quantilesArgMin': ('quantiles', 'ArgMin'), 'approx_top_sumArgMin': ('approx_top_sum', 'ArgMin'), 'sequenceCountArgMin': ('sequenceCount', 'ArgMin'), 'quantilesExactHighArgMin': ('quantilesExactHigh', 'ArgMin'), 'contingencyArgMin': ('contingency', 'ArgMin'), 'quantilesBFloat16WeightedArgMin': ('quantilesBFloat16Weighted', 'ArgMin'), 'anyHeavyArgMin': ('anyHeavy', 'ArgMin'), 'topKWeightedArgMin': ('topKWeighted', 'ArgMin'), 'maxIntersectionsArgMin': ('maxIntersections', 'ArgMin'), 'minArgMin': ('min', 'ArgMin'), 'quantileTimingWeightedArgMin': ('quantileTimingWeighted', 'ArgMin'), 'kurtPopArgMin': ('kurtPop', 'ArgMin'), 'uniqCombined64ArgMin': ('uniqCombined64', 'ArgMin'), 'quantileGKArgMin': ('quantileGK', 'ArgMin'), 'skewSampArgMin': ('skewSamp', 'ArgMin'), 'boundingRatioArgMin': ('boundingRatio', 'ArgMin'), 'quantilesTDigestWeightedArgMin': ('quantilesTDigestWeighted', 'ArgMin'), 'minMapArgMin': ('minMap', 'ArgMin'), 'maxArgMin': ('max', 'ArgMin'), 'quantilesTDigestArgMin': ('quantilesTDigest', 'ArgMin'), 'mannWhitneyUTestArgMin': ('mannWhitneyUTest', 'ArgMin'), 'uniqExactArgMin': ('uniqExact', 'ArgMin'), 'avgArgMin': ('avg', 'ArgMin'), 'uniqThetaArgMin': ('uniqTheta', 'ArgMin'), 'groupArrayInsertAtArgMin': ('groupArrayInsertAt', 'ArgMin'), 'categoricalInformationValueArgMin': ('categoricalInformationValue', 'ArgMin'), 'quantileExactWeightedArgMin': ('quantileExactWeighted', 'ArgMin'), 'quantileTDigestWeightedArgMin': ('quantileTDigestWeighted', 'ArgMin'), 'groupBitmapArgMin': ('groupBitmap', 'ArgMin'), 'groupUniqArrayArgMin': ('groupUniqArray', 'ArgMin'), 'intervalLengthSumArgMin': ('intervalLengthSum', 'ArgMin'), 'groupBitmapOrArgMin': ('groupBitmapOr', 'ArgMin'), 'stochasticLinearRegressionArgMin': ('stochasticLinearRegression', 'ArgMin'), 'anyLastArgMin': ('anyLast', 'ArgMin'), 'quantilesDeterministicArgMin': ('quantilesDeterministic', 'ArgMin'), 'varSampArgMin': ('varSamp', 'ArgMin'), 'quantileExactHighArgMin': ('quantileExactHigh', 'ArgMin'), 'quantilesExactLowArgMin': ('quantilesExactLow', 'ArgMin'), 'varPopArgMin': ('varPop', 'ArgMin'), 'exponentialMovingAverageArgMin': ('exponentialMovingAverage', 'ArgMin'), 'deltaSumArgMin': ('deltaSum', 'ArgMin'), 'uniqArgMin': ('uniq', 'ArgMin'), 'quantileArgMin': ('quantile', 'ArgMin'), 'argMinArgMin': ('argMin', 'ArgMin'), 'retentionArgMin': ('retention', 'ArgMin'), 'topKArgMin': ('topK', 'ArgMin'), 'groupArrayArgMin': ('groupArray', 'ArgMin'), 'groupArrayMovingAvgArgMin': ('groupArrayMovingAvg', 'ArgMin'), 'groupConcatArgMin': ('groupConcat', 'ArgMin'), 'quantilesExactArgMin': ('quantilesExact', 'ArgMin'), 'sumMapArgMin': ('sumMap', 'ArgMin'), 'quantileExactArgMin': ('quantileExact', 'ArgMin'), 'last_valueArgMin': ('last_value', 'ArgMin'), 'quantilesGKArgMin': ('quantilesGK', 'ArgMin'), 'deltaSumTimestampArgMin': ('deltaSumTimestamp', 'ArgMin'), 'groupArrayLastArgMin': ('groupArrayLast', 'ArgMin'), 'sparkBarArgMin': ('sparkBar', 'ArgMin'), 'entropyArgMin': ('entropy', 'ArgMin'), 'quantileDeterministicArgMin': ('quantileDeterministic', 'ArgMin'), 'groupArrayMovingSumArgMin': ('groupArrayMovingSum', 'ArgMin'), 'sequenceMatchArgMin': ('sequenceMatch', 'ArgMin'), 'quantileTimingArgMin': ('quantileTiming', 'ArgMin'), 'groupBitOrArgMin': ('groupBitOr', 'ArgMin'), 'exponentialTimeDecayedAvgArgMin': ('exponentialTimeDecayedAvg', 'ArgMin'), 'cramersVBiasCorrectedArgMin': ('cramersVBiasCorrected', 'ArgMin'), 'kolmogorovSmirnovTestArgMin': ('kolmogorovSmirnovTest', 'ArgMin'), 'groupBitXorArgMin': ('groupBitXor', 'ArgMin'), 'meanZTestArgMin': ('meanZTest', 'ArgMin'), 'quantileInterpolatedWeightedArgMin': ('quantileInterpolatedWeighted', 'ArgMin'), 'quantileTDigestArgMin': ('quantileTDigest', 'ArgMin'), 'quantilesInterpolatedWeightedArgMin': ('quantilesInterpolatedWeighted', 'ArgMin'), 'histogramArgMin': ('histogram', 'ArgMin'), 'countArgMin': ('count', 'ArgMin'), 'sequenceNextNodeArgMin': ('sequenceNextNode', 'ArgMin'), 'kurtSampArgMin': ('kurtSamp', 'ArgMin'), 'sumKahanArgMin': ('sumKahan', 'ArgMin'), 'quantileBFloat16WeightedArgMin': ('quantileBFloat16Weighted', 'ArgMin'), 'first_valueArgMin': ('first_value', 'ArgMin'), 'largestTriangleThreeBucketsArgMin': ('largestTriangleThreeBuckets', 'ArgMin'), 'groupBitAndArgMin': ('groupBitAnd', 'ArgMin'), 'quantileExactLowArgMin': ('quantileExactLow', 'ArgMin'), 'anyArgMin': ('any', 'ArgMin'), 'maxIntersectionsPositionArgMin': ('maxIntersectionsPosition', 'ArgMin'), 'stddevSampArgMin': ('stddevSamp', 'ArgMin'), 'uniqHLL12ArgMin': ('uniqHLL12', 'ArgMin'), 'quantilesTimingWeightedArgMin': ('quantilesTimingWeighted', 'ArgMin'), 'uniqUpToArgMin': ('uniqUpTo', 'ArgMin'), 'sumArgMin': ('sum', 'ArgMin'), 'groupBitmapXorArgMin': ('groupBitmapXor', 'ArgMin'), 'groupArraySampleArgMin': ('groupArraySample', 'ArgMin'), 'theilsUArgMin': ('theilsU', 'ArgMin'), 'medianArgMin': ('median', 'ArgMin'), 'cramersVArgMin': ('cramersV', 'ArgMin'), 'skewPopArgMin': ('skewPop', 'ArgMin'), 'windowFunnelArgMin': ('windowFunnel', 'ArgMin'), 'quantileBFloat16ArgMin': ('quantileBFloat16', 'ArgMin'), 'welchTTestArgMin': ('welchTTest', 'ArgMin'), 'quantilesExactWeightedArgMin': ('quantilesExactWeighted', 'ArgMin'), 'groupBitmapAndArgMin': ('groupBitmapAnd', 'ArgMin'), 'sumWithOverflowArgMin': ('sumWithOverflow', 'ArgMin'), 'maxMapArgMin': ('maxMap', 'ArgMin'), 'covarSampArgMin': ('covarSamp', 'ArgMin'), 'quantilesTimingArgMin': ('quantilesTiming', 'ArgMin'), 'uniqCombinedArgMin': ('uniqCombined', 'ArgMin'), 'studentTTestArgMax': ('studentTTest', 'ArgMax'), 'corrArgMax': ('corr', 'ArgMax'), 'covarPopArgMax': ('covarPop', 'ArgMax'), 'avgWeightedArgMax': ('avgWeighted', 'ArgMax'), 'quantilesExactExclusiveArgMax': ('quantilesExactExclusive', 'ArgMax'), 'sumCountArgMax': ('sumCount', 'ArgMax'), 'quantilesBFloat16ArgMax': ('quantilesBFloat16', 'ArgMax'), 'argMaxArgMax': ('argMax', 'ArgMax'), 'simpleLinearRegressionArgMax': ('simpleLinearRegression', 'ArgMax'), 'quantileExactInclusiveArgMax': ('quantileExactInclusive', 'ArgMax'), 'stochasticLogisticRegressionArgMax': ('stochasticLogisticRegression', 'ArgMax'), 'stddevPopArgMax': ('stddevPop', 'ArgMax'), 'rankCorrArgMax': ('rankCorr', 'ArgMax'), 'quantilesArgMax': ('quantiles', 'ArgMax'), 'approx_top_sumArgMax': ('approx_top_sum', 'ArgMax'), 'sequenceCountArgMax': ('sequenceCount', 'ArgMax'), 'quantilesExactHighArgMax': ('quantilesExactHigh', 'ArgMax'), 'contingencyArgMax': ('contingency', 'ArgMax'), 'quantilesBFloat16WeightedArgMax': ('quantilesBFloat16Weighted', 'ArgMax'), 'anyHeavyArgMax': ('anyHeavy', 'ArgMax'), 'topKWeightedArgMax': ('topKWeighted', 'ArgMax'), 'maxIntersectionsArgMax': ('maxIntersections', 'ArgMax'), 'minArgMax': ('min', 'ArgMax'), 'quantileTimingWeightedArgMax': ('quantileTimingWeighted', 'ArgMax'), 'kurtPopArgMax': ('kurtPop', 'ArgMax'), 'uniqCombined64ArgMax': ('uniqCombined64', 'ArgMax'), 'quantileGKArgMax': ('quantileGK', 'ArgMax'), 'skewSampArgMax': ('skewSamp', 'ArgMax'), 'boundingRatioArgMax': ('boundingRatio', 'ArgMax'), 'quantilesTDigestWeightedArgMax': ('quantilesTDigestWeighted', 'ArgMax'), 'minMapArgMax': ('minMap', 'ArgMax'), 'maxArgMax': ('max', 'ArgMax'), 'quantilesTDigestArgMax': ('quantilesTDigest', 'ArgMax'), 'mannWhitneyUTestArgMax': ('mannWhitneyUTest', 'ArgMax'), 'uniqExactArgMax': ('uniqExact', 'ArgMax'), 'avgArgMax': ('avg', 'ArgMax'), 'uniqThetaArgMax': ('uniqTheta', 'ArgMax'), 'groupArrayInsertAtArgMax': ('groupArrayInsertAt', 'ArgMax'), 'categoricalInformationValueArgMax': ('categoricalInformationValue', 'ArgMax'), 'quantileExactWeightedArgMax': ('quantileExactWeighted', 'ArgMax'), 'quantileTDigestWeightedArgMax': ('quantileTDigestWeighted', 'ArgMax'), 'groupBitmapArgMax': ('groupBitmap', 'ArgMax'), 'groupUniqArrayArgMax': ('groupUniqArray', 'ArgMax'), 'intervalLengthSumArgMax': ('intervalLengthSum', 'ArgMax'), 'groupBitmapOrArgMax': ('groupBitmapOr', 'ArgMax'), 'stochasticLinearRegressionArgMax': ('stochasticLinearRegression', 'ArgMax'), 'anyLastArgMax': ('anyLast', 'ArgMax'), 'quantilesDeterministicArgMax': ('quantilesDeterministic', 'ArgMax'), 'varSampArgMax': ('varSamp', 'ArgMax'), 'quantileExactHighArgMax': ('quantileExactHigh', 'ArgMax'), 'quantilesExactLowArgMax': ('quantilesExactLow', 'ArgMax'), 'varPopArgMax': ('varPop', 'ArgMax'), 'exponentialMovingAverageArgMax': ('exponentialMovingAverage', 'ArgMax'), 'deltaSumArgMax': ('deltaSum', 'ArgMax'), 'uniqArgMax': ('uniq', 'ArgMax'), 'quantileArgMax': ('quantile', 'ArgMax'), 'argMinArgMax': ('argMin', 'ArgMax'), 'retentionArgMax': ('retention', 'ArgMax'), 'topKArgMax': ('topK', 'ArgMax'), 'groupArrayArgMax': ('groupArray', 'ArgMax'), 'groupArrayMovingAvgArgMax': ('groupArrayMovingAvg', 'ArgMax'), 'groupConcatArgMax': ('groupConcat', 'ArgMax'), 'quantilesExactArgMax': ('quantilesExact', 'ArgMax'), 'sumMapArgMax': ('sumMap', 'ArgMax'), 'quantileExactArgMax': ('quantileExact', 'ArgMax'), 'last_valueArgMax': ('last_value', 'ArgMax'), 'quantilesGKArgMax': ('quantilesGK', 'ArgMax'), 'deltaSumTimestampArgMax': ('deltaSumTimestamp', 'ArgMax'), 'groupArrayLastArgMax': ('groupArrayLast', 'ArgMax'), 'sparkBarArgMax': ('sparkBar', 'ArgMax'), 'entropyArgMax': ('entropy', 'ArgMax'), 'quantileDeterministicArgMax': ('quantileDeterministic', 'ArgMax'), 'groupArrayMovingSumArgMax': ('groupArrayMovingSum', 'ArgMax'), 'sequenceMatchArgMax': ('sequenceMatch', 'ArgMax'), 'quantileTimingArgMax': ('quantileTiming', 'ArgMax'), 'groupBitOrArgMax': ('groupBitOr', 'ArgMax'), 'exponentialTimeDecayedAvgArgMax': ('exponentialTimeDecayedAvg', 'ArgMax'), 'cramersVBiasCorrectedArgMax': ('cramersVBiasCorrected', 'ArgMax'), 'kolmogorovSmirnovTestArgMax': ('kolmogorovSmirnovTest', 'ArgMax'), 'groupBitXorArgMax': ('groupBitXor', 'ArgMax'), 'meanZTestArgMax': ('meanZTest', 'ArgMax'), 'quantileInterpolatedWeightedArgMax': ('quantileInterpolatedWeighted', 'ArgMax'), 'quantileTDigestArgMax': ('quantileTDigest', 'ArgMax'), 'quantilesInterpolatedWeightedArgMax': ('quantilesInterpolatedWeighted', 'ArgMax'), 'histogramArgMax': ('histogram', 'ArgMax'), 'countArgMax': ('count', 'ArgMax'), 'sequenceNextNodeArgMax': ('sequenceNextNode', 'ArgMax'), 'kurtSampArgMax': ('kurtSamp', 'ArgMax'), 'sumKahanArgMax': ('sumKahan', 'ArgMax'), 'quantileBFloat16WeightedArgMax': ('quantileBFloat16Weighted', 'ArgMax'), 'first_valueArgMax': ('first_value', 'ArgMax'), 'largestTriangleThreeBucketsArgMax': ('largestTriangleThreeBuckets', 'ArgMax'), 'groupBitAndArgMax': ('groupBitAnd', 'ArgMax'), 'quantileExactLowArgMax': ('quantileExactLow', 'ArgMax'), 'anyArgMax': ('any', 'ArgMax'), 'maxIntersectionsPositionArgMax': ('maxIntersectionsPosition', 'ArgMax'), 'stddevSampArgMax': ('stddevSamp', 'ArgMax'), 'uniqHLL12ArgMax': ('uniqHLL12', 'ArgMax'), 'quantilesTimingWeightedArgMax': ('quantilesTimingWeighted', 'ArgMax'), 'uniqUpToArgMax': ('uniqUpTo', 'ArgMax'), 'sumArgMax': ('sum', 'ArgMax'), 'groupBitmapXorArgMax': ('groupBitmapXor', 'ArgMax'), 'groupArraySampleArgMax': ('groupArraySample', 'ArgMax'), 'theilsUArgMax': ('theilsU', 'ArgMax'), 'medianArgMax': ('median', 'ArgMax'), 'cramersVArgMax': ('cramersV', 'ArgMax'), 'skewPopArgMax': ('skewPop', 'ArgMax'), 'windowFunnelArgMax': ('windowFunnel', 'ArgMax'), 'quantileBFloat16ArgMax': ('quantileBFloat16', 'ArgMax'), 'welchTTestArgMax': ('welchTTest', 'ArgMax'), 'quantilesExactWeightedArgMax': ('quantilesExactWeighted', 'ArgMax'), 'groupBitmapAndArgMax': ('groupBitmapAnd', 'ArgMax'), 'sumWithOverflowArgMax': ('sumWithOverflow', 'ArgMax'), 'maxMapArgMax': ('maxMap', 'ArgMax'), 'covarSampArgMax': ('covarSamp', 'ArgMax'), 'quantilesTimingArgMax': ('quantilesTiming', 'ArgMax'), 'uniqCombinedArgMax': ('uniqCombined', 'ArgMax'), 'studentTTestArray': ('studentTTest', 'Array'), 'corrArray': ('corr', 'Array'), 'covarPopArray': ('covarPop', 'Array'), 'avgWeightedArray': ('avgWeighted', 'Array'), 'quantilesExactExclusiveArray': ('quantilesExactExclusive', 'Array'), 'sumCountArray': ('sumCount', 'Array'), 'quantilesBFloat16Array': ('quantilesBFloat16', 'Array'), 'argMaxArray': ('argMax', 'Array'), 'simpleLinearRegressionArray': ('simpleLinearRegression', 'Array'), 'quantileExactInclusiveArray': ('quantileExactInclusive', 'Array'), 'stochasticLogisticRegressionArray': ('stochasticLogisticRegression', 'Array'), 'stddevPopArray': ('stddevPop', 'Array'), 'rankCorrArray': ('rankCorr', 'Array'), 'quantilesArray': ('quantiles', 'Array'), 'approx_top_sumArray': ('approx_top_sum', 'Array'), 'sequenceCountArray': ('sequenceCount', 'Array'), 'quantilesExactHighArray': ('quantilesExactHigh', 'Array'), 'contingencyArray': ('contingency', 'Array'), 'quantilesBFloat16WeightedArray': ('quantilesBFloat16Weighted', 'Array'), 'anyHeavyArray': ('anyHeavy', 'Array'), 'topKWeightedArray': ('topKWeighted', 'Array'), 'maxIntersectionsArray': ('maxIntersections', 'Array'), 'minArray': ('min', 'Array'), 'quantileTimingWeightedArray': ('quantileTimingWeighted', 'Array'), 'kurtPopArray': ('kurtPop', 'Array'), 'uniqCombined64Array': ('uniqCombined64', 'Array'), 'quantileGKArray': ('quantileGK', 'Array'), 'skewSampArray': ('skewSamp', 'Array'), 'boundingRatioArray': ('boundingRatio', 'Array'), 'quantilesTDigestWeightedArray': ('quantilesTDigestWeighted', 'Array'), 'minMapArray': ('minMap', 'Array'), 'maxArray': ('max', 'Array'), 'quantilesTDigestArray': ('quantilesTDigest', 'Array'), 'mannWhitneyUTestArray': ('mannWhitneyUTest', 'Array'), 'uniqExactArray': ('uniqExact', 'Array'), 'avgArray': ('avg', 'Array'), 'uniqThetaArray': ('uniqTheta', 'Array'), 'groupArrayInsertAtArray': ('groupArrayInsertAt', 'Array'), 'categoricalInformationValueArray': ('categoricalInformationValue', 'Array'), 'quantileExactWeightedArray': ('quantileExactWeighted', 'Array'), 'quantileTDigestWeightedArray': ('quantileTDigestWeighted', 'Array'), 'groupBitmapArray': ('groupBitmap', 'Array'), 'groupUniqArrayArray': ('groupUniqArray', 'Array'), 'intervalLengthSumArray': ('intervalLengthSum', 'Array'), 'groupBitmapOrArray': ('groupBitmapOr', 'Array'), 'stochasticLinearRegressionArray': ('stochasticLinearRegression', 'Array'), 'anyLastArray': ('anyLast', 'Array'), 'quantilesDeterministicArray': ('quantilesDeterministic', 'Array'), 'varSampArray': ('varSamp', 'Array'), 'quantileExactHighArray': ('quantileExactHigh', 'Array'), 'quantilesExactLowArray': ('quantilesExactLow', 'Array'), 'varPopArray': ('varPop', 'Array'), 'exponentialMovingAverageArray': ('exponentialMovingAverage', 'Array'), 'deltaSumArray': ('deltaSum', 'Array'), 'uniqArray': ('uniq', 'Array'), 'quantileArray': ('quantile', 'Array'), 'argMinArray': ('argMin', 'Array'), 'retentionArray': ('retention', 'Array'), 'topKArray': ('topK', 'Array'), 'groupArrayArray': ('groupArray', 'Array'), 'groupArrayMovingAvgArray': ('groupArrayMovingAvg', 'Array'), 'groupConcatArray': ('groupConcat', 'Array'), 'quantilesExactArray': ('quantilesExact', 'Array'), 'sumMapArray': ('sumMap', 'Array'), 'quantileExactArray': ('quantileExact', 'Array'), 'last_valueArray': ('last_value', 'Array'), 'quantilesGKArray': ('quantilesGK', 'Array'), 'deltaSumTimestampArray': ('deltaSumTimestamp', 'Array'), 'groupArrayLastArray': ('groupArrayLast', 'Array'), 'sparkBarArray': ('sparkBar', 'Array'), 'entropyArray': ('entropy', 'Array'), 'quantileDeterministicArray': ('quantileDeterministic', 'Array'), 'groupArrayMovingSumArray': ('groupArrayMovingSum', 'Array'), 'sequenceMatchArray': ('sequenceMatch', 'Array'), 'quantileTimingArray': ('quantileTiming', 'Array'), 'groupBitOrArray': ('groupBitOr', 'Array'), 'exponentialTimeDecayedAvgArray': ('exponentialTimeDecayedAvg', 'Array'), 'cramersVBiasCorrectedArray': ('cramersVBiasCorrected', 'Array'), 'kolmogorovSmirnovTestArray': ('kolmogorovSmirnovTest', 'Array'), 'groupBitXorArray': ('groupBitXor', 'Array'), 'meanZTestArray': ('meanZTest', 'Array'), 'quantileInterpolatedWeightedArray': ('quantileInterpolatedWeighted', 'Array'), 'quantileTDigestArray': ('quantileTDigest', 'Array'), 'quantilesInterpolatedWeightedArray': ('quantilesInterpolatedWeighted', 'Array'), 'histogramArray': ('histogram', 'Array'), 'countArray': ('count', 'Array'), 'sequenceNextNodeArray': ('sequenceNextNode', 'Array'), 'kurtSampArray': ('kurtSamp', 'Array'), 'sumKahanArray': ('sumKahan', 'Array'), 'quantileBFloat16WeightedArray': ('quantileBFloat16Weighted', 'Array'), 'first_valueArray': ('first_value', 'Array'), 'largestTriangleThreeBucketsArray': ('largestTriangleThreeBuckets', 'Array'), 'groupBitAndArray': ('groupBitAnd', 'Array'), 'quantileExactLowArray': ('quantileExactLow', 'Array'), 'anyArray': ('any', 'Array'), 'maxIntersectionsPositionArray': ('maxIntersectionsPosition', 'Array'), 'stddevSampArray': ('stddevSamp', 'Array'), 'uniqHLL12Array': ('uniqHLL12', 'Array'), 'quantilesTimingWeightedArray': ('quantilesTimingWeighted', 'Array'), 'uniqUpToArray': ('uniqUpTo', 'Array'), 'sumArray': ('sum', 'Array'), 'groupBitmapXorArray': ('groupBitmapXor', 'Array'), 'groupArraySampleArray': ('groupArraySample', 'Array'), 'theilsUArray': ('theilsU', 'Array'), 'medianArray': ('median', 'Array'), 'cramersVArray': ('cramersV', 'Array'), 'skewPopArray': ('skewPop', 'Array'), 'windowFunnelArray': ('windowFunnel', 'Array'), 'quantileBFloat16Array': ('quantileBFloat16', 'Array'), 'welchTTestArray': ('welchTTest', 'Array'), 'quantilesExactWeightedArray': ('quantilesExactWeighted', 'Array'), 'groupBitmapAndArray': ('groupBitmapAnd', 'Array'), 'sumWithOverflowArray': ('sumWithOverflow', 'Array'), 'maxMapArray': ('maxMap', 'Array'), 'covarSampArray': ('covarSamp', 'Array'), 'quantilesTimingArray': ('quantilesTiming', 'Array'), 'uniqCombinedArray': ('uniqCombined', 'Array'), 'studentTTestState': ('studentTTest', 'State'), 'corrState': ('corr', 'State'), 'covarPopState': ('covarPop', 'State'), 'avgWeightedState': ('avgWeighted', 'State'), 'quantilesExactExclusiveState': ('quantilesExactExclusive', 'State'), 'sumCountState': ('sumCount', 'State'), 'quantilesBFloat16State': ('quantilesBFloat16', 'State'), 'argMaxState': ('argMax', 'State'), 'simpleLinearRegressionState': ('simpleLinearRegression', 'State'), 'quantileExactInclusiveState': ('quantileExactInclusive', 'State'), 'stochasticLogisticRegressionState': ('stochasticLogisticRegression', 'State'), 'stddevPopState': ('stddevPop', 'State'), 'rankCorrState': ('rankCorr', 'State'), 'quantilesState': ('quantiles', 'State'), 'approx_top_sumState': ('approx_top_sum', 'State'), 'sequenceCountState': ('sequenceCount', 'State'), 'quantilesExactHighState': ('quantilesExactHigh', 'State'), 'contingencyState': ('contingency', 'State'), 'quantilesBFloat16WeightedState': ('quantilesBFloat16Weighted', 'State'), 'anyHeavyState': ('anyHeavy', 'State'), 'topKWeightedState': ('topKWeighted', 'State'), 'maxIntersectionsState': ('maxIntersections', 'State'), 'minState': ('min', 'State'), 'quantileTimingWeightedState': ('quantileTimingWeighted', 'State'), 'kurtPopState': ('kurtPop', 'State'), 'uniqCombined64State': ('uniqCombined64', 'State'), 'quantileGKState': ('quantileGK', 'State'), 'skewSampState': ('skewSamp', 'State'), 'boundingRatioState': ('boundingRatio', 'State'), 'quantilesTDigestWeightedState': ('quantilesTDigestWeighted', 'State'), 'minMapState': ('minMap', 'State'), 'maxState': ('max', 'State'), 'quantilesTDigestState': ('quantilesTDigest', 'State'), 'mannWhitneyUTestState': ('mannWhitneyUTest', 'State'), 'uniqExactState': ('uniqExact', 'State'), 'avgState': ('avg', 'State'), 'uniqThetaState': ('uniqTheta', 'State'), 'groupArrayInsertAtState': ('groupArrayInsertAt', 'State'), 'categoricalInformationValueState': ('categoricalInformationValue', 'State'), 'quantileExactWeightedState': ('quantileExactWeighted', 'State'), 'quantileTDigestWeightedState': ('quantileTDigestWeighted', 'State'), 'groupBitmapState': ('groupBitmap', 'State'), 'groupUniqArrayState': ('groupUniqArray', 'State'), 'intervalLengthSumState': ('intervalLengthSum', 'State'), 'groupBitmapOrState': ('groupBitmapOr', 'State'), 'stochasticLinearRegressionState': ('stochasticLinearRegression', 'State'), 'anyLastState': ('anyLast', 'State'), 'quantilesDeterministicState': ('quantilesDeterministic', 'State'), 'varSampState': ('varSamp', 'State'), 'quantileExactHighState': ('quantileExactHigh', 'State'), 'quantilesExactLowState': ('quantilesExactLow', 'State'), 'varPopState': ('varPop', 'State'), 'exponentialMovingAverageState': ('exponentialMovingAverage', 'State'), 'deltaSumState': ('deltaSum', 'State'), 'uniqState': ('uniq', 'State'), 'quantileState': ('quantile', 'State'), 'argMinState': ('argMin', 'State'), 'retentionState': ('retention', 'State'), 'topKState': ('topK', 'State'), 'groupArrayState': ('groupArray', 'State'), 'groupArrayMovingAvgState': ('groupArrayMovingAvg', 'State'), 'groupConcatState': ('groupConcat', 'State'), 'quantilesExactState': ('quantilesExact', 'State'), 'sumMapState': ('sumMap', 'State'), 'quantileExactState': ('quantileExact', 'State'), 'last_valueState': ('last_value', 'State'), 'quantilesGKState': ('quantilesGK', 'State'), 'deltaSumTimestampState': ('deltaSumTimestamp', 'State'), 'groupArrayLastState': ('groupArrayLast', 'State'), 'sparkBarState': ('sparkBar', 'State'), 'entropyState': ('entropy', 'State'), 'quantileDeterministicState': ('quantileDeterministic', 'State'), 'groupArrayMovingSumState': ('groupArrayMovingSum', 'State'), 'sequenceMatchState': ('sequenceMatch', 'State'), 'quantileTimingState': ('quantileTiming', 'State'), 'groupBitOrState': ('groupBitOr', 'State'), 'exponentialTimeDecayedAvgState': ('exponentialTimeDecayedAvg', 'State'), 'cramersVBiasCorrectedState': ('cramersVBiasCorrected', 'State'), 'kolmogorovSmirnovTestState': ('kolmogorovSmirnovTest', 'State'), 'groupBitXorState': ('groupBitXor', 'State'), 'meanZTestState': ('meanZTest', 'State'), 'quantileInterpolatedWeightedState': ('quantileInterpolatedWeighted', 'State'), 'quantileTDigestState': ('quantileTDigest', 'State'), 'quantilesInterpolatedWeightedState': ('quantilesInterpolatedWeighted', 'State'), 'histogramState': ('histogram', 'State'), 'countState': ('count', 'State'), 'sequenceNextNodeState': ('sequenceNextNode', 'State'), 'kurtSampState': ('kurtSamp', 'State'), 'sumKahanState': ('sumKahan', 'State'), 'quantileBFloat16WeightedState': ('quantileBFloat16Weighted', 'State'), 'first_valueState': ('first_value', 'State'), 'largestTriangleThreeBucketsState': ('largestTriangleThreeBuckets', 'State'), 'groupBitAndState': ('groupBitAnd', 'State'), 'quantileExactLowState': ('quantileExactLow', 'State'), 'anyState': ('any', 'State'), 'maxIntersectionsPositionState': ('maxIntersectionsPosition', 'State'), 'stddevSampState': ('stddevSamp', 'State'), 'uniqHLL12State': ('uniqHLL12', 'State'), 'quantilesTimingWeightedState': ('quantilesTimingWeighted', 'State'), 'uniqUpToState': ('uniqUpTo', 'State'), 'sumState': ('sum', 'State'), 'groupBitmapXorState': ('groupBitmapXor', 'State'), 'groupArraySampleState': ('groupArraySample', 'State'), 'theilsUState': ('theilsU', 'State'), 'medianState': ('median', 'State'), 'cramersVState': ('cramersV', 'State'), 'skewPopState': ('skewPop', 'State'), 'windowFunnelState': ('windowFunnel', 'State'), 'quantileBFloat16State': ('quantileBFloat16', 'State'), 'welchTTestState': ('welchTTest', 'State'), 'quantilesExactWeightedState': ('quantilesExactWeighted', 'State'), 'groupBitmapAndState': ('groupBitmapAnd', 'State'), 'sumWithOverflowState': ('sumWithOverflow', 'State'), 'maxMapState': ('maxMap', 'State'), 'covarSampState': ('covarSamp', 'State'), 'quantilesTimingState': ('quantilesTiming', 'State'), 'uniqCombinedState': ('uniqCombined', 'State'), 'studentTTestMerge': ('studentTTest', 'Merge'), 'corrMerge': ('corr', 'Merge'), 'covarPopMerge': ('covarPop', 'Merge'), 'avgWeightedMerge': ('avgWeighted', 'Merge'), 'quantilesExactExclusiveMerge': ('quantilesExactExclusive', 'Merge'), 'sumCountMerge': ('sumCount', 'Merge'), 'quantilesBFloat16Merge': ('quantilesBFloat16', 'Merge'), 'argMaxMerge': ('argMax', 'Merge'), 'simpleLinearRegressionMerge': ('simpleLinearRegression', 'Merge'), 'quantileExactInclusiveMerge': ('quantileExactInclusive', 'Merge'), 'stochasticLogisticRegressionMerge': ('stochasticLogisticRegression', 'Merge'), 'stddevPopMerge': ('stddevPop', 'Merge'), 'rankCorrMerge': ('rankCorr', 'Merge'), 'quantilesMerge': ('quantiles', 'Merge'), 'approx_top_sumMerge': ('approx_top_sum', 'Merge'), 'sequenceCountMerge': ('sequenceCount', 'Merge'), 'quantilesExactHighMerge': ('quantilesExactHigh', 'Merge'), 'contingencyMerge': ('contingency', 'Merge'), 'quantilesBFloat16WeightedMerge': ('quantilesBFloat16Weighted', 'Merge'), 'anyHeavyMerge': ('anyHeavy', 'Merge'), 'topKWeightedMerge': ('topKWeighted', 'Merge'), 'maxIntersectionsMerge': ('maxIntersections', 'Merge'), 'minMerge': ('min', 'Merge'), 'quantileTimingWeightedMerge': ('quantileTimingWeighted', 'Merge'), 'kurtPopMerge': ('kurtPop', 'Merge'), 'uniqCombined64Merge': ('uniqCombined64', 'Merge'), 'quantileGKMerge': ('quantileGK', 'Merge'), 'skewSampMerge': ('skewSamp', 'Merge'), 'boundingRatioMerge': ('boundingRatio', 'Merge'), 'quantilesTDigestWeightedMerge': ('quantilesTDigestWeighted', 'Merge'), 'minMapMerge': ('minMap', 'Merge'), 'maxMerge': ('max', 'Merge'), 'quantilesTDigestMerge': ('quantilesTDigest', 'Merge'), 'mannWhitneyUTestMerge': ('mannWhitneyUTest', 'Merge'), 'uniqExactMerge': ('uniqExact', 'Merge'), 'avgMerge': ('avg', 'Merge'), 'uniqThetaMerge': ('uniqTheta', 'Merge'), 'groupArrayInsertAtMerge': ('groupArrayInsertAt', 'Merge'), 'categoricalInformationValueMerge': ('categoricalInformationValue', 'Merge'), 'quantileExactWeightedMerge': ('quantileExactWeighted', 'Merge'), 'quantileTDigestWeightedMerge': ('quantileTDigestWeighted', 'Merge'), 'groupBitmapMerge': ('groupBitmap', 'Merge'), 'groupUniqArrayMerge': ('groupUniqArray', 'Merge'), 'intervalLengthSumMerge': ('intervalLengthSum', 'Merge'), 'groupBitmapOrMerge': ('groupBitmapOr', 'Merge'), 'stochasticLinearRegressionMerge': ('stochasticLinearRegression', 'Merge'), 'anyLastMerge': ('anyLast', 'Merge'), 'quantilesDeterministicMerge': ('quantilesDeterministic', 'Merge'), 'varSampMerge': ('varSamp', 'Merge'), 'quantileExactHighMerge': ('quantileExactHigh', 'Merge'), 'quantilesExactLowMerge': ('quantilesExactLow', 'Merge'), 'varPopMerge': ('varPop', 'Merge'), 'exponentialMovingAverageMerge': ('exponentialMovingAverage', 'Merge'), 'deltaSumMerge': ('deltaSum', 'Merge'), 'uniqMerge': ('uniq', 'Merge'), 'quantileMerge': ('quantile', 'Merge'), 'argMinMerge': ('argMin', 'Merge'), 'retentionMerge': ('retention', 'Merge'), 'topKMerge': ('topK', 'Merge'), 'groupArrayMerge': ('groupArray', 'Merge'), 'groupArrayMovingAvgMerge': ('groupArrayMovingAvg', 'Merge'), 'groupConcatMerge': ('groupConcat', 'Merge'), 'quantilesExactMerge': ('quantilesExact', 'Merge'), 'sumMapMerge': ('sumMap', 'Merge'), 'quantileExactMerge': ('quantileExact', 'Merge'), 'last_valueMerge': ('last_value', 'Merge'), 'quantilesGKMerge': ('quantilesGK', 'Merge'), 'deltaSumTimestampMerge': ('deltaSumTimestamp', 'Merge'), 'groupArrayLastMerge': ('groupArrayLast', 'Merge'), 'sparkBarMerge': ('sparkBar', 'Merge'), 'entropyMerge': ('entropy', 'Merge'), 'quantileDeterministicMerge': ('quantileDeterministic', 'Merge'), 'groupArrayMovingSumMerge': ('groupArrayMovingSum', 'Merge'), 'sequenceMatchMerge': ('sequenceMatch', 'Merge'), 'quantileTimingMerge': ('quantileTiming', 'Merge'), 'groupBitOrMerge': ('groupBitOr', 'Merge'), 'exponentialTimeDecayedAvgMerge': ('exponentialTimeDecayedAvg', 'Merge'), 'cramersVBiasCorrectedMerge': ('cramersVBiasCorrected', 'Merge'), 'kolmogorovSmirnovTestMerge': ('kolmogorovSmirnovTest', 'Merge'), 'groupBitXorMerge': ('groupBitXor', 'Merge'), 'meanZTestMerge': ('meanZTest', 'Merge'), 'quantileInterpolatedWeightedMerge': ('quantileInterpolatedWeighted', 'Merge'), 'quantileTDigestMerge': ('quantileTDigest', 'Merge'), 'quantilesInterpolatedWeightedMerge': ('quantilesInterpolatedWeighted', 'Merge'), 'histogramMerge': ('histogram', 'Merge'), 'countMerge': ('count', 'Merge'), 'sequenceNextNodeMerge': ('sequenceNextNode', 'Merge'), 'kurtSampMerge': ('kurtSamp', 'Merge'), 'sumKahanMerge': ('sumKahan', 'Merge'), 'quantileBFloat16WeightedMerge': ('quantileBFloat16Weighted', 'Merge'), 'first_valueMerge': ('first_value', 'Merge'), 'largestTriangleThreeBucketsMerge': ('largestTriangleThreeBuckets', 'Merge'), 'groupBitAndMerge': ('groupBitAnd', 'Merge'), 'quantileExactLowMerge': ('quantileExactLow', 'Merge'), 'anyMerge': ('any', 'Merge'), 'maxIntersectionsPositionMerge': ('maxIntersectionsPosition', 'Merge'), 'stddevSampMerge': ('stddevSamp', 'Merge'), 'uniqHLL12Merge': ('uniqHLL12', 'Merge'), 'quantilesTimingWeightedMerge': ('quantilesTimingWeighted', 'Merge'), 'uniqUpToMerge': ('uniqUpTo', 'Merge'), 'sumMerge': ('sum', 'Merge'), 'groupBitmapXorMerge': ('groupBitmapXor', 'Merge'), 'groupArraySampleMerge': ('groupArraySample', 'Merge'), 'theilsUMerge': ('theilsU', 'Merge'), 'medianMerge': ('median', 'Merge'), 'cramersVMerge': ('cramersV', 'Merge'), 'skewPopMerge': ('skewPop', 'Merge'), 'windowFunnelMerge': ('windowFunnel', 'Merge'), 'quantileBFloat16Merge': ('quantileBFloat16', 'Merge'), 'welchTTestMerge': ('welchTTest', 'Merge'), 'quantilesExactWeightedMerge': ('quantilesExactWeighted', 'Merge'), 'groupBitmapAndMerge': ('groupBitmapAnd', 'Merge'), 'sumWithOverflowMerge': ('sumWithOverflow', 'Merge'), 'maxMapMerge': ('maxMap', 'Merge'), 'covarSampMerge': ('covarSamp', 'Merge'), 'quantilesTimingMerge': ('quantilesTiming', 'Merge'), 'uniqCombinedMerge': ('uniqCombined', 'Merge'), 'studentTTestMap': ('studentTTest', 'Map'), 'corrMap': ('corr', 'Map'), 'covarPopMap': ('covarPop', 'Map'), 'avgWeightedMap': ('avgWeighted', 'Map'), 'quantilesExactExclusiveMap': ('quantilesExactExclusive', 'Map'), 'sumCountMap': ('sumCount', 'Map'), 'quantilesBFloat16Map': ('quantilesBFloat16', 'Map'), 'argMaxMap': ('argMax', 'Map'), 'simpleLinearRegressionMap': ('simpleLinearRegression', 'Map'), 'quantileExactInclusiveMap': ('quantileExactInclusive', 'Map'), 'stochasticLogisticRegressionMap': ('stochasticLogisticRegression', 'Map'), 'stddevPopMap': ('stddevPop', 'Map'), 'rankCorrMap': ('rankCorr', 'Map'), 'quantilesMap': ('quantiles', 'Map'), 'approx_top_sumMap': ('approx_top_sum', 'Map'), 'sequenceCountMap': ('sequenceCount', 'Map'), 'quantilesExactHighMap': ('quantilesExactHigh', 'Map'), 'contingencyMap': ('contingency', 'Map'), 'quantilesBFloat16WeightedMap': ('quantilesBFloat16Weighted', 'Map'), 'anyHeavyMap': ('anyHeavy', 'Map'), 'topKWeightedMap': ('topKWeighted', 'Map'), 'maxIntersectionsMap': ('maxIntersections', 'Map'), 'minMap': ('minMap', None), 'quantileTimingWeightedMap': ('quantileTimingWeighted', 'Map'), 'kurtPopMap': ('kurtPop', 'Map'), 'uniqCombined64Map': ('uniqCombined64', 'Map'), 'quantileGKMap': ('quantileGK', 'Map'), 'skewSampMap': ('skewSamp', 'Map'), 'boundingRatioMap': ('boundingRatio', 'Map'), 'quantilesTDigestWeightedMap': ('quantilesTDigestWeighted', 'Map'), 'minMapMap': ('minMap', 'Map'), 'maxMap': ('maxMap', None), 'quantilesTDigestMap': ('quantilesTDigest', 'Map'), 'mannWhitneyUTestMap': ('mannWhitneyUTest', 'Map'), 'uniqExactMap': ('uniqExact', 'Map'), 'avgMap': ('avg', 'Map'), 'uniqThetaMap': ('uniqTheta', 'Map'), 'groupArrayInsertAtMap': ('groupArrayInsertAt', 'Map'), 'categoricalInformationValueMap': ('categoricalInformationValue', 'Map'), 'quantileExactWeightedMap': ('quantileExactWeighted', 'Map'), 'quantileTDigestWeightedMap': ('quantileTDigestWeighted', 'Map'), 'groupBitmapMap': ('groupBitmap', 'Map'), 'groupUniqArrayMap': ('groupUniqArray', 'Map'), 'intervalLengthSumMap': ('intervalLengthSum', 'Map'), 'groupBitmapOrMap': ('groupBitmapOr', 'Map'), 'stochasticLinearRegressionMap': ('stochasticLinearRegression', 'Map'), 'anyLastMap': ('anyLast', 'Map'), 'quantilesDeterministicMap': ('quantilesDeterministic', 'Map'), 'varSampMap': ('varSamp', 'Map'), 'quantileExactHighMap': ('quantileExactHigh', 'Map'), 'quantilesExactLowMap': ('quantilesExactLow', 'Map'), 'varPopMap': ('varPop', 'Map'), 'exponentialMovingAverageMap': ('exponentialMovingAverage', 'Map'), 'deltaSumMap': ('deltaSum', 'Map'), 'uniqMap': ('uniq', 'Map'), 'quantileMap': ('quantile', 'Map'), 'argMinMap': ('argMin', 'Map'), 'retentionMap': ('retention', 'Map'), 'topKMap': ('topK', 'Map'), 'groupArrayMap': ('groupArray', 'Map'), 'groupArrayMovingAvgMap': ('groupArrayMovingAvg', 'Map'), 'groupConcatMap': ('groupConcat', 'Map'), 'quantilesExactMap': ('quantilesExact', 'Map'), 'sumMapMap': ('sumMap', 'Map'), 'quantileExactMap': ('quantileExact', 'Map'), 'last_valueMap': ('last_value', 'Map'), 'quantilesGKMap': ('quantilesGK', 'Map'), 'deltaSumTimestampMap': ('deltaSumTimestamp', 'Map'), 'groupArrayLastMap': ('groupArrayLast', 'Map'), 'sparkBarMap': ('sparkBar', 'Map'), 'entropyMap': ('entropy', 'Map'), 'quantileDeterministicMap': ('quantileDeterministic', 'Map'), 'groupArrayMovingSumMap': ('groupArrayMovingSum', 'Map'), 'sequenceMatchMap': ('sequenceMatch', 'Map'), 'quantileTimingMap': ('quantileTiming', 'Map'), 'groupBitOrMap': ('groupBitOr', 'Map'), 'exponentialTimeDecayedAvgMap': ('exponentialTimeDecayedAvg', 'Map'), 'cramersVBiasCorrectedMap': ('cramersVBiasCorrected', 'Map'), 'kolmogorovSmirnovTestMap': ('kolmogorovSmirnovTest', 'Map'), 'groupBitXorMap': ('groupBitXor', 'Map'), 'meanZTestMap': ('meanZTest', 'Map'), 'quantileInterpolatedWeightedMap': ('quantileInterpolatedWeighted', 'Map'), 'quantileTDigestMap': ('quantileTDigest', 'Map'), 'quantilesInterpolatedWeightedMap': ('quantilesInterpolatedWeighted', 'Map'), 'histogramMap': ('histogram', 'Map'), 'countMap': ('count', 'Map'), 'sequenceNextNodeMap': ('sequenceNextNode', 'Map'), 'kurtSampMap': ('kurtSamp', 'Map'), 'sumKahanMap': ('sumKahan', 'Map'), 'quantileBFloat16WeightedMap': ('quantileBFloat16Weighted', 'Map'), 'first_valueMap': ('first_value', 'Map'), 'largestTriangleThreeBucketsMap': ('largestTriangleThreeBuckets', 'Map'), 'groupBitAndMap': ('groupBitAnd', 'Map'), 'quantileExactLowMap': ('quantileExactLow', 'Map'), 'anyMap': ('any', 'Map'), 'maxIntersectionsPositionMap': ('maxIntersectionsPosition', 'Map'), 'stddevSampMap': ('stddevSamp', 'Map'), 'uniqHLL12Map': ('uniqHLL12', 'Map'), 'quantilesTimingWeightedMap': ('quantilesTimingWeighted', 'Map'), 'uniqUpToMap': ('uniqUpTo', 'Map'), 'sumMap': ('sumMap', None), 'groupBitmapXorMap': ('groupBitmapXor', 'Map'), 'groupArraySampleMap': ('groupArraySample', 'Map'), 'theilsUMap': ('theilsU', 'Map'), 'medianMap': ('median', 'Map'), 'cramersVMap': ('cramersV', 'Map'), 'skewPopMap': ('skewPop', 'Map'), 'windowFunnelMap': ('windowFunnel', 'Map'), 'quantileBFloat16Map': ('quantileBFloat16', 'Map'), 'welchTTestMap': ('welchTTest', 'Map'), 'quantilesExactWeightedMap': ('quantilesExactWeighted', 'Map'), 'groupBitmapAndMap': ('groupBitmapAnd', 'Map'), 'sumWithOverflowMap': ('sumWithOverflow', 'Map'), 'maxMapMap': ('maxMap', 'Map'), 'covarSampMap': ('covarSamp', 'Map'), 'quantilesTimingMap': ('quantilesTiming', 'Map'), 'uniqCombinedMap': ('uniqCombined', 'Map'), 'studentTTestIf': ('studentTTest', 'If'), 'corrIf': ('corr', 'If'), 'covarPopIf': ('covarPop', 'If'), 'avgWeightedIf': ('avgWeighted', 'If'), 'quantilesExactExclusiveIf': ('quantilesExactExclusive', 'If'), 'sumCountIf': ('sumCount', 'If'), 'quantilesBFloat16If': ('quantilesBFloat16', 'If'), 'argMaxIf': ('argMax', 'If'), 'simpleLinearRegressionIf': ('simpleLinearRegression', 'If'), 'quantileExactInclusiveIf': ('quantileExactInclusive', 'If'), 'stochasticLogisticRegressionIf': ('stochasticLogisticRegression', 'If'), 'stddevPopIf': ('stddevPop', 'If'), 'rankCorrIf': ('rankCorr', 'If'), 'quantilesIf': ('quantiles', 'If'), 'approx_top_sumIf': ('approx_top_sum', 'If'), 'sequenceCountIf': ('sequenceCount', 'If'), 'quantilesExactHighIf': ('quantilesExactHigh', 'If'), 'contingencyIf': ('contingency', 'If'), 'quantilesBFloat16WeightedIf': ('quantilesBFloat16Weighted', 'If'), 'anyHeavyIf': ('anyHeavy', 'If'), 'topKWeightedIf': ('topKWeighted', 'If'), 'maxIntersectionsIf': ('maxIntersections', 'If'), 'minIf': ('min', 'If'), 'quantileTimingWeightedIf': ('quantileTimingWeighted', 'If'), 'kurtPopIf': ('kurtPop', 'If'), 'uniqCombined64If': ('uniqCombined64', 'If'), 'quantileGKIf': ('quantileGK', 'If'), 'skewSampIf': ('skewSamp', 'If'), 'boundingRatioIf': ('boundingRatio', 'If'), 'quantilesTDigestWeightedIf': ('quantilesTDigestWeighted', 'If'), 'minMapIf': ('minMap', 'If'), 'maxIf': ('max', 'If'), 'quantilesTDigestIf': ('quantilesTDigest', 'If'), 'mannWhitneyUTestIf': ('mannWhitneyUTest', 'If'), 'uniqExactIf': ('uniqExact', 'If'), 'avgIf': ('avg', 'If'), 'uniqThetaIf': ('uniqTheta', 'If'), 'groupArrayInsertAtIf': ('groupArrayInsertAt', 'If'), 'categoricalInformationValueIf': ('categoricalInformationValue', 'If'), 'quantileExactWeightedIf': ('quantileExactWeighted', 'If'), 'quantileTDigestWeightedIf': ('quantileTDigestWeighted', 'If'), 'groupBitmapIf': ('groupBitmap', 'If'), 'groupUniqArrayIf': ('groupUniqArray', 'If'), 'intervalLengthSumIf': ('intervalLengthSum', 'If'), 'groupBitmapOrIf': ('groupBitmapOr', 'If'), 'stochasticLinearRegressionIf': ('stochasticLinearRegression', 'If'), 'anyLastIf': ('anyLast', 'If'), 'quantilesDeterministicIf': ('quantilesDeterministic', 'If'), 'varSampIf': ('varSamp', 'If'), 'quantileExactHighIf': ('quantileExactHigh', 'If'), 'quantilesExactLowIf': ('quantilesExactLow', 'If'), 'varPopIf': ('varPop', 'If'), 'exponentialMovingAverageIf': ('exponentialMovingAverage', 'If'), 'deltaSumIf': ('deltaSum', 'If'), 'uniqIf': ('uniq', 'If'), 'quantileIf': ('quantile', 'If'), 'argMinIf': ('argMin', 'If'), 'retentionIf': ('retention', 'If'), 'topKIf': ('topK', 'If'), 'groupArrayIf': ('groupArray', 'If'), 'groupArrayMovingAvgIf': ('groupArrayMovingAvg', 'If'), 'groupConcatIf': ('groupConcat', 'If'), 'quantilesExactIf': ('quantilesExact', 'If'), 'sumMapIf': ('sumMap', 'If'), 'quantileExactIf': ('quantileExact', 'If'), 'last_valueIf': ('last_value', 'If'), 'quantilesGKIf': ('quantilesGK', 'If'), 'deltaSumTimestampIf': ('deltaSumTimestamp', 'If'), 'groupArrayLastIf': ('groupArrayLast', 'If'), 'sparkBarIf': ('sparkBar', 'If'), 'entropyIf': ('entropy', 'If'), 'quantileDeterministicIf': ('quantileDeterministic', 'If'), 'groupArrayMovingSumIf': ('groupArrayMovingSum', 'If'), 'sequenceMatchIf': ('sequenceMatch', 'If'), 'quantileTimingIf': ('quantileTiming', 'If'), 'groupBitOrIf': ('groupBitOr', 'If'), 'exponentialTimeDecayedAvgIf': ('exponentialTimeDecayedAvg', 'If'), 'cramersVBiasCorrectedIf': ('cramersVBiasCorrected', 'If'), 'kolmogorovSmirnovTestIf': ('kolmogorovSmirnovTest', 'If'), 'groupBitXorIf': ('groupBitXor', 'If'), 'meanZTestIf': ('meanZTest', 'If'), 'quantileInterpolatedWeightedIf': ('quantileInterpolatedWeighted', 'If'), 'quantileTDigestIf': ('quantileTDigest', 'If'), 'quantilesInterpolatedWeightedIf': ('quantilesInterpolatedWeighted', 'If'), 'histogramIf': ('histogram', 'If'), 'countIf': ('count', 'If'), 'sequenceNextNodeIf': ('sequenceNextNode', 'If'), 'kurtSampIf': ('kurtSamp', 'If'), 'sumKahanIf': ('sumKahan', 'If'), 'quantileBFloat16WeightedIf': ('quantileBFloat16Weighted', 'If'), 'first_valueIf': ('first_value', 'If'), 'largestTriangleThreeBucketsIf': ('largestTriangleThreeBuckets', 'If'), 'groupBitAndIf': ('groupBitAnd', 'If'), 'quantileExactLowIf': ('quantileExactLow', 'If'), 'anyIf': ('any', 'If'), 'maxIntersectionsPositionIf': ('maxIntersectionsPosition', 'If'), 'stddevSampIf': ('stddevSamp', 'If'), 'uniqHLL12If': ('uniqHLL12', 'If'), 'quantilesTimingWeightedIf': ('quantilesTimingWeighted', 'If'), 'uniqUpToIf': ('uniqUpTo', 'If'), 'sumIf': ('sum', 'If'), 'groupBitmapXorIf': ('groupBitmapXor', 'If'), 'groupArraySampleIf': ('groupArraySample', 'If'), 'theilsUIf': ('theilsU', 'If'), 'medianIf': ('median', 'If'), 'cramersVIf': ('cramersV', 'If'), 'skewPopIf': ('skewPop', 'If'), 'windowFunnelIf': ('windowFunnel', 'If'), 'quantileBFloat16If': ('quantileBFloat16', 'If'), 'welchTTestIf': ('welchTTest', 'If'), 'quantilesExactWeightedIf': ('quantilesExactWeighted', 'If'), 'groupBitmapAndIf': ('groupBitmapAnd', 'If'), 'sumWithOverflowIf': ('sumWithOverflow', 'If'), 'maxMapIf': ('maxMap', 'If'), 'covarSampIf': ('covarSamp', 'If'), 'quantilesTimingIf': ('quantilesTiming', 'If'), 'uniqCombinedIf': ('uniqCombined', 'If'), 'studentTTest': ('studentTTest', None), 'corr': ('corr', None), 'covarPop': ('covarPop', None), 'avgWeighted': ('avgWeighted', None), 'quantilesExactExclusive': ('quantilesExactExclusive', None), 'sumCount': ('sumCount', None), 'quantilesBFloat16': ('quantilesBFloat16', None), 'argMax': ('argMax', None), 'simpleLinearRegression': ('simpleLinearRegression', None), 'quantileExactInclusive': ('quantileExactInclusive', None), 'stochasticLogisticRegression': ('stochasticLogisticRegression', None), 'stddevPop': ('stddevPop', None), 'rankCorr': ('rankCorr', None), 'quantiles': ('quantiles', None), 'approx_top_sum': ('approx_top_sum', None), 'sequenceCount': ('sequenceCount', None), 'quantilesExactHigh': ('quantilesExactHigh', None), 'contingency': ('contingency', None), 'quantilesBFloat16Weighted': ('quantilesBFloat16Weighted', None), 'anyHeavy': ('anyHeavy', None), 'topKWeighted': ('topKWeighted', None), 'maxIntersections': ('maxIntersections', None), 'min': ('min', None), 'quantileTimingWeighted': ('quantileTimingWeighted', None), 'kurtPop': ('kurtPop', None), 'uniqCombined64': ('uniqCombined64', None), 'quantileGK': ('quantileGK', None), 'skewSamp': ('skewSamp', None), 'boundingRatio': ('boundingRatio', None), 'quantilesTDigestWeighted': ('quantilesTDigestWeighted', None), 'max': ('max', None), 'quantilesTDigest': ('quantilesTDigest', None), 'mannWhitneyUTest': ('mannWhitneyUTest', None), 'uniqExact': ('uniqExact', None), 'avg': ('avg', None), 'uniqTheta': ('uniqTheta', None), 'groupArrayInsertAt': ('groupArrayInsertAt', None), 'categoricalInformationValue': ('categoricalInformationValue', None), 'quantileExactWeighted': ('quantileExactWeighted', None), 'quantileTDigestWeighted': ('quantileTDigestWeighted', None), 'groupBitmap': ('groupBitmap', None), 'groupUniqArray': ('groupUniqArray', None), 'intervalLengthSum': ('intervalLengthSum', None), 'groupBitmapOr': ('groupBitmapOr', None), 'stochasticLinearRegression': ('stochasticLinearRegression', None), 'anyLast': ('anyLast', None), 'quantilesDeterministic': ('quantilesDeterministic', None), 'varSamp': ('varSamp', None), 'quantileExactHigh': ('quantileExactHigh', None), 'quantilesExactLow': ('quantilesExactLow', None), 'varPop': ('varPop', None), 'exponentialMovingAverage': ('exponentialMovingAverage', None), 'deltaSum': ('deltaSum', None), 'uniq': ('uniq', None), 'quantile': ('quantile', None), 'argMin': ('argMin', None), 'retention': ('retention', None), 'topK': ('topK', None), 'groupArray': ('groupArray', None), 'groupArrayMovingAvg': ('groupArrayMovingAvg', None), 'groupConcat': ('groupConcat', None), 'quantilesExact': ('quantilesExact', None), 'quantileExact': ('quantileExact', None), 'last_value': ('last_value', None), 'quantilesGK': ('quantilesGK', None), 'deltaSumTimestamp': ('deltaSumTimestamp', None), 'groupArrayLast': ('groupArrayLast', None), 'sparkBar': ('sparkBar', None), 'entropy': ('entropy', None), 'quantileDeterministic': ('quantileDeterministic', None), 'groupArrayMovingSum': ('groupArrayMovingSum', None), 'sequenceMatch': ('sequenceMatch', None), 'quantileTiming': ('quantileTiming', None), 'groupBitOr': ('groupBitOr', None), 'exponentialTimeDecayedAvg': ('exponentialTimeDecayedAvg', None), 'cramersVBiasCorrected': ('cramersVBiasCorrected', None), 'kolmogorovSmirnovTest': ('kolmogorovSmirnovTest', None), 'groupBitXor': ('groupBitXor', None), 'meanZTest': ('meanZTest', None), 'quantileInterpolatedWeighted': ('quantileInterpolatedWeighted', None), 'quantileTDigest': ('quantileTDigest', None), 'quantilesInterpolatedWeighted': ('quantilesInterpolatedWeighted', None), 'histogram': ('histogram', None), 'count': ('count', None), 'sequenceNextNode': ('sequenceNextNode', None), 'kurtSamp': ('kurtSamp', None), 'sumKahan': ('sumKahan', None), 'quantileBFloat16Weighted': ('quantileBFloat16Weighted', None), 'first_value': ('first_value', None), 'largestTriangleThreeBuckets': ('largestTriangleThreeBuckets', None), 'groupBitAnd': ('groupBitAnd', None), 'quantileExactLow': ('quantileExactLow', None), 'any': ('any', None), 'maxIntersectionsPosition': ('maxIntersectionsPosition', None), 'stddevSamp': ('stddevSamp', None), 'uniqHLL12': ('uniqHLL12', None), 'quantilesTimingWeighted': ('quantilesTimingWeighted', None), 'uniqUpTo': ('uniqUpTo', None), 'sum': ('sum', None), 'groupBitmapXor': ('groupBitmapXor', None), 'groupArraySample': ('groupArraySample', None), 'theilsU': ('theilsU', None), 'median': ('median', None), 'cramersV': ('cramersV', None), 'skewPop': ('skewPop', None), 'windowFunnel': ('windowFunnel', None), 'quantileBFloat16': ('quantileBFloat16', None), 'welchTTest': ('welchTTest', None), 'quantilesExactWeighted': ('quantilesExactWeighted', None), 'groupBitmapAnd': ('groupBitmapAnd', None), 'sumWithOverflow': ('sumWithOverflow', None), 'covarSamp': ('covarSamp', None), 'quantilesTiming': ('quantilesTiming', None), 'uniqCombined': ('uniqCombined', 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: 247>: <class 'sqlglot.expressions.temporal.CurrentDate'>, <TokenType.CURRENT_DATETIME: 248>: <class 'sqlglot.expressions.temporal.CurrentDate'>, <TokenType.CURRENT_TIME: 250>: <class 'sqlglot.expressions.temporal.CurrentTime'>, <TokenType.CURRENT_USER: 252>: <class 'sqlglot.expressions.functions.CurrentUser'>, <TokenType.CURRENT_ROLE: 254>: <class 'sqlglot.expressions.functions.CurrentRole'>}
RANGE_PARSERS =
{<TokenType.AT_GT: 56>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.BETWEEN: 231>: <function Parser.<lambda>>, <TokenType.GLOB: 288>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.ILIKE: 296>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.IN: 297>: <function Parser.<lambda>>, <TokenType.IRLIKE: 308>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.IS: 309>: <function Parser.<lambda>>, <TokenType.LIKE: 319>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.LT_AT: 55>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.OVERLAPS: 350>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.RLIKE: 382>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.SIMILAR_TO: 397>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.FOR: 280>: <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: 341>: <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: 289>: <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: 390>, <TokenType.STRAIGHT_JOIN: 404>, <TokenType.OUTER: 348>, <TokenType.ALL: 221>, <TokenType.ANTI: 222>, <TokenType.ANY: 223>, <TokenType.ARRAY: 225>, <TokenType.ASOF: 227>, <TokenType.PASTE: 355>, <TokenType.INNER: 300>, <TokenType.CROSS: 245>}
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.INET: 201>, <TokenType.IPADDRESS: 202>, <TokenType.IPPREFIX: 203>, <TokenType.IPV4: 204>, <TokenType.IPV6: 205>, <TokenType.ENUM: 206>, <TokenType.ENUM8: 207>, <TokenType.ENUM16: 208>, <TokenType.FIXEDSTRING: 209>, <TokenType.LOWCARDINALITY: 210>, <TokenType.NESTED: 211>, <TokenType.AGGREGATEFUNCTION: 212>, <TokenType.SIMPLEAGGREGATEFUNCTION: 213>, <TokenType.TDIGEST: 214>, <TokenType.UNKNOWN: 215>, <TokenType.VECTOR: 216>, <TokenType.DYNAMIC: 217>, <TokenType.VOID: 218>, <TokenType.APPLY: 224>, <TokenType.ASC: 226>, <TokenType.ATTACH: 228>, <TokenType.AUTO_INCREMENT: 229>, <TokenType.BEGIN: 230>, <TokenType.CACHE: 233>, <TokenType.CASE: 234>, <TokenType.COLLATE: 237>, <TokenType.COMMAND: 238>, <TokenType.COMMENT: 239>, <TokenType.COMMIT: 240>, <TokenType.CONSTRAINT: 242>, <TokenType.COPY: 243>, <TokenType.CUBE: 246>, <TokenType.CURRENT_DATE: 247>, <TokenType.CURRENT_DATETIME: 248>, <TokenType.CURRENT_SCHEMA: 249>, <TokenType.CURRENT_TIME: 250>, <TokenType.CURRENT_TIMESTAMP: 251>, <TokenType.CURRENT_USER: 252>, <TokenType.CURRENT_ROLE: 254>, <TokenType.CURRENT_CATALOG: 255>, <TokenType.DECLARE: 256>, <TokenType.DEFAULT: 257>, <TokenType.DELETE: 258>, <TokenType.DESC: 259>, <TokenType.DESCRIBE: 260>, <TokenType.DETACH: 261>, <TokenType.DICTIONARY: 262>, <TokenType.DIV: 265>, <TokenType.END: 268>, <TokenType.ESCAPE: 269>, <TokenType.EXECUTE: 271>, <TokenType.EXISTS: 272>, <TokenType.FALSE: 273>, <TokenType.FILE: 275>, <TokenType.FILE_FORMAT: 276>, <TokenType.FILTER: 277>, <TokenType.FIRST: 279>, <TokenType.FOREIGN_KEY: 282>, <TokenType.FUNCTION: 286>, <TokenType.GET: 287>, <TokenType.INDEX: 298>, <TokenType.INTERVAL: 305>, <TokenType.IS: 309>, <TokenType.ISNULL: 310>, <TokenType.KEEP: 313>, <TokenType.KILL: 315>, <TokenType.LIMIT: 320>, <TokenType.LIST: 321>, <TokenType.LOAD: 322>, <TokenType.MAP: 324>, <TokenType.MATCH: 325>, <TokenType.MERGE: 329>, <TokenType.MODEL: 331>, <TokenType.NEXT: 333>, <TokenType.NOTHING: 334>, <TokenType.NULL: 336>, <TokenType.OBJECT_IDENTIFIER: 337>, <TokenType.OFFSET: 338>, <TokenType.OPERATOR: 341>, <TokenType.ORDINALITY: 345>, <TokenType.OUT: 346>, <TokenType.INOUT: 347>, <TokenType.OVER: 349>, <TokenType.OVERLAPS: 350>, <TokenType.OVERWRITE: 351>, <TokenType.PARTITION: 353>, <TokenType.PERCENT: 356>, <TokenType.PIVOT: 357>, <TokenType.PRAGMA: 362>, <TokenType.PROCEDURE: 365>, <TokenType.PROJECTION: 367>, <TokenType.PSEUDO_TYPE: 368>, <TokenType.PUT: 369>, <TokenType.RANGE: 373>, <TokenType.RECURSIVE: 374>, <TokenType.REFRESH: 375>, <TokenType.RENAME: 376>, <TokenType.REPLACE: 377>, <TokenType.REFERENCES: 380>, <TokenType.ROLLUP: 385>, <TokenType.ROW: 386>, <TokenType.ROWS: 387>, <TokenType.SEQUENCE: 392>, <TokenType.SET: 394>, <TokenType.SHOW: 396>, <TokenType.SOME: 398>, <TokenType.STORAGE_INTEGRATION: 403>, <TokenType.STRAIGHT_JOIN: 404>, <TokenType.STRUCT: 405>, <TokenType.TAG: 408>, <TokenType.TEMPORARY: 409>, <TokenType.TOP: 410>, <TokenType.TRUE: 412>, <TokenType.TRUNCATE: 413>, <TokenType.TRIGGER: 414>, <TokenType.TYPE: 415>, <TokenType.UNNEST: 419>, <TokenType.UNPIVOT: 420>, <TokenType.UPDATE: 421>, <TokenType.USE: 422>, <TokenType.VIEW: 426>, <TokenType.SEMANTIC_VIEW: 427>, <TokenType.VOLATILE: 428>, <TokenType.UNIQUE: 434>, <TokenType.SINK: 439>, <TokenType.SOURCE: 440>, <TokenType.ANALYZE: 441>, <TokenType.NAMESPACE: 442>, <TokenType.EXPORT: 443>}
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.INET: 201>, <TokenType.IPADDRESS: 202>, <TokenType.IPPREFIX: 203>, <TokenType.IPV4: 204>, <TokenType.IPV6: 205>, <TokenType.ENUM: 206>, <TokenType.ENUM8: 207>, <TokenType.ENUM16: 208>, <TokenType.FIXEDSTRING: 209>, <TokenType.LOWCARDINALITY: 210>, <TokenType.NESTED: 211>, <TokenType.AGGREGATEFUNCTION: 212>, <TokenType.SIMPLEAGGREGATEFUNCTION: 213>, <TokenType.TDIGEST: 214>, <TokenType.UNKNOWN: 215>, <TokenType.VECTOR: 216>, <TokenType.DYNAMIC: 217>, <TokenType.VOID: 218>, <TokenType.ALL: 221>, <TokenType.ANTI: 222>, <TokenType.ANY: 223>, <TokenType.APPLY: 224>, <TokenType.ARRAY: 225>, <TokenType.ASC: 226>, <TokenType.ASOF: 227>, <TokenType.ATTACH: 228>, <TokenType.AUTO_INCREMENT: 229>, <TokenType.BEGIN: 230>, <TokenType.CACHE: 233>, <TokenType.CASE: 234>, <TokenType.COLLATE: 237>, <TokenType.COMMAND: 238>, <TokenType.COMMENT: 239>, <TokenType.COMMIT: 240>, <TokenType.CONSTRAINT: 242>, <TokenType.COPY: 243>, <TokenType.CUBE: 246>, <TokenType.CURRENT_DATE: 247>, <TokenType.CURRENT_DATETIME: 248>, <TokenType.CURRENT_SCHEMA: 249>, <TokenType.CURRENT_TIME: 250>, <TokenType.CURRENT_TIMESTAMP: 251>, <TokenType.CURRENT_USER: 252>, <TokenType.CURRENT_ROLE: 254>, <TokenType.CURRENT_CATALOG: 255>, <TokenType.DECLARE: 256>, <TokenType.DEFAULT: 257>, <TokenType.DELETE: 258>, <TokenType.DESC: 259>, <TokenType.DESCRIBE: 260>, <TokenType.DETACH: 261>, <TokenType.DICTIONARY: 262>, <TokenType.DIV: 265>, <TokenType.END: 268>, <TokenType.ESCAPE: 269>, <TokenType.EXECUTE: 271>, <TokenType.EXISTS: 272>, <TokenType.FALSE: 273>, <TokenType.FILE: 275>, <TokenType.FILE_FORMAT: 276>, <TokenType.FILTER: 277>, <TokenType.FINAL: 278>, <TokenType.FIRST: 279>, <TokenType.FOREIGN_KEY: 282>, <TokenType.FULL: 285>, <TokenType.FUNCTION: 286>, <TokenType.GET: 287>, <TokenType.INDEX: 298>, <TokenType.INTERVAL: 305>, <TokenType.IS: 309>, <TokenType.ISNULL: 310>, <TokenType.KEEP: 313>, <TokenType.KILL: 315>, <TokenType.LEFT: 318>, <TokenType.LIMIT: 320>, <TokenType.LIST: 321>, <TokenType.LOAD: 322>, <TokenType.LOCK: 323>, <TokenType.MAP: 324>, <TokenType.MATCH: 325>, <TokenType.MERGE: 329>, <TokenType.MODEL: 331>, <TokenType.NATURAL: 332>, <TokenType.NEXT: 333>, <TokenType.NOTHING: 334>, <TokenType.NULL: 336>, <TokenType.OBJECT_IDENTIFIER: 337>, <TokenType.OFFSET: 338>, <TokenType.OPERATOR: 341>, <TokenType.ORDINALITY: 345>, <TokenType.OUT: 346>, <TokenType.INOUT: 347>, <TokenType.OVER: 349>, <TokenType.OVERLAPS: 350>, <TokenType.OVERWRITE: 351>, <TokenType.PARTITION: 353>, <TokenType.PASTE: 355>, <TokenType.PERCENT: 356>, <TokenType.PIVOT: 357>, <TokenType.PRAGMA: 362>, <TokenType.PROCEDURE: 365>, <TokenType.PROJECTION: 367>, <TokenType.PSEUDO_TYPE: 368>, <TokenType.PUT: 369>, <TokenType.RANGE: 373>, <TokenType.RECURSIVE: 374>, <TokenType.REFRESH: 375>, <TokenType.RENAME: 376>, <TokenType.REPLACE: 377>, <TokenType.REFERENCES: 380>, <TokenType.RIGHT: 381>, <TokenType.ROLLUP: 385>, <TokenType.ROW: 386>, <TokenType.ROWS: 387>, <TokenType.SEMI: 390>, <TokenType.SEQUENCE: 392>, <TokenType.SET: 394>, <TokenType.SHOW: 396>, <TokenType.SOME: 398>, <TokenType.STORAGE_INTEGRATION: 403>, <TokenType.STRAIGHT_JOIN: 404>, <TokenType.STRUCT: 405>, <TokenType.TAG: 408>, <TokenType.TEMPORARY: 409>, <TokenType.TOP: 410>, <TokenType.TRUE: 412>, <TokenType.TRUNCATE: 413>, <TokenType.TRIGGER: 414>, <TokenType.TYPE: 415>, <TokenType.UNNEST: 419>, <TokenType.UNPIVOT: 420>, <TokenType.UPDATE: 421>, <TokenType.USE: 422>, <TokenType.VIEW: 426>, <TokenType.SEMANTIC_VIEW: 427>, <TokenType.VOLATILE: 428>, <TokenType.WINDOW: 432>, <TokenType.UNIQUE: 434>, <TokenType.SINK: 439>, <TokenType.SOURCE: 440>, <TokenType.ANALYZE: 441>, <TokenType.NAMESPACE: 442>, <TokenType.EXPORT: 443>}
QUERY_MODIFIER_PARSERS =
{<TokenType.MATCH_RECOGNIZE: 327>: <function Parser.<lambda>>, <TokenType.PREWHERE: 363>: <function Parser.<lambda>>, <TokenType.WHERE: 431>: <function Parser.<lambda>>, <TokenType.GROUP_BY: 291>: <function Parser.<lambda>>, <TokenType.HAVING: 293>: <function Parser.<lambda>>, <TokenType.QUALIFY: 370>: <function Parser.<lambda>>, <TokenType.WINDOW: 432>: <function Parser.<lambda>>, <TokenType.ORDER_BY: 342>: <function Parser.<lambda>>, <TokenType.LIMIT: 320>: <function Parser.<lambda>>, <TokenType.FETCH: 274>: <function Parser.<lambda>>, <TokenType.OFFSET: 338>: <function Parser.<lambda>>, <TokenType.FOR: 280>: <function Parser.<lambda>>, <TokenType.LOCK: 323>: <function Parser.<lambda>>, <TokenType.TABLE_SAMPLE: 407>: <function Parser.<lambda>>, <TokenType.USING: 423>: <function Parser.<lambda>>, <TokenType.CLUSTER_BY: 236>: <function Parser.<lambda>>, <TokenType.DISTRIBUTE_BY: 264>: <function Parser.<lambda>>, <TokenType.SORT_BY: 399>: <function Parser.<lambda>>, <TokenType.CONNECT_BY: 241>: <function Parser.<lambda>>, <TokenType.SETTINGS: 395>: <function ClickHouseParser.<lambda>>, <TokenType.FORMAT: 283>: <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 =
{'INDEX', 'UNIQUE', 'PRIMARY KEY', 'FOREIGN KEY', 'BUCKET', 'PERIOD', 'LIKE', 'EXCLUDE', 'TRUNCATE'}
PLACEHOLDER_PARSERS =
{<TokenType.PLACEHOLDER: 358>: <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: 220>: <function Parser.<lambda>>, <TokenType.ANALYZE: 441>: <function Parser.<lambda>>, <TokenType.BEGIN: 230>: <function Parser.<lambda>>, <TokenType.CACHE: 233>: <function Parser.<lambda>>, <TokenType.COMMENT: 239>: <function Parser.<lambda>>, <TokenType.COMMIT: 240>: <function Parser.<lambda>>, <TokenType.COPY: 243>: <function Parser.<lambda>>, <TokenType.CREATE: 244>: <function Parser.<lambda>>, <TokenType.DECLARE: 256>: <function Parser.<lambda>>, <TokenType.DELETE: 258>: <function Parser.<lambda>>, <TokenType.DESC: 259>: <function Parser.<lambda>>, <TokenType.DESCRIBE: 260>: <function Parser.<lambda>>, <TokenType.DROP: 266>: <function Parser.<lambda>>, <TokenType.GRANT: 290>: <function Parser.<lambda>>, <TokenType.REVOKE: 379>: <function Parser.<lambda>>, <TokenType.INSERT: 301>: <function Parser.<lambda>>, <TokenType.KILL: 315>: <function Parser.<lambda>>, <TokenType.LOAD: 322>: <function Parser.<lambda>>, <TokenType.MERGE: 329>: <function Parser.<lambda>>, <TokenType.PIVOT: 357>: <function Parser.<lambda>>, <TokenType.PRAGMA: 362>: <function Parser.<lambda>>, <TokenType.REFRESH: 375>: <function Parser.<lambda>>, <TokenType.ROLLBACK: 384>: <function Parser.<lambda>>, <TokenType.SET: 394>: <function Parser.<lambda>>, <TokenType.TRUNCATE: 413>: <function Parser.<lambda>>, <TokenType.UNCACHE: 416>: <function Parser.<lambda>>, <TokenType.UNPIVOT: 420>: <function Parser.<lambda>>, <TokenType.UPDATE: 421>: <function Parser.<lambda>>, <TokenType.USE: 422>: <function Parser.<lambda>>, <TokenType.SEMICOLON: 19>: <function Parser.<lambda>>, <TokenType.DETACH: 261>: <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
- 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
- SET_OP_MODIFIERS
- 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_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