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