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:
 637        is_negated = self._match(TokenType.NOT)
 638        in_expr: exp.In | None = None
 639        if self._match(TokenType.IN):
 640            in_expr = self._parse_in(this)
 641            in_expr.set("is_global", True)
 642        return self.expression(exp.Not(this=in_expr)) if is_negated else t.cast(exp.In, in_expr)
 643
 644    def _parse_table(
 645        self,
 646        schema: bool = False,
 647        joins: bool = False,
 648        alias_tokens: Collection[TokenType] | None = None,
 649        parse_bracket: bool = False,
 650        is_db_reference: bool = False,
 651        parse_partition: bool = False,
 652        consume_pipe: bool = False,
 653    ) -> exp.Expr | None:
 654        this = super()._parse_table(
 655            schema=schema,
 656            joins=joins,
 657            alias_tokens=alias_tokens,
 658            parse_bracket=parse_bracket,
 659            is_db_reference=is_db_reference,
 660        )
 661
 662        if isinstance(this, exp.Table):
 663            inner = this.this
 664            alias = this.args.get("alias")
 665
 666            if isinstance(inner, exp.GenerateSeries) and alias and not alias.columns:
 667                alias.set("columns", [exp.to_identifier("generate_series")])
 668
 669        if self._match(TokenType.FINAL):
 670            this = self.expression(exp.Final(this=this))
 671
 672        return this
 673
 674    def _parse_position(self, haystack_first: bool = False) -> exp.StrPosition:
 675        return super()._parse_position(haystack_first=True)
 676
 677    # https://clickhouse.com/docs/en/sql-reference/statements/select/with/
 678    def _parse_cte(self) -> exp.CTE | exp.FunctionSpecification | None:
 679        # WITH <identifier> AS <subquery expression>
 680        cte: exp.CTE | exp.FunctionSpecification | None = self._try_parse(super()._parse_cte)
 681
 682        if not cte:
 683            # WITH <expression> AS <identifier>
 684            cte = self.expression(
 685                exp.CTE(this=self._parse_assignment(), alias=self._parse_table_alias(), scalar=True)
 686            )
 687
 688        return cte
 689
 690    def _parse_join_parts(
 691        self,
 692    ) -> tuple[Token | None, Token | None, Token | None]:
 693        is_global = self._prev if self._match(TokenType.GLOBAL) else None
 694
 695        kind_pre = self._prev if self._match_set(self.JOIN_KINDS) else None
 696        side = self._prev if self._match_set(self.JOIN_SIDES) else None
 697        kind = self._prev if self._match_set(self.JOIN_KINDS) else None
 698
 699        return is_global, side or kind, kind_pre or kind
 700
 701    def _parse_join(
 702        self,
 703        skip_join_token: bool = False,
 704        parse_bracket: bool = False,
 705        alias_tokens: t.Collection[TokenType] | None = None,
 706    ) -> exp.Join | None:
 707        join = super()._parse_join(
 708            skip_join_token=skip_join_token, parse_bracket=True, alias_tokens=alias_tokens
 709        )
 710        if join:
 711            method = join.args.get("method")
 712            join.set("method", None)
 713            join.set("global_", method)
 714
 715            # tbl ARRAY JOIN arr <-- this should be a `Column` reference, not a `Table`
 716            # https://clickhouse.com/docs/en/sql-reference/statements/select/array-join
 717            if join.kind == "ARRAY":
 718                for table in join.find_all(exp.Table):
 719                    table.replace(table.to_column())
 720
 721        return join
 722
 723    def _parse_function(
 724        self,
 725        functions: dict[str, t.Callable] | None = None,
 726        anonymous: bool = False,
 727        optional_parens: bool = True,
 728        any_token: bool = False,
 729    ) -> exp.Expr | None:
 730        expr = super()._parse_function(
 731            functions=functions,
 732            anonymous=anonymous,
 733            optional_parens=optional_parens,
 734            any_token=any_token,
 735        )
 736
 737        func = expr.this if isinstance(expr, exp.Window) else expr
 738
 739        # Aggregate functions can be split in 2 parts: <func_name><suffix[es]>
 740        parts = self._resolve_clickhouse_agg(func.name) if isinstance(func, exp.Anonymous) else None
 741
 742        if parts:
 743            anon_func: exp.Anonymous = t.cast(exp.Anonymous, func)
 744            params = self._parse_func_params(anon_func)
 745
 746            if len(parts[1]) > 0:
 747                exp_class: Type[exp.Expr] = (
 748                    exp.CombinedParameterizedAgg if params else exp.CombinedAggFunc
 749                )
 750            else:
 751                exp_class = exp.ParameterizedAgg if params else exp.AnonymousAggFunc
 752
 753            instance = exp_class(this=anon_func.this, expressions=anon_func.expressions)
 754            if params:
 755                instance.set("params", params)
 756            func = self.expression(instance)
 757
 758            if isinstance(expr, exp.Window):
 759                # The window's func was parsed as Anonymous in base parser, fix its
 760                # type to be ClickHouse style CombinedAnonymousAggFunc / AnonymousAggFunc
 761                expr.set("this", func)
 762            elif params:
 763                # Params have blocked super()._parse_function() from parsing the following window
 764                # (if that exists) as they're standing between the function call and the window spec
 765                expr = self._parse_window(func)
 766            else:
 767                expr = func
 768
 769        return expr
 770
 771    def _parse_func_params(self, this: exp.Func | None = None) -> list[exp.Expr] | None:
 772        if self._match_pair(TokenType.R_PAREN, TokenType.L_PAREN):
 773            return self._parse_csv(self._parse_lambda)
 774
 775        if self._match(TokenType.L_PAREN):
 776            params = self._parse_csv(self._parse_lambda)
 777            self._match_r_paren(this)
 778            return params
 779
 780        return None
 781
 782    def _parse_group_concat(self) -> exp.GroupConcat:
 783        args = self._parse_csv(self._parse_lambda)
 784        params = self._parse_func_params()
 785
 786        if params:
 787            # groupConcat(sep [, limit])(expr)
 788            separator = seq_get(args, 0)
 789            limit = seq_get(args, 1)
 790            this: exp.Expr | None = seq_get(params, 0)
 791            if limit is not None:
 792                this = exp.Limit(this=this, expression=limit)
 793            return self.expression(exp.GroupConcat(this=this, separator=separator))
 794
 795        # groupConcat(expr)
 796        return self.expression(exp.GroupConcat(this=seq_get(args, 0)))
 797
 798    def _parse_quantile(self) -> exp.Quantile:
 799        this = self._parse_lambda()
 800        params = self._parse_func_params()
 801        if params:
 802            return self.expression(exp.Quantile(this=params[0], quantile=this))
 803        return self.expression(exp.Quantile(this=this, quantile=exp.Literal.number(0.5)))
 804
 805    def _parse_wrapped_id_vars(self, optional: bool = False) -> list[exp.Expr]:
 806        return super()._parse_wrapped_id_vars(optional=True)
 807
 808    def _parse_column_def(
 809        self, this: exp.Expr | None, computed_column: bool = True
 810    ) -> exp.Expr | None:
 811        if self._match(TokenType.DOT):
 812            return exp.Dot(this=this, expression=self._parse_id_var())
 813
 814        return super()._parse_column_def(this, computed_column=computed_column)
 815
 816    def _parse_primary_key(
 817        self,
 818        wrapped_optional: bool = False,
 819        in_props: bool = False,
 820        named_primary_key: bool = False,
 821    ) -> exp.PrimaryKeyColumnConstraint | exp.PrimaryKey:
 822        return super()._parse_primary_key(
 823            wrapped_optional=wrapped_optional or in_props,
 824            in_props=in_props,
 825            named_primary_key=named_primary_key,
 826        )
 827
 828    def _parse_on_property(self) -> exp.Expr | None:
 829        index = self._index
 830        if self._match_text_seq("CLUSTER"):
 831            this = self._parse_string() or self._parse_id_var()
 832            if this:
 833                return self.expression(exp.OnCluster(this=this))
 834            else:
 835                self._retreat(index)
 836        return None
 837
 838    def _parse_auto_refresh_property(self) -> exp.AutoRefreshProperty | None:
 839        index = self._index - 1
 840        cadence = self._prev.text.upper() if self._match_texts(("EVERY", "AFTER")) else None
 841        interval = (
 842            self._parse_interval(require_interval=False, parse_function_unit=False)
 843            if cadence
 844            else None
 845        )
 846
 847        if cadence and not interval:
 848            self._retreat(index)
 849            return None
 850
 851        offset = None
 852        if self._match_text_seq("OFFSET"):
 853            offset = self._parse_interval(require_interval=False, parse_function_unit=False)
 854            if not offset:
 855                self._retreat(index)
 856                return None
 857
 858        randomize = None
 859        if self._match_text_seq("RANDOMIZE", "FOR"):
 860            randomize = self._parse_interval(require_interval=False, parse_function_unit=False)
 861            if not randomize:
 862                self._retreat(index)
 863                return None
 864
 865        dependencies = None
 866        if self._match_text_seq("DEPENDS", "ON"):
 867            dependencies = self._parse_csv(lambda: self._parse_table_parts(schema=True))
 868            if not dependencies:
 869                self._retreat(index)
 870                return None
 871
 872        if not cadence and not dependencies:
 873            self._retreat(index)
 874            return None
 875
 876        settings = self._parse_settings_property() if self._match_text_seq("SETTINGS") else None
 877
 878        return self.expression(
 879            exp.AutoRefreshProperty(
 880                this=interval,
 881                cadence=cadence,
 882                offset=offset,
 883                randomize=randomize,
 884                expressions=dependencies,
 885                settings=settings,
 886                append=self._match_text_seq("APPEND"),
 887            )
 888        )
 889
 890    def _parse_index_constraint(self, kind: str | None = None) -> exp.IndexColumnConstraint:
 891        # INDEX name1 expr TYPE type1(args) GRANULARITY value
 892        this = self._parse_id_var()
 893        expression = self._parse_assignment()
 894
 895        index_type = self._match_text_seq("TYPE") and (self._parse_function() or self._parse_var())
 896
 897        granularity = self._match_text_seq("GRANULARITY") and self._parse_term()
 898
 899        return self.expression(
 900            exp.IndexColumnConstraint(
 901                this=this, expression=expression, index_type=index_type, granularity=granularity
 902            )
 903        )
 904
 905    def _parse_partition(self) -> exp.Partition | None:
 906        # https://clickhouse.com/docs/en/sql-reference/statements/alter/partition#how-to-set-partition-expression
 907        if not self._match(TokenType.PARTITION):
 908            return None
 909
 910        if self._match_text_seq("ID"):
 911            # Corresponds to the PARTITION ID <string_value> syntax
 912            expressions: list[exp.Expr] = [
 913                self.expression(exp.PartitionId(this=self._parse_string()))
 914            ]
 915        else:
 916            expressions = self._parse_expressions()
 917
 918        return self.expression(exp.Partition(expressions=expressions))
 919
 920    def _parse_alter_table_replace(self) -> exp.Expr | None:
 921        partition = self._parse_partition()
 922
 923        if not partition or not self._match(TokenType.FROM):
 924            return None
 925
 926        return self.expression(
 927            exp.ReplacePartition(expression=partition, source=self._parse_table_parts())
 928        )
 929
 930    def _parse_alter_table_alter(self) -> exp.Expr | None:
 931        # MODIFY forms other than MODIFY COLUMN (SQL SECURITY, ORDER BY, TTL, COMMENT, ...)
 932        # are parsed as properties, since ALTER can now reach this path too
 933        if self._prev.text.upper() == "MODIFY" and not self._match(TokenType.COLUMN, advance=False):
 934            if properties := self._parse_properties():
 935                return self.expression(
 936                    exp.AlterModifySqlSecurity(expressions=properties.expressions)
 937                )
 938            return None
 939
 940        # https://clickhouse.com/docs/sql-reference/statements/alter/column#modify-column
 941        alter = super()._parse_alter_table_alter()
 942        return None if self._curr else alter
 943
 944    def _parse_definer(self) -> exp.DefinerProperty | None:
 945        self._match(TokenType.EQ)
 946        if self._match(TokenType.CURRENT_USER):
 947            return exp.DefinerProperty(this=exp.Var(this=self._prev.text.upper()))
 948        return exp.DefinerProperty(this=self._parse_string())
 949
 950    def _parse_projection_def(self) -> exp.ProjectionDef | None:
 951        if not self._match(TokenType.PROJECTION):
 952            return None
 953
 954        return self.expression(
 955            exp.ProjectionDef(
 956                this=self._parse_id_var(), expression=self._parse_wrapped(self._parse_statement)
 957            )
 958        )
 959
 960    def _parse_constraint(self) -> exp.Expr | None:
 961        return super()._parse_constraint() or self._parse_projection_def()
 962
 963    def _parse_alias(self, this: exp.Expr | None, explicit: bool = False) -> exp.Expr | None:
 964        # In clickhouse "SELECT <expr> APPLY(...)" is a query modifier,
 965        # so "APPLY" shouldn't be parsed as <expr>'s alias. However, "SELECT <expr> apply" is a valid alias
 966        if self._match_pair(TokenType.APPLY, TokenType.L_PAREN, advance=False):
 967            return this
 968
 969        return super()._parse_alias(this=this, explicit=explicit)
 970
 971    def _parse_expression(self) -> exp.Expr | None:
 972        this = super()._parse_expression()
 973
 974        # Clickhouse allows "SELECT <expr> [APPLY(func)] [...]]" modifier
 975        while self._match_pair(TokenType.APPLY, TokenType.L_PAREN):
 976            this = exp.Apply(this=this, expression=self._parse_var(any_token=True))
 977            self._match(TokenType.R_PAREN)
 978
 979        return this
 980
 981    def _parse_columns(self) -> exp.Expr:
 982        this: exp.Expr = self.expression(exp.Columns(this=self._parse_lambda()))
 983
 984        while self._next and self._match_text_seq(")", "APPLY", "("):
 985            self._match(TokenType.R_PAREN)
 986            this = exp.Apply(this=this, expression=self._parse_var(any_token=True))
 987        return this
 988
 989    def _parse_value(self, values: bool = True) -> exp.Tuple | None:
 990        value = super()._parse_value(values=values)
 991        if not value:
 992            return None
 993
 994        # In Clickhouse "SELECT * FROM VALUES (1, 2, 3)" generates a table with a single column, in contrast
 995        # to other dialects. For this case, we canonicalize the values into a tuple-of-tuples AST if it's not already one.
 996        # In INSERT INTO statements the same clause actually references multiple columns (opposite semantics),
 997        # but the final result is not altered by the extra parentheses.
 998        # Note: Clickhouse allows VALUES([structure], value, ...) so the branch checks for the last expression
 999        # A single-value tuple is generated as "(x)", which is parsed back into a Paren
