Edit on GitHub

sqlglot.parsers.clickhouse

   1from __future__ import annotations
   2
   3import typing as t
   4
   5from collections import deque
   6
   7from sqlglot import exp, parser
   8from sqlglot.dialects.dialect import (
   9    build_date_delta,
  10    build_formatted_time,
  11    build_json_extract_path,
  12    build_like,
  13)
  14from sqlglot.helper import seq_get
  15from sqlglot.tokens import Token, TokenType
  16from builtins import type as Type
  17
  18if t.TYPE_CHECKING:
  19    from sqlglot._typing import E
  20    from collections.abc import Mapping, Sequence, Collection
  21
  22
  23def _build_datetime_format(
  24    expr_type: Type[E],
  25) -> t.Callable:
  26    def _builder(args: list, dialect: t.Any) -> E:
  27        expr = build_formatted_time(expr_type)(args, dialect)
  28
  29        timezone = seq_get(args, 2)
  30        if timezone:
  31            expr.set("zone", timezone)
  32
  33        return expr
  34
  35    return _builder
  36
  37
  38def _build_count_if(args: list) -> exp.CountIf | exp.CombinedAggFunc:
  39    if len(args) == 1:
  40        return exp.CountIf(this=seq_get(args, 0))
  41
  42    return exp.CombinedAggFunc(this="countIf", expressions=args)
  43
  44
  45def _build_str_to_date(args: list) -> exp.Cast | exp.Anonymous:
  46    if len(args) == 3:
  47        return exp.Anonymous(this="STR_TO_DATE", expressions=args)
  48
  49    strtodate = exp.StrToDate.from_arg_list(args)
  50    return exp.cast(strtodate, exp.DType.DATETIME.into_expr())
  51
  52
  53def _build_timestamp_trunc(unit: str) -> t.Callable[[list], exp.TimestampTrunc]:
  54    return lambda args: exp.TimestampTrunc(
  55        this=seq_get(args, 0), unit=exp.var(unit), zone=seq_get(args, 1)
  56    )
  57
  58
  59def _build_split_by_char(args: list) -> exp.Split | exp.Anonymous:
  60    sep = seq_get(args, 0)
  61    if isinstance(sep, exp.Literal):
  62        sep_value = sep.to_py()
  63        if isinstance(sep_value, str) and len(sep_value.encode("utf-8")) == 1:
  64            return _build_split(exp.Split)(args)
  65
  66    return exp.Anonymous(this="splitByChar", expressions=args)
  67
  68
  69def _build_split(exp_class: Type[E]) -> t.Callable[[list], E]:
  70    return lambda args: exp_class(
  71        this=seq_get(args, 1), expression=seq_get(args, 0), limit=seq_get(args, 2)
  72    )
  73
  74
  75def _build_array_lambda_func(
  76    exp_class: Type[E], name: str
  77) -> t.Callable[[list], E | exp.Anonymous]:
  78    def _builder(args: list) -> E | exp.Anonymous:
  79        # Other dialects can't express arrayMap((x, y) -> x + y, arr1, arr2), which
  80        # iterates over multiple arrays at once, so we keep it as an anonymous function
  81        if len(args) > 2:
  82            return exp.Anonymous(this=name, expressions=args)
  83
  84        return exp_class(this=seq_get(args, 1), expression=seq_get(args, 0))
  85
  86    return _builder
  87
  88
  89# Skip the 'week' unit since ClickHouse's toStartOfWeek
  90# uses an extra mode argument to specify the first day of the week
  91TIMESTAMP_TRUNC_UNITS = {
  92    "MICROSECOND",
  93    "MILLISECOND",
  94    "SECOND",
  95    "MINUTE",
  96    "HOUR",
  97    "DAY",
  98    "MONTH",
  99    "QUARTER",
 100    "YEAR",
 101}
 102
 103
 104_AGG_FUNCTIONS = {
 105    "count",
 106    "min",
 107    "max",
 108    "sum",
 109    "avg",
 110    "any",
 111    "stddevPop",
 112    "stddevSamp",
 113    "varPop",
 114    "varSamp",
 115    "corr",
 116    "covarPop",
 117    "covarSamp",
 118    "entropy",
 119    "exponentialMovingAverage",
 120    "intervalLengthSum",
 121    "kolmogorovSmirnovTest",
 122    "mannWhitneyUTest",
 123    "median",
 124    "rankCorr",
 125    "sumKahan",
 126    "studentTTest",
 127    "welchTTest",
 128    "anyHeavy",
 129    "anyLast",
 130    "boundingRatio",
 131    "first_value",
 132    "last_value",
 133    "argMin",
 134    "argMax",
 135    "avgWeighted",
 136    "topK",
 137    "approx_top_sum",
 138    "topKWeighted",
 139    "deltaSum",
 140    "deltaSumTimestamp",
 141    "groupArray",
 142    "groupArrayLast",
 143    "groupConcat",
 144    "groupUniqArray",
 145    "groupArrayInsertAt",
 146    "groupArrayMovingAvg",
 147    "groupArrayMovingSum",
 148    "groupArraySample",
 149    "groupBitAnd",
 150    "groupBitOr",
 151    "groupBitXor",
 152    "groupBitmap",
 153    "groupBitmapAnd",
 154    "groupBitmapOr",
 155    "groupBitmapXor",
 156    "sumWithOverflow",
 157    "sumMap",
 158    "minMap",
 159    "maxMap",
 160    "skewSamp",
 161    "skewPop",
 162    "kurtSamp",
 163    "kurtPop",
 164    "uniq",
 165    "uniqExact",
 166    "uniqCombined",
 167    "uniqCombined64",
 168    "uniqHLL12",
 169    "uniqTheta",
 170    "quantile",
 171    "quantiles",
 172    "quantileExact",
 173    "quantileExactInclusive",
 174    "quantilesExact",
 175    "quantilesExactExclusive",
 176    "quantileExactLow",
 177    "quantilesExactLow",
 178    "quantileExactHigh",
 179    "quantilesExactHigh",
 180    "quantileExactWeighted",
 181    "quantilesExactWeighted",
 182    "quantileTiming",
 183    "quantilesTiming",
 184    "quantileTimingWeighted",
 185    "quantilesTimingWeighted",
 186    "quantileDeterministic",
 187    "quantilesDeterministic",
 188    "quantileTDigest",
 189    "quantilesTDigest",
 190    "quantileTDigestWeighted",
 191    "quantilesTDigestWeighted",
 192    "quantileBFloat16",
 193    "quantilesBFloat16",
 194    "quantileBFloat16Weighted",
 195    "quantilesBFloat16Weighted",
 196    "simpleLinearRegression",
 197    "stochasticLinearRegression",
 198    "stochasticLogisticRegression",
 199    "categoricalInformationValue",
 200    "contingency",
 201    "cramersV",
 202    "cramersVBiasCorrected",
 203    "theilsU",
 204    "maxIntersections",
 205    "maxIntersectionsPosition",
 206    "meanZTest",
 207    "quantileInterpolatedWeighted",
 208    "quantilesInterpolatedWeighted",
 209    "quantileGK",
 210    "quantilesGK",
 211    "sparkBar",
 212    "sumCount",
 213    "largestTriangleThreeBuckets",
 214    "histogram",
 215    "sequenceMatch",
 216    "sequenceCount",
 217    "windowFunnel",
 218    "retention",
 219    "uniqUpTo",
 220    "sequenceNextNode",
 221    "exponentialTimeDecayedAvg",
 222}
 223
 224# Sorted longest-first so that compound suffixes (e.g. "SimpleState") are matched
 225# before their sub-suffixes (e.g. "State") when resolving multi-combinator functions.
 226_AGG_FUNCTIONS_SUFFIXES: list[str] = sorted(
 227    [
 228        "If",
 229        "Array",
 230        "ArrayIf",
 231        "Map",
 232        "SimpleState",
 233        "State",
 234        "Merge",
 235        "MergeState",
 236        "ForEach",
 237        "Distinct",
 238        "OrDefault",
 239        "OrNull",
 240        "Resample",
 241        "ArgMin",
 242        "ArgMax",
 243    ],
 244    key=len,
 245    reverse=True,
 246)
 247
 248# Memoized examples of all 0- and 1-suffix aggregate function names
 249_AGG_FUNC_MAPPING: Mapping[str, tuple[str, str | None]] = {
 250    f"{f}{sfx}": (f, sfx) for sfx in _AGG_FUNCTIONS_SUFFIXES for f in _AGG_FUNCTIONS
 251} | {f: (f, None) for f in _AGG_FUNCTIONS}
 252
 253
 254class ClickHouseParser(parser.Parser):
 255    # Tested in ClickHouse's playground, it seems that the following two queries do the same thing
 256    # * select x from t1 union all select x from t2 limit 1;
 257    # * select x from t1 union all (select x from t2 limit 1);
 258    MODIFIERS_ATTACHED_TO_SET_OP = False
 259    INTERVAL_SPANS = False
 260    OPTIONAL_ALIAS_TOKEN_CTE = False
 261    JOINS_HAVE_EQUAL_PRECEDENCE = True
 262
 263    FUNCTIONS = {
 264        **{
 265            k: v
 266            for k, v in parser.Parser.FUNCTIONS.items()
 267            if k not in ("TRANSFORM", "APPROX_TOP_SUM")
 268        },
 269        **{
 270            regexp_extract: lambda args: exp.RegexpExtract(
 271                this=seq_get(args, 0),
 272                expression=seq_get(args, 1),
 273                group=seq_get(args, 2),
 274            )
 275            for regexp_extract in ("REGEXPEXTRACT", "REGEXP_EXTRACT", "REGEXP_SUBSTR")
 276        },
 277        **{f"TOSTARTOF{unit}": _build_timestamp_trunc(unit=unit) for unit in TIMESTAMP_TRUNC_UNITS},
 278        "ANY": exp.AnyValue.from_arg_list,
 279        "ARRAYCOMPACT": exp.ArrayCompact.from_arg_list,
 280        "ARRAYCONCAT": exp.ArrayConcat.from_arg_list,
 281        "ARRAYDISTINCT": exp.ArrayDistinct.from_arg_list,
 282        "ARRAYEXCEPT": exp.ArrayExcept.from_arg_list,
 283        "ARRAYSUM": exp.ArraySum.from_arg_list,
 284        "ARRAYMAX": exp.ArrayMax.from_arg_list,
 285        "ARRAYMIN": exp.ArrayMin.from_arg_list,
 286        "ARRAYREVERSE": exp.ArrayReverse.from_arg_list,
 287        "ARRAYSLICE": exp.ArraySlice.from_arg_list,
 288        "ARRAYFILTER": _build_array_lambda_func(exp.ArrayFilter, "arrayFilter"),
 289        "ARRAYMAP": _build_array_lambda_func(exp.Transform, "arrayMap"),
 290        "CURRENTDATABASE": exp.CurrentDatabase.from_arg_list,
 291        "CURRENTSCHEMAS": exp.CurrentSchemas.from_arg_list,
 292        "COUNTIF": _build_count_if,
 293        "CITYHASH64": exp.CityHash64.from_arg_list,
 294        "COSINEDISTANCE": exp.CosineDistance.from_arg_list,
 295        "VERSION": exp.CurrentVersion.from_arg_list,
 296        "DATE_ADD": build_date_delta(exp.DateAdd, default_unit=None),
 297        "DATEADD": build_date_delta(exp.DateAdd, default_unit=None),
 298        "DATE_DIFF": build_date_delta(exp.DateDiff, default_unit=None, supports_timezone=True),
 299        "DATEDIFF": build_date_delta(exp.DateDiff, default_unit=None, supports_timezone=True),
 300        "DATE_FORMAT": _build_datetime_format(exp.TimeToStr),
 301        "DATE_SUB": build_date_delta(exp.DateSub, default_unit=None),
 302        "DATESUB": build_date_delta(exp.DateSub, default_unit=None),
 303        "DATETRUNC": exp.DateTrunc.from_arg_list,
 304        "FORMATDATETIME": _build_datetime_format(exp.TimeToStr),
 305        "HAS": exp.ArrayContains.from_arg_list,
 306        "ILIKE": build_like(exp.ILike),
 307        "JSONEXTRACTSTRING": build_json_extract_path(
 308            exp.JSONExtractScalar, zero_based_indexing=False
 309        ),
 310        "LENGTH": lambda args: exp.Length(this=seq_get(args, 0), binary=True),
 311        "LIKE": build_like(exp.Like),
 312        "L2Distance": exp.EuclideanDistance.from_arg_list,
 313        "MAP": parser.build_var_map,
 314        "MATCH": exp.RegexpLike.from_arg_list,
 315        "NOTLIKE": build_like(exp.Like, not_like=True),
 316        "PARSEDATETIME": _build_datetime_format(exp.ParseDatetime),
 317        "RANDCANONICAL": exp.Rand.from_arg_list,
 318        "STR_TO_DATE": _build_str_to_date,
 319        "TIMESTAMP_SUB": build_date_delta(exp.TimestampSub, default_unit=None),
 320        "TIMESTAMPSUB": build_date_delta(exp.TimestampSub, default_unit=None),
 321        "TIMESTAMP_ADD": build_date_delta(exp.TimestampAdd, default_unit=None),
 322        "TIMESTAMPADD": build_date_delta(exp.TimestampAdd, default_unit=None),
 323        "TOMONDAY": _build_timestamp_trunc("WEEK"),
 324        "UNIQ": exp.ApproxDistinct.from_arg_list,
 325        "MD5": exp.MD5Digest.from_arg_list,
 326        "SHA256": lambda args: exp.SHA2(this=seq_get(args, 0), length=exp.Literal.number(256)),
 327        "SHA512": lambda args: exp.SHA2(this=seq_get(args, 0), length=exp.Literal.number(512)),
 328        "SPLITBYCHAR": _build_split_by_char,
 329        "SPLITBYREGEXP": _build_split(exp.RegexpSplit),
 330        "SPLITBYSTRING": _build_split(exp.Split),
 331        "SUBSTRINGINDEX": exp.SubstringIndex.from_arg_list,
 332        "TOTYPENAME": exp.Typeof.from_arg_list,
 333        "TRIMBOTH": exp.Trim.from_arg_list,
 334        "TRIMLEFT": parser.build_trim,
 335        "TRIMRIGHT": lambda args: parser.build_trim(args, is_left=False),
 336        "EDITDISTANCE": exp.Levenshtein.from_arg_list,
 337        "JAROWINKLERSIMILARITY": exp.JarowinklerSimilarity.from_arg_list,
 338        "LEVENSHTEINDISTANCE": exp.Levenshtein.from_arg_list,
 339        "UTCTIMESTAMP": exp.UtcTimestamp.from_arg_list,
 340    }
 341
 342    AGG_FUNCTIONS: t.ClassVar = _AGG_FUNCTIONS
 343    AGG_FUNCTIONS_SUFFIXES: t.ClassVar = _AGG_FUNCTIONS_SUFFIXES
 344
 345    FUNC_TOKENS = {
 346        *parser.Parser.FUNC_TOKENS,
 347        TokenType.AND,
 348        TokenType.FILE,
 349        TokenType.OR,
 350        TokenType.SET,
 351        TokenType.VIEW,
 352    }
 353
 354    RESERVED_TOKENS = parser.Parser.RESERVED_TOKENS - {TokenType.SELECT}
 355
 356    ID_VAR_TOKENS = {
 357        *parser.Parser.ID_VAR_TOKENS,
 358        TokenType.LIKE,
 359    }
 360
 361    AGG_FUNC_MAPPING: t.ClassVar = _AGG_FUNC_MAPPING
 362
 363    @classmethod
 364    def _resolve_clickhouse_agg(cls, name: str) -> tuple[str, Sequence[str]] | None:
 365        # ClickHouse allows chaining multiple combinators on aggregate functions.
 366        # See https://clickhouse.com/docs/sql-reference/aggregate-functions/combinators
 367        # N.B. this resolution allows any suffix stack, including ones that ClickHouse rejects
 368        # syntactically such as sumMergeMerge (due to repeated adjacent suffixes)
 369
 370        # Until we are able to identify a 1- or 0-suffix aggregate function by name,
 371        # repeatedly strip and queue suffixes (checking longer suffixes first, see comment on
 372        # AGG_FUNCTIONS_SUFFIXES_SORTED). This loop only runs for 2 or more suffixes,
 373        # as AGG_FUNC_MAPPING memoizes all 0- and 1-suffix
 374        accumulated_suffixes: deque[str] = deque()
 375        while (parts := _AGG_FUNC_MAPPING.get(name)) is None:
 376            for suffix in _AGG_FUNCTIONS_SUFFIXES:
 377                if name.endswith(suffix) and len(name) != len(suffix):
 378                    accumulated_suffixes.appendleft(suffix)
 379                    name = name[: -len(suffix)]
 380                    break
 381            else:
 382                return None
 383
 384        # We now have a 0- or 1-suffix aggregate
 385        agg_func_name, inner_suffix = parts
 386        if inner_suffix:
 387            # this is a 1-suffix aggregate (either naturally or via repeated suffix
 388            # stripping). prepend the innermost suffix.
 389            accumulated_suffixes.appendleft(inner_suffix)
 390
 391        return (agg_func_name, accumulated_suffixes)
 392
 393    FUNCTION_PARSERS = {
 394        **{k: v for k, v in parser.Parser.FUNCTION_PARSERS.items() if k != "MATCH"},
 395        "ARRAYJOIN": lambda self: self.expression(exp.Explode(this=self._parse_expression())),
 396        "GROUPCONCAT": lambda self: self._parse_group_concat(),
 397        "QUANTILE": lambda self: self._parse_quantile(),
 398        "MEDIAN": lambda self: self._parse_quantile(),
 399        "COLUMNS": lambda self: self._parse_columns(),
 400        "TUPLE": lambda self: exp.Struct.from_arg_list(self._parse_function_args(alias=True)),
 401        "AND": lambda self: self._parse_connector_function(exp.and_),
 402        "OR": lambda self: self._parse_connector_function(exp.or_),
 403        "XOR": lambda self: exp.xor(*self._parse_function_args(alias=False)),
 404        "VIEW": lambda self: self.expression(
 405            exp.Anonymous(this="view", expressions=[self._parse_select()])
 406        ),
 407    }
 408
 409    PROPERTY_PARSERS = {
 410        **{k: v for k, v in parser.Parser.PROPERTY_PARSERS.items() if k != "DYNAMIC"},
 411        "ENGINE": lambda self: self._parse_engine_property(),
 412        "REFRESH": lambda self: self._parse_auto_refresh_property(),
 413        "UUID": lambda self: self.expression(exp.UuidProperty(this=self._parse_string())),
 414    }
 415
 416    NO_PAREN_FUNCTION_PARSERS = {
 417        k: v for k, v in parser.Parser.NO_PAREN_FUNCTION_PARSERS.items() if k != "ANY"
 418    }
 419
 420    NO_PAREN_FUNCTIONS = {
 421        k: v
 422        for k, v in parser.Parser.NO_PAREN_FUNCTIONS.items()
 423        if k != TokenType.CURRENT_TIMESTAMP
 424    }
 425
 426    RANGE_PARSERS = {
 427        **parser.Parser.RANGE_PARSERS,
 428        TokenType.GLOBAL: lambda self, this: self._parse_global_in(this),
 429    }
 430
 431    COLUMN_OPERATORS = {
 432        **{k: v for k, v in parser.Parser.COLUMN_OPERATORS.items() if k != TokenType.PLACEHOLDER},
 433        TokenType.DOTCARET: lambda self, this, field: self.expression(
 434            exp.NestedJSONSelect(this=this, expression=field)
 435        ),
 436    }
 437
 438    JOIN_KINDS = {
 439        *parser.Parser.JOIN_KINDS,
 440        TokenType.ALL,
 441        TokenType.ANY,
 442        TokenType.ASOF,
 443        TokenType.ARRAY,
 444    }
 445
 446    TABLE_ALIAS_TOKENS = parser.Parser.TABLE_ALIAS_TOKENS - {
 447        TokenType.ALL,
 448        TokenType.ANY,
 449        TokenType.ARRAY,
 450        TokenType.ASOF,
 451        TokenType.FINAL,
 452        TokenType.FORMAT,
 453        TokenType.SETTINGS,
 454    }
 455
 456    ALIAS_TOKENS = parser.Parser.ALIAS_TOKENS - {
 457        TokenType.FORMAT,
 458        TokenType.SETTINGS,
 459    }
 460
 461    LOG_DEFAULTS_TO_LN = True
 462
 463    QUERY_MODIFIER_PARSERS = {
 464        **parser.Parser.QUERY_MODIFIER_PARSERS,
 465        TokenType.SETTINGS: lambda self: (
 466            "settings",
 467            self._advance() or self._parse_csv(self._parse_assignment),
 468        ),
 469        TokenType.FORMAT: lambda self: ("format", self._advance() or self._parse_id_var()),
 470    }
 471
 472    CONSTRAINT_PARSERS = {
 473        **parser.Parser.CONSTRAINT_PARSERS,
 474        "INDEX": lambda self: self._parse_index_constraint(),
 475        "CODEC": lambda self: self._parse_compress(),
 476        "ASSUME": lambda self: self._parse_assume_constraint(),
 477    }
 478
 479    ALTER_PARSERS = {
 480        **parser.Parser.ALTER_PARSERS,
 481        "MODIFY": lambda self: self._parse_alter_table_alter(),
 482        "REPLACE": lambda self: self._parse_alter_table_replace(),
 483    }
 484
 485    SCHEMA_UNNAMED_CONSTRAINTS = {
 486        *parser.Parser.SCHEMA_UNNAMED_CONSTRAINTS,
 487        "INDEX",
 488    } - {"CHECK"}
 489
 490    PLACEHOLDER_PARSERS = {
 491        **parser.Parser.PLACEHOLDER_PARSERS,
 492        TokenType.L_BRACE: lambda self: self._parse_query_parameter(),
 493    }
 494
 495    STATEMENT_PARSERS = {
 496        **parser.Parser.STATEMENT_PARSERS,
 497        TokenType.DETACH: lambda self: self._parse_detach(),
 498    }
 499
 500    def _parse_wrapped_select_or_assignment(self) -> exp.Expr | None:
 501        return self._parse_wrapped(
 502            lambda: self._parse_select() or self._parse_assignment(), optional=True
 503        )
 504
 505    def _parse_check_constraint(self) -> exp.CheckColumnConstraint | None:
 506        return self.expression(
 507            exp.CheckColumnConstraint(this=self._parse_wrapped_select_or_assignment())
 508        )
 509
 510    def _parse_assume_constraint(self) -> exp.AssumeColumnConstraint | None:
 511        return self.expression(
 512            exp.AssumeColumnConstraint(this=self._parse_wrapped_select_or_assignment())
 513        )
 514
 515    def _parse_engine_property(self) -> exp.EngineProperty:
 516        self._match(TokenType.EQ)
 517        return self.expression(
 518            exp.EngineProperty(this=self._parse_field(any_token=True, anonymous_func=True))
 519        )
 520
 521    # https://clickhouse.com/docs/en/sql-reference/statements/create/function
 522    def _parse_user_defined_function_expression(self) -> exp.Expr | None:
 523        return self._parse_lambda()
 524
 525    def _parse_types(
 526        self,
 527        check_func: bool = False,
 528        schema: bool = False,
 529        allow_identifiers: bool = True,
 530        with_collation: bool = False,
 531    ) -> exp.Expr | None:
 532        dtype = super()._parse_types(
 533            check_func=check_func,
 534            schema=schema,
 535            allow_identifiers=allow_identifiers,
 536            with_collation=with_collation,
 537        )
 538        if isinstance(dtype, exp.DataType) and dtype.args.get("nullable") is not True:
 539            # Mark every type as non-nullable which is ClickHouse's default, unless it's
 540            # already marked as nullable. This marker helps us transpile types from other
 541            # dialects to ClickHouse, so that we can e.g. produce `CAST(x AS Nullable(String))`
 542            # from `CAST(x AS TEXT)`. If there is a `NULL` value in `x`, the former would
 543            # fail in ClickHouse without the `Nullable` type constructor.
 544            dtype.set("nullable", False)
 545
 546        return dtype
 547
 548    def _parse_extract(self) -> exp.Extract | exp.Anonymous:
 549        index = self._index
 550        this = self._parse_bitwise()
 551        if self._match(TokenType.FROM):
 552            self._retreat(index)
 553            return super()._parse_extract()
 554
 555        # We return Anonymous here because extract and regexpExtract have different semantics,
 556        # so parsing extract(foo, bar) into RegexpExtract can potentially break queries. E.g.,
 557        # `extract('foobar', 'b')` works, but ClickHouse crashes for `regexpExtract('foobar', 'b')`.
 558        #
 559        # TODO: can we somehow convert the former into an equivalent `regexpExtract` call?
 560        self._match(TokenType.COMMA)
 561        return self.expression(
 562            exp.Anonymous(this="extract", expressions=[this, self._parse_bitwise()])
 563        )
 564
 565    def _parse_assignment(self) -> exp.Expr | None:
 566        this = super()._parse_assignment()
 567
 568        if self._match(TokenType.PLACEHOLDER):
 569            return self.expression(
 570                exp.If(
 571                    this=this,
 572                    true=self._parse_assignment(),
 573                    false=self._match(TokenType.COLON) and self._parse_assignment(),
 574                )
 575            )
 576
 577        return this
 578
 579    def _parse_query_parameter(self) -> exp.Expr | None:
 580        """
 581        Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier}
 582        https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters
 583        """
 584        index = self._index
 585
 586        this = self._parse_id_var()
 587        self._match(TokenType.COLON)
 588        kind = self._parse_types(check_func=False, allow_identifiers=False) or (
 589            self._match_text_seq("IDENTIFIER") and "Identifier"
 590        )
 591
 592        if not kind:
 593            self._retreat(index)
 594            return None
 595        elif not self._match(TokenType.R_BRACE):
 596            self.raise_error("Expecting }")
 597
 598        if isinstance(this, exp.Identifier) and not this.quoted:
 599            this = exp.var(this.name)
 600
 601        return self.expression(exp.Placeholder(this=this, kind=kind))
 602
 603    def _parse_bracket(self, this: exp.Expr | None = None) -> exp.Expr | None:
 604        if this:
 605            bracket_json_type = None
 606
 607            while self._match_pair(TokenType.L_BRACKET, TokenType.R_BRACKET):
 608                bracket_json_type = exp.DataType(
 609                    this=exp.DType.ARRAY,
 610                    expressions=[
 611                        bracket_json_type
 612                        or exp.DType.JSON.into_expr(dialect=self.dialect, nullable=False)
 613                    ],
 614                    nested=True,
 615                )
 616
 617            if bracket_json_type:
 618                return self.expression(exp.JSONCast(this=this, to=bracket_json_type))
 619
 620        l_brace = self._match(TokenType.L_BRACE, advance=False)
 621        bracket = super()._parse_bracket(this)
 622
 623        if l_brace and isinstance(bracket, exp.Struct):
 624            varmap = exp.VarMap(keys=exp.Array(), values=exp.Array())
 625            for expression in bracket.expressions:
 626                if not isinstance(expression, exp.PropertyEQ):
 627                    break
 628
 629                varmap.args["keys"].append("expressions", exp.Literal.string(expression.name))
 630                varmap.args["values"].append("expressions", expression.expression)
 631
 632            return varmap
 633
 634        return bracket
 635
 636    def _parse_global_in(self, this: exp.Expr | None) -> exp.Not | exp.In | None:
 637        index = self._index - 1
 638        is_negated = self._match(TokenType.NOT)
 639        if not self._match(TokenType.IN):
 640            self._retreat(index)
 641            return None
 642
 643        in_expr = self._parse_in(this)
 644        in_expr.set("is_global", True)
 645        return self.expression(exp.Not(this=in_expr)) if is_negated else in_expr
 646
 647    def _parse_table(
 648        self,
 649        schema: bool = False,
 650        joins: bool = False,
 651        alias_tokens: Collection[TokenType] | None = None,
 652        parse_bracket: bool = False,
 653        is_db_reference: bool = False,
 654        parse_partition: bool = False,
 655        consume_pipe: bool = False,
 656    ) -> exp.Expr | None:
 657        this = super()._parse_table(
 658            schema=schema,
 659            joins=joins,
 660            alias_tokens=alias_tokens,
 661            parse_bracket=parse_bracket,
 662            is_db_reference=is_db_reference,
 663        )
 664
 665        if isinstance(this, exp.Table):
 666            inner = this.this
 667            alias = this.args.get("alias")
 668
 669            if isinstance(inner, exp.GenerateSeries) and alias and not alias.columns:
 670                alias.set("columns", [exp.to_identifier("generate_series")])
 671
 672        if self._match(TokenType.FINAL):
 673            this = self.expression(exp.Final(this=this))
 674
 675        return this
 676
 677    def _parse_position(self, haystack_first: bool = False) -> exp.StrPosition:
 678        return super()._parse_position(haystack_first=True)
 679
 680    # https://clickhouse.com/docs/en/sql-reference/statements/select/with/
 681    def _parse_cte(self) -> exp.CTE | exp.FunctionSpecification | None:
 682        # WITH <identifier> AS <subquery expression>
 683        cte: exp.CTE | exp.FunctionSpecification | None = self._try_parse(super()._parse_cte)
 684
 685        if not cte:
 686            # WITH <expression> AS <identifier>
 687            cte = self.expression(
 688                exp.CTE(this=self._parse_assignment(), alias=self._parse_table_alias(), scalar=True)
 689            )
 690
 691        return cte
 692
 693    def _parse_join_parts(
 694        self,
 695    ) -> tuple[Token | None, Token | None, Token | None]:
 696        is_global = self._prev if self._match(TokenType.GLOBAL) else None
 697
 698        kind_pre = self._prev if self._match_set(self.JOIN_KINDS) else None
 699        side = self._prev if self._match_set(self.JOIN_SIDES) else None
 700        kind = self._prev if self._match_set(self.JOIN_KINDS) else None
 701
 702        return is_global, side or kind, kind_pre or kind
 703
 704    def _parse_join(
 705        self,
 706        skip_join_token: bool = False,
 707        parse_bracket: bool = False,
 708        alias_tokens: t.Collection[TokenType] | None = None,
 709    ) -> exp.Join | None:
 710        join = super()._parse_join(
 711            skip_join_token=skip_join_token, parse_bracket=True, alias_tokens=alias_tokens
 712        )
 713        if join:
 714            method = join.args.get("method")
 715            join.set("method", None)
 716            join.set("global_", method)
 717
 718            # tbl ARRAY JOIN arr <-- this should be a `Column` reference, not a `Table`
 719            # https://clickhouse.com/docs/en/sql-reference/statements/select/array-join
 720            if join.kind == "ARRAY":
 721                for table in join.find_all(exp.Table):
 722                    table.replace(table.to_column())
 723
 724        return join
 725
 726    def _parse_function(
 727        self,
 728        functions: dict[str, t.Callable] | None = None,
 729        anonymous: bool = False,
 730        optional_parens: bool = True,
 731        any_token: bool = False,
 732    ) -> exp.Expr | None:
 733        expr = super()._parse_function(
 734            functions=functions,
 735            anonymous=anonymous,
 736            optional_parens=optional_parens,
 737            any_token=any_token,
 738        )
 739
 740        func = expr.this if isinstance(expr, exp.Window) else expr
 741
 742        # Aggregate functions can be split in 2 parts: <func_name><suffix[es]>
 743        parts = self._resolve_clickhouse_agg(func.name) if isinstance(func, exp.Anonymous) else None
 744
 745        if parts:
 746            anon_func: exp.Anonymous = t.cast(exp.Anonymous, func)
 747            params = self._parse_func_params(anon_func)
 748
 749            if len(parts[1]) > 0:
 750                exp_class: Type[exp.Expr] = (
 751                    exp.CombinedParameterizedAgg if params else exp.CombinedAggFunc
 752                )
 753            else:
 754                exp_class = exp.ParameterizedAgg if params else exp.AnonymousAggFunc
 755
 756            instance = exp_class(this=anon_func.this, expressions=anon_func.expressions)
 757            if params:
 758                instance.set("params", params)
 759            func = self.expression(instance)
 760
 761            if isinstance(expr, exp.Window):
 762                # The window's func was parsed as Anonymous in base parser, fix its
 763                # type to be ClickHouse style CombinedAnonymousAggFunc / AnonymousAggFunc
 764                expr.set("this", func)
 765            elif params:
 766                # Params have blocked super()._parse_function() from parsing the following window
 767                # (if that exists) as they're standing between the function call and the window spec
 768                expr = self._parse_window(func)
 769            else:
 770                expr = func
 771
 772        return expr
 773
 774    def _parse_func_params(self, this: exp.Func | None = None) -> list[exp.Expr] | None:
 775        if self._match_pair(TokenType.R_PAREN, TokenType.L_PAREN):
 776            return self._parse_csv(self._parse_lambda)
 777
 778        if self._match(TokenType.L_PAREN):
 779            params = self._parse_csv(self._parse_lambda)
 780            self._match_r_paren(this)
 781            return params
 782
 783        return None
 784
 785    def _parse_group_concat(self) -> exp.GroupConcat:
 786        args = self._parse_csv(self._parse_lambda)
 787        params = self._parse_func_params()
 788
 789        if params:
 790            # groupConcat(sep [, limit])(expr)
 791            separator = seq_get(args, 0)
 792            limit = seq_get(args, 1)
 793            this: exp.Expr | None = seq_get(params, 0)
 794            if limit is not None:
 795                this = exp.Limit(this=this, expression=limit)
 796            return self.expression(exp.GroupConcat(this=this, separator=separator))
 797
 798        # groupConcat(expr)
 799        return self.expression(exp.GroupConcat(this=seq_get(args, 0)))
 800
 801    def _parse_quantile(self) -> exp.Quantile:
 802        this = self._parse_lambda()
 803        params = self._parse_func_params()
 804        if params:
 805            return self.expression(exp.Quantile(this=params[0], quantile=this))
 806        return self.expression(exp.Quantile(this=this, quantile=exp.Literal.number(0.5)))
 807
 808    def _parse_wrapped_id_vars(self, optional: bool = False) -> list[exp.Expr]:
 809        return super()._parse_wrapped_id_vars(optional=True)
 810
 811    def _parse_column_def(
 812        self, this: exp.Expr | None, computed_column: bool = True
 813    ) -> exp.Expr | None:
 814        if self._match(TokenType.DOT):
 815            return exp.Dot(this=this, expression=self._parse_id_var())
 816
 817        return super()._parse_column_def(this, computed_column=computed_column)
 818
 819    def _parse_primary_key(
 820        self,
 821        wrapped_optional: bool = False,
 822        in_props: bool = False,
 823        named_primary_key: bool = False,
 824    ) -> exp.PrimaryKeyColumnConstraint | exp.PrimaryKey:
 825        return super()._parse_primary_key(
 826            wrapped_optional=wrapped_optional or in_props,
 827            in_props=in_props,
 828            named_primary_key=named_primary_key,
 829        )
 830
 831    def _parse_on_property(self) -> exp.Expr | None:
 832        index = self._index
 833        if self._match_text_seq("CLUSTER"):
 834            this = self._parse_string() or self._parse_id_var()
 835            if this:
 836                return self.expression(exp.OnCluster(this=this))
 837            else:
 838                self._retreat(index)
 839        return None
 840
 841    def _parse_auto_refresh_property(self) -> exp.AutoRefreshProperty | None:
 842        index = self._index - 1
 843        cadence = self._prev.text.upper() if self._match_texts(("EVERY", "AFTER")) else None
 844        interval = (
 845            self._parse_interval(require_interval=False, parse_function_unit=False)
 846            if cadence
 847            else None
 848        )
 849
 850        if cadence and not interval:
 851            self._retreat(index)
 852            return None
 853
 854        offset = None
 855        if self._match_text_seq("OFFSET"):
 856            offset = self._parse_interval(require_interval=False, parse_function_unit=False)
 857            if not offset:
 858                self._retreat(index)
 859                return None
 860
 861        randomize = None
 862        if self._match_text_seq("RANDOMIZE", "FOR"):
 863            randomize = self._parse_interval(require_interval=False, parse_function_unit=False)
 864            if not randomize:
 865                self._retreat(index)
 866                return None
 867
 868        dependencies = None
 869        if self._match_text_seq("DEPENDS", "ON"):
 870            dependencies = self._parse_csv(lambda: self._parse_table_parts(schema=True))
 871            if not dependencies:
 872                self._retreat(index)
 873                return None
 874
 875        if not cadence and not dependencies:
 876            self._retreat(index)
 877            return None
 878
 879        settings = self._parse_settings_property() if self._match_text_seq("SETTINGS") else None
 880
 881        return self.expression(
 882            exp.AutoRefreshProperty(
 883                this=interval,
 884                cadence=cadence,
 885                offset=offset,
 886                randomize=randomize,
 887                expressions=dependencies,
 888                settings=settings,
 889                append=self._match_text_seq("APPEND"),
 890            )
 891        )
 892
 893    def _parse_index_constraint(self, kind: str | None = None) -> exp.IndexColumnConstraint:
 894        # INDEX name1 expr TYPE type1(args) GRANULARITY value
 895        this = self._parse_id_var()
 896        expression = self._parse_assignment()
 897
 898        index_type = self._match_text_seq("TYPE") and (self._parse_function() or self._parse_var())
 899
 900        granularity = self._match_text_seq("GRANULARITY") and self._parse_term()
 901
 902        return self.expression(
 903            exp.IndexColumnConstraint(
 904                this=this, expression=expression, index_type=index_type, granularity=granularity
 905            )
 906        )
 907
 908    def _parse_partition(self) -> exp.Partition | None:
 909        # https://clickhouse.com/docs/en/sql-reference/statements/alter/partition#how-to-set-partition-expression
 910        if not self._match(TokenType.PARTITION):
 911            return None
 912
 913        if self._match_text_seq("ID"):
 914            # Corresponds to the PARTITION ID <string_value> syntax
 915            expressions: list[exp.Expr] = [
 916                self.expression(exp.PartitionId(this=self._parse_string()))
 917            ]
 918        else:
 919            expressions = self._parse_expressions()
 920
 921        return self.expression(exp.Partition(expressions=expressions))
 922
 923    def _parse_alter_table_replace(self) -> exp.Expr | None:
 924        partition = self._parse_partition()
 925
 926        if not partition or not self._match(TokenType.FROM):
 927            return None
 928
 929        return self.expression(
 930            exp.ReplacePartition(expression=partition, source=self._parse_table_parts())
 931        )
 932
 933    def _parse_alter_table_alter(self) -> exp.Expr | None:
 934        # MODIFY forms other than MODIFY COLUMN (SQL SECURITY, ORDER BY, TTL, COMMENT, ...)
 935        # are parsed as properties, since ALTER can now reach this path too
 936        if self._prev.text.upper() == "MODIFY" and not self._match(TokenType.COLUMN, advance=False):
 937            if properties := self._parse_properties():
 938                return self.expression(
 939                    exp.AlterModifySqlSecurity(expressions=properties.expressions)
 940                )
 941            return None
 942
 943        # https://clickhouse.com/docs/sql-reference/statements/alter/column#modify-column
 944        alter = super()._parse_alter_table_alter()
 945        return None if self._curr else alter
 946
 947    def _parse_definer(self) -> exp.DefinerProperty | None:
 948        self._match(TokenType.EQ)
 949        if self._match(TokenType.CURRENT_USER):
 950            return exp.DefinerProperty(this=exp.Var(this=self._prev.text.upper()))
 951        return exp.DefinerProperty(this=self._parse_string())
 952
 953    def _parse_projection_def(self) -> exp.ProjectionDef | None:
 954        if not self._match(TokenType.PROJECTION):
 955            return None
 956
 957        return self.expression(
 958            exp.ProjectionDef(
 959                this=self._parse_id_var(), expression=self._parse_wrapped(self._parse_statement)
 960            )
 961        )
 962
 963    def _parse_constraint(self) -> exp.Expr | None:
 964        return super()._parse_constraint() or self._parse_projection_def()
 965
 966    def _parse_alias(self, this: exp.Expr | None, explicit: bool = False) -> exp.Expr | None:
 967        # In clickhouse "SELECT <expr> APPLY(...)" is a query modifier,
 968        # so "APPLY" shouldn't be parsed as <expr>'s alias. However, "SELECT <expr> apply" is a valid alias
 969        if self._match_pair(TokenType.APPLY, TokenType.L_PAREN, advance=False):
 970            return this
 971
 972        return super()._parse_alias(this=this, explicit=explicit)
 973
 974    def _parse_expression(self) -> exp.Expr | None:
 975        this = super()._parse_expression()
 976
 977        # Clickhouse allows "SELECT <expr> [APPLY(func)] [...]]" modifier
 978        while self._match_pair(TokenType.APPLY, TokenType.L_PAREN):
 979            this = exp.Apply(this=this, expression=self._parse_var(any_token=True))
 980            self._match(TokenType.R_PAREN)
 981
 982        return this
 983
 984    def _parse_columns(self) -> exp.Expr:
 985        this: exp.Expr = self.expression(exp.Columns(this=self._parse_lambda()))
 986
 987        while self._next and self._match_text_seq(")", "APPLY", "("):
 988            self._match(TokenType.R_PAREN)
 989            this = exp.Apply(this=this, expression=self._parse_var(any_token=True))
 990        return this
 991
 992    def _parse_value(self, values: bool = True) -> exp.Tuple | None:
 993        value = super()._parse_value(values=values)
 994        if not value:
 995            return None
 996
 997        # In Clickhouse "SELECT * FROM VALUES (1, 2, 3)" generates a table with a single column, in contrast
 998        # to other dialects. For this case, we canonicalize the values into a tuple-of-tuples AST if it's not already one.
 999        # In INSERT INTO statements the same clause actually references multiple columns (opposite semantics),
