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

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

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