1000        # rather than a Tuple, so it's unwrapped here to keep this rewrite idempotent
1001        expressions = value.expressions
1002        if values and not isinstance(expressions[-1], exp.Tuple):
1003            value.set(
1004                "expressions",
1005                [self.expression(exp.Tuple(expressions=[expr.unnest()])) for expr in expressions],
1006            )
1007
1008        return value
1009
1010    def _parse_partitioned_by(self) -> exp.PartitionedByProperty:
1011        # ClickHouse allows custom expressions as partition key
1012        # https://clickhouse.com/docs/engines/table-engines/mergetree-family/custom-partitioning-key
1013        return self.expression(exp.PartitionedByProperty(this=self._parse_assignment()))
1014
1015    def _parse_detach(self) -> exp.Detach:
1016        kind = self._match_set(self.DB_CREATABLES) and self._prev.text.upper()
1017        exists = self._parse_exists()
1018        this = self._parse_table_parts()
1019
1020        return self.expression(
1021            exp.Detach(
1022                this=this,
1023                kind=kind,
1024                exists=exists,
1025                cluster=self._parse_on_property() if self._match(TokenType.ON) else None,
1026                permanent=self._match_text_seq("PERMANENTLY"),
1027                sync=self._match_text_seq("SYNC"),
1028            )
1029        )
TIMESTAMP_TRUNC_UNITS = {'MILLISECOND', 'QUARTER', 'YEAR', 'SECOND', 'MONTH', 'HOUR', 'MICROSECOND', 'MINUTE', 'DAY'}
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:
 638        is_negated = self._match(TokenType.NOT)
 639        in_expr: exp.In | None = None
 640        if self._match(TokenType.IN):
 641            in_expr = self._parse_in(this)
 642            in_expr.set("is_global", True)
 643        return self.expression(exp.Not(this=in_expr)) if is_negated else t.cast(exp.In, in_expr)
 644
 645    def _parse_table(
 646        self,
 647        schema: bool = False,
 648        joins: bool = False,
 649        alias_tokens: Collection[TokenType] | None = None,
 650        parse_bracket: bool = False,
 651        is_db_reference: bool = False,
 652        parse_partition: bool = False,
 653        consume_pipe: bool = False,
 654    ) -> exp.Expr | None:
 655        this = super()._parse_table(
 656            schema=schema,
 657            joins=joins,
 658            alias_tokens=alias_tokens,
 659            parse_bracket=parse_bracket,
 660            is_db_reference=is_db_reference,
 661        )
 662
 663        if isinstance(this, exp.Table):
 664            inner = this.this
 665            alias = this.args.get("alias")
 666
 667            if isinstance(inner, exp.GenerateSeries) and alias and not alias.columns:
 668                alias.set("columns", [exp.to_identifier("generate_series")])
 669
 670        if self._match(TokenType.FINAL):
 671            this = self.expression(exp.Final(this=this))
 672
 673        return this
 674
 675    def _parse_position(self, haystack_first: bool = False) -> exp.StrPosition:
 676        return super()._parse_position(haystack_first=True)
 677
 678    # https://clickhouse.com/docs/en/sql-reference/statements/select/with/
 679    def _parse_cte(self) -> exp.CTE | exp.FunctionSpecification | None:
 680        # WITH <identifier> AS <subquery expression>
 681        cte: exp.CTE | exp.FunctionSpecification | None = self._try_parse(super()._parse_cte)
 682
 683        if not cte:
 684            # WITH <expression> AS <identifier>
 685            cte = self.expression(
 686                exp.CTE(this=self._parse_assignment(), alias=self._parse_table_alias(), scalar=True)
 687            )
 688
 689        return cte
 690
 691    def _parse_join_parts(
 692        self,
 693    ) -> tuple[Token | None, Token | None, Token | None]:
 694        is_global = self._prev if self._match(TokenType.GLOBAL) else None
 695
 696        kind_pre = self._prev if self._match_set(self.JOIN_KINDS) else None
 697        side = self._prev if self._match_set(self.JOIN_SIDES) else None
 698        kind = self._prev if self._match_set(self.JOIN_KINDS) else None
 699
 700        return is_global, side or kind, kind_pre or kind
 701
 702    def _parse_join(
 703        self,
 704        skip_join_token: bool = False,
 705        parse_bracket: bool = False,
 706        alias_tokens: t.Collection[TokenType] | None = None,
 707    ) -> exp.Join | None:
 708        join = super()._parse_join(
 709            skip_join_token=skip_join_token, parse_bracket=True, alias_tokens=alias_tokens
 710        )
 711        if join:
 712            method = join.args.get("method")
 713            join.set("method", None)
 714            join.set("global_", method)
 715
 716            # tbl ARRAY JOIN arr <-- this should be a `Column` reference, not a `Table`
 717            # https://clickhouse.com/docs/en/sql-reference/statements/select/array-join
 718            if join.kind == "ARRAY":
 719                for table in join.find_all(exp.Table):
 720                    table.replace(table.to_column())
 721
 722        return join
 723
 724    def _parse_function(
 725        self,
 726        functions: dict[str, t.Callable] | None = None,
 727        anonymous: bool = False,
 728        optional_parens: bool = True,
 729        any_token: bool = False,
 730    ) -> exp.Expr | None:
 731        expr = super()._parse_function(
 732            functions=functions,
 733            anonymous=anonymous,
 734            optional_parens=optional_parens,
 735            any_token=any_token,
 736        )
 737
 738        func = expr.this if isinstance(expr, exp.Window) else expr
 739
 740        # Aggregate functions can be split in 2 parts: <func_name><suffix[es]>
 741        parts = self._resolve_clickhouse_agg(func.name) if isinstance(func, exp.Anonymous) else None
 742
 743        if parts:
 744            anon_func: exp.Anonymous = t.cast(exp.Anonymous, func)
 745            params = self._parse_func_params(anon_func)
 746
 747            if len(parts[1]) > 0:
 748                exp_class: Type[exp.Expr] = (
 749                    exp.CombinedParameterizedAgg if params else exp.CombinedAggFunc
 750                )
 751            else:
 752                exp_class = exp.ParameterizedAgg if params else exp.AnonymousAggFunc
 753
 754            instance = exp_class(this=anon_func.this, expressions=anon_func.expressions)
 755            if params:
 756                instance.set("params", params)
 757            func = self.expression(instance)
 758
 759            if isinstance(expr, exp.Window):
 760                # The window's func was parsed as Anonymous in base parser, fix its
 761                # type to be ClickHouse style CombinedAnonymousAggFunc / AnonymousAggFunc
 762                expr.set("this", func)
 763            elif params:
 764                # Params have blocked super()._parse_function() from parsing the following window
 765                # (if that exists) as they're standing between the function call and the window spec
 766                expr = self._parse_window(func)
 767            else:
 768                expr = func
 769
 770        return expr
 771
 772    def _parse_func_params(self, this: exp.Func | None = None) -> list[exp.Expr] | None:
 773        if self._match_pair(TokenType.R_PAREN, TokenType.L_PAREN):
 774            return self._parse_csv(self._parse_lambda)
 775
 776        if self._match(TokenType.L_PAREN):
 777            params = self._parse_csv(self._parse_lambda)
 778            self._match_r_paren(this)
 779            return params
 780
 781        return None
 782
 783    def _parse_group_concat(self) -> exp.GroupConcat:
 784        args = self._parse_csv(self._parse_lambda)
 785        params = self._parse_func_params()
 786
 787        if params:
 788            # groupConcat(sep [, limit])(expr)
 789            separator = seq_get(args, 0)
 790            limit = seq_get(args, 1)
 791            this: exp.Expr | None = seq_get(params, 0)
 792            if limit is not None:
 793                this = exp.Limit(this=this, expression=limit)
 794            return self.expression(exp.GroupConcat(this=this, separator=separator))
 795
 796        # groupConcat(expr)
 797        return self.expression(exp.GroupConcat(this=seq_get(args, 0)))
 798
 799    def _parse_quantile(self) -> exp.Quantile:
 800        this = self._parse_lambda()
 801        params = self._parse_func_params()
 802        if params:
 803            return self.expression(exp.Quantile(this=params[0], quantile=this))
 804        return self.expression(exp.Quantile(this=this, quantile=exp.Literal.number(0.5)))
 805
 806    def _parse_wrapped_id_vars(self, optional: bool = False) -> list[exp.Expr]:
 807        return super()._parse_wrapped_id_vars(optional=True)
 808
 809    def _parse_column_def(
 810        self, this: exp.Expr | None, computed_column: bool = True
 811    ) -> exp.Expr | None:
 812        if self._match(TokenType.DOT):
 813            return exp.Dot(this=this, expression=self._parse_id_var())
 814
 815        return super()._parse_column_def(this, computed_column=computed_column)
 816
 817    def _parse_primary_key(
 818        self,
 819        wrapped_optional: bool = False,
 820        in_props: bool = False,
 821        named_primary_key: bool = False,
 822    ) -> exp.PrimaryKeyColumnConstraint | exp.PrimaryKey:
 823        return super()._parse_primary_key(
 824            wrapped_optional=wrapped_optional or in_props,
 825            in_props=in_props,
 826            named_primary_key=named_primary_key,
 827        )
 828
 829    def _parse_on_property(self) -> exp.Expr | None:
 830        index = self._index
 831        if self._match_text_seq("CLUSTER"):
 832            this = self._parse_string() or self._parse_id_var()
 833            if this:
 834                return self.expression(exp.OnCluster(this=this))
 835            else:
 836                self._retreat(index)
 837        return None
 838
 839    def _parse_auto_refresh_property(self) -> exp.AutoRefreshProperty | None:
 840        index = self._index - 1
 841        cadence = self._prev.text.upper() if self._match_texts(("EVERY", "AFTER")) else None
 842        interval = (
 843            self._parse_interval(require_interval=False, parse_function_unit=False)
 844            if cadence
 845            else None
 846        )
 847
 848        if cadence and not interval:
 849            self._retreat(index)
 850            return None
 851
 852        offset = None
 853        if self._match_text_seq("OFFSET"):
 854            offset = self._parse_interval(require_interval=False, parse_function_unit=False)
 855            if not offset:
 856                self._retreat(index)
 857                return None
 858
 859        randomize = None
 860        if self._match_text_seq("RANDOMIZE", "FOR"):
 861            randomize = self._parse_interval(require_interval=False, parse_function_unit=False)
 862            if not randomize:
 863                self._retreat(index)
 864                return None
 865
 866        dependencies = None
 867        if self._match_text_seq("DEPENDS", "ON"):
 868            dependencies = self._parse_csv(lambda: self._parse_table_parts(schema=True))
 869            if not dependencies:
 870                self._retreat(index)
 871                return None
 872
 873        if not cadence and not dependencies:
 874            self._retreat(index)
 875            return None
 876
 877        settings = self._parse_settings_property() if self._match_text_seq("SETTINGS") else None
 878
 879        return self.expression(
 880            exp.AutoRefreshProperty(
 881                this=interval,
 882                cadence=cadence,
 883                offset=offset,
 884                randomize=randomize,
 885                expressions=dependencies,
 886                settings=settings,
 887                append=self._match_text_seq("APPEND"),
 888            )
 889        )
 890
 891    def _parse_index_constraint(self, kind: str | None = None) -> exp.IndexColumnConstraint:
 892        # INDEX name1 expr TYPE type1(args) GRANULARITY value
 893        this = self._parse_id_var()
 894        expression = self._parse_assignment()
 895
 896        index_type = self._match_text_seq("TYPE") and (self._parse_function() or self._parse_var())
 897
 898        granularity = self._match_text_seq("GRANULARITY") and self._parse_term()
 899
 900        return self.expression(
 901            exp.IndexColumnConstraint(
 902                this=this, expression=expression, index_type=index_type, granularity=granularity
 903            )
 904        )
 905
 906    def _parse_partition(self) -> exp.Partition | None:
 907        # https://clickhouse.com/docs/en/sql-reference/statements/alter/partition#how-to-set-partition-expression
 908        if not self._match(TokenType.PARTITION):
 909            return None
 910
 911        if self._match_text_seq("ID"):
 912            # Corresponds to the PARTITION ID <string_value> syntax
 913            expressions: list[exp.Expr] = [
 914                self.expression(exp.PartitionId(this=self._parse_string()))
 915            ]
 916        else:
 917            expressions = self._parse_expressions()
 918
 919        return self.expression(exp.Partition(expressions=expressions))
 920
 921    def _parse_alter_table_replace(self) -> exp.Expr | None:
 922        partition = self._parse_partition()
 923
 924        if not partition or not self._match(TokenType.FROM):
 925            return None
 926
 927        return self.expression(
 928            exp.ReplacePartition(expression=partition, source=self._parse_table_parts())
 929        )
 930
 931    def _parse_alter_table_alter(self) -> exp.Expr | None:
 932        # MODIFY forms other than MODIFY COLUMN (SQL SECURITY, ORDER BY, TTL, COMMENT, ...)
 933        # are parsed as properties, since ALTER can now reach this path too
 934        if self._prev.text.upper() == "MODIFY" and not self._match(TokenType.COLUMN, advance=False):
 935            if properties := self._parse_properties():
 936                return self.expression(
 937                    exp.AlterModifySqlSecurity(expressions=properties.expressions)
 938                )
 939            return None
 940
 941        # https://clickhouse.com/docs/sql-reference/statements/alter/column#modify-column
 942        alter = super()._parse_alter_table_alter()
 943        return None if self._curr else alter
 944
 945    def _parse_definer(self) -> exp.DefinerProperty | None:
 946        self._match(TokenType.EQ)
 947        if self._match(TokenType.CURRENT_USER):
 948            return exp.DefinerProperty(this=exp.Var(this=self._prev.text.upper()))
 949        return exp.DefinerProperty(this=self._parse_string())
 950
 951    def _parse_projection_def(self) -> exp.ProjectionDef | None:
 952        if not self._match(TokenType.PROJECTION):
 953            return None
 954
 955        return self.expression(
 956            exp.ProjectionDef(
 957                this=self._parse_id_var(), expression=self._parse_wrapped(self._parse_statement)
 958            )
 959        )
 960
 961    def _parse_constraint(self) -> exp.Expr | None:
 962        return super()._parse_constraint() or self._parse_projection_def()
 963
 964    def _parse_alias(self, this: exp.Expr | None, explicit: bool = False) -> exp.Expr | None:
 965        # In clickhouse "SELECT <expr> APPLY(...)" is a query modifier,
 966        # so "APPLY" shouldn't be parsed as <expr>'s alias. However, "SELECT <expr> apply" is a valid alias
 967        if self._match_pair(TokenType.APPLY, TokenType.L_PAREN, advance=False):
 968            return this
 969
 970        return super()._parse_alias(this=this, explicit=explicit)
 971
 972    def _parse_expression(self) -> exp.Expr | None:
 973        this = super()._parse_expression()
 974
 975        # Clickhouse allows "SELECT <expr> [APPLY(func)] [...]]" modifier
 976        while self._match_pair(TokenType.APPLY, TokenType.L_PAREN):
 977            this = exp.Apply(this=this, expression=self._parse_var(any_token=True))
 978            self._match(TokenType.R_PAREN)
 979
 980        return this
 981
 982    def _parse_columns(self) -> exp.Expr:
 983        this: exp.Expr = self.expression(exp.Columns(this=self._parse_lambda()))
 984
 985        while self._next and self._match_text_seq(")", "APPLY", "("):
 986            self._match(TokenType.R_PAREN)
 987            this = exp.Apply(this=this, expression=self._parse_var(any_token=True))
 988        return this
 989
 990    def _parse_value(self, values: bool = True) -> exp.Tuple | None:
 991        value = super()._parse_value(values=values)
 992        if not value:
 993            return None
 994
 995        # In Clickhouse "SELECT * FROM VALUES (1, 2, 3)" generates a table with a single column, in contrast
 996        # to other dialects. For this case, we canonicalize the values into a tuple-of-tuples AST if it's not already one.
 997        # In INSERT INTO statements the same clause actually references multiple columns (opposite semantics),
 998        # but the final result is not altered by the extra parentheses.
 999        # Note: Clickhouse allows VALUES([structure], value, ...) so the branch checks for the last expression