1000        # but the final result is not altered by the extra parentheses.
1001        # Note: Clickhouse allows VALUES([structure], value, ...) so the branch checks for the last expression
1002        # A single-value tuple is generated as "(x)", which is parsed back into a Paren
1003        # rather than a Tuple, so it's unwrapped here to keep this rewrite idempotent
1004        expressions = value.expressions
1005        if values and not isinstance(expressions[-1], exp.Tuple):
1006            value.set(
1007                "expressions",
1008                [self.expression(exp.Tuple(expressions=[expr.unnest()])) for expr in expressions],
1009            )
1010
1011        return value
1012
1013    def _parse_partitioned_by(self) -> exp.PartitionedByProperty:
1014        # ClickHouse allows custom expressions as partition key
1015        # https://clickhouse.com/docs/engines/table-engines/mergetree-family/custom-partitioning-key
1016        return self.expression(exp.PartitionedByProperty(this=self._parse_assignment()))
1017
1018    def _parse_detach(self) -> exp.Detach:
1019        kind = self._match_set(self.DB_CREATABLES) and self._prev.text.upper()
1020        exists = self._parse_exists()
1021        this = self._parse_table_parts()
1022
1023        return self.expression(
1024            exp.Detach(
1025                this=this,
1026                kind=kind,
1027                exists=exists,
1028                cluster=self._parse_on_property() if self._match(TokenType.ON) else None,
1029                permanent=self._match_text_seq("PERMANENTLY"),
1030                sync=self._match_text_seq("SYNC"),
1031            )
1032        )
TIMESTAMP_TRUNC_UNITS = {'DAY', 'QUARTER', 'YEAR', 'HOUR', 'MINUTE', 'MICROSECOND', 'MONTH', 'MILLISECOND', 'SECOND'}
class ClickHouseParser(sqlglot.parser.Parser):
 255class ClickHouseParser(parser.Parser):
 256    # Tested in ClickHouse's playground, it seems that the following two queries do the same thing
 257    # * select x from t1 union all select x from t2 limit 1;
 258    # * select x from t1 union all (select x from t2 limit 1);
 259    MODIFIERS_ATTACHED_TO_SET_OP = False
 260    INTERVAL_SPANS = False
 261    OPTIONAL_ALIAS_TOKEN_CTE = False
 262    JOINS_HAVE_EQUAL_PRECEDENCE = True
 263
 264    FUNCTIONS = {
 265        **{
 266            k: v
 267            for k, v in parser.Parser.FUNCTIONS.items()
 268            if k not in ("TRANSFORM", "APPROX_TOP_SUM")
 269        },
 270        **{
 271            regexp_extract: lambda args: exp.RegexpExtract(
 272                this=seq_get(args, 0),
 273                expression=seq_get(args, 1),
 274                group=seq_get(args, 2),
 275            )
 276            for regexp_extract in ("REGEXPEXTRACT", "REGEXP_EXTRACT", "REGEXP_SUBSTR")
 277        },
 278        **{f"TOSTARTOF{unit}": _build_timestamp_trunc(unit=unit) for unit in TIMESTAMP_TRUNC_UNITS},
 279        "ANY": exp.AnyValue.from_arg_list,
 280        "ARRAYCOMPACT": exp.ArrayCompact.from_arg_list,
 281        "ARRAYCONCAT": exp.ArrayConcat.from_arg_list,
 282        "ARRAYDISTINCT": exp.ArrayDistinct.from_arg_list,
 283        "ARRAYEXCEPT": exp.ArrayExcept.from_arg_list,
 284        "ARRAYSUM": exp.ArraySum.from_arg_list,
 285        "ARRAYMAX": exp.ArrayMax.from_arg_list,
 286        "ARRAYMIN": exp.ArrayMin.from_arg_list,
 287        "ARRAYREVERSE": exp.ArrayReverse.from_arg_list,
 288        "ARRAYSLICE": exp.ArraySlice.from_arg_list,
 289        "ARRAYFILTER": _build_array_lambda_func(exp.ArrayFilter, "arrayFilter"),
 290        "ARRAYMAP": _build_array_lambda_func(exp.Transform, "arrayMap"),
 291        "CURRENTDATABASE": exp.CurrentDatabase.from_arg_list,
 292        "CURRENTSCHEMAS": exp.CurrentSchemas.from_arg_list,
 293        "COUNTIF": _build_count_if,
 294        "CITYHASH64": exp.CityHash64.from_arg_list,
 295        "COSINEDISTANCE": exp.CosineDistance.from_arg_list,
 296        "VERSION": exp.CurrentVersion.from_arg_list,
 297        "DATE_ADD": build_date_delta(exp.DateAdd, default_unit=None),
 298        "DATEADD": build_date_delta(exp.DateAdd, default_unit=None),
 299        "DATE_DIFF": build_date_delta(exp.DateDiff, default_unit=None, supports_timezone=True),
 300        "DATEDIFF": build_date_delta(exp.DateDiff, default_unit=None, supports_timezone=True),
 301        "DATE_FORMAT": _build_datetime_format(exp.TimeToStr),
 302        "DATE_SUB": build_date_delta(exp.DateSub, default_unit=None),
 303        "DATESUB": build_date_delta(exp.DateSub, default_unit=None),
 304        "DATETRUNC": exp.DateTrunc.from_arg_list,
 305        "FORMATDATETIME": _build_datetime_format(exp.TimeToStr),
 306        "HAS": exp.ArrayContains.from_arg_list,
 307        "ILIKE": build_like(exp.ILike),
 308        "JSONEXTRACTSTRING": build_json_extract_path(
 309            exp.JSONExtractScalar, zero_based_indexing=False
 310        ),
 311        "LENGTH": lambda args: exp.Length(this=seq_get(args, 0), binary=True),
 312        "LIKE": build_like(exp.Like),
 313        "L2Distance": exp.EuclideanDistance.from_arg_list,
 314        "MAP": parser.build_var_map,
 315        "MATCH": exp.RegexpLike.from_arg_list,
 316        "NOTLIKE": build_like(exp.Like, not_like=True),
 317        "PARSEDATETIME": _build_datetime_format(exp.ParseDatetime),
 318        "RANDCANONICAL": exp.Rand.from_arg_list,
 319        "STR_TO_DATE": _build_str_to_date,
 320        "TIMESTAMP_SUB": build_date_delta(exp.TimestampSub, default_unit=None),
 321        "TIMESTAMPSUB": build_date_delta(exp.TimestampSub, default_unit=None),
 322        "TIMESTAMP_ADD": build_date_delta(exp.TimestampAdd, default_unit=None),
 323        "TIMESTAMPADD": build_date_delta(exp.TimestampAdd, default_unit=None),
 324        "TOMONDAY": _build_timestamp_trunc("WEEK"),
 325        "UNIQ": exp.ApproxDistinct.from_arg_list,
 326        "MD5": exp.MD5Digest.from_arg_list,
 327        "SHA256": lambda args: exp.SHA2(this=seq_get(args, 0), length=exp.Literal.number(256)),
 328        "SHA512": lambda args: exp.SHA2(this=seq_get(args, 0), length=exp.Literal.number(512)),
 329        "SPLITBYCHAR": _build_split_by_char,
 330        "SPLITBYREGEXP": _build_split(exp.RegexpSplit),
 331        "SPLITBYSTRING": _build_split(exp.Split),
 332        "SUBSTRINGINDEX": exp.SubstringIndex.from_arg_list,
 333        "TOTYPENAME": exp.Typeof.from_arg_list,
 334        "TRIMBOTH": exp.Trim.from_arg_list,
 335        "TRIMLEFT": parser.build_trim,
 336        "TRIMRIGHT": lambda args: parser.build_trim(args, is_left=False),
 337        "EDITDISTANCE": exp.Levenshtein.from_arg_list,
 338        "JAROWINKLERSIMILARITY": exp.JarowinklerSimilarity.from_arg_list,
 339        "LEVENSHTEINDISTANCE": exp.Levenshtein.from_arg_list,
 340        "UTCTIMESTAMP": exp.UtcTimestamp.from_arg_list,
 341    }
 342
 343    AGG_FUNCTIONS: t.ClassVar = _AGG_FUNCTIONS
 344    AGG_FUNCTIONS_SUFFIXES: t.ClassVar = _AGG_FUNCTIONS_SUFFIXES
 345
 346    FUNC_TOKENS = {
 347        *parser.Parser.FUNC_TOKENS,
 348        TokenType.AND,
 349        TokenType.FILE,
 350        TokenType.OR,
 351        TokenType.SET,
 352        TokenType.VIEW,
 353    }
 354
 355    RESERVED_TOKENS = parser.Parser.RESERVED_TOKENS - {TokenType.SELECT}
 356
 357    ID_VAR_TOKENS = {
 358        *parser.Parser.ID_VAR_TOKENS,
 359        TokenType.LIKE,
 360    }
 361
 362    AGG_FUNC_MAPPING: t.ClassVar = _AGG_FUNC_MAPPING
 363
 364    @classmethod
 365    def _resolve_clickhouse_agg(cls, name: str) -> tuple[str, Sequence[str]] | None:
 366        # ClickHouse allows chaining multiple combinators on aggregate functions.
 367        # See https://clickhouse.com/docs/sql-reference/aggregate-functions/combinators
 368        # N.B. this resolution allows any suffix stack, including ones that ClickHouse rejects
 369        # syntactically such as sumMergeMerge (due to repeated adjacent suffixes)
 370
 371        # Until we are able to identify a 1- or 0-suffix aggregate function by name,
 372        # repeatedly strip and queue suffixes (checking longer suffixes first, see comment on
 373        # AGG_FUNCTIONS_SUFFIXES_SORTED). This loop only runs for 2 or more suffixes,
 374        # as AGG_FUNC_MAPPING memoizes all 0- and 1-suffix
 375        accumulated_suffixes: deque[str] = deque()
 376        while (parts := _AGG_FUNC_MAPPING.get(name)) is None:
 377            for suffix in _AGG_FUNCTIONS_SUFFIXES:
 378                if name.endswith(suffix) and len(name) != len(suffix):
 379                    accumulated_suffixes.appendleft(suffix)
 380                    name = name[: -len(suffix)]
 381                    break
 382            else:
 383                return None
 384
 385        # We now have a 0- or 1-suffix aggregate
 386        agg_func_name, inner_suffix = parts
 387        if inner_suffix:
 388            # this is a 1-suffix aggregate (either naturally or via repeated suffix
 389            # stripping). prepend the innermost suffix.
 390            accumulated_suffixes.appendleft(inner_suffix)
 391
 392        return (agg_func_name, accumulated_suffixes)
 393
 394    FUNCTION_PARSERS = {
 395        **{k: v for k, v in parser.Parser.FUNCTION_PARSERS.items() if k != "MATCH"},
 396        "ARRAYJOIN": lambda self: self.expression(exp.Explode(this=self._parse_expression())),
 397        "GROUPCONCAT": lambda self: self._parse_group_concat(),
 398        "QUANTILE": lambda self: self._parse_quantile(),
 399        "MEDIAN": lambda self: self._parse_quantile(),
 400        "COLUMNS": lambda self: self._parse_columns(),
 401        "TUPLE": lambda self: exp.Struct.from_arg_list(self._parse_function_args(alias=True)),
 402        "AND": lambda self: self._parse_connector_function(exp.and_),
 403        "OR": lambda self: self._parse_connector_function(exp.or_),
 404        "XOR": lambda self: exp.xor(*self._parse_function_args(alias=False)),
 405        "VIEW": lambda self: self.expression(
 406            exp.Anonymous(this="view", expressions=[self._parse_select()])
 407        ),
 408    }
 409
 410    PROPERTY_PARSERS = {
 411        **{k: v for k, v in parser.Parser.PROPERTY_PARSERS.items() if k != "DYNAMIC"},
 412        "ENGINE": lambda self: self._parse_engine_property(),
 413        "REFRESH": lambda self: self._parse_auto_refresh_property(),
 414        "UUID": lambda self: self.expression(exp.UuidProperty(this=self._parse_string())),
 415    }
 416
 417    NO_PAREN_FUNCTION_PARSERS = {
 418        k: v for k, v in parser.Parser.NO_PAREN_FUNCTION_PARSERS.items() if k != "ANY"
 419    }
 420
 421    NO_PAREN_FUNCTIONS = {
 422        k: v
 423        for k, v in parser.Parser.NO_PAREN_FUNCTIONS.items()
 424        if k != TokenType.CURRENT_TIMESTAMP
 425    }
 426
 427    RANGE_PARSERS = {
 428        **parser.Parser.RANGE_PARSERS,
 429        TokenType.GLOBAL: lambda self, this: self._parse_global_in(this),
 430    }
 431
 432    COLUMN_OPERATORS = {
 433        **{k: v for k, v in parser.Parser.COLUMN_OPERATORS.items() if k != TokenType.PLACEHOLDER},
 434        TokenType.DOTCARET: lambda self, this, field: self.expression(
 435            exp.NestedJSONSelect(this=this, expression=field)
 436        ),
 437    }
 438
 439    JOIN_KINDS = {
 440        *parser.Parser.JOIN_KINDS,
 441        TokenType.ALL,
 442        TokenType.ANY,
 443        TokenType.ASOF,
 444        TokenType.ARRAY,
 445    }
 446
 447    TABLE_ALIAS_TOKENS = parser.Parser.TABLE_ALIAS_TOKENS - {
 448        TokenType.ALL,
 449        TokenType.ANY,
 450        TokenType.ARRAY,
 451        TokenType.ASOF,
 452        TokenType.FINAL,
 453        TokenType.FORMAT,
 454        TokenType.SETTINGS,
 455    }
 456
 457    ALIAS_TOKENS = parser.Parser.ALIAS_TOKENS - {
 458        TokenType.FORMAT,
 459        TokenType.SETTINGS,
 460    }
 461
 462    LOG_DEFAULTS_TO_LN = True
 463
 464    QUERY_MODIFIER_PARSERS = {
 465        **parser.Parser.QUERY_MODIFIER_PARSERS,
 466        TokenType.SETTINGS: lambda self: (
 467            "settings",
 468            self._advance() or self._parse_csv(self._parse_assignment),
 469        ),
 470        TokenType.FORMAT: lambda self: ("format", self._advance() or self._parse_id_var()),
 471    }
 472
 473    CONSTRAINT_PARSERS = {
 474        **parser.Parser.CONSTRAINT_PARSERS,
 475        "INDEX": lambda self: self._parse_index_constraint(),
 476        "CODEC": lambda self: self._parse_compress(),
 477        "ASSUME": lambda self: self._parse_assume_constraint(),
 478    }
 479
 480    ALTER_PARSERS = {
 481        **parser.Parser.ALTER_PARSERS,
 482        "MODIFY": lambda self: self._parse_alter_table_alter(),
 483        "REPLACE": lambda self: self._parse_alter_table_replace(),
 484    }
 485
 486    SCHEMA_UNNAMED_CONSTRAINTS = {
 487        *parser.Parser.SCHEMA_UNNAMED_CONSTRAINTS,
 488        "INDEX",
 489    } - {"CHECK"}
 490
 491    PLACEHOLDER_PARSERS = {
 492        **parser.Parser.PLACEHOLDER_PARSERS,
 493        TokenType.L_BRACE: lambda self: self._parse_query_parameter(),
 494    }
 495
 496    STATEMENT_PARSERS = {
 497        **parser.Parser.STATEMENT_PARSERS,
 498        TokenType.DETACH: lambda self: self._parse_detach(),
 499    }
 500
 501    def _parse_wrapped_select_or_assignment(self) -> exp.Expr | None:
 502        return self._parse_wrapped(
 503            lambda: self._parse_select() or self._parse_assignment(), optional=True
 504        )
 505
 506    def _parse_check_constraint(self) -> exp.CheckColumnConstraint | None:
 507        return self.expression(
 508            exp.CheckColumnConstraint(this=self._parse_wrapped_select_or_assignment())
 509        )
 510
 511    def _parse_assume_constraint(self) -> exp.AssumeColumnConstraint | None:
 512        return self.expression(
 513            exp.AssumeColumnConstraint(this=self._parse_wrapped_select_or_assignment())
 514        )
 515
 516    def _parse_engine_property(self) -> exp.EngineProperty:
 517        self._match(TokenType.EQ)
 518        return self.expression(
 519            exp.EngineProperty(this=self._parse_field(any_token=True, anonymous_func=True))
 520        )
 521
 522    # https://clickhouse.com/docs/en/sql-reference/statements/create/function
 523    def _parse_user_defined_function_expression(self) -> exp.Expr | None:
 524        return self._parse_lambda()
 525
 526    def _parse_types(
 527        self,
 528        check_func: bool = False,
 529        schema: bool = False,
 530        allow_identifiers: bool = True,
 531        with_collation: bool = False,
 532    ) -> exp.Expr | None:
 533        dtype = super()._parse_types(
 534            check_func=check_func,
 535            schema=schema,
 536            allow_identifiers=allow_identifiers,
 537            with_collation=with_collation,
 538        )
 539        if isinstance(dtype, exp.DataType) and dtype.args.get("nullable") is not True:
 540            # Mark every type as non-nullable which is ClickHouse's default, unless it's
 541            # already marked as nullable. This marker helps us transpile types from other
 542            # dialects to ClickHouse, so that we can e.g. produce `CAST(x AS Nullable(String))`
 543            # from `CAST(x AS TEXT)`. If there is a `NULL` value in `x`, the former would
 544            # fail in ClickHouse without the `Nullable` type constructor.
 545            dtype.set("nullable", False)
 546
 547        return dtype
 548
 549    def _parse_extract(self) -> exp.Extract | exp.Anonymous:
 550        index = self._index
 551        this = self._parse_bitwise()
 552        if self._match(TokenType.FROM):
 553            self._retreat(index)
 554            return super()._parse_extract()
 555
 556        # We return Anonymous here because extract and regexpExtract have different semantics,
 557        # so parsing extract(foo, bar) into RegexpExtract can potentially break queries. E.g.,
 558        # `extract('foobar', 'b')` works, but ClickHouse crashes for `regexpExtract('foobar', 'b')`.
 559        #
 560        # TODO: can we somehow convert the former into an equivalent `regexpExtract` call?
 561        self._match(TokenType.COMMA)
 562        return self.expression(
 563            exp.Anonymous(this="extract", expressions=[this, self._parse_bitwise()])
 564        )
 565
 566    def _parse_assignment(self) -> exp.Expr | None:
 567        this = super()._parse_assignment()
 568
 569        if self._match(TokenType.PLACEHOLDER):
 570            return self.expression(
 571                exp.If(
 572                    this=this,
 573                    true=self._parse_assignment(),
 574                    false=self._match(TokenType.COLON) and self._parse_assignment(),
 575                )
 576            )
 577
 578        return this
 579
 580    def _parse_query_parameter(self) -> exp.Expr | None:
 581        """
 582        Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier}
 583        https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters
 584        """
 585        index = self._index
 586
 587        this = self._parse_id_var()
 588        self._match(TokenType.COLON)
 589        kind = self._parse_types(check_func=False, allow_identifiers=False) or (
 590            self._match_text_seq("IDENTIFIER") and "Identifier"
 591        )
 592
 593        if not kind:
 594            self._retreat(index)
 595            return None
 596        elif not self._match(TokenType.R_BRACE):
 597            self.raise_error("Expecting }")
 598
 599        if isinstance(this, exp.Identifier) and not this.quoted:
 600            this = exp.var(this.name)
 601
 602        return self.expression(exp.Placeholder(this=this, kind=kind))
 603
 604    def _parse_bracket(self, this: exp.Expr | None = None) -> exp.Expr | None:
 605        if this:
 606            bracket_json_type = None
 607
 608            while self._match_pair(TokenType.L_BRACKET, TokenType.R_BRACKET):
 609                bracket_json_type = exp.DataType(
 610                    this=exp.DType.ARRAY,
 611                    expressions=[
 612                        bracket_json_type
 613                        or exp.DType.JSON.into_expr(dialect=self.dialect, nullable=False)
 614                    ],
 615                    nested=True,
 616                )
 617
 618            if bracket_json_type:
 619                return self.expression(exp.JSONCast(this=this, to=bracket_json_type))
 620
 621        l_brace = self._match(TokenType.L_BRACE, advance=False)
 622        bracket = super()._parse_bracket(this)
 623
 624        if l_brace and isinstance(bracket, exp.Struct):
 625            varmap = exp.VarMap(keys=exp.Array(), values=exp.Array())
 626            for expression in bracket.expressions:
 627                if not isinstance(expression, exp.PropertyEQ):
 628                    break
 629
 630                varmap.args["keys"].append("expressions", exp.Literal.string(expression.name))
 631                varmap.args["values"].append("expressions", expression.expression)
 632
 633            return varmap
 634
 635        return bracket
 636
 637    def _parse_global_in(self, this: exp.Expr | None) -> exp.Not | exp.In | None:
 638        index = self._index - 1
 639        is_negated = self._match(TokenType.NOT)
 640        if not self._match(TokenType.IN):
 641            self._retreat(index)
 642            return None
 643
 644        in_expr = self._parse_in(this)
 645        in_expr.set("is_global", True)
 646        return self.expression(exp.Not(this=in_expr)) if is_negated else in_expr
 647
 648    def _parse_table(
 649        self,
 650        schema: bool = False,
 651        joins: bool = False,
 652        alias_tokens: Collection[TokenType] | None = None,
 653        parse_bracket: bool = False,
 654        is_db_reference: bool = False,
 655        parse_partition: bool = False,
 656        consume_pipe: bool = False,
 657    ) -> exp.Expr | None:
 658        this = super()._parse_table(
 659            schema=schema,
 660            joins=joins,
 661            alias_tokens=alias_tokens,
 662            parse_bracket=parse_bracket,
 663            is_db_reference=is_db_reference,
 664        )
 665
 666        if isinstance(this, exp.Table):
 667            inner = this.this
 668            alias = this.args.get("alias")
 669
 670            if isinstance(inner, exp.GenerateSeries) and alias and not alias.columns:
 671                alias.set("columns", [exp.to_identifier("generate_series")])
 672
 673        if self._match(TokenType.FINAL):
 674            this = self.expression(exp.Final(this=this))
 675
 676        return this
 677
 678    def _parse_position(self, haystack_first: bool = False) -> exp.StrPosition:
 679        return super()._parse_position(haystack_first=True)
 680
 681    # https://clickhouse.com/docs/en/sql-reference/statements/select/with/
 682    def _parse_cte(self) -> exp.CTE | exp.FunctionSpecification | None:
 683        # WITH <identifier> AS <subquery expression>
 684        cte: exp.CTE | exp.FunctionSpecification | None = self._try_parse(super()._parse_cte)
 685
 686        if not cte:
 687            # WITH <expression> AS <identifier>
 688            cte = self.expression(
 689                exp.CTE(this=self._parse_assignment(), alias=self._parse_table_alias(), scalar=True)
 690            )
 691
 692        return cte
 693
 694    def _parse_join_parts(
 695        self,
 696    ) -> tuple[Token | None, Token | None, Token | None]:
 697        is_global = self._prev if self._match(TokenType.GLOBAL) else None
 698
 699        kind_pre = self._prev if self._match_set(self.JOIN_KINDS) else None
 700        side = self._prev if self._match_set(self.JOIN_SIDES) else None
 701        kind = self._prev if self._match_set(self.JOIN_KINDS) else None
 702
 703        return is_global, side or kind, kind_pre or kind
 704
 705    def _parse_join(
 706        self,
 707        skip_join_token: bool = False,
 708        parse_bracket: bool = False,
 709        alias_tokens: t.Collection[TokenType] | None = None,
 710    ) -> exp.Join | None:
 711        join = super()._parse_join(
 712            skip_join_token=skip_join_token, parse_bracket=True, alias_tokens=alias_tokens
 713        )
 714        if join:
 715            method = join.args.get("method")
 716            join.set("method", None)
 717            join.set("global_", method)
 718
 719            # tbl ARRAY JOIN arr <-- this should be a `Column` reference, not a `Table`
 720            # https://clickhouse.com/docs/en/sql-reference/statements/select/array-join
 721            if join.kind == "ARRAY":
 722                for table in join.find_all(exp.Table):
 723                    table.replace(table.to_column())
 724
 725        return join
 726
 727    def _parse_function(
 728        self,
 729        functions: dict[str, t.Callable] | None = None,
 730        anonymous: bool = False,
 731        optional_parens: bool = True,
 732        any_token: bool = False,
 733    ) -> exp.Expr | None:
 734        expr = super()._parse_function(
 735            functions=functions,
 736            anonymous=anonymous,
 737            optional_parens=optional_parens,
 738            any_token=any_token,
 739        )
 740
 741        func = expr.this if isinstance(expr, exp.Window) else expr
 742
 743        # Aggregate functions can be split in 2 parts: <func_name><suffix[es]>
 744        parts = self._resolve_clickhouse_agg(func.name) if isinstance(func, exp.Anonymous) else None
 745
 746        if parts:
 747            anon_func: exp.Anonymous = t.cast(exp.Anonymous, func)
 748            params = self._parse_func_params(anon_func)
 749
 750            if len(parts[1]) > 0:
 751                exp_class: Type[exp.Expr] = (
 752                    exp.CombinedParameterizedAgg if params else exp.CombinedAggFunc
 753                )
 754            else:
 755                exp_class = exp.ParameterizedAgg if params else exp.AnonymousAggFunc
 756
 757            instance = exp_class(this=anon_func.this, expressions=anon_func.expressions)
 758            if params:
 759                instance.set("params", params)
 760            func = self.expression(instance)
 761
 762            if isinstance(expr, exp.Window):
 763                # The window's func was parsed as Anonymous in base parser, fix its
 764                # type to be ClickHouse style CombinedAnonymousAggFunc / AnonymousAggFunc
 765                expr.set("this", func)
 766            elif params:
 767                # Params have blocked super()._parse_function() from parsing the following window
 768                # (if that exists) as they're standing between the function call and the window spec
 769                expr = self._parse_window(func)
 770            else:
 771                expr = func
 772
 773        return expr
 774
 775    def _parse_func_params(self, this: exp.Func | None = None) -> list[exp.Expr] | None:
 776        if self._match_pair(TokenType.R_PAREN, TokenType.L_PAREN):
 777            return self._parse_csv(self._parse_lambda)
 778
 779        if self._match(TokenType.L_PAREN):
 780            params = self._parse_csv(self._parse_lambda)
 781            self._match_r_paren(this)
 782            return params
 783
 784        return None
 785
 786    def _parse_group_concat(self) -> exp.GroupConcat:
 787        args = self._parse_csv(self._parse_lambda)
 788        params = self._parse_func_params()
 789
 790        if params:
 791            # groupConcat(sep [, limit])(expr)
 792            separator = seq_get(args, 0)
 793            limit = seq_get(args, 1)
 794            this: exp.Expr | None = seq_get(params, 0)
 795            if limit is not None:
 796                this = exp.Limit(this=this, expression=limit)
 797            return self.expression(exp.GroupConcat(this=this, separator=separator))
 798
 799        # groupConcat(expr)
 800        return self.expression(exp.GroupConcat(this=seq_get(args, 0)))
 801
 802    def _parse_quantile(self) -> exp.Quantile:
 803        this = self._parse_lambda()
 804        params = self._parse_func_params()
 805        if params:
 806            return self.expression(exp.Quantile(this=params[0], quantile=this))
 807        return self.expression(exp.Quantile(this=this, quantile=exp.Literal.number(0.5)))
 808
 809    def _parse_wrapped_id_vars(self, optional: bool = False) -> list[exp.Expr]:
 810        return super()._parse_wrapped_id_vars(optional=True)
 811
 812    def _parse_column_def(
 813        self, this: exp.Expr | None, computed_column: bool = True
 814    ) -> exp.Expr | None:
 815        if self._match(TokenType.DOT):
 816            return exp.Dot(this=this, expression=self._parse_id_var())
 817
 818        return super()._parse_column_def(this, computed_column=computed_column)
 819
 820    def _parse_primary_key(
 821        self,
 822        wrapped_optional: bool = False,
 823        in_props: bool = False,
 824        named_primary_key: bool = False,
 825    ) -> exp.PrimaryKeyColumnConstraint | exp.PrimaryKey:
 826        return super()._parse_primary_key(
 827            wrapped_optional=wrapped_optional or in_props,
 828            in_props=in_props,
 829            named_primary_key=named_primary_key,
 830        )
 831
 832    def _parse_on_property(self) -> exp.Expr | None:
 833        index = self._index
 834        if self._match_text_seq("CLUSTER"):
 835            this = self._parse_string() or self._parse_id_var()
 836            if this:
 837                return self.expression(exp.OnCluster(this=this))
 838            else:
 839                self._retreat(index)
 840        return None
 841
 842    def _parse_auto_refresh_property(self) -> exp.AutoRefreshProperty | None:
 843        index = self._index - 1
 844        cadence = self._prev.text.upper() if self._match_texts(("EVERY", "AFTER")) else None
 845        interval = (
 846            self._parse_interval(require_interval=False, parse_function_unit=False)
 847            if cadence
 848            else None
 849        )
 850
 851        if cadence and not interval:
 852            self._retreat(index)
 853            return None
 854
 855        offset = None
 856        if self._match_text_seq("OFFSET"):
 857            offset = self._parse_interval(require_interval=False, parse_function_unit=False)
 858            if not offset:
 859                self._retreat(index)
 860                return None
 861
 862        randomize = None
 863        if self._match_text_seq("RANDOMIZE", "FOR"):
 864            randomize = self._parse_interval(require_interval=False, parse_function_unit=False)
 865            if not randomize:
 866                self._retreat(index)
 867                return None
 868
 869        dependencies = None
 870        if self._match_text_seq("DEPENDS", "ON"):
 871            dependencies = self._parse_csv(lambda: self._parse_table_parts(schema=True))
 872            if not dependencies:
 873                self._retreat(index)
 874                return None
 875
 876        if not cadence and not dependencies:
 877            self._retreat(index)
 878            return None
 879
 880        settings = self._parse_settings_property() if self._match_text_seq("SETTINGS") else None
 881
 882        return self.expression(
 883            exp.AutoRefreshProperty(
 884                this=interval,
 885                cadence=cadence,
 886                offset=offset,
 887                randomize=randomize,
 888                expressions=dependencies,
 889                settings=settings,
 890                append=self._match_text_seq("APPEND"),
 891            )
 892        )
 893
 894    def _parse_index_constraint(self, kind: str | None = None) -> exp.IndexColumnConstraint:
 895        # INDEX name1 expr TYPE type1(args) GRANULARITY value
 896        this = self._parse_id_var()
 897        expression = self._parse_assignment()
 898
 899        index_type = self._match_text_seq("TYPE") and (self._parse_function() or self._parse_var())
 900
 901        granularity = self._match_text_seq("GRANULARITY") and self._parse_term()
 902
 903        return self.expression(
 904            exp.IndexColumnConstraint(
 905                this=this, expression=expression, index_type=index_type, granularity=granularity
 906            )
 907        )
 908
 909    def _parse_partition(self) -> exp.Partition | None:
 910        # https://clickhouse.com/docs/en/sql-reference/statements/alter/partition#how-to-set-partition-expression
 911        if not self._match(TokenType.PARTITION):
 912            return None
 913
 914        if self._match_text_seq("ID"):
 915            # Corresponds to the PARTITION ID <string_value> syntax
 916            expressions: list[exp.Expr] = [
 917                self.expression(exp.PartitionId(this=self._parse_string()))
 918            ]
 919        else:
 920            expressions = self._parse_expressions()
 921
 922        return self.expression(exp.Partition(expressions=expressions))
 923
 924    def _parse_alter_table_replace(self) -> exp.Expr | None:
 925        partition = self._parse_partition()
 926
 927        if not partition or not self._match(TokenType.FROM):
 928            return None
 929
 930        return self.expression(
 931            exp.ReplacePartition(expression=partition, source=self._parse_table_parts())
 932        )
 933
 934    def _parse_alter_table_alter(self) -> exp.Expr | None:
 935        # MODIFY forms other than MODIFY COLUMN (SQL SECURITY, ORDER BY, TTL, COMMENT, ...)
 936        # are parsed as properties, since ALTER can now reach this path too
 937        if self._prev.text.upper() == "MODIFY" and not self._match(TokenType.COLUMN, advance=False):
 938            if properties := self._parse_properties():
 939                return self.expression(
 940                    exp.AlterModifySqlSecurity(expressions=properties.expressions)
 941                )
 942            return None
 943
 944        # https://clickhouse.com/docs/sql-reference/statements/alter/column#modify-column
 945        alter = super()._parse_alter_table_alter()
 946        return None if self._curr else alter
 947
 948    def _parse_definer(self) -> exp.DefinerProperty | None:
 949        self._match(TokenType.EQ)
 950        if self._match(TokenType.CURRENT_USER):
 951            return exp.DefinerProperty(this=exp.Var(this=self._prev.text.upper()))
 952        return exp.DefinerProperty(this=self._parse_string())
 953
 954    def _parse_projection_def(self) -> exp.ProjectionDef | None:
 955        if not self._match(TokenType.PROJECTION):
 956            return None
 957
 958        return self.expression(
 959            exp.ProjectionDef(
 960                this=self._parse_id_var(), expression=self._parse_wrapped(self._parse_statement)
 961            )
 962        )
 963
 964    def _parse_constraint(self) -> exp.Expr | None:
 965        return super()._parse_constraint() or self._parse_projection_def()
 966
 967    def _parse_alias(self, this: exp.Expr | None, explicit: bool = False) -> exp.Expr | None:
 968        # In clickhouse "SELECT <expr> APPLY(...)" is a query modifier,
 969        # so "APPLY" shouldn't be parsed as <expr>'s alias. However, "SELECT <expr> apply" is a valid alias
 970        if self._match_pair(TokenType.APPLY, TokenType.L_PAREN, advance=False):
 971            return this
 972
 973        return super()._parse_alias(this=this, explicit=explicit)
 974
 975    def _parse_expression(self) -> exp.Expr | None:
 976        this = super()._parse_expression()
 977
 978        # Clickhouse allows "SELECT <expr> [APPLY(func)] [...]]" modifier
 979        while self._match_pair(TokenType.APPLY, TokenType.L_PAREN):
 980            this = exp.Apply(this=this, expression=self._parse_var(any_token=True))
 981            self._match(TokenType.R_PAREN)
 982
 983        return this
 984
 985    def _parse_columns(self) -> exp.Expr:
 986        this: exp.Expr = self.expression(exp.Columns(this=self._parse_lambda()))
 987
 988        while self._next and self._match_text_seq(")", "APPLY", "("):
 989            self._match(TokenType.R_PAREN)
 990            this = exp.Apply(this=this, expression=self._parse_var(any_token=True))
 991        return this
 992
 993    def _parse_value(self, values: bool = True) -> exp.Tuple | None:
 994        value = super()._parse_value(values=values)
 995        if not value:
 996            return None
 997
 998        # In Clickhouse "SELECT * FROM VALUES (1, 2, 3)" generates a table with a single column, in contrast
 999        # to other dialects. For this case, we canonicalize the values into a tuple-of-tuples AST if it's not already one.
1000        # In INSERT INTO statements the same clause actually references multiple columns (opposite semantics),
1001        # but the final result is not altered by the extra parentheses.
1002        # Note: Clickhouse allows VALUES([structure], value, ...) so the branch checks for the last expression
1003        # A single-value tuple is generated as "(x)", which is parsed back into a Paren
1004        # rather than a Tuple, so it's unwrapped here to keep this rewrite idempotent
1005        expressions = value.expressions
1006        if values and not isinstance(expressions[-1], exp.Tuple):
1007            value.set(
1008                "expressions",
1009                [self.expression(exp.Tuple(expressions=[expr.unnest()])) for expr in expressions],
1010            )
1011
1012        return value
1013
1014    def _parse_partitioned_by(self) -> exp.PartitionedByProperty:
1015        # ClickHouse allows custom expressions as partition key
1016        # https://clickhouse.com/docs/engines/table-engines/mergetree-family/custom-partitioning-key
1017        return self.expression(exp.PartitionedByProperty(this=self._parse_assignment()))
1018
1019    def _parse_detach(self) -> exp.Detach:
1020        kind = self._match_set(self.DB_CREATABLES) and self._prev.text.upper()
1021        exists = self._parse_exists()
1022        this = self._parse_table_parts()
1023
1024        return self.expression(
1025            exp.Detach(
1026                this=this,
1027                kind=kind,
1028                exists=exists,
1029                cluster=self._parse_on_property() if self._match(TokenType.ON) else None,
1030                permanent=self._match_text_seq("PERMANENTLY"),
1031                sync=self._match_text_seq("SYNC"),
1032            )
1033        )

Parser consumes a list of tokens produced by the Tokenizer and produces a parsed syntax tree.

Arguments:
  • error_level: The desired error level. Default: ErrorLevel.IMMEDIATE
  • error_message_context: The amount of context to capture from a query string when displaying the error message (in number of characters). Default: 100
  • max_errors: Maximum number of error messages to include in a raised ParseError. This is only relevant if error_level is ErrorLevel.RAISE. Default: 3
  • max_nodes: Maximum number of AST nodes to prevent memory exhaustion. Set to -1 (default) to disable the check.
