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: 637 is_negated = self._match(TokenType.NOT) 638 in_expr: exp.In | None = None 639 if self._match(TokenType.IN): 640 in_expr = self._parse_in(this) 641 in_expr.set("is_global", True) 642 return self.expression(exp.Not(this=in_expr)) if is_negated else t.cast(exp.In, in_expr) 643 644 def _parse_table( 645 self, 646 schema: bool = False, 647 joins: bool = False, 648 alias_tokens: Collection[TokenType] | None = None, 649 parse_bracket: bool = False, 650 is_db_reference: bool = False, 651 parse_partition: bool = False, 652 consume_pipe: bool = False, 653 ) -> exp.Expr | None: 654 this = super()._parse_table( 655 schema=schema, 656 joins=joins, 657 alias_tokens=alias_tokens, 658 parse_bracket=parse_bracket, 659 is_db_reference=is_db_reference, 660 ) 661 662 if isinstance(this, exp.Table): 663 inner = this.this 664 alias = this.args.get("alias") 665 666 if isinstance(inner, exp.GenerateSeries) and alias and not alias.columns: 667 alias.set("columns", [exp.to_identifier("generate_series")]) 668 669 if self._match(TokenType.FINAL): 670 this = self.expression(exp.Final(this=this)) 671 672 return this 673 674 def _parse_position(self, haystack_first: bool = False) -> exp.StrPosition: 675 return super()._parse_position(haystack_first=True) 676 677 # https://clickhouse.com/docs/en/sql-reference/statements/select/with/ 678 def _parse_cte(self) -> exp.CTE | exp.FunctionSpecification | None: 679 # WITH <identifier> AS <subquery expression> 680 cte: exp.CTE | exp.FunctionSpecification | None = self._try_parse(super()._parse_cte) 681 682 if not cte: 683 # WITH <expression> AS <identifier> 684 cte = self.expression( 685 exp.CTE(this=self._parse_assignment(), alias=self._parse_table_alias(), scalar=True) 686 ) 687 688 return cte 689 690 def _parse_join_parts( 691 self, 692 ) -> tuple[Token | None, Token | None, Token | None]: 693 is_global = self._prev if self._match(TokenType.GLOBAL) else None 694 695 kind_pre = self._prev if self._match_set(self.JOIN_KINDS) else None 696 side = self._prev if self._match_set(self.JOIN_SIDES) else None 697 kind = self._prev if self._match_set(self.JOIN_KINDS) else None 698 699 return is_global, side or kind, kind_pre or kind 700 701 def _parse_join( 702 self, 703 skip_join_token: bool = False, 704 parse_bracket: bool = False, 705 alias_tokens: t.Collection[TokenType] | None = None, 706 ) -> exp.Join | None: 707 join = super()._parse_join( 708 skip_join_token=skip_join_token, parse_bracket=True, alias_tokens=alias_tokens 709 ) 710 if join: 711 method = join.args.get("method") 712 join.set("method", None) 713 join.set("global_", method) 714 715 # tbl ARRAY JOIN arr <-- this should be a `Column` reference, not a `Table` 716 # https://clickhouse.com/docs/en/sql-reference/statements/select/array-join 717 if join.kind == "ARRAY": 718 for table in join.find_all(exp.Table): 719 table.replace(table.to_column()) 720 721 return join 722 723 def _parse_function( 724 self, 725 functions: dict[str, t.Callable] | None = None, 726 anonymous: bool = False, 727 optional_parens: bool = True, 728 any_token: bool = False, 729 ) -> exp.Expr | None: 730 expr = super()._parse_function( 731 functions=functions, 732 anonymous=anonymous, 733 optional_parens=optional_parens, 734 any_token=any_token, 735 ) 736 737 func = expr.this if isinstance(expr, exp.Window) else expr 738 739 # Aggregate functions can be split in 2 parts: <func_name><suffix[es]> 740 parts = self._resolve_clickhouse_agg(func.name) if isinstance(func, exp.Anonymous) else None 741 742 if parts: 743 anon_func: exp.Anonymous = t.cast(exp.Anonymous, func) 744 params = self._parse_func_params(anon_func) 745 746 if len(parts[1]) > 0: 747 exp_class: Type[exp.Expr] = ( 748 exp.CombinedParameterizedAgg if params else exp.CombinedAggFunc 749 ) 750 else: 751 exp_class = exp.ParameterizedAgg if params else exp.AnonymousAggFunc 752 753 instance = exp_class(this=anon_func.this, expressions=anon_func.expressions) 754 if params: 755 instance.set("params", params) 756 func = self.expression(instance) 757 758 if isinstance(expr, exp.Window): 759 # The window's func was parsed as Anonymous in base parser, fix its 760 # type to be ClickHouse style CombinedAnonymousAggFunc / AnonymousAggFunc 761 expr.set("this", func) 762 elif params: 763 # Params have blocked super()._parse_function() from parsing the following window 764 # (if that exists) as they're standing between the function call and the window spec 765 expr = self._parse_window(func) 766 else: 767 expr = func 768 769 return expr 770 771 def _parse_func_params(self, this: exp.Func | None = None) -> list[exp.Expr] | None: 772 if self._match_pair(TokenType.R_PAREN, TokenType.L_PAREN): 773 return self._parse_csv(self._parse_lambda) 774 775 if self._match(TokenType.L_PAREN): 776 params = self._parse_csv(self._parse_lambda) 777 self._match_r_paren(this) 778 return params 779 780 return None 781 782 def _parse_group_concat(self) -> exp.GroupConcat: 783 args = self._parse_csv(self._parse_lambda) 784 params = self._parse_func_params() 785 786 if params: 787 # groupConcat(sep [, limit])(expr) 788 separator = seq_get(args, 0) 789 limit = seq_get(args, 1) 790 this: exp.Expr | None = seq_get(params, 0) 791 if limit is not None: 792 this = exp.Limit(this=this, expression=limit) 793 return self.expression(exp.GroupConcat(this=this, separator=separator)) 794 795 # groupConcat(expr) 796 return self.expression(exp.GroupConcat(this=seq_get(args, 0))) 797 798 def _parse_quantile(self) -> exp.Quantile: 799 this = self._parse_lambda() 800 params = self._parse_func_params() 801 if params: 802 return self.expression(exp.Quantile(this=params[0], quantile=this)) 803 return self.expression(exp.Quantile(this=this, quantile=exp.Literal.number(0.5))) 804 805 def _parse_wrapped_id_vars(self, optional: bool = False) -> list[exp.Expr]: 806 return super()._parse_wrapped_id_vars(optional=True) 807 808 def _parse_column_def( 809 self, this: exp.Expr | None, computed_column: bool = True 810 ) -> exp.Expr | None: 811 if self._match(TokenType.DOT): 812 return exp.Dot(this=this, expression=self._parse_id_var()) 813 814 return super()._parse_column_def(this, computed_column=computed_column) 815 816 def _parse_primary_key( 817 self, 818 wrapped_optional: bool = False, 819 in_props: bool = False, 820 named_primary_key: bool = False, 821 ) -> exp.PrimaryKeyColumnConstraint | exp.PrimaryKey: 822 return super()._parse_primary_key( 823 wrapped_optional=wrapped_optional or in_props, 824 in_props=in_props, 825 named_primary_key=named_primary_key, 826 ) 827 828 def _parse_on_property(self) -> exp.Expr | None: 829 index = self._index 830 if self._match_text_seq("CLUSTER"): 831 this = self._parse_string() or self._parse_id_var() 832 if this: 833 return self.expression(exp.OnCluster(this=this)) 834 else: 835 self._retreat(index) 836 return None 837 838 def _parse_auto_refresh_property(self) -> exp.AutoRefreshProperty | None: 839 index = self._index - 1 840 cadence = self._prev.text.upper() if self._match_texts(("EVERY", "AFTER")) else None 841 interval = ( 842 self._parse_interval(require_interval=False, parse_function_unit=False) 843 if cadence 844 else None 845 ) 846 847 if cadence and not interval: 848 self._retreat(index) 849 return None 850 851 offset = None 852 if self._match_text_seq("OFFSET"): 853 offset = self._parse_interval(require_interval=False, parse_function_unit=False) 854 if not offset: 855 self._retreat(index) 856 return None 857 858 randomize = None 859 if self._match_text_seq("RANDOMIZE", "FOR"): 860 randomize = self._parse_interval(require_interval=False, parse_function_unit=False) 861 if not randomize: 862 self._retreat(index) 863 return None 864 865 dependencies = None 866 if self._match_text_seq("DEPENDS", "ON"): 867 dependencies = self._parse_csv(lambda: self._parse_table_parts(schema=True)) 868 if not dependencies: 869 self._retreat(index) 870 return None 871 872 if not cadence and not dependencies: 873 self._retreat(index) 874 return None 875 876 settings = self._parse_settings_property() if self._match_text_seq("SETTINGS") else None 877 878 return self.expression( 879 exp.AutoRefreshProperty( 880 this=interval, 881 cadence=cadence, 882 offset=offset, 883 randomize=randomize, 884 expressions=dependencies, 885 settings=settings, 886 append=self._match_text_seq("APPEND"), 887 ) 888 ) 889 890 def _parse_index_constraint(self, kind: str | None = None) -> exp.IndexColumnConstraint: 891 # INDEX name1 expr TYPE type1(args) GRANULARITY value 892 this = self._parse_id_var() 893 expression = self._parse_assignment() 894 895 index_type = self._match_text_seq("TYPE") and (self._parse_function() or self._parse_var()) 896 897 granularity = self._match_text_seq("GRANULARITY") and self._parse_term() 898 899 return self.expression( 900 exp.IndexColumnConstraint( 901 this=this, expression=expression, index_type=index_type, granularity=granularity 902 ) 903 ) 904 905 def _parse_partition(self) -> exp.Partition | None: 906 # https://clickhouse.com/docs/en/sql-reference/statements/alter/partition#how-to-set-partition-expression 907 if not self._match(TokenType.PARTITION): 908 return None 909 910 if self._match_text_seq("ID"): 911 # Corresponds to the PARTITION ID <string_value> syntax 912 expressions: list[exp.Expr] = [ 913 self.expression(exp.PartitionId(this=self._parse_string())) 914 ] 915 else: 916 expressions = self._parse_expressions() 917 918 return self.expression(exp.Partition(expressions=expressions)) 919 920 def _parse_alter_table_replace(self) -> exp.Expr | None: 921 partition = self._parse_partition() 922 923 if not partition or not self._match(TokenType.FROM): 924 return None 925 926 return self.expression( 927 exp.ReplacePartition(expression=partition, source=self._parse_table_parts()) 928 ) 929 930 def _parse_alter_table_alter(self) -> exp.Expr | None: 931 # MODIFY forms other than MODIFY COLUMN (SQL SECURITY, ORDER BY, TTL, COMMENT, ...) 932 # are parsed as properties, since ALTER can now reach this path too 933 if self._prev.text.upper() == "MODIFY" and not self._match(TokenType.COLUMN, advance=False): 934 if properties := self._parse_properties(): 935 return self.expression( 936 exp.AlterModifySqlSecurity(expressions=properties.expressions) 937 ) 938 return None 939 940 # https://clickhouse.com/docs/sql-reference/statements/alter/column#modify-column 941 alter = super()._parse_alter_table_alter() 942 return None if self._curr else alter 943 944 def _parse_definer(self) -> exp.DefinerProperty | None: 945 self._match(TokenType.EQ) 946 if self._match(TokenType.CURRENT_USER): 947 return exp.DefinerProperty(this=exp.Var(this=self._prev.text.upper())) 948 return exp.DefinerProperty(this=self._parse_string()) 949 950 def _parse_projection_def(self) -> exp.ProjectionDef | None: 951 if not self._match(TokenType.PROJECTION): 952 return None 953 954 return self.expression( 955 exp.ProjectionDef( 956 this=self._parse_id_var(), expression=self._parse_wrapped(self._parse_statement) 957 ) 958 ) 959 960 def _parse_constraint(self) -> exp.Expr | None: 961 return super()._parse_constraint() or self._parse_projection_def() 962 963 def _parse_alias(self, this: exp.Expr | None, explicit: bool = False) -> exp.Expr | None: 964 # In clickhouse "SELECT <expr> APPLY(...)" is a query modifier, 965 # so "APPLY" shouldn't be parsed as <expr>'s alias. However, "SELECT <expr> apply" is a valid alias 966 if self._match_pair(TokenType.APPLY, TokenType.L_PAREN, advance=False): 967 return this 968 969 return super()._parse_alias(this=this, explicit=explicit) 970 971 def _parse_expression(self) -> exp.Expr | None: 972 this = super()._parse_expression() 973 974 # Clickhouse allows "SELECT <expr> [APPLY(func)] [...]]" modifier 975 while self._match_pair(TokenType.APPLY, TokenType.L_PAREN): 976 this = exp.Apply(this=this, expression=self._parse_var(any_token=True)) 977 self._match(TokenType.R_PAREN) 978 979 return this 980 981 def _parse_columns(self) -> exp.Expr: 982 this: exp.Expr = self.expression(exp.Columns(this=self._parse_lambda())) 983 984 while self._next and self._match_text_seq(")", "APPLY", "("): 985 self._match(TokenType.R_PAREN) 986 this = exp.Apply(this=this, expression=self._parse_var(any_token=True)) 987 return this 988 989 def _parse_value(self, values: bool = True) -> exp.Tuple | None: 990 value = super()._parse_value(values=values) 991 if not value: 992 return None 993 994 # In Clickhouse "SELECT * FROM VALUES (1, 2, 3)" generates a table with a single column, in contrast 995 # to other dialects. For this case, we canonicalize the values into a tuple-of-tuples AST if it's not already one. 996 # In INSERT INTO statements the same clause actually references multiple columns (opposite semantics), 997 # but the final result is not altered by the extra parentheses. 998 # Note: Clickhouse allows VALUES([structure], value, ...) so the branch checks for the last expression 999 # A single-value tuple is generated as "(x)", which is parsed back into a Paren 1000 # rather than a Tuple, so it's unwrapped here to keep this rewrite idempotent 1001 expressions = value.expressions 1002 if values and not isinstance(expressions[-1], exp.Tuple): 1003 value.set( 1004 "expressions", 1005 [self.expression(exp.Tuple(expressions=[expr.unnest()])) for expr in expressions], 1006 ) 1007 1008 return value 1009 1010 def _parse_partitioned_by(self) -> exp.PartitionedByProperty: 1011 # ClickHouse allows custom expressions as partition key 1012 # https://clickhouse.com/docs/engines/table-engines/mergetree-family/custom-partitioning-key 1013 return self.expression(exp.PartitionedByProperty(this=self._parse_assignment())) 1014 1015 def _parse_detach(self) -> exp.Detach: 1016 kind = self._match_set(self.DB_CREATABLES) and self._prev.text.upper() 1017 exists = self._parse_exists() 1018 this = self._parse_table_parts() 1019 1020 return self.expression( 1021 exp.Detach( 1022 this=this, 1023 kind=kind, 1024 exists=exists, 1025 cluster=self._parse_on_property() if self._match(TokenType.ON) else None, 1026 permanent=self._match_text_seq("PERMANENTLY"), 1027 sync=self._match_text_seq("SYNC"), 1028 ) 1029 )
TIMESTAMP_TRUNC_UNITS =
{'MILLISECOND', 'QUARTER', 'YEAR', 'SECOND', 'MONTH', 'HOUR', 'MICROSECOND', 'MINUTE', 'DAY'}
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: 638 is_negated = self._match(TokenType.NOT) 639 in_expr: exp.In | None = None 640 if self._match(TokenType.IN): 641 in_expr = self._parse_in(this) 642 in_expr.set("is_global", True) 643 return self.expression(exp.Not(this=in_expr)) if is_negated else t.cast(exp.In, in_expr) 644 645 def _parse_table( 646 self, 647 schema: bool = False, 648 joins: bool = False, 649 alias_tokens: Collection[TokenType] | None = None, 650 parse_bracket: bool = False, 651 is_db_reference: bool = False, 652 parse_partition: bool = False, 653 consume_pipe: bool = False, 654 ) -> exp.Expr | None: 655 this = super()._parse_table( 656 schema=schema, 657 joins=joins, 658 alias_tokens=alias_tokens, 659 parse_bracket=parse_bracket, 660 is_db_reference=is_db_reference, 661 ) 662 663 if isinstance(this, exp.Table): 664 inner = this.this 665 alias = this.args.get("alias") 666 667 if isinstance(inner, exp.GenerateSeries) and alias and not alias.columns: 668 alias.set("columns", [exp.to_identifier("generate_series")]) 669 670 if self._match(TokenType.FINAL): 671 this = self.expression(exp.Final(this=this)) 672 673 return this 674 675 def _parse_position(self, haystack_first: bool = False) -> exp.StrPosition: 676 return super()._parse_position(haystack_first=True) 677 678 # https://clickhouse.com/docs/en/sql-reference/statements/select/with/ 679 def _parse_cte(self) -> exp.CTE | exp.FunctionSpecification | None: 680 # WITH <identifier> AS <subquery expression> 681 cte: exp.CTE | exp.FunctionSpecification | None = self._try_parse(super()._parse_cte) 682 683 if not cte: 684 # WITH <expression> AS <identifier> 685 cte = self.expression( 686 exp.CTE(this=self._parse_assignment(), alias=self._parse_table_alias(), scalar=True) 687 ) 688 689 return cte 690 691 def _parse_join_parts( 692 self, 693 ) -> tuple[Token | None, Token | None, Token | None]: 694 is_global = self._prev if self._match(TokenType.GLOBAL) else None 695 696 kind_pre = self._prev if self._match_set(self.JOIN_KINDS) else None 697 side = self._prev if self._match_set(self.JOIN_SIDES) else None 698 kind = self._prev if self._match_set(self.JOIN_KINDS) else None 699 700 return is_global, side or kind, kind_pre or kind 701 702 def _parse_join( 703 self, 704 skip_join_token: bool = False, 705 parse_bracket: bool = False, 706 alias_tokens: t.Collection[TokenType] | None = None, 707 ) -> exp.Join | None: 708 join = super()._parse_join( 709 skip_join_token=skip_join_token, parse_bracket=True, alias_tokens=alias_tokens 710 ) 711 if join: 712 method = join.args.get("method") 713 join.set("method", None) 714 join.set("global_", method) 715 716 # tbl ARRAY JOIN arr <-- this should be a `Column` reference, not a `Table` 717 # https://clickhouse.com/docs/en/sql-reference/statements/select/array-join 718 if join.kind == "ARRAY": 719 for table in join.find_all(exp.Table): 720 table.replace(table.to_column()) 721 722 return join 723 724 def _parse_function( 725 self, 726 functions: dict[str, t.Callable] | None = None, 727 anonymous: bool = False, 728 optional_parens: bool = True, 729 any_token: bool = False, 730 ) -> exp.Expr | None: 731 expr = super()._parse_function( 732 functions=functions, 733 anonymous=anonymous, 734 optional_parens=optional_parens, 735 any_token=any_token, 736 ) 737 738 func = expr.this if isinstance(expr, exp.Window) else expr 739 740 # Aggregate functions can be split in 2 parts: <func_name><suffix[es]> 741 parts = self._resolve_clickhouse_agg(func.name) if isinstance(func, exp.Anonymous) else None 742 743 if parts: 744 anon_func: exp.Anonymous = t.cast(exp.Anonymous, func) 745 params = self._parse_func_params(anon_func) 746 747 if len(parts[1]) > 0: 748 exp_class: Type[exp.Expr] = ( 749 exp.CombinedParameterizedAgg if params else exp.CombinedAggFunc 750 ) 751 else: 752 exp_class = exp.ParameterizedAgg if params else exp.AnonymousAggFunc 753 754 instance = exp_class(this=anon_func.this, expressions=anon_func.expressions) 755 if params: 756 instance.set("params", params) 757 func = self.expression(instance) 758 759 if isinstance(expr, exp.Window): 760 # The window's func was parsed as Anonymous in base parser, fix its 761 # type to be ClickHouse style CombinedAnonymousAggFunc / AnonymousAggFunc 762 expr.set("this", func) 763 elif params: 764 # Params have blocked super()._parse_function() from parsing the following window 765 # (if that exists) as they're standing between the function call and the window spec 766 expr = self._parse_window(func) 767 else: 768 expr = func 769 770 return expr 771 772 def _parse_func_params(self, this: exp.Func | None = None) -> list[exp.Expr] | None: 773 if self._match_pair(TokenType.R_PAREN, TokenType.L_PAREN): 774 return self._parse_csv(self._parse_lambda) 775 776 if self._match(TokenType.L_PAREN): 777 params = self._parse_csv(self._parse_lambda) 778 self._match_r_paren(this) 779 return params 780 781 return None 782 783 def _parse_group_concat(self) -> exp.GroupConcat: 784 args = self._parse_csv(self._parse_lambda) 785 params = self._parse_func_params() 786 787 if params: 788 # groupConcat(sep [, limit])(expr) 789 separator = seq_get(args, 0) 790 limit = seq_get(args, 1) 791 this: exp.Expr | None = seq_get(params, 0) 792 if limit is not None: 793 this = exp.Limit(this=this, expression=limit) 794 return self.expression(exp.GroupConcat(this=this, separator=separator)) 795 796 # groupConcat(expr) 797 return self.expression(exp.GroupConcat(this=seq_get(args, 0))) 798 799 def _parse_quantile(self) -> exp.Quantile: 800 this = self._parse_lambda() 801 params = self._parse_func_params() 802 if params: 803 return self.expression(exp.Quantile(this=params[0], quantile=this)) 804 return self.expression(exp.Quantile(this=this, quantile=exp.Literal.number(0.5))) 805 806 def _parse_wrapped_id_vars(self, optional: bool = False) -> list[exp.Expr]: 807 return super()._parse_wrapped_id_vars(optional=True) 808 809 def _parse_column_def( 810 self, this: exp.Expr | None, computed_column: bool = True 811 ) -> exp.Expr | None: 812 if self._match(TokenType.DOT): 813 return exp.Dot(this=this, expression=self._parse_id_var()) 814 815 return super()._parse_column_def(this, computed_column=computed_column) 816 817 def _parse_primary_key( 818 self, 819 wrapped_optional: bool = False, 820 in_props: bool = False, 821 named_primary_key: bool = False, 822 ) -> exp.PrimaryKeyColumnConstraint | exp.PrimaryKey: 823 return super()._parse_primary_key( 824 wrapped_optional=wrapped_optional or in_props, 825 in_props=in_props, 826 named_primary_key=named_primary_key, 827 ) 828 829 def _parse_on_property(self) -> exp.Expr | None: 830 index = self._index 831 if self._match_text_seq("CLUSTER"): 832 this = self._parse_string() or self._parse_id_var() 833 if this: 834 return self.expression(exp.OnCluster(this=this)) 835 else: 836 self._retreat(index) 837 return None 838 839 def _parse_auto_refresh_property(self) -> exp.AutoRefreshProperty | None: 840 index = self._index - 1 841 cadence = self._prev.text.upper() if self._match_texts(("EVERY", "AFTER")) else None 842 interval = ( 843 self._parse_interval(require_interval=False, parse_function_unit=False) 844 if cadence 845 else None 846 ) 847 848 if cadence and not interval: 849 self._retreat(index) 850 return None 851 852 offset = None 853 if self._match_text_seq("OFFSET"): 854 offset = self._parse_interval(require_interval=False, parse_function_unit=False) 855 if not offset: 856 self._retreat(index) 857 return None 858 859 randomize = None 860 if self._match_text_seq("RANDOMIZE", "FOR"): 861 randomize = self._parse_interval(require_interval=False, parse_function_unit=False) 862 if not randomize: 863 self._retreat(index) 864 return None 865 866 dependencies = None 867 if self._match_text_seq("DEPENDS", "ON"): 868 dependencies = self._parse_csv(lambda: self._parse_table_parts(schema=True)) 869 if not dependencies: 870 self._retreat(index) 871 return None 872 873 if not cadence and not dependencies: 874 self._retreat(index) 875 return None 876 877 settings = self._parse_settings_property() if self._match_text_seq("SETTINGS") else None 878 879 return self.expression( 880 exp.AutoRefreshProperty( 881 this=interval, 882 cadence=cadence, 883 offset=offset, 884 randomize=randomize, 885 expressions=dependencies, 886 settings=settings, 887 append=self._match_text_seq("APPEND"), 888 ) 889 ) 890 891 def _parse_index_constraint(self, kind: str | None = None) -> exp.IndexColumnConstraint: 892 # INDEX name1 expr TYPE type1(args) GRANULARITY value 893 this = self._parse_id_var() 894 expression = self._parse_assignment() 895 896 index_type = self._match_text_seq("TYPE") and (self._parse_function() or self._parse_var()) 897 898 granularity = self._match_text_seq("GRANULARITY") and self._parse_term() 899 900 return self.expression( 901 exp.IndexColumnConstraint( 902 this=this, expression=expression, index_type=index_type, granularity=granularity 903 ) 904 ) 905 906 def _parse_partition(self) -> exp.Partition | None: 907 # https://clickhouse.com/docs/en/sql-reference/statements/alter/partition#how-to-set-partition-expression 908 if not self._match(TokenType.PARTITION): 909 return None 910 911 if self._match_text_seq("ID"): 912 # Corresponds to the PARTITION ID <string_value> syntax 913 expressions: list[exp.Expr] = [ 914 self.expression(exp.PartitionId(this=self._parse_string())) 915 ] 916 else: 917 expressions = self._parse_expressions() 918 919 return self.expression(exp.Partition(expressions=expressions)) 920 921 def _parse_alter_table_replace(self) -> exp.Expr | None: 922 partition = self._parse_partition() 923 924 if not partition or not self._match(TokenType.FROM): 925 return None 926 927 return self.expression( 928 exp.ReplacePartition(expression=partition, source=self._parse_table_parts()) 929 ) 930 931 def _parse_alter_table_alter(self) -> exp.Expr | None: 932 # MODIFY forms other than MODIFY COLUMN (SQL SECURITY, ORDER BY, TTL, COMMENT, ...) 933 # are parsed as properties, since ALTER can now reach this path too 934 if self._prev.text.upper() == "MODIFY" and not self._match(TokenType.COLUMN, advance=False): 935 if properties := self._parse_properties(): 936 return self.expression( 937 exp.AlterModifySqlSecurity(expressions=properties.expressions) 938 ) 939 return None 940 941 # https://clickhouse.com/docs/sql-reference/statements/alter/column#modify-column 942 alter = super()._parse_alter_table_alter() 943 return None if self._curr else alter 944 945 def _parse_definer(self) -> exp.DefinerProperty | None: 946 self._match(TokenType.EQ) 947 if self._match(TokenType.CURRENT_USER): 948 return exp.DefinerProperty(this=exp.Var(this=self._prev.text.upper())) 949 return exp.DefinerProperty(this=self._parse_string()) 950 951 def _parse_projection_def(self) -> exp.ProjectionDef | None: 952 if not self._match(TokenType.PROJECTION): 953 return None 954 955 return self.expression( 956 exp.ProjectionDef( 957 this=self._parse_id_var(), expression=self._parse_wrapped(self._parse_statement) 958 ) 959 ) 960 961 def _parse_constraint(self) -> exp.Expr | None: 962 return super()._parse_constraint() or self._parse_projection_def() 963 964 def _parse_alias(self, this: exp.Expr | None, explicit: bool = False) -> exp.Expr | None: 965 # In clickhouse "SELECT <expr> APPLY(...)" is a query modifier, 966 # so "APPLY" shouldn't be parsed as <expr>'s alias. However, "SELECT <expr> apply" is a valid alias 967 if self._match_pair(TokenType.APPLY, TokenType.L_PAREN, advance=False): 968 return this 969 970 return super()._parse_alias(this=this, explicit=explicit) 971 972 def _parse_expression(self) -> exp.Expr | None: 973 this = super()._parse_expression() 974 975 # Clickhouse allows "SELECT <expr> [APPLY(func)] [...]]" modifier 976 while self._match_pair(TokenType.APPLY, TokenType.L_PAREN): 977 this = exp.Apply(this=this, expression=self._parse_var(any_token=True)) 978 self._match(TokenType.R_PAREN) 979 980 return this 981 982 def _parse_columns(self) -> exp.Expr: 983 this: exp.Expr = self.expression(exp.Columns(this=self._parse_lambda())) 984 985 while self._next and self._match_text_seq(")", "APPLY", "("): 986 self._match(TokenType.R_PAREN) 987 this = exp.Apply(this=this, expression=self._parse_var(any_token=True)) 988 return this 989 990 def _parse_value(self, values: bool = True) -> exp.Tuple | None: 991 value = super()._parse_value(values=values) 992 if not value: 993 return None 994 995 # In Clickhouse "SELECT * FROM VALUES (1, 2, 3)" generates a table with a single column, in contrast 996 # to other dialects. For this case, we canonicalize the values into a tuple-of-tuples AST if it's not already one. 997 # In INSERT INTO statements the same clause actually references multiple columns (opposite semantics), 998 # but the final result is not altered by the extra parentheses. 999 # Note: Clickhouse allows VALUES([structure], value, ...) so the branch checks for the last expression 1000 # A single-value tuple is generated as "(x)", which is parsed back into a Paren 1001 # rather than a Tuple, so it's unwrapped here to keep this rewrite idempotent 1002 expressions = value.expressions 1003 if values and not isinstance(expressions[-1], exp.Tuple): 1004 value.set( 1005 "expressions", 1006 [self.expression(exp.Tuple(expressions=[expr.unnest()])) for expr in expressions], 1007 ) 1008 1009 return value 1010 1011 def _parse_partitioned_by(self) -> exp.PartitionedByProperty: 1012 # ClickHouse allows custom expressions as partition key 1013 # https://clickhouse.com/docs/engines/table-engines/mergetree-family/custom-partitioning-key 1014 return self.expression(exp.PartitionedByProperty(this=self._parse_assignment())) 1015 1016 def _parse_detach(self) -> exp.Detach: 1017 kind = self._match_set(self.DB_CREATABLES) and self._prev.text.upper() 1018 exists = self._parse_exists() 1019 this = self._parse_table_parts() 1020 1021 return self.expression( 1022 exp.Detach( 1023 this=this, 1024 kind=kind, 1025 exists=exists, 1026 cluster=self._parse_on_property() if self._match(TokenType.ON) else None, 1027 permanent=self._match_text_seq("PERMANENTLY"), 1028 sync=self._match_text_seq("SYNC"), 1029 ) 1030 )
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'>>, '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'>>, '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'>>, '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>>, 'TOSTARTOFMILLISECOND': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFQUARTER': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFYEAR': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFSECOND': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFMONTH': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFHOUR': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFMICROSECOND': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFMINUTE': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFDAY': <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 =
{'welchTTest', 'quantiles', 'rankCorr', 'quantileBFloat16Weighted', 'groupUniqArray', 'quantilesGK', 'sequenceMatch', 'groupBitmap', 'groupBitOr', 'maxMap', 'uniqCombined', 'groupBitAnd', 'quantileGK', 'quantileInterpolatedWeighted', 'quantilesBFloat16Weighted', 'exponentialTimeDecayedAvg', 'kurtSamp', 'any', 'theilsU', 'argMax', 'quantilesTimingWeighted', 'groupArraySample', 'sumCount', 'sumWithOverflow', 'uniqTheta', 'groupArrayMovingSum', 'corr', 'quantilesBFloat16', 'min', 'groupArray', 'sequenceCount', 'kolmogorovSmirnovTest', 'deltaSum', 'meanZTest', 'anyHeavy', 'count', 'quantilesExactLow', 'groupBitmapAnd', 'quantileDeterministic', 'quantilesExact', 'sumMap', 'covarPop', 'studentTTest', 'first_value', 'exponentialMovingAverage', 'simpleLinearRegression', 'stochasticLogisticRegression', 'quantilesInterpolatedWeighted', 'minMap', 'quantilesExactHigh', 'groupArrayInsertAt', 'quantileBFloat16', 'quantileTDigestWeighted', 'covarSamp', 'intervalLengthSum', 'median', 'quantileExactWeighted', 'quantilesTDigest', 'groupBitmapXor', 'quantileExact', 'maxIntersectionsPosition', 'uniqUpTo', 'retention', 'quantilesTiming', 'windowFunnel', 'stddevSamp', 'quantileExactHigh', 'entropy', 'boundingRatio', 'quantileTimingWeighted', 'mannWhitneyUTest', 'cramersV', 'cramersVBiasCorrected', 'deltaSumTimestamp', 'stochasticLinearRegression', 'sparkBar', 'contingency', 'groupBitmapOr', 'approx_top_sum', 'avg', 'stddevPop', 'quantilesTDigestWeighted', 'quantile', 'avgWeighted', 'groupConcat', 'quantileExactInclusive', 'maxIntersections', 'topKWeighted', 'skewPop', 'last_value', 'kurtPop', 'sumKahan', 'histogram', 'categoricalInformationValue', 'quantilesExactExclusive', 'quantileExactLow', 'quantileTiming', 'max', 'groupArrayLast', 'groupArrayMovingAvg', 'anyLast', 'uniqExact', 'skewSamp', 'sequenceNextNode', 'uniqCombined64', 'groupBitXor', 'quantilesExactWeighted', 'sum', 'largestTriangleThreeBuckets', 'varPop', 'uniqHLL12', 'uniq', 'varSamp', 'topK', 'quantilesDeterministic', 'quantileTDigest', 'argMin'}
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 =
{'welchTTestSimpleState': ('welchTTest', 'SimpleState'), 'quantilesSimpleState': ('quantiles', 'SimpleState'), 'rankCorrSimpleState': ('rankCorr', 'SimpleState'), 'quantileBFloat16WeightedSimpleState': ('quantileBFloat16Weighted', 'SimpleState'), 'groupUniqArraySimpleState': ('groupUniqArray', 'SimpleState'), 'quantilesGKSimpleState': ('quantilesGK', 'SimpleState'), 'sequenceMatchSimpleState': ('sequenceMatch', 'SimpleState'), 'groupBitmapSimpleState': ('groupBitmap', 'SimpleState'), 'groupBitOrSimpleState': ('groupBitOr', 'SimpleState'), 'maxMapSimpleState': ('maxMap', 'SimpleState'), 'uniqCombinedSimpleState': ('uniqCombined', 'SimpleState'), 'groupBitAndSimpleState': ('groupBitAnd', 'SimpleState'), 'quantileGKSimpleState': ('quantileGK', 'SimpleState'), 'quantileInterpolatedWeightedSimpleState': ('quantileInterpolatedWeighted', 'SimpleState'), 'quantilesBFloat16WeightedSimpleState': ('quantilesBFloat16Weighted', 'SimpleState'), 'exponentialTimeDecayedAvgSimpleState': ('exponentialTimeDecayedAvg', 'SimpleState'), 'kurtSampSimpleState': ('kurtSamp', 'SimpleState'), 'anySimpleState': ('any', 'SimpleState'), 'theilsUSimpleState': ('theilsU', 'SimpleState'), 'argMaxSimpleState': ('argMax', 'SimpleState'), 'quantilesTimingWeightedSimpleState': ('quantilesTimingWeighted', 'SimpleState'), 'groupArraySampleSimpleState': ('groupArraySample', 'SimpleState'), 'sumCountSimpleState': ('sumCount', 'SimpleState'), 'sumWithOverflowSimpleState': ('sumWithOverflow', 'SimpleState'), 'uniqThetaSimpleState': ('uniqTheta', 'SimpleState'), 'groupArrayMovingSumSimpleState': ('groupArrayMovingSum', 'SimpleState'), 'corrSimpleState': ('corr', 'SimpleState'), 'quantilesBFloat16SimpleState': ('quantilesBFloat16', 'SimpleState'), 'minSimpleState': ('min', 'SimpleState'), 'groupArraySimpleState': ('groupArray', 'SimpleState'), 'sequenceCountSimpleState': ('sequenceCount', 'SimpleState'), 'kolmogorovSmirnovTestSimpleState': ('kolmogorovSmirnovTest', 'SimpleState'), 'deltaSumSimpleState': ('deltaSum', 'SimpleState'), 'meanZTestSimpleState': ('meanZTest', 'SimpleState'), 'anyHeavySimpleState': ('anyHeavy', 'SimpleState'), 'countSimpleState': ('count', 'SimpleState'), 'quantilesExactLowSimpleState': ('quantilesExactLow', 'SimpleState'), 'groupBitmapAndSimpleState': ('groupBitmapAnd', 'SimpleState'), 'quantileDeterministicSimpleState': ('quantileDeterministic', 'SimpleState'), 'quantilesExactSimpleState': ('quantilesExact', 'SimpleState'), 'sumMapSimpleState': ('sumMap', 'SimpleState'), 'covarPopSimpleState': ('covarPop', 'SimpleState'), 'studentTTestSimpleState': ('studentTTest', 'SimpleState'), 'first_valueSimpleState': ('first_value', 'SimpleState'), 'exponentialMovingAverageSimpleState': ('exponentialMovingAverage', 'SimpleState'), 'simpleLinearRegressionSimpleState': ('simpleLinearRegression', 'SimpleState'), 'stochasticLogisticRegressionSimpleState': ('stochasticLogisticRegression', 'SimpleState'), 'quantilesInterpolatedWeightedSimpleState': ('quantilesInterpolatedWeighted', 'SimpleState'), 'minMapSimpleState': ('minMap', 'SimpleState'), 'quantilesExactHighSimpleState': ('quantilesExactHigh', 'SimpleState'), 'groupArrayInsertAtSimpleState': ('groupArrayInsertAt', 'SimpleState'), 'quantileBFloat16SimpleState': ('quantileBFloat16', 'SimpleState'), 'quantileTDigestWeightedSimpleState': ('quantileTDigestWeighted', 'SimpleState'), 'covarSampSimpleState': ('covarSamp', 'SimpleState'), 'intervalLengthSumSimpleState': ('intervalLengthSum', 'SimpleState'), 'medianSimpleState': ('median', 'SimpleState'), 'quantileExactWeightedSimpleState': ('quantileExactWeighted', 'SimpleState'), 'quantilesTDigestSimpleState': ('quantilesTDigest', 'SimpleState'), 'groupBitmapXorSimpleState': ('groupBitmapXor', 'SimpleState'), 'quantileExactSimpleState': ('quantileExact', 'SimpleState'), 'maxIntersectionsPositionSimpleState': ('maxIntersectionsPosition', 'SimpleState'), 'uniqUpToSimpleState': ('uniqUpTo', 'SimpleState'), 'retentionSimpleState': ('retention', 'SimpleState'), 'quantilesTimingSimpleState': ('quantilesTiming', 'SimpleState'), 'windowFunnelSimpleState': ('windowFunnel', 'SimpleState'), 'stddevSampSimpleState': ('stddevSamp', 'SimpleState'), 'quantileExactHighSimpleState': ('quantileExactHigh', 'SimpleState'), 'entropySimpleState': ('entropy', 'SimpleState'), 'boundingRatioSimpleState': ('boundingRatio', 'SimpleState'), 'quantileTimingWeightedSimpleState': ('quantileTimingWeighted', 'SimpleState'), 'mannWhitneyUTestSimpleState': ('mannWhitneyUTest', 'SimpleState'), 'cramersVSimpleState': ('cramersV', 'SimpleState'), 'cramersVBiasCorrectedSimpleState': ('cramersVBiasCorrected', 'SimpleState'), 'deltaSumTimestampSimpleState': ('deltaSumTimestamp', 'SimpleState'), 'stochasticLinearRegressionSimpleState': ('stochasticLinearRegression', 'SimpleState'), 'sparkBarSimpleState': ('sparkBar', 'SimpleState'), 'contingencySimpleState': ('contingency', 'SimpleState'), 'groupBitmapOrSimpleState': ('groupBitmapOr', 'SimpleState'), 'approx_top_sumSimpleState': ('approx_top_sum', 'SimpleState'), 'avgSimpleState': ('avg', 'SimpleState'), 'stddevPopSimpleState': ('stddevPop', 'SimpleState'), 'quantilesTDigestWeightedSimpleState': ('quantilesTDigestWeighted', 'SimpleState'), 'quantileSimpleState': ('quantile', 'SimpleState'), 'avgWeightedSimpleState': ('avgWeighted', 'SimpleState'), 'groupConcatSimpleState': ('groupConcat', 'SimpleState'), 'quantileExactInclusiveSimpleState': ('quantileExactInclusive', 'SimpleState'), 'maxIntersectionsSimpleState': ('maxIntersections', 'SimpleState'), 'topKWeightedSimpleState': ('topKWeighted', 'SimpleState'), 'skewPopSimpleState': ('skewPop', 'SimpleState'), 'last_valueSimpleState': ('last_value', 'SimpleState'), 'kurtPopSimpleState': ('kurtPop', 'SimpleState'), 'sumKahanSimpleState': ('sumKahan', 'SimpleState'), 'histogramSimpleState': ('histogram', 'SimpleState'), 'categoricalInformationValueSimpleState': ('categoricalInformationValue', 'SimpleState'), 'quantilesExactExclusiveSimpleState': ('quantilesExactExclusive', 'SimpleState'), 'quantileExactLowSimpleState': ('quantileExactLow', 'SimpleState'), 'quantileTimingSimpleState': ('quantileTiming', 'SimpleState'), 'maxSimpleState': ('max', 'SimpleState'), 'groupArrayLastSimpleState': ('groupArrayLast', 'SimpleState'), 'groupArrayMovingAvgSimpleState': ('groupArrayMovingAvg', 'SimpleState'), 'anyLastSimpleState': ('anyLast', 'SimpleState'), 'uniqExactSimpleState': ('uniqExact', 'SimpleState'), 'skewSampSimpleState': ('skewSamp', 'SimpleState'), 'sequenceNextNodeSimpleState': ('sequenceNextNode', 'SimpleState'), 'uniqCombined64SimpleState': ('uniqCombined64', 'SimpleState'), 'groupBitXorSimpleState': ('groupBitXor', 'SimpleState'), 'quantilesExactWeightedSimpleState': ('quantilesExactWeighted', 'SimpleState'), 'sumSimpleState': ('sum', 'SimpleState'), 'largestTriangleThreeBucketsSimpleState': ('largestTriangleThreeBuckets', 'SimpleState'), 'varPopSimpleState': ('varPop', 'SimpleState'), 'uniqHLL12SimpleState': ('uniqHLL12', 'SimpleState'), 'uniqSimpleState': ('uniq', 'SimpleState'), 'varSampSimpleState': ('varSamp', 'SimpleState'), 'topKSimpleState': ('topK', 'SimpleState'), 'quantilesDeterministicSimpleState': ('quantilesDeterministic', 'SimpleState'), 'quantileTDigestSimpleState': ('quantileTDigest', 'SimpleState'), 'argMinSimpleState': ('argMin', 'SimpleState'), 'welchTTestMergeState': ('welchTTest', 'MergeState'), 'quantilesMergeState': ('quantiles', 'MergeState'), 'rankCorrMergeState': ('rankCorr', 'MergeState'), 'quantileBFloat16WeightedMergeState': ('quantileBFloat16Weighted', 'MergeState'), 'groupUniqArrayMergeState': ('groupUniqArray', 'MergeState'), 'quantilesGKMergeState': ('quantilesGK', 'MergeState'), 'sequenceMatchMergeState': ('sequenceMatch', 'MergeState'), 'groupBitmapMergeState': ('groupBitmap', 'MergeState'), 'groupBitOrMergeState': ('groupBitOr', 'MergeState'), 'maxMapMergeState': ('maxMap', 'MergeState'), 'uniqCombinedMergeState': ('uniqCombined', 'MergeState'), 'groupBitAndMergeState': ('groupBitAnd', 'MergeState'), 'quantileGKMergeState': ('quantileGK', 'MergeState'), 'quantileInterpolatedWeightedMergeState': ('quantileInterpolatedWeighted', 'MergeState'), 'quantilesBFloat16WeightedMergeState': ('quantilesBFloat16Weighted', 'MergeState'), 'exponentialTimeDecayedAvgMergeState': ('exponentialTimeDecayedAvg', 'MergeState'), 'kurtSampMergeState': ('kurtSamp', 'MergeState'), 'anyMergeState': ('any', 'MergeState'), 'theilsUMergeState': ('theilsU', 'MergeState'), 'argMaxMergeState': ('argMax', 'MergeState'), 'quantilesTimingWeightedMergeState': ('quantilesTimingWeighted', 'MergeState'), 'groupArraySampleMergeState': ('groupArraySample', 'MergeState'), 'sumCountMergeState': ('sumCount', 'MergeState'), 'sumWithOverflowMergeState': ('sumWithOverflow', 'MergeState'), 'uniqThetaMergeState': ('uniqTheta', 'MergeState'), 'groupArrayMovingSumMergeState': ('groupArrayMovingSum', 'MergeState'), 'corrMergeState': ('corr', 'MergeState'), 'quantilesBFloat16MergeState': ('quantilesBFloat16', 'MergeState'), 'minMergeState': ('min', 'MergeState'), 'groupArrayMergeState': ('groupArray', 'MergeState'), 'sequenceCountMergeState': ('sequenceCount', 'MergeState'), 'kolmogorovSmirnovTestMergeState': ('kolmogorovSmirnovTest', 'MergeState'), 'deltaSumMergeState': ('deltaSum', 'MergeState'), 'meanZTestMergeState': ('meanZTest', 'MergeState'), 'anyHeavyMergeState': ('anyHeavy', 'MergeState'), 'countMergeState': ('count', 'MergeState'), 'quantilesExactLowMergeState': ('quantilesExactLow', 'MergeState'), 'groupBitmapAndMergeState': ('groupBitmapAnd', 'MergeState'), 'quantileDeterministicMergeState': ('quantileDeterministic', 'MergeState'), 'quantilesExactMergeState': ('quantilesExact', 'MergeState'), 'sumMapMergeState': ('sumMap', 'MergeState'), 'covarPopMergeState': ('covarPop', 'MergeState'), 'studentTTestMergeState': ('studentTTest', 'MergeState'), 'first_valueMergeState': ('first_value', 'MergeState'), 'exponentialMovingAverageMergeState': ('exponentialMovingAverage', 'MergeState'), 'simpleLinearRegressionMergeState': ('simpleLinearRegression', 'MergeState'), 'stochasticLogisticRegressionMergeState': ('stochasticLogisticRegression', 'MergeState'), 'quantilesInterpolatedWeightedMergeState': ('quantilesInterpolatedWeighted', 'MergeState'), 'minMapMergeState': ('minMap', 'MergeState'), 'quantilesExactHighMergeState': ('quantilesExactHigh', 'MergeState'), 'groupArrayInsertAtMergeState': ('groupArrayInsertAt', 'MergeState'), 'quantileBFloat16MergeState': ('quantileBFloat16', 'MergeState'), 'quantileTDigestWeightedMergeState': ('quantileTDigestWeighted', 'MergeState'), 'covarSampMergeState': ('covarSamp', 'MergeState'), 'intervalLengthSumMergeState': ('intervalLengthSum', 'MergeState'), 'medianMergeState': ('median', 'MergeState'), 'quantileExactWeightedMergeState': ('quantileExactWeighted', 'MergeState'), 'quantilesTDigestMergeState': ('quantilesTDigest', 'MergeState'), 'groupBitmapXorMergeState': ('groupBitmapXor', 'MergeState'), 'quantileExactMergeState': ('quantileExact', 'MergeState'), 'maxIntersectionsPositionMergeState': ('maxIntersectionsPosition', 'MergeState'), 'uniqUpToMergeState': ('uniqUpTo', 'MergeState'), 'retentionMergeState': ('retention', 'MergeState'), 'quantilesTimingMergeState': ('quantilesTiming', 'MergeState'), 'windowFunnelMergeState': ('windowFunnel', 'MergeState'), 'stddevSampMergeState': ('stddevSamp', 'MergeState'), 'quantileExactHighMergeState': ('quantileExactHigh', 'MergeState'), 'entropyMergeState': ('entropy', 'MergeState'), 'boundingRatioMergeState': ('boundingRatio', 'MergeState'), 'quantileTimingWeightedMergeState': ('quantileTimingWeighted', 'MergeState'), 'mannWhitneyUTestMergeState': ('mannWhitneyUTest', 'MergeState'), 'cramersVMergeState': ('cramersV', 'MergeState'), 'cramersVBiasCorrectedMergeState': ('cramersVBiasCorrected', 'MergeState'), 'deltaSumTimestampMergeState': ('deltaSumTimestamp', 'MergeState'), 'stochasticLinearRegressionMergeState': ('stochasticLinearRegression', 'MergeState'), 'sparkBarMergeState': ('sparkBar', 'MergeState'), 'contingencyMergeState': ('contingency', 'MergeState'), 'groupBitmapOrMergeState': ('groupBitmapOr', 'MergeState'), 'approx_top_sumMergeState': ('approx_top_sum', 'MergeState'), 'avgMergeState': ('avg', 'MergeState'), 'stddevPopMergeState': ('stddevPop', 'MergeState'), 'quantilesTDigestWeightedMergeState': ('quantilesTDigestWeighted', 'MergeState'), 'quantileMergeState': ('quantile', 'MergeState'), 'avgWeightedMergeState': ('avgWeighted', 'MergeState'), 'groupConcatMergeState': ('groupConcat', 'MergeState'), 'quantileExactInclusiveMergeState': ('quantileExactInclusive', 'MergeState'), 'maxIntersectionsMergeState': ('maxIntersections', 'MergeState'), 'topKWeightedMergeState': ('topKWeighted', 'MergeState'), 'skewPopMergeState': ('skewPop', 'MergeState'), 'last_valueMergeState': ('last_value', 'MergeState'), 'kurtPopMergeState': ('kurtPop', 'MergeState'), 'sumKahanMergeState': ('sumKahan', 'MergeState'), 'histogramMergeState': ('histogram', 'MergeState'), 'categoricalInformationValueMergeState': ('categoricalInformationValue', 'MergeState'), 'quantilesExactExclusiveMergeState': ('quantilesExactExclusive', 'MergeState'), 'quantileExactLowMergeState': ('quantileExactLow', 'MergeState'), 'quantileTimingMergeState': ('quantileTiming', 'MergeState'), 'maxMergeState': ('max', 'MergeState'), 'groupArrayLastMergeState': ('groupArrayLast', 'MergeState'), 'groupArrayMovingAvgMergeState': ('groupArrayMovingAvg', 'MergeState'), 'anyLastMergeState': ('anyLast', 'MergeState'), 'uniqExactMergeState': ('uniqExact', 'MergeState'), 'skewSampMergeState': ('skewSamp', 'MergeState'), 'sequenceNextNodeMergeState': ('sequenceNextNode', 'MergeState'), 'uniqCombined64MergeState': ('uniqCombined64', 'MergeState'), 'groupBitXorMergeState': ('groupBitXor', 'MergeState'), 'quantilesExactWeightedMergeState': ('quantilesExactWeighted', 'MergeState'), 'sumMergeState': ('sum', 'MergeState'), 'largestTriangleThreeBucketsMergeState': ('largestTriangleThreeBuckets', 'MergeState'), 'varPopMergeState': ('varPop', 'MergeState'), 'uniqHLL12MergeState': ('uniqHLL12', 'MergeState'), 'uniqMergeState': ('uniq', 'MergeState'), 'varSampMergeState': ('varSamp', 'MergeState'), 'topKMergeState': ('topK', 'MergeState'), 'quantilesDeterministicMergeState': ('quantilesDeterministic', 'MergeState'), 'quantileTDigestMergeState': ('quantileTDigest', 'MergeState'), 'argMinMergeState': ('argMin', 'MergeState'), 'welchTTestOrDefault': ('welchTTest', 'OrDefault'), 'quantilesOrDefault': ('quantiles', 'OrDefault'), 'rankCorrOrDefault': ('rankCorr', 'OrDefault'), 'quantileBFloat16WeightedOrDefault': ('quantileBFloat16Weighted', 'OrDefault'), 'groupUniqArrayOrDefault': ('groupUniqArray', 'OrDefault'), 'quantilesGKOrDefault': ('quantilesGK', 'OrDefault'), 'sequenceMatchOrDefault': ('sequenceMatch', 'OrDefault'), 'groupBitmapOrDefault': ('groupBitmap', 'OrDefault'), 'groupBitOrOrDefault': ('groupBitOr', 'OrDefault'), 'maxMapOrDefault': ('maxMap', 'OrDefault'), 'uniqCombinedOrDefault': ('uniqCombined', 'OrDefault'), 'groupBitAndOrDefault': ('groupBitAnd', 'OrDefault'), 'quantileGKOrDefault': ('quantileGK', 'OrDefault'), 'quantileInterpolatedWeightedOrDefault': ('quantileInterpolatedWeighted', 'OrDefault'), 'quantilesBFloat16WeightedOrDefault': ('quantilesBFloat16Weighted', 'OrDefault'), 'exponentialTimeDecayedAvgOrDefault': ('exponentialTimeDecayedAvg', 'OrDefault'), 'kurtSampOrDefault': ('kurtSamp', 'OrDefault'), 'anyOrDefault': ('any', 'OrDefault'), 'theilsUOrDefault': ('theilsU', 'OrDefault'), 'argMaxOrDefault': ('argMax', 'OrDefault'), 'quantilesTimingWeightedOrDefault': ('quantilesTimingWeighted', 'OrDefault'), 'groupArraySampleOrDefault': ('groupArraySample', 'OrDefault'), 'sumCountOrDefault': ('sumCount', 'OrDefault'), 'sumWithOverflowOrDefault': ('sumWithOverflow', 'OrDefault'), 'uniqThetaOrDefault': ('uniqTheta', 'OrDefault'), 'groupArrayMovingSumOrDefault': ('groupArrayMovingSum', 'OrDefault'), 'corrOrDefault': ('corr', 'OrDefault'), 'quantilesBFloat16OrDefault': ('quantilesBFloat16', 'OrDefault'), 'minOrDefault': ('min', 'OrDefault'), 'groupArrayOrDefault': ('groupArray', 'OrDefault'), 'sequenceCountOrDefault': ('sequenceCount', 'OrDefault'), 'kolmogorovSmirnovTestOrDefault': ('kolmogorovSmirnovTest', 'OrDefault'), 'deltaSumOrDefault': ('deltaSum', 'OrDefault'), 'meanZTestOrDefault': ('meanZTest', 'OrDefault'), 'anyHeavyOrDefault': ('anyHeavy', 'OrDefault'), 'countOrDefault': ('count', 'OrDefault'), 'quantilesExactLowOrDefault': ('quantilesExactLow', 'OrDefault'), 'groupBitmapAndOrDefault': ('groupBitmapAnd', 'OrDefault'), 'quantileDeterministicOrDefault': ('quantileDeterministic', 'OrDefault'), 'quantilesExactOrDefault': ('quantilesExact', 'OrDefault'), 'sumMapOrDefault': ('sumMap', 'OrDefault'), 'covarPopOrDefault': ('covarPop', 'OrDefault'), 'studentTTestOrDefault': ('studentTTest', 'OrDefault'), 'first_valueOrDefault': ('first_value', 'OrDefault'), 'exponentialMovingAverageOrDefault': ('exponentialMovingAverage', 'OrDefault'), 'simpleLinearRegressionOrDefault': ('simpleLinearRegression', 'OrDefault'), 'stochasticLogisticRegressionOrDefault': ('stochasticLogisticRegression', 'OrDefault'), 'quantilesInterpolatedWeightedOrDefault': ('quantilesInterpolatedWeighted', 'OrDefault'), 'minMapOrDefault': ('minMap', 'OrDefault'), 'quantilesExactHighOrDefault': ('quantilesExactHigh', 'OrDefault'), 'groupArrayInsertAtOrDefault': ('groupArrayInsertAt', 'OrDefault'), 'quantileBFloat16OrDefault': ('quantileBFloat16', 'OrDefault'), 'quantileTDigestWeightedOrDefault': ('quantileTDigestWeighted', 'OrDefault'), 'covarSampOrDefault': ('covarSamp', 'OrDefault'), 'intervalLengthSumOrDefault': ('intervalLengthSum', 'OrDefault'), 'medianOrDefault': ('median', 'OrDefault'), 'quantileExactWeightedOrDefault': ('quantileExactWeighted', 'OrDefault'), 'quantilesTDigestOrDefault': ('quantilesTDigest', 'OrDefault'), 'groupBitmapXorOrDefault': ('groupBitmapXor', 'OrDefault'), 'quantileExactOrDefault': ('quantileExact', 'OrDefault'), 'maxIntersectionsPositionOrDefault': ('maxIntersectionsPosition', 'OrDefault'), 'uniqUpToOrDefault': ('uniqUpTo', 'OrDefault'), 'retentionOrDefault': ('retention', 'OrDefault'), 'quantilesTimingOrDefault': ('quantilesTiming', 'OrDefault'), 'windowFunnelOrDefault': ('windowFunnel', 'OrDefault'), 'stddevSampOrDefault': ('stddevSamp', 'OrDefault'), 'quantileExactHighOrDefault': ('quantileExactHigh', 'OrDefault'), 'entropyOrDefault': ('entropy', 'OrDefault'), 'boundingRatioOrDefault': ('boundingRatio', 'OrDefault'), 'quantileTimingWeightedOrDefault': ('quantileTimingWeighted', 'OrDefault'), 'mannWhitneyUTestOrDefault': ('mannWhitneyUTest', 'OrDefault'), 'cramersVOrDefault': ('cramersV', 'OrDefault'), 'cramersVBiasCorrectedOrDefault': ('cramersVBiasCorrected', 'OrDefault'), 'deltaSumTimestampOrDefault': ('deltaSumTimestamp', 'OrDefault'), 'stochasticLinearRegressionOrDefault': ('stochasticLinearRegression', 'OrDefault'), 'sparkBarOrDefault': ('sparkBar', 'OrDefault'), 'contingencyOrDefault': ('contingency', 'OrDefault'), 'groupBitmapOrOrDefault': ('groupBitmapOr', 'OrDefault'), 'approx_top_sumOrDefault': ('approx_top_sum', 'OrDefault'), 'avgOrDefault': ('avg', 'OrDefault'), 'stddevPopOrDefault': ('stddevPop', 'OrDefault'), 'quantilesTDigestWeightedOrDefault': ('quantilesTDigestWeighted', 'OrDefault'), 'quantileOrDefault': ('quantile', 'OrDefault'), 'avgWeightedOrDefault': ('avgWeighted', 'OrDefault'), 'groupConcatOrDefault': ('groupConcat', 'OrDefault'), 'quantileExactInclusiveOrDefault': ('quantileExactInclusive', 'OrDefault'), 'maxIntersectionsOrDefault': ('maxIntersections', 'OrDefault'), 'topKWeightedOrDefault': ('topKWeighted', 'OrDefault'), 'skewPopOrDefault': ('skewPop', 'OrDefault'), 'last_valueOrDefault': ('last_value', 'OrDefault'), 'kurtPopOrDefault': ('kurtPop', 'OrDefault'), 'sumKahanOrDefault': ('sumKahan', 'OrDefault'), 'histogramOrDefault': ('histogram', 'OrDefault'), 'categoricalInformationValueOrDefault': ('categoricalInformationValue', 'OrDefault'), 'quantilesExactExclusiveOrDefault': ('quantilesExactExclusive', 'OrDefault'), 'quantileExactLowOrDefault': ('quantileExactLow', 'OrDefault'), 'quantileTimingOrDefault': ('quantileTiming', 'OrDefault'), 'maxOrDefault': ('max', 'OrDefault'), 'groupArrayLastOrDefault': ('groupArrayLast', 'OrDefault'), 'groupArrayMovingAvgOrDefault': ('groupArrayMovingAvg', 'OrDefault'), 'anyLastOrDefault': ('anyLast', 'OrDefault'), 'uniqExactOrDefault': ('uniqExact', 'OrDefault'), 'skewSampOrDefault': ('skewSamp', 'OrDefault'), 'sequenceNextNodeOrDefault': ('sequenceNextNode', 'OrDefault'), 'uniqCombined64OrDefault': ('uniqCombined64', 'OrDefault'), 'groupBitXorOrDefault': ('groupBitXor', 'OrDefault'), 'quantilesExactWeightedOrDefault': ('quantilesExactWeighted', 'OrDefault'), 'sumOrDefault': ('sum', 'OrDefault'), 'largestTriangleThreeBucketsOrDefault': ('largestTriangleThreeBuckets', 'OrDefault'), 'varPopOrDefault': ('varPop', 'OrDefault'), 'uniqHLL12OrDefault': ('uniqHLL12', 'OrDefault'), 'uniqOrDefault': ('uniq', 'OrDefault'), 'varSampOrDefault': ('varSamp', 'OrDefault'), 'topKOrDefault': ('topK', 'OrDefault'), 'quantilesDeterministicOrDefault': ('quantilesDeterministic', 'OrDefault'), 'quantileTDigestOrDefault': ('quantileTDigest', 'OrDefault'), 'argMinOrDefault': ('argMin', 'OrDefault'), 'welchTTestDistinct': ('welchTTest', 'Distinct'), 'quantilesDistinct': ('quantiles', 'Distinct'), 'rankCorrDistinct': ('rankCorr', 'Distinct'), 'quantileBFloat16WeightedDistinct': ('quantileBFloat16Weighted', 'Distinct'), 'groupUniqArrayDistinct': ('groupUniqArray', 'Distinct'), 'quantilesGKDistinct': ('quantilesGK', 'Distinct'), 'sequenceMatchDistinct': ('sequenceMatch', 'Distinct'), 'groupBitmapDistinct': ('groupBitmap', 'Distinct'), 'groupBitOrDistinct': ('groupBitOr', 'Distinct'), 'maxMapDistinct': ('maxMap', 'Distinct'), 'uniqCombinedDistinct': ('uniqCombined', 'Distinct'), 'groupBitAndDistinct': ('groupBitAnd', 'Distinct'), 'quantileGKDistinct': ('quantileGK', 'Distinct'), 'quantileInterpolatedWeightedDistinct': ('quantileInterpolatedWeighted', 'Distinct'), 'quantilesBFloat16WeightedDistinct': ('quantilesBFloat16Weighted', 'Distinct'), 'exponentialTimeDecayedAvgDistinct': ('exponentialTimeDecayedAvg', 'Distinct'), 'kurtSampDistinct': ('kurtSamp', 'Distinct'), 'anyDistinct': ('any', 'Distinct'), 'theilsUDistinct': ('theilsU', 'Distinct'), 'argMaxDistinct': ('argMax', 'Distinct'), 'quantilesTimingWeightedDistinct': ('quantilesTimingWeighted', 'Distinct'), 'groupArraySampleDistinct': ('groupArraySample', 'Distinct'), 'sumCountDistinct': ('sumCount', 'Distinct'), 'sumWithOverflowDistinct': ('sumWithOverflow', 'Distinct'), 'uniqThetaDistinct': ('uniqTheta', 'Distinct'), 'groupArrayMovingSumDistinct': ('groupArrayMovingSum', 'Distinct'), 'corrDistinct': ('corr', 'Distinct'), 'quantilesBFloat16Distinct': ('quantilesBFloat16', 'Distinct'), 'minDistinct': ('min', 'Distinct'), 'groupArrayDistinct': ('groupArray', 'Distinct'), 'sequenceCountDistinct': ('sequenceCount', 'Distinct'), 'kolmogorovSmirnovTestDistinct': ('kolmogorovSmirnovTest', 'Distinct'), 'deltaSumDistinct': ('deltaSum', 'Distinct'), 'meanZTestDistinct': ('meanZTest', 'Distinct'), 'anyHeavyDistinct': ('anyHeavy', 'Distinct'), 'countDistinct': ('count', 'Distinct'), 'quantilesExactLowDistinct': ('quantilesExactLow', 'Distinct'), 'groupBitmapAndDistinct': ('groupBitmapAnd', 'Distinct'), 'quantileDeterministicDistinct': ('quantileDeterministic', 'Distinct'), 'quantilesExactDistinct': ('quantilesExact', 'Distinct'), 'sumMapDistinct': ('sumMap', 'Distinct'), 'covarPopDistinct': ('covarPop', 'Distinct'), 'studentTTestDistinct': ('studentTTest', 'Distinct'), 'first_valueDistinct': ('first_value', 'Distinct'), 'exponentialMovingAverageDistinct': ('exponentialMovingAverage', 'Distinct'), 'simpleLinearRegressionDistinct': ('simpleLinearRegression', 'Distinct'), 'stochasticLogisticRegressionDistinct': ('stochasticLogisticRegression', 'Distinct'), 'quantilesInterpolatedWeightedDistinct': ('quantilesInterpolatedWeighted', 'Distinct'), 'minMapDistinct': ('minMap', 'Distinct'), 'quantilesExactHighDistinct': ('quantilesExactHigh', 'Distinct'), 'groupArrayInsertAtDistinct': ('groupArrayInsertAt', 'Distinct'), 'quantileBFloat16Distinct': ('quantileBFloat16', 'Distinct'), 'quantileTDigestWeightedDistinct': ('quantileTDigestWeighted', 'Distinct'), 'covarSampDistinct': ('covarSamp', 'Distinct'), 'intervalLengthSumDistinct': ('intervalLengthSum', 'Distinct'), 'medianDistinct': ('median', 'Distinct'), 'quantileExactWeightedDistinct': ('quantileExactWeighted', 'Distinct'), 'quantilesTDigestDistinct': ('quantilesTDigest', 'Distinct'), 'groupBitmapXorDistinct': ('groupBitmapXor', 'Distinct'), 'quantileExactDistinct': ('quantileExact', 'Distinct'), 'maxIntersectionsPositionDistinct': ('maxIntersectionsPosition', 'Distinct'), 'uniqUpToDistinct': ('uniqUpTo', 'Distinct'), 'retentionDistinct': ('retention', 'Distinct'), 'quantilesTimingDistinct': ('quantilesTiming', 'Distinct'), 'windowFunnelDistinct': ('windowFunnel', 'Distinct'), 'stddevSampDistinct': ('stddevSamp', 'Distinct'), 'quantileExactHighDistinct': ('quantileExactHigh', 'Distinct'), 'entropyDistinct': ('entropy', 'Distinct'), 'boundingRatioDistinct': ('boundingRatio', 'Distinct'), 'quantileTimingWeightedDistinct': ('quantileTimingWeighted', 'Distinct'), 'mannWhitneyUTestDistinct': ('mannWhitneyUTest', 'Distinct'), 'cramersVDistinct': ('cramersV', 'Distinct'), 'cramersVBiasCorrectedDistinct': ('cramersVBiasCorrected', 'Distinct'), 'deltaSumTimestampDistinct': ('deltaSumTimestamp', 'Distinct'), 'stochasticLinearRegressionDistinct': ('stochasticLinearRegression', 'Distinct'), 'sparkBarDistinct': ('sparkBar', 'Distinct'), 'contingencyDistinct': ('contingency', 'Distinct'), 'groupBitmapOrDistinct': ('groupBitmapOr', 'Distinct'), 'approx_top_sumDistinct': ('approx_top_sum', 'Distinct'), 'avgDistinct': ('avg', 'Distinct'), 'stddevPopDistinct': ('stddevPop', 'Distinct'), 'quantilesTDigestWeightedDistinct': ('quantilesTDigestWeighted', 'Distinct'), 'quantileDistinct': ('quantile', 'Distinct'), 'avgWeightedDistinct': ('avgWeighted', 'Distinct'), 'groupConcatDistinct': ('groupConcat', 'Distinct'), 'quantileExactInclusiveDistinct': ('quantileExactInclusive', 'Distinct'), 'maxIntersectionsDistinct': ('maxIntersections', 'Distinct'), 'topKWeightedDistinct': ('topKWeighted', 'Distinct'), 'skewPopDistinct': ('skewPop', 'Distinct'), 'last_valueDistinct': ('last_value', 'Distinct'), 'kurtPopDistinct': ('kurtPop', 'Distinct'), 'sumKahanDistinct': ('sumKahan', 'Distinct'), 'histogramDistinct': ('histogram', 'Distinct'), 'categoricalInformationValueDistinct': ('categoricalInformationValue', 'Distinct'), 'quantilesExactExclusiveDistinct': ('quantilesExactExclusive', 'Distinct'), 'quantileExactLowDistinct': ('quantileExactLow', 'Distinct'), 'quantileTimingDistinct': ('quantileTiming', 'Distinct'), 'maxDistinct': ('max', 'Distinct'), 'groupArrayLastDistinct': ('groupArrayLast', 'Distinct'), 'groupArrayMovingAvgDistinct': ('groupArrayMovingAvg', 'Distinct'), 'anyLastDistinct': ('anyLast', 'Distinct'), 'uniqExactDistinct': ('uniqExact', 'Distinct'), 'skewSampDistinct': ('skewSamp', 'Distinct'), 'sequenceNextNodeDistinct': ('sequenceNextNode', 'Distinct'), 'uniqCombined64Distinct': ('uniqCombined64', 'Distinct'), 'groupBitXorDistinct': ('groupBitXor', 'Distinct'), 'quantilesExactWeightedDistinct': ('quantilesExactWeighted', 'Distinct'), 'sumDistinct': ('sum', 'Distinct'), 'largestTriangleThreeBucketsDistinct': ('largestTriangleThreeBuckets', 'Distinct'), 'varPopDistinct': ('varPop', 'Distinct'), 'uniqHLL12Distinct': ('uniqHLL12', 'Distinct'), 'uniqDistinct': ('uniq', 'Distinct'), 'varSampDistinct': ('varSamp', 'Distinct'), 'topKDistinct': ('topK', 'Distinct'), 'quantilesDeterministicDistinct': ('quantilesDeterministic', 'Distinct'), 'quantileTDigestDistinct': ('quantileTDigest', 'Distinct'), 'argMinDistinct': ('argMin', 'Distinct'), 'welchTTestResample': ('welchTTest', 'Resample'), 'quantilesResample': ('quantiles', 'Resample'), 'rankCorrResample': ('rankCorr', 'Resample'), 'quantileBFloat16WeightedResample': ('quantileBFloat16Weighted', 'Resample'), 'groupUniqArrayResample': ('groupUniqArray', 'Resample'), 'quantilesGKResample': ('quantilesGK', 'Resample'), 'sequenceMatchResample': ('sequenceMatch', 'Resample'), 'groupBitmapResample': ('groupBitmap', 'Resample'), 'groupBitOrResample': ('groupBitOr', 'Resample'), 'maxMapResample': ('maxMap', 'Resample'), 'uniqCombinedResample': ('uniqCombined', 'Resample'), 'groupBitAndResample': ('groupBitAnd', 'Resample'), 'quantileGKResample': ('quantileGK', 'Resample'), 'quantileInterpolatedWeightedResample': ('quantileInterpolatedWeighted', 'Resample'), 'quantilesBFloat16WeightedResample': ('quantilesBFloat16Weighted', 'Resample'), 'exponentialTimeDecayedAvgResample': ('exponentialTimeDecayedAvg', 'Resample'), 'kurtSampResample': ('kurtSamp', 'Resample'), 'anyResample': ('any', 'Resample'), 'theilsUResample': ('theilsU', 'Resample'), 'argMaxResample': ('argMax', 'Resample'), 'quantilesTimingWeightedResample': ('quantilesTimingWeighted', 'Resample'), 'groupArraySampleResample': ('groupArraySample', 'Resample'), 'sumCountResample': ('sumCount', 'Resample'), 'sumWithOverflowResample': ('sumWithOverflow', 'Resample'), 'uniqThetaResample': ('uniqTheta', 'Resample'), 'groupArrayMovingSumResample': ('groupArrayMovingSum', 'Resample'), 'corrResample': ('corr', 'Resample'), 'quantilesBFloat16Resample': ('quantilesBFloat16', 'Resample'), 'minResample': ('min', 'Resample'), 'groupArrayResample': ('groupArray', 'Resample'), 'sequenceCountResample': ('sequenceCount', 'Resample'), 'kolmogorovSmirnovTestResample': ('kolmogorovSmirnovTest', 'Resample'), 'deltaSumResample': ('deltaSum', 'Resample'), 'meanZTestResample': ('meanZTest', 'Resample'), 'anyHeavyResample': ('anyHeavy', 'Resample'), 'countResample': ('count', 'Resample'), 'quantilesExactLowResample': ('quantilesExactLow', 'Resample'), 'groupBitmapAndResample': ('groupBitmapAnd', 'Resample'), 'quantileDeterministicResample': ('quantileDeterministic', 'Resample'), 'quantilesExactResample': ('quantilesExact', 'Resample'), 'sumMapResample': ('sumMap', 'Resample'), 'covarPopResample': ('covarPop', 'Resample'), 'studentTTestResample': ('studentTTest', 'Resample'), 'first_valueResample': ('first_value', 'Resample'), 'exponentialMovingAverageResample': ('exponentialMovingAverage', 'Resample'), 'simpleLinearRegressionResample': ('simpleLinearRegression', 'Resample'), 'stochasticLogisticRegressionResample': ('stochasticLogisticRegression', 'Resample'), 'quantilesInterpolatedWeightedResample': ('quantilesInterpolatedWeighted', 'Resample'), 'minMapResample': ('minMap', 'Resample'), 'quantilesExactHighResample': ('quantilesExactHigh', 'Resample'), 'groupArrayInsertAtResample': ('groupArrayInsertAt', 'Resample'), 'quantileBFloat16Resample': ('quantileBFloat16', 'Resample'), 'quantileTDigestWeightedResample': ('quantileTDigestWeighted', 'Resample'), 'covarSampResample': ('covarSamp', 'Resample'), 'intervalLengthSumResample': ('intervalLengthSum', 'Resample'), 'medianResample': ('median', 'Resample'), 'quantileExactWeightedResample': ('quantileExactWeighted', 'Resample'), 'quantilesTDigestResample': ('quantilesTDigest', 'Resample'), 'groupBitmapXorResample': ('groupBitmapXor', 'Resample'), 'quantileExactResample': ('quantileExact', 'Resample'), 'maxIntersectionsPositionResample': ('maxIntersectionsPosition', 'Resample'), 'uniqUpToResample': ('uniqUpTo', 'Resample'), 'retentionResample': ('retention', 'Resample'), 'quantilesTimingResample': ('quantilesTiming', 'Resample'), 'windowFunnelResample': ('windowFunnel', 'Resample'), 'stddevSampResample': ('stddevSamp', 'Resample'), 'quantileExactHighResample': ('quantileExactHigh', 'Resample'), 'entropyResample': ('entropy', 'Resample'), 'boundingRatioResample': ('boundingRatio', 'Resample'), 'quantileTimingWeightedResample': ('quantileTimingWeighted', 'Resample'), 'mannWhitneyUTestResample': ('mannWhitneyUTest', 'Resample'), 'cramersVResample': ('cramersV', 'Resample'), 'cramersVBiasCorrectedResample': ('cramersVBiasCorrected', 'Resample'), 'deltaSumTimestampResample': ('deltaSumTimestamp', 'Resample'), 'stochasticLinearRegressionResample': ('stochasticLinearRegression', 'Resample'), 'sparkBarResample': ('sparkBar', 'Resample'), 'contingencyResample': ('contingency', 'Resample'), 'groupBitmapOrResample': ('groupBitmapOr', 'Resample'), 'approx_top_sumResample': ('approx_top_sum', 'Resample'), 'avgResample': ('avg', 'Resample'), 'stddevPopResample': ('stddevPop', 'Resample'), 'quantilesTDigestWeightedResample': ('quantilesTDigestWeighted', 'Resample'), 'quantileResample': ('quantile', 'Resample'), 'avgWeightedResample': ('avgWeighted', 'Resample'), 'groupConcatResample': ('groupConcat', 'Resample'), 'quantileExactInclusiveResample': ('quantileExactInclusive', 'Resample'), 'maxIntersectionsResample': ('maxIntersections', 'Resample'), 'topKWeightedResample': ('topKWeighted', 'Resample'), 'skewPopResample': ('skewPop', 'Resample'), 'last_valueResample': ('last_value', 'Resample'), 'kurtPopResample': ('kurtPop', 'Resample'), 'sumKahanResample': ('sumKahan', 'Resample'), 'histogramResample': ('histogram', 'Resample'), 'categoricalInformationValueResample': ('categoricalInformationValue', 'Resample'), 'quantilesExactExclusiveResample': ('quantilesExactExclusive', 'Resample'), 'quantileExactLowResample': ('quantileExactLow', 'Resample'), 'quantileTimingResample': ('quantileTiming', 'Resample'), 'maxResample': ('max', 'Resample'), 'groupArrayLastResample': ('groupArrayLast', 'Resample'), 'groupArrayMovingAvgResample': ('groupArrayMovingAvg', 'Resample'), 'anyLastResample': ('anyLast', 'Resample'), 'uniqExactResample': ('uniqExact', 'Resample'), 'skewSampResample': ('skewSamp', 'Resample'), 'sequenceNextNodeResample': ('sequenceNextNode', 'Resample'), 'uniqCombined64Resample': ('uniqCombined64', 'Resample'), 'groupBitXorResample': ('groupBitXor', 'Resample'), 'quantilesExactWeightedResample': ('quantilesExactWeighted', 'Resample'), 'sumResample': ('sum', 'Resample'), 'largestTriangleThreeBucketsResample': ('largestTriangleThreeBuckets', 'Resample'), 'varPopResample': ('varPop', 'Resample'), 'uniqHLL12Resample': ('uniqHLL12', 'Resample'), 'uniqResample': ('uniq', 'Resample'), 'varSampResample': ('varSamp', 'Resample'), 'topKResample': ('topK', 'Resample'), 'quantilesDeterministicResample': ('quantilesDeterministic', 'Resample'), 'quantileTDigestResample': ('quantileTDigest', 'Resample'), 'argMinResample': ('argMin', 'Resample'), 'welchTTestArrayIf': ('welchTTest', 'ArrayIf'), 'quantilesArrayIf': ('quantiles', 'ArrayIf'), 'rankCorrArrayIf': ('rankCorr', 'ArrayIf'), 'quantileBFloat16WeightedArrayIf': ('quantileBFloat16Weighted', 'ArrayIf'), 'groupUniqArrayArrayIf': ('groupUniqArray', 'ArrayIf'), 'quantilesGKArrayIf': ('quantilesGK', 'ArrayIf'), 'sequenceMatchArrayIf': ('sequenceMatch', 'ArrayIf'), 'groupBitmapArrayIf': ('groupBitmap', 'ArrayIf'), 'groupBitOrArrayIf': ('groupBitOr', 'ArrayIf'), 'maxMapArrayIf': ('maxMap', 'ArrayIf'), 'uniqCombinedArrayIf': ('uniqCombined', 'ArrayIf'), 'groupBitAndArrayIf': ('groupBitAnd', 'ArrayIf'), 'quantileGKArrayIf': ('quantileGK', 'ArrayIf'), 'quantileInterpolatedWeightedArrayIf': ('quantileInterpolatedWeighted', 'ArrayIf'), 'quantilesBFloat16WeightedArrayIf': ('quantilesBFloat16Weighted', 'ArrayIf'), 'exponentialTimeDecayedAvgArrayIf': ('exponentialTimeDecayedAvg', 'ArrayIf'), 'kurtSampArrayIf': ('kurtSamp', 'ArrayIf'), 'anyArrayIf': ('any', 'ArrayIf'), 'theilsUArrayIf': ('theilsU', 'ArrayIf'), 'argMaxArrayIf': ('argMax', 'ArrayIf'), 'quantilesTimingWeightedArrayIf': ('quantilesTimingWeighted', 'ArrayIf'), 'groupArraySampleArrayIf': ('groupArraySample', 'ArrayIf'), 'sumCountArrayIf': ('sumCount', 'ArrayIf'), 'sumWithOverflowArrayIf': ('sumWithOverflow', 'ArrayIf'), 'uniqThetaArrayIf': ('uniqTheta', 'ArrayIf'), 'groupArrayMovingSumArrayIf': ('groupArrayMovingSum', 'ArrayIf'), 'corrArrayIf': ('corr', 'ArrayIf'), 'quantilesBFloat16ArrayIf': ('quantilesBFloat16', 'ArrayIf'), 'minArrayIf': ('min', 'ArrayIf'), 'groupArrayArrayIf': ('groupArray', 'ArrayIf'), 'sequenceCountArrayIf': ('sequenceCount', 'ArrayIf'), 'kolmogorovSmirnovTestArrayIf': ('kolmogorovSmirnovTest', 'ArrayIf'), 'deltaSumArrayIf': ('deltaSum', 'ArrayIf'), 'meanZTestArrayIf': ('meanZTest', 'ArrayIf'), 'anyHeavyArrayIf': ('anyHeavy', 'ArrayIf'), 'countArrayIf': ('count', 'ArrayIf'), 'quantilesExactLowArrayIf': ('quantilesExactLow', 'ArrayIf'), 'groupBitmapAndArrayIf': ('groupBitmapAnd', 'ArrayIf'), 'quantileDeterministicArrayIf': ('quantileDeterministic', 'ArrayIf'), 'quantilesExactArrayIf': ('quantilesExact', 'ArrayIf'), 'sumMapArrayIf': ('sumMap', 'ArrayIf'), 'covarPopArrayIf': ('covarPop', 'ArrayIf'), 'studentTTestArrayIf': ('studentTTest', 'ArrayIf'), 'first_valueArrayIf': ('first_value', 'ArrayIf'), 'exponentialMovingAverageArrayIf': ('exponentialMovingAverage', 'ArrayIf'), 'simpleLinearRegressionArrayIf': ('simpleLinearRegression', 'ArrayIf'), 'stochasticLogisticRegressionArrayIf': ('stochasticLogisticRegression', 'ArrayIf'), 'quantilesInterpolatedWeightedArrayIf': ('quantilesInterpolatedWeighted', 'ArrayIf'), 'minMapArrayIf': ('minMap', 'ArrayIf'), 'quantilesExactHighArrayIf': ('quantilesExactHigh', 'ArrayIf'), 'groupArrayInsertAtArrayIf': ('groupArrayInsertAt', 'ArrayIf'), 'quantileBFloat16ArrayIf': ('quantileBFloat16', 'ArrayIf'), 'quantileTDigestWeightedArrayIf': ('quantileTDigestWeighted', 'ArrayIf'), 'covarSampArrayIf': ('covarSamp', 'ArrayIf'), 'intervalLengthSumArrayIf': ('intervalLengthSum', 'ArrayIf'), 'medianArrayIf': ('median', 'ArrayIf'), 'quantileExactWeightedArrayIf': ('quantileExactWeighted', 'ArrayIf'), 'quantilesTDigestArrayIf': ('quantilesTDigest', 'ArrayIf'), 'groupBitmapXorArrayIf': ('groupBitmapXor', 'ArrayIf'), 'quantileExactArrayIf': ('quantileExact', 'ArrayIf'), 'maxIntersectionsPositionArrayIf': ('maxIntersectionsPosition', 'ArrayIf'), 'uniqUpToArrayIf': ('uniqUpTo', 'ArrayIf'), 'retentionArrayIf': ('retention', 'ArrayIf'), 'quantilesTimingArrayIf': ('quantilesTiming', 'ArrayIf'), 'windowFunnelArrayIf': ('windowFunnel', 'ArrayIf'), 'stddevSampArrayIf': ('stddevSamp', 'ArrayIf'), 'quantileExactHighArrayIf': ('quantileExactHigh', 'ArrayIf'), 'entropyArrayIf': ('entropy', 'ArrayIf'), 'boundingRatioArrayIf': ('boundingRatio', 'ArrayIf'), 'quantileTimingWeightedArrayIf': ('quantileTimingWeighted', 'ArrayIf'), 'mannWhitneyUTestArrayIf': ('mannWhitneyUTest', 'ArrayIf'), 'cramersVArrayIf': ('cramersV', 'ArrayIf'), 'cramersVBiasCorrectedArrayIf': ('cramersVBiasCorrected', 'ArrayIf'), 'deltaSumTimestampArrayIf': ('deltaSumTimestamp', 'ArrayIf'), 'stochasticLinearRegressionArrayIf': ('stochasticLinearRegression', 'ArrayIf'), 'sparkBarArrayIf': ('sparkBar', 'ArrayIf'), 'contingencyArrayIf': ('contingency', 'ArrayIf'), 'groupBitmapOrArrayIf': ('groupBitmapOr', 'ArrayIf'), 'approx_top_sumArrayIf': ('approx_top_sum', 'ArrayIf'), 'avgArrayIf': ('avg', 'ArrayIf'), 'stddevPopArrayIf': ('stddevPop', 'ArrayIf'), 'quantilesTDigestWeightedArrayIf': ('quantilesTDigestWeighted', 'ArrayIf'), 'quantileArrayIf': ('quantile', 'ArrayIf'), 'avgWeightedArrayIf': ('avgWeighted', 'ArrayIf'), 'groupConcatArrayIf': ('groupConcat', 'ArrayIf'), 'quantileExactInclusiveArrayIf': ('quantileExactInclusive', 'ArrayIf'), 'maxIntersectionsArrayIf': ('maxIntersections', 'ArrayIf'), 'topKWeightedArrayIf': ('topKWeighted', 'ArrayIf'), 'skewPopArrayIf': ('skewPop', 'ArrayIf'), 'last_valueArrayIf': ('last_value', 'ArrayIf'), 'kurtPopArrayIf': ('kurtPop', 'ArrayIf'), 'sumKahanArrayIf': ('sumKahan', 'ArrayIf'), 'histogramArrayIf': ('histogram', 'ArrayIf'), 'categoricalInformationValueArrayIf': ('categoricalInformationValue', 'ArrayIf'), 'quantilesExactExclusiveArrayIf': ('quantilesExactExclusive', 'ArrayIf'), 'quantileExactLowArrayIf': ('quantileExactLow', 'ArrayIf'), 'quantileTimingArrayIf': ('quantileTiming', 'ArrayIf'), 'maxArrayIf': ('max', 'ArrayIf'), 'groupArrayLastArrayIf': ('groupArrayLast', 'ArrayIf'), 'groupArrayMovingAvgArrayIf': ('groupArrayMovingAvg', 'ArrayIf'), 'anyLastArrayIf': ('anyLast', 'ArrayIf'), 'uniqExactArrayIf': ('uniqExact', 'ArrayIf'), 'skewSampArrayIf': ('skewSamp', 'ArrayIf'), 'sequenceNextNodeArrayIf': ('sequenceNextNode', 'ArrayIf'), 'uniqCombined64ArrayIf': ('uniqCombined64', 'ArrayIf'), 'groupBitXorArrayIf': ('groupBitXor', 'ArrayIf'), 'quantilesExactWeightedArrayIf': ('quantilesExactWeighted', 'ArrayIf'), 'sumArrayIf': ('sum', 'ArrayIf'), 'largestTriangleThreeBucketsArrayIf': ('largestTriangleThreeBuckets', 'ArrayIf'), 'varPopArrayIf': ('varPop', 'ArrayIf'), 'uniqHLL12ArrayIf': ('uniqHLL12', 'ArrayIf'), 'uniqArrayIf': ('uniq', 'ArrayIf'), 'varSampArrayIf': ('varSamp', 'ArrayIf'), 'topKArrayIf': ('topK', 'ArrayIf'), 'quantilesDeterministicArrayIf': ('quantilesDeterministic', 'ArrayIf'), 'quantileTDigestArrayIf': ('quantileTDigest', 'ArrayIf'), 'argMinArrayIf': ('argMin', 'ArrayIf'), 'welchTTestForEach': ('welchTTest', 'ForEach'), 'quantilesForEach': ('quantiles', 'ForEach'), 'rankCorrForEach': ('rankCorr', 'ForEach'), 'quantileBFloat16WeightedForEach': ('quantileBFloat16Weighted', 'ForEach'), 'groupUniqArrayForEach': ('groupUniqArray', 'ForEach'), 'quantilesGKForEach': ('quantilesGK', 'ForEach'), 'sequenceMatchForEach': ('sequenceMatch', 'ForEach'), 'groupBitmapForEach': ('groupBitmap', 'ForEach'), 'groupBitOrForEach': ('groupBitOr', 'ForEach'), 'maxMapForEach': ('maxMap', 'ForEach'), 'uniqCombinedForEach': ('uniqCombined', 'ForEach'), 'groupBitAndForEach': ('groupBitAnd', 'ForEach'), 'quantileGKForEach': ('quantileGK', 'ForEach'), 'quantileInterpolatedWeightedForEach': ('quantileInterpolatedWeighted', 'ForEach'), 'quantilesBFloat16WeightedForEach': ('quantilesBFloat16Weighted', 'ForEach'), 'exponentialTimeDecayedAvgForEach': ('exponentialTimeDecayedAvg', 'ForEach'), 'kurtSampForEach': ('kurtSamp', 'ForEach'), 'anyForEach': ('any', 'ForEach'), 'theilsUForEach': ('theilsU', 'ForEach'), 'argMaxForEach': ('argMax', 'ForEach'), 'quantilesTimingWeightedForEach': ('quantilesTimingWeighted', 'ForEach'), 'groupArraySampleForEach': ('groupArraySample', 'ForEach'), 'sumCountForEach': ('sumCount', 'ForEach'), 'sumWithOverflowForEach': ('sumWithOverflow', 'ForEach'), 'uniqThetaForEach': ('uniqTheta', 'ForEach'), 'groupArrayMovingSumForEach': ('groupArrayMovingSum', 'ForEach'), 'corrForEach': ('corr', 'ForEach'), 'quantilesBFloat16ForEach': ('quantilesBFloat16', 'ForEach'), 'minForEach': ('min', 'ForEach'), 'groupArrayForEach': ('groupArray', 'ForEach'), 'sequenceCountForEach': ('sequenceCount', 'ForEach'), 'kolmogorovSmirnovTestForEach': ('kolmogorovSmirnovTest', 'ForEach'), 'deltaSumForEach': ('deltaSum', 'ForEach'), 'meanZTestForEach': ('meanZTest', 'ForEach'), 'anyHeavyForEach': ('anyHeavy', 'ForEach'), 'countForEach': ('count', 'ForEach'), 'quantilesExactLowForEach': ('quantilesExactLow', 'ForEach'), 'groupBitmapAndForEach': ('groupBitmapAnd', 'ForEach'), 'quantileDeterministicForEach': ('quantileDeterministic', 'ForEach'), 'quantilesExactForEach': ('quantilesExact', 'ForEach'), 'sumMapForEach': ('sumMap', 'ForEach'), 'covarPopForEach': ('covarPop', 'ForEach'), 'studentTTestForEach': ('studentTTest', 'ForEach'), 'first_valueForEach': ('first_value', 'ForEach'), 'exponentialMovingAverageForEach': ('exponentialMovingAverage', 'ForEach'), 'simpleLinearRegressionForEach': ('simpleLinearRegression', 'ForEach'), 'stochasticLogisticRegressionForEach': ('stochasticLogisticRegression', 'ForEach'), 'quantilesInterpolatedWeightedForEach': ('quantilesInterpolatedWeighted', 'ForEach'), 'minMapForEach': ('minMap', 'ForEach'), 'quantilesExactHighForEach': ('quantilesExactHigh', 'ForEach'), 'groupArrayInsertAtForEach': ('groupArrayInsertAt', 'ForEach'), 'quantileBFloat16ForEach': ('quantileBFloat16', 'ForEach'), 'quantileTDigestWeightedForEach': ('quantileTDigestWeighted', 'ForEach'), 'covarSampForEach': ('covarSamp', 'ForEach'), 'intervalLengthSumForEach': ('intervalLengthSum', 'ForEach'), 'medianForEach': ('median', 'ForEach'), 'quantileExactWeightedForEach': ('quantileExactWeighted', 'ForEach'), 'quantilesTDigestForEach': ('quantilesTDigest', 'ForEach'), 'groupBitmapXorForEach': ('groupBitmapXor', 'ForEach'), 'quantileExactForEach': ('quantileExact', 'ForEach'), 'maxIntersectionsPositionForEach': ('maxIntersectionsPosition', 'ForEach'), 'uniqUpToForEach': ('uniqUpTo', 'ForEach'), 'retentionForEach': ('retention', 'ForEach'), 'quantilesTimingForEach': ('quantilesTiming', 'ForEach'), 'windowFunnelForEach': ('windowFunnel', 'ForEach'), 'stddevSampForEach': ('stddevSamp', 'ForEach'), 'quantileExactHighForEach': ('quantileExactHigh', 'ForEach'), 'entropyForEach': ('entropy', 'ForEach'), 'boundingRatioForEach': ('boundingRatio', 'ForEach'), 'quantileTimingWeightedForEach': ('quantileTimingWeighted', 'ForEach'), 'mannWhitneyUTestForEach': ('mannWhitneyUTest', 'ForEach'), 'cramersVForEach': ('cramersV', 'ForEach'), 'cramersVBiasCorrectedForEach': ('cramersVBiasCorrected', 'ForEach'), 'deltaSumTimestampForEach': ('deltaSumTimestamp', 'ForEach'), 'stochasticLinearRegressionForEach': ('stochasticLinearRegression', 'ForEach'), 'sparkBarForEach': ('sparkBar', 'ForEach'), 'contingencyForEach': ('contingency', 'ForEach'), 'groupBitmapOrForEach': ('groupBitmapOr', 'ForEach'), 'approx_top_sumForEach': ('approx_top_sum', 'ForEach'), 'avgForEach': ('avg', 'ForEach'), 'stddevPopForEach': ('stddevPop', 'ForEach'), 'quantilesTDigestWeightedForEach': ('quantilesTDigestWeighted', 'ForEach'), 'quantileForEach': ('quantile', 'ForEach'), 'avgWeightedForEach': ('avgWeighted', 'ForEach'), 'groupConcatForEach': ('groupConcat', 'ForEach'), 'quantileExactInclusiveForEach': ('quantileExactInclusive', 'ForEach'), 'maxIntersectionsForEach': ('maxIntersections', 'ForEach'), 'topKWeightedForEach': ('topKWeighted', 'ForEach'), 'skewPopForEach': ('skewPop', 'ForEach'), 'last_valueForEach': ('last_value', 'ForEach'), 'kurtPopForEach': ('kurtPop', 'ForEach'), 'sumKahanForEach': ('sumKahan', 'ForEach'), 'histogramForEach': ('histogram', 'ForEach'), 'categoricalInformationValueForEach': ('categoricalInformationValue', 'ForEach'), 'quantilesExactExclusiveForEach': ('quantilesExactExclusive', 'ForEach'), 'quantileExactLowForEach': ('quantileExactLow', 'ForEach'), 'quantileTimingForEach': ('quantileTiming', 'ForEach'), 'maxForEach': ('max', 'ForEach'), 'groupArrayLastForEach': ('groupArrayLast', 'ForEach'), 'groupArrayMovingAvgForEach': ('groupArrayMovingAvg', 'ForEach'), 'anyLastForEach': ('anyLast', 'ForEach'), 'uniqExactForEach': ('uniqExact', 'ForEach'), 'skewSampForEach': ('skewSamp', 'ForEach'), 'sequenceNextNodeForEach': ('sequenceNextNode', 'ForEach'), 'uniqCombined64ForEach': ('uniqCombined64', 'ForEach'), 'groupBitXorForEach': ('groupBitXor', 'ForEach'), 'quantilesExactWeightedForEach': ('quantilesExactWeighted', 'ForEach'), 'sumForEach': ('sum', 'ForEach'), 'largestTriangleThreeBucketsForEach': ('largestTriangleThreeBuckets', 'ForEach'), 'varPopForEach': ('varPop', 'ForEach'), 'uniqHLL12ForEach': ('uniqHLL12', 'ForEach'), 'uniqForEach': ('uniq', 'ForEach'), 'varSampForEach': ('varSamp', 'ForEach'), 'topKForEach': ('topK', 'ForEach'), 'quantilesDeterministicForEach': ('quantilesDeterministic', 'ForEach'), 'quantileTDigestForEach': ('quantileTDigest', 'ForEach'), 'argMinForEach': ('argMin', 'ForEach'), 'welchTTestOrNull': ('welchTTest', 'OrNull'), 'quantilesOrNull': ('quantiles', 'OrNull'), 'rankCorrOrNull': ('rankCorr', 'OrNull'), 'quantileBFloat16WeightedOrNull': ('quantileBFloat16Weighted', 'OrNull'), 'groupUniqArrayOrNull': ('groupUniqArray', 'OrNull'), 'quantilesGKOrNull': ('quantilesGK', 'OrNull'), 'sequenceMatchOrNull': ('sequenceMatch', 'OrNull'), 'groupBitmapOrNull': ('groupBitmap', 'OrNull'), 'groupBitOrOrNull': ('groupBitOr', 'OrNull'), 'maxMapOrNull': ('maxMap', 'OrNull'), 'uniqCombinedOrNull': ('uniqCombined', 'OrNull'), 'groupBitAndOrNull': ('groupBitAnd', 'OrNull'), 'quantileGKOrNull': ('quantileGK', 'OrNull'), 'quantileInterpolatedWeightedOrNull': ('quantileInterpolatedWeighted', 'OrNull'), 'quantilesBFloat16WeightedOrNull': ('quantilesBFloat16Weighted', 'OrNull'), 'exponentialTimeDecayedAvgOrNull': ('exponentialTimeDecayedAvg', 'OrNull'), 'kurtSampOrNull': ('kurtSamp', 'OrNull'), 'anyOrNull': ('any', 'OrNull'), 'theilsUOrNull': ('theilsU', 'OrNull'), 'argMaxOrNull': ('argMax', 'OrNull'), 'quantilesTimingWeightedOrNull': ('quantilesTimingWeighted', 'OrNull'), 'groupArraySampleOrNull': ('groupArraySample', 'OrNull'), 'sumCountOrNull': ('sumCount', 'OrNull'), 'sumWithOverflowOrNull': ('sumWithOverflow', 'OrNull'), 'uniqThetaOrNull': ('uniqTheta', 'OrNull'), 'groupArrayMovingSumOrNull': ('groupArrayMovingSum', 'OrNull'), 'corrOrNull': ('corr', 'OrNull'), 'quantilesBFloat16OrNull': ('quantilesBFloat16', 'OrNull'), 'minOrNull': ('min', 'OrNull'), 'groupArrayOrNull': ('groupArray', 'OrNull'), 'sequenceCountOrNull': ('sequenceCount', 'OrNull'), 'kolmogorovSmirnovTestOrNull': ('kolmogorovSmirnovTest', 'OrNull'), 'deltaSumOrNull': ('deltaSum', 'OrNull'), 'meanZTestOrNull': ('meanZTest', 'OrNull'), 'anyHeavyOrNull': ('anyHeavy', 'OrNull'), 'countOrNull': ('count', 'OrNull'), 'quantilesExactLowOrNull': ('quantilesExactLow', 'OrNull'), 'groupBitmapAndOrNull': ('groupBitmapAnd', 'OrNull'), 'quantileDeterministicOrNull': ('quantileDeterministic', 'OrNull'), 'quantilesExactOrNull': ('quantilesExact', 'OrNull'), 'sumMapOrNull': ('sumMap', 'OrNull'), 'covarPopOrNull': ('covarPop', 'OrNull'), 'studentTTestOrNull': ('studentTTest', 'OrNull'), 'first_valueOrNull': ('first_value', 'OrNull'), 'exponentialMovingAverageOrNull': ('exponentialMovingAverage', 'OrNull'), 'simpleLinearRegressionOrNull': ('simpleLinearRegression', 'OrNull'), 'stochasticLogisticRegressionOrNull': ('stochasticLogisticRegression', 'OrNull'), 'quantilesInterpolatedWeightedOrNull': ('quantilesInterpolatedWeighted', 'OrNull'), 'minMapOrNull': ('minMap', 'OrNull'), 'quantilesExactHighOrNull': ('quantilesExactHigh', 'OrNull'), 'groupArrayInsertAtOrNull': ('groupArrayInsertAt', 'OrNull'), 'quantileBFloat16OrNull': ('quantileBFloat16', 'OrNull'), 'quantileTDigestWeightedOrNull': ('quantileTDigestWeighted', 'OrNull'), 'covarSampOrNull': ('covarSamp', 'OrNull'), 'intervalLengthSumOrNull': ('intervalLengthSum', 'OrNull'), 'medianOrNull': ('median', 'OrNull'), 'quantileExactWeightedOrNull': ('quantileExactWeighted', 'OrNull'), 'quantilesTDigestOrNull': ('quantilesTDigest', 'OrNull'), 'groupBitmapXorOrNull': ('groupBitmapXor', 'OrNull'), 'quantileExactOrNull': ('quantileExact', 'OrNull'), 'maxIntersectionsPositionOrNull': ('maxIntersectionsPosition', 'OrNull'), 'uniqUpToOrNull': ('uniqUpTo', 'OrNull'), 'retentionOrNull': ('retention', 'OrNull'), 'quantilesTimingOrNull': ('quantilesTiming', 'OrNull'), 'windowFunnelOrNull': ('windowFunnel', 'OrNull'), 'stddevSampOrNull': ('stddevSamp', 'OrNull'), 'quantileExactHighOrNull': ('quantileExactHigh', 'OrNull'), 'entropyOrNull': ('entropy', 'OrNull'), 'boundingRatioOrNull': ('boundingRatio', 'OrNull'), 'quantileTimingWeightedOrNull': ('quantileTimingWeighted', 'OrNull'), 'mannWhitneyUTestOrNull': ('mannWhitneyUTest', 'OrNull'), 'cramersVOrNull': ('cramersV', 'OrNull'), 'cramersVBiasCorrectedOrNull': ('cramersVBiasCorrected', 'OrNull'), 'deltaSumTimestampOrNull': ('deltaSumTimestamp', 'OrNull'), 'stochasticLinearRegressionOrNull': ('stochasticLinearRegression', 'OrNull'), 'sparkBarOrNull': ('sparkBar', 'OrNull'), 'contingencyOrNull': ('contingency', 'OrNull'), 'groupBitmapOrOrNull': ('groupBitmapOr', 'OrNull'), 'approx_top_sumOrNull': ('approx_top_sum', 'OrNull'), 'avgOrNull': ('avg', 'OrNull'), 'stddevPopOrNull': ('stddevPop', 'OrNull'), 'quantilesTDigestWeightedOrNull': ('quantilesTDigestWeighted', 'OrNull'), 'quantileOrNull': ('quantile', 'OrNull'), 'avgWeightedOrNull': ('avgWeighted', 'OrNull'), 'groupConcatOrNull': ('groupConcat', 'OrNull'), 'quantileExactInclusiveOrNull': ('quantileExactInclusive', 'OrNull'), 'maxIntersectionsOrNull': ('maxIntersections', 'OrNull'), 'topKWeightedOrNull': ('topKWeighted', 'OrNull'), 'skewPopOrNull': ('skewPop', 'OrNull'), 'last_valueOrNull': ('last_value', 'OrNull'), 'kurtPopOrNull': ('kurtPop', 'OrNull'), 'sumKahanOrNull': ('sumKahan', 'OrNull'), 'histogramOrNull': ('histogram', 'OrNull'), 'categoricalInformationValueOrNull': ('categoricalInformationValue', 'OrNull'), 'quantilesExactExclusiveOrNull': ('quantilesExactExclusive', 'OrNull'), 'quantileExactLowOrNull': ('quantileExactLow', 'OrNull'), 'quantileTimingOrNull': ('quantileTiming', 'OrNull'), 'maxOrNull': ('max', 'OrNull'), 'groupArrayLastOrNull': ('groupArrayLast', 'OrNull'), 'groupArrayMovingAvgOrNull': ('groupArrayMovingAvg', 'OrNull'), 'anyLastOrNull': ('anyLast', 'OrNull'), 'uniqExactOrNull': ('uniqExact', 'OrNull'), 'skewSampOrNull': ('skewSamp', 'OrNull'), 'sequenceNextNodeOrNull': ('sequenceNextNode', 'OrNull'), 'uniqCombined64OrNull': ('uniqCombined64', 'OrNull'), 'groupBitXorOrNull': ('groupBitXor', 'OrNull'), 'quantilesExactWeightedOrNull': ('quantilesExactWeighted', 'OrNull'), 'sumOrNull': ('sum', 'OrNull'), 'largestTriangleThreeBucketsOrNull': ('largestTriangleThreeBuckets', 'OrNull'), 'varPopOrNull': ('varPop', 'OrNull'), 'uniqHLL12OrNull': ('uniqHLL12', 'OrNull'), 'uniqOrNull': ('uniq', 'OrNull'), 'varSampOrNull': ('varSamp', 'OrNull'), 'topKOrNull': ('topK', 'OrNull'), 'quantilesDeterministicOrNull': ('quantilesDeterministic', 'OrNull'), 'quantileTDigestOrNull': ('quantileTDigest', 'OrNull'), 'argMinOrNull': ('argMin', 'OrNull'), 'welchTTestArgMin': ('welchTTest', 'ArgMin'), 'quantilesArgMin': ('quantiles', 'ArgMin'), 'rankCorrArgMin': ('rankCorr', 'ArgMin'), 'quantileBFloat16WeightedArgMin': ('quantileBFloat16Weighted', 'ArgMin'), 'groupUniqArrayArgMin': ('groupUniqArray', 'ArgMin'), 'quantilesGKArgMin': ('quantilesGK', 'ArgMin'), 'sequenceMatchArgMin': ('sequenceMatch', 'ArgMin'), 'groupBitmapArgMin': ('groupBitmap', 'ArgMin'), 'groupBitOrArgMin': ('groupBitOr', 'ArgMin'), 'maxMapArgMin': ('maxMap', 'ArgMin'), 'uniqCombinedArgMin': ('uniqCombined', 'ArgMin'), 'groupBitAndArgMin': ('groupBitAnd', 'ArgMin'), 'quantileGKArgMin': ('quantileGK', 'ArgMin'), 'quantileInterpolatedWeightedArgMin': ('quantileInterpolatedWeighted', 'ArgMin'), 'quantilesBFloat16WeightedArgMin': ('quantilesBFloat16Weighted', 'ArgMin'), 'exponentialTimeDecayedAvgArgMin': ('exponentialTimeDecayedAvg', 'ArgMin'), 'kurtSampArgMin': ('kurtSamp', 'ArgMin'), 'anyArgMin': ('any', 'ArgMin'), 'theilsUArgMin': ('theilsU', 'ArgMin'), 'argMaxArgMin': ('argMax', 'ArgMin'), 'quantilesTimingWeightedArgMin': ('quantilesTimingWeighted', 'ArgMin'), 'groupArraySampleArgMin': ('groupArraySample', 'ArgMin'), 'sumCountArgMin': ('sumCount', 'ArgMin'), 'sumWithOverflowArgMin': ('sumWithOverflow', 'ArgMin'), 'uniqThetaArgMin': ('uniqTheta', 'ArgMin'), 'groupArrayMovingSumArgMin': ('groupArrayMovingSum', 'ArgMin'), 'corrArgMin': ('corr', 'ArgMin'), 'quantilesBFloat16ArgMin': ('quantilesBFloat16', 'ArgMin'), 'minArgMin': ('min', 'ArgMin'), 'groupArrayArgMin': ('groupArray', 'ArgMin'), 'sequenceCountArgMin': ('sequenceCount', 'ArgMin'), 'kolmogorovSmirnovTestArgMin': ('kolmogorovSmirnovTest', 'ArgMin'), 'deltaSumArgMin': ('deltaSum', 'ArgMin'), 'meanZTestArgMin': ('meanZTest', 'ArgMin'), 'anyHeavyArgMin': ('anyHeavy', 'ArgMin'), 'countArgMin': ('count', 'ArgMin'), 'quantilesExactLowArgMin': ('quantilesExactLow', 'ArgMin'), 'groupBitmapAndArgMin': ('groupBitmapAnd', 'ArgMin'), 'quantileDeterministicArgMin': ('quantileDeterministic', 'ArgMin'), 'quantilesExactArgMin': ('quantilesExact', 'ArgMin'), 'sumMapArgMin': ('sumMap', 'ArgMin'), 'covarPopArgMin': ('covarPop', 'ArgMin'), 'studentTTestArgMin': ('studentTTest', 'ArgMin'), 'first_valueArgMin': ('first_value', 'ArgMin'), 'exponentialMovingAverageArgMin': ('exponentialMovingAverage', 'ArgMin'), 'simpleLinearRegressionArgMin': ('simpleLinearRegression', 'ArgMin'), 'stochasticLogisticRegressionArgMin': ('stochasticLogisticRegression', 'ArgMin'), 'quantilesInterpolatedWeightedArgMin': ('quantilesInterpolatedWeighted', 'ArgMin'), 'minMapArgMin': ('minMap', 'ArgMin'), 'quantilesExactHighArgMin': ('quantilesExactHigh', 'ArgMin'), 'groupArrayInsertAtArgMin': ('groupArrayInsertAt', 'ArgMin'), 'quantileBFloat16ArgMin': ('quantileBFloat16', 'ArgMin'), 'quantileTDigestWeightedArgMin': ('quantileTDigestWeighted', 'ArgMin'), 'covarSampArgMin': ('covarSamp', 'ArgMin'), 'intervalLengthSumArgMin': ('intervalLengthSum', 'ArgMin'), 'medianArgMin': ('median', 'ArgMin'), 'quantileExactWeightedArgMin': ('quantileExactWeighted', 'ArgMin'), 'quantilesTDigestArgMin': ('quantilesTDigest', 'ArgMin'), 'groupBitmapXorArgMin': ('groupBitmapXor', 'ArgMin'), 'quantileExactArgMin': ('quantileExact', 'ArgMin'), 'maxIntersectionsPositionArgMin': ('maxIntersectionsPosition', 'ArgMin'), 'uniqUpToArgMin': ('uniqUpTo', 'ArgMin'), 'retentionArgMin': ('retention', 'ArgMin'), 'quantilesTimingArgMin': ('quantilesTiming', 'ArgMin'), 'windowFunnelArgMin': ('windowFunnel', 'ArgMin'), 'stddevSampArgMin': ('stddevSamp', 'ArgMin'), 'quantileExactHighArgMin': ('quantileExactHigh', 'ArgMin'), 'entropyArgMin': ('entropy', 'ArgMin'), 'boundingRatioArgMin': ('boundingRatio', 'ArgMin'), 'quantileTimingWeightedArgMin': ('quantileTimingWeighted', 'ArgMin'), 'mannWhitneyUTestArgMin': ('mannWhitneyUTest', 'ArgMin'), 'cramersVArgMin': ('cramersV', 'ArgMin'), 'cramersVBiasCorrectedArgMin': ('cramersVBiasCorrected', 'ArgMin'), 'deltaSumTimestampArgMin': ('deltaSumTimestamp', 'ArgMin'), 'stochasticLinearRegressionArgMin': ('stochasticLinearRegression', 'ArgMin'), 'sparkBarArgMin': ('sparkBar', 'ArgMin'), 'contingencyArgMin': ('contingency', 'ArgMin'), 'groupBitmapOrArgMin': ('groupBitmapOr', 'ArgMin'), 'approx_top_sumArgMin': ('approx_top_sum', 'ArgMin'), 'avgArgMin': ('avg', 'ArgMin'), 'stddevPopArgMin': ('stddevPop', 'ArgMin'), 'quantilesTDigestWeightedArgMin': ('quantilesTDigestWeighted', 'ArgMin'), 'quantileArgMin': ('quantile', 'ArgMin'), 'avgWeightedArgMin': ('avgWeighted', 'ArgMin'), 'groupConcatArgMin': ('groupConcat', 'ArgMin'), 'quantileExactInclusiveArgMin': ('quantileExactInclusive', 'ArgMin'), 'maxIntersectionsArgMin': ('maxIntersections', 'ArgMin'), 'topKWeightedArgMin': ('topKWeighted', 'ArgMin'), 'skewPopArgMin': ('skewPop', 'ArgMin'), 'last_valueArgMin': ('last_value', 'ArgMin'), 'kurtPopArgMin': ('kurtPop', 'ArgMin'), 'sumKahanArgMin': ('sumKahan', 'ArgMin'), 'histogramArgMin': ('histogram', 'ArgMin'), 'categoricalInformationValueArgMin': ('categoricalInformationValue', 'ArgMin'), 'quantilesExactExclusiveArgMin': ('quantilesExactExclusive', 'ArgMin'), 'quantileExactLowArgMin': ('quantileExactLow', 'ArgMin'), 'quantileTimingArgMin': ('quantileTiming', 'ArgMin'), 'maxArgMin': ('max', 'ArgMin'), 'groupArrayLastArgMin': ('groupArrayLast', 'ArgMin'), 'groupArrayMovingAvgArgMin': ('groupArrayMovingAvg', 'ArgMin'), 'anyLastArgMin': ('anyLast', 'ArgMin'), 'uniqExactArgMin': ('uniqExact', 'ArgMin'), 'skewSampArgMin': ('skewSamp', 'ArgMin'), 'sequenceNextNodeArgMin': ('sequenceNextNode', 'ArgMin'), 'uniqCombined64ArgMin': ('uniqCombined64', 'ArgMin'), 'groupBitXorArgMin': ('groupBitXor', 'ArgMin'), 'quantilesExactWeightedArgMin': ('quantilesExactWeighted', 'ArgMin'), 'sumArgMin': ('sum', 'ArgMin'), 'largestTriangleThreeBucketsArgMin': ('largestTriangleThreeBuckets', 'ArgMin'), 'varPopArgMin': ('varPop', 'ArgMin'), 'uniqHLL12ArgMin': ('uniqHLL12', 'ArgMin'), 'uniqArgMin': ('uniq', 'ArgMin'), 'varSampArgMin': ('varSamp', 'ArgMin'), 'topKArgMin': ('topK', 'ArgMin'), 'quantilesDeterministicArgMin': ('quantilesDeterministic', 'ArgMin'), 'quantileTDigestArgMin': ('quantileTDigest', 'ArgMin'), 'argMinArgMin': ('argMin', 'ArgMin'), 'welchTTestArgMax': ('welchTTest', 'ArgMax'), 'quantilesArgMax': ('quantiles', 'ArgMax'), 'rankCorrArgMax': ('rankCorr', 'ArgMax'), 'quantileBFloat16WeightedArgMax': ('quantileBFloat16Weighted', 'ArgMax'), 'groupUniqArrayArgMax': ('groupUniqArray', 'ArgMax'), 'quantilesGKArgMax': ('quantilesGK', 'ArgMax'), 'sequenceMatchArgMax': ('sequenceMatch', 'ArgMax'), 'groupBitmapArgMax': ('groupBitmap', 'ArgMax'), 'groupBitOrArgMax': ('groupBitOr', 'ArgMax'), 'maxMapArgMax': ('maxMap', 'ArgMax'), 'uniqCombinedArgMax': ('uniqCombined', 'ArgMax'), 'groupBitAndArgMax': ('groupBitAnd', 'ArgMax'), 'quantileGKArgMax': ('quantileGK', 'ArgMax'), 'quantileInterpolatedWeightedArgMax': ('quantileInterpolatedWeighted', 'ArgMax'), 'quantilesBFloat16WeightedArgMax': ('quantilesBFloat16Weighted', 'ArgMax'), 'exponentialTimeDecayedAvgArgMax': ('exponentialTimeDecayedAvg', 'ArgMax'), 'kurtSampArgMax': ('kurtSamp', 'ArgMax'), 'anyArgMax': ('any', 'ArgMax'), 'theilsUArgMax': ('theilsU', 'ArgMax'), 'argMaxArgMax': ('argMax', 'ArgMax'), 'quantilesTimingWeightedArgMax': ('quantilesTimingWeighted', 'ArgMax'), 'groupArraySampleArgMax': ('groupArraySample', 'ArgMax'), 'sumCountArgMax': ('sumCount', 'ArgMax'), 'sumWithOverflowArgMax': ('sumWithOverflow', 'ArgMax'), 'uniqThetaArgMax': ('uniqTheta', 'ArgMax'), 'groupArrayMovingSumArgMax': ('groupArrayMovingSum', 'ArgMax'), 'corrArgMax': ('corr', 'ArgMax'), 'quantilesBFloat16ArgMax': ('quantilesBFloat16', 'ArgMax'), 'minArgMax': ('min', 'ArgMax'), 'groupArrayArgMax': ('groupArray', 'ArgMax'), 'sequenceCountArgMax': ('sequenceCount', 'ArgMax'), 'kolmogorovSmirnovTestArgMax': ('kolmogorovSmirnovTest', 'ArgMax'), 'deltaSumArgMax': ('deltaSum', 'ArgMax'), 'meanZTestArgMax': ('meanZTest', 'ArgMax'), 'anyHeavyArgMax': ('anyHeavy', 'ArgMax'), 'countArgMax': ('count', 'ArgMax'), 'quantilesExactLowArgMax': ('quantilesExactLow', 'ArgMax'), 'groupBitmapAndArgMax': ('groupBitmapAnd', 'ArgMax'), 'quantileDeterministicArgMax': ('quantileDeterministic', 'ArgMax'), 'quantilesExactArgMax': ('quantilesExact', 'ArgMax'), 'sumMapArgMax': ('sumMap', 'ArgMax'), 'covarPopArgMax': ('covarPop', 'ArgMax'), 'studentTTestArgMax': ('studentTTest', 'ArgMax'), 'first_valueArgMax': ('first_value', 'ArgMax'), 'exponentialMovingAverageArgMax': ('exponentialMovingAverage', 'ArgMax'), 'simpleLinearRegressionArgMax': ('simpleLinearRegression', 'ArgMax'), 'stochasticLogisticRegressionArgMax': ('stochasticLogisticRegression', 'ArgMax'), 'quantilesInterpolatedWeightedArgMax': ('quantilesInterpolatedWeighted', 'ArgMax'), 'minMapArgMax': ('minMap', 'ArgMax'), 'quantilesExactHighArgMax': ('quantilesExactHigh', 'ArgMax'), 'groupArrayInsertAtArgMax': ('groupArrayInsertAt', 'ArgMax'), 'quantileBFloat16ArgMax': ('quantileBFloat16', 'ArgMax'), 'quantileTDigestWeightedArgMax': ('quantileTDigestWeighted', 'ArgMax'), 'covarSampArgMax': ('covarSamp', 'ArgMax'), 'intervalLengthSumArgMax': ('intervalLengthSum', 'ArgMax'), 'medianArgMax': ('median', 'ArgMax'), 'quantileExactWeightedArgMax': ('quantileExactWeighted', 'ArgMax'), 'quantilesTDigestArgMax': ('quantilesTDigest', 'ArgMax'), 'groupBitmapXorArgMax': ('groupBitmapXor', 'ArgMax'), 'quantileExactArgMax': ('quantileExact', 'ArgMax'), 'maxIntersectionsPositionArgMax': ('maxIntersectionsPosition', 'ArgMax'), 'uniqUpToArgMax': ('uniqUpTo', 'ArgMax'), 'retentionArgMax': ('retention', 'ArgMax'), 'quantilesTimingArgMax': ('quantilesTiming', 'ArgMax'), 'windowFunnelArgMax': ('windowFunnel', 'ArgMax'), 'stddevSampArgMax': ('stddevSamp', 'ArgMax'), 'quantileExactHighArgMax': ('quantileExactHigh', 'ArgMax'), 'entropyArgMax': ('entropy', 'ArgMax'), 'boundingRatioArgMax': ('boundingRatio', 'ArgMax'), 'quantileTimingWeightedArgMax': ('quantileTimingWeighted', 'ArgMax'), 'mannWhitneyUTestArgMax': ('mannWhitneyUTest', 'ArgMax'), 'cramersVArgMax': ('cramersV', 'ArgMax'), 'cramersVBiasCorrectedArgMax': ('cramersVBiasCorrected', 'ArgMax'), 'deltaSumTimestampArgMax': ('deltaSumTimestamp', 'ArgMax'), 'stochasticLinearRegressionArgMax': ('stochasticLinearRegression', 'ArgMax'), 'sparkBarArgMax': ('sparkBar', 'ArgMax'), 'contingencyArgMax': ('contingency', 'ArgMax'), 'groupBitmapOrArgMax': ('groupBitmapOr', 'ArgMax'), 'approx_top_sumArgMax': ('approx_top_sum', 'ArgMax'), 'avgArgMax': ('avg', 'ArgMax'), 'stddevPopArgMax': ('stddevPop', 'ArgMax'), 'quantilesTDigestWeightedArgMax': ('quantilesTDigestWeighted', 'ArgMax'), 'quantileArgMax': ('quantile', 'ArgMax'), 'avgWeightedArgMax': ('avgWeighted', 'ArgMax'), 'groupConcatArgMax': ('groupConcat', 'ArgMax'), 'quantileExactInclusiveArgMax': ('quantileExactInclusive', 'ArgMax'), 'maxIntersectionsArgMax': ('maxIntersections', 'ArgMax'), 'topKWeightedArgMax': ('topKWeighted', 'ArgMax'), 'skewPopArgMax': ('skewPop', 'ArgMax'), 'last_valueArgMax': ('last_value', 'ArgMax'), 'kurtPopArgMax': ('kurtPop', 'ArgMax'), 'sumKahanArgMax': ('sumKahan', 'ArgMax'), 'histogramArgMax': ('histogram', 'ArgMax'), 'categoricalInformationValueArgMax': ('categoricalInformationValue', 'ArgMax'), 'quantilesExactExclusiveArgMax': ('quantilesExactExclusive', 'ArgMax'), 'quantileExactLowArgMax': ('quantileExactLow', 'ArgMax'), 'quantileTimingArgMax': ('quantileTiming', 'ArgMax'), 'maxArgMax': ('max', 'ArgMax'), 'groupArrayLastArgMax': ('groupArrayLast', 'ArgMax'), 'groupArrayMovingAvgArgMax': ('groupArrayMovingAvg', 'ArgMax'), 'anyLastArgMax': ('anyLast', 'ArgMax'), 'uniqExactArgMax': ('uniqExact', 'ArgMax'), 'skewSampArgMax': ('skewSamp', 'ArgMax'), 'sequenceNextNodeArgMax': ('sequenceNextNode', 'ArgMax'), 'uniqCombined64ArgMax': ('uniqCombined64', 'ArgMax'), 'groupBitXorArgMax': ('groupBitXor', 'ArgMax'), 'quantilesExactWeightedArgMax': ('quantilesExactWeighted', 'ArgMax'), 'sumArgMax': ('sum', 'ArgMax'), 'largestTriangleThreeBucketsArgMax': ('largestTriangleThreeBuckets', 'ArgMax'), 'varPopArgMax': ('varPop', 'ArgMax'), 'uniqHLL12ArgMax': ('uniqHLL12', 'ArgMax'), 'uniqArgMax': ('uniq', 'ArgMax'), 'varSampArgMax': ('varSamp', 'ArgMax'), 'topKArgMax': ('topK', 'ArgMax'), 'quantilesDeterministicArgMax': ('quantilesDeterministic', 'ArgMax'), 'quantileTDigestArgMax': ('quantileTDigest', 'ArgMax'), 'argMinArgMax': ('argMin', 'ArgMax'), 'welchTTestArray': ('welchTTest', 'Array'), 'quantilesArray': ('quantiles', 'Array'), 'rankCorrArray': ('rankCorr', 'Array'), 'quantileBFloat16WeightedArray': ('quantileBFloat16Weighted', 'Array'), 'groupUniqArrayArray': ('groupUniqArray', 'Array'), 'quantilesGKArray': ('quantilesGK', 'Array'), 'sequenceMatchArray': ('sequenceMatch', 'Array'), 'groupBitmapArray': ('groupBitmap', 'Array'), 'groupBitOrArray': ('groupBitOr', 'Array'), 'maxMapArray': ('maxMap', 'Array'), 'uniqCombinedArray': ('uniqCombined', 'Array'), 'groupBitAndArray': ('groupBitAnd', 'Array'), 'quantileGKArray': ('quantileGK', 'Array'), 'quantileInterpolatedWeightedArray': ('quantileInterpolatedWeighted', 'Array'), 'quantilesBFloat16WeightedArray': ('quantilesBFloat16Weighted', 'Array'), 'exponentialTimeDecayedAvgArray': ('exponentialTimeDecayedAvg', 'Array'), 'kurtSampArray': ('kurtSamp', 'Array'), 'anyArray': ('any', 'Array'), 'theilsUArray': ('theilsU', 'Array'), 'argMaxArray': ('argMax', 'Array'), 'quantilesTimingWeightedArray': ('quantilesTimingWeighted', 'Array'), 'groupArraySampleArray': ('groupArraySample', 'Array'), 'sumCountArray': ('sumCount', 'Array'), 'sumWithOverflowArray': ('sumWithOverflow', 'Array'), 'uniqThetaArray': ('uniqTheta', 'Array'), 'groupArrayMovingSumArray': ('groupArrayMovingSum', 'Array'), 'corrArray': ('corr', 'Array'), 'quantilesBFloat16Array': ('quantilesBFloat16', 'Array'), 'minArray': ('min', 'Array'), 'groupArrayArray': ('groupArray', 'Array'), 'sequenceCountArray': ('sequenceCount', 'Array'), 'kolmogorovSmirnovTestArray': ('kolmogorovSmirnovTest', 'Array'), 'deltaSumArray': ('deltaSum', 'Array'), 'meanZTestArray': ('meanZTest', 'Array'), 'anyHeavyArray': ('anyHeavy', 'Array'), 'countArray': ('count', 'Array'), 'quantilesExactLowArray': ('quantilesExactLow', 'Array'), 'groupBitmapAndArray': ('groupBitmapAnd', 'Array'), 'quantileDeterministicArray': ('quantileDeterministic', 'Array'), 'quantilesExactArray': ('quantilesExact', 'Array'), 'sumMapArray': ('sumMap', 'Array'), 'covarPopArray': ('covarPop', 'Array'), 'studentTTestArray': ('studentTTest', 'Array'), 'first_valueArray': ('first_value', 'Array'), 'exponentialMovingAverageArray': ('exponentialMovingAverage', 'Array'), 'simpleLinearRegressionArray': ('simpleLinearRegression', 'Array'), 'stochasticLogisticRegressionArray': ('stochasticLogisticRegression', 'Array'), 'quantilesInterpolatedWeightedArray': ('quantilesInterpolatedWeighted', 'Array'), 'minMapArray': ('minMap', 'Array'), 'quantilesExactHighArray': ('quantilesExactHigh', 'Array'), 'groupArrayInsertAtArray': ('groupArrayInsertAt', 'Array'), 'quantileBFloat16Array': ('quantileBFloat16', 'Array'), 'quantileTDigestWeightedArray': ('quantileTDigestWeighted', 'Array'), 'covarSampArray': ('covarSamp', 'Array'), 'intervalLengthSumArray': ('intervalLengthSum', 'Array'), 'medianArray': ('median', 'Array'), 'quantileExactWeightedArray': ('quantileExactWeighted', 'Array'), 'quantilesTDigestArray': ('quantilesTDigest', 'Array'), 'groupBitmapXorArray': ('groupBitmapXor', 'Array'), 'quantileExactArray': ('quantileExact', 'Array'), 'maxIntersectionsPositionArray': ('maxIntersectionsPosition', 'Array'), 'uniqUpToArray': ('uniqUpTo', 'Array'), 'retentionArray': ('retention', 'Array'), 'quantilesTimingArray': ('quantilesTiming', 'Array'), 'windowFunnelArray': ('windowFunnel', 'Array'), 'stddevSampArray': ('stddevSamp', 'Array'), 'quantileExactHighArray': ('quantileExactHigh', 'Array'), 'entropyArray': ('entropy', 'Array'), 'boundingRatioArray': ('boundingRatio', 'Array'), 'quantileTimingWeightedArray': ('quantileTimingWeighted', 'Array'), 'mannWhitneyUTestArray': ('mannWhitneyUTest', 'Array'), 'cramersVArray': ('cramersV', 'Array'), 'cramersVBiasCorrectedArray': ('cramersVBiasCorrected', 'Array'), 'deltaSumTimestampArray': ('deltaSumTimestamp', 'Array'), 'stochasticLinearRegressionArray': ('stochasticLinearRegression', 'Array'), 'sparkBarArray': ('sparkBar', 'Array'), 'contingencyArray': ('contingency', 'Array'), 'groupBitmapOrArray': ('groupBitmapOr', 'Array'), 'approx_top_sumArray': ('approx_top_sum', 'Array'), 'avgArray': ('avg', 'Array'), 'stddevPopArray': ('stddevPop', 'Array'), 'quantilesTDigestWeightedArray': ('quantilesTDigestWeighted', 'Array'), 'quantileArray': ('quantile', 'Array'), 'avgWeightedArray': ('avgWeighted', 'Array'), 'groupConcatArray': ('groupConcat', 'Array'), 'quantileExactInclusiveArray': ('quantileExactInclusive', 'Array'), 'maxIntersectionsArray': ('maxIntersections', 'Array'), 'topKWeightedArray': ('topKWeighted', 'Array'), 'skewPopArray': ('skewPop', 'Array'), 'last_valueArray': ('last_value', 'Array'), 'kurtPopArray': ('kurtPop', 'Array'), 'sumKahanArray': ('sumKahan', 'Array'), 'histogramArray': ('histogram', 'Array'), 'categoricalInformationValueArray': ('categoricalInformationValue', 'Array'), 'quantilesExactExclusiveArray': ('quantilesExactExclusive', 'Array'), 'quantileExactLowArray': ('quantileExactLow', 'Array'), 'quantileTimingArray': ('quantileTiming', 'Array'), 'maxArray': ('max', 'Array'), 'groupArrayLastArray': ('groupArrayLast', 'Array'), 'groupArrayMovingAvgArray': ('groupArrayMovingAvg', 'Array'), 'anyLastArray': ('anyLast', 'Array'), 'uniqExactArray': ('uniqExact', 'Array'), 'skewSampArray': ('skewSamp', 'Array'), 'sequenceNextNodeArray': ('sequenceNextNode', 'Array'), 'uniqCombined64Array': ('uniqCombined64', 'Array'), 'groupBitXorArray': ('groupBitXor', 'Array'), 'quantilesExactWeightedArray': ('quantilesExactWeighted', 'Array'), 'sumArray': ('sum', 'Array'), 'largestTriangleThreeBucketsArray': ('largestTriangleThreeBuckets', 'Array'), 'varPopArray': ('varPop', 'Array'), 'uniqHLL12Array': ('uniqHLL12', 'Array'), 'uniqArray': ('uniq', 'Array'), 'varSampArray': ('varSamp', 'Array'), 'topKArray': ('topK', 'Array'), 'quantilesDeterministicArray': ('quantilesDeterministic', 'Array'), 'quantileTDigestArray': ('quantileTDigest', 'Array'), 'argMinArray': ('argMin', 'Array'), 'welchTTestState': ('welchTTest', 'State'), 'quantilesState': ('quantiles', 'State'), 'rankCorrState': ('rankCorr', 'State'), 'quantileBFloat16WeightedState': ('quantileBFloat16Weighted', 'State'), 'groupUniqArrayState': ('groupUniqArray', 'State'), 'quantilesGKState': ('quantilesGK', 'State'), 'sequenceMatchState': ('sequenceMatch', 'State'), 'groupBitmapState': ('groupBitmap', 'State'), 'groupBitOrState': ('groupBitOr', 'State'), 'maxMapState': ('maxMap', 'State'), 'uniqCombinedState': ('uniqCombined', 'State'), 'groupBitAndState': ('groupBitAnd', 'State'), 'quantileGKState': ('quantileGK', 'State'), 'quantileInterpolatedWeightedState': ('quantileInterpolatedWeighted', 'State'), 'quantilesBFloat16WeightedState': ('quantilesBFloat16Weighted', 'State'), 'exponentialTimeDecayedAvgState': ('exponentialTimeDecayedAvg', 'State'), 'kurtSampState': ('kurtSamp', 'State'), 'anyState': ('any', 'State'), 'theilsUState': ('theilsU', 'State'), 'argMaxState': ('argMax', 'State'), 'quantilesTimingWeightedState': ('quantilesTimingWeighted', 'State'), 'groupArraySampleState': ('groupArraySample', 'State'), 'sumCountState': ('sumCount', 'State'), 'sumWithOverflowState': ('sumWithOverflow', 'State'), 'uniqThetaState': ('uniqTheta', 'State'), 'groupArrayMovingSumState': ('groupArrayMovingSum', 'State'), 'corrState': ('corr', 'State'), 'quantilesBFloat16State': ('quantilesBFloat16', 'State'), 'minState': ('min', 'State'), 'groupArrayState': ('groupArray', 'State'), 'sequenceCountState': ('sequenceCount', 'State'), 'kolmogorovSmirnovTestState': ('kolmogorovSmirnovTest', 'State'), 'deltaSumState': ('deltaSum', 'State'), 'meanZTestState': ('meanZTest', 'State'), 'anyHeavyState': ('anyHeavy', 'State'), 'countState': ('count', 'State'), 'quantilesExactLowState': ('quantilesExactLow', 'State'), 'groupBitmapAndState': ('groupBitmapAnd', 'State'), 'quantileDeterministicState': ('quantileDeterministic', 'State'), 'quantilesExactState': ('quantilesExact', 'State'), 'sumMapState': ('sumMap', 'State'), 'covarPopState': ('covarPop', 'State'), 'studentTTestState': ('studentTTest', 'State'), 'first_valueState': ('first_value', 'State'), 'exponentialMovingAverageState': ('exponentialMovingAverage', 'State'), 'simpleLinearRegressionState': ('simpleLinearRegression', 'State'), 'stochasticLogisticRegressionState': ('stochasticLogisticRegression', 'State'), 'quantilesInterpolatedWeightedState': ('quantilesInterpolatedWeighted', 'State'), 'minMapState': ('minMap', 'State'), 'quantilesExactHighState': ('quantilesExactHigh', 'State'), 'groupArrayInsertAtState': ('groupArrayInsertAt', 'State'), 'quantileBFloat16State': ('quantileBFloat16', 'State'), 'quantileTDigestWeightedState': ('quantileTDigestWeighted', 'State'), 'covarSampState': ('covarSamp', 'State'), 'intervalLengthSumState': ('intervalLengthSum', 'State'), 'medianState': ('median', 'State'), 'quantileExactWeightedState': ('quantileExactWeighted', 'State'), 'quantilesTDigestState': ('quantilesTDigest', 'State'), 'groupBitmapXorState': ('groupBitmapXor', 'State'), 'quantileExactState': ('quantileExact', 'State'), 'maxIntersectionsPositionState': ('maxIntersectionsPosition', 'State'), 'uniqUpToState': ('uniqUpTo', 'State'), 'retentionState': ('retention', 'State'), 'quantilesTimingState': ('quantilesTiming', 'State'), 'windowFunnelState': ('windowFunnel', 'State'), 'stddevSampState': ('stddevSamp', 'State'), 'quantileExactHighState': ('quantileExactHigh', 'State'), 'entropyState': ('entropy', 'State'), 'boundingRatioState': ('boundingRatio', 'State'), 'quantileTimingWeightedState': ('quantileTimingWeighted', 'State'), 'mannWhitneyUTestState': ('mannWhitneyUTest', 'State'), 'cramersVState': ('cramersV', 'State'), 'cramersVBiasCorrectedState': ('cramersVBiasCorrected', 'State'), 'deltaSumTimestampState': ('deltaSumTimestamp', 'State'), 'stochasticLinearRegressionState': ('stochasticLinearRegression', 'State'), 'sparkBarState': ('sparkBar', 'State'), 'contingencyState': ('contingency', 'State'), 'groupBitmapOrState': ('groupBitmapOr', 'State'), 'approx_top_sumState': ('approx_top_sum', 'State'), 'avgState': ('avg', 'State'), 'stddevPopState': ('stddevPop', 'State'), 'quantilesTDigestWeightedState': ('quantilesTDigestWeighted', 'State'), 'quantileState': ('quantile', 'State'), 'avgWeightedState': ('avgWeighted', 'State'), 'groupConcatState': ('groupConcat', 'State'), 'quantileExactInclusiveState': ('quantileExactInclusive', 'State'), 'maxIntersectionsState': ('maxIntersections', 'State'), 'topKWeightedState': ('topKWeighted', 'State'), 'skewPopState': ('skewPop', 'State'), 'last_valueState': ('last_value', 'State'), 'kurtPopState': ('kurtPop', 'State'), 'sumKahanState': ('sumKahan', 'State'), 'histogramState': ('histogram', 'State'), 'categoricalInformationValueState': ('categoricalInformationValue', 'State'), 'quantilesExactExclusiveState': ('quantilesExactExclusive', 'State'), 'quantileExactLowState': ('quantileExactLow', 'State'), 'quantileTimingState': ('quantileTiming', 'State'), 'maxState': ('max', 'State'), 'groupArrayLastState': ('groupArrayLast', 'State'), 'groupArrayMovingAvgState': ('groupArrayMovingAvg', 'State'), 'anyLastState': ('anyLast', 'State'), 'uniqExactState': ('uniqExact', 'State'), 'skewSampState': ('skewSamp', 'State'), 'sequenceNextNodeState': ('sequenceNextNode', 'State'), 'uniqCombined64State': ('uniqCombined64', 'State'), 'groupBitXorState': ('groupBitXor', 'State'), 'quantilesExactWeightedState': ('quantilesExactWeighted', 'State'), 'sumState': ('sum', 'State'), 'largestTriangleThreeBucketsState': ('largestTriangleThreeBuckets', 'State'), 'varPopState': ('varPop', 'State'), 'uniqHLL12State': ('uniqHLL12', 'State'), 'uniqState': ('uniq', 'State'), 'varSampState': ('varSamp', 'State'), 'topKState': ('topK', 'State'), 'quantilesDeterministicState': ('quantilesDeterministic', 'State'), 'quantileTDigestState': ('quantileTDigest', 'State'), 'argMinState': ('argMin', 'State'), 'welchTTestMerge': ('welchTTest', 'Merge'), 'quantilesMerge': ('quantiles', 'Merge'), 'rankCorrMerge': ('rankCorr', 'Merge'), 'quantileBFloat16WeightedMerge': ('quantileBFloat16Weighted', 'Merge'), 'groupUniqArrayMerge': ('groupUniqArray', 'Merge'), 'quantilesGKMerge': ('quantilesGK', 'Merge'), 'sequenceMatchMerge': ('sequenceMatch', 'Merge'), 'groupBitmapMerge': ('groupBitmap', 'Merge'), 'groupBitOrMerge': ('groupBitOr', 'Merge'), 'maxMapMerge': ('maxMap', 'Merge'), 'uniqCombinedMerge': ('uniqCombined', 'Merge'), 'groupBitAndMerge': ('groupBitAnd', 'Merge'), 'quantileGKMerge': ('quantileGK', 'Merge'), 'quantileInterpolatedWeightedMerge': ('quantileInterpolatedWeighted', 'Merge'), 'quantilesBFloat16WeightedMerge': ('quantilesBFloat16Weighted', 'Merge'), 'exponentialTimeDecayedAvgMerge': ('exponentialTimeDecayedAvg', 'Merge'), 'kurtSampMerge': ('kurtSamp', 'Merge'), 'anyMerge': ('any', 'Merge'), 'theilsUMerge': ('theilsU', 'Merge'), 'argMaxMerge': ('argMax', 'Merge'), 'quantilesTimingWeightedMerge': ('quantilesTimingWeighted', 'Merge'), 'groupArraySampleMerge': ('groupArraySample', 'Merge'), 'sumCountMerge': ('sumCount', 'Merge'), 'sumWithOverflowMerge': ('sumWithOverflow', 'Merge'), 'uniqThetaMerge': ('uniqTheta', 'Merge'), 'groupArrayMovingSumMerge': ('groupArrayMovingSum', 'Merge'), 'corrMerge': ('corr', 'Merge'), 'quantilesBFloat16Merge': ('quantilesBFloat16', 'Merge'), 'minMerge': ('min', 'Merge'), 'groupArrayMerge': ('groupArray', 'Merge'), 'sequenceCountMerge': ('sequenceCount', 'Merge'), 'kolmogorovSmirnovTestMerge': ('kolmogorovSmirnovTest', 'Merge'), 'deltaSumMerge': ('deltaSum', 'Merge'), 'meanZTestMerge': ('meanZTest', 'Merge'), 'anyHeavyMerge': ('anyHeavy', 'Merge'), 'countMerge': ('count', 'Merge'), 'quantilesExactLowMerge': ('quantilesExactLow', 'Merge'), 'groupBitmapAndMerge': ('groupBitmapAnd', 'Merge'), 'quantileDeterministicMerge': ('quantileDeterministic', 'Merge'), 'quantilesExactMerge': ('quantilesExact', 'Merge'), 'sumMapMerge': ('sumMap', 'Merge'), 'covarPopMerge': ('covarPop', 'Merge'), 'studentTTestMerge': ('studentTTest', 'Merge'), 'first_valueMerge': ('first_value', 'Merge'), 'exponentialMovingAverageMerge': ('exponentialMovingAverage', 'Merge'), 'simpleLinearRegressionMerge': ('simpleLinearRegression', 'Merge'), 'stochasticLogisticRegressionMerge': ('stochasticLogisticRegression', 'Merge'), 'quantilesInterpolatedWeightedMerge': ('quantilesInterpolatedWeighted', 'Merge'), 'minMapMerge': ('minMap', 'Merge'), 'quantilesExactHighMerge': ('quantilesExactHigh', 'Merge'), 'groupArrayInsertAtMerge': ('groupArrayInsertAt', 'Merge'), 'quantileBFloat16Merge': ('quantileBFloat16', 'Merge'), 'quantileTDigestWeightedMerge': ('quantileTDigestWeighted', 'Merge'), 'covarSampMerge': ('covarSamp', 'Merge'), 'intervalLengthSumMerge': ('intervalLengthSum', 'Merge'), 'medianMerge': ('median', 'Merge'), 'quantileExactWeightedMerge': ('quantileExactWeighted', 'Merge'), 'quantilesTDigestMerge': ('quantilesTDigest', 'Merge'), 'groupBitmapXorMerge': ('groupBitmapXor', 'Merge'), 'quantileExactMerge': ('quantileExact', 'Merge'), 'maxIntersectionsPositionMerge': ('maxIntersectionsPosition', 'Merge'), 'uniqUpToMerge': ('uniqUpTo', 'Merge'), 'retentionMerge': ('retention', 'Merge'), 'quantilesTimingMerge': ('quantilesTiming', 'Merge'), 'windowFunnelMerge': ('windowFunnel', 'Merge'), 'stddevSampMerge': ('stddevSamp', 'Merge'), 'quantileExactHighMerge': ('quantileExactHigh', 'Merge'), 'entropyMerge': ('entropy', 'Merge'), 'boundingRatioMerge': ('boundingRatio', 'Merge'), 'quantileTimingWeightedMerge': ('quantileTimingWeighted', 'Merge'), 'mannWhitneyUTestMerge': ('mannWhitneyUTest', 'Merge'), 'cramersVMerge': ('cramersV', 'Merge'), 'cramersVBiasCorrectedMerge': ('cramersVBiasCorrected', 'Merge'), 'deltaSumTimestampMerge': ('deltaSumTimestamp', 'Merge'), 'stochasticLinearRegressionMerge': ('stochasticLinearRegression', 'Merge'), 'sparkBarMerge': ('sparkBar', 'Merge'), 'contingencyMerge': ('contingency', 'Merge'), 'groupBitmapOrMerge': ('groupBitmapOr', 'Merge'), 'approx_top_sumMerge': ('approx_top_sum', 'Merge'), 'avgMerge': ('avg', 'Merge'), 'stddevPopMerge': ('stddevPop', 'Merge'), 'quantilesTDigestWeightedMerge': ('quantilesTDigestWeighted', 'Merge'), 'quantileMerge': ('quantile', 'Merge'), 'avgWeightedMerge': ('avgWeighted', 'Merge'), 'groupConcatMerge': ('groupConcat', 'Merge'), 'quantileExactInclusiveMerge': ('quantileExactInclusive', 'Merge'), 'maxIntersectionsMerge': ('maxIntersections', 'Merge'), 'topKWeightedMerge': ('topKWeighted', 'Merge'), 'skewPopMerge': ('skewPop', 'Merge'), 'last_valueMerge': ('last_value', 'Merge'), 'kurtPopMerge': ('kurtPop', 'Merge'), 'sumKahanMerge': ('sumKahan', 'Merge'), 'histogramMerge': ('histogram', 'Merge'), 'categoricalInformationValueMerge': ('categoricalInformationValue', 'Merge'), 'quantilesExactExclusiveMerge': ('quantilesExactExclusive', 'Merge'), 'quantileExactLowMerge': ('quantileExactLow', 'Merge'), 'quantileTimingMerge': ('quantileTiming', 'Merge'), 'maxMerge': ('max', 'Merge'), 'groupArrayLastMerge': ('groupArrayLast', 'Merge'), 'groupArrayMovingAvgMerge': ('groupArrayMovingAvg', 'Merge'), 'anyLastMerge': ('anyLast', 'Merge'), 'uniqExactMerge': ('uniqExact', 'Merge'), 'skewSampMerge': ('skewSamp', 'Merge'), 'sequenceNextNodeMerge': ('sequenceNextNode', 'Merge'), 'uniqCombined64Merge': ('uniqCombined64', 'Merge'), 'groupBitXorMerge': ('groupBitXor', 'Merge'), 'quantilesExactWeightedMerge': ('quantilesExactWeighted', 'Merge'), 'sumMerge': ('sum', 'Merge'), 'largestTriangleThreeBucketsMerge': ('largestTriangleThreeBuckets', 'Merge'), 'varPopMerge': ('varPop', 'Merge'), 'uniqHLL12Merge': ('uniqHLL12', 'Merge'), 'uniqMerge': ('uniq', 'Merge'), 'varSampMerge': ('varSamp', 'Merge'), 'topKMerge': ('topK', 'Merge'), 'quantilesDeterministicMerge': ('quantilesDeterministic', 'Merge'), 'quantileTDigestMerge': ('quantileTDigest', 'Merge'), 'argMinMerge': ('argMin', 'Merge'), 'welchTTestMap': ('welchTTest', 'Map'), 'quantilesMap': ('quantiles', 'Map'), 'rankCorrMap': ('rankCorr', 'Map'), 'quantileBFloat16WeightedMap': ('quantileBFloat16Weighted', 'Map'), 'groupUniqArrayMap': ('groupUniqArray', 'Map'), 'quantilesGKMap': ('quantilesGK', 'Map'), 'sequenceMatchMap': ('sequenceMatch', 'Map'), 'groupBitmapMap': ('groupBitmap', 'Map'), 'groupBitOrMap': ('groupBitOr', 'Map'), 'maxMapMap': ('maxMap', 'Map'), 'uniqCombinedMap': ('uniqCombined', 'Map'), 'groupBitAndMap': ('groupBitAnd', 'Map'), 'quantileGKMap': ('quantileGK', 'Map'), 'quantileInterpolatedWeightedMap': ('quantileInterpolatedWeighted', 'Map'), 'quantilesBFloat16WeightedMap': ('quantilesBFloat16Weighted', 'Map'), 'exponentialTimeDecayedAvgMap': ('exponentialTimeDecayedAvg', 'Map'), 'kurtSampMap': ('kurtSamp', 'Map'), 'anyMap': ('any', 'Map'), 'theilsUMap': ('theilsU', 'Map'), 'argMaxMap': ('argMax', 'Map'), 'quantilesTimingWeightedMap': ('quantilesTimingWeighted', 'Map'), 'groupArraySampleMap': ('groupArraySample', 'Map'), 'sumCountMap': ('sumCount', 'Map'), 'sumWithOverflowMap': ('sumWithOverflow', 'Map'), 'uniqThetaMap': ('uniqTheta', 'Map'), 'groupArrayMovingSumMap': ('groupArrayMovingSum', 'Map'), 'corrMap': ('corr', 'Map'), 'quantilesBFloat16Map': ('quantilesBFloat16', 'Map'), 'minMap': ('minMap', None), 'groupArrayMap': ('groupArray', 'Map'), 'sequenceCountMap': ('sequenceCount', 'Map'), 'kolmogorovSmirnovTestMap': ('kolmogorovSmirnovTest', 'Map'), 'deltaSumMap': ('deltaSum', 'Map'), 'meanZTestMap': ('meanZTest', 'Map'), 'anyHeavyMap': ('anyHeavy', 'Map'), 'countMap': ('count', 'Map'), 'quantilesExactLowMap': ('quantilesExactLow', 'Map'), 'groupBitmapAndMap': ('groupBitmapAnd', 'Map'), 'quantileDeterministicMap': ('quantileDeterministic', 'Map'), 'quantilesExactMap': ('quantilesExact', 'Map'), 'sumMapMap': ('sumMap', 'Map'), 'covarPopMap': ('covarPop', 'Map'), 'studentTTestMap': ('studentTTest', 'Map'), 'first_valueMap': ('first_value', 'Map'), 'exponentialMovingAverageMap': ('exponentialMovingAverage', 'Map'), 'simpleLinearRegressionMap': ('simpleLinearRegression', 'Map'), 'stochasticLogisticRegressionMap': ('stochasticLogisticRegression', 'Map'), 'quantilesInterpolatedWeightedMap': ('quantilesInterpolatedWeighted', 'Map'), 'minMapMap': ('minMap', 'Map'), 'quantilesExactHighMap': ('quantilesExactHigh', 'Map'), 'groupArrayInsertAtMap': ('groupArrayInsertAt', 'Map'), 'quantileBFloat16Map': ('quantileBFloat16', 'Map'), 'quantileTDigestWeightedMap': ('quantileTDigestWeighted', 'Map'), 'covarSampMap': ('covarSamp', 'Map'), 'intervalLengthSumMap': ('intervalLengthSum', 'Map'), 'medianMap': ('median', 'Map'), 'quantileExactWeightedMap': ('quantileExactWeighted', 'Map'), 'quantilesTDigestMap': ('quantilesTDigest', 'Map'), 'groupBitmapXorMap': ('groupBitmapXor', 'Map'), 'quantileExactMap': ('quantileExact', 'Map'), 'maxIntersectionsPositionMap': ('maxIntersectionsPosition', 'Map'), 'uniqUpToMap': ('uniqUpTo', 'Map'), 'retentionMap': ('retention', 'Map'), 'quantilesTimingMap': ('quantilesTiming', 'Map'), 'windowFunnelMap': ('windowFunnel', 'Map'), 'stddevSampMap': ('stddevSamp', 'Map'), 'quantileExactHighMap': ('quantileExactHigh', 'Map'), 'entropyMap': ('entropy', 'Map'), 'boundingRatioMap': ('boundingRatio', 'Map'), 'quantileTimingWeightedMap': ('quantileTimingWeighted', 'Map'), 'mannWhitneyUTestMap': ('mannWhitneyUTest', 'Map'), 'cramersVMap': ('cramersV', 'Map'), 'cramersVBiasCorrectedMap': ('cramersVBiasCorrected', 'Map'), 'deltaSumTimestampMap': ('deltaSumTimestamp', 'Map'), 'stochasticLinearRegressionMap': ('stochasticLinearRegression', 'Map'), 'sparkBarMap': ('sparkBar', 'Map'), 'contingencyMap': ('contingency', 'Map'), 'groupBitmapOrMap': ('groupBitmapOr', 'Map'), 'approx_top_sumMap': ('approx_top_sum', 'Map'), 'avgMap': ('avg', 'Map'), 'stddevPopMap': ('stddevPop', 'Map'), 'quantilesTDigestWeightedMap': ('quantilesTDigestWeighted', 'Map'), 'quantileMap': ('quantile', 'Map'), 'avgWeightedMap': ('avgWeighted', 'Map'), 'groupConcatMap': ('groupConcat', 'Map'), 'quantileExactInclusiveMap': ('quantileExactInclusive', 'Map'), 'maxIntersectionsMap': ('maxIntersections', 'Map'), 'topKWeightedMap': ('topKWeighted', 'Map'), 'skewPopMap': ('skewPop', 'Map'), 'last_valueMap': ('last_value', 'Map'), 'kurtPopMap': ('kurtPop', 'Map'), 'sumKahanMap': ('sumKahan', 'Map'), 'histogramMap': ('histogram', 'Map'), 'categoricalInformationValueMap': ('categoricalInformationValue', 'Map'), 'quantilesExactExclusiveMap': ('quantilesExactExclusive', 'Map'), 'quantileExactLowMap': ('quantileExactLow', 'Map'), 'quantileTimingMap': ('quantileTiming', 'Map'), 'maxMap': ('maxMap', None), 'groupArrayLastMap': ('groupArrayLast', 'Map'), 'groupArrayMovingAvgMap': ('groupArrayMovingAvg', 'Map'), 'anyLastMap': ('anyLast', 'Map'), 'uniqExactMap': ('uniqExact', 'Map'), 'skewSampMap': ('skewSamp', 'Map'), 'sequenceNextNodeMap': ('sequenceNextNode', 'Map'), 'uniqCombined64Map': ('uniqCombined64', 'Map'), 'groupBitXorMap': ('groupBitXor', 'Map'), 'quantilesExactWeightedMap': ('quantilesExactWeighted', 'Map'), 'sumMap': ('sumMap', None), 'largestTriangleThreeBucketsMap': ('largestTriangleThreeBuckets', 'Map'), 'varPopMap': ('varPop', 'Map'), 'uniqHLL12Map': ('uniqHLL12', 'Map'), 'uniqMap': ('uniq', 'Map'), 'varSampMap': ('varSamp', 'Map'), 'topKMap': ('topK', 'Map'), 'quantilesDeterministicMap': ('quantilesDeterministic', 'Map'), 'quantileTDigestMap': ('quantileTDigest', 'Map'), 'argMinMap': ('argMin', 'Map'), 'welchTTestIf': ('welchTTest', 'If'), 'quantilesIf': ('quantiles', 'If'), 'rankCorrIf': ('rankCorr', 'If'), 'quantileBFloat16WeightedIf': ('quantileBFloat16Weighted', 'If'), 'groupUniqArrayIf': ('groupUniqArray', 'If'), 'quantilesGKIf': ('quantilesGK', 'If'), 'sequenceMatchIf': ('sequenceMatch', 'If'), 'groupBitmapIf': ('groupBitmap', 'If'), 'groupBitOrIf': ('groupBitOr', 'If'), 'maxMapIf': ('maxMap', 'If'), 'uniqCombinedIf': ('uniqCombined', 'If'), 'groupBitAndIf': ('groupBitAnd', 'If'), 'quantileGKIf': ('quantileGK', 'If'), 'quantileInterpolatedWeightedIf': ('quantileInterpolatedWeighted', 'If'), 'quantilesBFloat16WeightedIf': ('quantilesBFloat16Weighted', 'If'), 'exponentialTimeDecayedAvgIf': ('exponentialTimeDecayedAvg', 'If'), 'kurtSampIf': ('kurtSamp', 'If'), 'anyIf': ('any', 'If'), 'theilsUIf': ('theilsU', 'If'), 'argMaxIf': ('argMax', 'If'), 'quantilesTimingWeightedIf': ('quantilesTimingWeighted', 'If'), 'groupArraySampleIf': ('groupArraySample', 'If'), 'sumCountIf': ('sumCount', 'If'), 'sumWithOverflowIf': ('sumWithOverflow', 'If'), 'uniqThetaIf': ('uniqTheta', 'If'), 'groupArrayMovingSumIf': ('groupArrayMovingSum', 'If'), 'corrIf': ('corr', 'If'), 'quantilesBFloat16If': ('quantilesBFloat16', 'If'), 'minIf': ('min', 'If'), 'groupArrayIf': ('groupArray', 'If'), 'sequenceCountIf': ('sequenceCount', 'If'), 'kolmogorovSmirnovTestIf': ('kolmogorovSmirnovTest', 'If'), 'deltaSumIf': ('deltaSum', 'If'), 'meanZTestIf': ('meanZTest', 'If'), 'anyHeavyIf': ('anyHeavy', 'If'), 'countIf': ('count', 'If'), 'quantilesExactLowIf': ('quantilesExactLow', 'If'), 'groupBitmapAndIf': ('groupBitmapAnd', 'If'), 'quantileDeterministicIf': ('quantileDeterministic', 'If'), 'quantilesExactIf': ('quantilesExact', 'If'), 'sumMapIf': ('sumMap', 'If'), 'covarPopIf': ('covarPop', 'If'), 'studentTTestIf': ('studentTTest', 'If'), 'first_valueIf': ('first_value', 'If'), 'exponentialMovingAverageIf': ('exponentialMovingAverage', 'If'), 'simpleLinearRegressionIf': ('simpleLinearRegression', 'If'), 'stochasticLogisticRegressionIf': ('stochasticLogisticRegression', 'If'), 'quantilesInterpolatedWeightedIf': ('quantilesInterpolatedWeighted', 'If'), 'minMapIf': ('minMap', 'If'), 'quantilesExactHighIf': ('quantilesExactHigh', 'If'), 'groupArrayInsertAtIf': ('groupArrayInsertAt', 'If'), 'quantileBFloat16If': ('quantileBFloat16', 'If'), 'quantileTDigestWeightedIf': ('quantileTDigestWeighted', 'If'), 'covarSampIf': ('covarSamp', 'If'), 'intervalLengthSumIf': ('intervalLengthSum', 'If'), 'medianIf': ('median', 'If'), 'quantileExactWeightedIf': ('quantileExactWeighted', 'If'), 'quantilesTDigestIf': ('quantilesTDigest', 'If'), 'groupBitmapXorIf': ('groupBitmapXor', 'If'), 'quantileExactIf': ('quantileExact', 'If'), 'maxIntersectionsPositionIf': ('maxIntersectionsPosition', 'If'), 'uniqUpToIf': ('uniqUpTo', 'If'), 'retentionIf': ('retention', 'If'), 'quantilesTimingIf': ('quantilesTiming', 'If'), 'windowFunnelIf': ('windowFunnel', 'If'), 'stddevSampIf': ('stddevSamp', 'If'), 'quantileExactHighIf': ('quantileExactHigh', 'If'), 'entropyIf': ('entropy', 'If'), 'boundingRatioIf': ('boundingRatio', 'If'), 'quantileTimingWeightedIf': ('quantileTimingWeighted', 'If'), 'mannWhitneyUTestIf': ('mannWhitneyUTest', 'If'), 'cramersVIf': ('cramersV', 'If'), 'cramersVBiasCorrectedIf': ('cramersVBiasCorrected', 'If'), 'deltaSumTimestampIf': ('deltaSumTimestamp', 'If'), 'stochasticLinearRegressionIf': ('stochasticLinearRegression', 'If'), 'sparkBarIf': ('sparkBar', 'If'), 'contingencyIf': ('contingency', 'If'), 'groupBitmapOrIf': ('groupBitmapOr', 'If'), 'approx_top_sumIf': ('approx_top_sum', 'If'), 'avgIf': ('avg', 'If'), 'stddevPopIf': ('stddevPop', 'If'), 'quantilesTDigestWeightedIf': ('quantilesTDigestWeighted', 'If'), 'quantileIf': ('quantile', 'If'), 'avgWeightedIf': ('avgWeighted', 'If'), 'groupConcatIf': ('groupConcat', 'If'), 'quantileExactInclusiveIf': ('quantileExactInclusive', 'If'), 'maxIntersectionsIf': ('maxIntersections', 'If'), 'topKWeightedIf': ('topKWeighted', 'If'), 'skewPopIf': ('skewPop', 'If'), 'last_valueIf': ('last_value', 'If'), 'kurtPopIf': ('kurtPop', 'If'), 'sumKahanIf': ('sumKahan', 'If'), 'histogramIf': ('histogram', 'If'), 'categoricalInformationValueIf': ('categoricalInformationValue', 'If'), 'quantilesExactExclusiveIf': ('quantilesExactExclusive', 'If'), 'quantileExactLowIf': ('quantileExactLow', 'If'), 'quantileTimingIf': ('quantileTiming', 'If'), 'maxIf': ('max', 'If'), 'groupArrayLastIf': ('groupArrayLast', 'If'), 'groupArrayMovingAvgIf': ('groupArrayMovingAvg', 'If'), 'anyLastIf': ('anyLast', 'If'), 'uniqExactIf': ('uniqExact', 'If'), 'skewSampIf': ('skewSamp', 'If'), 'sequenceNextNodeIf': ('sequenceNextNode', 'If'), 'uniqCombined64If': ('uniqCombined64', 'If'), 'groupBitXorIf': ('groupBitXor', 'If'), 'quantilesExactWeightedIf': ('quantilesExactWeighted', 'If'), 'sumIf': ('sum', 'If'), 'largestTriangleThreeBucketsIf': ('largestTriangleThreeBuckets', 'If'), 'varPopIf': ('varPop', 'If'), 'uniqHLL12If': ('uniqHLL12', 'If'), 'uniqIf': ('uniq', 'If'), 'varSampIf': ('varSamp', 'If'), 'topKIf': ('topK', 'If'), 'quantilesDeterministicIf': ('quantilesDeterministic', 'If'), 'quantileTDigestIf': ('quantileTDigest', 'If'), 'argMinIf': ('argMin', 'If'), 'welchTTest': ('welchTTest', None), 'quantiles': ('quantiles', None), 'rankCorr': ('rankCorr', None), 'quantileBFloat16Weighted': ('quantileBFloat16Weighted', None), 'groupUniqArray': ('groupUniqArray', None), 'quantilesGK': ('quantilesGK', None), 'sequenceMatch': ('sequenceMatch', None), 'groupBitmap': ('groupBitmap', None), 'groupBitOr': ('groupBitOr', None), 'uniqCombined': ('uniqCombined', None), 'groupBitAnd': ('groupBitAnd', None), 'quantileGK': ('quantileGK', None), 'quantileInterpolatedWeighted': ('quantileInterpolatedWeighted', None), 'quantilesBFloat16Weighted': ('quantilesBFloat16Weighted', None), 'exponentialTimeDecayedAvg': ('exponentialTimeDecayedAvg', None), 'kurtSamp': ('kurtSamp', None), 'any': ('any', None), 'theilsU': ('theilsU', None), 'argMax': ('argMax', None), 'quantilesTimingWeighted': ('quantilesTimingWeighted', None), 'groupArraySample': ('groupArraySample', None), 'sumCount': ('sumCount', None), 'sumWithOverflow': ('sumWithOverflow', None), 'uniqTheta': ('uniqTheta', None), 'groupArrayMovingSum': ('groupArrayMovingSum', None), 'corr': ('corr', None), 'quantilesBFloat16': ('quantilesBFloat16', None), 'min': ('min', None), 'groupArray': ('groupArray', None), 'sequenceCount': ('sequenceCount', None), 'kolmogorovSmirnovTest': ('kolmogorovSmirnovTest', None), 'deltaSum': ('deltaSum', None), 'meanZTest': ('meanZTest', None), 'anyHeavy': ('anyHeavy', None), 'count': ('count', None), 'quantilesExactLow': ('quantilesExactLow', None), 'groupBitmapAnd': ('groupBitmapAnd', None), 'quantileDeterministic': ('quantileDeterministic', None), 'quantilesExact': ('quantilesExact', None), 'covarPop': ('covarPop', None), 'studentTTest': ('studentTTest', None), 'first_value': ('first_value', None), 'exponentialMovingAverage': ('exponentialMovingAverage', None), 'simpleLinearRegression': ('simpleLinearRegression', None), 'stochasticLogisticRegression': ('stochasticLogisticRegression', None), 'quantilesInterpolatedWeighted': ('quantilesInterpolatedWeighted', None), 'quantilesExactHigh': ('quantilesExactHigh', None), 'groupArrayInsertAt': ('groupArrayInsertAt', None), 'quantileBFloat16': ('quantileBFloat16', None), 'quantileTDigestWeighted': ('quantileTDigestWeighted', None), 'covarSamp': ('covarSamp', None), 'intervalLengthSum': ('intervalLengthSum', None), 'median': ('median', None), 'quantileExactWeighted': ('quantileExactWeighted', None), 'quantilesTDigest': ('quantilesTDigest', None), 'groupBitmapXor': ('groupBitmapXor', None), 'quantileExact': ('quantileExact', None), 'maxIntersectionsPosition': ('maxIntersectionsPosition', None), 'uniqUpTo': ('uniqUpTo', None), 'retention': ('retention', None), 'quantilesTiming': ('quantilesTiming', None), 'windowFunnel': ('windowFunnel', None), 'stddevSamp': ('stddevSamp', None), 'quantileExactHigh': ('quantileExactHigh', None), 'entropy': ('entropy', None), 'boundingRatio': ('boundingRatio', None), 'quantileTimingWeighted': ('quantileTimingWeighted', None), 'mannWhitneyUTest': ('mannWhitneyUTest', None), 'cramersV': ('cramersV', None), 'cramersVBiasCorrected': ('cramersVBiasCorrected', None), 'deltaSumTimestamp': ('deltaSumTimestamp', None), 'stochasticLinearRegression': ('stochasticLinearRegression', None), 'sparkBar': ('sparkBar', None), 'contingency': ('contingency', None), 'groupBitmapOr': ('groupBitmapOr', None), 'approx_top_sum': ('approx_top_sum', None), 'avg': ('avg', None), 'stddevPop': ('stddevPop', None), 'quantilesTDigestWeighted': ('quantilesTDigestWeighted', None), 'quantile': ('quantile', None), 'avgWeighted': ('avgWeighted', None), 'groupConcat': ('groupConcat', None), 'quantileExactInclusive': ('quantileExactInclusive', None), 'maxIntersections': ('maxIntersections', None), 'topKWeighted': ('topKWeighted', None), 'skewPop': ('skewPop', None), 'last_value': ('last_value', None), 'kurtPop': ('kurtPop', None), 'sumKahan': ('sumKahan', None), 'histogram': ('histogram', None), 'categoricalInformationValue': ('categoricalInformationValue', None), 'quantilesExactExclusive': ('quantilesExactExclusive', None), 'quantileExactLow': ('quantileExactLow', None), 'quantileTiming': ('quantileTiming', None), 'max': ('max', None), 'groupArrayLast': ('groupArrayLast', None), 'groupArrayMovingAvg': ('groupArrayMovingAvg', None), 'anyLast': ('anyLast', None), 'uniqExact': ('uniqExact', None), 'skewSamp': ('skewSamp', None), 'sequenceNextNode': ('sequenceNextNode', None), 'uniqCombined64': ('uniqCombined64', None), 'groupBitXor': ('groupBitXor', None), 'quantilesExactWeighted': ('quantilesExactWeighted', None), 'sum': ('sum', None), 'largestTriangleThreeBuckets': ('largestTriangleThreeBuckets', None), 'varPop': ('varPop', None), 'uniqHLL12': ('uniqHLL12', None), 'uniq': ('uniq', None), 'varSamp': ('varSamp', None), 'topK': ('topK', None), 'quantilesDeterministic': ('quantilesDeterministic', None), 'quantileTDigest': ('quantileTDigest', None), 'argMin': ('argMin', 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 =
{'PERIOD', 'INDEX', 'FOREIGN KEY', 'TRUNCATE', 'BUCKET', 'LIKE', 'PRIMARY KEY', 'UNIQUE', 'EXCLUDE'}
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