1000        # A single-value tuple is generated as "(x)", which is parsed back into a Paren
1001        # rather than a Tuple, so it's unwrapped here to keep this rewrite idempotent
1002        expressions = value.expressions
1003        if values and not isinstance(expressions[-1], exp.Tuple):
1004            value.set(
1005                "expressions",
1006                [self.expression(exp.Tuple(expressions=[expr.unnest()])) for expr in expressions],
1007            )
1008
1009        return value
1010
1011    def _parse_partitioned_by(self) -> exp.PartitionedByProperty:
1012        # ClickHouse allows custom expressions as partition key
1013        # https://clickhouse.com/docs/engines/table-engines/mergetree-family/custom-partitioning-key
1014        return self.expression(exp.PartitionedByProperty(this=self._parse_assignment()))
1015
1016    def _parse_detach(self) -> exp.Detach:
1017        kind = self._match_set(self.DB_CREATABLES) and self._prev.text.upper()
1018        exists = self._parse_exists()
1019        this = self._parse_table_parts()
1020
1021        return self.expression(
1022            exp.Detach(
1023                this=this,
1024                kind=kind,
1025                exists=exists,
1026                cluster=self._parse_on_property() if self._match(TokenType.ON) else None,
1027                permanent=self._match_text_seq("PERMANENTLY"),
1028                sync=self._match_text_seq("SYNC"),
1029            )
1030        )

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

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