MODIFIERS_ATTACHED_TO_SET_OP = False
INTERVAL_SPANS = False
OPTIONAL_ALIAS_TOKEN_CTE = False
JOINS_HAVE_EQUAL_PRECEDENCE = True
FUNCTIONS = {'AI_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.AIAgg'>>, 'AI_CLASSIFY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.AIClassify'>>, 'AI_EMBED': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.AIEmbed'>>, 'A_I_FORECAST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.AIForecast'>>, 'AI_GENERATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.AIGenerate'>>, 'AI_SIMILARITY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.AISimilarity'>>, 'AI_SUMMARIZE_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.AISummarizeAgg'>>, 'ABS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Abs'>>, 'ACOS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Acos'>>, 'ACOSH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Acosh'>>, 'ADD_MONTHS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.AddMonths'>>, 'AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Agg'>>, 'AND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.And'>>, 'ANONYMOUS_AGG_FUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.AnonymousAggFunc'>>, 'ANY_VALUE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.AnyValue'>>, 'APPLY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Apply'>>, 'APPROX_DISTINCT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.ApproxDistinct'>>, 'APPROX_COUNT_DISTINCT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.ApproxDistinct'>>, 'APPROX_PERCENTILE_ACCUMULATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproxPercentileAccumulate'>>, 'APPROX_PERCENTILE_COMBINE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproxPercentileCombine'>>, 'APPROX_PERCENTILE_ESTIMATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproxPercentileEstimate'>>, 'APPROX_QUANTILE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproxQuantile'>>, 'APPROX_QUANTILES': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproxQuantiles'>>, 'APPROX_TOP_K': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproxTopK'>>, 'APPROX_TOP_K_ACCUMULATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproxTopKAccumulate'>>, 'APPROX_TOP_K_COMBINE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproxTopKCombine'>>, 'APPROX_TOP_K_ESTIMATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproxTopKEstimate'>>, 'APPROXIMATE_SIMILARITY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproximateSimilarity'>>, 'APPROXIMATE_JACCARD_INDEX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ApproximateSimilarity'>>, 'ARG_MAX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ArgMax'>>, 'ARGMAX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ArgMax'>>, 'MAX_BY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ArgMax'>>, 'ARG_MIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ArgMin'>>, 'ARGMIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ArgMin'>>, 'MIN_BY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ArgMin'>>, 'ARRAY': <function Parser.<lambda>>, 'ARRAY_AGG': <function Parser.<lambda>>, 'ARRAY_ALL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayAll'>>, 'ARRAY_ANY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayAny'>>, 'ARRAY_APPEND': <function build_array_append>, 'ARRAY_COMPACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayCompact'>>, 'ARRAY_CONCAT': <function build_array_concat>, 'ARRAY_CAT': <function build_array_concat>, 'ARRAY_CONCAT_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ArrayConcatAgg'>>, 'ARRAY_CONSTRUCT_COMPACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayConstructCompact'>>, 'ARRAY_CONTAINED_BY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayContainedBy'>>, 'ARRAY_CONTAINS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayContains'>>, 'ARRAY_HAS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayContains'>>, 'ARRAY_CONTAINS_ALL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayContainsAll'>>, 'ARRAY_HAS_ALL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayContainsAll'>>, 'ARRAY_DISTINCT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayDistinct'>>, 'ARRAY_EXCEPT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayExcept'>>, 'FILTER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayFilter'>>, 'ARRAY_FILTER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayFilter'>>, 'ARRAY_FIRST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayFirst'>>, 'ARRAY_INSERT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayInsert'>>, 'ARRAY_INTERSECT': <function Parser.<lambda>>, 'ARRAY_INTERSECTION': <function Parser.<lambda>>, 'ARRAY_LAST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayLast'>>, 'ARRAY_MAX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayMax'>>, 'ARRAY_MIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayMin'>>, 'ARRAY_OVERLAPS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayOverlaps'>>, 'ARRAY_POSITION': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayPosition'>>, 'ARRAY_PREPEND': <function build_array_prepend>, 'ARRAY_REMOVE': <function build_array_remove>, 'ARRAY_REMOVE_AT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayRemoveAt'>>, 'ARRAY_REVERSE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayReverse'>>, 'ARRAY_SIZE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArraySize'>>, 'ARRAY_LENGTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArraySize'>>, 'ARRAY_SLICE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArraySlice'>>, 'ARRAY_SORT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArraySort'>>, 'ARRAY_SUM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArraySum'>>, 'ARRAY_TO_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayToString'>>, 'ARRAY_JOIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayToString'>>, 'ARRAY_UNION_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ArrayUnionAgg'>>, 'ARRAY_UNIQUE_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ArrayUniqueAgg'>>, 'ARRAYS_ZIP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArraysZip'>>, 'ASCII': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Ascii'>>, 'ASIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Asin'>>, 'ASINH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Asinh'>>, 'ATAN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Atan'>>, 'ATAN2': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Atan2'>>, 'ATANH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Atanh'>>, 'AVG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Avg'>>, 'BASE64_DECODE_BINARY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Base64DecodeBinary'>>, 'BASE64_DECODE_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Base64DecodeString'>>, 'BASE64_ENCODE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Base64Encode'>>, 'BIT_LENGTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.BitLength'>>, 'BITMAP_BIT_POSITION': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitmapBitPosition'>>, 'BITMAP_BUCKET_NUMBER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitmapBucketNumber'>>, 'BITMAP_CONSTRUCT_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitmapConstructAgg'>>, 'BITMAP_COUNT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitmapCount'>>, 'BITMAP_OR_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitmapOrAgg'>>, 'BITWISE_AND_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitwiseAndAgg'>>, 'BITWISE_COUNT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitwiseCount'>>, 'BITWISE_OR_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitwiseOrAgg'>>, 'BITWISE_XOR_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BitwiseXorAgg'>>, 'BOOLAND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Booland'>>, 'BOOLNOT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Boolnot'>>, 'BOOLOR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Boolor'>>, 'BOOLXOR_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.BoolxorAgg'>>, 'BYTE_LENGTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ByteLength'>>, 'CASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Case'>>, 'CAST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Cast'>>, 'CAST_TO_STR_TYPE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CastToStrType'>>, 'CBRT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Cbrt'>>, 'CEIL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Ceil'>>, 'CEILING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Ceil'>>, 'CHECK_JSON': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.CheckJson'>>, 'CHECK_XML': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CheckXml'>>, 'CHR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Chr'>>, 'CHAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Chr'>>, 'CITY_HASH64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.CityHash64'>>, 'COALESCE': <function build_coalesce>, 'IFNULL': <function build_coalesce>, 'NVL': <function build_coalesce>, 'CODE_POINTS_TO_BYTES': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.CodePointsToBytes'>>, 'CODE_POINTS_TO_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.CodePointsToString'>>, 'COLLATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Collate'>>, 'COLLATION': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Collation'>>, 'COLUMNS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Columns'>>, 'COMBINED_AGG_FUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.CombinedAggFunc'>>, 'COMBINED_PARAMETERIZED_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.CombinedParameterizedAgg'>>, 'COMPRESS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Compress'>>, 'CONCAT': <function Parser.<lambda>>, 'CONCAT_WS': <function Parser.<lambda>>, 'CONNECT_BY_ROOT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.ConnectByRoot'>>, 'CONTAINS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Contains'>>, 'CONVERT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Convert'>>, 'CONVERT_TIMEZONE': <function build_convert_timezone>, 'CONVERT_TO_CHARSET': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ConvertToCharset'>>, 'CORR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Corr'>>, 'COS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Cos'>>, 'COSH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Cosh'>>, 'COSINE_DISTANCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.CosineDistance'>>, 'COT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Cot'>>, 'COTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Coth'>>, 'COUNT': <function Parser.<lambda>>, 'COUNT_IF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.CountIf'>>, 'COUNTIF': <function _build_count_if>, 'COVAR_POP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.CovarPop'>>, 'COVAR_SAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.CovarSamp'>>, 'CSC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Csc'>>, 'CSCH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Csch'>>, 'CUME_DIST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.CumeDist'>>, 'CURRENT_ACCOUNT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentAccount'>>, 'CURRENT_ACCOUNT_NAME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentAccountName'>>, 'CURRENT_AVAILABLE_ROLES': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentAvailableRoles'>>, 'CURRENT_CATALOG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentCatalog'>>, 'CURRENT_CLIENT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentClient'>>, 'CURRENT_DATABASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentDatabase'>>, 'CURRENT_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.CurrentDate'>>, 'CURRENT_DATETIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.CurrentDatetime'>>, 'CURRENT_IP_ADDRESS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentIpAddress'>>, 'CURRENT_ORGANIZATION_NAME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentOrganizationName'>>, 'CURRENT_ORGANIZATION_USER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentOrganizationUser'>>, 'CURRENT_REGION': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentRegion'>>, 'CURRENT_ROLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentRole'>>, 'CURRENT_ROLE_TYPE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentRoleType'>>, 'CURRENT_SCHEMA': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentSchema'>>, 'CURRENT_SCHEMAS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentSchemas'>>, 'CURRENT_SECONDARY_ROLES': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentSecondaryRoles'>>, 'CURRENT_SESSION': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentSession'>>, 'CURRENT_STATEMENT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentStatement'>>, 'CURRENT_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.CurrentTime'>>, 'CURRENT_TIMESTAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.CurrentTimestamp'>>, 'CURRENT_TIMESTAMP_L_T_Z': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.CurrentTimestampLTZ'>>, 'CURRENT_TIMEZONE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.CurrentTimezone'>>, 'CURRENT_TRANSACTION': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentTransaction'>>, 'CURRENT_USER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentUser'>>, 'CURRENT_USER_ID': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentUserId'>>, 'CURRENT_VERSION': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentVersion'>>, 'CURRENT_WAREHOUSE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentWarehouse'>>, 'DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Date'>>, 'DATE_ADD': <function build_date_delta.<locals>._builder>, 'DATE_BIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DateBin'>>, 'DATEDIFF': <function build_date_delta.<locals>._builder>, 'DATE_DIFF': <function build_date_delta.<locals>._builder>, 'DATE_FROM_PARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DateFromParts'>>, 'DATEFROMPARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DateFromParts'>>, 'DATE_FROM_UNIX_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DateFromUnixDate'>>, 'DATE_STR_TO_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DateStrToDate'>>, 'DATE_SUB': <function build_date_delta.<locals>._builder>, 'DATE_TO_DATE_STR': <function Parser.<lambda>>, 'DATE_TO_DI': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DateToDi'>>, 'DATE_TRUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DateTrunc'>>, 'DATETIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Datetime'>>, 'DATETIME_ADD': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DatetimeAdd'>>, 'DATETIME_DIFF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DatetimeDiff'>>, 'DATETIME_SUB': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DatetimeSub'>>, 'DATETIME_TRUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DatetimeTrunc'>>, 'DAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Day'>>, 'DAY_OF_MONTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DayOfMonth'>>, 'DAYOFMONTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DayOfMonth'>>, 'DAY_OF_WEEK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DayOfWeek'>>, 'DAYOFWEEK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DayOfWeek'>>, 'DAYOFWEEK_ISO': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DayOfWeekIso'>>, 'ISODOW': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DayOfWeekIso'>>, 'DAY_OF_YEAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DayOfYear'>>, 'DAYOFYEAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DayOfYear'>>, 'DAYNAME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Dayname'>>, 'DECODE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Decode'>>, 'DECODE_CASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.DecodeCase'>>, 'DECOMPRESS_BINARY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.DecompressBinary'>>, 'DECOMPRESS_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.DecompressString'>>, 'DECRYPT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Decrypt'>>, 'DECRYPT_RAW': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.DecryptRaw'>>, 'DEGREES': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Degrees'>>, 'DENSE_RANK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.DenseRank'>>, 'DI_TO_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DiToDate'>>, 'DOT_PRODUCT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.DotProduct'>>, 'DYNAMIC_IDENTIFIER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.DynamicIdentifier'>>, 'ELT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Elt'>>, 'ENCODE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Encode'>>, 'ENCRYPT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Encrypt'>>, 'ENCRYPT_RAW': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.EncryptRaw'>>, 'ENDS_WITH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.EndsWith'>>, 'ENDSWITH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.EndsWith'>>, 'EQUAL_NULL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.EqualNull'>>, 'EUCLIDEAN_DISTANCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.EuclideanDistance'>>, 'EXISTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Exists'>>, 'EXP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Exp'>>, 'EXPLODE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Explode'>>, 'EXPLODING_GENERATE_SERIES': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ExplodingGenerateSeries'>>, 'EXTRACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Extract'>>, 'FACTORIAL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Factorial'>>, 'FARM_FINGERPRINT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.FarmFingerprint'>>, 'FARMFINGERPRINT64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.FarmFingerprint'>>, 'FEATURES_AT_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.FeaturesAtTime'>>, 'FIRST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.First'>>, 'FIRST_VALUE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.FirstValue'>>, 'FLATTEN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Flatten'>>, 'FLOAT64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Float64'>>, 'FLOOR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Floor'>>, 'FORMAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Format'>>, 'FROM_BASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.FromBase'>>, 'FROM_BASE32': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.FromBase32'>>, 'FROM_BASE64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.FromBase64'>>, 'FROM_ISO8601_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.FromISO8601Date'>>, 'FROM_ISO8601_TIMESTAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.FromISO8601Timestamp'>>, 'FROM_ISO8601_TIMESTAMP_NANOS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.FromISO8601TimestampNanos'>>, 'FROM_JSON': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.FromJson'>>, 'GAP_FILL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.GapFill'>>, 'GENERATE_BOOL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.GenerateBool'>>, 'GENERATE_DATE_ARRAY': <function Parser.<lambda>>, 'GENERATE_DOUBLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.GenerateDouble'>>, 'GENERATE_EMBEDDING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.GenerateEmbedding'>>, 'GENERATE_INT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.GenerateInt'>>, 'GENERATE_SERIES': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.GenerateSeries'>>, 'GENERATE_TABLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.GenerateTable'>>, 'GENERATE_TEXT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.GenerateText'>>, 'GENERATE_TIMESTAMP_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.GenerateTimestampArray'>>, 'GENERATOR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Generator'>>, 'GET_EXTRACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.GetExtract'>>, 'GET_IGNORE_CASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.GetIgnoreCase'>>, 'GETBIT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Getbit'>>, 'GET_BIT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Getbit'>>, 'GREATEST': <function Parser.<lambda>>, 'GROUP_CONCAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.GroupConcat'>>, 'GROUPING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Grouping'>>, 'GROUPING_ID': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.GroupingId'>>, 'HASH_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.HashAgg'>>, 'HEX': <function build_hex>, 'HEX_DECODE_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.HexDecodeString'>>, 'HLL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.Hll'>>, 'HOST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Host'>>, 'HOUR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Hour'>>, 'IF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.If'>>, 'IIF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.If'>>, 'INITCAP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Initcap'>>, 'INLINE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Inline'>>, 'INT64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Int64'>>, 'IS_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.IsArray'>>, 'IS_ASCII': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.IsAscii'>>, 'IS_INF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.IsInf'>>, 'ISINF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.IsInf'>>, 'IS_NAN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.IsNan'>>, 'ISNAN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.IsNan'>>, 'IS_NULL_VALUE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.IsNullValue'>>, 'J_S_O_N_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONArray'>>, 'J_S_O_N_ARRAY_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONArrayAgg'>>, 'JSON_ARRAY_APPEND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONArrayAppend'>>, 'JSON_ARRAY_CONTAINS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONArrayContains'>>, 'JSON_ARRAY_INSERT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONArrayInsert'>>, 'JSONB_CONTAINS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBContains'>>, 'J_S_O_N_B_CONTAINS_ALL_TOP_KEYS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBContainsAllTopKeys'>>, 'J_S_O_N_B_CONTAINS_ANY_TOP_KEYS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBContainsAnyTopKeys'>>, 'J_S_O_N_B_CONTAINS_TOP_KEY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBContainsTopKey'>>, 'J_S_O_N_B_DELETE_AT_PATH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBDeleteAtPath'>>, 'JSONB_EXISTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBExists'>>, 'JSONB_EXTRACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBExtract'>>, 'JSONB_EXTRACT_SCALAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBExtractScalar'>>, 'J_S_O_N_B_OBJECT_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBObjectAgg'>>, 'J_S_O_N_B_PATH_EXISTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBPathExists'>>, 'J_S_O_N_BOOL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONBool'>>, 'J_S_O_N_CAST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.JSONCast'>>, 'J_S_O_N_EXISTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONExists'>>, 'JSON_EXTRACT': <function build_extract_json_with_path.<locals>._builder>, 'JSON_EXTRACT_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONExtractArray'>>, 'JSON_EXTRACT_SCALAR': <function build_extract_json_with_path.<locals>._builder>, 'JSON_FORMAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONFormat'>>, 'JSON_KEYS': <function Parser.<lambda>>, 'J_S_O_N_KEYS_AT_DEPTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONKeysAtDepth'>>, 'J_S_O_N_OBJECT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONObject'>>, 'J_S_O_N_OBJECT_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONObjectAgg'>>, 'JSON_REMOVE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONRemove'>>, 'JSON_SET': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONSet'>>, 'JSON_STRIP_NULLS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONStripNulls'>>, 'J_S_O_N_TABLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONTable'>>, 'JSON_TYPE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.JSONType'>>, 'J_S_O_N_VALUE_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.query.JSONValueArray'>>, 'JAROWINKLER_SIMILARITY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.JarowinklerSimilarity'>>, 'JUSTIFY_DAYS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.JustifyDays'>>, 'JUSTIFY_HOURS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.JustifyHours'>>, 'JUSTIFY_INTERVAL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.JustifyInterval'>>, 'KURTOSIS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Kurtosis'>>, 'LAG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Lag'>>, 'LAST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Last'>>, 'LAST_DAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.LastDay'>>, 'LAST_DAY_OF_MONTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.LastDay'>>, 'LAST_VALUE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.LastValue'>>, 'LAX_BOOL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.LaxBool'>>, 'LAX_FLOAT64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.LaxFloat64'>>, 'LAX_INT64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.LaxInt64'>>, 'LAX_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.LaxString'>>, 'LEAD': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Lead'>>, 'LEAST': <function Parser.<lambda>>, 'LEFT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Left'>>, 'LENGTH': <function ClickHouseParser.<lambda>>, 'LEN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Length'>>, 'CHAR_LENGTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Length'>>, 'CHARACTER_LENGTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Length'>>, 'LEVENSHTEIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Levenshtein'>>, 'LIST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.List'>>, 'LN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Ln'>>, 'LOCALTIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Localtime'>>, 'LOCALTIMESTAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Localtimestamp'>>, 'LOG': <function build_logarithm>, 'LOGICAL_AND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.LogicalAnd'>>, 'BOOL_AND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.LogicalAnd'>>, 'BOOLAND_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.LogicalAnd'>>, 'LOGICAL_OR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.LogicalOr'>>, 'BOOL_OR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.LogicalOr'>>, 'BOOLOR_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.LogicalOr'>>, 'LOWER': <function build_lower>, 'LCASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Lower'>>, 'LOWER_HEX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.LowerHex'>>, 'MD5': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.MD5Digest'>>, 'MD5_DIGEST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.MD5Digest'>>, 'M_D5_NUMBER_LOWER64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.MD5NumberLower64'>>, 'M_D5_NUMBER_UPPER64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.MD5NumberUpper64'>>, 'M_L_FORECAST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.MLForecast'>>, 'M_L_TRANSLATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.MLTranslate'>>, 'MAKE_INTERVAL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.MakeInterval'>>, 'MANHATTAN_DISTANCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.ManhattanDistance'>>, 'MAP': <function build_var_map>, 'MAP_CAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.MapCat'>>, 'MAP_CONTAINS_KEY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.MapContainsKey'>>, 'MAP_DELETE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.MapDelete'>>, 'MAP_FROM_ENTRIES': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.MapFromEntries'>>, 'MAP_INSERT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.MapInsert'>>, 'MAP_KEYS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.MapKeys'>>, 'MAP_PICK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.MapPick'>>, 'MAP_SIZE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.MapSize'>>, 'MATCH_AGAINST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.MatchAgainst'>>, 'MAX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Max'>>, 'MEDIAN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Median'>>, 'MIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Min'>>, 'MINHASH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Minhash'>>, 'MINHASH_COMBINE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.MinhashCombine'>>, 'MINUTE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Minute'>>, 'MODE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Mode'>>, 'MONTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Month'>>, 'MONTHNAME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Monthname'>>, 'MONTHS_BETWEEN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.MonthsBetween'>>, 'NANVL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Nanvl'>>, 'NEGATIVE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Negative'>>, 'NET_FUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.NetFunc'>>, 'NEXT_DAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.NextDay'>>, 'NEXT_VALUE_FOR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ddl.NextValueFor'>>, 'NORMAL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Normal'>>, 'NORMALIZE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Normalize'>>, 'NTH_VALUE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.NthValue'>>, 'NTILE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Ntile'>>, 'NULLIF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Nullif'>>, 'NUMBER_TO_STR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.NumberToStr'>>, 'NVL2': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Nvl2'>>, 'OBJECT_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.ObjectAgg'>>, 'OBJECT_ID': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.ObjectId'>>, 'OBJECT_INSERT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.ObjectInsert'>>, 'OBJECT_TRANSFORM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.ObjectTransform'>>, 'OPEN_J_S_O_N': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.OpenJSON'>>, 'OR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.Or'>>, 'OVERLAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Overlay'>>, 'PAD': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Pad'>>, 'PARAMETERIZED_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.ParameterizedAgg'>>, 'PARSE_BIGNUMERIC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ParseBignumeric'>>, 'PARSE_DATETIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.ParseDatetime'>>, 'PARSE_IP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.ParseIp'>>, 'PARSE_JSON': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.ParseJSON'>>, 'JSON_PARSE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.ParseJSON'>>, 'PARSE_NUMERIC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ParseNumeric'>>, 'PARSE_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.ParseTime'>>, 'PARSE_URL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ParseUrl'>>, 'PERCENT_RANK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.PercentRank'>>, 'PERCENTILE_CONT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.PercentileCont'>>, 'PERCENTILE_DISC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.PercentileDisc'>>, 'PI': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Pi'>>, 'POSEXPLODE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Posexplode'>>, 'POSEXPLODE_OUTER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.PosexplodeOuter'>>, 'POWER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.Pow'>>, 'POW': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.Pow'>>, 'PREDICT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Predict'>>, 'PREVIOUS_DAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.PreviousDay'>>, 'QUANTILE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Quantile'>>, 'QUARTER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Quarter'>>, 'RADIANS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Radians'>>, 'RAND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Rand'>>, 'RANDOM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Rand'>>, 'RANDN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Randn'>>, 'RANDSTR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Randstr'>>, 'RANGE_BUCKET': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.RangeBucket'>>, 'RANGE_N': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.RangeN'>>, 'RANK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Rank'>>, 'READ_CSV': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.ReadCSV'>>, 'READ_PARQUET': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.ReadParquet'>>, 'REDUCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Reduce'>>, 'REG_DOMAIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.RegDomain'>>, 'REGEXP_COUNT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.RegexpCount'>>, 'REGEXP_EXTRACT': <function ClickHouseParser.<dictcomp>.<lambda>>, 'REGEXP_EXTRACT_ALL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.RegexpExtractAll'>>, 'REGEXP_FULL_MATCH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.RegexpFullMatch'>>, 'REGEXP_I_LIKE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.RegexpILike'>>, 'REGEXP_INSTR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.RegexpInstr'>>, 'REGEXP_LIKE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.RegexpLike'>>, 'REGEXP_REPLACE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.RegexpReplace'>>, 'REGEXP_SPLIT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.RegexpSplit'>>, 'REGEXP_SUBSTR': <function ClickHouseParser.<dictcomp>.<lambda>>, 'REGR_AVGX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrAvgx'>>, 'REGR_AVGY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrAvgy'>>, 'REGR_COUNT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrCount'>>, 'REGR_INTERCEPT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrIntercept'>>, 'REGR_R2': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrR2'>>, 'REGR_SLOPE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrSlope'>>, 'REGR_SXX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrSxx'>>, 'REGR_SXY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrSxy'>>, 'REGR_SYY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrSyy'>>, 'REGR_VALX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrValx'>>, 'REGR_VALY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RegrValy'>>, 'REPEAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Repeat'>>, 'REPLACE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Replace'>>, 'REVERSE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Reverse'>>, 'RIGHT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Right'>>, 'RINT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Rint'>>, 'ROUND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Round'>>, 'ROW_NUMBER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.RowNumber'>>, 'RTRIMMED_LENGTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.RtrimmedLength'>>, 'SHA': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SHA'>>, 'SHA1': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SHA'>>, 'S_H_A1_DIGEST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SHA1Digest'>>, 'SHA2': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SHA2'>>, 'S_H_A2_DIGEST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SHA2Digest'>>, 'SAFE_ADD': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.SafeAdd'>>, 'SAFE_CONVERT_BYTES_TO_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SafeConvertBytesToString'>>, 'SAFE_DIVIDE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.SafeDivide'>>, 'SAFE_FUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.SafeFunc'>>, 'SAFE_MULTIPLY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.SafeMultiply'>>, 'SAFE_NEGATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.SafeNegate'>>, 'SAFE_SUBTRACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.SafeSubtract'>>, 'SEARCH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Search'>>, 'SEARCH_IP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SearchIp'>>, 'SEC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Sec'>>, 'SECH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Sech'>>, 'SECOND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Second'>>, 'SECRET': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Secret'>>, 'SEQ1': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Seq1'>>, 'SEQ2': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Seq2'>>, 'SEQ4': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Seq4'>>, 'SEQ8': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Seq8'>>, 'SESSION_USER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.SessionUser'>>, 'SHUFFLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Shuffle'>>, 'SIGN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Sign'>>, 'SIGNUM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Sign'>>, 'SIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Sin'>>, 'SINH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Sinh'>>, 'SKEWNESS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Skewness'>>, 'SORT_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.SortArray'>>, 'SOUNDEX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Soundex'>>, 'SOUNDEX_P123': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SoundexP123'>>, 'SPACE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Space'>>, 'SPLIT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Split'>>, 'SPLIT_PART': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SplitPart'>>, 'SQRT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Sqrt'>>, 'ST_DISTANCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.StDistance'>>, 'ST_POINT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.StPoint'>>, 'ST_MAKEPOINT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.StPoint'>>, 'STACK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Stack'>>, 'STANDARD_HASH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.StandardHash'>>, 'STAR_MAP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.StarMap'>>, 'STARTS_WITH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.StartsWith'>>, 'STARTSWITH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.StartsWith'>>, 'STDDEV': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Stddev'>>, 'STDEV': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Stddev'>>, 'STDDEV_POP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.StddevPop'>>, 'STDDEV_SAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.StddevSamp'>>, 'STR_POSITION': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.StrPosition'>>, 'STR_TO_DATE': <function _build_str_to_date>, 'STR_TO_MAP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.StrToMap'>>, 'STR_TO_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.StrToTime'>>, 'STR_TO_UNIX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.StrToUnix'>>, 'STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.String'>>, 'STRING_TO_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.StringToArray'>>, 'SPLIT_BY_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.StringToArray'>>, 'STRIP_NULL_VALUE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.json.StripNullValue'>>, 'STRTOK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Strtok'>>, 'STRTOK_TO_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.StrtokToArray'>>, 'STRUCT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.Struct'>>, 'STRUCT_EXTRACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.StructExtract'>>, 'STUFF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Stuff'>>, 'INSERT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Stuff'>>, 'SUBSTRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Substring'>>, 'SUBSTR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Substring'>>, 'SUBSTRING_INDEX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SubstringIndex'>>, 'SUM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Sum'>>, 'SYSTIMESTAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Systimestamp'>>, 'TAN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Tan'>>, 'TANH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Tanh'>>, 'TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Time'>>, 'TIME_ADD': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeAdd'>>, 'TIME_DIFF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeDiff'>>, 'TIME_FROM_PARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeFromParts'>>, 'TIMEFROMPARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeFromParts'>>, 'TIME_SLICE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeSlice'>>, 'TIME_STR_TO_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeStrToDate'>>, 'TIME_STR_TO_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeStrToTime'>>, 'TIME_STR_TO_UNIX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeStrToUnix'>>, 'TIME_SUB': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeSub'>>, 'TIME_TO_STR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeToStr'>>, 'TIME_TO_TIME_STR': <function Parser.<lambda>>, 'TIME_TO_UNIX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeToUnix'>>, 'TIME_TRUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimeTrunc'>>, 'TIMESTAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Timestamp'>>, 'TIMESTAMP_ADD': <function build_date_delta.<locals>._builder>, 'TIMESTAMPDIFF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimestampDiff'>>, 'TIMESTAMP_DIFF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimestampDiff'>>, 'TIMESTAMP_FROM_PARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimestampFromParts'>>, 'TIMESTAMPFROMPARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimestampFromParts'>>, 'TIMESTAMP_LTZ_FROM_PARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimestampLtzFromParts'>>, 'TIMESTAMPLTZFROMPARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimestampLtzFromParts'>>, 'TIMESTAMP_SUB': <function build_date_delta.<locals>._builder>, 'TIMESTAMP_TRUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimestampTrunc'>>, 'TIMESTAMP_TZ_FROM_PARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimestampTzFromParts'>>, 'TIMESTAMPTZFROMPARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TimestampTzFromParts'>>, 'TO_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ToArray'>>, 'TO_BASE32': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ToBase32'>>, 'TO_BASE64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ToBase64'>>, 'TO_BINARY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ToBinary'>>, 'TO_BOOLEAN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.ToBoolean'>>, 'TO_CHAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ToChar'>>, 'TO_CODE_POINTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ToCodePoints'>>, 'TO_DAYS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.ToDays'>>, 'TO_DECFLOAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ToDecfloat'>>, 'TO_DOUBLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ToDouble'>>, 'TO_FILE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ToFile'>>, 'TO_MAP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ToMap'>>, 'TO_NUMBER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.ToNumber'>>, 'TO_VARIANT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.ToVariant'>>, 'TRANSLATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Translate'>>, 'TRIM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Trim'>>, 'TRUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Trunc'>>, 'TRUNCATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.Trunc'>>, 'TRY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Try'>>, 'TRY_BASE64_DECODE_BINARY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.TryBase64DecodeBinary'>>, 'TRY_BASE64_DECODE_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.TryBase64DecodeString'>>, 'TRY_CAST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.TryCast'>>, 'TRY_HEX_DECODE_BINARY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.TryHexDecodeBinary'>>, 'TRY_HEX_DECODE_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.TryHexDecodeString'>>, 'TRY_TO_DECFLOAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.TryToDecfloat'>>, 'TS_OR_DI_TO_DI': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TsOrDiToDi'>>, 'TS_OR_DS_ADD': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TsOrDsAdd'>>, 'TS_OR_DS_DIFF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TsOrDsDiff'>>, 'TS_OR_DS_TO_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TsOrDsToDate'>>, 'TS_OR_DS_TO_DATE_STR': <function Parser.<lambda>>, 'TS_OR_DS_TO_DATETIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TsOrDsToDatetime'>>, 'TS_OR_DS_TO_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TsOrDsToTime'>>, 'TS_OR_DS_TO_TIMESTAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.TsOrDsToTimestamp'>>, 'TYPEOF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.Typeof'>>, 'UNHEX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Unhex'>>, 'UNICODE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Unicode'>>, 'UNIFORM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Uniform'>>, 'UNIX_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UnixDate'>>, 'UNIX_MICROS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UnixMicros'>>, 'UNIX_MILLIS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UnixMillis'>>, 'UNIX_SECONDS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UnixSeconds'>>, 'UNIX_TO_STR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UnixToStr'>>, 'UNIX_TO_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UnixToTime'>>, 'UNIX_TO_TIME_STR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UnixToTimeStr'>>, 'UNNEST': <function Parser.<lambda>>, 'UPPER': <function build_upper>, 'UCASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Upper'>>, 'UTC_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UtcDate'>>, 'UTC_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UtcTime'>>, 'UTC_TIMESTAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UtcTimestamp'>>, 'UUID': <function Parser.<lambda>>, 'GEN_RANDOM_UUID': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Uuid'>>, 'GENERATE_UUID': <function Parser.<lambda>>, 'UUID_STRING': <function Parser.<lambda>>, 'VAR_MAP': <function build_var_map>, 'VARIANCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Variance'>>, 'VARIANCE_SAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Variance'>>, 'VAR_SAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.Variance'>>, 'VARIANCE_POP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.VariancePop'>>, 'VAR_POP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.VariancePop'>>, 'VECTOR_SEARCH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.VectorSearch'>>, 'WEEK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Week'>>, 'WEEK_OF_YEAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.WeekOfYear'>>, 'WEEKOFYEAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.WeekOfYear'>>, 'WEEK_START': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.WeekStart'>>, 'WIDTH_BUCKET': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.WidthBucket'>>, 'XMLELEMENT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.XMLElement'>>, 'XMLGET': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.XMLGet'>>, 'X_M_L_TABLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.XMLTable'>>, 'XOR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.Xor'>>, 'YEAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.Year'>>, 'YEAR_OF_WEEK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.YearOfWeek'>>, 'YEAROFWEEK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.YearOfWeek'>>, 'YEAR_OF_WEEK_ISO': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.YearOfWeekIso'>>, 'YEAROFWEEKISO': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.YearOfWeekIso'>>, 'ZIPF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Zipf'>>, 'EXPLODE_OUTER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array._ExplodeOuter'>>, 'ARRAYAGG': <function Parser.<lambda>>, 'GLOB': <function Parser.<lambda>>, 'JSON_EXTRACT_PATH_TEXT': <function build_extract_json_with_path.<locals>._builder>, 'LIKE': <function build_like.<locals>._builder>, 'LOG2': <function Parser.<lambda>>, 'LOG10': <function Parser.<lambda>>, 'LPAD': <function Parser.<lambda>>, 'LEFTPAD': <function Parser.<lambda>>, 'LTRIM': <function Parser.<lambda>>, 'MOD': <function build_mod>, 'RIGHTPAD': <function Parser.<lambda>>, 'RPAD': <function Parser.<lambda>>, 'RTRIM': <function Parser.<lambda>>, 'SCOPE_RESOLUTION': <function Parser.<lambda>>, 'STRPOS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.StrPosition'>>, 'CHARINDEX': <function Parser.<lambda>>, 'INSTR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.StrPosition'>>, 'LOCATE': <function Parser.<lambda>>, 'TO_HEX': <function build_hex>, 'REGEXPEXTRACT': <function ClickHouseParser.<dictcomp>.<lambda>>, 'TOSTARTOFDAY': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFQUARTER': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFYEAR': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFHOUR': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFMINUTE': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFMICROSECOND': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFMONTH': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFMILLISECOND': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFSECOND': <function _build_timestamp_trunc.<locals>.<lambda>>, 'ANY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.aggregate.AnyValue'>>, 'ARRAYCOMPACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayCompact'>>, 'ARRAYCONCAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayConcat'>>, 'ARRAYDISTINCT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayDistinct'>>, 'ARRAYEXCEPT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayExcept'>>, 'ARRAYSUM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArraySum'>>, 'ARRAYMAX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayMax'>>, 'ARRAYMIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayMin'>>, 'ARRAYREVERSE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayReverse'>>, 'ARRAYSLICE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArraySlice'>>, 'ARRAYFILTER': <function _build_array_lambda_func.<locals>._builder>, 'ARRAYMAP': <function _build_array_lambda_func.<locals>._builder>, 'CURRENTDATABASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentDatabase'>>, 'CURRENTSCHEMAS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentSchemas'>>, 'CITYHASH64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.CityHash64'>>, 'COSINEDISTANCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.CosineDistance'>>, 'VERSION': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.CurrentVersion'>>, 'DATEADD': <function build_date_delta.<locals>._builder>, 'DATE_FORMAT': <function _build_datetime_format.<locals>._builder>, 'DATESUB': <function build_date_delta.<locals>._builder>, 'DATETRUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.DateTrunc'>>, 'FORMATDATETIME': <function _build_datetime_format.<locals>._builder>, 'HAS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.ArrayContains'>>, 'ILIKE': <function build_like.<locals>._builder>, 'JSONEXTRACTSTRING': <function build_json_extract_path.<locals>._builder>, 'L2Distance': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.EuclideanDistance'>>, 'MATCH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.RegexpLike'>>, 'NOTLIKE': <function build_like.<locals>._builder>, 'PARSEDATETIME': <function _build_datetime_format.<locals>._builder>, 'RANDCANONICAL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.functions.Rand'>>, 'TIMESTAMPSUB': <function build_date_delta.<locals>._builder>, 'TIMESTAMPADD': <function build_date_delta.<locals>._builder>, 'TOMONDAY': <function _build_timestamp_trunc.<locals>.<lambda>>, 'UNIQ': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.ApproxDistinct'>>, 'SHA256': <function ClickHouseParser.<lambda>>, 'SHA512': <function ClickHouseParser.<lambda>>, 'SPLITBYCHAR': <function _build_split_by_char>, 'SPLITBYREGEXP': <function _build_split.<locals>.<lambda>>, 'SPLITBYSTRING': <function _build_split.<locals>.<lambda>>, 'SUBSTRINGINDEX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.SubstringIndex'>>, 'TOTYPENAME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.core.Typeof'>>, 'TRIMBOTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Trim'>>, 'TRIMLEFT': <function build_trim>, 'TRIMRIGHT': <function ClickHouseParser.<lambda>>, 'EDITDISTANCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Levenshtein'>>, 'JAROWINKLERSIMILARITY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.math.JarowinklerSimilarity'>>, 'LEVENSHTEINDISTANCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.string.Levenshtein'>>, 'UTCTIMESTAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.temporal.UtcTimestamp'>>}
AGG_FUNCTIONS: ClassVar = {'sumCount', 'uniq', 'windowFunnel', 'quantileInterpolatedWeighted', 'stddevSamp', 'boundingRatio', 'groupBitAnd', 'quantileTimingWeighted', 'quantileGK', 'corr', 'uniqTheta', 'exponentialMovingAverage', 'anyHeavy', 'sumWithOverflow', 'groupArraySample', 'maxIntersections', 'contingency', 'uniqExact', 'anyLast', 'deltaSum', 'covarPop', 'minMap', 'uniqCombined64', 'quantileTDigest', 'sparkBar', 'maxMap', 'groupArray', 'max', 'topKWeighted', 'first_value', 'quantilesGK', 'quantileExactHigh', 'count', 'groupArrayMovingSum', 'retention', 'median', 'cramersVBiasCorrected', 'quantileExactInclusive', 'entropy', 'uniqCombined', 'approx_top_sum', 'skewPop', 'quantilesTimingWeighted', 'avg', 'avgWeighted', 'sequenceCount', 'groupBitXor', 'histogram', 'quantilesBFloat16Weighted', 'kurtSamp', 'maxIntersectionsPosition', 'groupBitmapXor', 'argMax', 'groupConcat', 'last_value', 'simpleLinearRegression', 'quantilesTDigest', 'quantilesInterpolatedWeighted', 'intervalLengthSum', 'quantileExact', 'deltaSumTimestamp', 'argMin', 'exponentialTimeDecayedAvg', 'groupBitmapAnd', 'uniqHLL12', 'stochasticLogisticRegression', 'quantilesTDigestWeighted', 'quantiles', 'quantilesTiming', 'quantileBFloat16Weighted', 'welchTTest', 'stochasticLinearRegression', 'quantilesBFloat16', 'varSamp', 'groupArrayLast', 'uniqUpTo', 'quantileTiming', 'sum', 'kurtPop', 'sequenceMatch', 'sumMap', 'topK', 'sumKahan', 'groupArrayMovingAvg', 'groupBitmap', 'rankCorr', 'mannWhitneyUTest', 'categoricalInformationValue', 'cramersV', 'sequenceNextNode', 'quantileDeterministic', 'quantilesExactExclusive', 'quantile', 'quantileBFloat16', 'kolmogorovSmirnovTest', 'varPop', 'skewSamp', 'theilsU', 'meanZTest', 'groupArrayInsertAt', 'covarSamp', 'groupBitmapOr', 'studentTTest', 'groupUniqArray', 'largestTriangleThreeBuckets', 'quantileExactLow', 'any', 'quantilesExactHigh', 'stddevPop', 'quantilesExactWeighted', 'quantilesExact', 'quantileTDigestWeighted', 'quantilesExactLow', 'quantilesDeterministic', 'min', 'groupBitOr', 'quantileExactWeighted'}
AGG_FUNCTIONS_SUFFIXES: ClassVar = ['SimpleState', 'MergeState', 'OrDefault', 'Distinct', 'Resample', 'ArrayIf', 'ForEach', 'OrNull', 'ArgMin', 'ArgMax', 'Array', 'State', 'Merge', 'Map', 'If']
FUNC_TOKENS = {<TokenType.AND: 34>, <TokenType.OR: 35>, <TokenType.SESSION_USER: 61>, <TokenType.XOR: 66>, <TokenType.IDENTIFIER: 79>, <TokenType.TABLE: 84>, <TokenType.VAR: 89>, <TokenType.BIT: 97>, <TokenType.BOOLEAN: 98>, <TokenType.TINYINT: 99>, <TokenType.UTINYINT: 100>, <TokenType.SMALLINT: 101>, <TokenType.USMALLINT: 102>, <TokenType.MEDIUMINT: 103>, <TokenType.UMEDIUMINT: 104>, <TokenType.INT: 105>, <TokenType.UINT: 106>, <TokenType.BIGINT: 107>, <TokenType.UBIGINT: 108>, <TokenType.BIGNUM: 109>, <TokenType.INT128: 110>, <TokenType.UINT128: 111>, <TokenType.INT256: 112>, <TokenType.UINT256: 113>, <TokenType.FLOAT: 114>, <TokenType.DOUBLE: 115>, <TokenType.UDOUBLE: 116>, <TokenType.DECIMAL: 117>, <TokenType.DECIMAL32: 118>, <TokenType.DECIMAL64: 119>, <TokenType.DECIMAL128: 120>, <TokenType.DECIMAL256: 121>, <TokenType.DECFLOAT: 122>, <TokenType.UDECIMAL: 123>, <TokenType.BIGDECIMAL: 124>, <TokenType.CHAR: 125>, <TokenType.NCHAR: 126>, <TokenType.VARCHAR: 127>, <TokenType.NVARCHAR: 128>, <TokenType.BPCHAR: 129>, <TokenType.TEXT: 130>, <TokenType.MEDIUMTEXT: 131>, <TokenType.LONGTEXT: 132>, <TokenType.BLOB: 133>, <TokenType.MEDIUMBLOB: 134>, <TokenType.LONGBLOB: 135>, <TokenType.TINYBLOB: 136>, <TokenType.TINYTEXT: 137>, <TokenType.NAME: 138>, <TokenType.BINARY: 139>, <TokenType.VARBINARY: 140>, <TokenType.JSON: 141>, <TokenType.JSONB: 142>, <TokenType.TIME: 143>, <TokenType.TIMETZ: 144>, <TokenType.TIME_NS: 145>, <TokenType.TIMESTAMP: 146>, <TokenType.TIMESTAMPTZ: 147>, <TokenType.TIMESTAMPLTZ: 148>, <TokenType.TIMESTAMPNTZ: 149>, <TokenType.TIMESTAMP_S: 150>, <TokenType.TIMESTAMP_MS: 151>, <TokenType.TIMESTAMP_NS: 152>, <TokenType.DATETIME: 153>, <TokenType.DATETIME2: 154>, <TokenType.DATETIME64: 155>, <TokenType.SMALLDATETIME: 156>, <TokenType.DATE: 157>, <TokenType.DATE32: 158>, <TokenType.INT4RANGE: 159>, <TokenType.INT4MULTIRANGE: 160>, <TokenType.INT8RANGE: 161>, <TokenType.INT8MULTIRANGE: 162>, <TokenType.NUMRANGE: 163>, <TokenType.NUMMULTIRANGE: 164>, <TokenType.TSRANGE: 165>, <TokenType.TSMULTIRANGE: 166>, <TokenType.TSTZRANGE: 167>, <TokenType.TSTZMULTIRANGE: 168>, <TokenType.DATERANGE: 169>, <TokenType.DATEMULTIRANGE: 170>, <TokenType.UUID: 171>, <TokenType.GEOGRAPHY: 172>, <TokenType.GEOGRAPHYPOINT: 173>, <TokenType.NULLABLE: 174>, <TokenType.GEOMETRY: 175>, <TokenType.POINT: 176>, <TokenType.RING: 177>, <TokenType.LINESTRING: 178>, <TokenType.LOCALTIME: 179>, <TokenType.LOCALTIMESTAMP: 180>, <TokenType.MULTILINESTRING: 182>, <TokenType.POLYGON: 183>, <TokenType.MULTIPOLYGON: 184>, <TokenType.HLLSKETCH: 185>, <TokenType.HSTORE: 186>, <TokenType.SUPER: 187>, <TokenType.SERIAL: 188>, <TokenType.SMALLSERIAL: 189>, <TokenType.BIGSERIAL: 190>, <TokenType.XML: 191>, <TokenType.YEAR: 192>, <TokenType.USERDEFINED: 193>, <TokenType.MONEY: 194>, <TokenType.SMALLMONEY: 195>, <TokenType.ROWVERSION: 196>, <TokenType.IMAGE: 197>, <TokenType.VARIANT: 198>, <TokenType.OBJECT: 199>, <TokenType.INET: 200>, <TokenType.IPADDRESS: 201>, <TokenType.IPPREFIX: 202>, <TokenType.IPV4: 203>, <TokenType.IPV6: 204>, <TokenType.ENUM: 205>, <TokenType.ENUM8: 206>, <TokenType.ENUM16: 207>, <TokenType.FIXEDSTRING: 208>, <TokenType.LOWCARDINALITY: 209>, <TokenType.NESTED: 210>, <TokenType.AGGREGATEFUNCTION: 211>, <TokenType.SIMPLEAGGREGATEFUNCTION: 212>, <TokenType.TDIGEST: 213>, <TokenType.UNKNOWN: 214>, <TokenType.VECTOR: 215>, <TokenType.DYNAMIC: 216>, <TokenType.VOID: 217>, <TokenType.ALL: 220>, <TokenType.ANY: 222>, <TokenType.ARRAY: 224>, <TokenType.COLLATE: 236>, <TokenType.COMMAND: 237>, <TokenType.CURRENT_DATE: 246>, <TokenType.CURRENT_DATETIME: 247>, <TokenType.CURRENT_SCHEMA: 248>, <TokenType.CURRENT_TIME: 249>, <TokenType.CURRENT_TIMESTAMP: 250>, <TokenType.CURRENT_USER: 251>, <TokenType.CURRENT_CATALOG: 254>, <TokenType.DECLARE: 255>, <TokenType.EXISTS: 271>, <TokenType.FILE: 274>, <TokenType.FILTER: 276>, <TokenType.FIRST: 278>, <TokenType.FORMAT: 282>, <TokenType.GET: 286>, <TokenType.GLOB: 287>, <TokenType.ILIKE: 295>, <TokenType.INDEX: 297>, <TokenType.INSERT: 300>, <TokenType.INTERVAL: 304>, <TokenType.ISNULL: 309>, <TokenType.LEFT: 317>, <TokenType.LIKE: 318>, <TokenType.LIST: 320>, <TokenType.MAP: 323>, <TokenType.MERGE: 328>, <TokenType.NEXT: 332>, <TokenType.NOTHING: 333>, <TokenType.NULL: 335>, <TokenType.OBJECT_IDENTIFIER: 336>, <TokenType.OFFSET: 337>, <TokenType.PRIMARY_KEY: 362>, <TokenType.PSEUDO_TYPE: 366>, <TokenType.RANGE: 371>, <TokenType.REPLACE: 375>, <TokenType.RIGHT: 379>, <TokenType.RLIKE: 380>, <TokenType.ROW: 384>, <TokenType.SEQUENCE: 390>, <TokenType.SET: 392>, <TokenType.SOME: 396>, <TokenType.STRUCT: 403>, <TokenType.TRUNCATE: 411>, <TokenType.UNION: 416>, <TokenType.UNNEST: 417>, <TokenType.VIEW: 424>, <TokenType.WINDOW: 430>, <TokenType.UTC_DATE: 433>, <TokenType.UTC_TIME: 434>, <TokenType.UTC_TIMESTAMP: 435>}
RESERVED_TOKENS = {<TokenType.L_PAREN: 1>, <TokenType.R_PAREN: 2>, <TokenType.L_BRACKET: 3>, <TokenType.R_BRACKET: 4>, <TokenType.L_BRACE: 5>, <TokenType.R_BRACE: 6>, <TokenType.COMMA: 7>, <TokenType.DOT: 8>, <TokenType.DASH: 9>, <TokenType.PLUS: 10>, <TokenType.COLON: 11>, <TokenType.MOD: 329>, <TokenType.SEMICOLON: 19>, <TokenType.STAR: 20>, <TokenType.BACKSLASH: 21>, <TokenType.SLASH: 22>, <TokenType.LT: 23>, <TokenType.UNKNOWN: 214>, <TokenType.GT: 25>, <TokenType.NOT: 27>, <TokenType.EQ: 28>, <TokenType.AMP: 36>, <TokenType.PLACEHOLDER: 356>, <TokenType.PIPE: 39>, <TokenType.CARET: 42>, <TokenType.TILDE: 44>, <TokenType.HASH: 48>, <TokenType.PARAMETER: 58>}
ID_VAR_TOKENS = {<TokenType.SESSION: 59>, <TokenType.SESSION_USER: 61>, <TokenType.IDENTIFIER: 79>, <TokenType.DATABASE: 80>, <TokenType.COLUMN: 81>, <TokenType.SCHEMA: 83>, <TokenType.TABLE: 84>, <TokenType.WAREHOUSE: 85>, <TokenType.STAGE: 86>, <TokenType.STREAM: 87>, <TokenType.STREAMLIT: 88>, <TokenType.VAR: 89>, <TokenType.BIT: 97>, <TokenType.BOOLEAN: 98>, <TokenType.TINYINT: 99>, <TokenType.UTINYINT: 100>, <TokenType.SMALLINT: 101>, <TokenType.USMALLINT: 102>, <TokenType.MEDIUMINT: 103>, <TokenType.UMEDIUMINT: 104>, <TokenType.INT: 105>, <TokenType.UINT: 106>, <TokenType.BIGINT: 107>, <TokenType.UBIGINT: 108>, <TokenType.BIGNUM: 109>, <TokenType.INT128: 110>, <TokenType.UINT128: 111>, <TokenType.INT256: 112>, <TokenType.UINT256: 113>, <TokenType.FLOAT: 114>, <TokenType.DOUBLE: 115>, <TokenType.UDOUBLE: 116>, <TokenType.DECIMAL: 117>, <TokenType.DECIMAL32: 118>, <TokenType.DECIMAL64: 119>, <TokenType.DECIMAL128: 120>, <TokenType.DECIMAL256: 121>, <TokenType.DECFLOAT: 122>, <TokenType.UDECIMAL: 123>, <TokenType.BIGDECIMAL: 124>, <TokenType.CHAR: 125>, <TokenType.NCHAR: 126>, <TokenType.VARCHAR: 127>, <TokenType.NVARCHAR: 128>, <TokenType.BPCHAR: 129>, <TokenType.TEXT: 130>, <TokenType.MEDIUMTEXT: 131>, <TokenType.LONGTEXT: 132>, <TokenType.BLOB: 133>, <TokenType.MEDIUMBLOB: 134>, <TokenType.LONGBLOB: 135>, <TokenType.TINYBLOB: 136>, <TokenType.TINYTEXT: 137>, <TokenType.NAME: 138>, <TokenType.BINARY: 139>, <TokenType.VARBINARY: 140>, <TokenType.JSON: 141>, <TokenType.JSONB: 142>, <TokenType.TIME: 143>, <TokenType.TIMETZ: 144>, <TokenType.TIME_NS: 145>, <TokenType.TIMESTAMP: 146>, <TokenType.TIMESTAMPTZ: 147>, <TokenType.TIMESTAMPLTZ: 148>, <TokenType.TIMESTAMPNTZ: 149>, <TokenType.TIMESTAMP_S: 150>, <TokenType.TIMESTAMP_MS: 151>, <TokenType.TIMESTAMP_NS: 152>, <TokenType.DATETIME: 153>, <TokenType.DATETIME2: 154>, <TokenType.DATETIME64: 155>, <TokenType.SMALLDATETIME: 156>, <TokenType.DATE: 157>, <TokenType.DATE32: 158>, <TokenType.INT4RANGE: 159>, <TokenType.INT4MULTIRANGE: 160>, <TokenType.INT8RANGE: 161>, <TokenType.INT8MULTIRANGE: 162>, <TokenType.NUMRANGE: 163>, <TokenType.NUMMULTIRANGE: 164>, <TokenType.TSRANGE: 165>, <TokenType.TSMULTIRANGE: 166>, <TokenType.TSTZRANGE: 167>, <TokenType.TSTZMULTIRANGE: 168>, <TokenType.DATERANGE: 169>, <TokenType.DATEMULTIRANGE: 170>, <TokenType.UUID: 171>, <TokenType.GEOGRAPHY: 172>, <TokenType.GEOGRAPHYPOINT: 173>, <TokenType.NULLABLE: 174>, <TokenType.GEOMETRY: 175>, <TokenType.POINT: 176>, <TokenType.RING: 177>, <TokenType.LINESTRING: 178>, <TokenType.LOCALTIME: 179>, <TokenType.LOCALTIMESTAMP: 180>, <TokenType.MULTILINESTRING: 182>, <TokenType.POLYGON: 183>, <TokenType.MULTIPOLYGON: 184>, <TokenType.HLLSKETCH: 185>, <TokenType.HSTORE: 186>, <TokenType.SUPER: 187>, <TokenType.SERIAL: 188>, <TokenType.SMALLSERIAL: 189>, <TokenType.BIGSERIAL: 190>, <TokenType.XML: 191>, <TokenType.YEAR: 192>, <TokenType.USERDEFINED: 193>, <TokenType.MONEY: 194>, <TokenType.SMALLMONEY: 195>, <TokenType.ROWVERSION: 196>, <TokenType.IMAGE: 197>, <TokenType.VARIANT: 198>, <TokenType.OBJECT: 199>, <TokenType.INET: 200>, <TokenType.IPADDRESS: 201>, <TokenType.IPPREFIX: 202>, <TokenType.IPV4: 203>, <TokenType.IPV6: 204>, <TokenType.ENUM: 205>, <TokenType.ENUM8: 206>, <TokenType.ENUM16: 207>, <TokenType.FIXEDSTRING: 208>, <TokenType.LOWCARDINALITY: 209>, <TokenType.NESTED: 210>, <TokenType.AGGREGATEFUNCTION: 211>, <TokenType.SIMPLEAGGREGATEFUNCTION: 212>, <TokenType.TDIGEST: 213>, <TokenType.UNKNOWN: 214>, <TokenType.VECTOR: 215>, <TokenType.DYNAMIC: 216>, <TokenType.VOID: 217>, <TokenType.ALL: 220>, <TokenType.ANTI: 221>, <TokenType.ANY: 222>, <TokenType.APPLY: 223>, <TokenType.ARRAY: 224>, <TokenType.ASC: 225>, <TokenType.ASOF: 226>, <TokenType.ATTACH: 227>, <TokenType.AUTO_INCREMENT: 228>, <TokenType.BEGIN: 229>, <TokenType.CACHE: 232>, <TokenType.CASE: 233>, <TokenType.COLLATE: 236>, <TokenType.COMMAND: 237>, <TokenType.COMMENT: 238>, <TokenType.COMMIT: 239>, <TokenType.CONSTRAINT: 241>, <TokenType.COPY: 242>, <TokenType.CUBE: 245>, <TokenType.CURRENT_DATE: 246>, <TokenType.CURRENT_DATETIME: 247>, <TokenType.CURRENT_SCHEMA: 248>, <TokenType.CURRENT_TIME: 249>, <TokenType.CURRENT_TIMESTAMP: 250>, <TokenType.CURRENT_USER: 251>, <TokenType.CURRENT_ROLE: 253>, <TokenType.CURRENT_CATALOG: 254>, <TokenType.DECLARE: 255>, <TokenType.DEFAULT: 256>, <TokenType.DELETE: 257>, <TokenType.DESC: 258>, <TokenType.DESCRIBE: 259>, <TokenType.DETACH: 260>, <TokenType.DICTIONARY: 261>, <TokenType.DIV: 264>, <TokenType.END: 267>, <TokenType.ESCAPE: 268>, <TokenType.EXECUTE: 270>, <TokenType.EXISTS: 271>, <TokenType.FALSE: 272>, <TokenType.FILE: 274>, <TokenType.FILE_FORMAT: 275>, <TokenType.FILTER: 276>, <TokenType.FINAL: 277>, <TokenType.FIRST: 278>, <TokenType.FOREIGN_KEY: 281>, <TokenType.FORMAT: 282>, <TokenType.FULL: 284>, <TokenType.FUNCTION: 285>, <TokenType.GET: 286>, <TokenType.INDEX: 297>, <TokenType.INTERVAL: 304>, <TokenType.IS: 308>, <TokenType.ISNULL: 309>, <TokenType.KEEP: 312>, <TokenType.KILL: 314>, <TokenType.LEFT: 317>, <TokenType.LIKE: 318>, <TokenType.LIMIT: 319>, <TokenType.LIST: 320>, <TokenType.LOAD: 321>, <TokenType.LOCK: 322>, <TokenType.MAP: 323>, <TokenType.MATCH: 324>, <TokenType.MERGE: 328>, <TokenType.MODEL: 330>, <TokenType.NATURAL: 331>, <TokenType.NEXT: 332>, <TokenType.NOTHING: 333>, <TokenType.NULL: 335>, <TokenType.OBJECT_IDENTIFIER: 336>, <TokenType.OFFSET: 337>, <TokenType.OPERATOR: 340>, <TokenType.ORDINALITY: 344>, <TokenType.OUT: 345>, <TokenType.INOUT: 346>, <TokenType.OVER: 348>, <TokenType.OVERLAPS: 349>, <TokenType.OVERWRITE: 350>, <TokenType.PARTITION: 352>, <TokenType.PERCENT: 354>, <TokenType.PIVOT: 355>, <TokenType.PRAGMA: 360>, <TokenType.PROCEDURE: 363>, <TokenType.PROJECTION: 365>, <TokenType.PSEUDO_TYPE: 366>, <TokenType.PUT: 367>, <TokenType.RANGE: 371>, <TokenType.RECURSIVE: 372>, <TokenType.REFRESH: 373>, <TokenType.RENAME: 374>, <TokenType.REPLACE: 375>, <TokenType.REFERENCES: 378>, <TokenType.RIGHT: 379>, <TokenType.ROLLUP: 383>, <TokenType.ROW: 384>, <TokenType.ROWS: 385>, <TokenType.SEMI: 388>, <TokenType.SEQUENCE: 390>, <TokenType.SET: 392>, <TokenType.SETTINGS: 393>, <TokenType.SHOW: 394>, <TokenType.SOME: 396>, <TokenType.STORAGE_INTEGRATION: 401>, <TokenType.STRAIGHT_JOIN: 402>, <TokenType.STRUCT: 403>, <TokenType.TAG: 406>, <TokenType.TEMPORARY: 407>, <TokenType.TOP: 408>, <TokenType.TRUE: 410>, <TokenType.TRUNCATE: 411>, <TokenType.TRIGGER: 412>, <TokenType.TYPE: 413>, <TokenType.UNNEST: 417>, <TokenType.UNPIVOT: 418>, <TokenType.UPDATE: 419>, <TokenType.USE: 420>, <TokenType.VIEW: 424>, <TokenType.SEMANTIC_VIEW: 425>, <TokenType.VOLATILE: 426>, <TokenType.WINDOW: 430>, <TokenType.UNIQUE: 432>, <TokenType.SINK: 437>, <TokenType.SOURCE: 438>, <TokenType.ANALYZE: 439>, <TokenType.NAMESPACE: 440>, <TokenType.EXPORT: 441>}
AGG_FUNC_MAPPING: ClassVar = {'sumCountSimpleState': ('sumCount', 'SimpleState'), 'uniqSimpleState': ('uniq', 'SimpleState'), 'windowFunnelSimpleState': ('windowFunnel', 'SimpleState'), 'quantileInterpolatedWeightedSimpleState': ('quantileInterpolatedWeighted', 'SimpleState'), 'stddevSampSimpleState': ('stddevSamp', 'SimpleState'), 'boundingRatioSimpleState': ('boundingRatio', 'SimpleState'), 'groupBitAndSimpleState': ('groupBitAnd', 'SimpleState'), 'quantileTimingWeightedSimpleState': ('quantileTimingWeighted', 'SimpleState'), 'quantileGKSimpleState': ('quantileGK', 'SimpleState'), 'corrSimpleState': ('corr', 'SimpleState'), 'uniqThetaSimpleState': ('uniqTheta', 'SimpleState'), 'exponentialMovingAverageSimpleState': ('exponentialMovingAverage', 'SimpleState'), 'anyHeavySimpleState': ('anyHeavy', 'SimpleState'), 'sumWithOverflowSimpleState': ('sumWithOverflow', 'SimpleState'), 'groupArraySampleSimpleState': ('groupArraySample', 'SimpleState'), 'maxIntersectionsSimpleState': ('maxIntersections', 'SimpleState'), 'contingencySimpleState': ('contingency', 'SimpleState'), 'uniqExactSimpleState': ('uniqExact', 'SimpleState'), 'anyLastSimpleState': ('anyLast', 'SimpleState'), 'deltaSumSimpleState': ('deltaSum', 'SimpleState'), 'covarPopSimpleState': ('covarPop', 'SimpleState'), 'minMapSimpleState': ('minMap', 'SimpleState'), 'uniqCombined64SimpleState': ('uniqCombined64', 'SimpleState'), 'quantileTDigestSimpleState': ('quantileTDigest', 'SimpleState'), 'sparkBarSimpleState': ('sparkBar', 'SimpleState'), 'maxMapSimpleState': ('maxMap', 'SimpleState'), 'groupArraySimpleState': ('groupArray', 'SimpleState'), 'maxSimpleState': ('max', 'SimpleState'), 'topKWeightedSimpleState': ('topKWeighted', 'SimpleState'), 'first_valueSimpleState': ('first_value', 'SimpleState'), 'quantilesGKSimpleState': ('quantilesGK', 'SimpleState'), 'quantileExactHighSimpleState': ('quantileExactHigh', 'SimpleState'), 'countSimpleState': ('count', 'SimpleState'), 'groupArrayMovingSumSimpleState': ('groupArrayMovingSum', 'SimpleState'), 'retentionSimpleState': ('retention', 'SimpleState'), 'medianSimpleState': ('median', 'SimpleState'), 'cramersVBiasCorrectedSimpleState': ('cramersVBiasCorrected', 'SimpleState'), 'quantileExactInclusiveSimpleState': ('quantileExactInclusive', 'SimpleState'), 'entropySimpleState': ('entropy', 'SimpleState'), 'uniqCombinedSimpleState': ('uniqCombined', 'SimpleState'), 'approx_top_sumSimpleState': ('approx_top_sum', 'SimpleState'), 'skewPopSimpleState': ('skewPop', 'SimpleState'), 'quantilesTimingWeightedSimpleState': ('quantilesTimingWeighted', 'SimpleState'), 'avgSimpleState': ('avg', 'SimpleState'), 'avgWeightedSimpleState': ('avgWeighted', 'SimpleState'), 'sequenceCountSimpleState': ('sequenceCount', 'SimpleState'), 'groupBitXorSimpleState': ('groupBitXor', 'SimpleState'), 'histogramSimpleState': ('histogram', 'SimpleState'), 'quantilesBFloat16WeightedSimpleState': ('quantilesBFloat16Weighted', 'SimpleState'), 'kurtSampSimpleState': ('kurtSamp', 'SimpleState'), 'maxIntersectionsPositionSimpleState': ('maxIntersectionsPosition', 'SimpleState'), 'groupBitmapXorSimpleState': ('groupBitmapXor', 'SimpleState'), 'argMaxSimpleState': ('argMax', 'SimpleState'), 'groupConcatSimpleState': ('groupConcat', 'SimpleState'), 'last_valueSimpleState': ('last_value', 'SimpleState'), 'simpleLinearRegressionSimpleState': ('simpleLinearRegression', 'SimpleState'), 'quantilesTDigestSimpleState': ('quantilesTDigest', 'SimpleState'), 'quantilesInterpolatedWeightedSimpleState': ('quantilesInterpolatedWeighted', 'SimpleState'), 'intervalLengthSumSimpleState': ('intervalLengthSum', 'SimpleState'), 'quantileExactSimpleState': ('quantileExact', 'SimpleState'), 'deltaSumTimestampSimpleState': ('deltaSumTimestamp', 'SimpleState'), 'argMinSimpleState': ('argMin', 'SimpleState'), 'exponentialTimeDecayedAvgSimpleState': ('exponentialTimeDecayedAvg', 'SimpleState'), 'groupBitmapAndSimpleState': ('groupBitmapAnd', 'SimpleState'), 'uniqHLL12SimpleState': ('uniqHLL12', 'SimpleState'), 'stochasticLogisticRegressionSimpleState': ('stochasticLogisticRegression', 'SimpleState'), 'quantilesTDigestWeightedSimpleState': ('quantilesTDigestWeighted', 'SimpleState'), 'quantilesSimpleState': ('quantiles', 'SimpleState'), 'quantilesTimingSimpleState': ('quantilesTiming', 'SimpleState'), 'quantileBFloat16WeightedSimpleState': ('quantileBFloat16Weighted', 'SimpleState'), 'welchTTestSimpleState': ('welchTTest', 'SimpleState'), 'stochasticLinearRegressionSimpleState': ('stochasticLinearRegression', 'SimpleState'), 'quantilesBFloat16SimpleState': ('quantilesBFloat16', 'SimpleState'), 'varSampSimpleState': ('varSamp', 'SimpleState'), 'groupArrayLastSimpleState': ('groupArrayLast', 'SimpleState'), 'uniqUpToSimpleState': ('uniqUpTo', 'SimpleState'), 'quantileTimingSimpleState': ('quantileTiming', 'SimpleState'), 'sumSimpleState': ('sum', 'SimpleState'), 'kurtPopSimpleState': ('kurtPop', 'SimpleState'), 'sequenceMatchSimpleState': ('sequenceMatch', 'SimpleState'), 'sumMapSimpleState': ('sumMap', 'SimpleState'), 'topKSimpleState': ('topK', 'SimpleState'), 'sumKahanSimpleState': ('sumKahan', 'SimpleState'), 'groupArrayMovingAvgSimpleState': ('groupArrayMovingAvg', 'SimpleState'), 'groupBitmapSimpleState': ('groupBitmap', 'SimpleState'), 'rankCorrSimpleState': ('rankCorr', 'SimpleState'), 'mannWhitneyUTestSimpleState': ('mannWhitneyUTest', 'SimpleState'), 'categoricalInformationValueSimpleState': ('categoricalInformationValue', 'SimpleState'), 'cramersVSimpleState': ('cramersV', 'SimpleState'), 'sequenceNextNodeSimpleState': ('sequenceNextNode', 'SimpleState'), 'quantileDeterministicSimpleState': ('quantileDeterministic', 'SimpleState'), 'quantilesExactExclusiveSimpleState': ('quantilesExactExclusive', 'SimpleState'), 'quantileSimpleState': ('quantile', 'SimpleState'), 'quantileBFloat16SimpleState': ('quantileBFloat16', 'SimpleState'), 'kolmogorovSmirnovTestSimpleState': ('kolmogorovSmirnovTest', 'SimpleState'), 'varPopSimpleState': ('varPop', 'SimpleState'), 'skewSampSimpleState': ('skewSamp', 'SimpleState'), 'theilsUSimpleState': ('theilsU', 'SimpleState'), 'meanZTestSimpleState': ('meanZTest', 'SimpleState'), 'groupArrayInsertAtSimpleState': ('groupArrayInsertAt', 'SimpleState'), 'covarSampSimpleState': ('covarSamp', 'SimpleState'), 'groupBitmapOrSimpleState': ('groupBitmapOr', 'SimpleState'), 'studentTTestSimpleState': ('studentTTest', 'SimpleState'), 'groupUniqArraySimpleState': ('groupUniqArray', 'SimpleState'), 'largestTriangleThreeBucketsSimpleState': ('largestTriangleThreeBuckets', 'SimpleState'), 'quantileExactLowSimpleState': ('quantileExactLow', 'SimpleState'), 'anySimpleState': ('any', 'SimpleState'), 'quantilesExactHighSimpleState': ('quantilesExactHigh', 'SimpleState'), 'stddevPopSimpleState': ('stddevPop', 'SimpleState'), 'quantilesExactWeightedSimpleState': ('quantilesExactWeighted', 'SimpleState'), 'quantilesExactSimpleState': ('quantilesExact', 'SimpleState'), 'quantileTDigestWeightedSimpleState': ('quantileTDigestWeighted', 'SimpleState'), 'quantilesExactLowSimpleState': ('quantilesExactLow', 'SimpleState'), 'quantilesDeterministicSimpleState': ('quantilesDeterministic', 'SimpleState'), 'minSimpleState': ('min', 'SimpleState'), 'groupBitOrSimpleState': ('groupBitOr', 'SimpleState'), 'quantileExactWeightedSimpleState': ('quantileExactWeighted', 'SimpleState'), 'sumCountMergeState': ('sumCount', 'MergeState'), 'uniqMergeState': ('uniq', 'MergeState'), 'windowFunnelMergeState': ('windowFunnel', 'MergeState'), 'quantileInterpolatedWeightedMergeState': ('quantileInterpolatedWeighted', 'MergeState'), 'stddevSampMergeState': ('stddevSamp', 'MergeState'), 'boundingRatioMergeState': ('boundingRatio', 'MergeState'), 'groupBitAndMergeState': ('groupBitAnd', 'MergeState'), 'quantileTimingWeightedMergeState': ('quantileTimingWeighted', 'MergeState'), 'quantileGKMergeState': ('quantileGK', 'MergeState'), 'corrMergeState': ('corr', 'MergeState'), 'uniqThetaMergeState': ('uniqTheta', 'MergeState'), 'exponentialMovingAverageMergeState': ('exponentialMovingAverage', 'MergeState'), 'anyHeavyMergeState': ('anyHeavy', 'MergeState'), 'sumWithOverflowMergeState': ('sumWithOverflow', 'MergeState'), 'groupArraySampleMergeState': ('groupArraySample', 'MergeState'), 'maxIntersectionsMergeState': ('maxIntersections', 'MergeState'), 'contingencyMergeState': ('contingency', 'MergeState'), 'uniqExactMergeState': ('uniqExact', 'MergeState'), 'anyLastMergeState': ('anyLast', 'MergeState'), 'deltaSumMergeState': ('deltaSum', 'MergeState'), 'covarPopMergeState': ('covarPop', 'MergeState'), 'minMapMergeState': ('minMap', 'MergeState'), 'uniqCombined64MergeState': ('uniqCombined64', 'MergeState'), 'quantileTDigestMergeState': ('quantileTDigest', 'MergeState'), 'sparkBarMergeState': ('sparkBar', 'MergeState'), 'maxMapMergeState': ('maxMap', 'MergeState'), 'groupArrayMergeState': ('groupArray', 'MergeState'), 'maxMergeState': ('max', 'MergeState'), 'topKWeightedMergeState': ('topKWeighted', 'MergeState'), 'first_valueMergeState': ('first_value', 'MergeState'), 'quantilesGKMergeState': ('quantilesGK', 'MergeState'), 'quantileExactHighMergeState': ('quantileExactHigh', 'MergeState'), 'countMergeState': ('count', 'MergeState'), 'groupArrayMovingSumMergeState': ('groupArrayMovingSum', 'MergeState'), 'retentionMergeState': ('retention', 'MergeState'), 'medianMergeState': ('median', 'MergeState'), 'cramersVBiasCorrectedMergeState': ('cramersVBiasCorrected', 'MergeState'), 'quantileExactInclusiveMergeState': ('quantileExactInclusive', 'MergeState'), 'entropyMergeState': ('entropy', 'MergeState'), 'uniqCombinedMergeState': ('uniqCombined', 'MergeState'), 'approx_top_sumMergeState': ('approx_top_sum', 'MergeState'), 'skewPopMergeState': ('skewPop', 'MergeState'), 'quantilesTimingWeightedMergeState': ('quantilesTimingWeighted', 'MergeState'), 'avgMergeState': ('avg', 'MergeState'), 'avgWeightedMergeState': ('avgWeighted', 'MergeState'), 'sequenceCountMergeState': ('sequenceCount', 'MergeState'), 'groupBitXorMergeState': ('groupBitXor', 'MergeState'), 'histogramMergeState': ('histogram', 'MergeState'), 'quantilesBFloat16WeightedMergeState': ('quantilesBFloat16Weighted', 'MergeState'), 'kurtSampMergeState': ('kurtSamp', 'MergeState'), 'maxIntersectionsPositionMergeState': ('maxIntersectionsPosition', 'MergeState'), 'groupBitmapXorMergeState': ('groupBitmapXor', 'MergeState'), 'argMaxMergeState': ('argMax', 'MergeState'), 'groupConcatMergeState': ('groupConcat', 'MergeState'), 'last_valueMergeState': ('last_value', 'MergeState'), 'simpleLinearRegressionMergeState': ('simpleLinearRegression', 'MergeState'), 'quantilesTDigestMergeState': ('quantilesTDigest', 'MergeState'), 'quantilesInterpolatedWeightedMergeState': ('quantilesInterpolatedWeighted', 'MergeState'), 'intervalLengthSumMergeState': ('intervalLengthSum', 'MergeState'), 'quantileExactMergeState': ('quantileExact', 'MergeState'), 'deltaSumTimestampMergeState': ('deltaSumTimestamp', 'MergeState'), 'argMinMergeState': ('argMin', 'MergeState'), 'exponentialTimeDecayedAvgMergeState': ('exponentialTimeDecayedAvg', 'MergeState'), 'groupBitmapAndMergeState': ('groupBitmapAnd', 'MergeState'), 'uniqHLL12MergeState': ('uniqHLL12', 'MergeState'), 'stochasticLogisticRegressionMergeState': ('stochasticLogisticRegression', 'MergeState'), 'quantilesTDigestWeightedMergeState': ('quantilesTDigestWeighted', 'MergeState'), 'quantilesMergeState': ('quantiles', 'MergeState'), 'quantilesTimingMergeState': ('quantilesTiming', 'MergeState'), 'quantileBFloat16WeightedMergeState': ('quantileBFloat16Weighted', 'MergeState'), 'welchTTestMergeState': ('welchTTest', 'MergeState'), 'stochasticLinearRegressionMergeState': ('stochasticLinearRegression', 'MergeState'), 'quantilesBFloat16MergeState': ('quantilesBFloat16', 'MergeState'), 'varSampMergeState': ('varSamp', 'MergeState'), 'groupArrayLastMergeState': ('groupArrayLast', 'MergeState'), 'uniqUpToMergeState': ('uniqUpTo', 'MergeState'), 'quantileTimingMergeState': ('quantileTiming', 'MergeState'), 'sumMergeState': ('sum', 'MergeState'), 'kurtPopMergeState': ('kurtPop', 'MergeState'), 'sequenceMatchMergeState': ('sequenceMatch', 'MergeState'), 'sumMapMergeState': ('sumMap', 'MergeState'), 'topKMergeState': ('topK', 'MergeState'), 'sumKahanMergeState': ('sumKahan', 'MergeState'), 'groupArrayMovingAvgMergeState': ('groupArrayMovingAvg', 'MergeState'), 'groupBitmapMergeState': ('groupBitmap', 'MergeState'), 'rankCorrMergeState': ('rankCorr', 'MergeState'), 'mannWhitneyUTestMergeState': ('mannWhitneyUTest', 'MergeState'), 'categoricalInformationValueMergeState': ('categoricalInformationValue', 'MergeState'), 'cramersVMergeState': ('cramersV', 'MergeState'), 'sequenceNextNodeMergeState': ('sequenceNextNode', 'MergeState'), 'quantileDeterministicMergeState': ('quantileDeterministic', 'MergeState'), 'quantilesExactExclusiveMergeState': ('quantilesExactExclusive', 'MergeState'), 'quantileMergeState': ('quantile', 'MergeState'), 'quantileBFloat16MergeState': ('quantileBFloat16', 'MergeState'), 'kolmogorovSmirnovTestMergeState': ('kolmogorovSmirnovTest', 'MergeState'), 'varPopMergeState': ('varPop', 'MergeState'), 'skewSampMergeState': ('skewSamp', 'MergeState'), 'theilsUMergeState': ('theilsU', 'MergeState'), 'meanZTestMergeState': ('meanZTest', 'MergeState'), 'groupArrayInsertAtMergeState': ('groupArrayInsertAt', 'MergeState'), 'covarSampMergeState': ('covarSamp', 'MergeState'), 'groupBitmapOrMergeState': ('groupBitmapOr', 'MergeState'), 'studentTTestMergeState': ('studentTTest', 'MergeState'), 'groupUniqArrayMergeState': ('groupUniqArray', 'MergeState'), 'largestTriangleThreeBucketsMergeState': ('largestTriangleThreeBuckets', 'MergeState'), 'quantileExactLowMergeState': ('quantileExactLow', 'MergeState'), 'anyMergeState': ('any', 'MergeState'), 'quantilesExactHighMergeState': ('quantilesExactHigh', 'MergeState'), 'stddevPopMergeState': ('stddevPop', 'MergeState'), 'quantilesExactWeightedMergeState': ('quantilesExactWeighted', 'MergeState'), 'quantilesExactMergeState': ('quantilesExact', 'MergeState'), 'quantileTDigestWeightedMergeState': ('quantileTDigestWeighted', 'MergeState'), 'quantilesExactLowMergeState': ('quantilesExactLow', 'MergeState'), 'quantilesDeterministicMergeState': ('quantilesDeterministic', 'MergeState'), 'minMergeState': ('min', 'MergeState'), 'groupBitOrMergeState': ('groupBitOr', 'MergeState'), 'quantileExactWeightedMergeState': ('quantileExactWeighted', 'MergeState'), 'sumCountOrDefault': ('sumCount', 'OrDefault'), 'uniqOrDefault': ('uniq', 'OrDefault'), 'windowFunnelOrDefault': ('windowFunnel', 'OrDefault'), 'quantileInterpolatedWeightedOrDefault': ('quantileInterpolatedWeighted', 'OrDefault'), 'stddevSampOrDefault': ('stddevSamp', 'OrDefault'), 'boundingRatioOrDefault': ('boundingRatio', 'OrDefault'), 'groupBitAndOrDefault': ('groupBitAnd', 'OrDefault'), 'quantileTimingWeightedOrDefault': ('quantileTimingWeighted', 'OrDefault'), 'quantileGKOrDefault': ('quantileGK', 'OrDefault'), 'corrOrDefault': ('corr', 'OrDefault'), 'uniqThetaOrDefault': ('uniqTheta', 'OrDefault'), 'exponentialMovingAverageOrDefault': ('exponentialMovingAverage', 'OrDefault'), 'anyHeavyOrDefault': ('anyHeavy', 'OrDefault'), 'sumWithOverflowOrDefault': ('sumWithOverflow', 'OrDefault'), 'groupArraySampleOrDefault': ('groupArraySample', 'OrDefault'), 'maxIntersectionsOrDefault': ('maxIntersections', 'OrDefault'), 'contingencyOrDefault': ('contingency', 'OrDefault'), 'uniqExactOrDefault': ('uniqExact', 'OrDefault'), 'anyLastOrDefault': ('anyLast', 'OrDefault'), 'deltaSumOrDefault': ('deltaSum', 'OrDefault'), 'covarPopOrDefault': ('covarPop', 'OrDefault'), 'minMapOrDefault': ('minMap', 'OrDefault'), 'uniqCombined64OrDefault': ('uniqCombined64', 'OrDefault'), 'quantileTDigestOrDefault': ('quantileTDigest', 'OrDefault'), 'sparkBarOrDefault': ('sparkBar', 'OrDefault'), 'maxMapOrDefault': ('maxMap', 'OrDefault'), 'groupArrayOrDefault': ('groupArray', 'OrDefault'), 'maxOrDefault': ('max', 'OrDefault'), 'topKWeightedOrDefault': ('topKWeighted', 'OrDefault'), 'first_valueOrDefault': ('first_value', 'OrDefault'), 'quantilesGKOrDefault': ('quantilesGK', 'OrDefault'), 'quantileExactHighOrDefault': ('quantileExactHigh', 'OrDefault'), 'countOrDefault': ('count', 'OrDefault'), 'groupArrayMovingSumOrDefault': ('groupArrayMovingSum', 'OrDefault'), 'retentionOrDefault': ('retention', 'OrDefault'), 'medianOrDefault': ('median', 'OrDefault'), 'cramersVBiasCorrectedOrDefault': ('cramersVBiasCorrected', 'OrDefault'), 'quantileExactInclusiveOrDefault': ('quantileExactInclusive', 'OrDefault'), 'entropyOrDefault': ('entropy', 'OrDefault'), 'uniqCombinedOrDefault': ('uniqCombined', 'OrDefault'), 'approx_top_sumOrDefault': ('approx_top_sum', 'OrDefault'), 'skewPopOrDefault': ('skewPop', 'OrDefault'), 'quantilesTimingWeightedOrDefault': ('quantilesTimingWeighted', 'OrDefault'), 'avgOrDefault': ('avg', 'OrDefault'), 'avgWeightedOrDefault': ('avgWeighted', 'OrDefault'), 'sequenceCountOrDefault': ('sequenceCount', 'OrDefault'), 'groupBitXorOrDefault': ('groupBitXor', 'OrDefault'), 'histogramOrDefault': ('histogram', 'OrDefault'), 'quantilesBFloat16WeightedOrDefault': ('quantilesBFloat16Weighted', 'OrDefault'), 'kurtSampOrDefault': ('kurtSamp', 'OrDefault'), 'maxIntersectionsPositionOrDefault': ('maxIntersectionsPosition', 'OrDefault'), 'groupBitmapXorOrDefault': ('groupBitmapXor', 'OrDefault'), 'argMaxOrDefault': ('argMax', 'OrDefault'), 'groupConcatOrDefault': ('groupConcat', 'OrDefault'), 'last_valueOrDefault': ('last_value', 'OrDefault'), 'simpleLinearRegressionOrDefault': ('simpleLinearRegression', 'OrDefault'), 'quantilesTDigestOrDefault': ('quantilesTDigest', 'OrDefault'), 'quantilesInterpolatedWeightedOrDefault': ('quantilesInterpolatedWeighted', 'OrDefault'), 'intervalLengthSumOrDefault': ('intervalLengthSum', 'OrDefault'), 'quantileExactOrDefault': ('quantileExact', 'OrDefault'), 'deltaSumTimestampOrDefault': ('deltaSumTimestamp', 'OrDefault'), 'argMinOrDefault': ('argMin', 'OrDefault'), 'exponentialTimeDecayedAvgOrDefault': ('exponentialTimeDecayedAvg', 'OrDefault'), 'groupBitmapAndOrDefault': ('groupBitmapAnd', 'OrDefault'), 'uniqHLL12OrDefault': ('uniqHLL12', 'OrDefault'), 'stochasticLogisticRegressionOrDefault': ('stochasticLogisticRegression', 'OrDefault'), 'quantilesTDigestWeightedOrDefault': ('quantilesTDigestWeighted', 'OrDefault'), 'quantilesOrDefault': ('quantiles', 'OrDefault'), 'quantilesTimingOrDefault': ('quantilesTiming', 'OrDefault'), 'quantileBFloat16WeightedOrDefault': ('quantileBFloat16Weighted', 'OrDefault'), 'welchTTestOrDefault': ('welchTTest', 'OrDefault'), 'stochasticLinearRegressionOrDefault': ('stochasticLinearRegression', 'OrDefault'), 'quantilesBFloat16OrDefault': ('quantilesBFloat16', 'OrDefault'), 'varSampOrDefault': ('varSamp', 'OrDefault'), 'groupArrayLastOrDefault': ('groupArrayLast', 'OrDefault'), 'uniqUpToOrDefault': ('uniqUpTo', 'OrDefault'), 'quantileTimingOrDefault': ('quantileTiming', 'OrDefault'), 'sumOrDefault': ('sum', 'OrDefault'), 'kurtPopOrDefault': ('kurtPop', 'OrDefault'), 'sequenceMatchOrDefault': ('sequenceMatch', 'OrDefault'), 'sumMapOrDefault': ('sumMap', 'OrDefault'), 'topKOrDefault': ('topK', 'OrDefault'), 'sumKahanOrDefault': ('sumKahan', 'OrDefault'), 'groupArrayMovingAvgOrDefault': ('groupArrayMovingAvg', 'OrDefault'), 'groupBitmapOrDefault': ('groupBitmap', 'OrDefault'), 'rankCorrOrDefault': ('rankCorr', 'OrDefault'), 'mannWhitneyUTestOrDefault': ('mannWhitneyUTest', 'OrDefault'), 'categoricalInformationValueOrDefault': ('categoricalInformationValue', 'OrDefault'), 'cramersVOrDefault': ('cramersV', 'OrDefault'), 'sequenceNextNodeOrDefault': ('sequenceNextNode', 'OrDefault'), 'quantileDeterministicOrDefault': ('quantileDeterministic', 'OrDefault'), 'quantilesExactExclusiveOrDefault': ('quantilesExactExclusive', 'OrDefault'), 'quantileOrDefault': ('quantile', 'OrDefault'), 'quantileBFloat16OrDefault': ('quantileBFloat16', 'OrDefault'), 'kolmogorovSmirnovTestOrDefault': ('kolmogorovSmirnovTest', 'OrDefault'), 'varPopOrDefault': ('varPop', 'OrDefault'), 'skewSampOrDefault': ('skewSamp', 'OrDefault'), 'theilsUOrDefault': ('theilsU', 'OrDefault'), 'meanZTestOrDefault': ('meanZTest', 'OrDefault'), 'groupArrayInsertAtOrDefault': ('groupArrayInsertAt', 'OrDefault'), 'covarSampOrDefault': ('covarSamp', 'OrDefault'), 'groupBitmapOrOrDefault': ('groupBitmapOr', 'OrDefault'), 'studentTTestOrDefault': ('studentTTest', 'OrDefault'), 'groupUniqArrayOrDefault': ('groupUniqArray', 'OrDefault'), 'largestTriangleThreeBucketsOrDefault': ('largestTriangleThreeBuckets', 'OrDefault'), 'quantileExactLowOrDefault': ('quantileExactLow', 'OrDefault'), 'anyOrDefault': ('any', 'OrDefault'), 'quantilesExactHighOrDefault': ('quantilesExactHigh', 'OrDefault'), 'stddevPopOrDefault': ('stddevPop', 'OrDefault'), 'quantilesExactWeightedOrDefault': ('quantilesExactWeighted', 'OrDefault'), 'quantilesExactOrDefault': ('quantilesExact', 'OrDefault'), 'quantileTDigestWeightedOrDefault': ('quantileTDigestWeighted', 'OrDefault'), 'quantilesExactLowOrDefault': ('quantilesExactLow', 'OrDefault'), 'quantilesDeterministicOrDefault': ('quantilesDeterministic', 'OrDefault'), 'minOrDefault': ('min', 'OrDefault'), 'groupBitOrOrDefault': ('groupBitOr', 'OrDefault'), 'quantileExactWeightedOrDefault': ('quantileExactWeighted', 'OrDefault'), 'sumCountDistinct': ('sumCount', 'Distinct'), 'uniqDistinct': ('uniq', 'Distinct'), 'windowFunnelDistinct': ('windowFunnel', 'Distinct'), 'quantileInterpolatedWeightedDistinct': ('quantileInterpolatedWeighted', 'Distinct'), 'stddevSampDistinct': ('stddevSamp', 'Distinct'), 'boundingRatioDistinct': ('boundingRatio', 'Distinct'), 'groupBitAndDistinct': ('groupBitAnd', 'Distinct'), 'quantileTimingWeightedDistinct': ('quantileTimingWeighted', 'Distinct'), 'quantileGKDistinct': ('quantileGK', 'Distinct'), 'corrDistinct': ('corr', 'Distinct'), 'uniqThetaDistinct': ('uniqTheta', 'Distinct'), 'exponentialMovingAverageDistinct': ('exponentialMovingAverage', 'Distinct'), 'anyHeavyDistinct': ('anyHeavy', 'Distinct'), 'sumWithOverflowDistinct': ('sumWithOverflow', 'Distinct'), 'groupArraySampleDistinct': ('groupArraySample', 'Distinct'), 'maxIntersectionsDistinct': ('maxIntersections', 'Distinct'), 'contingencyDistinct': ('contingency', 'Distinct'), 'uniqExactDistinct': ('uniqExact', 'Distinct'), 'anyLastDistinct': ('anyLast', 'Distinct'), 'deltaSumDistinct': ('deltaSum', 'Distinct'), 'covarPopDistinct': ('covarPop', 'Distinct'), 'minMapDistinct': ('minMap', 'Distinct'), 'uniqCombined64Distinct': ('uniqCombined64', 'Distinct'), 'quantileTDigestDistinct': ('quantileTDigest', 'Distinct'), 'sparkBarDistinct': ('sparkBar', 'Distinct'), 'maxMapDistinct': ('maxMap', 'Distinct'), 'groupArrayDistinct': ('groupArray', 'Distinct'), 'maxDistinct': ('max', 'Distinct'), 'topKWeightedDistinct': ('topKWeighted', 'Distinct'), 'first_valueDistinct': ('first_value', 'Distinct'), 'quantilesGKDistinct': ('quantilesGK', 'Distinct'), 'quantileExactHighDistinct': ('quantileExactHigh', 'Distinct'), 'countDistinct': ('count', 'Distinct'), 'groupArrayMovingSumDistinct': ('groupArrayMovingSum', 'Distinct'), 'retentionDistinct': ('retention', 'Distinct'), 'medianDistinct': ('median', 'Distinct'), 'cramersVBiasCorrectedDistinct': ('cramersVBiasCorrected', 'Distinct'), 'quantileExactInclusiveDistinct': ('quantileExactInclusive', 'Distinct'), 'entropyDistinct': ('entropy', 'Distinct'), 'uniqCombinedDistinct': ('uniqCombined', 'Distinct'), 'approx_top_sumDistinct': ('approx_top_sum', 'Distinct'), 'skewPopDistinct': ('skewPop', 'Distinct'), 'quantilesTimingWeightedDistinct': ('quantilesTimingWeighted', 'Distinct'), 'avgDistinct': ('avg', 'Distinct'), 'avgWeightedDistinct': ('avgWeighted', 'Distinct'), 'sequenceCountDistinct': ('sequenceCount', 'Distinct'), 'groupBitXorDistinct': ('groupBitXor', 'Distinct'), 'histogramDistinct': ('histogram', 'Distinct'), 'quantilesBFloat16WeightedDistinct': ('quantilesBFloat16Weighted', 'Distinct'), 'kurtSampDistinct': ('kurtSamp', 'Distinct'), 'maxIntersectionsPositionDistinct': ('maxIntersectionsPosition', 'Distinct'), 'groupBitmapXorDistinct': ('groupBitmapXor', 'Distinct'), 'argMaxDistinct': ('argMax', 'Distinct'), 'groupConcatDistinct': ('groupConcat', 'Distinct'), 'last_valueDistinct': ('last_value', 'Distinct'), 'simpleLinearRegressionDistinct': ('simpleLinearRegression', 'Distinct'), 'quantilesTDigestDistinct': ('quantilesTDigest', 'Distinct'), 'quantilesInterpolatedWeightedDistinct': ('quantilesInterpolatedWeighted', 'Distinct'), 'intervalLengthSumDistinct': ('intervalLengthSum', 'Distinct'), 'quantileExactDistinct': ('quantileExact', 'Distinct'), 'deltaSumTimestampDistinct': ('deltaSumTimestamp', 'Distinct'), 'argMinDistinct': ('argMin', 'Distinct'), 'exponentialTimeDecayedAvgDistinct': ('exponentialTimeDecayedAvg', 'Distinct'), 'groupBitmapAndDistinct': ('groupBitmapAnd', 'Distinct'), 'uniqHLL12Distinct': ('uniqHLL12', 'Distinct'), 'stochasticLogisticRegressionDistinct': ('stochasticLogisticRegression', 'Distinct'), 'quantilesTDigestWeightedDistinct': ('quantilesTDigestWeighted', 'Distinct'), 'quantilesDistinct': ('quantiles', 'Distinct'), 'quantilesTimingDistinct': ('quantilesTiming', 'Distinct'), 'quantileBFloat16WeightedDistinct': ('quantileBFloat16Weighted', 'Distinct'), 'welchTTestDistinct': ('welchTTest', 'Distinct'), 'stochasticLinearRegressionDistinct': ('stochasticLinearRegression', 'Distinct'), 'quantilesBFloat16Distinct': ('quantilesBFloat16', 'Distinct'), 'varSampDistinct': ('varSamp', 'Distinct'), 'groupArrayLastDistinct': ('groupArrayLast', 'Distinct'), 'uniqUpToDistinct': ('uniqUpTo', 'Distinct'), 'quantileTimingDistinct': ('quantileTiming', 'Distinct'), 'sumDistinct': ('sum', 'Distinct'), 'kurtPopDistinct': ('kurtPop', 'Distinct'), 'sequenceMatchDistinct': ('sequenceMatch', 'Distinct'), 'sumMapDistinct': ('sumMap', 'Distinct'), 'topKDistinct': ('topK', 'Distinct'), 'sumKahanDistinct': ('sumKahan', 'Distinct'), 'groupArrayMovingAvgDistinct': ('groupArrayMovingAvg', 'Distinct'), 'groupBitmapDistinct': ('groupBitmap', 'Distinct'), 'rankCorrDistinct': ('rankCorr', 'Distinct'), 'mannWhitneyUTestDistinct': ('mannWhitneyUTest', 'Distinct'), 'categoricalInformationValueDistinct': ('categoricalInformationValue', 'Distinct'), 'cramersVDistinct': ('cramersV', 'Distinct'), 'sequenceNextNodeDistinct': ('sequenceNextNode', 'Distinct'), 'quantileDeterministicDistinct': ('quantileDeterministic', 'Distinct'), 'quantilesExactExclusiveDistinct': ('quantilesExactExclusive', 'Distinct'), 'quantileDistinct': ('quantile', 'Distinct'), 'quantileBFloat16Distinct': ('quantileBFloat16', 'Distinct'), 'kolmogorovSmirnovTestDistinct': ('kolmogorovSmirnovTest', 'Distinct'), 'varPopDistinct': ('varPop', 'Distinct'), 'skewSampDistinct': ('skewSamp', 'Distinct'), 'theilsUDistinct': ('theilsU', 'Distinct'), 'meanZTestDistinct': ('meanZTest', 'Distinct'), 'groupArrayInsertAtDistinct': ('groupArrayInsertAt', 'Distinct'), 'covarSampDistinct': ('covarSamp', 'Distinct'), 'groupBitmapOrDistinct': ('groupBitmapOr', 'Distinct'), 'studentTTestDistinct': ('studentTTest', 'Distinct'), 'groupUniqArrayDistinct': ('groupUniqArray', 'Distinct'), 'largestTriangleThreeBucketsDistinct': ('largestTriangleThreeBuckets', 'Distinct'), 'quantileExactLowDistinct': ('quantileExactLow', 'Distinct'), 'anyDistinct': ('any', 'Distinct'), 'quantilesExactHighDistinct': ('quantilesExactHigh', 'Distinct'), 'stddevPopDistinct': ('stddevPop', 'Distinct'), 'quantilesExactWeightedDistinct': ('quantilesExactWeighted', 'Distinct'), 'quantilesExactDistinct': ('quantilesExact', 'Distinct'), 'quantileTDigestWeightedDistinct': ('quantileTDigestWeighted', 'Distinct'), 'quantilesExactLowDistinct': ('quantilesExactLow', 'Distinct'), 'quantilesDeterministicDistinct': ('quantilesDeterministic', 'Distinct'), 'minDistinct': ('min', 'Distinct'), 'groupBitOrDistinct': ('groupBitOr', 'Distinct'), 'quantileExactWeightedDistinct': ('quantileExactWeighted', 'Distinct'), 'sumCountResample': ('sumCount', 'Resample'), 'uniqResample': ('uniq', 'Resample'), 'windowFunnelResample': ('windowFunnel', 'Resample'), 'quantileInterpolatedWeightedResample': ('quantileInterpolatedWeighted', 'Resample'), 'stddevSampResample': ('stddevSamp', 'Resample'), 'boundingRatioResample': ('boundingRatio', 'Resample'), 'groupBitAndResample': ('groupBitAnd', 'Resample'), 'quantileTimingWeightedResample': ('quantileTimingWeighted', 'Resample'), 'quantileGKResample': ('quantileGK', 'Resample'), 'corrResample': ('corr', 'Resample'), 'uniqThetaResample': ('uniqTheta', 'Resample'), 'exponentialMovingAverageResample': ('exponentialMovingAverage', 'Resample'), 'anyHeavyResample': ('anyHeavy', 'Resample'), 'sumWithOverflowResample': ('sumWithOverflow', 'Resample'), 'groupArraySampleResample': ('groupArraySample', 'Resample'), 'maxIntersectionsResample': ('maxIntersections', 'Resample'), 'contingencyResample': ('contingency', 'Resample'), 'uniqExactResample': ('uniqExact', 'Resample'), 'anyLastResample': ('anyLast', 'Resample'), 'deltaSumResample': ('deltaSum', 'Resample'), 'covarPopResample': ('covarPop', 'Resample'), 'minMapResample': ('minMap', 'Resample'), 'uniqCombined64Resample': ('uniqCombined64', 'Resample'), 'quantileTDigestResample': ('quantileTDigest', 'Resample'), 'sparkBarResample': ('sparkBar', 'Resample'), 'maxMapResample': ('maxMap', 'Resample'), 'groupArrayResample': ('groupArray', 'Resample'), 'maxResample': ('max', 'Resample'), 'topKWeightedResample': ('topKWeighted', 'Resample'), 'first_valueResample': ('first_value', 'Resample'), 'quantilesGKResample': ('quantilesGK', 'Resample'), 'quantileExactHighResample': ('quantileExactHigh', 'Resample'), 'countResample': ('count', 'Resample'), 'groupArrayMovingSumResample': ('groupArrayMovingSum', 'Resample'), 'retentionResample': ('retention', 'Resample'), 'medianResample': ('median', 'Resample'), 'cramersVBiasCorrectedResample': ('cramersVBiasCorrected', 'Resample'), 'quantileExactInclusiveResample': ('quantileExactInclusive', 'Resample'), 'entropyResample': ('entropy', 'Resample'), 'uniqCombinedResample': ('uniqCombined', 'Resample'), 'approx_top_sumResample': ('approx_top_sum', 'Resample'), 'skewPopResample': ('skewPop', 'Resample'), 'quantilesTimingWeightedResample': ('quantilesTimingWeighted', 'Resample'), 'avgResample': ('avg', 'Resample'), 'avgWeightedResample': ('avgWeighted', 'Resample'), 'sequenceCountResample': ('sequenceCount', 'Resample'), 'groupBitXorResample': ('groupBitXor', 'Resample'), 'histogramResample': ('histogram', 'Resample'), 'quantilesBFloat16WeightedResample': ('quantilesBFloat16Weighted', 'Resample'), 'kurtSampResample': ('kurtSamp', 'Resample'), 'maxIntersectionsPositionResample': ('maxIntersectionsPosition', 'Resample'), 'groupBitmapXorResample': ('groupBitmapXor', 'Resample'), 'argMaxResample': ('argMax', 'Resample'), 'groupConcatResample': ('groupConcat', 'Resample'), 'last_valueResample': ('last_value', 'Resample'), 'simpleLinearRegressionResample': ('simpleLinearRegression', 'Resample'), 'quantilesTDigestResample': ('quantilesTDigest', 'Resample'), 'quantilesInterpolatedWeightedResample': ('quantilesInterpolatedWeighted', 'Resample'), 'intervalLengthSumResample': ('intervalLengthSum', 'Resample'), 'quantileExactResample': ('quantileExact', 'Resample'), 'deltaSumTimestampResample': ('deltaSumTimestamp', 'Resample'), 'argMinResample': ('argMin', 'Resample'), 'exponentialTimeDecayedAvgResample': ('exponentialTimeDecayedAvg', 'Resample'), 'groupBitmapAndResample': ('groupBitmapAnd', 'Resample'), 'uniqHLL12Resample': ('uniqHLL12', 'Resample'), 'stochasticLogisticRegressionResample': ('stochasticLogisticRegression', 'Resample'), 'quantilesTDigestWeightedResample': ('quantilesTDigestWeighted', 'Resample'), 'quantilesResample': ('quantiles', 'Resample'), 'quantilesTimingResample': ('quantilesTiming', 'Resample'), 'quantileBFloat16WeightedResample': ('quantileBFloat16Weighted', 'Resample'), 'welchTTestResample': ('welchTTest', 'Resample'), 'stochasticLinearRegressionResample': ('stochasticLinearRegression', 'Resample'), 'quantilesBFloat16Resample': ('quantilesBFloat16', 'Resample'), 'varSampResample': ('varSamp', 'Resample'), 'groupArrayLastResample': ('groupArrayLast', 'Resample'), 'uniqUpToResample': ('uniqUpTo', 'Resample'), 'quantileTimingResample': ('quantileTiming', 'Resample'), 'sumResample': ('sum', 'Resample'), 'kurtPopResample': ('kurtPop', 'Resample'), 'sequenceMatchResample': ('sequenceMatch', 'Resample'), 'sumMapResample': ('sumMap', 'Resample'), 'topKResample': ('topK', 'Resample'), 'sumKahanResample': ('sumKahan', 'Resample'), 'groupArrayMovingAvgResample': ('groupArrayMovingAvg', 'Resample'), 'groupBitmapResample': ('groupBitmap', 'Resample'), 'rankCorrResample': ('rankCorr', 'Resample'), 'mannWhitneyUTestResample': ('mannWhitneyUTest', 'Resample'), 'categoricalInformationValueResample': ('categoricalInformationValue', 'Resample'), 'cramersVResample': ('cramersV', 'Resample'), 'sequenceNextNodeResample': ('sequenceNextNode', 'Resample'), 'quantileDeterministicResample': ('quantileDeterministic', 'Resample'), 'quantilesExactExclusiveResample': ('quantilesExactExclusive', 'Resample'), 'quantileResample': ('quantile', 'Resample'), 'quantileBFloat16Resample': ('quantileBFloat16', 'Resample'), 'kolmogorovSmirnovTestResample': ('kolmogorovSmirnovTest', 'Resample'), 'varPopResample': ('varPop', 'Resample'), 'skewSampResample': ('skewSamp', 'Resample'), 'theilsUResample': ('theilsU', 'Resample'), 'meanZTestResample': ('meanZTest', 'Resample'), 'groupArrayInsertAtResample': ('groupArrayInsertAt', 'Resample'), 'covarSampResample': ('covarSamp', 'Resample'), 'groupBitmapOrResample': ('groupBitmapOr', 'Resample'), 'studentTTestResample': ('studentTTest', 'Resample'), 'groupUniqArrayResample': ('groupUniqArray', 'Resample'), 'largestTriangleThreeBucketsResample': ('largestTriangleThreeBuckets', 'Resample'), 'quantileExactLowResample': ('quantileExactLow', 'Resample'), 'anyResample': ('any', 'Resample'), 'quantilesExactHighResample': ('quantilesExactHigh', 'Resample'), 'stddevPopResample': ('stddevPop', 'Resample'), 'quantilesExactWeightedResample': ('quantilesExactWeighted', 'Resample'), 'quantilesExactResample': ('quantilesExact', 'Resample'), 'quantileTDigestWeightedResample': ('quantileTDigestWeighted', 'Resample'), 'quantilesExactLowResample': ('quantilesExactLow', 'Resample'), 'quantilesDeterministicResample': ('quantilesDeterministic', 'Resample'), 'minResample': ('min', 'Resample'), 'groupBitOrResample': ('groupBitOr', 'Resample'), 'quantileExactWeightedResample': ('quantileExactWeighted', 'Resample'), 'sumCountArrayIf': ('sumCount', 'ArrayIf'), 'uniqArrayIf': ('uniq', 'ArrayIf'), 'windowFunnelArrayIf': ('windowFunnel', 'ArrayIf'), 'quantileInterpolatedWeightedArrayIf': ('quantileInterpolatedWeighted', 'ArrayIf'), 'stddevSampArrayIf': ('stddevSamp', 'ArrayIf'), 'boundingRatioArrayIf': ('boundingRatio', 'ArrayIf'), 'groupBitAndArrayIf': ('groupBitAnd', 'ArrayIf'), 'quantileTimingWeightedArrayIf': ('quantileTimingWeighted', 'ArrayIf'), 'quantileGKArrayIf': ('quantileGK', 'ArrayIf'), 'corrArrayIf': ('corr', 'ArrayIf'), 'uniqThetaArrayIf': ('uniqTheta', 'ArrayIf'), 'exponentialMovingAverageArrayIf': ('exponentialMovingAverage', 'ArrayIf'), 'anyHeavyArrayIf': ('anyHeavy', 'ArrayIf'), 'sumWithOverflowArrayIf': ('sumWithOverflow', 'ArrayIf'), 'groupArraySampleArrayIf': ('groupArraySample', 'ArrayIf'), 'maxIntersectionsArrayIf': ('maxIntersections', 'ArrayIf'), 'contingencyArrayIf': ('contingency', 'ArrayIf'), 'uniqExactArrayIf': ('uniqExact', 'ArrayIf'), 'anyLastArrayIf': ('anyLast', 'ArrayIf'), 'deltaSumArrayIf': ('deltaSum', 'ArrayIf'), 'covarPopArrayIf': ('covarPop', 'ArrayIf'), 'minMapArrayIf': ('minMap', 'ArrayIf'), 'uniqCombined64ArrayIf': ('uniqCombined64', 'ArrayIf'), 'quantileTDigestArrayIf': ('quantileTDigest', 'ArrayIf'), 'sparkBarArrayIf': ('sparkBar', 'ArrayIf'), 'maxMapArrayIf': ('maxMap', 'ArrayIf'), 'groupArrayArrayIf': ('groupArray', 'ArrayIf'), 'maxArrayIf': ('max', 'ArrayIf'), 'topKWeightedArrayIf': ('topKWeighted', 'ArrayIf'), 'first_valueArrayIf': ('first_value', 'ArrayIf'), 'quantilesGKArrayIf': ('quantilesGK', 'ArrayIf'), 'quantileExactHighArrayIf': ('quantileExactHigh', 'ArrayIf'), 'countArrayIf': ('count', 'ArrayIf'), 'groupArrayMovingSumArrayIf': ('groupArrayMovingSum', 'ArrayIf'), 'retentionArrayIf': ('retention', 'ArrayIf'), 'medianArrayIf': ('median', 'ArrayIf'), 'cramersVBiasCorrectedArrayIf': ('cramersVBiasCorrected', 'ArrayIf'), 'quantileExactInclusiveArrayIf': ('quantileExactInclusive', 'ArrayIf'), 'entropyArrayIf': ('entropy', 'ArrayIf'), 'uniqCombinedArrayIf': ('uniqCombined', 'ArrayIf'), 'approx_top_sumArrayIf': ('approx_top_sum', 'ArrayIf'), 'skewPopArrayIf': ('skewPop', 'ArrayIf'), 'quantilesTimingWeightedArrayIf': ('quantilesTimingWeighted', 'ArrayIf'), 'avgArrayIf': ('avg', 'ArrayIf'), 'avgWeightedArrayIf': ('avgWeighted', 'ArrayIf'), 'sequenceCountArrayIf': ('sequenceCount', 'ArrayIf'), 'groupBitXorArrayIf': ('groupBitXor', 'ArrayIf'), 'histogramArrayIf': ('histogram', 'ArrayIf'), 'quantilesBFloat16WeightedArrayIf': ('quantilesBFloat16Weighted', 'ArrayIf'), 'kurtSampArrayIf': ('kurtSamp', 'ArrayIf'), 'maxIntersectionsPositionArrayIf': ('maxIntersectionsPosition', 'ArrayIf'), 'groupBitmapXorArrayIf': ('groupBitmapXor', 'ArrayIf'), 'argMaxArrayIf': ('argMax', 'ArrayIf'), 'groupConcatArrayIf': ('groupConcat', 'ArrayIf'), 'last_valueArrayIf': ('last_value', 'ArrayIf'), 'simpleLinearRegressionArrayIf': ('simpleLinearRegression', 'ArrayIf'), 'quantilesTDigestArrayIf': ('quantilesTDigest', 'ArrayIf'), 'quantilesInterpolatedWeightedArrayIf': ('quantilesInterpolatedWeighted', 'ArrayIf'), 'intervalLengthSumArrayIf': ('intervalLengthSum', 'ArrayIf'), 'quantileExactArrayIf': ('quantileExact', 'ArrayIf'), 'deltaSumTimestampArrayIf': ('deltaSumTimestamp', 'ArrayIf'), 'argMinArrayIf': ('argMin', 'ArrayIf'), 'exponentialTimeDecayedAvgArrayIf': ('exponentialTimeDecayedAvg', 'ArrayIf'), 'groupBitmapAndArrayIf': ('groupBitmapAnd', 'ArrayIf'), 'uniqHLL12ArrayIf': ('uniqHLL12', 'ArrayIf'), 'stochasticLogisticRegressionArrayIf': ('stochasticLogisticRegression', 'ArrayIf'), 'quantilesTDigestWeightedArrayIf': ('quantilesTDigestWeighted', 'ArrayIf'), 'quantilesArrayIf': ('quantiles', 'ArrayIf'), 'quantilesTimingArrayIf': ('quantilesTiming', 'ArrayIf'), 'quantileBFloat16WeightedArrayIf': ('quantileBFloat16Weighted', 'ArrayIf'), 'welchTTestArrayIf': ('welchTTest', 'ArrayIf'), 'stochasticLinearRegressionArrayIf': ('stochasticLinearRegression', 'ArrayIf'), 'quantilesBFloat16ArrayIf': ('quantilesBFloat16', 'ArrayIf'), 'varSampArrayIf': ('varSamp', 'ArrayIf'), 'groupArrayLastArrayIf': ('groupArrayLast', 'ArrayIf'), 'uniqUpToArrayIf': ('uniqUpTo', 'ArrayIf'), 'quantileTimingArrayIf': ('quantileTiming', 'ArrayIf'), 'sumArrayIf': ('sum', 'ArrayIf'), 'kurtPopArrayIf': ('kurtPop', 'ArrayIf'), 'sequenceMatchArrayIf': ('sequenceMatch', 'ArrayIf'), 'sumMapArrayIf': ('sumMap', 'ArrayIf'), 'topKArrayIf': ('topK', 'ArrayIf'), 'sumKahanArrayIf': ('sumKahan', 'ArrayIf'), 'groupArrayMovingAvgArrayIf': ('groupArrayMovingAvg', 'ArrayIf'), 'groupBitmapArrayIf': ('groupBitmap', 'ArrayIf'), 'rankCorrArrayIf': ('rankCorr', 'ArrayIf'), 'mannWhitneyUTestArrayIf': ('mannWhitneyUTest', 'ArrayIf'), 'categoricalInformationValueArrayIf': ('categoricalInformationValue', 'ArrayIf'), 'cramersVArrayIf': ('cramersV', 'ArrayIf'), 'sequenceNextNodeArrayIf': ('sequenceNextNode', 'ArrayIf'), 'quantileDeterministicArrayIf': ('quantileDeterministic', 'ArrayIf'), 'quantilesExactExclusiveArrayIf': ('quantilesExactExclusive', 'ArrayIf'), 'quantileArrayIf': ('quantile', 'ArrayIf'), 'quantileBFloat16ArrayIf': ('quantileBFloat16', 'ArrayIf'), 'kolmogorovSmirnovTestArrayIf': ('kolmogorovSmirnovTest', 'ArrayIf'), 'varPopArrayIf': ('varPop', 'ArrayIf'), 'skewSampArrayIf': ('skewSamp', 'ArrayIf'), 'theilsUArrayIf': ('theilsU', 'ArrayIf'), 'meanZTestArrayIf': ('meanZTest', 'ArrayIf'), 'groupArrayInsertAtArrayIf': ('groupArrayInsertAt', 'ArrayIf'), 'covarSampArrayIf': ('covarSamp', 'ArrayIf'), 'groupBitmapOrArrayIf': ('groupBitmapOr', 'ArrayIf'), 'studentTTestArrayIf': ('studentTTest', 'ArrayIf'), 'groupUniqArrayArrayIf': ('groupUniqArray', 'ArrayIf'), 'largestTriangleThreeBucketsArrayIf': ('largestTriangleThreeBuckets', 'ArrayIf'), 'quantileExactLowArrayIf': ('quantileExactLow', 'ArrayIf'), 'anyArrayIf': ('any', 'ArrayIf'), 'quantilesExactHighArrayIf': ('quantilesExactHigh', 'ArrayIf'), 'stddevPopArrayIf': ('stddevPop', 'ArrayIf'), 'quantilesExactWeightedArrayIf': ('quantilesExactWeighted', 'ArrayIf'), 'quantilesExactArrayIf': ('quantilesExact', 'ArrayIf'), 'quantileTDigestWeightedArrayIf': ('quantileTDigestWeighted', 'ArrayIf'), 'quantilesExactLowArrayIf': ('quantilesExactLow', 'ArrayIf'), 'quantilesDeterministicArrayIf': ('quantilesDeterministic', 'ArrayIf'), 'minArrayIf': ('min', 'ArrayIf'), 'groupBitOrArrayIf': ('groupBitOr', 'ArrayIf'), 'quantileExactWeightedArrayIf': ('quantileExactWeighted', 'ArrayIf'), 'sumCountForEach': ('sumCount', 'ForEach'), 'uniqForEach': ('uniq', 'ForEach'), 'windowFunnelForEach': ('windowFunnel', 'ForEach'), 'quantileInterpolatedWeightedForEach': ('quantileInterpolatedWeighted', 'ForEach'), 'stddevSampForEach': ('stddevSamp', 'ForEach'), 'boundingRatioForEach': ('boundingRatio', 'ForEach'), 'groupBitAndForEach': ('groupBitAnd', 'ForEach'), 'quantileTimingWeightedForEach': ('quantileTimingWeighted', 'ForEach'), 'quantileGKForEach': ('quantileGK', 'ForEach'), 'corrForEach': ('corr', 'ForEach'), 'uniqThetaForEach': ('uniqTheta', 'ForEach'), 'exponentialMovingAverageForEach': ('exponentialMovingAverage', 'ForEach'), 'anyHeavyForEach': ('anyHeavy', 'ForEach'), 'sumWithOverflowForEach': ('sumWithOverflow', 'ForEach'), 'groupArraySampleForEach': ('groupArraySample', 'ForEach'), 'maxIntersectionsForEach': ('maxIntersections', 'ForEach'), 'contingencyForEach': ('contingency', 'ForEach'), 'uniqExactForEach': ('uniqExact', 'ForEach'), 'anyLastForEach': ('anyLast', 'ForEach'), 'deltaSumForEach': ('deltaSum', 'ForEach'), 'covarPopForEach': ('covarPop', 'ForEach'), 'minMapForEach': ('minMap', 'ForEach'), 'uniqCombined64ForEach': ('uniqCombined64', 'ForEach'), 'quantileTDigestForEach': ('quantileTDigest', 'ForEach'), 'sparkBarForEach': ('sparkBar', 'ForEach'), 'maxMapForEach': ('maxMap', 'ForEach'), 'groupArrayForEach': ('groupArray', 'ForEach'), 'maxForEach': ('max', 'ForEach'), 'topKWeightedForEach': ('topKWeighted', 'ForEach'), 'first_valueForEach': ('first_value', 'ForEach'), 'quantilesGKForEach': ('quantilesGK', 'ForEach'), 'quantileExactHighForEach': ('quantileExactHigh', 'ForEach'), 'countForEach': ('count', 'ForEach'), 'groupArrayMovingSumForEach': ('groupArrayMovingSum', 'ForEach'), 'retentionForEach': ('retention', 'ForEach'), 'medianForEach': ('median', 'ForEach'), 'cramersVBiasCorrectedForEach': ('cramersVBiasCorrected', 'ForEach'), 'quantileExactInclusiveForEach': ('quantileExactInclusive', 'ForEach'), 'entropyForEach': ('entropy', 'ForEach'), 'uniqCombinedForEach': ('uniqCombined', 'ForEach'), 'approx_top_sumForEach': ('approx_top_sum', 'ForEach'), 'skewPopForEach': ('skewPop', 'ForEach'), 'quantilesTimingWeightedForEach': ('quantilesTimingWeighted', 'ForEach'), 'avgForEach': ('avg', 'ForEach'), 'avgWeightedForEach': ('avgWeighted', 'ForEach'), 'sequenceCountForEach': ('sequenceCount', 'ForEach'), 'groupBitXorForEach': ('groupBitXor', 'ForEach'), 'histogramForEach': ('histogram', 'ForEach'), 'quantilesBFloat16WeightedForEach': ('quantilesBFloat16Weighted', 'ForEach'), 'kurtSampForEach': ('kurtSamp', 'ForEach'), 'maxIntersectionsPositionForEach': ('maxIntersectionsPosition', 'ForEach'), 'groupBitmapXorForEach': ('groupBitmapXor', 'ForEach'), 'argMaxForEach': ('argMax', 'ForEach'), 'groupConcatForEach': ('groupConcat', 'ForEach'), 'last_valueForEach': ('last_value', 'ForEach'), 'simpleLinearRegressionForEach': ('simpleLinearRegression', 'ForEach'), 'quantilesTDigestForEach': ('quantilesTDigest', 'ForEach'), 'quantilesInterpolatedWeightedForEach': ('quantilesInterpolatedWeighted', 'ForEach'), 'intervalLengthSumForEach': ('intervalLengthSum', 'ForEach'), 'quantileExactForEach': ('quantileExact', 'ForEach'), 'deltaSumTimestampForEach': ('deltaSumTimestamp', 'ForEach'), 'argMinForEach': ('argMin', 'ForEach'), 'exponentialTimeDecayedAvgForEach': ('exponentialTimeDecayedAvg', 'ForEach'), 'groupBitmapAndForEach': ('groupBitmapAnd', 'ForEach'), 'uniqHLL12ForEach': ('uniqHLL12', 'ForEach'), 'stochasticLogisticRegressionForEach': ('stochasticLogisticRegression', 'ForEach'), 'quantilesTDigestWeightedForEach': ('quantilesTDigestWeighted', 'ForEach'), 'quantilesForEach': ('quantiles', 'ForEach'), 'quantilesTimingForEach': ('quantilesTiming', 'ForEach'), 'quantileBFloat16WeightedForEach': ('quantileBFloat16Weighted', 'ForEach'), 'welchTTestForEach': ('welchTTest', 'ForEach'), 'stochasticLinearRegressionForEach': ('stochasticLinearRegression', 'ForEach'), 'quantilesBFloat16ForEach': ('quantilesBFloat16', 'ForEach'), 'varSampForEach': ('varSamp', 'ForEach'), 'groupArrayLastForEach': ('groupArrayLast', 'ForEach'), 'uniqUpToForEach': ('uniqUpTo', 'ForEach'), 'quantileTimingForEach': ('quantileTiming', 'ForEach'), 'sumForEach': ('sum', 'ForEach'), 'kurtPopForEach': ('kurtPop', 'ForEach'), 'sequenceMatchForEach': ('sequenceMatch', 'ForEach'), 'sumMapForEach': ('sumMap', 'ForEach'), 'topKForEach': ('topK', 'ForEach'), 'sumKahanForEach': ('sumKahan', 'ForEach'), 'groupArrayMovingAvgForEach': ('groupArrayMovingAvg', 'ForEach'), 'groupBitmapForEach': ('groupBitmap', 'ForEach'), 'rankCorrForEach': ('rankCorr', 'ForEach'), 'mannWhitneyUTestForEach': ('mannWhitneyUTest', 'ForEach'), 'categoricalInformationValueForEach': ('categoricalInformationValue', 'ForEach'), 'cramersVForEach': ('cramersV', 'ForEach'), 'sequenceNextNodeForEach': ('sequenceNextNode', 'ForEach'), 'quantileDeterministicForEach': ('quantileDeterministic', 'ForEach'), 'quantilesExactExclusiveForEach': ('quantilesExactExclusive', 'ForEach'), 'quantileForEach': ('quantile', 'ForEach'), 'quantileBFloat16ForEach': ('quantileBFloat16', 'ForEach'), 'kolmogorovSmirnovTestForEach': ('kolmogorovSmirnovTest', 'ForEach'), 'varPopForEach': ('varPop', 'ForEach'), 'skewSampForEach': ('skewSamp', 'ForEach'), 'theilsUForEach': ('theilsU', 'ForEach'), 'meanZTestForEach': ('meanZTest', 'ForEach'), 'groupArrayInsertAtForEach': ('groupArrayInsertAt', 'ForEach'), 'covarSampForEach': ('covarSamp', 'ForEach'), 'groupBitmapOrForEach': ('groupBitmapOr', 'ForEach'), 'studentTTestForEach': ('studentTTest', 'ForEach'), 'groupUniqArrayForEach': ('groupUniqArray', 'ForEach'), 'largestTriangleThreeBucketsForEach': ('largestTriangleThreeBuckets', 'ForEach'), 'quantileExactLowForEach': ('quantileExactLow', 'ForEach'), 'anyForEach': ('any', 'ForEach'), 'quantilesExactHighForEach': ('quantilesExactHigh', 'ForEach'), 'stddevPopForEach': ('stddevPop', 'ForEach'), 'quantilesExactWeightedForEach': ('quantilesExactWeighted', 'ForEach'), 'quantilesExactForEach': ('quantilesExact', 'ForEach'), 'quantileTDigestWeightedForEach': ('quantileTDigestWeighted', 'ForEach'), 'quantilesExactLowForEach': ('quantilesExactLow', 'ForEach'), 'quantilesDeterministicForEach': ('quantilesDeterministic', 'ForEach'), 'minForEach': ('min', 'ForEach'), 'groupBitOrForEach': ('groupBitOr', 'ForEach'), 'quantileExactWeightedForEach': ('quantileExactWeighted', 'ForEach'), 'sumCountOrNull': ('sumCount', 'OrNull'), 'uniqOrNull': ('uniq', 'OrNull'), 'windowFunnelOrNull': ('windowFunnel', 'OrNull'), 'quantileInterpolatedWeightedOrNull': ('quantileInterpolatedWeighted', 'OrNull'), 'stddevSampOrNull': ('stddevSamp', 'OrNull'), 'boundingRatioOrNull': ('boundingRatio', 'OrNull'), 'groupBitAndOrNull': ('groupBitAnd', 'OrNull'), 'quantileTimingWeightedOrNull': ('quantileTimingWeighted', 'OrNull'), 'quantileGKOrNull': ('quantileGK', 'OrNull'), 'corrOrNull': ('corr', 'OrNull'), 'uniqThetaOrNull': ('uniqTheta', 'OrNull'), 'exponentialMovingAverageOrNull': ('exponentialMovingAverage', 'OrNull'), 'anyHeavyOrNull': ('anyHeavy', 'OrNull'), 'sumWithOverflowOrNull': ('sumWithOverflow', 'OrNull'), 'groupArraySampleOrNull': ('groupArraySample', 'OrNull'), 'maxIntersectionsOrNull': ('maxIntersections', 'OrNull'), 'contingencyOrNull': ('contingency', 'OrNull'), 'uniqExactOrNull': ('uniqExact', 'OrNull'), 'anyLastOrNull': ('anyLast', 'OrNull'), 'deltaSumOrNull': ('deltaSum', 'OrNull'), 'covarPopOrNull': ('covarPop', 'OrNull'), 'minMapOrNull': ('minMap', 'OrNull'), 'uniqCombined64OrNull': ('uniqCombined64', 'OrNull'), 'quantileTDigestOrNull': ('quantileTDigest', 'OrNull'), 'sparkBarOrNull': ('sparkBar', 'OrNull'), 'maxMapOrNull': ('maxMap', 'OrNull'), 'groupArrayOrNull': ('groupArray', 'OrNull'), 'maxOrNull': ('max', 'OrNull'), 'topKWeightedOrNull': ('topKWeighted', 'OrNull'), 'first_valueOrNull': ('first_value', 'OrNull'), 'quantilesGKOrNull': ('quantilesGK', 'OrNull'), 'quantileExactHighOrNull': ('quantileExactHigh', 'OrNull'), 'countOrNull': ('count', 'OrNull'), 'groupArrayMovingSumOrNull': ('groupArrayMovingSum', 'OrNull'), 'retentionOrNull': ('retention', 'OrNull'), 'medianOrNull': ('median', 'OrNull'), 'cramersVBiasCorrectedOrNull': ('cramersVBiasCorrected', 'OrNull'), 'quantileExactInclusiveOrNull': ('quantileExactInclusive', 'OrNull'), 'entropyOrNull': ('entropy', 'OrNull'), 'uniqCombinedOrNull': ('uniqCombined', 'OrNull'), 'approx_top_sumOrNull': ('approx_top_sum', 'OrNull'), 'skewPopOrNull': ('skewPop', 'OrNull'), 'quantilesTimingWeightedOrNull': ('quantilesTimingWeighted', 'OrNull'), 'avgOrNull': ('avg', 'OrNull'), 'avgWeightedOrNull': ('avgWeighted', 'OrNull'), 'sequenceCountOrNull': ('sequenceCount', 'OrNull'), 'groupBitXorOrNull': ('groupBitXor', 'OrNull'), 'histogramOrNull': ('histogram', 'OrNull'), 'quantilesBFloat16WeightedOrNull': ('quantilesBFloat16Weighted', 'OrNull'), 'kurtSampOrNull': ('kurtSamp', 'OrNull'), 'maxIntersectionsPositionOrNull': ('maxIntersectionsPosition', 'OrNull'), 'groupBitmapXorOrNull': ('groupBitmapXor', 'OrNull'), 'argMaxOrNull': ('argMax', 'OrNull'), 'groupConcatOrNull': ('groupConcat', 'OrNull'), 'last_valueOrNull': ('last_value', 'OrNull'), 'simpleLinearRegressionOrNull': ('simpleLinearRegression', 'OrNull'), 'quantilesTDigestOrNull': ('quantilesTDigest', 'OrNull'), 'quantilesInterpolatedWeightedOrNull': ('quantilesInterpolatedWeighted', 'OrNull'), 'intervalLengthSumOrNull': ('intervalLengthSum', 'OrNull'), 'quantileExactOrNull': ('quantileExact', 'OrNull'), 'deltaSumTimestampOrNull': ('deltaSumTimestamp', 'OrNull'), 'argMinOrNull': ('argMin', 'OrNull'), 'exponentialTimeDecayedAvgOrNull': ('exponentialTimeDecayedAvg', 'OrNull'), 'groupBitmapAndOrNull': ('groupBitmapAnd', 'OrNull'), 'uniqHLL12OrNull': ('uniqHLL12', 'OrNull'), 'stochasticLogisticRegressionOrNull': ('stochasticLogisticRegression', 'OrNull'), 'quantilesTDigestWeightedOrNull': ('quantilesTDigestWeighted', 'OrNull'), 'quantilesOrNull': ('quantiles', 'OrNull'), 'quantilesTimingOrNull': ('quantilesTiming', 'OrNull'), 'quantileBFloat16WeightedOrNull': ('quantileBFloat16Weighted', 'OrNull'), 'welchTTestOrNull': ('welchTTest', 'OrNull'), 'stochasticLinearRegressionOrNull': ('stochasticLinearRegression', 'OrNull'), 'quantilesBFloat16OrNull': ('quantilesBFloat16', 'OrNull'), 'varSampOrNull': ('varSamp', 'OrNull'), 'groupArrayLastOrNull': ('groupArrayLast', 'OrNull'), 'uniqUpToOrNull': ('uniqUpTo', 'OrNull'), 'quantileTimingOrNull': ('quantileTiming', 'OrNull'), 'sumOrNull': ('sum', 'OrNull'), 'kurtPopOrNull': ('kurtPop', 'OrNull'), 'sequenceMatchOrNull': ('sequenceMatch', 'OrNull'), 'sumMapOrNull': ('sumMap', 'OrNull'), 'topKOrNull': ('topK', 'OrNull'), 'sumKahanOrNull': ('sumKahan', 'OrNull'), 'groupArrayMovingAvgOrNull': ('groupArrayMovingAvg', 'OrNull'), 'groupBitmapOrNull': ('groupBitmap', 'OrNull'), 'rankCorrOrNull': ('rankCorr', 'OrNull'), 'mannWhitneyUTestOrNull': ('mannWhitneyUTest', 'OrNull'), 'categoricalInformationValueOrNull': ('categoricalInformationValue', 'OrNull'), 'cramersVOrNull': ('cramersV', 'OrNull'), 'sequenceNextNodeOrNull': ('sequenceNextNode', 'OrNull'), 'quantileDeterministicOrNull': ('quantileDeterministic', 'OrNull'), 'quantilesExactExclusiveOrNull': ('quantilesExactExclusive', 'OrNull'), 'quantileOrNull': ('quantile', 'OrNull'), 'quantileBFloat16OrNull': ('quantileBFloat16', 'OrNull'), 'kolmogorovSmirnovTestOrNull': ('kolmogorovSmirnovTest', 'OrNull'), 'varPopOrNull': ('varPop', 'OrNull'), 'skewSampOrNull': ('skewSamp', 'OrNull'), 'theilsUOrNull': ('theilsU', 'OrNull'), 'meanZTestOrNull': ('meanZTest', 'OrNull'), 'groupArrayInsertAtOrNull': ('groupArrayInsertAt', 'OrNull'), 'covarSampOrNull': ('covarSamp', 'OrNull'), 'groupBitmapOrOrNull': ('groupBitmapOr', 'OrNull'), 'studentTTestOrNull': ('studentTTest', 'OrNull'), 'groupUniqArrayOrNull': ('groupUniqArray', 'OrNull'), 'largestTriangleThreeBucketsOrNull': ('largestTriangleThreeBuckets', 'OrNull'), 'quantileExactLowOrNull': ('quantileExactLow', 'OrNull'), 'anyOrNull': ('any', 'OrNull'), 'quantilesExactHighOrNull': ('quantilesExactHigh', 'OrNull'), 'stddevPopOrNull': ('stddevPop', 'OrNull'), 'quantilesExactWeightedOrNull': ('quantilesExactWeighted', 'OrNull'), 'quantilesExactOrNull': ('quantilesExact', 'OrNull'), 'quantileTDigestWeightedOrNull': ('quantileTDigestWeighted', 'OrNull'), 'quantilesExactLowOrNull': ('quantilesExactLow', 'OrNull'), 'quantilesDeterministicOrNull': ('quantilesDeterministic', 'OrNull'), 'minOrNull': ('min', 'OrNull'), 'groupBitOrOrNull': ('groupBitOr', 'OrNull'), 'quantileExactWeightedOrNull': ('quantileExactWeighted', 'OrNull'), 'sumCountArgMin': ('sumCount', 'ArgMin'), 'uniqArgMin': ('uniq', 'ArgMin'), 'windowFunnelArgMin': ('windowFunnel', 'ArgMin'), 'quantileInterpolatedWeightedArgMin': ('quantileInterpolatedWeighted', 'ArgMin'), 'stddevSampArgMin': ('stddevSamp', 'ArgMin'), 'boundingRatioArgMin': ('boundingRatio', 'ArgMin'), 'groupBitAndArgMin': ('groupBitAnd', 'ArgMin'), 'quantileTimingWeightedArgMin': ('quantileTimingWeighted', 'ArgMin'), 'quantileGKArgMin': ('quantileGK', 'ArgMin'), 'corrArgMin': ('corr', 'ArgMin'), 'uniqThetaArgMin': ('uniqTheta', 'ArgMin'), 'exponentialMovingAverageArgMin': ('exponentialMovingAverage', 'ArgMin'), 'anyHeavyArgMin': ('anyHeavy', 'ArgMin'), 'sumWithOverflowArgMin': ('sumWithOverflow', 'ArgMin'), 'groupArraySampleArgMin': ('groupArraySample', 'ArgMin'), 'maxIntersectionsArgMin': ('maxIntersections', 'ArgMin'), 'contingencyArgMin': ('contingency', 'ArgMin'), 'uniqExactArgMin': ('uniqExact', 'ArgMin'), 'anyLastArgMin': ('anyLast', 'ArgMin'), 'deltaSumArgMin': ('deltaSum', 'ArgMin'), 'covarPopArgMin': ('covarPop', 'ArgMin'), 'minMapArgMin': ('minMap', 'ArgMin'), 'uniqCombined64ArgMin': ('uniqCombined64', 'ArgMin'), 'quantileTDigestArgMin': ('quantileTDigest', 'ArgMin'), 'sparkBarArgMin': ('sparkBar', 'ArgMin'), 'maxMapArgMin': ('maxMap', 'ArgMin'), 'groupArrayArgMin': ('groupArray', 'ArgMin'), 'maxArgMin': ('max', 'ArgMin'), 'topKWeightedArgMin': ('topKWeighted', 'ArgMin'), 'first_valueArgMin': ('first_value', 'ArgMin'), 'quantilesGKArgMin': ('quantilesGK', 'ArgMin'), 'quantileExactHighArgMin': ('quantileExactHigh', 'ArgMin'), 'countArgMin': ('count', 'ArgMin'), 'groupArrayMovingSumArgMin': ('groupArrayMovingSum', 'ArgMin'), 'retentionArgMin': ('retention', 'ArgMin'), 'medianArgMin': ('median', 'ArgMin'), 'cramersVBiasCorrectedArgMin': ('cramersVBiasCorrected', 'ArgMin'), 'quantileExactInclusiveArgMin': ('quantileExactInclusive', 'ArgMin'), 'entropyArgMin': ('entropy', 'ArgMin'), 'uniqCombinedArgMin': ('uniqCombined', 'ArgMin'), 'approx_top_sumArgMin': ('approx_top_sum', 'ArgMin'), 'skewPopArgMin': ('skewPop', 'ArgMin'), 'quantilesTimingWeightedArgMin': ('quantilesTimingWeighted', 'ArgMin'), 'avgArgMin': ('avg', 'ArgMin'), 'avgWeightedArgMin': ('avgWeighted', 'ArgMin'), 'sequenceCountArgMin': ('sequenceCount', 'ArgMin'), 'groupBitXorArgMin': ('groupBitXor', 'ArgMin'), 'histogramArgMin': ('histogram', 'ArgMin'), 'quantilesBFloat16WeightedArgMin': ('quantilesBFloat16Weighted', 'ArgMin'), 'kurtSampArgMin': ('kurtSamp', 'ArgMin'), 'maxIntersectionsPositionArgMin': ('maxIntersectionsPosition', 'ArgMin'), 'groupBitmapXorArgMin': ('groupBitmapXor', 'ArgMin'), 'argMaxArgMin': ('argMax', 'ArgMin'), 'groupConcatArgMin': ('groupConcat', 'ArgMin'), 'last_valueArgMin': ('last_value', 'ArgMin'), 'simpleLinearRegressionArgMin': ('simpleLinearRegression', 'ArgMin'), 'quantilesTDigestArgMin': ('quantilesTDigest', 'ArgMin'), 'quantilesInterpolatedWeightedArgMin': ('quantilesInterpolatedWeighted', 'ArgMin'), 'intervalLengthSumArgMin': ('intervalLengthSum', 'ArgMin'), 'quantileExactArgMin': ('quantileExact', 'ArgMin'), 'deltaSumTimestampArgMin': ('deltaSumTimestamp', 'ArgMin'), 'argMinArgMin': ('argMin', 'ArgMin'), 'exponentialTimeDecayedAvgArgMin': ('exponentialTimeDecayedAvg', 'ArgMin'), 'groupBitmapAndArgMin': ('groupBitmapAnd', 'ArgMin'), 'uniqHLL12ArgMin': ('uniqHLL12', 'ArgMin'), 'stochasticLogisticRegressionArgMin': ('stochasticLogisticRegression', 'ArgMin'), 'quantilesTDigestWeightedArgMin': ('quantilesTDigestWeighted', 'ArgMin'), 'quantilesArgMin': ('quantiles', 'ArgMin'), 'quantilesTimingArgMin': ('quantilesTiming', 'ArgMin'), 'quantileBFloat16WeightedArgMin': ('quantileBFloat16Weighted', 'ArgMin'), 'welchTTestArgMin': ('welchTTest', 'ArgMin'), 'stochasticLinearRegressionArgMin': ('stochasticLinearRegression', 'ArgMin'), 'quantilesBFloat16ArgMin': ('quantilesBFloat16', 'ArgMin'), 'varSampArgMin': ('varSamp', 'ArgMin'), 'groupArrayLastArgMin': ('groupArrayLast', 'ArgMin'), 'uniqUpToArgMin': ('uniqUpTo', 'ArgMin'), 'quantileTimingArgMin': ('quantileTiming', 'ArgMin'), 'sumArgMin': ('sum', 'ArgMin'), 'kurtPopArgMin': ('kurtPop', 'ArgMin'), 'sequenceMatchArgMin': ('sequenceMatch', 'ArgMin'), 'sumMapArgMin': ('sumMap', 'ArgMin'), 'topKArgMin': ('topK', 'ArgMin'), 'sumKahanArgMin': ('sumKahan', 'ArgMin'), 'groupArrayMovingAvgArgMin': ('groupArrayMovingAvg', 'ArgMin'), 'groupBitmapArgMin': ('groupBitmap', 'ArgMin'), 'rankCorrArgMin': ('rankCorr', 'ArgMin'), 'mannWhitneyUTestArgMin': ('mannWhitneyUTest', 'ArgMin'), 'categoricalInformationValueArgMin': ('categoricalInformationValue', 'ArgMin'), 'cramersVArgMin': ('cramersV', 'ArgMin'), 'sequenceNextNodeArgMin': ('sequenceNextNode', 'ArgMin'), 'quantileDeterministicArgMin': ('quantileDeterministic', 'ArgMin'), 'quantilesExactExclusiveArgMin': ('quantilesExactExclusive', 'ArgMin'), 'quantileArgMin': ('quantile', 'ArgMin'), 'quantileBFloat16ArgMin': ('quantileBFloat16', 'ArgMin'), 'kolmogorovSmirnovTestArgMin': ('kolmogorovSmirnovTest', 'ArgMin'), 'varPopArgMin': ('varPop', 'ArgMin'), 'skewSampArgMin': ('skewSamp', 'ArgMin'), 'theilsUArgMin': ('theilsU', 'ArgMin'), 'meanZTestArgMin': ('meanZTest', 'ArgMin'), 'groupArrayInsertAtArgMin': ('groupArrayInsertAt', 'ArgMin'), 'covarSampArgMin': ('covarSamp', 'ArgMin'), 'groupBitmapOrArgMin': ('groupBitmapOr', 'ArgMin'), 'studentTTestArgMin': ('studentTTest', 'ArgMin'), 'groupUniqArrayArgMin': ('groupUniqArray', 'ArgMin'), 'largestTriangleThreeBucketsArgMin': ('largestTriangleThreeBuckets', 'ArgMin'), 'quantileExactLowArgMin': ('quantileExactLow', 'ArgMin'), 'anyArgMin': ('any', 'ArgMin'), 'quantilesExactHighArgMin': ('quantilesExactHigh', 'ArgMin'), 'stddevPopArgMin': ('stddevPop', 'ArgMin'), 'quantilesExactWeightedArgMin': ('quantilesExactWeighted', 'ArgMin'), 'quantilesExactArgMin': ('quantilesExact', 'ArgMin'), 'quantileTDigestWeightedArgMin': ('quantileTDigestWeighted', 'ArgMin'), 'quantilesExactLowArgMin': ('quantilesExactLow', 'ArgMin'), 'quantilesDeterministicArgMin': ('quantilesDeterministic', 'ArgMin'), 'minArgMin': ('min', 'ArgMin'), 'groupBitOrArgMin': ('groupBitOr', 'ArgMin'), 'quantileExactWeightedArgMin': ('quantileExactWeighted', 'ArgMin'), 'sumCountArgMax': ('sumCount', 'ArgMax'), 'uniqArgMax': ('uniq', 'ArgMax'), 'windowFunnelArgMax': ('windowFunnel', 'ArgMax'), 'quantileInterpolatedWeightedArgMax': ('quantileInterpolatedWeighted', 'ArgMax'), 'stddevSampArgMax': ('stddevSamp', 'ArgMax'), 'boundingRatioArgMax': ('boundingRatio', 'ArgMax'), 'groupBitAndArgMax': ('groupBitAnd', 'ArgMax'), 'quantileTimingWeightedArgMax': ('quantileTimingWeighted', 'ArgMax'), 'quantileGKArgMax': ('quantileGK', 'ArgMax'), 'corrArgMax': ('corr', 'ArgMax'), 'uniqThetaArgMax': ('uniqTheta', 'ArgMax'), 'exponentialMovingAverageArgMax': ('exponentialMovingAverage', 'ArgMax'), 'anyHeavyArgMax': ('anyHeavy', 'ArgMax'), 'sumWithOverflowArgMax': ('sumWithOverflow', 'ArgMax'), 'groupArraySampleArgMax': ('groupArraySample', 'ArgMax'), 'maxIntersectionsArgMax': ('maxIntersections', 'ArgMax'), 'contingencyArgMax': ('contingency', 'ArgMax'), 'uniqExactArgMax': ('uniqExact', 'ArgMax'), 'anyLastArgMax': ('anyLast', 'ArgMax'), 'deltaSumArgMax': ('deltaSum', 'ArgMax'), 'covarPopArgMax': ('covarPop', 'ArgMax'), 'minMapArgMax': ('minMap', 'ArgMax'), 'uniqCombined64ArgMax': ('uniqCombined64', 'ArgMax'), 'quantileTDigestArgMax': ('quantileTDigest', 'ArgMax'), 'sparkBarArgMax': ('sparkBar', 'ArgMax'), 'maxMapArgMax': ('maxMap', 'ArgMax'), 'groupArrayArgMax': ('groupArray', 'ArgMax'), 'maxArgMax': ('max', 'ArgMax'), 'topKWeightedArgMax': ('topKWeighted', 'ArgMax'), 'first_valueArgMax': ('first_value', 'ArgMax'), 'quantilesGKArgMax': ('quantilesGK', 'ArgMax'), 'quantileExactHighArgMax': ('quantileExactHigh', 'ArgMax'), 'countArgMax': ('count', 'ArgMax'), 'groupArrayMovingSumArgMax': ('groupArrayMovingSum', 'ArgMax'), 'retentionArgMax': ('retention', 'ArgMax'), 'medianArgMax': ('median', 'ArgMax'), 'cramersVBiasCorrectedArgMax': ('cramersVBiasCorrected', 'ArgMax'), 'quantileExactInclusiveArgMax': ('quantileExactInclusive', 'ArgMax'), 'entropyArgMax': ('entropy', 'ArgMax'), 'uniqCombinedArgMax': ('uniqCombined', 'ArgMax'), 'approx_top_sumArgMax': ('approx_top_sum', 'ArgMax'), 'skewPopArgMax': ('skewPop', 'ArgMax'), 'quantilesTimingWeightedArgMax': ('quantilesTimingWeighted', 'ArgMax'), 'avgArgMax': ('avg', 'ArgMax'), 'avgWeightedArgMax': ('avgWeighted', 'ArgMax'), 'sequenceCountArgMax': ('sequenceCount', 'ArgMax'), 'groupBitXorArgMax': ('groupBitXor', 'ArgMax'), 'histogramArgMax': ('histogram', 'ArgMax'), 'quantilesBFloat16WeightedArgMax': ('quantilesBFloat16Weighted', 'ArgMax'), 'kurtSampArgMax': ('kurtSamp', 'ArgMax'), 'maxIntersectionsPositionArgMax': ('maxIntersectionsPosition', 'ArgMax'), 'groupBitmapXorArgMax': ('groupBitmapXor', 'ArgMax'), 'argMaxArgMax': ('argMax', 'ArgMax'), 'groupConcatArgMax': ('groupConcat', 'ArgMax'), 'last_valueArgMax': ('last_value', 'ArgMax'), 'simpleLinearRegressionArgMax': ('simpleLinearRegression', 'ArgMax'), 'quantilesTDigestArgMax': ('quantilesTDigest', 'ArgMax'), 'quantilesInterpolatedWeightedArgMax': ('quantilesInterpolatedWeighted', 'ArgMax'), 'intervalLengthSumArgMax': ('intervalLengthSum', 'ArgMax'), 'quantileExactArgMax': ('quantileExact', 'ArgMax'), 'deltaSumTimestampArgMax': ('deltaSumTimestamp', 'ArgMax'), 'argMinArgMax': ('argMin', 'ArgMax'), 'exponentialTimeDecayedAvgArgMax': ('exponentialTimeDecayedAvg', 'ArgMax'), 'groupBitmapAndArgMax': ('groupBitmapAnd', 'ArgMax'), 'uniqHLL12ArgMax': ('uniqHLL12', 'ArgMax'), 'stochasticLogisticRegressionArgMax': ('stochasticLogisticRegression', 'ArgMax'), 'quantilesTDigestWeightedArgMax': ('quantilesTDigestWeighted', 'ArgMax'), 'quantilesArgMax': ('quantiles', 'ArgMax'), 'quantilesTimingArgMax': ('quantilesTiming', 'ArgMax'), 'quantileBFloat16WeightedArgMax': ('quantileBFloat16Weighted', 'ArgMax'), 'welchTTestArgMax': ('welchTTest', 'ArgMax'), 'stochasticLinearRegressionArgMax': ('stochasticLinearRegression', 'ArgMax'), 'quantilesBFloat16ArgMax': ('quantilesBFloat16', 'ArgMax'), 'varSampArgMax': ('varSamp', 'ArgMax'), 'groupArrayLastArgMax': ('groupArrayLast', 'ArgMax'), 'uniqUpToArgMax': ('uniqUpTo', 'ArgMax'), 'quantileTimingArgMax': ('quantileTiming', 'ArgMax'), 'sumArgMax': ('sum', 'ArgMax'), 'kurtPopArgMax': ('kurtPop', 'ArgMax'), 'sequenceMatchArgMax': ('sequenceMatch', 'ArgMax'), 'sumMapArgMax': ('sumMap', 'ArgMax'), 'topKArgMax': ('topK', 'ArgMax'), 'sumKahanArgMax': ('sumKahan', 'ArgMax'), 'groupArrayMovingAvgArgMax': ('groupArrayMovingAvg', 'ArgMax'), 'groupBitmapArgMax': ('groupBitmap', 'ArgMax'), 'rankCorrArgMax': ('rankCorr', 'ArgMax'), 'mannWhitneyUTestArgMax': ('mannWhitneyUTest', 'ArgMax'), 'categoricalInformationValueArgMax': ('categoricalInformationValue', 'ArgMax'), 'cramersVArgMax': ('cramersV', 'ArgMax'), 'sequenceNextNodeArgMax': ('sequenceNextNode', 'ArgMax'), 'quantileDeterministicArgMax': ('quantileDeterministic', 'ArgMax'), 'quantilesExactExclusiveArgMax': ('quantilesExactExclusive', 'ArgMax'), 'quantileArgMax': ('quantile', 'ArgMax'), 'quantileBFloat16ArgMax': ('quantileBFloat16', 'ArgMax'), 'kolmogorovSmirnovTestArgMax': ('kolmogorovSmirnovTest', 'ArgMax'), 'varPopArgMax': ('varPop', 'ArgMax'), 'skewSampArgMax': ('skewSamp', 'ArgMax'), 'theilsUArgMax': ('theilsU', 'ArgMax'), 'meanZTestArgMax': ('meanZTest', 'ArgMax'), 'groupArrayInsertAtArgMax': ('groupArrayInsertAt', 'ArgMax'), 'covarSampArgMax': ('covarSamp', 'ArgMax'), 'groupBitmapOrArgMax': ('groupBitmapOr', 'ArgMax'), 'studentTTestArgMax': ('studentTTest', 'ArgMax'), 'groupUniqArrayArgMax': ('groupUniqArray', 'ArgMax'), 'largestTriangleThreeBucketsArgMax': ('largestTriangleThreeBuckets', 'ArgMax'), 'quantileExactLowArgMax': ('quantileExactLow', 'ArgMax'), 'anyArgMax': ('any', 'ArgMax'), 'quantilesExactHighArgMax': ('quantilesExactHigh', 'ArgMax'), 'stddevPopArgMax': ('stddevPop', 'ArgMax'), 'quantilesExactWeightedArgMax': ('quantilesExactWeighted', 'ArgMax'), 'quantilesExactArgMax': ('quantilesExact', 'ArgMax'), 'quantileTDigestWeightedArgMax': ('quantileTDigestWeighted', 'ArgMax'), 'quantilesExactLowArgMax': ('quantilesExactLow', 'ArgMax'), 'quantilesDeterministicArgMax': ('quantilesDeterministic', 'ArgMax'), 'minArgMax': ('min', 'ArgMax'), 'groupBitOrArgMax': ('groupBitOr', 'ArgMax'), 'quantileExactWeightedArgMax': ('quantileExactWeighted', 'ArgMax'), 'sumCountArray': ('sumCount', 'Array'), 'uniqArray': ('uniq', 'Array'), 'windowFunnelArray': ('windowFunnel', 'Array'), 'quantileInterpolatedWeightedArray': ('quantileInterpolatedWeighted', 'Array'), 'stddevSampArray': ('stddevSamp', 'Array'), 'boundingRatioArray': ('boundingRatio', 'Array'), 'groupBitAndArray': ('groupBitAnd', 'Array'), 'quantileTimingWeightedArray': ('quantileTimingWeighted', 'Array'), 'quantileGKArray': ('quantileGK', 'Array'), 'corrArray': ('corr', 'Array'), 'uniqThetaArray': ('uniqTheta', 'Array'), 'exponentialMovingAverageArray': ('exponentialMovingAverage', 'Array'), 'anyHeavyArray': ('anyHeavy', 'Array'), 'sumWithOverflowArray': ('sumWithOverflow', 'Array'), 'groupArraySampleArray': ('groupArraySample', 'Array'), 'maxIntersectionsArray': ('maxIntersections', 'Array'), 'contingencyArray': ('contingency', 'Array'), 'uniqExactArray': ('uniqExact', 'Array'), 'anyLastArray': ('anyLast', 'Array'), 'deltaSumArray': ('deltaSum', 'Array'), 'covarPopArray': ('covarPop', 'Array'), 'minMapArray': ('minMap', 'Array'), 'uniqCombined64Array': ('uniqCombined64', 'Array'), 'quantileTDigestArray': ('quantileTDigest', 'Array'), 'sparkBarArray': ('sparkBar', 'Array'), 'maxMapArray': ('maxMap', 'Array'), 'groupArrayArray': ('groupArray', 'Array'), 'maxArray': ('max', 'Array'), 'topKWeightedArray': ('topKWeighted', 'Array'), 'first_valueArray': ('first_value', 'Array'), 'quantilesGKArray': ('quantilesGK', 'Array'), 'quantileExactHighArray': ('quantileExactHigh', 'Array'), 'countArray': ('count', 'Array'), 'groupArrayMovingSumArray': ('groupArrayMovingSum', 'Array'), 'retentionArray': ('retention', 'Array'), 'medianArray': ('median', 'Array'), 'cramersVBiasCorrectedArray': ('cramersVBiasCorrected', 'Array'), 'quantileExactInclusiveArray': ('quantileExactInclusive', 'Array'), 'entropyArray': ('entropy', 'Array'), 'uniqCombinedArray': ('uniqCombined', 'Array'), 'approx_top_sumArray': ('approx_top_sum', 'Array'), 'skewPopArray': ('skewPop', 'Array'), 'quantilesTimingWeightedArray': ('quantilesTimingWeighted', 'Array'), 'avgArray': ('avg', 'Array'), 'avgWeightedArray': ('avgWeighted', 'Array'), 'sequenceCountArray': ('sequenceCount', 'Array'), 'groupBitXorArray': ('groupBitXor', 'Array'), 'histogramArray': ('histogram', 'Array'), 'quantilesBFloat16WeightedArray': ('quantilesBFloat16Weighted', 'Array'), 'kurtSampArray': ('kurtSamp', 'Array'), 'maxIntersectionsPositionArray': ('maxIntersectionsPosition', 'Array'), 'groupBitmapXorArray': ('groupBitmapXor', 'Array'), 'argMaxArray': ('argMax', 'Array'), 'groupConcatArray': ('groupConcat', 'Array'), 'last_valueArray': ('last_value', 'Array'), 'simpleLinearRegressionArray': ('simpleLinearRegression', 'Array'), 'quantilesTDigestArray': ('quantilesTDigest', 'Array'), 'quantilesInterpolatedWeightedArray': ('quantilesInterpolatedWeighted', 'Array'), 'intervalLengthSumArray': ('intervalLengthSum', 'Array'), 'quantileExactArray': ('quantileExact', 'Array'), 'deltaSumTimestampArray': ('deltaSumTimestamp', 'Array'), 'argMinArray': ('argMin', 'Array'), 'exponentialTimeDecayedAvgArray': ('exponentialTimeDecayedAvg', 'Array'), 'groupBitmapAndArray': ('groupBitmapAnd', 'Array'), 'uniqHLL12Array': ('uniqHLL12', 'Array'), 'stochasticLogisticRegressionArray': ('stochasticLogisticRegression', 'Array'), 'quantilesTDigestWeightedArray': ('quantilesTDigestWeighted', 'Array'), 'quantilesArray': ('quantiles', 'Array'), 'quantilesTimingArray': ('quantilesTiming', 'Array'), 'quantileBFloat16WeightedArray': ('quantileBFloat16Weighted', 'Array'), 'welchTTestArray': ('welchTTest', 'Array'), 'stochasticLinearRegressionArray': ('stochasticLinearRegression', 'Array'), 'quantilesBFloat16Array': ('quantilesBFloat16', 'Array'), 'varSampArray': ('varSamp', 'Array'), 'groupArrayLastArray': ('groupArrayLast', 'Array'), 'uniqUpToArray': ('uniqUpTo', 'Array'), 'quantileTimingArray': ('quantileTiming', 'Array'), 'sumArray': ('sum', 'Array'), 'kurtPopArray': ('kurtPop', 'Array'), 'sequenceMatchArray': ('sequenceMatch', 'Array'), 'sumMapArray': ('sumMap', 'Array'), 'topKArray': ('topK', 'Array'), 'sumKahanArray': ('sumKahan', 'Array'), 'groupArrayMovingAvgArray': ('groupArrayMovingAvg', 'Array'), 'groupBitmapArray': ('groupBitmap', 'Array'), 'rankCorrArray': ('rankCorr', 'Array'), 'mannWhitneyUTestArray': ('mannWhitneyUTest', 'Array'), 'categoricalInformationValueArray': ('categoricalInformationValue', 'Array'), 'cramersVArray': ('cramersV', 'Array'), 'sequenceNextNodeArray': ('sequenceNextNode', 'Array'), 'quantileDeterministicArray': ('quantileDeterministic', 'Array'), 'quantilesExactExclusiveArray': ('quantilesExactExclusive', 'Array'), 'quantileArray': ('quantile', 'Array'), 'quantileBFloat16Array': ('quantileBFloat16', 'Array'), 'kolmogorovSmirnovTestArray': ('kolmogorovSmirnovTest', 'Array'), 'varPopArray': ('varPop', 'Array'), 'skewSampArray': ('skewSamp', 'Array'), 'theilsUArray': ('theilsU', 'Array'), 'meanZTestArray': ('meanZTest', 'Array'), 'groupArrayInsertAtArray': ('groupArrayInsertAt', 'Array'), 'covarSampArray': ('covarSamp', 'Array'), 'groupBitmapOrArray': ('groupBitmapOr', 'Array'), 'studentTTestArray': ('studentTTest', 'Array'), 'groupUniqArrayArray': ('groupUniqArray', 'Array'), 'largestTriangleThreeBucketsArray': ('largestTriangleThreeBuckets', 'Array'), 'quantileExactLowArray': ('quantileExactLow', 'Array'), 'anyArray': ('any', 'Array'), 'quantilesExactHighArray': ('quantilesExactHigh', 'Array'), 'stddevPopArray': ('stddevPop', 'Array'), 'quantilesExactWeightedArray': ('quantilesExactWeighted', 'Array'), 'quantilesExactArray': ('quantilesExact', 'Array'), 'quantileTDigestWeightedArray': ('quantileTDigestWeighted', 'Array'), 'quantilesExactLowArray': ('quantilesExactLow', 'Array'), 'quantilesDeterministicArray': ('quantilesDeterministic', 'Array'), 'minArray': ('min', 'Array'), 'groupBitOrArray': ('groupBitOr', 'Array'), 'quantileExactWeightedArray': ('quantileExactWeighted', 'Array'), 'sumCountState': ('sumCount', 'State'), 'uniqState': ('uniq', 'State'), 'windowFunnelState': ('windowFunnel', 'State'), 'quantileInterpolatedWeightedState': ('quantileInterpolatedWeighted', 'State'), 'stddevSampState': ('stddevSamp', 'State'), 'boundingRatioState': ('boundingRatio', 'State'), 'groupBitAndState': ('groupBitAnd', 'State'), 'quantileTimingWeightedState': ('quantileTimingWeighted', 'State'), 'quantileGKState': ('quantileGK', 'State'), 'corrState': ('corr', 'State'), 'uniqThetaState': ('uniqTheta', 'State'), 'exponentialMovingAverageState': ('exponentialMovingAverage', 'State'), 'anyHeavyState': ('anyHeavy', 'State'), 'sumWithOverflowState': ('sumWithOverflow', 'State'), 'groupArraySampleState': ('groupArraySample', 'State'), 'maxIntersectionsState': ('maxIntersections', 'State'), 'contingencyState': ('contingency', 'State'), 'uniqExactState': ('uniqExact', 'State'), 'anyLastState': ('anyLast', 'State'), 'deltaSumState': ('deltaSum', 'State'), 'covarPopState': ('covarPop', 'State'), 'minMapState': ('minMap', 'State'), 'uniqCombined64State': ('uniqCombined64', 'State'), 'quantileTDigestState': ('quantileTDigest', 'State'), 'sparkBarState': ('sparkBar', 'State'), 'maxMapState': ('maxMap', 'State'), 'groupArrayState': ('groupArray', 'State'), 'maxState': ('max', 'State'), 'topKWeightedState': ('topKWeighted', 'State'), 'first_valueState': ('first_value', 'State'), 'quantilesGKState': ('quantilesGK', 'State'), 'quantileExactHighState': ('quantileExactHigh', 'State'), 'countState': ('count', 'State'), 'groupArrayMovingSumState': ('groupArrayMovingSum', 'State'), 'retentionState': ('retention', 'State'), 'medianState': ('median', 'State'), 'cramersVBiasCorrectedState': ('cramersVBiasCorrected', 'State'), 'quantileExactInclusiveState': ('quantileExactInclusive', 'State'), 'entropyState': ('entropy', 'State'), 'uniqCombinedState': ('uniqCombined', 'State'), 'approx_top_sumState': ('approx_top_sum', 'State'), 'skewPopState': ('skewPop', 'State'), 'quantilesTimingWeightedState': ('quantilesTimingWeighted', 'State'), 'avgState': ('avg', 'State'), 'avgWeightedState': ('avgWeighted', 'State'), 'sequenceCountState': ('sequenceCount', 'State'), 'groupBitXorState': ('groupBitXor', 'State'), 'histogramState': ('histogram', 'State'), 'quantilesBFloat16WeightedState': ('quantilesBFloat16Weighted', 'State'), 'kurtSampState': ('kurtSamp', 'State'), 'maxIntersectionsPositionState': ('maxIntersectionsPosition', 'State'), 'groupBitmapXorState': ('groupBitmapXor', 'State'), 'argMaxState': ('argMax', 'State'), 'groupConcatState': ('groupConcat', 'State'), 'last_valueState': ('last_value', 'State'), 'simpleLinearRegressionState': ('simpleLinearRegression', 'State'), 'quantilesTDigestState': ('quantilesTDigest', 'State'), 'quantilesInterpolatedWeightedState': ('quantilesInterpolatedWeighted', 'State'), 'intervalLengthSumState': ('intervalLengthSum', 'State'), 'quantileExactState': ('quantileExact', 'State'), 'deltaSumTimestampState': ('deltaSumTimestamp', 'State'), 'argMinState': ('argMin', 'State'), 'exponentialTimeDecayedAvgState': ('exponentialTimeDecayedAvg', 'State'), 'groupBitmapAndState': ('groupBitmapAnd', 'State'), 'uniqHLL12State': ('uniqHLL12', 'State'), 'stochasticLogisticRegressionState': ('stochasticLogisticRegression', 'State'), 'quantilesTDigestWeightedState': ('quantilesTDigestWeighted', 'State'), 'quantilesState': ('quantiles', 'State'), 'quantilesTimingState': ('quantilesTiming', 'State'), 'quantileBFloat16WeightedState': ('quantileBFloat16Weighted', 'State'), 'welchTTestState': ('welchTTest', 'State'), 'stochasticLinearRegressionState': ('stochasticLinearRegression', 'State'), 'quantilesBFloat16State': ('quantilesBFloat16', 'State'), 'varSampState': ('varSamp', 'State'), 'groupArrayLastState': ('groupArrayLast', 'State'), 'uniqUpToState': ('uniqUpTo', 'State'), 'quantileTimingState': ('quantileTiming', 'State'), 'sumState': ('sum', 'State'), 'kurtPopState': ('kurtPop', 'State'), 'sequenceMatchState': ('sequenceMatch', 'State'), 'sumMapState': ('sumMap', 'State'), 'topKState': ('topK', 'State'), 'sumKahanState': ('sumKahan', 'State'), 'groupArrayMovingAvgState': ('groupArrayMovingAvg', 'State'), 'groupBitmapState': ('groupBitmap', 'State'), 'rankCorrState': ('rankCorr', 'State'), 'mannWhitneyUTestState': ('mannWhitneyUTest', 'State'), 'categoricalInformationValueState': ('categoricalInformationValue', 'State'), 'cramersVState': ('cramersV', 'State'), 'sequenceNextNodeState': ('sequenceNextNode', 'State'), 'quantileDeterministicState': ('quantileDeterministic', 'State'), 'quantilesExactExclusiveState': ('quantilesExactExclusive', 'State'), 'quantileState': ('quantile', 'State'), 'quantileBFloat16State': ('quantileBFloat16', 'State'), 'kolmogorovSmirnovTestState': ('kolmogorovSmirnovTest', 'State'), 'varPopState': ('varPop', 'State'), 'skewSampState': ('skewSamp', 'State'), 'theilsUState': ('theilsU', 'State'), 'meanZTestState': ('meanZTest', 'State'), 'groupArrayInsertAtState': ('groupArrayInsertAt', 'State'), 'covarSampState': ('covarSamp', 'State'), 'groupBitmapOrState': ('groupBitmapOr', 'State'), 'studentTTestState': ('studentTTest', 'State'), 'groupUniqArrayState': ('groupUniqArray', 'State'), 'largestTriangleThreeBucketsState': ('largestTriangleThreeBuckets', 'State'), 'quantileExactLowState': ('quantileExactLow', 'State'), 'anyState': ('any', 'State'), 'quantilesExactHighState': ('quantilesExactHigh', 'State'), 'stddevPopState': ('stddevPop', 'State'), 'quantilesExactWeightedState': ('quantilesExactWeighted', 'State'), 'quantilesExactState': ('quantilesExact', 'State'), 'quantileTDigestWeightedState': ('quantileTDigestWeighted', 'State'), 'quantilesExactLowState': ('quantilesExactLow', 'State'), 'quantilesDeterministicState': ('quantilesDeterministic', 'State'), 'minState': ('min', 'State'), 'groupBitOrState': ('groupBitOr', 'State'), 'quantileExactWeightedState': ('quantileExactWeighted', 'State'), 'sumCountMerge': ('sumCount', 'Merge'), 'uniqMerge': ('uniq', 'Merge'), 'windowFunnelMerge': ('windowFunnel', 'Merge'), 'quantileInterpolatedWeightedMerge': ('quantileInterpolatedWeighted', 'Merge'), 'stddevSampMerge': ('stddevSamp', 'Merge'), 'boundingRatioMerge': ('boundingRatio', 'Merge'), 'groupBitAndMerge': ('groupBitAnd', 'Merge'), 'quantileTimingWeightedMerge': ('quantileTimingWeighted', 'Merge'), 'quantileGKMerge': ('quantileGK', 'Merge'), 'corrMerge': ('corr', 'Merge'), 'uniqThetaMerge': ('uniqTheta', 'Merge'), 'exponentialMovingAverageMerge': ('exponentialMovingAverage', 'Merge'), 'anyHeavyMerge': ('anyHeavy', 'Merge'), 'sumWithOverflowMerge': ('sumWithOverflow', 'Merge'), 'groupArraySampleMerge': ('groupArraySample', 'Merge'), 'maxIntersectionsMerge': ('maxIntersections', 'Merge'), 'contingencyMerge': ('contingency', 'Merge'), 'uniqExactMerge': ('uniqExact', 'Merge'), 'anyLastMerge': ('anyLast', 'Merge'), 'deltaSumMerge': ('deltaSum', 'Merge'), 'covarPopMerge': ('covarPop', 'Merge'), 'minMapMerge': ('minMap', 'Merge'), 'uniqCombined64Merge': ('uniqCombined64', 'Merge'), 'quantileTDigestMerge': ('quantileTDigest', 'Merge'), 'sparkBarMerge': ('sparkBar', 'Merge'), 'maxMapMerge': ('maxMap', 'Merge'), 'groupArrayMerge': ('groupArray', 'Merge'), 'maxMerge': ('max', 'Merge'), 'topKWeightedMerge': ('topKWeighted', 'Merge'), 'first_valueMerge': ('first_value', 'Merge'), 'quantilesGKMerge': ('quantilesGK', 'Merge'), 'quantileExactHighMerge': ('quantileExactHigh', 'Merge'), 'countMerge': ('count', 'Merge'), 'groupArrayMovingSumMerge': ('groupArrayMovingSum', 'Merge'), 'retentionMerge': ('retention', 'Merge'), 'medianMerge': ('median', 'Merge'), 'cramersVBiasCorrectedMerge': ('cramersVBiasCorrected', 'Merge'), 'quantileExactInclusiveMerge': ('quantileExactInclusive', 'Merge'), 'entropyMerge': ('entropy', 'Merge'), 'uniqCombinedMerge': ('uniqCombined', 'Merge'), 'approx_top_sumMerge': ('approx_top_sum', 'Merge'), 'skewPopMerge': ('skewPop', 'Merge'), 'quantilesTimingWeightedMerge': ('quantilesTimingWeighted', 'Merge'), 'avgMerge': ('avg', 'Merge'), 'avgWeightedMerge': ('avgWeighted', 'Merge'), 'sequenceCountMerge': ('sequenceCount', 'Merge'), 'groupBitXorMerge': ('groupBitXor', 'Merge'), 'histogramMerge': ('histogram', 'Merge'), 'quantilesBFloat16WeightedMerge': ('quantilesBFloat16Weighted', 'Merge'), 'kurtSampMerge': ('kurtSamp', 'Merge'), 'maxIntersectionsPositionMerge': ('maxIntersectionsPosition', 'Merge'), 'groupBitmapXorMerge': ('groupBitmapXor', 'Merge'), 'argMaxMerge': ('argMax', 'Merge'), 'groupConcatMerge': ('groupConcat', 'Merge'), 'last_valueMerge': ('last_value', 'Merge'), 'simpleLinearRegressionMerge': ('simpleLinearRegression', 'Merge'), 'quantilesTDigestMerge': ('quantilesTDigest', 'Merge'), 'quantilesInterpolatedWeightedMerge': ('quantilesInterpolatedWeighted', 'Merge'), 'intervalLengthSumMerge': ('intervalLengthSum', 'Merge'), 'quantileExactMerge': ('quantileExact', 'Merge'), 'deltaSumTimestampMerge': ('deltaSumTimestamp', 'Merge'), 'argMinMerge': ('argMin', 'Merge'), 'exponentialTimeDecayedAvgMerge': ('exponentialTimeDecayedAvg', 'Merge'), 'groupBitmapAndMerge': ('groupBitmapAnd', 'Merge'), 'uniqHLL12Merge': ('uniqHLL12', 'Merge'), 'stochasticLogisticRegressionMerge': ('stochasticLogisticRegression', 'Merge'), 'quantilesTDigestWeightedMerge': ('quantilesTDigestWeighted', 'Merge'), 'quantilesMerge': ('quantiles', 'Merge'), 'quantilesTimingMerge': ('quantilesTiming', 'Merge'), 'quantileBFloat16WeightedMerge': ('quantileBFloat16Weighted', 'Merge'), 'welchTTestMerge': ('welchTTest', 'Merge'), 'stochasticLinearRegressionMerge': ('stochasticLinearRegression', 'Merge'), 'quantilesBFloat16Merge': ('quantilesBFloat16', 'Merge'), 'varSampMerge': ('varSamp', 'Merge'), 'groupArrayLastMerge': ('groupArrayLast', 'Merge'), 'uniqUpToMerge': ('uniqUpTo', 'Merge'), 'quantileTimingMerge': ('quantileTiming', 'Merge'), 'sumMerge': ('sum', 'Merge'), 'kurtPopMerge': ('kurtPop', 'Merge'), 'sequenceMatchMerge': ('sequenceMatch', 'Merge'), 'sumMapMerge': ('sumMap', 'Merge'), 'topKMerge': ('topK', 'Merge'), 'sumKahanMerge': ('sumKahan', 'Merge'), 'groupArrayMovingAvgMerge': ('groupArrayMovingAvg', 'Merge'), 'groupBitmapMerge': ('groupBitmap', 'Merge'), 'rankCorrMerge': ('rankCorr', 'Merge'), 'mannWhitneyUTestMerge': ('mannWhitneyUTest', 'Merge'), 'categoricalInformationValueMerge': ('categoricalInformationValue', 'Merge'), 'cramersVMerge': ('cramersV', 'Merge'), 'sequenceNextNodeMerge': ('sequenceNextNode', 'Merge'), 'quantileDeterministicMerge': ('quantileDeterministic', 'Merge'), 'quantilesExactExclusiveMerge': ('quantilesExactExclusive', 'Merge'), 'quantileMerge': ('quantile', 'Merge'), 'quantileBFloat16Merge': ('quantileBFloat16', 'Merge'), 'kolmogorovSmirnovTestMerge': ('kolmogorovSmirnovTest', 'Merge'), 'varPopMerge': ('varPop', 'Merge'), 'skewSampMerge': ('skewSamp', 'Merge'), 'theilsUMerge': ('theilsU', 'Merge'), 'meanZTestMerge': ('meanZTest', 'Merge'), 'groupArrayInsertAtMerge': ('groupArrayInsertAt', 'Merge'), 'covarSampMerge': ('covarSamp', 'Merge'), 'groupBitmapOrMerge': ('groupBitmapOr', 'Merge'), 'studentTTestMerge': ('studentTTest', 'Merge'), 'groupUniqArrayMerge': ('groupUniqArray', 'Merge'), 'largestTriangleThreeBucketsMerge': ('largestTriangleThreeBuckets', 'Merge'), 'quantileExactLowMerge': ('quantileExactLow', 'Merge'), 'anyMerge': ('any', 'Merge'), 'quantilesExactHighMerge': ('quantilesExactHigh', 'Merge'), 'stddevPopMerge': ('stddevPop', 'Merge'), 'quantilesExactWeightedMerge': ('quantilesExactWeighted', 'Merge'), 'quantilesExactMerge': ('quantilesExact', 'Merge'), 'quantileTDigestWeightedMerge': ('quantileTDigestWeighted', 'Merge'), 'quantilesExactLowMerge': ('quantilesExactLow', 'Merge'), 'quantilesDeterministicMerge': ('quantilesDeterministic', 'Merge'), 'minMerge': ('min', 'Merge'), 'groupBitOrMerge': ('groupBitOr', 'Merge'), 'quantileExactWeightedMerge': ('quantileExactWeighted', 'Merge'), 'sumCountMap': ('sumCount', 'Map'), 'uniqMap': ('uniq', 'Map'), 'windowFunnelMap': ('windowFunnel', 'Map'), 'quantileInterpolatedWeightedMap': ('quantileInterpolatedWeighted', 'Map'), 'stddevSampMap': ('stddevSamp', 'Map'), 'boundingRatioMap': ('boundingRatio', 'Map'), 'groupBitAndMap': ('groupBitAnd', 'Map'), 'quantileTimingWeightedMap': ('quantileTimingWeighted', 'Map'), 'quantileGKMap': ('quantileGK', 'Map'), 'corrMap': ('corr', 'Map'), 'uniqThetaMap': ('uniqTheta', 'Map'), 'exponentialMovingAverageMap': ('exponentialMovingAverage', 'Map'), 'anyHeavyMap': ('anyHeavy', 'Map'), 'sumWithOverflowMap': ('sumWithOverflow', 'Map'), 'groupArraySampleMap': ('groupArraySample', 'Map'), 'maxIntersectionsMap': ('maxIntersections', 'Map'), 'contingencyMap': ('contingency', 'Map'), 'uniqExactMap': ('uniqExact', 'Map'), 'anyLastMap': ('anyLast', 'Map'), 'deltaSumMap': ('deltaSum', 'Map'), 'covarPopMap': ('covarPop', 'Map'), 'minMapMap': ('minMap', 'Map'), 'uniqCombined64Map': ('uniqCombined64', 'Map'), 'quantileTDigestMap': ('quantileTDigest', 'Map'), 'sparkBarMap': ('sparkBar', 'Map'), 'maxMapMap': ('maxMap', 'Map'), 'groupArrayMap': ('groupArray', 'Map'), 'maxMap': ('maxMap', None), 'topKWeightedMap': ('topKWeighted', 'Map'), 'first_valueMap': ('first_value', 'Map'), 'quantilesGKMap': ('quantilesGK', 'Map'), 'quantileExactHighMap': ('quantileExactHigh', 'Map'), 'countMap': ('count', 'Map'), 'groupArrayMovingSumMap': ('groupArrayMovingSum', 'Map'), 'retentionMap': ('retention', 'Map'), 'medianMap': ('median', 'Map'), 'cramersVBiasCorrectedMap': ('cramersVBiasCorrected', 'Map'), 'quantileExactInclusiveMap': ('quantileExactInclusive', 'Map'), 'entropyMap': ('entropy', 'Map'), 'uniqCombinedMap': ('uniqCombined', 'Map'), 'approx_top_sumMap': ('approx_top_sum', 'Map'), 'skewPopMap': ('skewPop', 'Map'), 'quantilesTimingWeightedMap': ('quantilesTimingWeighted', 'Map'), 'avgMap': ('avg', 'Map'), 'avgWeightedMap': ('avgWeighted', 'Map'), 'sequenceCountMap': ('sequenceCount', 'Map'), 'groupBitXorMap': ('groupBitXor', 'Map'), 'histogramMap': ('histogram', 'Map'), 'quantilesBFloat16WeightedMap': ('quantilesBFloat16Weighted', 'Map'), 'kurtSampMap': ('kurtSamp', 'Map'), 'maxIntersectionsPositionMap': ('maxIntersectionsPosition', 'Map'), 'groupBitmapXorMap': ('groupBitmapXor', 'Map'), 'argMaxMap': ('argMax', 'Map'), 'groupConcatMap': ('groupConcat', 'Map'), 'last_valueMap': ('last_value', 'Map'), 'simpleLinearRegressionMap': ('simpleLinearRegression', 'Map'), 'quantilesTDigestMap': ('quantilesTDigest', 'Map'), 'quantilesInterpolatedWeightedMap': ('quantilesInterpolatedWeighted', 'Map'), 'intervalLengthSumMap': ('intervalLengthSum', 'Map'), 'quantileExactMap': ('quantileExact', 'Map'), 'deltaSumTimestampMap': ('deltaSumTimestamp', 'Map'), 'argMinMap': ('argMin', 'Map'), 'exponentialTimeDecayedAvgMap': ('exponentialTimeDecayedAvg', 'Map'), 'groupBitmapAndMap': ('groupBitmapAnd', 'Map'), 'uniqHLL12Map': ('uniqHLL12', 'Map'), 'stochasticLogisticRegressionMap': ('stochasticLogisticRegression', 'Map'), 'quantilesTDigestWeightedMap': ('quantilesTDigestWeighted', 'Map'), 'quantilesMap': ('quantiles', 'Map'), 'quantilesTimingMap': ('quantilesTiming', 'Map'), 'quantileBFloat16WeightedMap': ('quantileBFloat16Weighted', 'Map'), 'welchTTestMap': ('welchTTest', 'Map'), 'stochasticLinearRegressionMap': ('stochasticLinearRegression', 'Map'), 'quantilesBFloat16Map': ('quantilesBFloat16', 'Map'), 'varSampMap': ('varSamp', 'Map'), 'groupArrayLastMap': ('groupArrayLast', 'Map'), 'uniqUpToMap': ('uniqUpTo', 'Map'), 'quantileTimingMap': ('quantileTiming', 'Map'), 'sumMap': ('sumMap', None), 'kurtPopMap': ('kurtPop', 'Map'), 'sequenceMatchMap': ('sequenceMatch', 'Map'), 'sumMapMap': ('sumMap', 'Map'), 'topKMap': ('topK', 'Map'), 'sumKahanMap': ('sumKahan', 'Map'), 'groupArrayMovingAvgMap': ('groupArrayMovingAvg', 'Map'), 'groupBitmapMap': ('groupBitmap', 'Map'), 'rankCorrMap': ('rankCorr', 'Map'), 'mannWhitneyUTestMap': ('mannWhitneyUTest', 'Map'), 'categoricalInformationValueMap': ('categoricalInformationValue', 'Map'), 'cramersVMap': ('cramersV', 'Map'), 'sequenceNextNodeMap': ('sequenceNextNode', 'Map'), 'quantileDeterministicMap': ('quantileDeterministic', 'Map'), 'quantilesExactExclusiveMap': ('quantilesExactExclusive', 'Map'), 'quantileMap': ('quantile', 'Map'), 'quantileBFloat16Map': ('quantileBFloat16', 'Map'), 'kolmogorovSmirnovTestMap': ('kolmogorovSmirnovTest', 'Map'), 'varPopMap': ('varPop', 'Map'), 'skewSampMap': ('skewSamp', 'Map'), 'theilsUMap': ('theilsU', 'Map'), 'meanZTestMap': ('meanZTest', 'Map'), 'groupArrayInsertAtMap': ('groupArrayInsertAt', 'Map'), 'covarSampMap': ('covarSamp', 'Map'), 'groupBitmapOrMap': ('groupBitmapOr', 'Map'), 'studentTTestMap': ('studentTTest', 'Map'), 'groupUniqArrayMap': ('groupUniqArray', 'Map'), 'largestTriangleThreeBucketsMap': ('largestTriangleThreeBuckets', 'Map'), 'quantileExactLowMap': ('quantileExactLow', 'Map'), 'anyMap': ('any', 'Map'), 'quantilesExactHighMap': ('quantilesExactHigh', 'Map'), 'stddevPopMap': ('stddevPop', 'Map'), 'quantilesExactWeightedMap': ('quantilesExactWeighted', 'Map'), 'quantilesExactMap': ('quantilesExact', 'Map'), 'quantileTDigestWeightedMap': ('quantileTDigestWeighted', 'Map'), 'quantilesExactLowMap': ('quantilesExactLow', 'Map'), 'quantilesDeterministicMap': ('quantilesDeterministic', 'Map'), 'minMap': ('minMap', None), 'groupBitOrMap': ('groupBitOr', 'Map'), 'quantileExactWeightedMap': ('quantileExactWeighted', 'Map'), 'sumCountIf': ('sumCount', 'If'), 'uniqIf': ('uniq', 'If'), 'windowFunnelIf': ('windowFunnel', 'If'), 'quantileInterpolatedWeightedIf': ('quantileInterpolatedWeighted', 'If'), 'stddevSampIf': ('stddevSamp', 'If'), 'boundingRatioIf': ('boundingRatio', 'If'), 'groupBitAndIf': ('groupBitAnd', 'If'), 'quantileTimingWeightedIf': ('quantileTimingWeighted', 'If'), 'quantileGKIf': ('quantileGK', 'If'), 'corrIf': ('corr', 'If'), 'uniqThetaIf': ('uniqTheta', 'If'), 'exponentialMovingAverageIf': ('exponentialMovingAverage', 'If'), 'anyHeavyIf': ('anyHeavy', 'If'), 'sumWithOverflowIf': ('sumWithOverflow', 'If'), 'groupArraySampleIf': ('groupArraySample', 'If'), 'maxIntersectionsIf': ('maxIntersections', 'If'), 'contingencyIf': ('contingency', 'If'), 'uniqExactIf': ('uniqExact', 'If'), 'anyLastIf': ('anyLast', 'If'), 'deltaSumIf': ('deltaSum', 'If'), 'covarPopIf': ('covarPop', 'If'), 'minMapIf': ('minMap', 'If'), 'uniqCombined64If': ('uniqCombined64', 'If'), 'quantileTDigestIf': ('quantileTDigest', 'If'), 'sparkBarIf': ('sparkBar', 'If'), 'maxMapIf': ('maxMap', 'If'), 'groupArrayIf': ('groupArray', 'If'), 'maxIf': ('max', 'If'), 'topKWeightedIf': ('topKWeighted', 'If'), 'first_valueIf': ('first_value', 'If'), 'quantilesGKIf': ('quantilesGK', 'If'), 'quantileExactHighIf': ('quantileExactHigh', 'If'), 'countIf': ('count', 'If'), 'groupArrayMovingSumIf': ('groupArrayMovingSum', 'If'), 'retentionIf': ('retention', 'If'), 'medianIf': ('median', 'If'), 'cramersVBiasCorrectedIf': ('cramersVBiasCorrected', 'If'), 'quantileExactInclusiveIf': ('quantileExactInclusive', 'If'), 'entropyIf': ('entropy', 'If'), 'uniqCombinedIf': ('uniqCombined', 'If'), 'approx_top_sumIf': ('approx_top_sum', 'If'), 'skewPopIf': ('skewPop', 'If'), 'quantilesTimingWeightedIf': ('quantilesTimingWeighted', 'If'), 'avgIf': ('avg', 'If'), 'avgWeightedIf': ('avgWeighted', 'If'), 'sequenceCountIf': ('sequenceCount', 'If'), 'groupBitXorIf': ('groupBitXor', 'If'), 'histogramIf': ('histogram', 'If'), 'quantilesBFloat16WeightedIf': ('quantilesBFloat16Weighted', 'If'), 'kurtSampIf': ('kurtSamp', 'If'), 'maxIntersectionsPositionIf': ('maxIntersectionsPosition', 'If'), 'groupBitmapXorIf': ('groupBitmapXor', 'If'), 'argMaxIf': ('argMax', 'If'), 'groupConcatIf': ('groupConcat', 'If'), 'last_valueIf': ('last_value', 'If'), 'simpleLinearRegressionIf': ('simpleLinearRegression', 'If'), 'quantilesTDigestIf': ('quantilesTDigest', 'If'), 'quantilesInterpolatedWeightedIf': ('quantilesInterpolatedWeighted', 'If'), 'intervalLengthSumIf': ('intervalLengthSum', 'If'), 'quantileExactIf': ('quantileExact', 'If'), 'deltaSumTimestampIf': ('deltaSumTimestamp', 'If'), 'argMinIf': ('argMin', 'If'), 'exponentialTimeDecayedAvgIf': ('exponentialTimeDecayedAvg', 'If'), 'groupBitmapAndIf': ('groupBitmapAnd', 'If'), 'uniqHLL12If': ('uniqHLL12', 'If'), 'stochasticLogisticRegressionIf': ('stochasticLogisticRegression', 'If'), 'quantilesTDigestWeightedIf': ('quantilesTDigestWeighted', 'If'), 'quantilesIf': ('quantiles', 'If'), 'quantilesTimingIf': ('quantilesTiming', 'If'), 'quantileBFloat16WeightedIf': ('quantileBFloat16Weighted', 'If'), 'welchTTestIf': ('welchTTest', 'If'), 'stochasticLinearRegressionIf': ('stochasticLinearRegression', 'If'), 'quantilesBFloat16If': ('quantilesBFloat16', 'If'), 'varSampIf': ('varSamp', 'If'), 'groupArrayLastIf': ('groupArrayLast', 'If'), 'uniqUpToIf': ('uniqUpTo', 'If'), 'quantileTimingIf': ('quantileTiming', 'If'), 'sumIf': ('sum', 'If'), 'kurtPopIf': ('kurtPop', 'If'), 'sequenceMatchIf': ('sequenceMatch', 'If'), 'sumMapIf': ('sumMap', 'If'), 'topKIf': ('topK', 'If'), 'sumKahanIf': ('sumKahan', 'If'), 'groupArrayMovingAvgIf': ('groupArrayMovingAvg', 'If'), 'groupBitmapIf': ('groupBitmap', 'If'), 'rankCorrIf': ('rankCorr', 'If'), 'mannWhitneyUTestIf': ('mannWhitneyUTest', 'If'), 'categoricalInformationValueIf': ('categoricalInformationValue', 'If'), 'cramersVIf': ('cramersV', 'If'), 'sequenceNextNodeIf': ('sequenceNextNode', 'If'), 'quantileDeterministicIf': ('quantileDeterministic', 'If'), 'quantilesExactExclusiveIf': ('quantilesExactExclusive', 'If'), 'quantileIf': ('quantile', 'If'), 'quantileBFloat16If': ('quantileBFloat16', 'If'), 'kolmogorovSmirnovTestIf': ('kolmogorovSmirnovTest', 'If'), 'varPopIf': ('varPop', 'If'), 'skewSampIf': ('skewSamp', 'If'), 'theilsUIf': ('theilsU', 'If'), 'meanZTestIf': ('meanZTest', 'If'), 'groupArrayInsertAtIf': ('groupArrayInsertAt', 'If'), 'covarSampIf': ('covarSamp', 'If'), 'groupBitmapOrIf': ('groupBitmapOr', 'If'), 'studentTTestIf': ('studentTTest', 'If'), 'groupUniqArrayIf': ('groupUniqArray', 'If'), 'largestTriangleThreeBucketsIf': ('largestTriangleThreeBuckets', 'If'), 'quantileExactLowIf': ('quantileExactLow', 'If'), 'anyIf': ('any', 'If'), 'quantilesExactHighIf': ('quantilesExactHigh', 'If'), 'stddevPopIf': ('stddevPop', 'If'), 'quantilesExactWeightedIf': ('quantilesExactWeighted', 'If'), 'quantilesExactIf': ('quantilesExact', 'If'), 'quantileTDigestWeightedIf': ('quantileTDigestWeighted', 'If'), 'quantilesExactLowIf': ('quantilesExactLow', 'If'), 'quantilesDeterministicIf': ('quantilesDeterministic', 'If'), 'minIf': ('min', 'If'), 'groupBitOrIf': ('groupBitOr', 'If'), 'quantileExactWeightedIf': ('quantileExactWeighted', 'If'), 'sumCount': ('sumCount', None), 'uniq': ('uniq', None), 'windowFunnel': ('windowFunnel', None), 'quantileInterpolatedWeighted': ('quantileInterpolatedWeighted', None), 'stddevSamp': ('stddevSamp', None), 'boundingRatio': ('boundingRatio', None), 'groupBitAnd': ('groupBitAnd', None), 'quantileTimingWeighted': ('quantileTimingWeighted', None), 'quantileGK': ('quantileGK', None), 'corr': ('corr', None), 'uniqTheta': ('uniqTheta', None), 'exponentialMovingAverage': ('exponentialMovingAverage', None), 'anyHeavy': ('anyHeavy', None), 'sumWithOverflow': ('sumWithOverflow', None), 'groupArraySample': ('groupArraySample', None), 'maxIntersections': ('maxIntersections', None), 'contingency': ('contingency', None), 'uniqExact': ('uniqExact', None), 'anyLast': ('anyLast', None), 'deltaSum': ('deltaSum', None), 'covarPop': ('covarPop', None), 'uniqCombined64': ('uniqCombined64', None), 'quantileTDigest': ('quantileTDigest', None), 'sparkBar': ('sparkBar', None), 'groupArray': ('groupArray', None), 'max': ('max', None), 'topKWeighted': ('topKWeighted', None), 'first_value': ('first_value', None), 'quantilesGK': ('quantilesGK', None), 'quantileExactHigh': ('quantileExactHigh', None), 'count': ('count', None), 'groupArrayMovingSum': ('groupArrayMovingSum', None), 'retention': ('retention', None), 'median': ('median', None), 'cramersVBiasCorrected': ('cramersVBiasCorrected', None), 'quantileExactInclusive': ('quantileExactInclusive', None), 'entropy': ('entropy', None), 'uniqCombined': ('uniqCombined', None), 'approx_top_sum': ('approx_top_sum', None), 'skewPop': ('skewPop', None), 'quantilesTimingWeighted': ('quantilesTimingWeighted', None), 'avg': ('avg', None), 'avgWeighted': ('avgWeighted', None), 'sequenceCount': ('sequenceCount', None), 'groupBitXor': ('groupBitXor', None), 'histogram': ('histogram', None), 'quantilesBFloat16Weighted': ('quantilesBFloat16Weighted', None), 'kurtSamp': ('kurtSamp', None), 'maxIntersectionsPosition': ('maxIntersectionsPosition', None), 'groupBitmapXor': ('groupBitmapXor', None), 'argMax': ('argMax', None), 'groupConcat': ('groupConcat', None), 'last_value': ('last_value', None), 'simpleLinearRegression': ('simpleLinearRegression', None), 'quantilesTDigest': ('quantilesTDigest', None), 'quantilesInterpolatedWeighted': ('quantilesInterpolatedWeighted', None), 'intervalLengthSum': ('intervalLengthSum', None), 'quantileExact': ('quantileExact', None), 'deltaSumTimestamp': ('deltaSumTimestamp', None), 'argMin': ('argMin', None), 'exponentialTimeDecayedAvg': ('exponentialTimeDecayedAvg', None), 'groupBitmapAnd': ('groupBitmapAnd', None), 'uniqHLL12': ('uniqHLL12', None), 'stochasticLogisticRegression': ('stochasticLogisticRegression', None), 'quantilesTDigestWeighted': ('quantilesTDigestWeighted', None), 'quantiles': ('quantiles', None), 'quantilesTiming': ('quantilesTiming', None), 'quantileBFloat16Weighted': ('quantileBFloat16Weighted', None), 'welchTTest': ('welchTTest', None), 'stochasticLinearRegression': ('stochasticLinearRegression', None), 'quantilesBFloat16': ('quantilesBFloat16', None), 'varSamp': ('varSamp', None), 'groupArrayLast': ('groupArrayLast', None), 'uniqUpTo': ('uniqUpTo', None), 'quantileTiming': ('quantileTiming', None), 'sum': ('sum', None), 'kurtPop': ('kurtPop', None), 'sequenceMatch': ('sequenceMatch', None), 'topK': ('topK', None), 'sumKahan': ('sumKahan', None), 'groupArrayMovingAvg': ('groupArrayMovingAvg', None), 'groupBitmap': ('groupBitmap', None), 'rankCorr': ('rankCorr', None), 'mannWhitneyUTest': ('mannWhitneyUTest', None), 'categoricalInformationValue': ('categoricalInformationValue', None), 'cramersV': ('cramersV', None), 'sequenceNextNode': ('sequenceNextNode', None), 'quantileDeterministic': ('quantileDeterministic', None), 'quantilesExactExclusive': ('quantilesExactExclusive', None), 'quantile': ('quantile', None), 'quantileBFloat16': ('quantileBFloat16', None), 'kolmogorovSmirnovTest': ('kolmogorovSmirnovTest', None), 'varPop': ('varPop', None), 'skewSamp': ('skewSamp', None), 'theilsU': ('theilsU', None), 'meanZTest': ('meanZTest', None), 'groupArrayInsertAt': ('groupArrayInsertAt', None), 'covarSamp': ('covarSamp', None), 'groupBitmapOr': ('groupBitmapOr', None), 'studentTTest': ('studentTTest', None), 'groupUniqArray': ('groupUniqArray', None), 'largestTriangleThreeBuckets': ('largestTriangleThreeBuckets', None), 'quantileExactLow': ('quantileExactLow', None), 'any': ('any', None), 'quantilesExactHigh': ('quantilesExactHigh', None), 'stddevPop': ('stddevPop', None), 'quantilesExactWeighted': ('quantilesExactWeighted', None), 'quantilesExact': ('quantilesExact', None), 'quantileTDigestWeighted': ('quantileTDigestWeighted', None), 'quantilesExactLow': ('quantilesExactLow', None), 'quantilesDeterministic': ('quantilesDeterministic', None), 'min': ('min', None), 'groupBitOr': ('groupBitOr', None), 'quantileExactWeighted': ('quantileExactWeighted', None)}
FUNCTION_PARSERS = {'ARG_MAX': <function Parser.<dictcomp>.<lambda>>, 'ARGMAX': <function Parser.<dictcomp>.<lambda>>, 'MAX_BY': <function Parser.<dictcomp>.<lambda>>, 'ARG_MIN': <function Parser.<dictcomp>.<lambda>>, 'ARGMIN': <function Parser.<dictcomp>.<lambda>>, 'MIN_BY': <function Parser.<dictcomp>.<lambda>>, 'CAST': <function Parser.<lambda>>, 'CEIL': <function Parser.<lambda>>, 'CONVERT': <function Parser.<lambda>>, 'CHAR': <function Parser.<lambda>>, 'CHR': <function Parser.<lambda>>, 'DECODE': <function Parser.<lambda>>, 'EXTRACT': <function Parser.<lambda>>, 'FLOOR': <function Parser.<lambda>>, 'GAP_FILL': <function Parser.<lambda>>, 'INITCAP': <function Parser.<lambda>>, 'JSON_OBJECT': <function Parser.<lambda>>, 'JSON_OBJECTAGG': <function Parser.<lambda>>, 'JSON_TABLE': <function Parser.<lambda>>, 'NORMALIZE': <function Parser.<lambda>>, 'OPENJSON': <function Parser.<lambda>>, 'OVERLAY': <function Parser.<lambda>>, 'POSITION': <function Parser.<lambda>>, 'SAFE_CAST': <function Parser.<lambda>>, 'STRING_AGG': <function Parser.<lambda>>, 'SUBSTRING': <function Parser.<lambda>>, 'TRIM': <function Parser.<lambda>>, 'TRY_CAST': <function Parser.<lambda>>, 'TRY_CONVERT': <function Parser.<lambda>>, 'XMLELEMENT': <function Parser.<lambda>>, 'XMLTABLE': <function Parser.<lambda>>, 'ARRAYJOIN': <function ClickHouseParser.<lambda>>, 'GROUPCONCAT': <function ClickHouseParser.<lambda>>, 'QUANTILE': <function ClickHouseParser.<lambda>>, 'MEDIAN': <function ClickHouseParser.<lambda>>, 'COLUMNS': <function ClickHouseParser.<lambda>>, 'TUPLE': <function ClickHouseParser.<lambda>>, 'AND': <function ClickHouseParser.<lambda>>, 'OR': <function ClickHouseParser.<lambda>>, 'XOR': <function ClickHouseParser.<lambda>>, 'VIEW': <function ClickHouseParser.<lambda>>}
PROPERTY_PARSERS = {'ALLOWED_VALUES': <function Parser.<lambda>>, 'ALGORITHM': <function Parser.<lambda>>, 'AUTO': <function Parser.<lambda>>, 'AUTO_INCREMENT': <function Parser.<lambda>>, 'BACKUP': <function Parser.<lambda>>, 'BLOCKCOMPRESSION': <function Parser.<lambda>>, 'CALLED': <function Parser.<lambda>>, 'CHARSET': <function Parser.<lambda>>, 'CHECKSUM': <function Parser.<lambda>>, 'CLUSTER BY': <function Parser.<lambda>>, 'CLUSTERED': <function Parser.<lambda>>, 'COLLATE': <function Parser.<lambda>>, 'COMMENT': <function Parser.<lambda>>, 'CONTAINS': <function Parser.<lambda>>, 'COPY': <function Parser.<lambda>>, 'DATABLOCKSIZE': <function Parser.<lambda>>, 'DATA_DELETION': <function Parser.<lambda>>, 'DEFINER': <function Parser.<lambda>>, 'DETERMINISTIC': <function Parser.<lambda>>, 'DISTRIBUTED': <function Parser.<lambda>>, 'DUPLICATE': <function Parser.<lambda>>, 'DISTKEY': <function Parser.<lambda>>, 'DISTSTYLE': <function Parser.<lambda>>, 'EMPTY': <function Parser.<lambda>>, 'ENGINE': <function ClickHouseParser.<lambda>>, 'ENVIRONMENT': <function Parser.<lambda>>, 'HANDLER': <function Parser.<lambda>>, 'EXECUTE': <function Parser.<lambda>>, 'EXTERNAL': <function Parser.<lambda>>, 'FALLBACK': <function Parser.<lambda>>, 'FORMAT': <function Parser.<lambda>>, 'FREESPACE': <function Parser.<lambda>>, 'GLOBAL': <function Parser.<lambda>>, 'HEAP': <function Parser.<lambda>>, 'ICEBERG': <function Parser.<lambda>>, 'IMMUTABLE': <function Parser.<lambda>>, 'INHERITS': <function Parser.<lambda>>, 'INPUT': <function Parser.<lambda>>, 'JOURNAL': <function Parser.<lambda>>, 'LANGUAGE': <function Parser.<lambda>>, 'LAYOUT': <function Parser.<lambda>>, 'LIFETIME': <function Parser.<lambda>>, 'LIKE': <function Parser.<lambda>>, 'LOCATION': <function Parser.<lambda>>, 'LOCK': <function Parser.<lambda>>, 'LOCKING': <function Parser.<lambda>>, 'LOG': <function Parser.<lambda>>, 'MATERIALIZED': <function Parser.<lambda>>, 'MERGEBLOCKRATIO': <function Parser.<lambda>>, 'MODIFIES': <function Parser.<lambda>>, 'MULTISET': <function Parser.<lambda>>, 'NO': <function Parser.<lambda>>, 'ON': <function Parser.<lambda>>, 'ORDER BY': <function Parser.<lambda>>, 'OUTPUT': <function Parser.<lambda>>, 'PARTITION': <function Parser.<lambda>>, 'PARTITION BY': <function Parser.<lambda>>, 'PARTITIONED BY': <function Parser.<lambda>>, 'PARTITIONED_BY': <function Parser.<lambda>>, 'PRIMARY KEY': <function Parser.<lambda>>, 'RANGE': <function Parser.<lambda>>, 'READS': <function Parser.<lambda>>, 'REMOTE': <function Parser.<lambda>>, 'RETURNS': <function Parser.<lambda>>, 'STRICT': <function Parser.<lambda>>, 'STREAMING': <function Parser.<lambda>>, 'ROW': <function Parser.<lambda>>, 'ROW_FORMAT': <function Parser.<lambda>>, 'SAMPLE': <function Parser.<lambda>>, 'SECURE': <function Parser.<lambda>>, 'SECURITY': <function Parser.<lambda>>, 'SQL SECURITY': <function Parser.<lambda>>, 'SET': <function Parser.<lambda>>, 'SETTINGS': <function Parser.<lambda>>, 'SHARING': <function Parser.<lambda>>, 'SORTKEY': <function Parser.<lambda>>, 'SOURCE': <function Parser.<lambda>>, 'STABLE': <function Parser.<lambda>>, 'STORED': <function Parser.<lambda>>, 'SYSTEM_VERSIONING': <function Parser.<lambda>>, 'TBLPROPERTIES': <function Parser.<lambda>>, 'TEMP': <function Parser.<lambda>>, 'TEMPORARY': <function Parser.<lambda>>, 'TO': <function Parser.<lambda>>, 'TRANSIENT': <function Parser.<lambda>>, 'TRANSFORM': <function Parser.<lambda>>, 'TTL': <function Parser.<lambda>>, 'USING': <function Parser.<lambda>>, 'UNLOGGED': <function Parser.<lambda>>, 'VOLATILE': <function Parser.<lambda>>, 'WITH': <function Parser.<lambda>>, 'REFRESH': <function ClickHouseParser.<lambda>>, 'UUID': <function ClickHouseParser.<lambda>>}
NO_PAREN_FUNCTION_PARSERS = {'CASE': <function Parser.<lambda>>, 'CONNECT_BY_ROOT': <function Parser.<lambda>>, 'IF': <function Parser.<lambda>>}
NO_PAREN_FUNCTIONS = {<TokenType.CURRENT_DATE: 246>: <class 'sqlglot.expressions.temporal.CurrentDate'>, <TokenType.CURRENT_DATETIME: 247>: <class 'sqlglot.expressions.temporal.CurrentDate'>, <TokenType.CURRENT_TIME: 249>: <class 'sqlglot.expressions.temporal.CurrentTime'>, <TokenType.CURRENT_USER: 251>: <class 'sqlglot.expressions.functions.CurrentUser'>, <TokenType.CURRENT_ROLE: 253>: <class 'sqlglot.expressions.functions.CurrentRole'>}
RANGE_PARSERS = {<TokenType.AT_GT: 56>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.BETWEEN: 230>: <function Parser.<lambda>>, <TokenType.GLOB: 287>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.ILIKE: 295>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.IN: 296>: <function Parser.<lambda>>, <TokenType.IRLIKE: 307>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.IS: 308>: <function Parser.<lambda>>, <TokenType.LIKE: 318>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.LT_AT: 55>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.OVERLAPS: 349>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.RLIKE: 380>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.SIMILAR_TO: 395>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.FOR: 279>: <function Parser.<lambda>>, <TokenType.QMARK_AMP: 68>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.QMARK_PIPE: 69>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.HASH_DASH: 70>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.AT_QMARK: 54>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.ADJACENT: 65>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.OPERATOR: 340>: <function Parser.<lambda>>, <TokenType.AMP_LT: 63>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.AMP_GT: 64>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.GLOBAL: 288>: <function ClickHouseParser.<lambda>>}
COLUMN_OPERATORS = {<TokenType.DOT: 8>: None, <TokenType.DOTCOLON: 12>: <function Parser.<lambda>>, <TokenType.DCOLON: 14>: <function Parser.<lambda>>, <TokenType.ARROW: 45>: <function Parser.<lambda>>, <TokenType.DARROW: 46>: <function Parser.<lambda>>, <TokenType.HASH_ARROW: 49>: <function Parser.<lambda>>, <TokenType.DHASH_ARROW: 50>: <function Parser.<lambda>>, <TokenType.DOTCARET: 13>: <function ClickHouseParser.<lambda>>}
JOIN_KINDS = {<TokenType.SEMI: 388>, <TokenType.STRAIGHT_JOIN: 402>, <TokenType.OUTER: 347>, <TokenType.ALL: 220>, <TokenType.ANTI: 221>, <TokenType.ANY: 222>, <TokenType.ARRAY: 224>, <TokenType.ASOF: 226>, <TokenType.INNER: 299>, <TokenType.CROSS: 244>}
TABLE_ALIAS_TOKENS = {<TokenType.SESSION: 59>, <TokenType.SESSION_USER: 61>, <TokenType.IDENTIFIER: 79>, <TokenType.DATABASE: 80>, <TokenType.COLUMN: 81>, <TokenType.SCHEMA: 83>, <TokenType.TABLE: 84>, <TokenType.WAREHOUSE: 85>, <TokenType.STAGE: 86>, <TokenType.STREAM: 87>, <TokenType.STREAMLIT: 88>, <TokenType.VAR: 89>, <TokenType.BIT: 97>, <TokenType.BOOLEAN: 98>, <TokenType.TINYINT: 99>, <TokenType.UTINYINT: 100>, <TokenType.SMALLINT: 101>, <TokenType.USMALLINT: 102>, <TokenType.MEDIUMINT: 103>, <TokenType.UMEDIUMINT: 104>, <TokenType.INT: 105>, <TokenType.UINT: 106>, <TokenType.BIGINT: 107>, <TokenType.UBIGINT: 108>, <TokenType.BIGNUM: 109>, <TokenType.INT128: 110>, <TokenType.UINT128: 111>, <TokenType.INT256: 112>, <TokenType.UINT256: 113>, <TokenType.FLOAT: 114>, <TokenType.DOUBLE: 115>, <TokenType.UDOUBLE: 116>, <TokenType.DECIMAL: 117>, <TokenType.DECIMAL32: 118>, <TokenType.DECIMAL64: 119>, <TokenType.DECIMAL128: 120>, <TokenType.DECIMAL256: 121>, <TokenType.DECFLOAT: 122>, <TokenType.UDECIMAL: 123>, <TokenType.BIGDECIMAL: 124>, <TokenType.CHAR: 125>, <TokenType.NCHAR: 126>, <TokenType.VARCHAR: 127>, <TokenType.NVARCHAR: 128>, <TokenType.BPCHAR: 129>, <TokenType.TEXT: 130>, <TokenType.MEDIUMTEXT: 131>, <TokenType.LONGTEXT: 132>, <TokenType.BLOB: 133>, <TokenType.MEDIUMBLOB: 134>, <TokenType.LONGBLOB: 135>, <TokenType.TINYBLOB: 136>, <TokenType.TINYTEXT: 137>, <TokenType.NAME: 138>, <TokenType.BINARY: 139>, <TokenType.VARBINARY: 140>, <TokenType.JSON: 141>, <TokenType.JSONB: 142>, <TokenType.TIME: 143>, <TokenType.TIMETZ: 144>, <TokenType.TIME_NS: 145>, <TokenType.TIMESTAMP: 146>, <TokenType.TIMESTAMPTZ: 147>, <TokenType.TIMESTAMPLTZ: 148>, <TokenType.TIMESTAMPNTZ: 149>, <TokenType.TIMESTAMP_S: 150>, <TokenType.TIMESTAMP_MS: 151>, <TokenType.TIMESTAMP_NS: 152>, <TokenType.DATETIME: 153>, <TokenType.DATETIME2: 154>, <TokenType.DATETIME64: 155>, <TokenType.SMALLDATETIME: 156>, <TokenType.DATE: 157>, <TokenType.DATE32: 158>, <TokenType.INT4RANGE: 159>, <TokenType.INT4MULTIRANGE: 160>, <TokenType.INT8RANGE: 161>, <TokenType.INT8MULTIRANGE: 162>, <TokenType.NUMRANGE: 163>, <TokenType.NUMMULTIRANGE: 164>, <TokenType.TSRANGE: 165>, <TokenType.TSMULTIRANGE: 166>, <TokenType.TSTZRANGE: 167>, <TokenType.TSTZMULTIRANGE: 168>, <TokenType.DATERANGE: 169>, <TokenType.DATEMULTIRANGE: 170>, <TokenType.UUID: 171>, <TokenType.GEOGRAPHY: 172>, <TokenType.GEOGRAPHYPOINT: 173>, <TokenType.NULLABLE: 174>, <TokenType.GEOMETRY: 175>, <TokenType.POINT: 176>, <TokenType.RING: 177>, <TokenType.LINESTRING: 178>, <TokenType.LOCALTIME: 179>, <TokenType.LOCALTIMESTAMP: 180>, <TokenType.MULTILINESTRING: 182>, <TokenType.POLYGON: 183>, <TokenType.MULTIPOLYGON: 184>, <TokenType.HLLSKETCH: 185>, <TokenType.HSTORE: 186>, <TokenType.SUPER: 187>, <TokenType.SERIAL: 188>, <TokenType.SMALLSERIAL: 189>, <TokenType.BIGSERIAL: 190>, <TokenType.XML: 191>, <TokenType.YEAR: 192>, <TokenType.USERDEFINED: 193>, <TokenType.MONEY: 194>, <TokenType.SMALLMONEY: 195>, <TokenType.ROWVERSION: 196>, <TokenType.IMAGE: 197>, <TokenType.VARIANT: 198>, <TokenType.OBJECT: 199>, <TokenType.INET: 200>, <TokenType.IPADDRESS: 201>, <TokenType.IPPREFIX: 202>, <TokenType.IPV4: 203>, <TokenType.IPV6: 204>, <TokenType.ENUM: 205>, <TokenType.ENUM8: 206>, <TokenType.ENUM16: 207>, <TokenType.FIXEDSTRING: 208>, <TokenType.LOWCARDINALITY: 209>, <TokenType.NESTED: 210>, <TokenType.AGGREGATEFUNCTION: 211>, <TokenType.SIMPLEAGGREGATEFUNCTION: 212>, <TokenType.TDIGEST: 213>, <TokenType.UNKNOWN: 214>, <TokenType.VECTOR: 215>, <TokenType.DYNAMIC: 216>, <TokenType.VOID: 217>, <TokenType.APPLY: 223>, <TokenType.ASC: 225>, <TokenType.ATTACH: 227>, <TokenType.AUTO_INCREMENT: 228>, <TokenType.BEGIN: 229>, <TokenType.CACHE: 232>, <TokenType.CASE: 233>, <TokenType.COLLATE: 236>, <TokenType.COMMAND: 237>, <TokenType.COMMENT: 238>, <TokenType.COMMIT: 239>, <TokenType.CONSTRAINT: 241>, <TokenType.COPY: 242>, <TokenType.CUBE: 245>, <TokenType.CURRENT_DATE: 246>, <TokenType.CURRENT_DATETIME: 247>, <TokenType.CURRENT_SCHEMA: 248>, <TokenType.CURRENT_TIME: 249>, <TokenType.CURRENT_TIMESTAMP: 250>, <TokenType.CURRENT_USER: 251>, <TokenType.CURRENT_ROLE: 253>, <TokenType.CURRENT_CATALOG: 254>, <TokenType.DECLARE: 255>, <TokenType.DEFAULT: 256>, <TokenType.DELETE: 257>, <TokenType.DESC: 258>, <TokenType.DESCRIBE: 259>, <TokenType.DETACH: 260>, <TokenType.DICTIONARY: 261>, <TokenType.DIV: 264>, <TokenType.END: 267>, <TokenType.ESCAPE: 268>, <TokenType.EXECUTE: 270>, <TokenType.EXISTS: 271>, <TokenType.FALSE: 272>, <TokenType.FILE: 274>, <TokenType.FILE_FORMAT: 275>, <TokenType.FILTER: 276>, <TokenType.FIRST: 278>, <TokenType.FOREIGN_KEY: 281>, <TokenType.FUNCTION: 285>, <TokenType.GET: 286>, <TokenType.INDEX: 297>, <TokenType.INTERVAL: 304>, <TokenType.IS: 308>, <TokenType.ISNULL: 309>, <TokenType.KEEP: 312>, <TokenType.KILL: 314>, <TokenType.LIMIT: 319>, <TokenType.LIST: 320>, <TokenType.LOAD: 321>, <TokenType.MAP: 323>, <TokenType.MATCH: 324>, <TokenType.MERGE: 328>, <TokenType.MODEL: 330>, <TokenType.NEXT: 332>, <TokenType.NOTHING: 333>, <TokenType.NULL: 335>, <TokenType.OBJECT_IDENTIFIER: 336>, <TokenType.OFFSET: 337>, <TokenType.OPERATOR: 340>, <TokenType.ORDINALITY: 344>, <TokenType.OUT: 345>, <TokenType.INOUT: 346>, <TokenType.OVER: 348>, <TokenType.OVERLAPS: 349>, <TokenType.OVERWRITE: 350>, <TokenType.PARTITION: 352>, <TokenType.PERCENT: 354>, <TokenType.PIVOT: 355>, <TokenType.PRAGMA: 360>, <TokenType.PROCEDURE: 363>, <TokenType.PROJECTION: 365>, <TokenType.PSEUDO_TYPE: 366>, <TokenType.PUT: 367>, <TokenType.RANGE: 371>, <TokenType.RECURSIVE: 372>, <TokenType.REFRESH: 373>, <TokenType.RENAME: 374>, <TokenType.REPLACE: 375>, <TokenType.REFERENCES: 378>, <TokenType.ROLLUP: 383>, <TokenType.ROW: 384>, <TokenType.ROWS: 385>, <TokenType.SEQUENCE: 390>, <TokenType.SET: 392>, <TokenType.SHOW: 394>, <TokenType.SOME: 396>, <TokenType.STORAGE_INTEGRATION: 401>, <TokenType.STRAIGHT_JOIN: 402>, <TokenType.STRUCT: 403>, <TokenType.TAG: 406>, <TokenType.TEMPORARY: 407>, <TokenType.TOP: 408>, <TokenType.TRUE: 410>, <TokenType.TRUNCATE: 411>, <TokenType.TRIGGER: 412>, <TokenType.TYPE: 413>, <TokenType.UNNEST: 417>, <TokenType.UNPIVOT: 418>, <TokenType.UPDATE: 419>, <TokenType.USE: 420>, <TokenType.VIEW: 424>, <TokenType.SEMANTIC_VIEW: 425>, <TokenType.VOLATILE: 426>, <TokenType.UNIQUE: 432>, <TokenType.SINK: 437>, <TokenType.SOURCE: 438>, <TokenType.ANALYZE: 439>, <TokenType.NAMESPACE: 440>, <TokenType.EXPORT: 441>}
ALIAS_TOKENS = {<TokenType.SESSION: 59>, <TokenType.SESSION_USER: 61>, <TokenType.IDENTIFIER: 79>, <TokenType.DATABASE: 80>, <TokenType.COLUMN: 81>, <TokenType.SCHEMA: 83>, <TokenType.TABLE: 84>, <TokenType.WAREHOUSE: 85>, <TokenType.STAGE: 86>, <TokenType.STREAM: 87>, <TokenType.STREAMLIT: 88>, <TokenType.VAR: 89>, <TokenType.BIT: 97>, <TokenType.BOOLEAN: 98>, <TokenType.TINYINT: 99>, <TokenType.UTINYINT: 100>, <TokenType.SMALLINT: 101>, <TokenType.USMALLINT: 102>, <TokenType.MEDIUMINT: 103>, <TokenType.UMEDIUMINT: 104>, <TokenType.INT: 105>, <TokenType.UINT: 106>, <TokenType.BIGINT: 107>, <TokenType.UBIGINT: 108>, <TokenType.BIGNUM: 109>, <TokenType.INT128: 110>, <TokenType.UINT128: 111>, <TokenType.INT256: 112>, <TokenType.UINT256: 113>, <TokenType.FLOAT: 114>, <TokenType.DOUBLE: 115>, <TokenType.UDOUBLE: 116>, <TokenType.DECIMAL: 117>, <TokenType.DECIMAL32: 118>, <TokenType.DECIMAL64: 119>, <TokenType.DECIMAL128: 120>, <TokenType.DECIMAL256: 121>, <TokenType.DECFLOAT: 122>, <TokenType.UDECIMAL: 123>, <TokenType.BIGDECIMAL: 124>, <TokenType.CHAR: 125>, <TokenType.NCHAR: 126>, <TokenType.VARCHAR: 127>, <TokenType.NVARCHAR: 128>, <TokenType.BPCHAR: 129>, <TokenType.TEXT: 130>, <TokenType.MEDIUMTEXT: 131>, <TokenType.LONGTEXT: 132>, <TokenType.BLOB: 133>, <TokenType.MEDIUMBLOB: 134>, <TokenType.LONGBLOB: 135>, <TokenType.TINYBLOB: 136>, <TokenType.TINYTEXT: 137>, <TokenType.NAME: 138>, <TokenType.BINARY: 139>, <TokenType.VARBINARY: 140>, <TokenType.JSON: 141>, <TokenType.JSONB: 142>, <TokenType.TIME: 143>, <TokenType.TIMETZ: 144>, <TokenType.TIME_NS: 145>, <TokenType.TIMESTAMP: 146>, <TokenType.TIMESTAMPTZ: 147>, <TokenType.TIMESTAMPLTZ: 148>, <TokenType.TIMESTAMPNTZ: 149>, <TokenType.TIMESTAMP_S: 150>, <TokenType.TIMESTAMP_MS: 151>, <TokenType.TIMESTAMP_NS: 152>, <TokenType.DATETIME: 153>, <TokenType.DATETIME2: 154>, <TokenType.DATETIME64: 155>, <TokenType.SMALLDATETIME: 156>, <TokenType.DATE: 157>, <TokenType.DATE32: 158>, <TokenType.INT4RANGE: 159>, <TokenType.INT4MULTIRANGE: 160>, <TokenType.INT8RANGE: 161>, <TokenType.INT8MULTIRANGE: 162>, <TokenType.NUMRANGE: 163>, <TokenType.NUMMULTIRANGE: 164>, <TokenType.TSRANGE: 165>, <TokenType.TSMULTIRANGE: 166>, <TokenType.TSTZRANGE: 167>, <TokenType.TSTZMULTIRANGE: 168>, <TokenType.DATERANGE: 169>, <TokenType.DATEMULTIRANGE: 170>, <TokenType.UUID: 171>, <TokenType.GEOGRAPHY: 172>, <TokenType.GEOGRAPHYPOINT: 173>, <TokenType.NULLABLE: 174>, <TokenType.GEOMETRY: 175>, <TokenType.POINT: 176>, <TokenType.RING: 177>, <TokenType.LINESTRING: 178>, <TokenType.LOCALTIME: 179>, <TokenType.LOCALTIMESTAMP: 180>, <TokenType.MULTILINESTRING: 182>, <TokenType.POLYGON: 183>, <TokenType.MULTIPOLYGON: 184>, <TokenType.HLLSKETCH: 185>, <TokenType.HSTORE: 186>, <TokenType.SUPER: 187>, <TokenType.SERIAL: 188>, <TokenType.SMALLSERIAL: 189>, <TokenType.BIGSERIAL: 190>, <TokenType.XML: 191>, <TokenType.YEAR: 192>, <TokenType.USERDEFINED: 193>, <TokenType.MONEY: 194>, <TokenType.SMALLMONEY: 195>, <TokenType.ROWVERSION: 196>, <TokenType.IMAGE: 197>, <TokenType.VARIANT: 198>, <TokenType.OBJECT: 199>, <TokenType.INET: 200>, <TokenType.IPADDRESS: 201>, <TokenType.IPPREFIX: 202>, <TokenType.IPV4: 203>, <TokenType.IPV6: 204>, <TokenType.ENUM: 205>, <TokenType.ENUM8: 206>, <TokenType.ENUM16: 207>, <TokenType.FIXEDSTRING: 208>, <TokenType.LOWCARDINALITY: 209>, <TokenType.NESTED: 210>, <TokenType.AGGREGATEFUNCTION: 211>, <TokenType.SIMPLEAGGREGATEFUNCTION: 212>, <TokenType.TDIGEST: 213>, <TokenType.UNKNOWN: 214>, <TokenType.VECTOR: 215>, <TokenType.DYNAMIC: 216>, <TokenType.VOID: 217>, <TokenType.ALL: 220>, <TokenType.ANTI: 221>, <TokenType.ANY: 222>, <TokenType.APPLY: 223>, <TokenType.ARRAY: 224>, <TokenType.ASC: 225>, <TokenType.ASOF: 226>, <TokenType.ATTACH: 227>, <TokenType.AUTO_INCREMENT: 228>, <TokenType.BEGIN: 229>, <TokenType.CACHE: 232>, <TokenType.CASE: 233>, <TokenType.COLLATE: 236>, <TokenType.COMMAND: 237>, <TokenType.COMMENT: 238>, <TokenType.COMMIT: 239>, <TokenType.CONSTRAINT: 241>, <TokenType.COPY: 242>, <TokenType.CUBE: 245>, <TokenType.CURRENT_DATE: 246>, <TokenType.CURRENT_DATETIME: 247>, <TokenType.CURRENT_SCHEMA: 248>, <TokenType.CURRENT_TIME: 249>, <TokenType.CURRENT_TIMESTAMP: 250>, <TokenType.CURRENT_USER: 251>, <TokenType.CURRENT_ROLE: 253>, <TokenType.CURRENT_CATALOG: 254>, <TokenType.DECLARE: 255>, <TokenType.DEFAULT: 256>, <TokenType.DELETE: 257>, <TokenType.DESC: 258>, <TokenType.DESCRIBE: 259>, <TokenType.DETACH: 260>, <TokenType.DICTIONARY: 261>, <TokenType.DIV: 264>, <TokenType.END: 267>, <TokenType.ESCAPE: 268>, <TokenType.EXECUTE: 270>, <TokenType.EXISTS: 271>, <TokenType.FALSE: 272>, <TokenType.FILE: 274>, <TokenType.FILE_FORMAT: 275>, <TokenType.FILTER: 276>, <TokenType.FINAL: 277>, <TokenType.FIRST: 278>, <TokenType.FOREIGN_KEY: 281>, <TokenType.FULL: 284>, <TokenType.FUNCTION: 285>, <TokenType.GET: 286>, <TokenType.INDEX: 297>, <TokenType.INTERVAL: 304>, <TokenType.IS: 308>, <TokenType.ISNULL: 309>, <TokenType.KEEP: 312>, <TokenType.KILL: 314>, <TokenType.LEFT: 317>, <TokenType.LIMIT: 319>, <TokenType.LIST: 320>, <TokenType.LOAD: 321>, <TokenType.LOCK: 322>, <TokenType.MAP: 323>, <TokenType.MATCH: 324>, <TokenType.MERGE: 328>, <TokenType.MODEL: 330>, <TokenType.NATURAL: 331>, <TokenType.NEXT: 332>, <TokenType.NOTHING: 333>, <TokenType.NULL: 335>, <TokenType.OBJECT_IDENTIFIER: 336>, <TokenType.OFFSET: 337>, <TokenType.OPERATOR: 340>, <TokenType.ORDINALITY: 344>, <TokenType.OUT: 345>, <TokenType.INOUT: 346>, <TokenType.OVER: 348>, <TokenType.OVERLAPS: 349>, <TokenType.OVERWRITE: 350>, <TokenType.PARTITION: 352>, <TokenType.PERCENT: 354>, <TokenType.PIVOT: 355>, <TokenType.PRAGMA: 360>, <TokenType.PROCEDURE: 363>, <TokenType.PROJECTION: 365>, <TokenType.PSEUDO_TYPE: 366>, <TokenType.PUT: 367>, <TokenType.RANGE: 371>, <TokenType.RECURSIVE: 372>, <TokenType.REFRESH: 373>, <TokenType.RENAME: 374>, <TokenType.REPLACE: 375>, <TokenType.REFERENCES: 378>, <TokenType.RIGHT: 379>, <TokenType.ROLLUP: 383>, <TokenType.ROW: 384>, <TokenType.ROWS: 385>, <TokenType.SEMI: 388>, <TokenType.SEQUENCE: 390>, <TokenType.SET: 392>, <TokenType.SHOW: 394>, <TokenType.SOME: 396>, <TokenType.STORAGE_INTEGRATION: 401>, <TokenType.STRAIGHT_JOIN: 402>, <TokenType.STRUCT: 403>, <TokenType.TAG: 406>, <TokenType.TEMPORARY: 407>, <TokenType.TOP: 408>, <TokenType.TRUE: 410>, <TokenType.TRUNCATE: 411>, <TokenType.TRIGGER: 412>, <TokenType.TYPE: 413>, <TokenType.UNNEST: 417>, <TokenType.UNPIVOT: 418>, <TokenType.UPDATE: 419>, <TokenType.USE: 420>, <TokenType.VIEW: 424>, <TokenType.SEMANTIC_VIEW: 425>, <TokenType.VOLATILE: 426>, <TokenType.WINDOW: 430>, <TokenType.UNIQUE: 432>, <TokenType.SINK: 437>, <TokenType.SOURCE: 438>, <TokenType.ANALYZE: 439>, <TokenType.NAMESPACE: 440>, <TokenType.EXPORT: 441>}
LOG_DEFAULTS_TO_LN = True
QUERY_MODIFIER_PARSERS = {<TokenType.MATCH_RECOGNIZE: 326>: <function Parser.<lambda>>, <TokenType.PREWHERE: 361>: <function Parser.<lambda>>, <TokenType.WHERE: 429>: <function Parser.<lambda>>, <TokenType.GROUP_BY: 290>: <function Parser.<lambda>>, <TokenType.HAVING: 292>: <function Parser.<lambda>>, <TokenType.QUALIFY: 368>: <function Parser.<lambda>>, <TokenType.WINDOW: 430>: <function Parser.<lambda>>, <TokenType.ORDER_BY: 341>: <function Parser.<lambda>>, <TokenType.LIMIT: 319>: <function Parser.<lambda>>, <TokenType.FETCH: 273>: <function Parser.<lambda>>, <TokenType.OFFSET: 337>: <function Parser.<lambda>>, <TokenType.FOR: 279>: <function Parser.<lambda>>, <TokenType.LOCK: 322>: <function Parser.<lambda>>, <TokenType.TABLE_SAMPLE: 405>: <function Parser.<lambda>>, <TokenType.USING: 421>: <function Parser.<lambda>>, <TokenType.CLUSTER_BY: 235>: <function Parser.<lambda>>, <TokenType.DISTRIBUTE_BY: 263>: <function Parser.<lambda>>, <TokenType.SORT_BY: 397>: <function Parser.<lambda>>, <TokenType.CONNECT_BY: 240>: <function Parser.<lambda>>, <TokenType.SETTINGS: 393>: <function ClickHouseParser.<lambda>>, <TokenType.FORMAT: 282>: <function ClickHouseParser.<lambda>>}
CONSTRAINT_PARSERS = {'AUTOINCREMENT': <function Parser.<lambda>>, 'AUTO_INCREMENT': <function Parser.<lambda>>, 'CASESPECIFIC': <function Parser.<lambda>>, 'CHECK': <function Parser.<lambda>>, 'COLLATE': <function Parser.<lambda>>, 'COMMENT': <function Parser.<lambda>>, 'COMPRESS': <function Parser.<lambda>>, 'CLUSTERED': <function Parser.<lambda>>, 'NONCLUSTERED': <function Parser.<lambda>>, 'DEFAULT': <function Parser.<lambda>>, 'ENCODE': <function Parser.<lambda>>, 'EPHEMERAL': <function Parser.<lambda>>, 'EXCLUDE': <function Parser.<lambda>>, 'FOREIGN KEY': <function Parser.<lambda>>, 'FORMAT': <function Parser.<lambda>>, 'GENERATED': <function Parser.<lambda>>, 'IDENTITY': <function Parser.<lambda>>, 'INLINE': <function Parser.<lambda>>, 'LIKE': <function Parser.<lambda>>, 'NOT': <function Parser.<lambda>>, 'NULL': <function Parser.<lambda>>, 'ON': <function Parser.<lambda>>, 'PATH': <function Parser.<lambda>>, 'PERIOD': <function Parser.<lambda>>, 'PRIMARY KEY': <function Parser.<lambda>>, 'REFERENCES': <function Parser.<lambda>>, 'TITLE': <function Parser.<lambda>>, 'TTL': <function Parser.<lambda>>, 'UNIQUE': <function Parser.<lambda>>, 'UPPERCASE': <function Parser.<lambda>>, 'WITH': <function Parser.<lambda>>, 'BUCKET': <function Parser.<lambda>>, 'TRUNCATE': <function Parser.<lambda>>, 'INDEX': <function ClickHouseParser.<lambda>>, 'CODEC': <function ClickHouseParser.<lambda>>, 'ASSUME': <function ClickHouseParser.<lambda>>}
ALTER_PARSERS = {'ADD': <function Parser.<lambda>>, 'AS': <function Parser.<lambda>>, 'ALTER': <function Parser.<lambda>>, 'CLUSTER BY': <function Parser.<lambda>>, 'DELETE': <function Parser.<lambda>>, 'DROP': <function Parser.<lambda>>, 'RENAME': <function Parser.<lambda>>, 'SET': <function Parser.<lambda>>, 'SWAP': <function Parser.<lambda>>, 'MODIFY': <function ClickHouseParser.<lambda>>, 'REPLACE': <function ClickHouseParser.<lambda>>}
SCHEMA_UNNAMED_CONSTRAINTS = {'UNIQUE', 'FOREIGN KEY', 'PRIMARY KEY', 'TRUNCATE', 'EXCLUDE', 'LIKE', 'INDEX', 'PERIOD', 'BUCKET'}
PLACEHOLDER_PARSERS = {<TokenType.PLACEHOLDER: 356>: <function Parser.<lambda>>, <TokenType.PARAMETER: 58>: <function Parser.<lambda>>, <TokenType.COLON: 11>: <function Parser.<lambda>>, <TokenType.L_BRACE: 5>: <function ClickHouseParser.<lambda>>}
STATEMENT_PARSERS = {<TokenType.ALTER: 219>: <function Parser.<lambda>>, <TokenType.ANALYZE: 439>: <function Parser.<lambda>>, <TokenType.BEGIN: 229>: <function Parser.<lambda>>, <TokenType.CACHE: 232>: <function Parser.<lambda>>, <TokenType.COMMENT: 238>: <function Parser.<lambda>>, <TokenType.COMMIT: 239>: <function Parser.<lambda>>, <TokenType.COPY: 242>: <function Parser.<lambda>>, <TokenType.CREATE: 243>: <function Parser.<lambda>>, <TokenType.DECLARE: 255>: <function Parser.<lambda>>, <TokenType.DELETE: 257>: <function Parser.<lambda>>, <TokenType.DESC: 258>: <function Parser.<lambda>>, <TokenType.DESCRIBE: 259>: <function Parser.<lambda>>, <TokenType.DROP: 265>: <function Parser.<lambda>>, <TokenType.GRANT: 289>: <function Parser.<lambda>>, <TokenType.REVOKE: 377>: <function Parser.<lambda>>, <TokenType.INSERT: 300>: <function Parser.<lambda>>, <TokenType.KILL: 314>: <function Parser.<lambda>>, <TokenType.LOAD: 321>: <function Parser.<lambda>>, <TokenType.MERGE: 328>: <function Parser.<lambda>>, <TokenType.PIVOT: 355>: <function Parser.<lambda>>, <TokenType.PRAGMA: 360>: <function Parser.<lambda>>, <TokenType.REFRESH: 373>: <function Parser.<lambda>>, <TokenType.ROLLBACK: 382>: <function Parser.<lambda>>, <TokenType.SET: 392>: <function Parser.<lambda>>, <TokenType.TRUNCATE: 411>: <function Parser.<lambda>>, <TokenType.UNCACHE: 414>: <function Parser.<lambda>>, <TokenType.UNPIVOT: 418>: <function Parser.<lambda>>, <TokenType.UPDATE: 419>: <function Parser.<lambda>>, <TokenType.USE: 420>: <function Parser.<lambda>>, <TokenType.SEMICOLON: 19>: <function Parser.<lambda>>, <TokenType.DETACH: 260>: <function ClickHouseParser.<lambda>>}
Inherited Members
sqlglot.parser.Parser
Parser
STRUCT_TYPE_TOKENS
NESTED_TYPE_TOKENS
ENUM_TYPE_TOKENS
AGGREGATE_TYPE_TOKENS
TYPE_TOKENS
SIGNED_TO_UNSIGNED_TYPE_TOKEN
SUBQUERY_PREDICATES
SUBQUERY_TOKENS
TEXT_MATCH_EXCLUDED_TOKENS
DB_CREATABLES
CREATABLES
TRIGGER_EVENTS
ALTERABLES
COLON_PLACEHOLDER_TOKENS
ARRAY_CONSTRUCTORS
COMMENT_TABLE_ALIAS_TOKENS
UPDATE_ALIAS_TOKENS
TRIM_TYPES
IDENTIFIER_TOKENS
BRACKETS
COLUMN_POSTFIX_TOKENS
TABLE_POSTFIX_TOKENS
CONJUNCTION
ASSIGNMENT
DISJUNCTION
EQUALITY
COMPARISON
BITWISE
TERM
FACTOR
EXPONENT
TIMES
TIMESTAMPS
SET_OPERATIONS
JOIN_METHODS
JOIN_SIDES
JOIN_HINTS
TABLE_TERMINATORS
LAMBDAS
TYPED_LAMBDA_ARGS
LAMBDA_ARG_TERMINATORS
JSON_OPERATORS
CAST_COLUMN_OPERATORS
EXPRESSION_PARSERS
UNARY_PARSERS
STRING_PARSERS
NUMERIC_PARSERS
PRIMARY_PARSERS
PIPE_SYNTAX_TRANSFORM_PARSERS
ALTER_ALTER_PARSERS
INVALID_FUNC_NAME_TOKENS
FUNCTIONS_WITH_ALIASED_ARGS
KEY_VALUE_DEFINITIONS
QUERY_MODIFIER_TOKENS
SET_PARSERS
SHOW_PARSERS
TYPE_LITERAL_PARSERS
TYPE_CONVERTERS
DDL_SELECT_TOKENS
PRE_VOLATILE_TOKENS
TRANSACTION_KIND
TRANSACTION_CHARACTERISTICS
CONFLICT_ACTIONS
TRIGGER_TIMING
TRIGGER_DEFERRABLE
CREATE_SEQUENCE
ISOLATED_LOADING_OPTIONS
USABLES
CAST_ACTIONS
SCHEMA_BINDING_OPTIONS
PROCEDURE_OPTIONS
EXECUTE_AS_OPTIONS
KEY_CONSTRAINT_OPTIONS
WINDOW_EXCLUDE_OPTIONS
INSERT_ALTERNATIVES
CLONE_KEYWORDS
VERSION_PHRASES
HISTORICAL_DATA_PREFIX
HISTORICAL_DATA_KIND
OPCLASS_FOLLOW_KEYWORDS
OPTYPE_FOLLOW_TOKENS
TABLE_INDEX_HINT_TOKENS
VIEW_ATTRIBUTES
WINDOW_ALIAS_TOKENS
WINDOW_BEFORE_PAREN_TOKENS
WINDOW_SIDES
JSON_KEY_VALUE_SEPARATOR_TOKENS
FETCH_TOKENS
ADD_CONSTRAINT_TOKENS
DISTINCT_TOKENS
UNNEST_OFFSET_ALIAS_TOKENS
SELECT_START_TOKENS
COPY_INTO_VARLEN_OPTIONS
IS_JSON_PREDICATE_KIND
ODBC_DATETIME_LITERALS
ON_CONDITION_TOKENS
PRIVILEGE_FOLLOW_TOKENS
DESCRIBE_STYLES
SET_ASSIGNMENT_DELIMITERS
ANALYZE_STYLES
ANALYZE_EXPRESSION_PARSERS
PARTITION_KEYWORDS
AMBIGUOUS_ALIAS_TOKENS
OPERATION_MODIFIERS
RECURSIVE_CTE_SEARCH_KIND
SECURITY_PROPERTY_KEYWORDS
MODIFIABLES
STRICT_CAST
PREFIXED_PIVOT_COLUMNS
IDENTIFY_PIVOT_STRINGS
UNPIVOT_VALUE_COLUMNS_FIRST
PIVOT_COLUMN_NAMING
TABLESAMPLE_CSV
DEFAULT_SAMPLING_METHOD
SET_REQUIRES_ASSIGNMENT_DELIMITER
TRIM_PATTERN_FIRST
STRING_ALIASES
SET_OP_MODIFIERS
NO_PAREN_IF_COMMANDS
JSON_ARROWS_REQUIRE_JSON_TYPE
COLON_IS_VARIANT_EXTRACT
COLON_CHAIN_IS_SINGLE_EXTRACT
VALUES_FOLLOWED_BY_PAREN
SUPPORTS_IMPLICIT_UNNEST
SUPPORTS_DIGIT_PREFIXED_FIELD_NAMES
SUPPORTS_PARTITION_SELECTION
WRAPPED_TRANSFORM_COLUMN_CONSTRAINT
ALTER_RENAME_REQUIRES_COLUMN
ALTER_TABLE_PARTITIONS
ZONE_AWARE_TIMESTAMP_CONSTRUCTOR
MAP_KEYS_ARE_ARBITRARY_EXPRESSIONS
JSON_EXTRACT_REQUIRES_JSON_EXPRESSION
ADD_JOIN_ON_TRUE
SUPPORTS_OMITTED_INTERVAL_SPAN_UNIT
ADJACENT_STRINGS_CANNOT_BE_CONNECTED
SUPPORTS_NTH_VALUE_FROM_MODIFIER
QUOTED_TYPES_TO_PRESERVE
SHOW_TRIE
SET_TRIE
error_level
error_message_context
max_errors
max_nodes
dialect
sql
errors
reset
raise_error
validate_expression
parse
parse_into
check_errors
expression
parse_set_operation
build_cast