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    SET_OP_MODIFIERS = {"settings", "format"}
 266    INTERVAL_SPANS = False
 267    OPTIONAL_ALIAS_TOKEN_CTE = False
 268    JOINS_HAVE_EQUAL_PRECEDENCE = True
 269
 270    FUNCTIONS = {
 271        **{
 272            k: v
 273            for k, v in parser.Parser.FUNCTIONS.items()
 274            if k not in ("TRANSFORM", "APPROX_TOP_SUM")
 275        },
 276        **{
 277            regexp_extract: lambda args: exp.RegexpExtract(
 278                this=seq_get(args, 0),
 279                expression=seq_get(args, 1),
 280                group=seq_get(args, 2),
 281            )
 282            for regexp_extract in ("REGEXPEXTRACT", "REGEXP_EXTRACT", "REGEXP_SUBSTR")
 283        },
 284        **{f"TOSTARTOF{unit}": _build_timestamp_trunc(unit=unit) for unit in TIMESTAMP_TRUNC_UNITS},
 285        "ANY": exp.AnyValue.from_arg_list,
 286        "ARRAYCOMPACT": exp.ArrayCompact.from_arg_list,
 287        "ARRAYCONCAT": exp.ArrayConcat.from_arg_list,
 288        "ARRAYDISTINCT": exp.ArrayDistinct.from_arg_list,
 289        "ARRAYEXCEPT": exp.ArrayExcept.from_arg_list,
 290        "ARRAYSUM": exp.ArraySum.from_arg_list,
 291        "ARRAYMAX": exp.ArrayMax.from_arg_list,
 292        "ARRAYMIN": exp.ArrayMin.from_arg_list,
 293        "ARRAYREVERSE": exp.ArrayReverse.from_arg_list,
 294        "ARRAYSLICE": exp.ArraySlice.from_arg_list,
 295        "ARRAYFILTER": _build_array_lambda_func(exp.ArrayFilter, "arrayFilter"),
 296        "ARRAYMAP": _build_array_lambda_func(exp.Transform, "arrayMap"),
 297        "CURRENTDATABASE": exp.CurrentDatabase.from_arg_list,
 298        "CURRENTSCHEMAS": exp.CurrentSchemas.from_arg_list,
 299        "COUNTIF": _build_count_if,
 300        "COUNTMATCHES": exp.RegexpCount.from_arg_list,
 301        "CITYHASH64": exp.CityHash64.from_arg_list,
 302        "COSINEDISTANCE": exp.CosineDistance.from_arg_list,
 303        "VERSION": exp.CurrentVersion.from_arg_list,
 304        "DATE_ADD": build_date_delta(exp.DateAdd, default_unit=None),
 305        "DATEADD": build_date_delta(exp.DateAdd, default_unit=None),
 306        "DATE_DIFF": build_date_delta(exp.DateDiff, default_unit=None, supports_timezone=True),
 307        "DATEDIFF": build_date_delta(exp.DateDiff, default_unit=None, supports_timezone=True),
 308        "DATE_FORMAT": _build_datetime_format(exp.TimeToStr),
 309        "DATE_SUB": build_date_delta(exp.DateSub, default_unit=None),
 310        "DATESUB": build_date_delta(exp.DateSub, default_unit=None),
 311        "DATETRUNC": exp.DateTrunc.from_arg_list,
 312        "FORMATDATETIME": _build_datetime_format(exp.TimeToStr),
 313        "GROUPBITAND": exp.BitwiseAndAgg.from_arg_list,
 314        "GROUPBITOR": exp.BitwiseOrAgg.from_arg_list,
 315        "GROUPBITXOR": exp.BitwiseXorAgg.from_arg_list,
 316        "HAS": exp.ArrayContains.from_arg_list,
 317        "ILIKE": build_like(exp.ILike),
 318        "ISINFINITE": exp.IsInf.from_arg_list,
 319        "JSONEXTRACTRAW": build_json_extract_path(
 320            exp.JSONExtract, zero_based_indexing=False, arrow_req_json_type=True
 321        ),
 322        "JSONEXTRACTSTRING": build_json_extract_path(
 323            exp.JSONExtractScalar, zero_based_indexing=False, arrow_req_json_type=True
 324        ),
 325        "LENGTH": lambda args: exp.Length(this=seq_get(args, 0), binary=True),
 326        "LIKE": build_like(exp.Like),
 327        "L2Distance": exp.EuclideanDistance.from_arg_list,
 328        "MAP": parser.build_var_map,
 329        "MATCH": exp.RegexpLike.from_arg_list,
 330        "NOTLIKE": build_like(exp.Like, not_like=True),
 331        "PARSEDATETIME": _build_datetime_format(exp.ParseDatetime),
 332        "RANDCANONICAL": exp.Rand.from_arg_list,
 333        "STR_TO_DATE": _build_str_to_date,
 334        "TIMESTAMP_SUB": build_date_delta(exp.TimestampSub, default_unit=None),
 335        "TIMESTAMPSUB": build_date_delta(exp.TimestampSub, default_unit=None),
 336        "TIMESTAMP_ADD": build_date_delta(exp.TimestampAdd, default_unit=None),
 337        "TIMESTAMPADD": build_date_delta(exp.TimestampAdd, default_unit=None),
 338        "TODAYOFWEEK": _build_without_extra_args(exp.DayOfWeekIso, "toDayOfWeek"),
 339        "TOISOWEEK": _build_without_extra_args(exp.WeekOfYear, "toISOWeek"),
 340        "TOISOYEAR": _build_without_extra_args(exp.YearOfWeekIso, "toISOYear"),
 341        "TOMONDAY": _build_timestamp_trunc("WEEK"),
 342        "UNIQ": exp.ApproxDistinct.from_arg_list,
 343        "MD5": exp.MD5Digest.from_arg_list,
 344        "SHA256": lambda args: exp.SHA2(this=seq_get(args, 0), length=exp.Literal.number(256)),
 345        "SHA512": lambda args: exp.SHA2(this=seq_get(args, 0), length=exp.Literal.number(512)),
 346        "SPLITBYCHAR": _build_split_by_char,
 347        "SPLITBYREGEXP": _build_split(exp.RegexpSplit),
 348        "SPLITBYSTRING": _build_split(exp.Split),
 349        "SUBSTRINGINDEX": exp.SubstringIndex.from_arg_list,
 350        "TOTYPENAME": exp.Typeof.from_arg_list,
 351        "TRIMBOTH": exp.Trim.from_arg_list,
 352        "TRIMLEFT": parser.build_trim,
 353        "TRIMRIGHT": lambda args: parser.build_trim(args, is_left=False),
 354        "EDITDISTANCE": exp.Levenshtein.from_arg_list,
 355        "JAROWINKLERSIMILARITY": exp.JarowinklerSimilarity.from_arg_list,
 356        "LEVENSHTEINDISTANCE": exp.Levenshtein.from_arg_list,
 357        "UTCTIMESTAMP": exp.UtcTimestamp.from_arg_list,
 358    }
 359
 360    AGG_FUNCTIONS: t.ClassVar = _AGG_FUNCTIONS
 361    AGG_FUNCTIONS_SUFFIXES: t.ClassVar = _AGG_FUNCTIONS_SUFFIXES
 362
 363    FUNC_TOKENS = {
 364        *parser.Parser.FUNC_TOKENS,
 365        TokenType.AND,
 366        TokenType.FILE,
 367        TokenType.OR,
 368        TokenType.PASTE,
 369        TokenType.SET,
 370        TokenType.VIEW,
 371    }
 372
 373    RESERVED_TOKENS = parser.Parser.RESERVED_TOKENS - {TokenType.SELECT}
 374
 375    ID_VAR_TOKENS = {
 376        *parser.Parser.ID_VAR_TOKENS,
 377        TokenType.LIKE,
 378    }
 379
 380    AGG_FUNC_MAPPING: t.ClassVar = _AGG_FUNC_MAPPING
 381
 382    @classmethod
 383    def _resolve_clickhouse_agg(cls, name: str) -> tuple[str, Sequence[str]] | None:
 384        # ClickHouse allows chaining multiple combinators on aggregate functions.
 385        # See https://clickhouse.com/docs/sql-reference/aggregate-functions/combinators
 386        # N.B. this resolution allows any suffix stack, including ones that ClickHouse rejects
 387        # syntactically such as sumMergeMerge (due to repeated adjacent suffixes)
 388
 389        # Until we are able to identify a 1- or 0-suffix aggregate function by name,
 390        # repeatedly strip and queue suffixes (checking longer suffixes first, see comment on
 391        # AGG_FUNCTIONS_SUFFIXES_SORTED). This loop only runs for 2 or more suffixes,
 392        # as AGG_FUNC_MAPPING memoizes all 0- and 1-suffix
 393        accumulated_suffixes: deque[str] = deque()
 394        while (parts := _AGG_FUNC_MAPPING.get(name)) is None:
 395            for suffix in _AGG_FUNCTIONS_SUFFIXES:
 396                if name.endswith(suffix) and len(name) != len(suffix):
 397                    accumulated_suffixes.appendleft(suffix)
 398                    name = name[: -len(suffix)]
 399                    break
 400            else:
 401                return None
 402
 403        # We now have a 0- or 1-suffix aggregate
 404        agg_func_name, inner_suffix = parts
 405        if inner_suffix:
 406            # this is a 1-suffix aggregate (either naturally or via repeated suffix
 407            # stripping). prepend the innermost suffix.
 408            accumulated_suffixes.appendleft(inner_suffix)
 409
 410        return (agg_func_name, accumulated_suffixes)
 411
 412    FUNCTION_PARSERS = {
 413        **{k: v for k, v in parser.Parser.FUNCTION_PARSERS.items() if k != "MATCH"},
 414        "ARRAYJOIN": lambda self: self.expression(exp.Explode(this=self._parse_expression())),
 415        "GROUPCONCAT": lambda self: self._parse_group_concat(),
 416        "QUANTILE": lambda self: self._parse_quantile(),
 417        "MEDIAN": lambda self: self._parse_quantile(),
 418        "COLUMNS": lambda self: self._parse_columns(),
 419        "TUPLE": lambda self: exp.Struct.from_arg_list(self._parse_function_args(alias=True)),
 420        "AND": lambda self: self._parse_connector_function(exp.and_),
 421        "OR": lambda self: self._parse_connector_function(exp.or_),
 422        "XOR": lambda self: exp.xor(*self._parse_function_args(alias=False)),
 423        "VIEW": lambda self: self.expression(
 424            exp.Anonymous(this="view", expressions=[self._parse_select()])
 425        ),
 426    }
 427
 428    PROPERTY_PARSERS = {
 429        **{k: v for k, v in parser.Parser.PROPERTY_PARSERS.items() if k != "DYNAMIC"},
 430        "ENGINE": lambda self: self._parse_engine_property(),
 431        "REFRESH": lambda self: self._parse_auto_refresh_property(),
 432        "UUID": lambda self: self.expression(exp.UuidProperty(this=self._parse_string())),
 433    }
 434
 435    NO_PAREN_FUNCTION_PARSERS = {
 436        k: v for k, v in parser.Parser.NO_PAREN_FUNCTION_PARSERS.items() if k != "ANY"
 437    }
 438
 439    NO_PAREN_FUNCTIONS = {
 440        k: v
 441        for k, v in parser.Parser.NO_PAREN_FUNCTIONS.items()
 442        if k != TokenType.CURRENT_TIMESTAMP
 443    }
 444
 445    RANGE_PARSERS = {
 446        **parser.Parser.RANGE_PARSERS,
 447        TokenType.GLOBAL: lambda self, this: self._parse_global_in(this),
 448    }
 449
 450    COLUMN_OPERATORS = {
 451        **{k: v for k, v in parser.Parser.COLUMN_OPERATORS.items() if k != TokenType.PLACEHOLDER},
 452        TokenType.DOTCARET: lambda self, this, field: self.expression(
 453            exp.NestedJSONSelect(this=this, expression=field)
 454        ),
 455    }
 456
 457    JOIN_KINDS = {
 458        *parser.Parser.JOIN_KINDS,
 459        TokenType.ALL,
 460        TokenType.ANY,
 461        TokenType.ASOF,
 462        TokenType.ARRAY,
 463        TokenType.PASTE,
 464    }
 465
 466    TABLE_ALIAS_TOKENS = parser.Parser.TABLE_ALIAS_TOKENS - {
 467        TokenType.ALL,
 468        TokenType.ANY,
 469        TokenType.ARRAY,
 470        TokenType.ASOF,
 471        TokenType.FINAL,
 472        TokenType.FORMAT,
 473        TokenType.PASTE,
 474        TokenType.SETTINGS,
 475    }
 476
 477    ALIAS_TOKENS = parser.Parser.ALIAS_TOKENS - {
 478        TokenType.FORMAT,
 479        TokenType.SETTINGS,
 480    }
 481
 482    LOG_DEFAULTS_TO_LN = True
 483
 484    QUERY_MODIFIER_PARSERS = {
 485        **parser.Parser.QUERY_MODIFIER_PARSERS,
 486        TokenType.SETTINGS: lambda self: (
 487            "settings",
 488            self._advance() or self._parse_csv(self._parse_assignment),
 489        ),
 490        TokenType.FORMAT: lambda self: ("format", self._advance() or self._parse_id_var()),
 491    }
 492
 493    CONSTRAINT_PARSERS = {
 494        **parser.Parser.CONSTRAINT_PARSERS,
 495        "INDEX": lambda self: self._parse_index_constraint(),
 496        "CODEC": lambda self: self._parse_compress(),
 497        "ASSUME": lambda self: self._parse_assume_constraint(),
 498    }
 499
 500    ALTER_PARSERS = {
 501        **parser.Parser.ALTER_PARSERS,
 502        "MODIFY": lambda self: self._parse_alter_table_alter(),
 503        "REPLACE": lambda self: self._parse_alter_table_replace(),
 504    }
 505
 506    SCHEMA_UNNAMED_CONSTRAINTS = {
 507        *parser.Parser.SCHEMA_UNNAMED_CONSTRAINTS,
 508        "INDEX",
 509    } - {"CHECK"}
 510
 511    PLACEHOLDER_PARSERS = {
 512        **parser.Parser.PLACEHOLDER_PARSERS,
 513        TokenType.L_BRACE: lambda self: self._parse_query_parameter(),
 514    }
 515
 516    STATEMENT_PARSERS = {
 517        **parser.Parser.STATEMENT_PARSERS,
 518        TokenType.DETACH: lambda self: self._parse_detach(),
 519    }
 520
 521    def _parse_wrapped_select_or_assignment(self) -> exp.Expr | None:
 522        return self._parse_wrapped(
 523            lambda: self._parse_select() or self._parse_assignment(), optional=True
 524        )
 525
 526    def _parse_check_constraint(self) -> exp.CheckColumnConstraint | None:
 527        return self.expression(
 528            exp.CheckColumnConstraint(this=self._parse_wrapped_select_or_assignment())
 529        )
 530
 531    def _parse_assume_constraint(self) -> exp.AssumeColumnConstraint | None:
 532        return self.expression(
 533            exp.AssumeColumnConstraint(this=self._parse_wrapped_select_or_assignment())
 534        )
 535
 536    def _parse_engine_property(self) -> exp.EngineProperty:
 537        self._match(TokenType.EQ)
 538        return self.expression(
 539            exp.EngineProperty(this=self._parse_field(any_token=True, anonymous_func=True))
 540        )
 541
 542    # https://clickhouse.com/docs/en/sql-reference/statements/create/function
 543    def _parse_user_defined_function_expression(self) -> exp.Expr | None:
 544        return self._parse_lambda()
 545
 546    def _parse_types(
 547        self,
 548        check_func: bool = False,
 549        schema: bool = False,
 550        allow_identifiers: bool = True,
 551        with_collation: bool = False,
 552    ) -> exp.Expr | None:
 553        dtype = super()._parse_types(
 554            check_func=check_func,
 555            schema=schema,
 556            allow_identifiers=allow_identifiers,
 557            with_collation=with_collation,
 558        )
 559        if isinstance(dtype, exp.DataType) and dtype.args.get("nullable") is not True:
 560            # Mark every type as non-nullable which is ClickHouse's default, unless it's
 561            # already marked as nullable. This marker helps us transpile types from other
 562            # dialects to ClickHouse, so that we can e.g. produce `CAST(x AS Nullable(String))`
 563            # from `CAST(x AS TEXT)`. If there is a `NULL` value in `x`, the former would
 564            # fail in ClickHouse without the `Nullable` type constructor.
 565            dtype.set("nullable", False)
 566
 567        return dtype
 568
 569    def _parse_extract(self) -> exp.Extract | exp.Anonymous:
 570        index = self._index
 571        this = self._parse_bitwise()
 572        if self._match(TokenType.FROM):
 573            self._retreat(index)
 574            return super()._parse_extract()
 575
 576        # We return Anonymous here because extract and regexpExtract have different semantics,
 577        # so parsing extract(foo, bar) into RegexpExtract can potentially break queries. E.g.,
 578        # `extract('foobar', 'b')` works, but ClickHouse crashes for `regexpExtract('foobar', 'b')`.
 579        #
 580        # TODO: can we somehow convert the former into an equivalent `regexpExtract` call?
 581        self._match(TokenType.COMMA)
 582        return self.expression(
 583            exp.Anonymous(this="extract", expressions=[this, self._parse_bitwise()])
 584        )
 585
 586    def _parse_assignment(self) -> exp.Expr | None:
 587        this = super()._parse_assignment()
 588
 589        if self._match(TokenType.PLACEHOLDER):
 590            return self.expression(
 591                exp.If(
 592                    this=this,
 593                    true=self._parse_assignment(),
 594                    false=self._match(TokenType.COLON) and self._parse_assignment(),
 595                )
 596            )
 597
 598        return this
 599
 600    def _parse_query_parameter(self) -> exp.Expr | None:
 601        """
 602        Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier}
 603        https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters
 604        """
 605        index = self._index
 606
 607        this = self._parse_id_var()
 608        self._match(TokenType.COLON)
 609        kind = self._parse_types(check_func=False, allow_identifiers=False) or (
 610            self._match_text_seq("IDENTIFIER") and "Identifier"
 611        )
 612
 613        if not kind:
 614            self._retreat(index)
 615            return None
 616        elif not self._match(TokenType.R_BRACE):
 617            self.raise_error("Expecting }")
 618
 619        if isinstance(this, exp.Identifier) and not this.quoted:
 620            this = exp.var(this.name)
 621
 622        return self.expression(exp.Placeholder(this=this, kind=kind))
 623
 624    def _parse_bracket(self, this: exp.Expr | None = None) -> exp.Expr | None:
 625        if this:
 626            bracket_json_type = None
 627
 628            while self._match_pair(TokenType.L_BRACKET, TokenType.R_BRACKET):
 629                bracket_json_type = exp.DataType(
 630                    this=exp.DType.ARRAY,
 631                    expressions=[
 632                        bracket_json_type
 633                        or exp.DType.JSON.into_expr(dialect=self.dialect, nullable=False)
 634                    ],
 635                    nested=True,
 636                )
 637
 638            if bracket_json_type:
 639                return self.expression(exp.JSONCast(this=this, to=bracket_json_type))
 640
 641        l_brace = self._match(TokenType.L_BRACE, advance=False)
 642        bracket = super()._parse_bracket(this)
 643
 644        if l_brace and isinstance(bracket, exp.Struct):
 645            varmap = exp.VarMap(keys=exp.Array(), values=exp.Array())
 646            for expression in bracket.expressions:
 647                if not isinstance(expression, exp.PropertyEQ):
 648                    break
 649
 650                varmap.args["keys"].append("expressions", exp.Literal.string(expression.name))
 651                varmap.args["values"].append("expressions", expression.expression)
 652
 653            return varmap
 654
 655        return bracket
 656
 657    def _parse_global_in(self, this: exp.Expr | None) -> exp.Not | exp.In | None:
 658        index = self._index - 1
 659        is_negated = self._match(TokenType.NOT)
 660        if not self._match(TokenType.IN):
 661            self._retreat(index)
 662            return None
 663
 664        in_expr = self._parse_in(this)
 665        in_expr.set("is_global", True)
 666        return self.expression(exp.Not(this=in_expr)) if is_negated else in_expr
 667
 668    def _parse_table(
 669        self,
 670        schema: bool = False,
 671        joins: bool = False,
 672        alias_tokens: Collection[TokenType] | None = None,
 673        parse_bracket: bool = False,
 674        is_db_reference: bool = False,
 675        parse_partition: bool = False,
 676        consume_pipe: bool = False,
 677    ) -> exp.Expr | None:
 678        this = super()._parse_table(
 679            schema=schema,
 680            joins=joins,
 681            alias_tokens=alias_tokens,
 682            parse_bracket=parse_bracket,
 683            is_db_reference=is_db_reference,
 684        )
 685
 686        if isinstance(this, exp.Table):
 687            inner = this.this
 688            alias = this.args.get("alias")
 689
 690            if isinstance(inner, exp.GenerateSeries) and alias and not alias.columns:
 691                alias.set("columns", [exp.to_identifier("generate_series")])
 692
 693        if self._match(TokenType.FINAL):
 694            this = self.expression(exp.Final(this=this))
 695
 696        return this
 697
 698    def _parse_position(self, haystack_first: bool = False) -> exp.StrPosition:
 699        return super()._parse_position(haystack_first=True)
 700
 701    # https://clickhouse.com/docs/en/sql-reference/statements/select/with/
 702    def _parse_cte(self) -> exp.CTE | exp.FunctionSpecification | None:
 703        # WITH <identifier> AS <subquery expression>
 704        cte: exp.CTE | exp.FunctionSpecification | None = self._try_parse(super()._parse_cte)
 705
 706        if not cte:
 707            # WITH <expression> AS <identifier>
 708            cte = self.expression(
 709                exp.CTE(this=self._parse_assignment(), alias=self._parse_table_alias(), scalar=True)
 710            )
 711
 712        return cte
 713
 714    def _parse_join_parts(
 715        self,
 716    ) -> tuple[Token | None, Token | None, Token | None]:
 717        method = self._prev if self._match_set((TokenType.GLOBAL, TokenType.NATURAL)) else None
 718
 719        kind_pre = self._prev if self._match_set(self.JOIN_KINDS) else None
 720        side = self._prev if self._match_set(self.JOIN_SIDES) else None
 721        kind = self._prev if self._match_set(self.JOIN_KINDS) else None
 722
 723        return method, side or kind, kind_pre or kind
 724
 725    def _parse_join(
 726        self,
 727        skip_join_token: bool = False,
 728        parse_bracket: bool = False,
 729        alias_tokens: t.Collection[TokenType] | None = None,
 730    ) -> exp.Join | None:
 731        join = super()._parse_join(
 732            skip_join_token=skip_join_token, parse_bracket=True, alias_tokens=alias_tokens
 733        )
 734        if join:
 735            if join.method == "GLOBAL":
 736                join.set("method", None)
 737                join.set("global_", "GLOBAL")
 738
 739            # tbl ARRAY JOIN arr <-- this should be a `Column` reference, not a `Table`
 740            # https://clickhouse.com/docs/en/sql-reference/statements/select/array-join
 741            if join.kind == "ARRAY":
 742                for table in join.find_all(exp.Table):
 743                    table.replace(table.to_column())
 744
 745        return join
 746
 747    def _parse_function(
 748        self,
 749        functions: dict[str, t.Callable] | None = None,
 750        anonymous: bool = False,
 751        optional_parens: bool = True,
 752        any_token: bool = False,
 753    ) -> exp.Expr | None:
 754        expr = super()._parse_function(
 755            functions=functions,
 756            anonymous=anonymous,
 757            optional_parens=optional_parens,
 758            any_token=any_token,
 759        )
 760
 761        func = expr.this if isinstance(expr, exp.Window) else expr
 762
 763        # Aggregate functions can be split in 2 parts: <func_name><suffix[es]>
 764        parts = self._resolve_clickhouse_agg(func.name) if isinstance(func, exp.Anonymous) else None
 765
 766        if parts:
 767            anon_func: exp.Anonymous = t.cast(exp.Anonymous, func)
 768            params = self._parse_func_params(anon_func)
 769
 770            if len(parts[1]) > 0:
 771                exp_class: Type[exp.Expr] = (
 772                    exp.CombinedParameterizedAgg if params else exp.CombinedAggFunc
 773                )
 774            else:
 775                exp_class = exp.ParameterizedAgg if params else exp.AnonymousAggFunc
 776
 777            instance = exp_class(this=anon_func.this, expressions=anon_func.expressions)
 778            if params:
 779                instance.set("params", params)
 780            func = self.expression(instance)
 781
 782            if isinstance(expr, exp.Window):
 783                # The window's func was parsed as Anonymous in base parser, fix its
 784                # type to be ClickHouse style CombinedAnonymousAggFunc / AnonymousAggFunc
 785                expr.set("this", func)
 786            elif params:
 787                # Params have blocked super()._parse_function() from parsing the following window
 788                # (if that exists) as they're standing between the function call and the window spec
 789                expr = self._parse_window(func)
 790            else:
 791                expr = func
 792
 793        return expr
 794
 795    def _parse_func_params(self, this: exp.Func | None = None) -> list[exp.Expr] | None:
 796        if self._match_pair(TokenType.R_PAREN, TokenType.L_PAREN):
 797            return self._parse_csv(self._parse_lambda)
 798
 799        if self._match(TokenType.L_PAREN):
 800            params = self._parse_csv(self._parse_lambda)
 801            self._match_r_paren(this)
 802            return params
 803
 804        return None
 805
 806    def _parse_group_concat(self) -> exp.GroupConcat:
 807        args = self._parse_csv(self._parse_lambda)
 808        params = self._parse_func_params()
 809
 810        if params:
 811            # groupConcat(sep [, limit])(expr)
 812            separator = seq_get(args, 0)
 813            limit = seq_get(args, 1)
 814            this: exp.Expr | None = seq_get(params, 0)
 815            if limit is not None:
 816                this = exp.Limit(this=this, expression=limit)
 817            return self.expression(exp.GroupConcat(this=this, separator=separator))
 818
 819        # groupConcat(expr)
 820        return self.expression(exp.GroupConcat(this=seq_get(args, 0)))
 821
 822    def _parse_quantile(self) -> exp.Quantile:
 823        this = self._parse_lambda()
 824        params = self._parse_func_params()
 825        if params:
 826            return self.expression(exp.Quantile(this=params[0], quantile=this))
 827        return self.expression(exp.Quantile(this=this, quantile=exp.Literal.number(0.5)))
 828
 829    def _parse_wrapped_id_vars(self, optional: bool = False) -> list[exp.Expr]:
 830        return super()._parse_wrapped_id_vars(optional=True)
 831
 832    def _parse_column_def(
 833        self, this: exp.Expr | None, computed_column: bool = True
 834    ) -> exp.Expr | None:
 835        if self._match(TokenType.DOT):
 836            return exp.Dot(this=this, expression=self._parse_id_var())
 837
 838        return super()._parse_column_def(this, computed_column=computed_column)
 839
 840    def _parse_primary_key(
 841        self,
 842        wrapped_optional: bool = False,
 843        in_props: bool = False,
 844        named_primary_key: bool = False,
 845    ) -> exp.PrimaryKeyColumnConstraint | exp.PrimaryKey:
 846        return super()._parse_primary_key(
 847            wrapped_optional=wrapped_optional or in_props,
 848            in_props=in_props,
 849            named_primary_key=named_primary_key,
 850        )
 851
 852    def _parse_on_property(self) -> exp.Expr | None:
 853        index = self._index
 854        if self._match_text_seq("CLUSTER"):
 855            this = self._parse_string() or self._parse_id_var()
 856            if this:
 857                return self.expression(exp.OnCluster(this=this))
 858            else:
 859                self._retreat(index)
 860        return None
 861
 862    def _parse_auto_refresh_property(self) -> exp.AutoRefreshProperty | None:
 863        index = self._index - 1
 864        cadence = self._prev.text.upper() if self._match_texts(("EVERY", "AFTER")) else None
 865        interval = (
 866            self._parse_interval(require_interval=False, parse_function_unit=False)
 867            if cadence
 868            else None
 869        )
 870
 871        if cadence and not interval:
 872            self._retreat(index)
 873            return None
 874
 875        offset = None
 876        if self._match_text_seq("OFFSET"):
 877            offset = self._parse_interval(require_interval=False, parse_function_unit=False)
 878            if not offset:
 879                self._retreat(index)
 880                return None
 881
 882        randomize = None
 883        if self._match_text_seq("RANDOMIZE", "FOR"):
 884            randomize = self._parse_interval(require_interval=False, parse_function_unit=False)
 885            if not randomize:
 886                self._retreat(index)
 887                return None
 888
 889        dependencies = None
 890        if self._match_text_seq("DEPENDS", "ON"):
 891            dependencies = self._parse_csv(lambda: self._parse_table_parts(schema=True))
 892            if not dependencies:
 893                self._retreat(index)
 894                return None
 895
 896        if not cadence and not dependencies:
 897            self._retreat(index)
 898            return None
 899
 900        settings = self._parse_settings_property() if self._match_text_seq("SETTINGS") else None
 901
 902        return self.expression(
 903            exp.AutoRefreshProperty(
 904                this=interval,
 905                cadence=cadence,
 906                offset=offset,
 907                randomize=randomize,
 908                expressions=dependencies,
 909                settings=settings,
 910                append=self._match_text_seq("APPEND"),
 911            )
 912        )
 913
 914    def _parse_index_constraint(self, kind: str | None = None) -> exp.IndexColumnConstraint:
 915        # INDEX name1 expr TYPE type1(args) GRANULARITY value
 916        this = self._parse_id_var()
 917        expression = self._parse_assignment()
 918
 919        index_type = self._match_text_seq("TYPE") and (self._parse_function() or self._parse_var())
 920
 921        granularity = self._match_text_seq("GRANULARITY") and self._parse_term()
 922
 923        return self.expression(
 924            exp.IndexColumnConstraint(
 925                this=this, expression=expression, index_type=index_type, granularity=granularity
 926            )
 927        )
 928
 929    def _parse_partition(self) -> exp.Partition | None:
 930        # https://clickhouse.com/docs/en/sql-reference/statements/alter/partition#how-to-set-partition-expression
 931        if not self._match(TokenType.PARTITION):
 932            return None
 933
 934        if self._match_text_seq("ID"):
 935            # Corresponds to the PARTITION ID <string_value> syntax
 936            expressions: list[exp.Expr] = [
 937                self.expression(exp.PartitionId(this=self._parse_string()))
 938            ]
 939        else:
 940            expressions = self._parse_expressions()
 941
 942        return self.expression(exp.Partition(expressions=expressions))
 943
 944    def _parse_alter_table_replace(self) -> exp.Expr | None:
 945        partition = self._parse_partition()
 946
 947        if not partition or not self._match(TokenType.FROM):
 948            return None
 949
 950        return self.expression(
 951            exp.ReplacePartition(expression=partition, source=self._parse_table_parts())
 952        )
 953
 954    def _parse_alter_table_alter(self) -> exp.Expr | None:
 955        # MODIFY forms other than MODIFY COLUMN (SQL SECURITY, ORDER BY, TTL, COMMENT, ...)
 956        # are parsed as properties, since ALTER can now reach this path too
 957        if self._prev.text.upper() == "MODIFY" and not self._match(TokenType.COLUMN, advance=False):
 958            if properties := self._parse_properties():
 959                return self.expression(
 960                    exp.AlterModifySqlSecurity(expressions=properties.expressions)
 961                )
 962            return None
 963
 964        # https://clickhouse.com/docs/sql-reference/statements/alter/column#modify-column
 965        alter = super()._parse_alter_table_alter()
 966        return None if self._curr else alter
 967
 968    def _parse_definer(self) -> exp.DefinerProperty | None:
 969        self._match(TokenType.EQ)
 970        if self._match(TokenType.CURRENT_USER):
 971            return exp.DefinerProperty(this=exp.Var(this=self._prev.text.upper()))
 972        return exp.DefinerProperty(this=self._parse_string())
 973
 974    def _parse_projection_def(self) -> exp.ProjectionDef | None:
 975        if not self._match(TokenType.PROJECTION):
 976            return None
 977
 978        return self.expression(
 979            exp.ProjectionDef(
 980                this=self._parse_id_var(), expression=self._parse_wrapped(self._parse_statement)
 981            )
 982        )
 983
 984    def _parse_constraint(self) -> exp.Expr | None:
 985        return super()._parse_constraint() or self._parse_projection_def()
 986
 987    def _parse_alias(self, this: exp.Expr | None, explicit: bool = False) -> exp.Expr | None:
 988        # In clickhouse "SELECT <expr> APPLY(...)" is a query modifier,
 989        # so "APPLY" shouldn't be parsed as <expr>'s alias. However, "SELECT <expr> apply" is a valid alias
 990        if self._match_pair(TokenType.APPLY, TokenType.L_PAREN, advance=False):
 991            return this
 992
 993        return super()._parse_alias(this=this, explicit=explicit)
 994
 995    def _parse_expression(self) -> exp.Expr | None:
 996        this = super()._parse_expression()
 997
 998        # Clickhouse allows "SELECT <expr> [APPLY(func)] [...]]" modifier
 999        while self._match_pair(TokenType.APPLY, TokenType.L_PAREN):
1000            this = exp.Apply(this=this, expression=self._parse_var(any_token=True))
1001            self._match(TokenType.R_PAREN)
1002
1003        return this
1004
1005    def _parse_columns(self) -> exp.Expr:
1006        this: exp.Expr = self.expression(exp.Columns(this=self._parse_lambda()))
1007
1008        while self._next and self._match_text_seq(")", "APPLY", "("):
1009            self._match(TokenType.R_PAREN)
1010            this = exp.Apply(this=this, expression=self._parse_var(any_token=True))
1011        return this
1012
1013    def _parse_value(self, values: bool = True) -> exp.Tuple | None:
1014        value = super()._parse_value(values=values)
1015        if not value:
1016            return None
1017
1018        # In Clickhouse "SELECT * FROM VALUES (1, 2, 3)" generates a table with a single column, in contrast
1019        # to other dialects. For this case, we canonicalize the values into a tuple-of-tuples AST if it's not already one.
1020        # In INSERT INTO statements the same clause actually references multiple columns (opposite semantics),
1021        # but the final result is not altered by the extra parentheses.
1022        # Note: Clickhouse allows VALUES([structure], value, ...) so the branch checks for the last expression
1023        # A single-value tuple is generated as "(x)", which is parsed back into a Paren
1024        # rather than a Tuple, so it's unwrapped here to keep this rewrite idempotent
1025        expressions = value.expressions
1026        if values and not isinstance(expressions[-1], exp.Tuple):
1027            value.set(
1028                "expressions",
1029                [self.expression(exp.Tuple(expressions=[expr.unnest()])) for expr in expressions],
1030            )
1031
1032        return value
1033
1034    def _parse_partitioned_by(self) -> exp.PartitionedByProperty:
1035        # ClickHouse allows custom expressions as partition key
1036        # https://clickhouse.com/docs/engines/table-engines/mergetree-family/custom-partitioning-key
1037        return self.expression(exp.PartitionedByProperty(this=self._parse_assignment()))
1038
1039    def _parse_detach(self) -> exp.Detach:
1040        kind = self._match_set(self.DB_CREATABLES) and self._prev.text.upper()
1041        exists = self._parse_exists()
1042        this = self._parse_table_parts()
1043
1044        return self.expression(
1045            exp.Detach(
1046                this=this,
1047                kind=kind,
1048                exists=exists,
1049                cluster=self._parse_on_property() if self._match(TokenType.ON) else None,
1050                permanent=self._match_text_seq("PERMANENTLY"),
1051                sync=self._match_text_seq("SYNC"),
1052            )
1053        )
TIMESTAMP_TRUNC_UNITS = {'DAY', 'HOUR', 'MICROSECOND', 'MINUTE', 'SECOND', 'MONTH', 'MILLISECOND', 'YEAR', 'QUARTER'}
class ClickHouseParser(sqlglot.parser.Parser):
 263class ClickHouseParser(parser.Parser):
 264    IS_PREDICATE_PRECEDENCE = IsPredicatePrecedence.LOW
 265
 266    SET_OP_MODIFIERS = {"settings", "format"}
 267    INTERVAL_SPANS = False
 268    OPTIONAL_ALIAS_TOKEN_CTE = False
 269    JOINS_HAVE_EQUAL_PRECEDENCE = True
 270
 271    FUNCTIONS = {
 272        **{
 273            k: v
 274            for k, v in parser.Parser.FUNCTIONS.items()
 275            if k not in ("TRANSFORM", "APPROX_TOP_SUM")
 276        },
 277        **{
 278            regexp_extract: lambda args: exp.RegexpExtract(
 279                this=seq_get(args, 0),
 280                expression=seq_get(args, 1),
 281                group=seq_get(args, 2),
 282            )
 283            for regexp_extract in ("REGEXPEXTRACT", "REGEXP_EXTRACT", "REGEXP_SUBSTR")
 284        },
 285        **{f"TOSTARTOF{unit}": _build_timestamp_trunc(unit=unit) for unit in TIMESTAMP_TRUNC_UNITS},
 286        "ANY": exp.AnyValue.from_arg_list,
 287        "ARRAYCOMPACT": exp.ArrayCompact.from_arg_list,
 288        "ARRAYCONCAT": exp.ArrayConcat.from_arg_list,
 289        "ARRAYDISTINCT": exp.ArrayDistinct.from_arg_list,
 290        "ARRAYEXCEPT": exp.ArrayExcept.from_arg_list,
 291        "ARRAYSUM": exp.ArraySum.from_arg_list,
 292        "ARRAYMAX": exp.ArrayMax.from_arg_list,
 293        "ARRAYMIN": exp.ArrayMin.from_arg_list,
 294        "ARRAYREVERSE": exp.ArrayReverse.from_arg_list,
 295        "ARRAYSLICE": exp.ArraySlice.from_arg_list,
 296        "ARRAYFILTER": _build_array_lambda_func(exp.ArrayFilter, "arrayFilter"),
 297        "ARRAYMAP": _build_array_lambda_func(exp.Transform, "arrayMap"),
 298        "CURRENTDATABASE": exp.CurrentDatabase.from_arg_list,
 299        "CURRENTSCHEMAS": exp.CurrentSchemas.from_arg_list,
 300        "COUNTIF": _build_count_if,
 301        "COUNTMATCHES": exp.RegexpCount.from_arg_list,
 302        "CITYHASH64": exp.CityHash64.from_arg_list,
 303        "COSINEDISTANCE": exp.CosineDistance.from_arg_list,
 304        "VERSION": exp.CurrentVersion.from_arg_list,
 305        "DATE_ADD": build_date_delta(exp.DateAdd, default_unit=None),
 306        "DATEADD": build_date_delta(exp.DateAdd, default_unit=None),
 307        "DATE_DIFF": build_date_delta(exp.DateDiff, default_unit=None, supports_timezone=True),
 308        "DATEDIFF": build_date_delta(exp.DateDiff, default_unit=None, supports_timezone=True),
 309        "DATE_FORMAT": _build_datetime_format(exp.TimeToStr),
 310        "DATE_SUB": build_date_delta(exp.DateSub, default_unit=None),
 311        "DATESUB": build_date_delta(exp.DateSub, default_unit=None),
 312        "DATETRUNC": exp.DateTrunc.from_arg_list,
 313        "FORMATDATETIME": _build_datetime_format(exp.TimeToStr),
 314        "GROUPBITAND": exp.BitwiseAndAgg.from_arg_list,
 315        "GROUPBITOR": exp.BitwiseOrAgg.from_arg_list,
 316        "GROUPBITXOR": exp.BitwiseXorAgg.from_arg_list,
 317        "HAS": exp.ArrayContains.from_arg_list,
 318        "ILIKE": build_like(exp.ILike),
 319        "ISINFINITE": exp.IsInf.from_arg_list,
 320        "JSONEXTRACTRAW": build_json_extract_path(
 321            exp.JSONExtract, zero_based_indexing=False, arrow_req_json_type=True
 322        ),
 323        "JSONEXTRACTSTRING": build_json_extract_path(
 324            exp.JSONExtractScalar, zero_based_indexing=False, arrow_req_json_type=True
 325        ),
 326        "LENGTH": lambda args: exp.Length(this=seq_get(args, 0), binary=True),
 327        "LIKE": build_like(exp.Like),
 328        "L2Distance": exp.EuclideanDistance.from_arg_list,
 329        "MAP": parser.build_var_map,
 330        "MATCH": exp.RegexpLike.from_arg_list,
 331        "NOTLIKE": build_like(exp.Like, not_like=True),
 332        "PARSEDATETIME": _build_datetime_format(exp.ParseDatetime),
 333        "RANDCANONICAL": exp.Rand.from_arg_list,
 334        "STR_TO_DATE": _build_str_to_date,
 335        "TIMESTAMP_SUB": build_date_delta(exp.TimestampSub, default_unit=None),
 336        "TIMESTAMPSUB": build_date_delta(exp.TimestampSub, default_unit=None),
 337        "TIMESTAMP_ADD": build_date_delta(exp.TimestampAdd, default_unit=None),
 338        "TIMESTAMPADD": build_date_delta(exp.TimestampAdd, default_unit=None),
 339        "TODAYOFWEEK": _build_without_extra_args(exp.DayOfWeekIso, "toDayOfWeek"),
 340        "TOISOWEEK": _build_without_extra_args(exp.WeekOfYear, "toISOWeek"),
 341        "TOISOYEAR": _build_without_extra_args(exp.YearOfWeekIso, "toISOYear"),
 342        "TOMONDAY": _build_timestamp_trunc("WEEK"),
 343        "UNIQ": exp.ApproxDistinct.from_arg_list,
 344        "MD5": exp.MD5Digest.from_arg_list,
 345        "SHA256": lambda args: exp.SHA2(this=seq_get(args, 0), length=exp.Literal.number(256)),
 346        "SHA512": lambda args: exp.SHA2(this=seq_get(args, 0), length=exp.Literal.number(512)),
 347        "SPLITBYCHAR": _build_split_by_char,
 348        "SPLITBYREGEXP": _build_split(exp.RegexpSplit),
 349        "SPLITBYSTRING": _build_split(exp.Split),
 350        "SUBSTRINGINDEX": exp.SubstringIndex.from_arg_list,
 351        "TOTYPENAME": exp.Typeof.from_arg_list,
 352        "TRIMBOTH": exp.Trim.from_arg_list,
 353        "TRIMLEFT": parser.build_trim,
 354        "TRIMRIGHT": lambda args: parser.build_trim(args, is_left=False),
 355        "EDITDISTANCE": exp.Levenshtein.from_arg_list,
 356        "JAROWINKLERSIMILARITY": exp.JarowinklerSimilarity.from_arg_list,
 357        "LEVENSHTEINDISTANCE": exp.Levenshtein.from_arg_list,
 358        "UTCTIMESTAMP": exp.UtcTimestamp.from_arg_list,
 359    }
 360
 361    AGG_FUNCTIONS: t.ClassVar = _AGG_FUNCTIONS
 362    AGG_FUNCTIONS_SUFFIXES: t.ClassVar = _AGG_FUNCTIONS_SUFFIXES
 363
 364    FUNC_TOKENS = {
 365        *parser.Parser.FUNC_TOKENS,
 366        TokenType.AND,
 367        TokenType.FILE,
 368        TokenType.OR,
 369        TokenType.PASTE,
 370        TokenType.SET,
 371        TokenType.VIEW,
 372    }
 373
 374    RESERVED_TOKENS = parser.Parser.RESERVED_TOKENS - {TokenType.SELECT}
 375
 376    ID_VAR_TOKENS = {
 377        *parser.Parser.ID_VAR_TOKENS,
 378        TokenType.LIKE,
 379    }
 380
 381    AGG_FUNC_MAPPING: t.ClassVar = _AGG_FUNC_MAPPING
 382
 383    @classmethod
 384    def _resolve_clickhouse_agg(cls, name: str) -> tuple[str, Sequence[str]] | None:
 385        # ClickHouse allows chaining multiple combinators on aggregate functions.
 386        # See https://clickhouse.com/docs/sql-reference/aggregate-functions/combinators
 387        # N.B. this resolution allows any suffix stack, including ones that ClickHouse rejects
 388        # syntactically such as sumMergeMerge (due to repeated adjacent suffixes)
 389
 390        # Until we are able to identify a 1- or 0-suffix aggregate function by name,
 391        # repeatedly strip and queue suffixes (checking longer suffixes first, see comment on
 392        # AGG_FUNCTIONS_SUFFIXES_SORTED). This loop only runs for 2 or more suffixes,
 393        # as AGG_FUNC_MAPPING memoizes all 0- and 1-suffix
 394        accumulated_suffixes: deque[str] = deque()
 395        while (parts := _AGG_FUNC_MAPPING.get(name)) is None:
 396            for suffix in _AGG_FUNCTIONS_SUFFIXES:
 397                if name.endswith(suffix) and len(name) != len(suffix):
 398                    accumulated_suffixes.appendleft(suffix)
 399                    name = name[: -len(suffix)]
 400                    break
 401            else:
 402                return None
 403
 404        # We now have a 0- or 1-suffix aggregate
 405        agg_func_name, inner_suffix = parts
 406        if inner_suffix:
 407            # this is a 1-suffix aggregate (either naturally or via repeated suffix
 408            # stripping). prepend the innermost suffix.
 409            accumulated_suffixes.appendleft(inner_suffix)
 410
 411        return (agg_func_name, accumulated_suffixes)
 412
 413    FUNCTION_PARSERS = {
 414        **{k: v for k, v in parser.Parser.FUNCTION_PARSERS.items() if k != "MATCH"},
 415        "ARRAYJOIN": lambda self: self.expression(exp.Explode(this=self._parse_expression())),
 416        "GROUPCONCAT": lambda self: self._parse_group_concat(),
 417        "QUANTILE": lambda self: self._parse_quantile(),
 418        "MEDIAN": lambda self: self._parse_quantile(),
 419        "COLUMNS": lambda self: self._parse_columns(),
 420        "TUPLE": lambda self: exp.Struct.from_arg_list(self._parse_function_args(alias=True)),
 421        "AND": lambda self: self._parse_connector_function(exp.and_),
 422        "OR": lambda self: self._parse_connector_function(exp.or_),
 423        "XOR": lambda self: exp.xor(*self._parse_function_args(alias=False)),
 424        "VIEW": lambda self: self.expression(
 425            exp.Anonymous(this="view", expressions=[self._parse_select()])
 426        ),
 427    }
 428
 429    PROPERTY_PARSERS = {
 430        **{k: v for k, v in parser.Parser.PROPERTY_PARSERS.items() if k != "DYNAMIC"},
 431        "ENGINE": lambda self: self._parse_engine_property(),
 432        "REFRESH": lambda self: self._parse_auto_refresh_property(),
 433        "UUID": lambda self: self.expression(exp.UuidProperty(this=self._parse_string())),
 434    }
 435
 436    NO_PAREN_FUNCTION_PARSERS = {
 437        k: v for k, v in parser.Parser.NO_PAREN_FUNCTION_PARSERS.items() if k != "ANY"
 438    }
 439
 440    NO_PAREN_FUNCTIONS = {
 441        k: v
 442        for k, v in parser.Parser.NO_PAREN_FUNCTIONS.items()
 443        if k != TokenType.CURRENT_TIMESTAMP
 444    }
 445
 446    RANGE_PARSERS = {
 447        **parser.Parser.RANGE_PARSERS,
 448        TokenType.GLOBAL: lambda self, this: self._parse_global_in(this),
 449    }
 450
 451    COLUMN_OPERATORS = {
 452        **{k: v for k, v in parser.Parser.COLUMN_OPERATORS.items() if k != TokenType.PLACEHOLDER},
 453        TokenType.DOTCARET: lambda self, this, field: self.expression(
 454            exp.NestedJSONSelect(this=this, expression=field)
 455        ),
 456    }
 457
 458    JOIN_KINDS = {
 459        *parser.Parser.JOIN_KINDS,
 460        TokenType.ALL,
 461        TokenType.ANY,
 462        TokenType.ASOF,
 463        TokenType.ARRAY,
 464        TokenType.PASTE,
 465    }
 466
 467    TABLE_ALIAS_TOKENS = parser.Parser.TABLE_ALIAS_TOKENS - {
 468        TokenType.ALL,
 469        TokenType.ANY,
 470        TokenType.ARRAY,
 471        TokenType.ASOF,
 472        TokenType.FINAL,
 473        TokenType.FORMAT,
 474        TokenType.PASTE,
 475        TokenType.SETTINGS,
 476    }
 477
 478    ALIAS_TOKENS = parser.Parser.ALIAS_TOKENS - {
 479        TokenType.FORMAT,
 480        TokenType.SETTINGS,
 481    }
 482
 483    LOG_DEFAULTS_TO_LN = True
 484
 485    QUERY_MODIFIER_PARSERS = {
 486        **parser.Parser.QUERY_MODIFIER_PARSERS,
 487        TokenType.SETTINGS: lambda self: (
 488            "settings",
 489            self._advance() or self._parse_csv(self._parse_assignment),
 490        ),
 491        TokenType.FORMAT: lambda self: ("format", self._advance() or self._parse_id_var()),
 492    }
 493
 494    CONSTRAINT_PARSERS = {
 495        **parser.Parser.CONSTRAINT_PARSERS,
 496        "INDEX": lambda self: self._parse_index_constraint(),
 497        "CODEC": lambda self: self._parse_compress(),
 498        "ASSUME": lambda self: self._parse_assume_constraint(),
 499    }
 500
 501    ALTER_PARSERS = {
 502        **parser.Parser.ALTER_PARSERS,
 503        "MODIFY": lambda self: self._parse_alter_table_alter(),
 504        "REPLACE": lambda self: self._parse_alter_table_replace(),
 505    }
 506
 507    SCHEMA_UNNAMED_CONSTRAINTS = {
 508        *parser.Parser.SCHEMA_UNNAMED_CONSTRAINTS,
 509        "INDEX",
 510    } - {"CHECK"}
 511
 512    PLACEHOLDER_PARSERS = {
 513        **parser.Parser.PLACEHOLDER_PARSERS,
 514        TokenType.L_BRACE: lambda self: self._parse_query_parameter(),
 515    }
 516
 517    STATEMENT_PARSERS = {
 518        **parser.Parser.STATEMENT_PARSERS,
 519        TokenType.DETACH: lambda self: self._parse_detach(),
 520    }
 521
 522    def _parse_wrapped_select_or_assignment(self) -> exp.Expr | None:
 523        return self._parse_wrapped(
 524            lambda: self._parse_select() or self._parse_assignment(), optional=True
 525        )
 526
 527    def _parse_check_constraint(self) -> exp.CheckColumnConstraint | None:
 528        return self.expression(
 529            exp.CheckColumnConstraint(this=self._parse_wrapped_select_or_assignment())
 530        )
 531
 532    def _parse_assume_constraint(self) -> exp.AssumeColumnConstraint | None:
 533        return self.expression(
 534            exp.AssumeColumnConstraint(this=self._parse_wrapped_select_or_assignment())
 535        )
 536
 537    def _parse_engine_property(self) -> exp.EngineProperty:
 538        self._match(TokenType.EQ)
 539        return self.expression(
 540            exp.EngineProperty(this=self._parse_field(any_token=True, anonymous_func=True))
 541        )
 542
 543    # https://clickhouse.com/docs/en/sql-reference/statements/create/function
 544    def _parse_user_defined_function_expression(self) -> exp.Expr | None:
 545        return self._parse_lambda()
 546
 547    def _parse_types(
 548        self,
 549        check_func: bool = False,
 550        schema: bool = False,
 551        allow_identifiers: bool = True,
 552        with_collation: bool = False,
 553    ) -> exp.Expr | None:
 554        dtype = super()._parse_types(
 555            check_func=check_func,
 556            schema=schema,
 557            allow_identifiers=allow_identifiers,
 558            with_collation=with_collation,
 559        )
 560        if isinstance(dtype, exp.DataType) and dtype.args.get("nullable") is not True:
 561            # Mark every type as non-nullable which is ClickHouse's default, unless it's
 562            # already marked as nullable. This marker helps us transpile types from other
 563            # dialects to ClickHouse, so that we can e.g. produce `CAST(x AS Nullable(String))`
 564            # from `CAST(x AS TEXT)`. If there is a `NULL` value in `x`, the former would
 565            # fail in ClickHouse without the `Nullable` type constructor.
 566            dtype.set("nullable", False)
 567
 568        return dtype
 569
 570    def _parse_extract(self) -> exp.Extract | exp.Anonymous:
 571        index = self._index
 572        this = self._parse_bitwise()
 573        if self._match(TokenType.FROM):
 574            self._retreat(index)
 575            return super()._parse_extract()
 576
 577        # We return Anonymous here because extract and regexpExtract have different semantics,
 578        # so parsing extract(foo, bar) into RegexpExtract can potentially break queries. E.g.,
 579        # `extract('foobar', 'b')` works, but ClickHouse crashes for `regexpExtract('foobar', 'b')`.
 580        #
 581        # TODO: can we somehow convert the former into an equivalent `regexpExtract` call?
 582        self._match(TokenType.COMMA)
 583        return self.expression(
 584            exp.Anonymous(this="extract", expressions=[this, self._parse_bitwise()])
 585        )
 586
 587    def _parse_assignment(self) -> exp.Expr | None:
 588        this = super()._parse_assignment()
 589
 590        if self._match(TokenType.PLACEHOLDER):
 591            return self.expression(
 592                exp.If(
 593                    this=this,
 594                    true=self._parse_assignment(),
 595                    false=self._match(TokenType.COLON) and self._parse_assignment(),
 596                )
 597            )
 598
 599        return this
 600
 601    def _parse_query_parameter(self) -> exp.Expr | None:
 602        """
 603        Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier}
 604        https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters
 605        """
 606        index = self._index
 607
 608        this = self._parse_id_var()
 609        self._match(TokenType.COLON)
 610        kind = self._parse_types(check_func=False, allow_identifiers=False) or (
 611            self._match_text_seq("IDENTIFIER") and "Identifier"
 612        )
 613
 614        if not kind:
 615            self._retreat(index)
 616            return None
 617        elif not self._match(TokenType.R_BRACE):
 618            self.raise_error("Expecting }")
 619
 620        if isinstance(this, exp.Identifier) and not this.quoted:
 621            this = exp.var(this.name)
 622
 623        return self.expression(exp.Placeholder(this=this, kind=kind))
 624
 625    def _parse_bracket(self, this: exp.Expr | None = None) -> exp.Expr | None:
 626        if this:
 627            bracket_json_type = None
 628
 629            while self._match_pair(TokenType.L_BRACKET, TokenType.R_BRACKET):
 630                bracket_json_type = exp.DataType(
 631                    this=exp.DType.ARRAY,
 632                    expressions=[
 633                        bracket_json_type
 634                        or exp.DType.JSON.into_expr(dialect=self.dialect, nullable=False)
 635                    ],
 636                    nested=True,
 637                )
 638
 639            if bracket_json_type:
 640                return self.expression(exp.JSONCast(this=this, to=bracket_json_type))
 641
 642        l_brace = self._match(TokenType.L_BRACE, advance=False)
 643        bracket = super()._parse_bracket(this)
 644
 645        if l_brace and isinstance(bracket, exp.Struct):
 646            varmap = exp.VarMap(keys=exp.Array(), values=exp.Array())
 647            for expression in bracket.expressions:
 648                if not isinstance(expression, exp.PropertyEQ):
 649                    break
 650
 651                varmap.args["keys"].append("expressions", exp.Literal.string(expression.name))
 652                varmap.args["values"].append("expressions", expression.expression)
 653
 654            return varmap
 655
 656        return bracket
 657
 658    def _parse_global_in(self, this: exp.Expr | None) -> exp.Not | exp.In | None:
 659        index = self._index - 1
 660        is_negated = self._match(TokenType.NOT)
 661        if not self._match(TokenType.IN):
 662            self._retreat(index)
 663            return None
 664
 665        in_expr = self._parse_in(this)
 666        in_expr.set("is_global", True)
 667        return self.expression(exp.Not(this=in_expr)) if is_negated else in_expr
 668
 669    def _parse_table(
 670        self,
 671        schema: bool = False,
 672        joins: bool = False,
 673        alias_tokens: Collection[TokenType] | None = None,
 674        parse_bracket: bool = False,
 675        is_db_reference: bool = False,
 676        parse_partition: bool = False,
 677        consume_pipe: bool = False,
 678    ) -> exp.Expr | None:
 679        this = super()._parse_table(
 680            schema=schema,
 681            joins=joins,
 682            alias_tokens=alias_tokens,
 683            parse_bracket=parse_bracket,
 684            is_db_reference=is_db_reference,
 685        )
 686
 687        if isinstance(this, exp.Table):
 688            inner = this.this
 689            alias = this.args.get("alias")
 690
 691            if isinstance(inner, exp.GenerateSeries) and alias and not alias.columns:
 692                alias.set("columns", [exp.to_identifier("generate_series")])
 693
 694        if self._match(TokenType.FINAL):
 695            this = self.expression(exp.Final(this=this))
 696
 697        return this
 698
 699    def _parse_position(self, haystack_first: bool = False) -> exp.StrPosition:
 700        return super()._parse_position(haystack_first=True)
 701
 702    # https://clickhouse.com/docs/en/sql-reference/statements/select/with/
 703    def _parse_cte(self) -> exp.CTE | exp.FunctionSpecification | None:
 704        # WITH <identifier> AS <subquery expression>
 705        cte: exp.CTE | exp.FunctionSpecification | None = self._try_parse(super()._parse_cte)
 706
 707        if not cte:
 708            # WITH <expression> AS <identifier>
 709            cte = self.expression(
 710                exp.CTE(this=self._parse_assignment(), alias=self._parse_table_alias(), scalar=True)
 711            )
 712
 713        return cte
 714
 715    def _parse_join_parts(
 716        self,
 717    ) -> tuple[Token | None, Token | None, Token | None]:
 718        method = self._prev if self._match_set((TokenType.GLOBAL, TokenType.NATURAL)) else None
 719
 720        kind_pre = self._prev if self._match_set(self.JOIN_KINDS) else None
 721        side = self._prev if self._match_set(self.JOIN_SIDES) else None
 722        kind = self._prev if self._match_set(self.JOIN_KINDS) else None
 723
 724        return method, side or kind, kind_pre or kind
 725
 726    def _parse_join(
 727        self,
 728        skip_join_token: bool = False,
 729        parse_bracket: bool = False,
 730        alias_tokens: t.Collection[TokenType] | None = None,
 731    ) -> exp.Join | None:
 732        join = super()._parse_join(
 733            skip_join_token=skip_join_token, parse_bracket=True, alias_tokens=alias_tokens
 734        )
 735        if join:
 736            if join.method == "GLOBAL":
 737                join.set("method", None)
 738                join.set("global_", "GLOBAL")
 739
 740            # tbl ARRAY JOIN arr <-- this should be a `Column` reference, not a `Table`
 741            # https://clickhouse.com/docs/en/sql-reference/statements/select/array-join
 742            if join.kind == "ARRAY":
 743                for table in join.find_all(exp.Table):
 744                    table.replace(table.to_column())
 745
 746        return join
 747
 748    def _parse_function(
 749        self,
 750        functions: dict[str, t.Callable] | None = None,
 751        anonymous: bool = False,
 752        optional_parens: bool = True,
 753        any_token: bool = False,
 754    ) -> exp.Expr | None:
 755        expr = super()._parse_function(
 756            functions=functions,
 757            anonymous=anonymous,
 758            optional_parens=optional_parens,
 759            any_token=any_token,
 760        )
 761
 762        func = expr.this if isinstance(expr, exp.Window) else expr
 763
 764        # Aggregate functions can be split in 2 parts: <func_name><suffix[es]>
 765        parts = self._resolve_clickhouse_agg(func.name) if isinstance(func, exp.Anonymous) else None
 766
 767        if parts:
 768            anon_func: exp.Anonymous = t.cast(exp.Anonymous, func)
 769            params = self._parse_func_params(anon_func)
 770
 771            if len(parts[1]) > 0:
 772                exp_class: Type[exp.Expr] = (
 773                    exp.CombinedParameterizedAgg if params else exp.CombinedAggFunc
 774                )
 775            else:
 776                exp_class = exp.ParameterizedAgg if params else exp.AnonymousAggFunc
 777
 778            instance = exp_class(this=anon_func.this, expressions=anon_func.expressions)
 779            if params:
 780                instance.set("params", params)
 781            func = self.expression(instance)
 782
 783            if isinstance(expr, exp.Window):
 784                # The window's func was parsed as Anonymous in base parser, fix its
 785                # type to be ClickHouse style CombinedAnonymousAggFunc / AnonymousAggFunc
 786                expr.set("this", func)
 787            elif params:
 788                # Params have blocked super()._parse_function() from parsing the following window
 789                # (if that exists) as they're standing between the function call and the window spec
 790                expr = self._parse_window(func)
 791            else:
 792                expr = func
 793
 794        return expr
 795
 796    def _parse_func_params(self, this: exp.Func | None = None) -> list[exp.Expr] | None:
 797        if self._match_pair(TokenType.R_PAREN, TokenType.L_PAREN):
 798            return self._parse_csv(self._parse_lambda)
 799
 800        if self._match(TokenType.L_PAREN):
 801            params = self._parse_csv(self._parse_lambda)
 802            self._match_r_paren(this)
 803            return params
 804
 805        return None
 806
 807    def _parse_group_concat(self) -> exp.GroupConcat:
 808        args = self._parse_csv(self._parse_lambda)
 809        params = self._parse_func_params()
 810
 811        if params:
 812            # groupConcat(sep [, limit])(expr)
 813            separator = seq_get(args, 0)
 814            limit = seq_get(args, 1)
 815            this: exp.Expr | None = seq_get(params, 0)
 816            if limit is not None:
 817                this = exp.Limit(this=this, expression=limit)
 818            return self.expression(exp.GroupConcat(this=this, separator=separator))
 819
 820        # groupConcat(expr)
 821        return self.expression(exp.GroupConcat(this=seq_get(args, 0)))
 822
 823    def _parse_quantile(self) -> exp.Quantile:
 824        this = self._parse_lambda()
 825        params = self._parse_func_params()
 826        if params:
 827            return self.expression(exp.Quantile(this=params[0], quantile=this))
 828        return self.expression(exp.Quantile(this=this, quantile=exp.Literal.number(0.5)))
 829
 830    def _parse_wrapped_id_vars(self, optional: bool = False) -> list[exp.Expr]:
 831        return super()._parse_wrapped_id_vars(optional=True)
 832
 833    def _parse_column_def(
 834        self, this: exp.Expr | None, computed_column: bool = True
 835    ) -> exp.Expr | None:
 836        if self._match(TokenType.DOT):
 837            return exp.Dot(this=this, expression=self._parse_id_var())
 838
 839        return super()._parse_column_def(this, computed_column=computed_column)
 840
 841    def _parse_primary_key(
 842        self,
 843        wrapped_optional: bool = False,
 844        in_props: bool = False,
 845        named_primary_key: bool = False,
 846    ) -> exp.PrimaryKeyColumnConstraint | exp.PrimaryKey:
 847        return super()._parse_primary_key(
 848            wrapped_optional=wrapped_optional or in_props,
 849            in_props=in_props,
 850            named_primary_key=named_primary_key,
 851        )
 852
 853    def _parse_on_property(self) -> exp.Expr | None:
 854        index = self._index
 855        if self._match_text_seq("CLUSTER"):
 856            this = self._parse_string() or self._parse_id_var()
 857            if this:
 858                return self.expression(exp.OnCluster(this=this))
 859            else:
 860                self._retreat(index)
 861        return None
 862
 863    def _parse_auto_refresh_property(self) -> exp.AutoRefreshProperty | None:
 864        index = self._index - 1
 865        cadence = self._prev.text.upper() if self._match_texts(("EVERY", "AFTER")) else None
 866        interval = (
 867            self._parse_interval(require_interval=False, parse_function_unit=False)
 868            if cadence
 869            else None
 870        )
 871
 872        if cadence and not interval:
 873            self._retreat(index)
 874            return None
 875
 876        offset = None
 877        if self._match_text_seq("OFFSET"):
 878            offset = self._parse_interval(require_interval=False, parse_function_unit=False)
 879            if not offset:
 880                self._retreat(index)
 881                return None
 882
 883        randomize = None
 884        if self._match_text_seq("RANDOMIZE", "FOR"):
 885            randomize = self._parse_interval(require_interval=False, parse_function_unit=False)
 886            if not randomize:
 887                self._retreat(index)
 888                return None
 889
 890        dependencies = None
 891        if self._match_text_seq("DEPENDS", "ON"):
 892            dependencies = self._parse_csv(lambda: self._parse_table_parts(schema=True))
 893            if not dependencies:
 894                self._retreat(index)
 895                return None
 896
 897        if not cadence and not dependencies:
 898            self._retreat(index)
 899            return None
 900
 901        settings = self._parse_settings_property() if self._match_text_seq("SETTINGS") else None
 902
 903        return self.expression(
 904            exp.AutoRefreshProperty(
 905                this=interval,
 906                cadence=cadence,
 907                offset=offset,
 908                randomize=randomize,
 909                expressions=dependencies,
 910                settings=settings,
 911                append=self._match_text_seq("APPEND"),
 912            )
 913        )
 914
 915    def _parse_index_constraint(self, kind: str | None = None) -> exp.IndexColumnConstraint:
 916        # INDEX name1 expr TYPE type1(args) GRANULARITY value
 917        this = self._parse_id_var()
 918        expression = self._parse_assignment()
 919
 920        index_type = self._match_text_seq("TYPE") and (self._parse_function() or self._parse_var())
 921
 922        granularity = self._match_text_seq("GRANULARITY") and self._parse_term()
 923
 924        return self.expression(
 925            exp.IndexColumnConstraint(
 926                this=this, expression=expression, index_type=index_type, granularity=granularity
 927            )
 928        )
 929
 930    def _parse_partition(self) -> exp.Partition | None:
 931        # https://clickhouse.com/docs/en/sql-reference/statements/alter/partition#how-to-set-partition-expression
 932        if not self._match(TokenType.PARTITION):
 933            return None
 934
 935        if self._match_text_seq("ID"):
 936            # Corresponds to the PARTITION ID <string_value> syntax
 937            expressions: list[exp.Expr] = [
 938                self.expression(exp.PartitionId(this=self._parse_string()))
 939            ]
 940        else:
 941            expressions = self._parse_expressions()
 942
 943        return self.expression(exp.Partition(expressions=expressions))
 944
 945    def _parse_alter_table_replace(self) -> exp.Expr | None:
 946        partition = self._parse_partition()
 947
 948        if not partition or not self._match(TokenType.FROM):
 949            return None
 950
 951        return self.expression(
 952            exp.ReplacePartition(expression=partition, source=self._parse_table_parts())
 953        )
 954
 955    def _parse_alter_table_alter(self) -> exp.Expr | None:
 956        # MODIFY forms other than MODIFY COLUMN (SQL SECURITY, ORDER BY, TTL, COMMENT, ...)
 957        # are parsed as properties, since ALTER can now reach this path too
 958        if self._prev.text.upper() == "MODIFY" and not self._match(TokenType.COLUMN, advance=False):
 959            if properties := self._parse_properties():
 960                return self.expression(
 961                    exp.AlterModifySqlSecurity(expressions=properties.expressions)
 962                )
 963            return None
 964
 965        # https://clickhouse.com/docs/sql-reference/statements/alter/column#modify-column
 966        alter = super()._parse_alter_table_alter()
 967        return None if self._curr else alter
 968
 969    def _parse_definer(self) -> exp.DefinerProperty | None:
 970        self._match(TokenType.EQ)
 971        if self._match(TokenType.CURRENT_USER):
 972            return exp.DefinerProperty(this=exp.Var(this=self._prev.text.upper()))
 973        return exp.DefinerProperty(this=self._parse_string())
 974
 975    def _parse_projection_def(self) -> exp.ProjectionDef | None:
 976        if not self._match(TokenType.PROJECTION):
 977            return None
 978
 979        return self.expression(
 980            exp.ProjectionDef(
 981                this=self._parse_id_var(), expression=self._parse_wrapped(self._parse_statement)
 982            )
 983        )
 984
 985    def _parse_constraint(self) -> exp.Expr | None:
 986        return super()._parse_constraint() or self._parse_projection_def()
 987
 988    def _parse_alias(self, this: exp.Expr | None, explicit: bool = False) -> exp.Expr | None:
 989        # In clickhouse "SELECT <expr> APPLY(...)" is a query modifier,
 990        # so "APPLY" shouldn't be parsed as <expr>'s alias. However, "SELECT <expr> apply" is a valid alias
 991        if self._match_pair(TokenType.APPLY, TokenType.L_PAREN, advance=False):
 992            return this
 993
 994        return super()._parse_alias(this=this, explicit=explicit)
 995
 996    def _parse_expression(self) -> exp.Expr | None:
 997        this = super()._parse_expression()
 998
 999        # Clickhouse allows "SELECT <expr> [APPLY(func)] [...]]" modifier
1000        while self._match_pair(TokenType.APPLY, TokenType.L_PAREN):
1001            this = exp.Apply(this=this, expression=self._parse_var(any_token=True))
1002            self._match(TokenType.R_PAREN)
1003
1004        return this
1005
1006    def _parse_columns(self) -> exp.Expr:
1007        this: exp.Expr = self.expression(exp.Columns(this=self._parse_lambda()))
1008
1009        while self._next and self._match_text_seq(")", "APPLY", "("):
1010            self._match(TokenType.R_PAREN)
1011            this = exp.Apply(this=this, expression=self._parse_var(any_token=True))
1012        return this
1013
1014    def _parse_value(self, values: bool = True) -> exp.Tuple | None:
1015        value = super()._parse_value(values=values)
1016        if not value:
1017            return None
1018
1019        # In Clickhouse "SELECT * FROM VALUES (1, 2, 3)" generates a table with a single column, in contrast
1020        # to other dialects. For this case, we canonicalize the values into a tuple-of-tuples AST if it's not already one.
1021        # In INSERT INTO statements the same clause actually references multiple columns (opposite semantics),
1022        # but the final result is not altered by the extra parentheses.
1023        # Note: Clickhouse allows VALUES([structure], value, ...) so the branch checks for the last expression
1024        # A single-value tuple is generated as "(x)", which is parsed back into a Paren
1025        # rather than a Tuple, so it's unwrapped here to keep this rewrite idempotent
1026        expressions = value.expressions
1027        if values and not isinstance(expressions[-1], exp.Tuple):
1028            value.set(
1029                "expressions",
1030                [self.expression(exp.Tuple(expressions=[expr.unnest()])) for expr in expressions],
1031            )
1032
1033        return value
1034
1035    def _parse_partitioned_by(self) -> exp.PartitionedByProperty:
1036        # ClickHouse allows custom expressions as partition key
1037        # https://clickhouse.com/docs/engines/table-engines/mergetree-family/custom-partitioning-key
1038        return self.expression(exp.PartitionedByProperty(this=self._parse_assignment()))
1039
1040    def _parse_detach(self) -> exp.Detach:
1041        kind = self._match_set(self.DB_CREATABLES) and self._prev.text.upper()
1042        exists = self._parse_exists()
1043        this = self._parse_table_parts()
1044
1045        return self.expression(
1046            exp.Detach(
1047                this=this,
1048                kind=kind,
1049                exists=exists,
1050                cluster=self._parse_on_property() if self._match(TokenType.ON) else None,
1051                permanent=self._match_text_seq("PERMANENTLY"),
1052                sync=self._match_text_seq("SYNC"),
1053            )
1054        )

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>
SET_OP_MODIFIERS = {'settings', 'format'}
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_SPLIT_TO_TABLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.array.StrtokSplitToTable'>>, '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>>, 'TOSTARTOFMICROSECOND': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFMINUTE': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFSECOND': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFMONTH': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFMILLISECOND': <function _build_timestamp_trunc.<locals>.<lambda>>, 'TOSTARTOFYEAR': <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 = {'quantileTimingWeighted', 'quantilesExact', 'simpleLinearRegression', 'groupBitmap', 'sumCount', 'quantileExactHigh', 'anyLast', 'quantilesDeterministic', 'entropy', 'quantileTDigest', 'sequenceNextNode', 'studentTTest', 'rankCorr', 'maxIntersections', 'deltaSum', 'covarSamp', 'varPop', 'stochasticLogisticRegression', 'groupArrayLast', 'groupConcat', 'windowFunnel', 'kolmogorovSmirnovTest', 'maxMap', 'largestTriangleThreeBuckets', 'quantilesExactWeighted', 'quantileExact', 'topKWeighted', 'groupUniqArray', 'uniqExact', 'stddevPop', 'max', 'topK', 'groupBitXor', 'avg', 'uniq', 'quantilesExactHigh', 'quantileExactWeighted', 'minMap', 'anyHeavy', 'groupArraySample', 'theilsU', 'min', 'boundingRatio', 'quantilesTDigest', 'quantileDeterministic', 'last_value', 'cramersV', 'first_value', 'groupBitOr', 'argMin', 'skewPop', 'uniqCombined64', 'quantilesTDigestWeighted', 'uniqTheta', 'quantilesInterpolatedWeighted', 'covarPop', 'cramersVBiasCorrected', 'avgWeighted', 'quantileExactLow', 'groupArray', 'sumWithOverflow', 'quantile', 'categoricalInformationValue', 'exponentialTimeDecayedAvg', 'sparkBar', 'groupBitmapOr', 'argMax', 'quantilesBFloat16Weighted', 'quantiles', 'quantilesTimingWeighted', 'median', 'groupArrayMovingSum', 'sum', 'welchTTest', 'quantileTDigestWeighted', 'quantileTiming', 'sequenceCount', 'histogram', 'quantileBFloat16', 'uniqHLL12', 'quantileExactInclusive', 'approx_top_sum', 'quantileGK', 'kurtPop', 'corr', 'skewSamp', 'quantileBFloat16Weighted', 'quantileInterpolatedWeighted', 'quantilesExactLow', 'groupBitmapXor', 'sumMap', 'stochasticLinearRegression', 'uniqCombined', 'intervalLengthSum', 'sumKahan', 'groupArrayInsertAt', 'maxIntersectionsPosition', 'uniqUpTo', 'groupBitAnd', 'sequenceMatch', 'deltaSumTimestamp', 'any', 'quantilesTiming', 'varSamp', 'groupArrayMovingAvg', 'retention', 'quantilesExactExclusive', 'kurtSamp', 'stddevSamp', 'quantilesBFloat16', 'quantilesGK', 'mannWhitneyUTest', 'exponentialMovingAverage', 'meanZTest', 'groupBitmapAnd', 'count', 'contingency'}
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.REF: 201>, <TokenType.INET: 202>, <TokenType.IPADDRESS: 203>, <TokenType.IPPREFIX: 204>, <TokenType.IPV4: 205>, <TokenType.IPV6: 206>, <TokenType.ENUM: 207>, <TokenType.ENUM8: 208>, <TokenType.ENUM16: 209>, <TokenType.FIXEDSTRING: 210>, <TokenType.LOWCARDINALITY: 211>, <TokenType.NESTED: 212>, <TokenType.AGGREGATEFUNCTION: 213>, <TokenType.SIMPLEAGGREGATEFUNCTION: 214>, <TokenType.TDIGEST: 215>, <TokenType.UNKNOWN: 216>, <TokenType.VECTOR: 217>, <TokenType.DYNAMIC: 218>, <TokenType.VOID: 219>, <TokenType.ALL: 222>, <TokenType.ANY: 224>, <TokenType.ARRAY: 226>, <TokenType.COLLATE: 238>, <TokenType.COMMAND: 239>, <TokenType.CURRENT_DATE: 249>, <TokenType.CURRENT_DATETIME: 250>, <TokenType.CURRENT_SCHEMA: 251>, <TokenType.CURRENT_TIME: 252>, <TokenType.CURRENT_TIMESTAMP: 253>, <TokenType.CURRENT_USER: 254>, <TokenType.CURRENT_CATALOG: 257>, <TokenType.DECLARE: 258>, <TokenType.EXISTS: 275>, <TokenType.FILE: 278>, <TokenType.FILTER: 280>, <TokenType.FIRST: 282>, <TokenType.FORMAT: 286>, <TokenType.GET: 290>, <TokenType.GLOB: 291>, <TokenType.ILIKE: 299>, <TokenType.INDEX: 301>, <TokenType.INSERT: 304>, <TokenType.INTERVAL: 308>, <TokenType.ISNULL: 313>, <TokenType.LEFT: 321>, <TokenType.LIKE: 322>, <TokenType.LIST: 324>, <TokenType.MAP: 327>, <TokenType.MERGE: 332>, <TokenType.NEXT: 336>, <TokenType.NOTHING: 337>, <TokenType.NULL: 339>, <TokenType.OBJECT_IDENTIFIER: 340>, <TokenType.OFFSET: 341>, <TokenType.PASTE: 358>, <TokenType.PRIMARY_KEY: 367>, <TokenType.PSEUDO_TYPE: 371>, <TokenType.RANGE: 376>, <TokenType.REPLACE: 380>, <TokenType.RIGHT: 384>, <TokenType.RLIKE: 385>, <TokenType.ROW: 389>, <TokenType.SEQUENCE: 395>, <TokenType.SET: 397>, <TokenType.SOME: 401>, <TokenType.STRUCT: 408>, <TokenType.TRUNCATE: 416>, <TokenType.UNION: 421>, <TokenType.UNNEST: 422>, <TokenType.VIEW: 429>, <TokenType.WINDOW: 435>, <TokenType.UTC_DATE: 438>, <TokenType.UTC_TIME: 439>, <TokenType.UTC_TIMESTAMP: 440>}
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: 333>, <TokenType.SEMICOLON: 19>, <TokenType.STAR: 20>, <TokenType.BACKSLASH: 21>, <TokenType.SLASH: 22>, <TokenType.LT: 23>, <TokenType.UNKNOWN: 216>, <TokenType.GT: 25>, <TokenType.NOT: 27>, <TokenType.EQ: 28>, <TokenType.AMP: 36>, <TokenType.PIPE: 39>, <TokenType.PLACEHOLDER: 361>, <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.REF: 201>, <TokenType.INET: 202>, <TokenType.IPADDRESS: 203>, <TokenType.IPPREFIX: 204>, <TokenType.IPV4: 205>, <TokenType.IPV6: 206>, <TokenType.ENUM: 207>, <TokenType.ENUM8: 208>, <TokenType.ENUM16: 209>, <TokenType.FIXEDSTRING: 210>, <TokenType.LOWCARDINALITY: 211>, <TokenType.NESTED: 212>, <TokenType.AGGREGATEFUNCTION: 213>, <TokenType.SIMPLEAGGREGATEFUNCTION: 214>, <TokenType.TDIGEST: 215>, <TokenType.UNKNOWN: 216>, <TokenType.VECTOR: 217>, <TokenType.DYNAMIC: 218>, <TokenType.VOID: 219>, <TokenType.ALL: 222>, <TokenType.ANTI: 223>, <TokenType.ANY: 224>, <TokenType.APPLY: 225>, <TokenType.ARRAY: 226>, <TokenType.ASC: 227>, <TokenType.ASOF: 228>, <TokenType.ATTACH: 229>, <TokenType.AUTO_INCREMENT: 230>, <TokenType.BEGIN: 231>, <TokenType.CACHE: 234>, <TokenType.CASE: 235>, <TokenType.COLLATE: 238>, <TokenType.COMMAND: 239>, <TokenType.COMMENT: 240>, <TokenType.COMMIT: 241>, <TokenType.CONNECT: 242>, <TokenType.CONSTRAINT: 244>, <TokenType.COPY: 245>, <TokenType.CUBE: 248>, <TokenType.CURRENT_DATE: 249>, <TokenType.CURRENT_DATETIME: 250>, <TokenType.CURRENT_SCHEMA: 251>, <TokenType.CURRENT_TIME: 252>, <TokenType.CURRENT_TIMESTAMP: 253>, <TokenType.CURRENT_USER: 254>, <TokenType.CURRENT_ROLE: 256>, <TokenType.CURRENT_CATALOG: 257>, <TokenType.DECLARE: 258>, <TokenType.DEFAULT: 259>, <TokenType.DELETE: 260>, <TokenType.DESC: 261>, <TokenType.DESCRIBE: 262>, <TokenType.DETACH: 263>, <TokenType.DISCONNECT: 264>, <TokenType.DICTIONARY: 265>, <TokenType.DIV: 268>, <TokenType.END: 271>, <TokenType.ESCAPE: 272>, <TokenType.EXECUTE: 274>, <TokenType.EXISTS: 275>, <TokenType.FALSE: 276>, <TokenType.FILE: 278>, <TokenType.FILE_FORMAT: 279>, <TokenType.FILTER: 280>, <TokenType.FINAL: 281>, <TokenType.FIRST: 282>, <TokenType.FOREIGN_KEY: 285>, <TokenType.FORMAT: 286>, <TokenType.FULL: 288>, <TokenType.FUNCTION: 289>, <TokenType.GET: 290>, <TokenType.IN: 300>, <TokenType.INDEX: 301>, <TokenType.INTERVAL: 308>, <TokenType.IS: 312>, <TokenType.ISNULL: 313>, <TokenType.KEEP: 316>, <TokenType.KILL: 318>, <TokenType.LEFT: 321>, <TokenType.LIKE: 322>, <TokenType.LIMIT: 323>, <TokenType.LIST: 324>, <TokenType.LOAD: 325>, <TokenType.LOCK: 326>, <TokenType.MAP: 327>, <TokenType.MATCH: 328>, <TokenType.MERGE: 332>, <TokenType.MODEL: 334>, <TokenType.NATURAL: 335>, <TokenType.NEXT: 336>, <TokenType.NOTHING: 337>, <TokenType.NULL: 339>, <TokenType.OBJECT_IDENTIFIER: 340>, <TokenType.OFFSET: 341>, <TokenType.OPERATOR: 344>, <TokenType.ORDINALITY: 348>, <TokenType.OUT: 349>, <TokenType.INOUT: 350>, <TokenType.OVER: 352>, <TokenType.OVERLAPS: 353>, <TokenType.OVERWRITE: 354>, <TokenType.PARTITION: 356>, <TokenType.PASTE: 358>, <TokenType.PERCENT: 359>, <TokenType.PIVOT: 360>, <TokenType.PRAGMA: 365>, <TokenType.PROCEDURE: 368>, <TokenType.PROJECTION: 370>, <TokenType.PSEUDO_TYPE: 371>, <TokenType.PUT: 372>, <TokenType.RANGE: 376>, <TokenType.RECURSIVE: 377>, <TokenType.REFRESH: 378>, <TokenType.RENAME: 379>, <TokenType.REPLACE: 380>, <TokenType.REFERENCES: 383>, <TokenType.RIGHT: 384>, <TokenType.ROLLUP: 388>, <TokenType.ROW: 389>, <TokenType.ROWS: 390>, <TokenType.SEMI: 393>, <TokenType.SEQUENCE: 395>, <TokenType.SET: 397>, <TokenType.SETTINGS: 398>, <TokenType.SHOW: 399>, <TokenType.SOME: 401>, <TokenType.STORAGE_INTEGRATION: 406>, <TokenType.STRAIGHT_JOIN: 407>, <TokenType.STRUCT: 408>, <TokenType.TAG: 411>, <TokenType.TEMPORARY: 412>, <TokenType.TOP: 413>, <TokenType.TRUE: 415>, <TokenType.TRUNCATE: 416>, <TokenType.TRIGGER: 417>, <TokenType.TYPE: 418>, <TokenType.UNNEST: 422>, <TokenType.UNPIVOT: 423>, <TokenType.UPDATE: 424>, <TokenType.USE: 425>, <TokenType.VIEW: 429>, <TokenType.SEMANTIC_VIEW: 430>, <TokenType.VOLATILE: 431>, <TokenType.WINDOW: 435>, <TokenType.UNIQUE: 437>, <TokenType.SINK: 442>, <TokenType.SOURCE: 443>, <TokenType.ANALYZE: 444>, <TokenType.NAMESPACE: 445>, <TokenType.EXPORT: 446>}
AGG_FUNC_MAPPING: ClassVar = {'quantileTimingWeightedSimpleState': ('quantileTimingWeighted', 'SimpleState'), 'quantilesExactSimpleState': ('quantilesExact', 'SimpleState'), 'simpleLinearRegressionSimpleState': ('simpleLinearRegression', 'SimpleState'), 'groupBitmapSimpleState': ('groupBitmap', 'SimpleState'), 'sumCountSimpleState': ('sumCount', 'SimpleState'), 'quantileExactHighSimpleState': ('quantileExactHigh', 'SimpleState'), 'anyLastSimpleState': ('anyLast', 'SimpleState'), 'quantilesDeterministicSimpleState': ('quantilesDeterministic', 'SimpleState'), 'entropySimpleState': ('entropy', 'SimpleState'), 'quantileTDigestSimpleState': ('quantileTDigest', 'SimpleState'), 'sequenceNextNodeSimpleState': ('sequenceNextNode', 'SimpleState'), 'studentTTestSimpleState': ('studentTTest', 'SimpleState'), 'rankCorrSimpleState': ('rankCorr', 'SimpleState'), 'maxIntersectionsSimpleState': ('maxIntersections', 'SimpleState'), 'deltaSumSimpleState': ('deltaSum', 'SimpleState'), 'covarSampSimpleState': ('covarSamp', 'SimpleState'), 'varPopSimpleState': ('varPop', 'SimpleState'), 'stochasticLogisticRegressionSimpleState': ('stochasticLogisticRegression', 'SimpleState'), 'groupArrayLastSimpleState': ('groupArrayLast', 'SimpleState'), 'groupConcatSimpleState': ('groupConcat', 'SimpleState'), 'windowFunnelSimpleState': ('windowFunnel', 'SimpleState'), 'kolmogorovSmirnovTestSimpleState': ('kolmogorovSmirnovTest', 'SimpleState'), 'maxMapSimpleState': ('maxMap', 'SimpleState'), 'largestTriangleThreeBucketsSimpleState': ('largestTriangleThreeBuckets', 'SimpleState'), 'quantilesExactWeightedSimpleState': ('quantilesExactWeighted', 'SimpleState'), 'quantileExactSimpleState': ('quantileExact', 'SimpleState'), 'topKWeightedSimpleState': ('topKWeighted', 'SimpleState'), 'groupUniqArraySimpleState': ('groupUniqArray', 'SimpleState'), 'uniqExactSimpleState': ('uniqExact', 'SimpleState'), 'stddevPopSimpleState': ('stddevPop', 'SimpleState'), 'maxSimpleState': ('max', 'SimpleState'), 'topKSimpleState': ('topK', 'SimpleState'), 'groupBitXorSimpleState': ('groupBitXor', 'SimpleState'), 'avgSimpleState': ('avg', 'SimpleState'), 'uniqSimpleState': ('uniq', 'SimpleState'), 'quantilesExactHighSimpleState': ('quantilesExactHigh', 'SimpleState'), 'quantileExactWeightedSimpleState': ('quantileExactWeighted', 'SimpleState'), 'minMapSimpleState': ('minMap', 'SimpleState'), 'anyHeavySimpleState': ('anyHeavy', 'SimpleState'), 'groupArraySampleSimpleState': ('groupArraySample', 'SimpleState'), 'theilsUSimpleState': ('theilsU', 'SimpleState'), 'minSimpleState': ('min', 'SimpleState'), 'boundingRatioSimpleState': ('boundingRatio', 'SimpleState'), 'quantilesTDigestSimpleState': ('quantilesTDigest', 'SimpleState'), 'quantileDeterministicSimpleState': ('quantileDeterministic', 'SimpleState'), 'last_valueSimpleState': ('last_value', 'SimpleState'), 'cramersVSimpleState': ('cramersV', 'SimpleState'), 'first_valueSimpleState': ('first_value', 'SimpleState'), 'groupBitOrSimpleState': ('groupBitOr', 'SimpleState'), 'argMinSimpleState': ('argMin', 'SimpleState'), 'skewPopSimpleState': ('skewPop', 'SimpleState'), 'uniqCombined64SimpleState': ('uniqCombined64', 'SimpleState'), 'quantilesTDigestWeightedSimpleState': ('quantilesTDigestWeighted', 'SimpleState'), 'uniqThetaSimpleState': ('uniqTheta', 'SimpleState'), 'quantilesInterpolatedWeightedSimpleState': ('quantilesInterpolatedWeighted', 'SimpleState'), 'covarPopSimpleState': ('covarPop', 'SimpleState'), 'cramersVBiasCorrectedSimpleState': ('cramersVBiasCorrected', 'SimpleState'), 'avgWeightedSimpleState': ('avgWeighted', 'SimpleState'), 'quantileExactLowSimpleState': ('quantileExactLow', 'SimpleState'), 'groupArraySimpleState': ('groupArray', 'SimpleState'), 'sumWithOverflowSimpleState': ('sumWithOverflow', 'SimpleState'), 'quantileSimpleState': ('quantile', 'SimpleState'), 'categoricalInformationValueSimpleState': ('categoricalInformationValue', 'SimpleState'), 'exponentialTimeDecayedAvgSimpleState': ('exponentialTimeDecayedAvg', 'SimpleState'), 'sparkBarSimpleState': ('sparkBar', 'SimpleState'), 'groupBitmapOrSimpleState': ('groupBitmapOr', 'SimpleState'), 'argMaxSimpleState': ('argMax', 'SimpleState'), 'quantilesBFloat16WeightedSimpleState': ('quantilesBFloat16Weighted', 'SimpleState'), 'quantilesSimpleState': ('quantiles', 'SimpleState'), 'quantilesTimingWeightedSimpleState': ('quantilesTimingWeighted', 'SimpleState'), 'medianSimpleState': ('median', 'SimpleState'), 'groupArrayMovingSumSimpleState': ('groupArrayMovingSum', 'SimpleState'), 'sumSimpleState': ('sum', 'SimpleState'), 'welchTTestSimpleState': ('welchTTest', 'SimpleState'), 'quantileTDigestWeightedSimpleState': ('quantileTDigestWeighted', 'SimpleState'), 'quantileTimingSimpleState': ('quantileTiming', 'SimpleState'), 'sequenceCountSimpleState': ('sequenceCount', 'SimpleState'), 'histogramSimpleState': ('histogram', 'SimpleState'), 'quantileBFloat16SimpleState': ('quantileBFloat16', 'SimpleState'), 'uniqHLL12SimpleState': ('uniqHLL12', 'SimpleState'), 'quantileExactInclusiveSimpleState': ('quantileExactInclusive', 'SimpleState'), 'approx_top_sumSimpleState': ('approx_top_sum', 'SimpleState'), 'quantileGKSimpleState': ('quantileGK', 'SimpleState'), 'kurtPopSimpleState': ('kurtPop', 'SimpleState'), 'corrSimpleState': ('corr', 'SimpleState'), 'skewSampSimpleState': ('skewSamp', 'SimpleState'), 'quantileBFloat16WeightedSimpleState': ('quantileBFloat16Weighted', 'SimpleState'), 'quantileInterpolatedWeightedSimpleState': ('quantileInterpolatedWeighted', 'SimpleState'), 'quantilesExactLowSimpleState': ('quantilesExactLow', 'SimpleState'), 'groupBitmapXorSimpleState': ('groupBitmapXor', 'SimpleState'), 'sumMapSimpleState': ('sumMap', 'SimpleState'), 'stochasticLinearRegressionSimpleState': ('stochasticLinearRegression', 'SimpleState'), 'uniqCombinedSimpleState': ('uniqCombined', 'SimpleState'), 'intervalLengthSumSimpleState': ('intervalLengthSum', 'SimpleState'), 'sumKahanSimpleState': ('sumKahan', 'SimpleState'), 'groupArrayInsertAtSimpleState': ('groupArrayInsertAt', 'SimpleState'), 'maxIntersectionsPositionSimpleState': ('maxIntersectionsPosition', 'SimpleState'), 'uniqUpToSimpleState': ('uniqUpTo', 'SimpleState'), 'groupBitAndSimpleState': ('groupBitAnd', 'SimpleState'), 'sequenceMatchSimpleState': ('sequenceMatch', 'SimpleState'), 'deltaSumTimestampSimpleState': ('deltaSumTimestamp', 'SimpleState'), 'anySimpleState': ('any', 'SimpleState'), 'quantilesTimingSimpleState': ('quantilesTiming', 'SimpleState'), 'varSampSimpleState': ('varSamp', 'SimpleState'), 'groupArrayMovingAvgSimpleState': ('groupArrayMovingAvg', 'SimpleState'), 'retentionSimpleState': ('retention', 'SimpleState'), 'quantilesExactExclusiveSimpleState': ('quantilesExactExclusive', 'SimpleState'), 'kurtSampSimpleState': ('kurtSamp', 'SimpleState'), 'stddevSampSimpleState': ('stddevSamp', 'SimpleState'), 'quantilesBFloat16SimpleState': ('quantilesBFloat16', 'SimpleState'), 'quantilesGKSimpleState': ('quantilesGK', 'SimpleState'), 'mannWhitneyUTestSimpleState': ('mannWhitneyUTest', 'SimpleState'), 'exponentialMovingAverageSimpleState': ('exponentialMovingAverage', 'SimpleState'), 'meanZTestSimpleState': ('meanZTest', 'SimpleState'), 'groupBitmapAndSimpleState': ('groupBitmapAnd', 'SimpleState'), 'countSimpleState': ('count', 'SimpleState'), 'contingencySimpleState': ('contingency', 'SimpleState'), 'quantileTimingWeightedMergeState': ('quantileTimingWeighted', 'MergeState'), 'quantilesExactMergeState': ('quantilesExact', 'MergeState'), 'simpleLinearRegressionMergeState': ('simpleLinearRegression', 'MergeState'), 'groupBitmapMergeState': ('groupBitmap', 'MergeState'), 'sumCountMergeState': ('sumCount', 'MergeState'), 'quantileExactHighMergeState': ('quantileExactHigh', 'MergeState'), 'anyLastMergeState': ('anyLast', 'MergeState'), 'quantilesDeterministicMergeState': ('quantilesDeterministic', 'MergeState'), 'entropyMergeState': ('entropy', 'MergeState'), 'quantileTDigestMergeState': ('quantileTDigest', 'MergeState'), 'sequenceNextNodeMergeState': ('sequenceNextNode', 'MergeState'), 'studentTTestMergeState': ('studentTTest', 'MergeState'), 'rankCorrMergeState': ('rankCorr', 'MergeState'), 'maxIntersectionsMergeState': ('maxIntersections', 'MergeState'), 'deltaSumMergeState': ('deltaSum', 'MergeState'), 'covarSampMergeState': ('covarSamp', 'MergeState'), 'varPopMergeState': ('varPop', 'MergeState'), 'stochasticLogisticRegressionMergeState': ('stochasticLogisticRegression', 'MergeState'), 'groupArrayLastMergeState': ('groupArrayLast', 'MergeState'), 'groupConcatMergeState': ('groupConcat', 'MergeState'), 'windowFunnelMergeState': ('windowFunnel', 'MergeState'), 'kolmogorovSmirnovTestMergeState': ('kolmogorovSmirnovTest', 'MergeState'), 'maxMapMergeState': ('maxMap', 'MergeState'), 'largestTriangleThreeBucketsMergeState': ('largestTriangleThreeBuckets', 'MergeState'), 'quantilesExactWeightedMergeState': ('quantilesExactWeighted', 'MergeState'), 'quantileExactMergeState': ('quantileExact', 'MergeState'), 'topKWeightedMergeState': ('topKWeighted', 'MergeState'), 'groupUniqArrayMergeState': ('groupUniqArray', 'MergeState'), 'uniqExactMergeState': ('uniqExact', 'MergeState'), 'stddevPopMergeState': ('stddevPop', 'MergeState'), 'maxMergeState': ('max', 'MergeState'), 'topKMergeState': ('topK', 'MergeState'), 'groupBitXorMergeState': ('groupBitXor', 'MergeState'), 'avgMergeState': ('avg', 'MergeState'), 'uniqMergeState': ('uniq', 'MergeState'), 'quantilesExactHighMergeState': ('quantilesExactHigh', 'MergeState'), 'quantileExactWeightedMergeState': ('quantileExactWeighted', 'MergeState'), 'minMapMergeState': ('minMap', 'MergeState'), 'anyHeavyMergeState': ('anyHeavy', 'MergeState'), 'groupArraySampleMergeState': ('groupArraySample', 'MergeState'), 'theilsUMergeState': ('theilsU', 'MergeState'), 'minMergeState': ('min', 'MergeState'), 'boundingRatioMergeState': ('boundingRatio', 'MergeState'), 'quantilesTDigestMergeState': ('quantilesTDigest', 'MergeState'), 'quantileDeterministicMergeState': ('quantileDeterministic', 'MergeState'), 'last_valueMergeState': ('last_value', 'MergeState'), 'cramersVMergeState': ('cramersV', 'MergeState'), 'first_valueMergeState': ('first_value', 'MergeState'), 'groupBitOrMergeState': ('groupBitOr', 'MergeState'), 'argMinMergeState': ('argMin', 'MergeState'), 'skewPopMergeState': ('skewPop', 'MergeState'), 'uniqCombined64MergeState': ('uniqCombined64', 'MergeState'), 'quantilesTDigestWeightedMergeState': ('quantilesTDigestWeighted', 'MergeState'), 'uniqThetaMergeState': ('uniqTheta', 'MergeState'), 'quantilesInterpolatedWeightedMergeState': ('quantilesInterpolatedWeighted', 'MergeState'), 'covarPopMergeState': ('covarPop', 'MergeState'), 'cramersVBiasCorrectedMergeState': ('cramersVBiasCorrected', 'MergeState'), 'avgWeightedMergeState': ('avgWeighted', 'MergeState'), 'quantileExactLowMergeState': ('quantileExactLow', 'MergeState'), 'groupArrayMergeState': ('groupArray', 'MergeState'), 'sumWithOverflowMergeState': ('sumWithOverflow', 'MergeState'), 'quantileMergeState': ('quantile', 'MergeState'), 'categoricalInformationValueMergeState': ('categoricalInformationValue', 'MergeState'), 'exponentialTimeDecayedAvgMergeState': ('exponentialTimeDecayedAvg', 'MergeState'), 'sparkBarMergeState': ('sparkBar', 'MergeState'), 'groupBitmapOrMergeState': ('groupBitmapOr', 'MergeState'), 'argMaxMergeState': ('argMax', 'MergeState'), 'quantilesBFloat16WeightedMergeState': ('quantilesBFloat16Weighted', 'MergeState'), 'quantilesMergeState': ('quantiles', 'MergeState'), 'quantilesTimingWeightedMergeState': ('quantilesTimingWeighted', 'MergeState'), 'medianMergeState': ('median', 'MergeState'), 'groupArrayMovingSumMergeState': ('groupArrayMovingSum', 'MergeState'), 'sumMergeState': ('sum', 'MergeState'), 'welchTTestMergeState': ('welchTTest', 'MergeState'), 'quantileTDigestWeightedMergeState': ('quantileTDigestWeighted', 'MergeState'), 'quantileTimingMergeState': ('quantileTiming', 'MergeState'), 'sequenceCountMergeState': ('sequenceCount', 'MergeState'), 'histogramMergeState': ('histogram', 'MergeState'), 'quantileBFloat16MergeState': ('quantileBFloat16', 'MergeState'), 'uniqHLL12MergeState': ('uniqHLL12', 'MergeState'), 'quantileExactInclusiveMergeState': ('quantileExactInclusive', 'MergeState'), 'approx_top_sumMergeState': ('approx_top_sum', 'MergeState'), 'quantileGKMergeState': ('quantileGK', 'MergeState'), 'kurtPopMergeState': ('kurtPop', 'MergeState'), 'corrMergeState': ('corr', 'MergeState'), 'skewSampMergeState': ('skewSamp', 'MergeState'), 'quantileBFloat16WeightedMergeState': ('quantileBFloat16Weighted', 'MergeState'), 'quantileInterpolatedWeightedMergeState': ('quantileInterpolatedWeighted', 'MergeState'), 'quantilesExactLowMergeState': ('quantilesExactLow', 'MergeState'), 'groupBitmapXorMergeState': ('groupBitmapXor', 'MergeState'), 'sumMapMergeState': ('sumMap', 'MergeState'), 'stochasticLinearRegressionMergeState': ('stochasticLinearRegression', 'MergeState'), 'uniqCombinedMergeState': ('uniqCombined', 'MergeState'), 'intervalLengthSumMergeState': ('intervalLengthSum', 'MergeState'), 'sumKahanMergeState': ('sumKahan', 'MergeState'), 'groupArrayInsertAtMergeState': ('groupArrayInsertAt', 'MergeState'), 'maxIntersectionsPositionMergeState': ('maxIntersectionsPosition', 'MergeState'), 'uniqUpToMergeState': ('uniqUpTo', 'MergeState'), 'groupBitAndMergeState': ('groupBitAnd', 'MergeState'), 'sequenceMatchMergeState': ('sequenceMatch', 'MergeState'), 'deltaSumTimestampMergeState': ('deltaSumTimestamp', 'MergeState'), 'anyMergeState': ('any', 'MergeState'), 'quantilesTimingMergeState': ('quantilesTiming', 'MergeState'), 'varSampMergeState': ('varSamp', 'MergeState'), 'groupArrayMovingAvgMergeState': ('groupArrayMovingAvg', 'MergeState'), 'retentionMergeState': ('retention', 'MergeState'), 'quantilesExactExclusiveMergeState': ('quantilesExactExclusive', 'MergeState'), 'kurtSampMergeState': ('kurtSamp', 'MergeState'), 'stddevSampMergeState': ('stddevSamp', 'MergeState'), 'quantilesBFloat16MergeState': ('quantilesBFloat16', 'MergeState'), 'quantilesGKMergeState': ('quantilesGK', 'MergeState'), 'mannWhitneyUTestMergeState': ('mannWhitneyUTest', 'MergeState'), 'exponentialMovingAverageMergeState': ('exponentialMovingAverage', 'MergeState'), 'meanZTestMergeState': ('meanZTest', 'MergeState'), 'groupBitmapAndMergeState': ('groupBitmapAnd', 'MergeState'), 'countMergeState': ('count', 'MergeState'), 'contingencyMergeState': ('contingency', 'MergeState'), 'quantileTimingWeightedOrDefault': ('quantileTimingWeighted', 'OrDefault'), 'quantilesExactOrDefault': ('quantilesExact', 'OrDefault'), 'simpleLinearRegressionOrDefault': ('simpleLinearRegression', 'OrDefault'), 'groupBitmapOrDefault': ('groupBitmap', 'OrDefault'), 'sumCountOrDefault': ('sumCount', 'OrDefault'), 'quantileExactHighOrDefault': ('quantileExactHigh', 'OrDefault'), 'anyLastOrDefault': ('anyLast', 'OrDefault'), 'quantilesDeterministicOrDefault': ('quantilesDeterministic', 'OrDefault'), 'entropyOrDefault': ('entropy', 'OrDefault'), 'quantileTDigestOrDefault': ('quantileTDigest', 'OrDefault'), 'sequenceNextNodeOrDefault': ('sequenceNextNode', 'OrDefault'), 'studentTTestOrDefault': ('studentTTest', 'OrDefault'), 'rankCorrOrDefault': ('rankCorr', 'OrDefault'), 'maxIntersectionsOrDefault': ('maxIntersections', 'OrDefault'), 'deltaSumOrDefault': ('deltaSum', 'OrDefault'), 'covarSampOrDefault': ('covarSamp', 'OrDefault'), 'varPopOrDefault': ('varPop', 'OrDefault'), 'stochasticLogisticRegressionOrDefault': ('stochasticLogisticRegression', 'OrDefault'), 'groupArrayLastOrDefault': ('groupArrayLast', 'OrDefault'), 'groupConcatOrDefault': ('groupConcat', 'OrDefault'), 'windowFunnelOrDefault': ('windowFunnel', 'OrDefault'), 'kolmogorovSmirnovTestOrDefault': ('kolmogorovSmirnovTest', 'OrDefault'), 'maxMapOrDefault': ('maxMap', 'OrDefault'), 'largestTriangleThreeBucketsOrDefault': ('largestTriangleThreeBuckets', 'OrDefault'), 'quantilesExactWeightedOrDefault': ('quantilesExactWeighted', 'OrDefault'), 'quantileExactOrDefault': ('quantileExact', 'OrDefault'), 'topKWeightedOrDefault': ('topKWeighted', 'OrDefault'), 'groupUniqArrayOrDefault': ('groupUniqArray', 'OrDefault'), 'uniqExactOrDefault': ('uniqExact', 'OrDefault'), 'stddevPopOrDefault': ('stddevPop', 'OrDefault'), 'maxOrDefault': ('max', 'OrDefault'), 'topKOrDefault': ('topK', 'OrDefault'), 'groupBitXorOrDefault': ('groupBitXor', 'OrDefault'), 'avgOrDefault': ('avg', 'OrDefault'), 'uniqOrDefault': ('uniq', 'OrDefault'), 'quantilesExactHighOrDefault': ('quantilesExactHigh', 'OrDefault'), 'quantileExactWeightedOrDefault': ('quantileExactWeighted', 'OrDefault'), 'minMapOrDefault': ('minMap', 'OrDefault'), 'anyHeavyOrDefault': ('anyHeavy', 'OrDefault'), 'groupArraySampleOrDefault': ('groupArraySample', 'OrDefault'), 'theilsUOrDefault': ('theilsU', 'OrDefault'), 'minOrDefault': ('min', 'OrDefault'), 'boundingRatioOrDefault': ('boundingRatio', 'OrDefault'), 'quantilesTDigestOrDefault': ('quantilesTDigest', 'OrDefault'), 'quantileDeterministicOrDefault': ('quantileDeterministic', 'OrDefault'), 'last_valueOrDefault': ('last_value', 'OrDefault'), 'cramersVOrDefault': ('cramersV', 'OrDefault'), 'first_valueOrDefault': ('first_value', 'OrDefault'), 'groupBitOrOrDefault': ('groupBitOr', 'OrDefault'), 'argMinOrDefault': ('argMin', 'OrDefault'), 'skewPopOrDefault': ('skewPop', 'OrDefault'), 'uniqCombined64OrDefault': ('uniqCombined64', 'OrDefault'), 'quantilesTDigestWeightedOrDefault': ('quantilesTDigestWeighted', 'OrDefault'), 'uniqThetaOrDefault': ('uniqTheta', 'OrDefault'), 'quantilesInterpolatedWeightedOrDefault': ('quantilesInterpolatedWeighted', 'OrDefault'), 'covarPopOrDefault': ('covarPop', 'OrDefault'), 'cramersVBiasCorrectedOrDefault': ('cramersVBiasCorrected', 'OrDefault'), 'avgWeightedOrDefault': ('avgWeighted', 'OrDefault'), 'quantileExactLowOrDefault': ('quantileExactLow', 'OrDefault'), 'groupArrayOrDefault': ('groupArray', 'OrDefault'), 'sumWithOverflowOrDefault': ('sumWithOverflow', 'OrDefault'), 'quantileOrDefault': ('quantile', 'OrDefault'), 'categoricalInformationValueOrDefault': ('categoricalInformationValue', 'OrDefault'), 'exponentialTimeDecayedAvgOrDefault': ('exponentialTimeDecayedAvg', 'OrDefault'), 'sparkBarOrDefault': ('sparkBar', 'OrDefault'), 'groupBitmapOrOrDefault': ('groupBitmapOr', 'OrDefault'), 'argMaxOrDefault': ('argMax', 'OrDefault'), 'quantilesBFloat16WeightedOrDefault': ('quantilesBFloat16Weighted', 'OrDefault'), 'quantilesOrDefault': ('quantiles', 'OrDefault'), 'quantilesTimingWeightedOrDefault': ('quantilesTimingWeighted', 'OrDefault'), 'medianOrDefault': ('median', 'OrDefault'), 'groupArrayMovingSumOrDefault': ('groupArrayMovingSum', 'OrDefault'), 'sumOrDefault': ('sum', 'OrDefault'), 'welchTTestOrDefault': ('welchTTest', 'OrDefault'), 'quantileTDigestWeightedOrDefault': ('quantileTDigestWeighted', 'OrDefault'), 'quantileTimingOrDefault': ('quantileTiming', 'OrDefault'), 'sequenceCountOrDefault': ('sequenceCount', 'OrDefault'), 'histogramOrDefault': ('histogram', 'OrDefault'), 'quantileBFloat16OrDefault': ('quantileBFloat16', 'OrDefault'), 'uniqHLL12OrDefault': ('uniqHLL12', 'OrDefault'), 'quantileExactInclusiveOrDefault': ('quantileExactInclusive', 'OrDefault'), 'approx_top_sumOrDefault': ('approx_top_sum', 'OrDefault'), 'quantileGKOrDefault': ('quantileGK', 'OrDefault'), 'kurtPopOrDefault': ('kurtPop', 'OrDefault'), 'corrOrDefault': ('corr', 'OrDefault'), 'skewSampOrDefault': ('skewSamp', 'OrDefault'), 'quantileBFloat16WeightedOrDefault': ('quantileBFloat16Weighted', 'OrDefault'), 'quantileInterpolatedWeightedOrDefault': ('quantileInterpolatedWeighted', 'OrDefault'), 'quantilesExactLowOrDefault': ('quantilesExactLow', 'OrDefault'), 'groupBitmapXorOrDefault': ('groupBitmapXor', 'OrDefault'), 'sumMapOrDefault': ('sumMap', 'OrDefault'), 'stochasticLinearRegressionOrDefault': ('stochasticLinearRegression', 'OrDefault'), 'uniqCombinedOrDefault': ('uniqCombined', 'OrDefault'), 'intervalLengthSumOrDefault': ('intervalLengthSum', 'OrDefault'), 'sumKahanOrDefault': ('sumKahan', 'OrDefault'), 'groupArrayInsertAtOrDefault': ('groupArrayInsertAt', 'OrDefault'), 'maxIntersectionsPositionOrDefault': ('maxIntersectionsPosition', 'OrDefault'), 'uniqUpToOrDefault': ('uniqUpTo', 'OrDefault'), 'groupBitAndOrDefault': ('groupBitAnd', 'OrDefault'), 'sequenceMatchOrDefault': ('sequenceMatch', 'OrDefault'), 'deltaSumTimestampOrDefault': ('deltaSumTimestamp', 'OrDefault'), 'anyOrDefault': ('any', 'OrDefault'), 'quantilesTimingOrDefault': ('quantilesTiming', 'OrDefault'), 'varSampOrDefault': ('varSamp', 'OrDefault'), 'groupArrayMovingAvgOrDefault': ('groupArrayMovingAvg', 'OrDefault'), 'retentionOrDefault': ('retention', 'OrDefault'), 'quantilesExactExclusiveOrDefault': ('quantilesExactExclusive', 'OrDefault'), 'kurtSampOrDefault': ('kurtSamp', 'OrDefault'), 'stddevSampOrDefault': ('stddevSamp', 'OrDefault'), 'quantilesBFloat16OrDefault': ('quantilesBFloat16', 'OrDefault'), 'quantilesGKOrDefault': ('quantilesGK', 'OrDefault'), 'mannWhitneyUTestOrDefault': ('mannWhitneyUTest', 'OrDefault'), 'exponentialMovingAverageOrDefault': ('exponentialMovingAverage', 'OrDefault'), 'meanZTestOrDefault': ('meanZTest', 'OrDefault'), 'groupBitmapAndOrDefault': ('groupBitmapAnd', 'OrDefault'), 'countOrDefault': ('count', 'OrDefault'), 'contingencyOrDefault': ('contingency', 'OrDefault'), 'quantileTimingWeightedDistinct': ('quantileTimingWeighted', 'Distinct'), 'quantilesExactDistinct': ('quantilesExact', 'Distinct'), 'simpleLinearRegressionDistinct': ('simpleLinearRegression', 'Distinct'), 'groupBitmapDistinct': ('groupBitmap', 'Distinct'), 'sumCountDistinct': ('sumCount', 'Distinct'), 'quantileExactHighDistinct': ('quantileExactHigh', 'Distinct'), 'anyLastDistinct': ('anyLast', 'Distinct'), 'quantilesDeterministicDistinct': ('quantilesDeterministic', 'Distinct'), 'entropyDistinct': ('entropy', 'Distinct'), 'quantileTDigestDistinct': ('quantileTDigest', 'Distinct'), 'sequenceNextNodeDistinct': ('sequenceNextNode', 'Distinct'), 'studentTTestDistinct': ('studentTTest', 'Distinct'), 'rankCorrDistinct': ('rankCorr', 'Distinct'), 'maxIntersectionsDistinct': ('maxIntersections', 'Distinct'), 'deltaSumDistinct': ('deltaSum', 'Distinct'), 'covarSampDistinct': ('covarSamp', 'Distinct'), 'varPopDistinct': ('varPop', 'Distinct'), 'stochasticLogisticRegressionDistinct': ('stochasticLogisticRegression', 'Distinct'), 'groupArrayLastDistinct': ('groupArrayLast', 'Distinct'), 'groupConcatDistinct': ('groupConcat', 'Distinct'), 'windowFunnelDistinct': ('windowFunnel', 'Distinct'), 'kolmogorovSmirnovTestDistinct': ('kolmogorovSmirnovTest', 'Distinct'), 'maxMapDistinct': ('maxMap', 'Distinct'), 'largestTriangleThreeBucketsDistinct': ('largestTriangleThreeBuckets', 'Distinct'), 'quantilesExactWeightedDistinct': ('quantilesExactWeighted', 'Distinct'), 'quantileExactDistinct': ('quantileExact', 'Distinct'), 'topKWeightedDistinct': ('topKWeighted', 'Distinct'), 'groupUniqArrayDistinct': ('groupUniqArray', 'Distinct'), 'uniqExactDistinct': ('uniqExact', 'Distinct'), 'stddevPopDistinct': ('stddevPop', 'Distinct'), 'maxDistinct': ('max', 'Distinct'), 'topKDistinct': ('topK', 'Distinct'), 'groupBitXorDistinct': ('groupBitXor', 'Distinct'), 'avgDistinct': ('avg', 'Distinct'), 'uniqDistinct': ('uniq', 'Distinct'), 'quantilesExactHighDistinct': ('quantilesExactHigh', 'Distinct'), 'quantileExactWeightedDistinct': ('quantileExactWeighted', 'Distinct'), 'minMapDistinct': ('minMap', 'Distinct'), 'anyHeavyDistinct': ('anyHeavy', 'Distinct'), 'groupArraySampleDistinct': ('groupArraySample', 'Distinct'), 'theilsUDistinct': ('theilsU', 'Distinct'), 'minDistinct': ('min', 'Distinct'), 'boundingRatioDistinct': ('boundingRatio', 'Distinct'), 'quantilesTDigestDistinct': ('quantilesTDigest', 'Distinct'), 'quantileDeterministicDistinct': ('quantileDeterministic', 'Distinct'), 'last_valueDistinct': ('last_value', 'Distinct'), 'cramersVDistinct': ('cramersV', 'Distinct'), 'first_valueDistinct': ('first_value', 'Distinct'), 'groupBitOrDistinct': ('groupBitOr', 'Distinct'), 'argMinDistinct': ('argMin', 'Distinct'), 'skewPopDistinct': ('skewPop', 'Distinct'), 'uniqCombined64Distinct': ('uniqCombined64', 'Distinct'), 'quantilesTDigestWeightedDistinct': ('quantilesTDigestWeighted', 'Distinct'), 'uniqThetaDistinct': ('uniqTheta', 'Distinct'), 'quantilesInterpolatedWeightedDistinct': ('quantilesInterpolatedWeighted', 'Distinct'), 'covarPopDistinct': ('covarPop', 'Distinct'), 'cramersVBiasCorrectedDistinct': ('cramersVBiasCorrected', 'Distinct'), 'avgWeightedDistinct': ('avgWeighted', 'Distinct'), 'quantileExactLowDistinct': ('quantileExactLow', 'Distinct'), 'groupArrayDistinct': ('groupArray', 'Distinct'), 'sumWithOverflowDistinct': ('sumWithOverflow', 'Distinct'), 'quantileDistinct': ('quantile', 'Distinct'), 'categoricalInformationValueDistinct': ('categoricalInformationValue', 'Distinct'), 'exponentialTimeDecayedAvgDistinct': ('exponentialTimeDecayedAvg', 'Distinct'), 'sparkBarDistinct': ('sparkBar', 'Distinct'), 'groupBitmapOrDistinct': ('groupBitmapOr', 'Distinct'), 'argMaxDistinct': ('argMax', 'Distinct'), 'quantilesBFloat16WeightedDistinct': ('quantilesBFloat16Weighted', 'Distinct'), 'quantilesDistinct': ('quantiles', 'Distinct'), 'quantilesTimingWeightedDistinct': ('quantilesTimingWeighted', 'Distinct'), 'medianDistinct': ('median', 'Distinct'), 'groupArrayMovingSumDistinct': ('groupArrayMovingSum', 'Distinct'), 'sumDistinct': ('sum', 'Distinct'), 'welchTTestDistinct': ('welchTTest', 'Distinct'), 'quantileTDigestWeightedDistinct': ('quantileTDigestWeighted', 'Distinct'), 'quantileTimingDistinct': ('quantileTiming', 'Distinct'), 'sequenceCountDistinct': ('sequenceCount', 'Distinct'), 'histogramDistinct': ('histogram', 'Distinct'), 'quantileBFloat16Distinct': ('quantileBFloat16', 'Distinct'), 'uniqHLL12Distinct': ('uniqHLL12', 'Distinct'), 'quantileExactInclusiveDistinct': ('quantileExactInclusive', 'Distinct'), 'approx_top_sumDistinct': ('approx_top_sum', 'Distinct'), 'quantileGKDistinct': ('quantileGK', 'Distinct'), 'kurtPopDistinct': ('kurtPop', 'Distinct'), 'corrDistinct': ('corr', 'Distinct'), 'skewSampDistinct': ('skewSamp', 'Distinct'), 'quantileBFloat16WeightedDistinct': ('quantileBFloat16Weighted', 'Distinct'), 'quantileInterpolatedWeightedDistinct': ('quantileInterpolatedWeighted', 'Distinct'), 'quantilesExactLowDistinct': ('quantilesExactLow', 'Distinct'), 'groupBitmapXorDistinct': ('groupBitmapXor', 'Distinct'), 'sumMapDistinct': ('sumMap', 'Distinct'), 'stochasticLinearRegressionDistinct': ('stochasticLinearRegression', 'Distinct'), 'uniqCombinedDistinct': ('uniqCombined', 'Distinct'), 'intervalLengthSumDistinct': ('intervalLengthSum', 'Distinct'), 'sumKahanDistinct': ('sumKahan', 'Distinct'), 'groupArrayInsertAtDistinct': ('groupArrayInsertAt', 'Distinct'), 'maxIntersectionsPositionDistinct': ('maxIntersectionsPosition', 'Distinct'), 'uniqUpToDistinct': ('uniqUpTo', 'Distinct'), 'groupBitAndDistinct': ('groupBitAnd', 'Distinct'), 'sequenceMatchDistinct': ('sequenceMatch', 'Distinct'), 'deltaSumTimestampDistinct': ('deltaSumTimestamp', 'Distinct'), 'anyDistinct': ('any', 'Distinct'), 'quantilesTimingDistinct': ('quantilesTiming', 'Distinct'), 'varSampDistinct': ('varSamp', 'Distinct'), 'groupArrayMovingAvgDistinct': ('groupArrayMovingAvg', 'Distinct'), 'retentionDistinct': ('retention', 'Distinct'), 'quantilesExactExclusiveDistinct': ('quantilesExactExclusive', 'Distinct'), 'kurtSampDistinct': ('kurtSamp', 'Distinct'), 'stddevSampDistinct': ('stddevSamp', 'Distinct'), 'quantilesBFloat16Distinct': ('quantilesBFloat16', 'Distinct'), 'quantilesGKDistinct': ('quantilesGK', 'Distinct'), 'mannWhitneyUTestDistinct': ('mannWhitneyUTest', 'Distinct'), 'exponentialMovingAverageDistinct': ('exponentialMovingAverage', 'Distinct'), 'meanZTestDistinct': ('meanZTest', 'Distinct'), 'groupBitmapAndDistinct': ('groupBitmapAnd', 'Distinct'), 'countDistinct': ('count', 'Distinct'), 'contingencyDistinct': ('contingency', 'Distinct'), 'quantileTimingWeightedResample': ('quantileTimingWeighted', 'Resample'), 'quantilesExactResample': ('quantilesExact', 'Resample'), 'simpleLinearRegressionResample': ('simpleLinearRegression', 'Resample'), 'groupBitmapResample': ('groupBitmap', 'Resample'), 'sumCountResample': ('sumCount', 'Resample'), 'quantileExactHighResample': ('quantileExactHigh', 'Resample'), 'anyLastResample': ('anyLast', 'Resample'), 'quantilesDeterministicResample': ('quantilesDeterministic', 'Resample'), 'entropyResample': ('entropy', 'Resample'), 'quantileTDigestResample': ('quantileTDigest', 'Resample'), 'sequenceNextNodeResample': ('sequenceNextNode', 'Resample'), 'studentTTestResample': ('studentTTest', 'Resample'), 'rankCorrResample': ('rankCorr', 'Resample'), 'maxIntersectionsResample': ('maxIntersections', 'Resample'), 'deltaSumResample': ('deltaSum', 'Resample'), 'covarSampResample': ('covarSamp', 'Resample'), 'varPopResample': ('varPop', 'Resample'), 'stochasticLogisticRegressionResample': ('stochasticLogisticRegression', 'Resample'), 'groupArrayLastResample': ('groupArrayLast', 'Resample'), 'groupConcatResample': ('groupConcat', 'Resample'), 'windowFunnelResample': ('windowFunnel', 'Resample'), 'kolmogorovSmirnovTestResample': ('kolmogorovSmirnovTest', 'Resample'), 'maxMapResample': ('maxMap', 'Resample'), 'largestTriangleThreeBucketsResample': ('largestTriangleThreeBuckets', 'Resample'), 'quantilesExactWeightedResample': ('quantilesExactWeighted', 'Resample'), 'quantileExactResample': ('quantileExact', 'Resample'), 'topKWeightedResample': ('topKWeighted', 'Resample'), 'groupUniqArrayResample': ('groupUniqArray', 'Resample'), 'uniqExactResample': ('uniqExact', 'Resample'), 'stddevPopResample': ('stddevPop', 'Resample'), 'maxResample': ('max', 'Resample'), 'topKResample': ('topK', 'Resample'), 'groupBitXorResample': ('groupBitXor', 'Resample'), 'avgResample': ('avg', 'Resample'), 'uniqResample': ('uniq', 'Resample'), 'quantilesExactHighResample': ('quantilesExactHigh', 'Resample'), 'quantileExactWeightedResample': ('quantileExactWeighted', 'Resample'), 'minMapResample': ('minMap', 'Resample'), 'anyHeavyResample': ('anyHeavy', 'Resample'), 'groupArraySampleResample': ('groupArraySample', 'Resample'), 'theilsUResample': ('theilsU', 'Resample'), 'minResample': ('min', 'Resample'), 'boundingRatioResample': ('boundingRatio', 'Resample'), 'quantilesTDigestResample': ('quantilesTDigest', 'Resample'), 'quantileDeterministicResample': ('quantileDeterministic', 'Resample'), 'last_valueResample': ('last_value', 'Resample'), 'cramersVResample': ('cramersV', 'Resample'), 'first_valueResample': ('first_value', 'Resample'), 'groupBitOrResample': ('groupBitOr', 'Resample'), 'argMinResample': ('argMin', 'Resample'), 'skewPopResample': ('skewPop', 'Resample'), 'uniqCombined64Resample': ('uniqCombined64', 'Resample'), 'quantilesTDigestWeightedResample': ('quantilesTDigestWeighted', 'Resample'), 'uniqThetaResample': ('uniqTheta', 'Resample'), 'quantilesInterpolatedWeightedResample': ('quantilesInterpolatedWeighted', 'Resample'), 'covarPopResample': ('covarPop', 'Resample'), 'cramersVBiasCorrectedResample': ('cramersVBiasCorrected', 'Resample'), 'avgWeightedResample': ('avgWeighted', 'Resample'), 'quantileExactLowResample': ('quantileExactLow', 'Resample'), 'groupArrayResample': ('groupArray', 'Resample'), 'sumWithOverflowResample': ('sumWithOverflow', 'Resample'), 'quantileResample': ('quantile', 'Resample'), 'categoricalInformationValueResample': ('categoricalInformationValue', 'Resample'), 'exponentialTimeDecayedAvgResample': ('exponentialTimeDecayedAvg', 'Resample'), 'sparkBarResample': ('sparkBar', 'Resample'), 'groupBitmapOrResample': ('groupBitmapOr', 'Resample'), 'argMaxResample': ('argMax', 'Resample'), 'quantilesBFloat16WeightedResample': ('quantilesBFloat16Weighted', 'Resample'), 'quantilesResample': ('quantiles', 'Resample'), 'quantilesTimingWeightedResample': ('quantilesTimingWeighted', 'Resample'), 'medianResample': ('median', 'Resample'), 'groupArrayMovingSumResample': ('groupArrayMovingSum', 'Resample'), 'sumResample': ('sum', 'Resample'), 'welchTTestResample': ('welchTTest', 'Resample'), 'quantileTDigestWeightedResample': ('quantileTDigestWeighted', 'Resample'), 'quantileTimingResample': ('quantileTiming', 'Resample'), 'sequenceCountResample': ('sequenceCount', 'Resample'), 'histogramResample': ('histogram', 'Resample'), 'quantileBFloat16Resample': ('quantileBFloat16', 'Resample'), 'uniqHLL12Resample': ('uniqHLL12', 'Resample'), 'quantileExactInclusiveResample': ('quantileExactInclusive', 'Resample'), 'approx_top_sumResample': ('approx_top_sum', 'Resample'), 'quantileGKResample': ('quantileGK', 'Resample'), 'kurtPopResample': ('kurtPop', 'Resample'), 'corrResample': ('corr', 'Resample'), 'skewSampResample': ('skewSamp', 'Resample'), 'quantileBFloat16WeightedResample': ('quantileBFloat16Weighted', 'Resample'), 'quantileInterpolatedWeightedResample': ('quantileInterpolatedWeighted', 'Resample'), 'quantilesExactLowResample': ('quantilesExactLow', 'Resample'), 'groupBitmapXorResample': ('groupBitmapXor', 'Resample'), 'sumMapResample': ('sumMap', 'Resample'), 'stochasticLinearRegressionResample': ('stochasticLinearRegression', 'Resample'), 'uniqCombinedResample': ('uniqCombined', 'Resample'), 'intervalLengthSumResample': ('intervalLengthSum', 'Resample'), 'sumKahanResample': ('sumKahan', 'Resample'), 'groupArrayInsertAtResample': ('groupArrayInsertAt', 'Resample'), 'maxIntersectionsPositionResample': ('maxIntersectionsPosition', 'Resample'), 'uniqUpToResample': ('uniqUpTo', 'Resample'), 'groupBitAndResample': ('groupBitAnd', 'Resample'), 'sequenceMatchResample': ('sequenceMatch', 'Resample'), 'deltaSumTimestampResample': ('deltaSumTimestamp', 'Resample'), 'anyResample': ('any', 'Resample'), 'quantilesTimingResample': ('quantilesTiming', 'Resample'), 'varSampResample': ('varSamp', 'Resample'), 'groupArrayMovingAvgResample': ('groupArrayMovingAvg', 'Resample'), 'retentionResample': ('retention', 'Resample'), 'quantilesExactExclusiveResample': ('quantilesExactExclusive', 'Resample'), 'kurtSampResample': ('kurtSamp', 'Resample'), 'stddevSampResample': ('stddevSamp', 'Resample'), 'quantilesBFloat16Resample': ('quantilesBFloat16', 'Resample'), 'quantilesGKResample': ('quantilesGK', 'Resample'), 'mannWhitneyUTestResample': ('mannWhitneyUTest', 'Resample'), 'exponentialMovingAverageResample': ('exponentialMovingAverage', 'Resample'), 'meanZTestResample': ('meanZTest', 'Resample'), 'groupBitmapAndResample': ('groupBitmapAnd', 'Resample'), 'countResample': ('count', 'Resample'), 'contingencyResample': ('contingency', 'Resample'), 'quantileTimingWeightedArrayIf': ('quantileTimingWeighted', 'ArrayIf'), 'quantilesExactArrayIf': ('quantilesExact', 'ArrayIf'), 'simpleLinearRegressionArrayIf': ('simpleLinearRegression', 'ArrayIf'), 'groupBitmapArrayIf': ('groupBitmap', 'ArrayIf'), 'sumCountArrayIf': ('sumCount', 'ArrayIf'), 'quantileExactHighArrayIf': ('quantileExactHigh', 'ArrayIf'), 'anyLastArrayIf': ('anyLast', 'ArrayIf'), 'quantilesDeterministicArrayIf': ('quantilesDeterministic', 'ArrayIf'), 'entropyArrayIf': ('entropy', 'ArrayIf'), 'quantileTDigestArrayIf': ('quantileTDigest', 'ArrayIf'), 'sequenceNextNodeArrayIf': ('sequenceNextNode', 'ArrayIf'), 'studentTTestArrayIf': ('studentTTest', 'ArrayIf'), 'rankCorrArrayIf': ('rankCorr', 'ArrayIf'), 'maxIntersectionsArrayIf': ('maxIntersections', 'ArrayIf'), 'deltaSumArrayIf': ('deltaSum', 'ArrayIf'), 'covarSampArrayIf': ('covarSamp', 'ArrayIf'), 'varPopArrayIf': ('varPop', 'ArrayIf'), 'stochasticLogisticRegressionArrayIf': ('stochasticLogisticRegression', 'ArrayIf'), 'groupArrayLastArrayIf': ('groupArrayLast', 'ArrayIf'), 'groupConcatArrayIf': ('groupConcat', 'ArrayIf'), 'windowFunnelArrayIf': ('windowFunnel', 'ArrayIf'), 'kolmogorovSmirnovTestArrayIf': ('kolmogorovSmirnovTest', 'ArrayIf'), 'maxMapArrayIf': ('maxMap', 'ArrayIf'), 'largestTriangleThreeBucketsArrayIf': ('largestTriangleThreeBuckets', 'ArrayIf'), 'quantilesExactWeightedArrayIf': ('quantilesExactWeighted', 'ArrayIf'), 'quantileExactArrayIf': ('quantileExact', 'ArrayIf'), 'topKWeightedArrayIf': ('topKWeighted', 'ArrayIf'), 'groupUniqArrayArrayIf': ('groupUniqArray', 'ArrayIf'), 'uniqExactArrayIf': ('uniqExact', 'ArrayIf'), 'stddevPopArrayIf': ('stddevPop', 'ArrayIf'), 'maxArrayIf': ('max', 'ArrayIf'), 'topKArrayIf': ('topK', 'ArrayIf'), 'groupBitXorArrayIf': ('groupBitXor', 'ArrayIf'), 'avgArrayIf': ('avg', 'ArrayIf'), 'uniqArrayIf': ('uniq', 'ArrayIf'), 'quantilesExactHighArrayIf': ('quantilesExactHigh', 'ArrayIf'), 'quantileExactWeightedArrayIf': ('quantileExactWeighted', 'ArrayIf'), 'minMapArrayIf': ('minMap', 'ArrayIf'), 'anyHeavyArrayIf': ('anyHeavy', 'ArrayIf'), 'groupArraySampleArrayIf': ('groupArraySample', 'ArrayIf'), 'theilsUArrayIf': ('theilsU', 'ArrayIf'), 'minArrayIf': ('min', 'ArrayIf'), 'boundingRatioArrayIf': ('boundingRatio', 'ArrayIf'), 'quantilesTDigestArrayIf': ('quantilesTDigest', 'ArrayIf'), 'quantileDeterministicArrayIf': ('quantileDeterministic', 'ArrayIf'), 'last_valueArrayIf': ('last_value', 'ArrayIf'), 'cramersVArrayIf': ('cramersV', 'ArrayIf'), 'first_valueArrayIf': ('first_value', 'ArrayIf'), 'groupBitOrArrayIf': ('groupBitOr', 'ArrayIf'), 'argMinArrayIf': ('argMin', 'ArrayIf'), 'skewPopArrayIf': ('skewPop', 'ArrayIf'), 'uniqCombined64ArrayIf': ('uniqCombined64', 'ArrayIf'), 'quantilesTDigestWeightedArrayIf': ('quantilesTDigestWeighted', 'ArrayIf'), 'uniqThetaArrayIf': ('uniqTheta', 'ArrayIf'), 'quantilesInterpolatedWeightedArrayIf': ('quantilesInterpolatedWeighted', 'ArrayIf'), 'covarPopArrayIf': ('covarPop', 'ArrayIf'), 'cramersVBiasCorrectedArrayIf': ('cramersVBiasCorrected', 'ArrayIf'), 'avgWeightedArrayIf': ('avgWeighted', 'ArrayIf'), 'quantileExactLowArrayIf': ('quantileExactLow', 'ArrayIf'), 'groupArrayArrayIf': ('groupArray', 'ArrayIf'), 'sumWithOverflowArrayIf': ('sumWithOverflow', 'ArrayIf'), 'quantileArrayIf': ('quantile', 'ArrayIf'), 'categoricalInformationValueArrayIf': ('categoricalInformationValue', 'ArrayIf'), 'exponentialTimeDecayedAvgArrayIf': ('exponentialTimeDecayedAvg', 'ArrayIf'), 'sparkBarArrayIf': ('sparkBar', 'ArrayIf'), 'groupBitmapOrArrayIf': ('groupBitmapOr', 'ArrayIf'), 'argMaxArrayIf': ('argMax', 'ArrayIf'), 'quantilesBFloat16WeightedArrayIf': ('quantilesBFloat16Weighted', 'ArrayIf'), 'quantilesArrayIf': ('quantiles', 'ArrayIf'), 'quantilesTimingWeightedArrayIf': ('quantilesTimingWeighted', 'ArrayIf'), 'medianArrayIf': ('median', 'ArrayIf'), 'groupArrayMovingSumArrayIf': ('groupArrayMovingSum', 'ArrayIf'), 'sumArrayIf': ('sum', 'ArrayIf'), 'welchTTestArrayIf': ('welchTTest', 'ArrayIf'), 'quantileTDigestWeightedArrayIf': ('quantileTDigestWeighted', 'ArrayIf'), 'quantileTimingArrayIf': ('quantileTiming', 'ArrayIf'), 'sequenceCountArrayIf': ('sequenceCount', 'ArrayIf'), 'histogramArrayIf': ('histogram', 'ArrayIf'), 'quantileBFloat16ArrayIf': ('quantileBFloat16', 'ArrayIf'), 'uniqHLL12ArrayIf': ('uniqHLL12', 'ArrayIf'), 'quantileExactInclusiveArrayIf': ('quantileExactInclusive', 'ArrayIf'), 'approx_top_sumArrayIf': ('approx_top_sum', 'ArrayIf'), 'quantileGKArrayIf': ('quantileGK', 'ArrayIf'), 'kurtPopArrayIf': ('kurtPop', 'ArrayIf'), 'corrArrayIf': ('corr', 'ArrayIf'), 'skewSampArrayIf': ('skewSamp', 'ArrayIf'), 'quantileBFloat16WeightedArrayIf': ('quantileBFloat16Weighted', 'ArrayIf'), 'quantileInterpolatedWeightedArrayIf': ('quantileInterpolatedWeighted', 'ArrayIf'), 'quantilesExactLowArrayIf': ('quantilesExactLow', 'ArrayIf'), 'groupBitmapXorArrayIf': ('groupBitmapXor', 'ArrayIf'), 'sumMapArrayIf': ('sumMap', 'ArrayIf'), 'stochasticLinearRegressionArrayIf': ('stochasticLinearRegression', 'ArrayIf'), 'uniqCombinedArrayIf': ('uniqCombined', 'ArrayIf'), 'intervalLengthSumArrayIf': ('intervalLengthSum', 'ArrayIf'), 'sumKahanArrayIf': ('sumKahan', 'ArrayIf'), 'groupArrayInsertAtArrayIf': ('groupArrayInsertAt', 'ArrayIf'), 'maxIntersectionsPositionArrayIf': ('maxIntersectionsPosition', 'ArrayIf'), 'uniqUpToArrayIf': ('uniqUpTo', 'ArrayIf'), 'groupBitAndArrayIf': ('groupBitAnd', 'ArrayIf'), 'sequenceMatchArrayIf': ('sequenceMatch', 'ArrayIf'), 'deltaSumTimestampArrayIf': ('deltaSumTimestamp', 'ArrayIf'), 'anyArrayIf': ('any', 'ArrayIf'), 'quantilesTimingArrayIf': ('quantilesTiming', 'ArrayIf'), 'varSampArrayIf': ('varSamp', 'ArrayIf'), 'groupArrayMovingAvgArrayIf': ('groupArrayMovingAvg', 'ArrayIf'), 'retentionArrayIf': ('retention', 'ArrayIf'), 'quantilesExactExclusiveArrayIf': ('quantilesExactExclusive', 'ArrayIf'), 'kurtSampArrayIf': ('kurtSamp', 'ArrayIf'), 'stddevSampArrayIf': ('stddevSamp', 'ArrayIf'), 'quantilesBFloat16ArrayIf': ('quantilesBFloat16', 'ArrayIf'), 'quantilesGKArrayIf': ('quantilesGK', 'ArrayIf'), 'mannWhitneyUTestArrayIf': ('mannWhitneyUTest', 'ArrayIf'), 'exponentialMovingAverageArrayIf': ('exponentialMovingAverage', 'ArrayIf'), 'meanZTestArrayIf': ('meanZTest', 'ArrayIf'), 'groupBitmapAndArrayIf': ('groupBitmapAnd', 'ArrayIf'), 'countArrayIf': ('count', 'ArrayIf'), 'contingencyArrayIf': ('contingency', 'ArrayIf'), 'quantileTimingWeightedForEach': ('quantileTimingWeighted', 'ForEach'), 'quantilesExactForEach': ('quantilesExact', 'ForEach'), 'simpleLinearRegressionForEach': ('simpleLinearRegression', 'ForEach'), 'groupBitmapForEach': ('groupBitmap', 'ForEach'), 'sumCountForEach': ('sumCount', 'ForEach'), 'quantileExactHighForEach': ('quantileExactHigh', 'ForEach'), 'anyLastForEach': ('anyLast', 'ForEach'), 'quantilesDeterministicForEach': ('quantilesDeterministic', 'ForEach'), 'entropyForEach': ('entropy', 'ForEach'), 'quantileTDigestForEach': ('quantileTDigest', 'ForEach'), 'sequenceNextNodeForEach': ('sequenceNextNode', 'ForEach'), 'studentTTestForEach': ('studentTTest', 'ForEach'), 'rankCorrForEach': ('rankCorr', 'ForEach'), 'maxIntersectionsForEach': ('maxIntersections', 'ForEach'), 'deltaSumForEach': ('deltaSum', 'ForEach'), 'covarSampForEach': ('covarSamp', 'ForEach'), 'varPopForEach': ('varPop', 'ForEach'), 'stochasticLogisticRegressionForEach': ('stochasticLogisticRegression', 'ForEach'), 'groupArrayLastForEach': ('groupArrayLast', 'ForEach'), 'groupConcatForEach': ('groupConcat', 'ForEach'), 'windowFunnelForEach': ('windowFunnel', 'ForEach'), 'kolmogorovSmirnovTestForEach': ('kolmogorovSmirnovTest', 'ForEach'), 'maxMapForEach': ('maxMap', 'ForEach'), 'largestTriangleThreeBucketsForEach': ('largestTriangleThreeBuckets', 'ForEach'), 'quantilesExactWeightedForEach': ('quantilesExactWeighted', 'ForEach'), 'quantileExactForEach': ('quantileExact', 'ForEach'), 'topKWeightedForEach': ('topKWeighted', 'ForEach'), 'groupUniqArrayForEach': ('groupUniqArray', 'ForEach'), 'uniqExactForEach': ('uniqExact', 'ForEach'), 'stddevPopForEach': ('stddevPop', 'ForEach'), 'maxForEach': ('max', 'ForEach'), 'topKForEach': ('topK', 'ForEach'), 'groupBitXorForEach': ('groupBitXor', 'ForEach'), 'avgForEach': ('avg', 'ForEach'), 'uniqForEach': ('uniq', 'ForEach'), 'quantilesExactHighForEach': ('quantilesExactHigh', 'ForEach'), 'quantileExactWeightedForEach': ('quantileExactWeighted', 'ForEach'), 'minMapForEach': ('minMap', 'ForEach'), 'anyHeavyForEach': ('anyHeavy', 'ForEach'), 'groupArraySampleForEach': ('groupArraySample', 'ForEach'), 'theilsUForEach': ('theilsU', 'ForEach'), 'minForEach': ('min', 'ForEach'), 'boundingRatioForEach': ('boundingRatio', 'ForEach'), 'quantilesTDigestForEach': ('quantilesTDigest', 'ForEach'), 'quantileDeterministicForEach': ('quantileDeterministic', 'ForEach'), 'last_valueForEach': ('last_value', 'ForEach'), 'cramersVForEach': ('cramersV', 'ForEach'), 'first_valueForEach': ('first_value', 'ForEach'), 'groupBitOrForEach': ('groupBitOr', 'ForEach'), 'argMinForEach': ('argMin', 'ForEach'), 'skewPopForEach': ('skewPop', 'ForEach'), 'uniqCombined64ForEach': ('uniqCombined64', 'ForEach'), 'quantilesTDigestWeightedForEach': ('quantilesTDigestWeighted', 'ForEach'), 'uniqThetaForEach': ('uniqTheta', 'ForEach'), 'quantilesInterpolatedWeightedForEach': ('quantilesInterpolatedWeighted', 'ForEach'), 'covarPopForEach': ('covarPop', 'ForEach'), 'cramersVBiasCorrectedForEach': ('cramersVBiasCorrected', 'ForEach'), 'avgWeightedForEach': ('avgWeighted', 'ForEach'), 'quantileExactLowForEach': ('quantileExactLow', 'ForEach'), 'groupArrayForEach': ('groupArray', 'ForEach'), 'sumWithOverflowForEach': ('sumWithOverflow', 'ForEach'), 'quantileForEach': ('quantile', 'ForEach'), 'categoricalInformationValueForEach': ('categoricalInformationValue', 'ForEach'), 'exponentialTimeDecayedAvgForEach': ('exponentialTimeDecayedAvg', 'ForEach'), 'sparkBarForEach': ('sparkBar', 'ForEach'), 'groupBitmapOrForEach': ('groupBitmapOr', 'ForEach'), 'argMaxForEach': ('argMax', 'ForEach'), 'quantilesBFloat16WeightedForEach': ('quantilesBFloat16Weighted', 'ForEach'), 'quantilesForEach': ('quantiles', 'ForEach'), 'quantilesTimingWeightedForEach': ('quantilesTimingWeighted', 'ForEach'), 'medianForEach': ('median', 'ForEach'), 'groupArrayMovingSumForEach': ('groupArrayMovingSum', 'ForEach'), 'sumForEach': ('sum', 'ForEach'), 'welchTTestForEach': ('welchTTest', 'ForEach'), 'quantileTDigestWeightedForEach': ('quantileTDigestWeighted', 'ForEach'), 'quantileTimingForEach': ('quantileTiming', 'ForEach'), 'sequenceCountForEach': ('sequenceCount', 'ForEach'), 'histogramForEach': ('histogram', 'ForEach'), 'quantileBFloat16ForEach': ('quantileBFloat16', 'ForEach'), 'uniqHLL12ForEach': ('uniqHLL12', 'ForEach'), 'quantileExactInclusiveForEach': ('quantileExactInclusive', 'ForEach'), 'approx_top_sumForEach': ('approx_top_sum', 'ForEach'), 'quantileGKForEach': ('quantileGK', 'ForEach'), 'kurtPopForEach': ('kurtPop', 'ForEach'), 'corrForEach': ('corr', 'ForEach'), 'skewSampForEach': ('skewSamp', 'ForEach'), 'quantileBFloat16WeightedForEach': ('quantileBFloat16Weighted', 'ForEach'), 'quantileInterpolatedWeightedForEach': ('quantileInterpolatedWeighted', 'ForEach'), 'quantilesExactLowForEach': ('quantilesExactLow', 'ForEach'), 'groupBitmapXorForEach': ('groupBitmapXor', 'ForEach'), 'sumMapForEach': ('sumMap', 'ForEach'), 'stochasticLinearRegressionForEach': ('stochasticLinearRegression', 'ForEach'), 'uniqCombinedForEach': ('uniqCombined', 'ForEach'), 'intervalLengthSumForEach': ('intervalLengthSum', 'ForEach'), 'sumKahanForEach': ('sumKahan', 'ForEach'), 'groupArrayInsertAtForEach': ('groupArrayInsertAt', 'ForEach'), 'maxIntersectionsPositionForEach': ('maxIntersectionsPosition', 'ForEach'), 'uniqUpToForEach': ('uniqUpTo', 'ForEach'), 'groupBitAndForEach': ('groupBitAnd', 'ForEach'), 'sequenceMatchForEach': ('sequenceMatch', 'ForEach'), 'deltaSumTimestampForEach': ('deltaSumTimestamp', 'ForEach'), 'anyForEach': ('any', 'ForEach'), 'quantilesTimingForEach': ('quantilesTiming', 'ForEach'), 'varSampForEach': ('varSamp', 'ForEach'), 'groupArrayMovingAvgForEach': ('groupArrayMovingAvg', 'ForEach'), 'retentionForEach': ('retention', 'ForEach'), 'quantilesExactExclusiveForEach': ('quantilesExactExclusive', 'ForEach'), 'kurtSampForEach': ('kurtSamp', 'ForEach'), 'stddevSampForEach': ('stddevSamp', 'ForEach'), 'quantilesBFloat16ForEach': ('quantilesBFloat16', 'ForEach'), 'quantilesGKForEach': ('quantilesGK', 'ForEach'), 'mannWhitneyUTestForEach': ('mannWhitneyUTest', 'ForEach'), 'exponentialMovingAverageForEach': ('exponentialMovingAverage', 'ForEach'), 'meanZTestForEach': ('meanZTest', 'ForEach'), 'groupBitmapAndForEach': ('groupBitmapAnd', 'ForEach'), 'countForEach': ('count', 'ForEach'), 'contingencyForEach': ('contingency', 'ForEach'), 'quantileTimingWeightedOrNull': ('quantileTimingWeighted', 'OrNull'), 'quantilesExactOrNull': ('quantilesExact', 'OrNull'), 'simpleLinearRegressionOrNull': ('simpleLinearRegression', 'OrNull'), 'groupBitmapOrNull': ('groupBitmap', 'OrNull'), 'sumCountOrNull': ('sumCount', 'OrNull'), 'quantileExactHighOrNull': ('quantileExactHigh', 'OrNull'), 'anyLastOrNull': ('anyLast', 'OrNull'), 'quantilesDeterministicOrNull': ('quantilesDeterministic', 'OrNull'), 'entropyOrNull': ('entropy', 'OrNull'), 'quantileTDigestOrNull': ('quantileTDigest', 'OrNull'), 'sequenceNextNodeOrNull': ('sequenceNextNode', 'OrNull'), 'studentTTestOrNull': ('studentTTest', 'OrNull'), 'rankCorrOrNull': ('rankCorr', 'OrNull'), 'maxIntersectionsOrNull': ('maxIntersections', 'OrNull'), 'deltaSumOrNull': ('deltaSum', 'OrNull'), 'covarSampOrNull': ('covarSamp', 'OrNull'), 'varPopOrNull': ('varPop', 'OrNull'), 'stochasticLogisticRegressionOrNull': ('stochasticLogisticRegression', 'OrNull'), 'groupArrayLastOrNull': ('groupArrayLast', 'OrNull'), 'groupConcatOrNull': ('groupConcat', 'OrNull'), 'windowFunnelOrNull': ('windowFunnel', 'OrNull'), 'kolmogorovSmirnovTestOrNull': ('kolmogorovSmirnovTest', 'OrNull'), 'maxMapOrNull': ('maxMap', 'OrNull'), 'largestTriangleThreeBucketsOrNull': ('largestTriangleThreeBuckets', 'OrNull'), 'quantilesExactWeightedOrNull': ('quantilesExactWeighted', 'OrNull'), 'quantileExactOrNull': ('quantileExact', 'OrNull'), 'topKWeightedOrNull': ('topKWeighted', 'OrNull'), 'groupUniqArrayOrNull': ('groupUniqArray', 'OrNull'), 'uniqExactOrNull': ('uniqExact', 'OrNull'), 'stddevPopOrNull': ('stddevPop', 'OrNull'), 'maxOrNull': ('max', 'OrNull'), 'topKOrNull': ('topK', 'OrNull'), 'groupBitXorOrNull': ('groupBitXor', 'OrNull'), 'avgOrNull': ('avg', 'OrNull'), 'uniqOrNull': ('uniq', 'OrNull'), 'quantilesExactHighOrNull': ('quantilesExactHigh', 'OrNull'), 'quantileExactWeightedOrNull': ('quantileExactWeighted', 'OrNull'), 'minMapOrNull': ('minMap', 'OrNull'), 'anyHeavyOrNull': ('anyHeavy', 'OrNull'), 'groupArraySampleOrNull': ('groupArraySample', 'OrNull'), 'theilsUOrNull': ('theilsU', 'OrNull'), 'minOrNull': ('min', 'OrNull'), 'boundingRatioOrNull': ('boundingRatio', 'OrNull'), 'quantilesTDigestOrNull': ('quantilesTDigest', 'OrNull'), 'quantileDeterministicOrNull': ('quantileDeterministic', 'OrNull'), 'last_valueOrNull': ('last_value', 'OrNull'), 'cramersVOrNull': ('cramersV', 'OrNull'), 'first_valueOrNull': ('first_value', 'OrNull'), 'groupBitOrOrNull': ('groupBitOr', 'OrNull'), 'argMinOrNull': ('argMin', 'OrNull'), 'skewPopOrNull': ('skewPop', 'OrNull'), 'uniqCombined64OrNull': ('uniqCombined64', 'OrNull'), 'quantilesTDigestWeightedOrNull': ('quantilesTDigestWeighted', 'OrNull'), 'uniqThetaOrNull': ('uniqTheta', 'OrNull'), 'quantilesInterpolatedWeightedOrNull': ('quantilesInterpolatedWeighted', 'OrNull'), 'covarPopOrNull': ('covarPop', 'OrNull'), 'cramersVBiasCorrectedOrNull': ('cramersVBiasCorrected', 'OrNull'), 'avgWeightedOrNull': ('avgWeighted', 'OrNull'), 'quantileExactLowOrNull': ('quantileExactLow', 'OrNull'), 'groupArrayOrNull': ('groupArray', 'OrNull'), 'sumWithOverflowOrNull': ('sumWithOverflow', 'OrNull'), 'quantileOrNull': ('quantile', 'OrNull'), 'categoricalInformationValueOrNull': ('categoricalInformationValue', 'OrNull'), 'exponentialTimeDecayedAvgOrNull': ('exponentialTimeDecayedAvg', 'OrNull'), 'sparkBarOrNull': ('sparkBar', 'OrNull'), 'groupBitmapOrOrNull': ('groupBitmapOr', 'OrNull'), 'argMaxOrNull': ('argMax', 'OrNull'), 'quantilesBFloat16WeightedOrNull': ('quantilesBFloat16Weighted', 'OrNull'), 'quantilesOrNull': ('quantiles', 'OrNull'), 'quantilesTimingWeightedOrNull': ('quantilesTimingWeighted', 'OrNull'), 'medianOrNull': ('median', 'OrNull'), 'groupArrayMovingSumOrNull': ('groupArrayMovingSum', 'OrNull'), 'sumOrNull': ('sum', 'OrNull'), 'welchTTestOrNull': ('welchTTest', 'OrNull'), 'quantileTDigestWeightedOrNull': ('quantileTDigestWeighted', 'OrNull'), 'quantileTimingOrNull': ('quantileTiming', 'OrNull'), 'sequenceCountOrNull': ('sequenceCount', 'OrNull'), 'histogramOrNull': ('histogram', 'OrNull'), 'quantileBFloat16OrNull': ('quantileBFloat16', 'OrNull'), 'uniqHLL12OrNull': ('uniqHLL12', 'OrNull'), 'quantileExactInclusiveOrNull': ('quantileExactInclusive', 'OrNull'), 'approx_top_sumOrNull': ('approx_top_sum', 'OrNull'), 'quantileGKOrNull': ('quantileGK', 'OrNull'), 'kurtPopOrNull': ('kurtPop', 'OrNull'), 'corrOrNull': ('corr', 'OrNull'), 'skewSampOrNull': ('skewSamp', 'OrNull'), 'quantileBFloat16WeightedOrNull': ('quantileBFloat16Weighted', 'OrNull'), 'quantileInterpolatedWeightedOrNull': ('quantileInterpolatedWeighted', 'OrNull'), 'quantilesExactLowOrNull': ('quantilesExactLow', 'OrNull'), 'groupBitmapXorOrNull': ('groupBitmapXor', 'OrNull'), 'sumMapOrNull': ('sumMap', 'OrNull'), 'stochasticLinearRegressionOrNull': ('stochasticLinearRegression', 'OrNull'), 'uniqCombinedOrNull': ('uniqCombined', 'OrNull'), 'intervalLengthSumOrNull': ('intervalLengthSum', 'OrNull'), 'sumKahanOrNull': ('sumKahan', 'OrNull'), 'groupArrayInsertAtOrNull': ('groupArrayInsertAt', 'OrNull'), 'maxIntersectionsPositionOrNull': ('maxIntersectionsPosition', 'OrNull'), 'uniqUpToOrNull': ('uniqUpTo', 'OrNull'), 'groupBitAndOrNull': ('groupBitAnd', 'OrNull'), 'sequenceMatchOrNull': ('sequenceMatch', 'OrNull'), 'deltaSumTimestampOrNull': ('deltaSumTimestamp', 'OrNull'), 'anyOrNull': ('any', 'OrNull'), 'quantilesTimingOrNull': ('quantilesTiming', 'OrNull'), 'varSampOrNull': ('varSamp', 'OrNull'), 'groupArrayMovingAvgOrNull': ('groupArrayMovingAvg', 'OrNull'), 'retentionOrNull': ('retention', 'OrNull'), 'quantilesExactExclusiveOrNull': ('quantilesExactExclusive', 'OrNull'), 'kurtSampOrNull': ('kurtSamp', 'OrNull'), 'stddevSampOrNull': ('stddevSamp', 'OrNull'), 'quantilesBFloat16OrNull': ('quantilesBFloat16', 'OrNull'), 'quantilesGKOrNull': ('quantilesGK', 'OrNull'), 'mannWhitneyUTestOrNull': ('mannWhitneyUTest', 'OrNull'), 'exponentialMovingAverageOrNull': ('exponentialMovingAverage', 'OrNull'), 'meanZTestOrNull': ('meanZTest', 'OrNull'), 'groupBitmapAndOrNull': ('groupBitmapAnd', 'OrNull'), 'countOrNull': ('count', 'OrNull'), 'contingencyOrNull': ('contingency', 'OrNull'), 'quantileTimingWeightedArgMin': ('quantileTimingWeighted', 'ArgMin'), 'quantilesExactArgMin': ('quantilesExact', 'ArgMin'), 'simpleLinearRegressionArgMin': ('simpleLinearRegression', 'ArgMin'), 'groupBitmapArgMin': ('groupBitmap', 'ArgMin'), 'sumCountArgMin': ('sumCount', 'ArgMin'), 'quantileExactHighArgMin': ('quantileExactHigh', 'ArgMin'), 'anyLastArgMin': ('anyLast', 'ArgMin'), 'quantilesDeterministicArgMin': ('quantilesDeterministic', 'ArgMin'), 'entropyArgMin': ('entropy', 'ArgMin'), 'quantileTDigestArgMin': ('quantileTDigest', 'ArgMin'), 'sequenceNextNodeArgMin': ('sequenceNextNode', 'ArgMin'), 'studentTTestArgMin': ('studentTTest', 'ArgMin'), 'rankCorrArgMin': ('rankCorr', 'ArgMin'), 'maxIntersectionsArgMin': ('maxIntersections', 'ArgMin'), 'deltaSumArgMin': ('deltaSum', 'ArgMin'), 'covarSampArgMin': ('covarSamp', 'ArgMin'), 'varPopArgMin': ('varPop', 'ArgMin'), 'stochasticLogisticRegressionArgMin': ('stochasticLogisticRegression', 'ArgMin'), 'groupArrayLastArgMin': ('groupArrayLast', 'ArgMin'), 'groupConcatArgMin': ('groupConcat', 'ArgMin'), 'windowFunnelArgMin': ('windowFunnel', 'ArgMin'), 'kolmogorovSmirnovTestArgMin': ('kolmogorovSmirnovTest', 'ArgMin'), 'maxMapArgMin': ('maxMap', 'ArgMin'), 'largestTriangleThreeBucketsArgMin': ('largestTriangleThreeBuckets', 'ArgMin'), 'quantilesExactWeightedArgMin': ('quantilesExactWeighted', 'ArgMin'), 'quantileExactArgMin': ('quantileExact', 'ArgMin'), 'topKWeightedArgMin': ('topKWeighted', 'ArgMin'), 'groupUniqArrayArgMin': ('groupUniqArray', 'ArgMin'), 'uniqExactArgMin': ('uniqExact', 'ArgMin'), 'stddevPopArgMin': ('stddevPop', 'ArgMin'), 'maxArgMin': ('max', 'ArgMin'), 'topKArgMin': ('topK', 'ArgMin'), 'groupBitXorArgMin': ('groupBitXor', 'ArgMin'), 'avgArgMin': ('avg', 'ArgMin'), 'uniqArgMin': ('uniq', 'ArgMin'), 'quantilesExactHighArgMin': ('quantilesExactHigh', 'ArgMin'), 'quantileExactWeightedArgMin': ('quantileExactWeighted', 'ArgMin'), 'minMapArgMin': ('minMap', 'ArgMin'), 'anyHeavyArgMin': ('anyHeavy', 'ArgMin'), 'groupArraySampleArgMin': ('groupArraySample', 'ArgMin'), 'theilsUArgMin': ('theilsU', 'ArgMin'), 'minArgMin': ('min', 'ArgMin'), 'boundingRatioArgMin': ('boundingRatio', 'ArgMin'), 'quantilesTDigestArgMin': ('quantilesTDigest', 'ArgMin'), 'quantileDeterministicArgMin': ('quantileDeterministic', 'ArgMin'), 'last_valueArgMin': ('last_value', 'ArgMin'), 'cramersVArgMin': ('cramersV', 'ArgMin'), 'first_valueArgMin': ('first_value', 'ArgMin'), 'groupBitOrArgMin': ('groupBitOr', 'ArgMin'), 'argMinArgMin': ('argMin', 'ArgMin'), 'skewPopArgMin': ('skewPop', 'ArgMin'), 'uniqCombined64ArgMin': ('uniqCombined64', 'ArgMin'), 'quantilesTDigestWeightedArgMin': ('quantilesTDigestWeighted', 'ArgMin'), 'uniqThetaArgMin': ('uniqTheta', 'ArgMin'), 'quantilesInterpolatedWeightedArgMin': ('quantilesInterpolatedWeighted', 'ArgMin'), 'covarPopArgMin': ('covarPop', 'ArgMin'), 'cramersVBiasCorrectedArgMin': ('cramersVBiasCorrected', 'ArgMin'), 'avgWeightedArgMin': ('avgWeighted', 'ArgMin'), 'quantileExactLowArgMin': ('quantileExactLow', 'ArgMin'), 'groupArrayArgMin': ('groupArray', 'ArgMin'), 'sumWithOverflowArgMin': ('sumWithOverflow', 'ArgMin'), 'quantileArgMin': ('quantile', 'ArgMin'), 'categoricalInformationValueArgMin': ('categoricalInformationValue', 'ArgMin'), 'exponentialTimeDecayedAvgArgMin': ('exponentialTimeDecayedAvg', 'ArgMin'), 'sparkBarArgMin': ('sparkBar', 'ArgMin'), 'groupBitmapOrArgMin': ('groupBitmapOr', 'ArgMin'), 'argMaxArgMin': ('argMax', 'ArgMin'), 'quantilesBFloat16WeightedArgMin': ('quantilesBFloat16Weighted', 'ArgMin'), 'quantilesArgMin': ('quantiles', 'ArgMin'), 'quantilesTimingWeightedArgMin': ('quantilesTimingWeighted', 'ArgMin'), 'medianArgMin': ('median', 'ArgMin'), 'groupArrayMovingSumArgMin': ('groupArrayMovingSum', 'ArgMin'), 'sumArgMin': ('sum', 'ArgMin'), 'welchTTestArgMin': ('welchTTest', 'ArgMin'), 'quantileTDigestWeightedArgMin': ('quantileTDigestWeighted', 'ArgMin'), 'quantileTimingArgMin': ('quantileTiming', 'ArgMin'), 'sequenceCountArgMin': ('sequenceCount', 'ArgMin'), 'histogramArgMin': ('histogram', 'ArgMin'), 'quantileBFloat16ArgMin': ('quantileBFloat16', 'ArgMin'), 'uniqHLL12ArgMin': ('uniqHLL12', 'ArgMin'), 'quantileExactInclusiveArgMin': ('quantileExactInclusive', 'ArgMin'), 'approx_top_sumArgMin': ('approx_top_sum', 'ArgMin'), 'quantileGKArgMin': ('quantileGK', 'ArgMin'), 'kurtPopArgMin': ('kurtPop', 'ArgMin'), 'corrArgMin': ('corr', 'ArgMin'), 'skewSampArgMin': ('skewSamp', 'ArgMin'), 'quantileBFloat16WeightedArgMin': ('quantileBFloat16Weighted', 'ArgMin'), 'quantileInterpolatedWeightedArgMin': ('quantileInterpolatedWeighted', 'ArgMin'), 'quantilesExactLowArgMin': ('quantilesExactLow', 'ArgMin'), 'groupBitmapXorArgMin': ('groupBitmapXor', 'ArgMin'), 'sumMapArgMin': ('sumMap', 'ArgMin'), 'stochasticLinearRegressionArgMin': ('stochasticLinearRegression', 'ArgMin'), 'uniqCombinedArgMin': ('uniqCombined', 'ArgMin'), 'intervalLengthSumArgMin': ('intervalLengthSum', 'ArgMin'), 'sumKahanArgMin': ('sumKahan', 'ArgMin'), 'groupArrayInsertAtArgMin': ('groupArrayInsertAt', 'ArgMin'), 'maxIntersectionsPositionArgMin': ('maxIntersectionsPosition', 'ArgMin'), 'uniqUpToArgMin': ('uniqUpTo', 'ArgMin'), 'groupBitAndArgMin': ('groupBitAnd', 'ArgMin'), 'sequenceMatchArgMin': ('sequenceMatch', 'ArgMin'), 'deltaSumTimestampArgMin': ('deltaSumTimestamp', 'ArgMin'), 'anyArgMin': ('any', 'ArgMin'), 'quantilesTimingArgMin': ('quantilesTiming', 'ArgMin'), 'varSampArgMin': ('varSamp', 'ArgMin'), 'groupArrayMovingAvgArgMin': ('groupArrayMovingAvg', 'ArgMin'), 'retentionArgMin': ('retention', 'ArgMin'), 'quantilesExactExclusiveArgMin': ('quantilesExactExclusive', 'ArgMin'), 'kurtSampArgMin': ('kurtSamp', 'ArgMin'), 'stddevSampArgMin': ('stddevSamp', 'ArgMin'), 'quantilesBFloat16ArgMin': ('quantilesBFloat16', 'ArgMin'), 'quantilesGKArgMin': ('quantilesGK', 'ArgMin'), 'mannWhitneyUTestArgMin': ('mannWhitneyUTest', 'ArgMin'), 'exponentialMovingAverageArgMin': ('exponentialMovingAverage', 'ArgMin'), 'meanZTestArgMin': ('meanZTest', 'ArgMin'), 'groupBitmapAndArgMin': ('groupBitmapAnd', 'ArgMin'), 'countArgMin': ('count', 'ArgMin'), 'contingencyArgMin': ('contingency', 'ArgMin'), 'quantileTimingWeightedArgMax': ('quantileTimingWeighted', 'ArgMax'), 'quantilesExactArgMax': ('quantilesExact', 'ArgMax'), 'simpleLinearRegressionArgMax': ('simpleLinearRegression', 'ArgMax'), 'groupBitmapArgMax': ('groupBitmap', 'ArgMax'), 'sumCountArgMax': ('sumCount', 'ArgMax'), 'quantileExactHighArgMax': ('quantileExactHigh', 'ArgMax'), 'anyLastArgMax': ('anyLast', 'ArgMax'), 'quantilesDeterministicArgMax': ('quantilesDeterministic', 'ArgMax'), 'entropyArgMax': ('entropy', 'ArgMax'), 'quantileTDigestArgMax': ('quantileTDigest', 'ArgMax'), 'sequenceNextNodeArgMax': ('sequenceNextNode', 'ArgMax'), 'studentTTestArgMax': ('studentTTest', 'ArgMax'), 'rankCorrArgMax': ('rankCorr', 'ArgMax'), 'maxIntersectionsArgMax': ('maxIntersections', 'ArgMax'), 'deltaSumArgMax': ('deltaSum', 'ArgMax'), 'covarSampArgMax': ('covarSamp', 'ArgMax'), 'varPopArgMax': ('varPop', 'ArgMax'), 'stochasticLogisticRegressionArgMax': ('stochasticLogisticRegression', 'ArgMax'), 'groupArrayLastArgMax': ('groupArrayLast', 'ArgMax'), 'groupConcatArgMax': ('groupConcat', 'ArgMax'), 'windowFunnelArgMax': ('windowFunnel', 'ArgMax'), 'kolmogorovSmirnovTestArgMax': ('kolmogorovSmirnovTest', 'ArgMax'), 'maxMapArgMax': ('maxMap', 'ArgMax'), 'largestTriangleThreeBucketsArgMax': ('largestTriangleThreeBuckets', 'ArgMax'), 'quantilesExactWeightedArgMax': ('quantilesExactWeighted', 'ArgMax'), 'quantileExactArgMax': ('quantileExact', 'ArgMax'), 'topKWeightedArgMax': ('topKWeighted', 'ArgMax'), 'groupUniqArrayArgMax': ('groupUniqArray', 'ArgMax'), 'uniqExactArgMax': ('uniqExact', 'ArgMax'), 'stddevPopArgMax': ('stddevPop', 'ArgMax'), 'maxArgMax': ('max', 'ArgMax'), 'topKArgMax': ('topK', 'ArgMax'), 'groupBitXorArgMax': ('groupBitXor', 'ArgMax'), 'avgArgMax': ('avg', 'ArgMax'), 'uniqArgMax': ('uniq', 'ArgMax'), 'quantilesExactHighArgMax': ('quantilesExactHigh', 'ArgMax'), 'quantileExactWeightedArgMax': ('quantileExactWeighted', 'ArgMax'), 'minMapArgMax': ('minMap', 'ArgMax'), 'anyHeavyArgMax': ('anyHeavy', 'ArgMax'), 'groupArraySampleArgMax': ('groupArraySample', 'ArgMax'), 'theilsUArgMax': ('theilsU', 'ArgMax'), 'minArgMax': ('min', 'ArgMax'), 'boundingRatioArgMax': ('boundingRatio', 'ArgMax'), 'quantilesTDigestArgMax': ('quantilesTDigest', 'ArgMax'), 'quantileDeterministicArgMax': ('quantileDeterministic', 'ArgMax'), 'last_valueArgMax': ('last_value', 'ArgMax'), 'cramersVArgMax': ('cramersV', 'ArgMax'), 'first_valueArgMax': ('first_value', 'ArgMax'), 'groupBitOrArgMax': ('groupBitOr', 'ArgMax'), 'argMinArgMax': ('argMin', 'ArgMax'), 'skewPopArgMax': ('skewPop', 'ArgMax'), 'uniqCombined64ArgMax': ('uniqCombined64', 'ArgMax'), 'quantilesTDigestWeightedArgMax': ('quantilesTDigestWeighted', 'ArgMax'), 'uniqThetaArgMax': ('uniqTheta', 'ArgMax'), 'quantilesInterpolatedWeightedArgMax': ('quantilesInterpolatedWeighted', 'ArgMax'), 'covarPopArgMax': ('covarPop', 'ArgMax'), 'cramersVBiasCorrectedArgMax': ('cramersVBiasCorrected', 'ArgMax'), 'avgWeightedArgMax': ('avgWeighted', 'ArgMax'), 'quantileExactLowArgMax': ('quantileExactLow', 'ArgMax'), 'groupArrayArgMax': ('groupArray', 'ArgMax'), 'sumWithOverflowArgMax': ('sumWithOverflow', 'ArgMax'), 'quantileArgMax': ('quantile', 'ArgMax'), 'categoricalInformationValueArgMax': ('categoricalInformationValue', 'ArgMax'), 'exponentialTimeDecayedAvgArgMax': ('exponentialTimeDecayedAvg', 'ArgMax'), 'sparkBarArgMax': ('sparkBar', 'ArgMax'), 'groupBitmapOrArgMax': ('groupBitmapOr', 'ArgMax'), 'argMaxArgMax': ('argMax', 'ArgMax'), 'quantilesBFloat16WeightedArgMax': ('quantilesBFloat16Weighted', 'ArgMax'), 'quantilesArgMax': ('quantiles', 'ArgMax'), 'quantilesTimingWeightedArgMax': ('quantilesTimingWeighted', 'ArgMax'), 'medianArgMax': ('median', 'ArgMax'), 'groupArrayMovingSumArgMax': ('groupArrayMovingSum', 'ArgMax'), 'sumArgMax': ('sum', 'ArgMax'), 'welchTTestArgMax': ('welchTTest', 'ArgMax'), 'quantileTDigestWeightedArgMax': ('quantileTDigestWeighted', 'ArgMax'), 'quantileTimingArgMax': ('quantileTiming', 'ArgMax'), 'sequenceCountArgMax': ('sequenceCount', 'ArgMax'), 'histogramArgMax': ('histogram', 'ArgMax'), 'quantileBFloat16ArgMax': ('quantileBFloat16', 'ArgMax'), 'uniqHLL12ArgMax': ('uniqHLL12', 'ArgMax'), 'quantileExactInclusiveArgMax': ('quantileExactInclusive', 'ArgMax'), 'approx_top_sumArgMax': ('approx_top_sum', 'ArgMax'), 'quantileGKArgMax': ('quantileGK', 'ArgMax'), 'kurtPopArgMax': ('kurtPop', 'ArgMax'), 'corrArgMax': ('corr', 'ArgMax'), 'skewSampArgMax': ('skewSamp', 'ArgMax'), 'quantileBFloat16WeightedArgMax': ('quantileBFloat16Weighted', 'ArgMax'), 'quantileInterpolatedWeightedArgMax': ('quantileInterpolatedWeighted', 'ArgMax'), 'quantilesExactLowArgMax': ('quantilesExactLow', 'ArgMax'), 'groupBitmapXorArgMax': ('groupBitmapXor', 'ArgMax'), 'sumMapArgMax': ('sumMap', 'ArgMax'), 'stochasticLinearRegressionArgMax': ('stochasticLinearRegression', 'ArgMax'), 'uniqCombinedArgMax': ('uniqCombined', 'ArgMax'), 'intervalLengthSumArgMax': ('intervalLengthSum', 'ArgMax'), 'sumKahanArgMax': ('sumKahan', 'ArgMax'), 'groupArrayInsertAtArgMax': ('groupArrayInsertAt', 'ArgMax'), 'maxIntersectionsPositionArgMax': ('maxIntersectionsPosition', 'ArgMax'), 'uniqUpToArgMax': ('uniqUpTo', 'ArgMax'), 'groupBitAndArgMax': ('groupBitAnd', 'ArgMax'), 'sequenceMatchArgMax': ('sequenceMatch', 'ArgMax'), 'deltaSumTimestampArgMax': ('deltaSumTimestamp', 'ArgMax'), 'anyArgMax': ('any', 'ArgMax'), 'quantilesTimingArgMax': ('quantilesTiming', 'ArgMax'), 'varSampArgMax': ('varSamp', 'ArgMax'), 'groupArrayMovingAvgArgMax': ('groupArrayMovingAvg', 'ArgMax'), 'retentionArgMax': ('retention', 'ArgMax'), 'quantilesExactExclusiveArgMax': ('quantilesExactExclusive', 'ArgMax'), 'kurtSampArgMax': ('kurtSamp', 'ArgMax'), 'stddevSampArgMax': ('stddevSamp', 'ArgMax'), 'quantilesBFloat16ArgMax': ('quantilesBFloat16', 'ArgMax'), 'quantilesGKArgMax': ('quantilesGK', 'ArgMax'), 'mannWhitneyUTestArgMax': ('mannWhitneyUTest', 'ArgMax'), 'exponentialMovingAverageArgMax': ('exponentialMovingAverage', 'ArgMax'), 'meanZTestArgMax': ('meanZTest', 'ArgMax'), 'groupBitmapAndArgMax': ('groupBitmapAnd', 'ArgMax'), 'countArgMax': ('count', 'ArgMax'), 'contingencyArgMax': ('contingency', 'ArgMax'), 'quantileTimingWeightedArray': ('quantileTimingWeighted', 'Array'), 'quantilesExactArray': ('quantilesExact', 'Array'), 'simpleLinearRegressionArray': ('simpleLinearRegression', 'Array'), 'groupBitmapArray': ('groupBitmap', 'Array'), 'sumCountArray': ('sumCount', 'Array'), 'quantileExactHighArray': ('quantileExactHigh', 'Array'), 'anyLastArray': ('anyLast', 'Array'), 'quantilesDeterministicArray': ('quantilesDeterministic', 'Array'), 'entropyArray': ('entropy', 'Array'), 'quantileTDigestArray': ('quantileTDigest', 'Array'), 'sequenceNextNodeArray': ('sequenceNextNode', 'Array'), 'studentTTestArray': ('studentTTest', 'Array'), 'rankCorrArray': ('rankCorr', 'Array'), 'maxIntersectionsArray': ('maxIntersections', 'Array'), 'deltaSumArray': ('deltaSum', 'Array'), 'covarSampArray': ('covarSamp', 'Array'), 'varPopArray': ('varPop', 'Array'), 'stochasticLogisticRegressionArray': ('stochasticLogisticRegression', 'Array'), 'groupArrayLastArray': ('groupArrayLast', 'Array'), 'groupConcatArray': ('groupConcat', 'Array'), 'windowFunnelArray': ('windowFunnel', 'Array'), 'kolmogorovSmirnovTestArray': ('kolmogorovSmirnovTest', 'Array'), 'maxMapArray': ('maxMap', 'Array'), 'largestTriangleThreeBucketsArray': ('largestTriangleThreeBuckets', 'Array'), 'quantilesExactWeightedArray': ('quantilesExactWeighted', 'Array'), 'quantileExactArray': ('quantileExact', 'Array'), 'topKWeightedArray': ('topKWeighted', 'Array'), 'groupUniqArrayArray': ('groupUniqArray', 'Array'), 'uniqExactArray': ('uniqExact', 'Array'), 'stddevPopArray': ('stddevPop', 'Array'), 'maxArray': ('max', 'Array'), 'topKArray': ('topK', 'Array'), 'groupBitXorArray': ('groupBitXor', 'Array'), 'avgArray': ('avg', 'Array'), 'uniqArray': ('uniq', 'Array'), 'quantilesExactHighArray': ('quantilesExactHigh', 'Array'), 'quantileExactWeightedArray': ('quantileExactWeighted', 'Array'), 'minMapArray': ('minMap', 'Array'), 'anyHeavyArray': ('anyHeavy', 'Array'), 'groupArraySampleArray': ('groupArraySample', 'Array'), 'theilsUArray': ('theilsU', 'Array'), 'minArray': ('min', 'Array'), 'boundingRatioArray': ('boundingRatio', 'Array'), 'quantilesTDigestArray': ('quantilesTDigest', 'Array'), 'quantileDeterministicArray': ('quantileDeterministic', 'Array'), 'last_valueArray': ('last_value', 'Array'), 'cramersVArray': ('cramersV', 'Array'), 'first_valueArray': ('first_value', 'Array'), 'groupBitOrArray': ('groupBitOr', 'Array'), 'argMinArray': ('argMin', 'Array'), 'skewPopArray': ('skewPop', 'Array'), 'uniqCombined64Array': ('uniqCombined64', 'Array'), 'quantilesTDigestWeightedArray': ('quantilesTDigestWeighted', 'Array'), 'uniqThetaArray': ('uniqTheta', 'Array'), 'quantilesInterpolatedWeightedArray': ('quantilesInterpolatedWeighted', 'Array'), 'covarPopArray': ('covarPop', 'Array'), 'cramersVBiasCorrectedArray': ('cramersVBiasCorrected', 'Array'), 'avgWeightedArray': ('avgWeighted', 'Array'), 'quantileExactLowArray': ('quantileExactLow', 'Array'), 'groupArrayArray': ('groupArray', 'Array'), 'sumWithOverflowArray': ('sumWithOverflow', 'Array'), 'quantileArray': ('quantile', 'Array'), 'categoricalInformationValueArray': ('categoricalInformationValue', 'Array'), 'exponentialTimeDecayedAvgArray': ('exponentialTimeDecayedAvg', 'Array'), 'sparkBarArray': ('sparkBar', 'Array'), 'groupBitmapOrArray': ('groupBitmapOr', 'Array'), 'argMaxArray': ('argMax', 'Array'), 'quantilesBFloat16WeightedArray': ('quantilesBFloat16Weighted', 'Array'), 'quantilesArray': ('quantiles', 'Array'), 'quantilesTimingWeightedArray': ('quantilesTimingWeighted', 'Array'), 'medianArray': ('median', 'Array'), 'groupArrayMovingSumArray': ('groupArrayMovingSum', 'Array'), 'sumArray': ('sum', 'Array'), 'welchTTestArray': ('welchTTest', 'Array'), 'quantileTDigestWeightedArray': ('quantileTDigestWeighted', 'Array'), 'quantileTimingArray': ('quantileTiming', 'Array'), 'sequenceCountArray': ('sequenceCount', 'Array'), 'histogramArray': ('histogram', 'Array'), 'quantileBFloat16Array': ('quantileBFloat16', 'Array'), 'uniqHLL12Array': ('uniqHLL12', 'Array'), 'quantileExactInclusiveArray': ('quantileExactInclusive', 'Array'), 'approx_top_sumArray': ('approx_top_sum', 'Array'), 'quantileGKArray': ('quantileGK', 'Array'), 'kurtPopArray': ('kurtPop', 'Array'), 'corrArray': ('corr', 'Array'), 'skewSampArray': ('skewSamp', 'Array'), 'quantileBFloat16WeightedArray': ('quantileBFloat16Weighted', 'Array'), 'quantileInterpolatedWeightedArray': ('quantileInterpolatedWeighted', 'Array'), 'quantilesExactLowArray': ('quantilesExactLow', 'Array'), 'groupBitmapXorArray': ('groupBitmapXor', 'Array'), 'sumMapArray': ('sumMap', 'Array'), 'stochasticLinearRegressionArray': ('stochasticLinearRegression', 'Array'), 'uniqCombinedArray': ('uniqCombined', 'Array'), 'intervalLengthSumArray': ('intervalLengthSum', 'Array'), 'sumKahanArray': ('sumKahan', 'Array'), 'groupArrayInsertAtArray': ('groupArrayInsertAt', 'Array'), 'maxIntersectionsPositionArray': ('maxIntersectionsPosition', 'Array'), 'uniqUpToArray': ('uniqUpTo', 'Array'), 'groupBitAndArray': ('groupBitAnd', 'Array'), 'sequenceMatchArray': ('sequenceMatch', 'Array'), 'deltaSumTimestampArray': ('deltaSumTimestamp', 'Array'), 'anyArray': ('any', 'Array'), 'quantilesTimingArray': ('quantilesTiming', 'Array'), 'varSampArray': ('varSamp', 'Array'), 'groupArrayMovingAvgArray': ('groupArrayMovingAvg', 'Array'), 'retentionArray': ('retention', 'Array'), 'quantilesExactExclusiveArray': ('quantilesExactExclusive', 'Array'), 'kurtSampArray': ('kurtSamp', 'Array'), 'stddevSampArray': ('stddevSamp', 'Array'), 'quantilesBFloat16Array': ('quantilesBFloat16', 'Array'), 'quantilesGKArray': ('quantilesGK', 'Array'), 'mannWhitneyUTestArray': ('mannWhitneyUTest', 'Array'), 'exponentialMovingAverageArray': ('exponentialMovingAverage', 'Array'), 'meanZTestArray': ('meanZTest', 'Array'), 'groupBitmapAndArray': ('groupBitmapAnd', 'Array'), 'countArray': ('count', 'Array'), 'contingencyArray': ('contingency', 'Array'), 'quantileTimingWeightedState': ('quantileTimingWeighted', 'State'), 'quantilesExactState': ('quantilesExact', 'State'), 'simpleLinearRegressionState': ('simpleLinearRegression', 'State'), 'groupBitmapState': ('groupBitmap', 'State'), 'sumCountState': ('sumCount', 'State'), 'quantileExactHighState': ('quantileExactHigh', 'State'), 'anyLastState': ('anyLast', 'State'), 'quantilesDeterministicState': ('quantilesDeterministic', 'State'), 'entropyState': ('entropy', 'State'), 'quantileTDigestState': ('quantileTDigest', 'State'), 'sequenceNextNodeState': ('sequenceNextNode', 'State'), 'studentTTestState': ('studentTTest', 'State'), 'rankCorrState': ('rankCorr', 'State'), 'maxIntersectionsState': ('maxIntersections', 'State'), 'deltaSumState': ('deltaSum', 'State'), 'covarSampState': ('covarSamp', 'State'), 'varPopState': ('varPop', 'State'), 'stochasticLogisticRegressionState': ('stochasticLogisticRegression', 'State'), 'groupArrayLastState': ('groupArrayLast', 'State'), 'groupConcatState': ('groupConcat', 'State'), 'windowFunnelState': ('windowFunnel', 'State'), 'kolmogorovSmirnovTestState': ('kolmogorovSmirnovTest', 'State'), 'maxMapState': ('maxMap', 'State'), 'largestTriangleThreeBucketsState': ('largestTriangleThreeBuckets', 'State'), 'quantilesExactWeightedState': ('quantilesExactWeighted', 'State'), 'quantileExactState': ('quantileExact', 'State'), 'topKWeightedState': ('topKWeighted', 'State'), 'groupUniqArrayState': ('groupUniqArray', 'State'), 'uniqExactState': ('uniqExact', 'State'), 'stddevPopState': ('stddevPop', 'State'), 'maxState': ('max', 'State'), 'topKState': ('topK', 'State'), 'groupBitXorState': ('groupBitXor', 'State'), 'avgState': ('avg', 'State'), 'uniqState': ('uniq', 'State'), 'quantilesExactHighState': ('quantilesExactHigh', 'State'), 'quantileExactWeightedState': ('quantileExactWeighted', 'State'), 'minMapState': ('minMap', 'State'), 'anyHeavyState': ('anyHeavy', 'State'), 'groupArraySampleState': ('groupArraySample', 'State'), 'theilsUState': ('theilsU', 'State'), 'minState': ('min', 'State'), 'boundingRatioState': ('boundingRatio', 'State'), 'quantilesTDigestState': ('quantilesTDigest', 'State'), 'quantileDeterministicState': ('quantileDeterministic', 'State'), 'last_valueState': ('last_value', 'State'), 'cramersVState': ('cramersV', 'State'), 'first_valueState': ('first_value', 'State'), 'groupBitOrState': ('groupBitOr', 'State'), 'argMinState': ('argMin', 'State'), 'skewPopState': ('skewPop', 'State'), 'uniqCombined64State': ('uniqCombined64', 'State'), 'quantilesTDigestWeightedState': ('quantilesTDigestWeighted', 'State'), 'uniqThetaState': ('uniqTheta', 'State'), 'quantilesInterpolatedWeightedState': ('quantilesInterpolatedWeighted', 'State'), 'covarPopState': ('covarPop', 'State'), 'cramersVBiasCorrectedState': ('cramersVBiasCorrected', 'State'), 'avgWeightedState': ('avgWeighted', 'State'), 'quantileExactLowState': ('quantileExactLow', 'State'), 'groupArrayState': ('groupArray', 'State'), 'sumWithOverflowState': ('sumWithOverflow', 'State'), 'quantileState': ('quantile', 'State'), 'categoricalInformationValueState': ('categoricalInformationValue', 'State'), 'exponentialTimeDecayedAvgState': ('exponentialTimeDecayedAvg', 'State'), 'sparkBarState': ('sparkBar', 'State'), 'groupBitmapOrState': ('groupBitmapOr', 'State'), 'argMaxState': ('argMax', 'State'), 'quantilesBFloat16WeightedState': ('quantilesBFloat16Weighted', 'State'), 'quantilesState': ('quantiles', 'State'), 'quantilesTimingWeightedState': ('quantilesTimingWeighted', 'State'), 'medianState': ('median', 'State'), 'groupArrayMovingSumState': ('groupArrayMovingSum', 'State'), 'sumState': ('sum', 'State'), 'welchTTestState': ('welchTTest', 'State'), 'quantileTDigestWeightedState': ('quantileTDigestWeighted', 'State'), 'quantileTimingState': ('quantileTiming', 'State'), 'sequenceCountState': ('sequenceCount', 'State'), 'histogramState': ('histogram', 'State'), 'quantileBFloat16State': ('quantileBFloat16', 'State'), 'uniqHLL12State': ('uniqHLL12', 'State'), 'quantileExactInclusiveState': ('quantileExactInclusive', 'State'), 'approx_top_sumState': ('approx_top_sum', 'State'), 'quantileGKState': ('quantileGK', 'State'), 'kurtPopState': ('kurtPop', 'State'), 'corrState': ('corr', 'State'), 'skewSampState': ('skewSamp', 'State'), 'quantileBFloat16WeightedState': ('quantileBFloat16Weighted', 'State'), 'quantileInterpolatedWeightedState': ('quantileInterpolatedWeighted', 'State'), 'quantilesExactLowState': ('quantilesExactLow', 'State'), 'groupBitmapXorState': ('groupBitmapXor', 'State'), 'sumMapState': ('sumMap', 'State'), 'stochasticLinearRegressionState': ('stochasticLinearRegression', 'State'), 'uniqCombinedState': ('uniqCombined', 'State'), 'intervalLengthSumState': ('intervalLengthSum', 'State'), 'sumKahanState': ('sumKahan', 'State'), 'groupArrayInsertAtState': ('groupArrayInsertAt', 'State'), 'maxIntersectionsPositionState': ('maxIntersectionsPosition', 'State'), 'uniqUpToState': ('uniqUpTo', 'State'), 'groupBitAndState': ('groupBitAnd', 'State'), 'sequenceMatchState': ('sequenceMatch', 'State'), 'deltaSumTimestampState': ('deltaSumTimestamp', 'State'), 'anyState': ('any', 'State'), 'quantilesTimingState': ('quantilesTiming', 'State'), 'varSampState': ('varSamp', 'State'), 'groupArrayMovingAvgState': ('groupArrayMovingAvg', 'State'), 'retentionState': ('retention', 'State'), 'quantilesExactExclusiveState': ('quantilesExactExclusive', 'State'), 'kurtSampState': ('kurtSamp', 'State'), 'stddevSampState': ('stddevSamp', 'State'), 'quantilesBFloat16State': ('quantilesBFloat16', 'State'), 'quantilesGKState': ('quantilesGK', 'State'), 'mannWhitneyUTestState': ('mannWhitneyUTest', 'State'), 'exponentialMovingAverageState': ('exponentialMovingAverage', 'State'), 'meanZTestState': ('meanZTest', 'State'), 'groupBitmapAndState': ('groupBitmapAnd', 'State'), 'countState': ('count', 'State'), 'contingencyState': ('contingency', 'State'), 'quantileTimingWeightedMerge': ('quantileTimingWeighted', 'Merge'), 'quantilesExactMerge': ('quantilesExact', 'Merge'), 'simpleLinearRegressionMerge': ('simpleLinearRegression', 'Merge'), 'groupBitmapMerge': ('groupBitmap', 'Merge'), 'sumCountMerge': ('sumCount', 'Merge'), 'quantileExactHighMerge': ('quantileExactHigh', 'Merge'), 'anyLastMerge': ('anyLast', 'Merge'), 'quantilesDeterministicMerge': ('quantilesDeterministic', 'Merge'), 'entropyMerge': ('entropy', 'Merge'), 'quantileTDigestMerge': ('quantileTDigest', 'Merge'), 'sequenceNextNodeMerge': ('sequenceNextNode', 'Merge'), 'studentTTestMerge': ('studentTTest', 'Merge'), 'rankCorrMerge': ('rankCorr', 'Merge'), 'maxIntersectionsMerge': ('maxIntersections', 'Merge'), 'deltaSumMerge': ('deltaSum', 'Merge'), 'covarSampMerge': ('covarSamp', 'Merge'), 'varPopMerge': ('varPop', 'Merge'), 'stochasticLogisticRegressionMerge': ('stochasticLogisticRegression', 'Merge'), 'groupArrayLastMerge': ('groupArrayLast', 'Merge'), 'groupConcatMerge': ('groupConcat', 'Merge'), 'windowFunnelMerge': ('windowFunnel', 'Merge'), 'kolmogorovSmirnovTestMerge': ('kolmogorovSmirnovTest', 'Merge'), 'maxMapMerge': ('maxMap', 'Merge'), 'largestTriangleThreeBucketsMerge': ('largestTriangleThreeBuckets', 'Merge'), 'quantilesExactWeightedMerge': ('quantilesExactWeighted', 'Merge'), 'quantileExactMerge': ('quantileExact', 'Merge'), 'topKWeightedMerge': ('topKWeighted', 'Merge'), 'groupUniqArrayMerge': ('groupUniqArray', 'Merge'), 'uniqExactMerge': ('uniqExact', 'Merge'), 'stddevPopMerge': ('stddevPop', 'Merge'), 'maxMerge': ('max', 'Merge'), 'topKMerge': ('topK', 'Merge'), 'groupBitXorMerge': ('groupBitXor', 'Merge'), 'avgMerge': ('avg', 'Merge'), 'uniqMerge': ('uniq', 'Merge'), 'quantilesExactHighMerge': ('quantilesExactHigh', 'Merge'), 'quantileExactWeightedMerge': ('quantileExactWeighted', 'Merge'), 'minMapMerge': ('minMap', 'Merge'), 'anyHeavyMerge': ('anyHeavy', 'Merge'), 'groupArraySampleMerge': ('groupArraySample', 'Merge'), 'theilsUMerge': ('theilsU', 'Merge'), 'minMerge': ('min', 'Merge'), 'boundingRatioMerge': ('boundingRatio', 'Merge'), 'quantilesTDigestMerge': ('quantilesTDigest', 'Merge'), 'quantileDeterministicMerge': ('quantileDeterministic', 'Merge'), 'last_valueMerge': ('last_value', 'Merge'), 'cramersVMerge': ('cramersV', 'Merge'), 'first_valueMerge': ('first_value', 'Merge'), 'groupBitOrMerge': ('groupBitOr', 'Merge'), 'argMinMerge': ('argMin', 'Merge'), 'skewPopMerge': ('skewPop', 'Merge'), 'uniqCombined64Merge': ('uniqCombined64', 'Merge'), 'quantilesTDigestWeightedMerge': ('quantilesTDigestWeighted', 'Merge'), 'uniqThetaMerge': ('uniqTheta', 'Merge'), 'quantilesInterpolatedWeightedMerge': ('quantilesInterpolatedWeighted', 'Merge'), 'covarPopMerge': ('covarPop', 'Merge'), 'cramersVBiasCorrectedMerge': ('cramersVBiasCorrected', 'Merge'), 'avgWeightedMerge': ('avgWeighted', 'Merge'), 'quantileExactLowMerge': ('quantileExactLow', 'Merge'), 'groupArrayMerge': ('groupArray', 'Merge'), 'sumWithOverflowMerge': ('sumWithOverflow', 'Merge'), 'quantileMerge': ('quantile', 'Merge'), 'categoricalInformationValueMerge': ('categoricalInformationValue', 'Merge'), 'exponentialTimeDecayedAvgMerge': ('exponentialTimeDecayedAvg', 'Merge'), 'sparkBarMerge': ('sparkBar', 'Merge'), 'groupBitmapOrMerge': ('groupBitmapOr', 'Merge'), 'argMaxMerge': ('argMax', 'Merge'), 'quantilesBFloat16WeightedMerge': ('quantilesBFloat16Weighted', 'Merge'), 'quantilesMerge': ('quantiles', 'Merge'), 'quantilesTimingWeightedMerge': ('quantilesTimingWeighted', 'Merge'), 'medianMerge': ('median', 'Merge'), 'groupArrayMovingSumMerge': ('groupArrayMovingSum', 'Merge'), 'sumMerge': ('sum', 'Merge'), 'welchTTestMerge': ('welchTTest', 'Merge'), 'quantileTDigestWeightedMerge': ('quantileTDigestWeighted', 'Merge'), 'quantileTimingMerge': ('quantileTiming', 'Merge'), 'sequenceCountMerge': ('sequenceCount', 'Merge'), 'histogramMerge': ('histogram', 'Merge'), 'quantileBFloat16Merge': ('quantileBFloat16', 'Merge'), 'uniqHLL12Merge': ('uniqHLL12', 'Merge'), 'quantileExactInclusiveMerge': ('quantileExactInclusive', 'Merge'), 'approx_top_sumMerge': ('approx_top_sum', 'Merge'), 'quantileGKMerge': ('quantileGK', 'Merge'), 'kurtPopMerge': ('kurtPop', 'Merge'), 'corrMerge': ('corr', 'Merge'), 'skewSampMerge': ('skewSamp', 'Merge'), 'quantileBFloat16WeightedMerge': ('quantileBFloat16Weighted', 'Merge'), 'quantileInterpolatedWeightedMerge': ('quantileInterpolatedWeighted', 'Merge'), 'quantilesExactLowMerge': ('quantilesExactLow', 'Merge'), 'groupBitmapXorMerge': ('groupBitmapXor', 'Merge'), 'sumMapMerge': ('sumMap', 'Merge'), 'stochasticLinearRegressionMerge': ('stochasticLinearRegression', 'Merge'), 'uniqCombinedMerge': ('uniqCombined', 'Merge'), 'intervalLengthSumMerge': ('intervalLengthSum', 'Merge'), 'sumKahanMerge': ('sumKahan', 'Merge'), 'groupArrayInsertAtMerge': ('groupArrayInsertAt', 'Merge'), 'maxIntersectionsPositionMerge': ('maxIntersectionsPosition', 'Merge'), 'uniqUpToMerge': ('uniqUpTo', 'Merge'), 'groupBitAndMerge': ('groupBitAnd', 'Merge'), 'sequenceMatchMerge': ('sequenceMatch', 'Merge'), 'deltaSumTimestampMerge': ('deltaSumTimestamp', 'Merge'), 'anyMerge': ('any', 'Merge'), 'quantilesTimingMerge': ('quantilesTiming', 'Merge'), 'varSampMerge': ('varSamp', 'Merge'), 'groupArrayMovingAvgMerge': ('groupArrayMovingAvg', 'Merge'), 'retentionMerge': ('retention', 'Merge'), 'quantilesExactExclusiveMerge': ('quantilesExactExclusive', 'Merge'), 'kurtSampMerge': ('kurtSamp', 'Merge'), 'stddevSampMerge': ('stddevSamp', 'Merge'), 'quantilesBFloat16Merge': ('quantilesBFloat16', 'Merge'), 'quantilesGKMerge': ('quantilesGK', 'Merge'), 'mannWhitneyUTestMerge': ('mannWhitneyUTest', 'Merge'), 'exponentialMovingAverageMerge': ('exponentialMovingAverage', 'Merge'), 'meanZTestMerge': ('meanZTest', 'Merge'), 'groupBitmapAndMerge': ('groupBitmapAnd', 'Merge'), 'countMerge': ('count', 'Merge'), 'contingencyMerge': ('contingency', 'Merge'), 'quantileTimingWeightedMap': ('quantileTimingWeighted', 'Map'), 'quantilesExactMap': ('quantilesExact', 'Map'), 'simpleLinearRegressionMap': ('simpleLinearRegression', 'Map'), 'groupBitmapMap': ('groupBitmap', 'Map'), 'sumCountMap': ('sumCount', 'Map'), 'quantileExactHighMap': ('quantileExactHigh', 'Map'), 'anyLastMap': ('anyLast', 'Map'), 'quantilesDeterministicMap': ('quantilesDeterministic', 'Map'), 'entropyMap': ('entropy', 'Map'), 'quantileTDigestMap': ('quantileTDigest', 'Map'), 'sequenceNextNodeMap': ('sequenceNextNode', 'Map'), 'studentTTestMap': ('studentTTest', 'Map'), 'rankCorrMap': ('rankCorr', 'Map'), 'maxIntersectionsMap': ('maxIntersections', 'Map'), 'deltaSumMap': ('deltaSum', 'Map'), 'covarSampMap': ('covarSamp', 'Map'), 'varPopMap': ('varPop', 'Map'), 'stochasticLogisticRegressionMap': ('stochasticLogisticRegression', 'Map'), 'groupArrayLastMap': ('groupArrayLast', 'Map'), 'groupConcatMap': ('groupConcat', 'Map'), 'windowFunnelMap': ('windowFunnel', 'Map'), 'kolmogorovSmirnovTestMap': ('kolmogorovSmirnovTest', 'Map'), 'maxMapMap': ('maxMap', 'Map'), 'largestTriangleThreeBucketsMap': ('largestTriangleThreeBuckets', 'Map'), 'quantilesExactWeightedMap': ('quantilesExactWeighted', 'Map'), 'quantileExactMap': ('quantileExact', 'Map'), 'topKWeightedMap': ('topKWeighted', 'Map'), 'groupUniqArrayMap': ('groupUniqArray', 'Map'), 'uniqExactMap': ('uniqExact', 'Map'), 'stddevPopMap': ('stddevPop', 'Map'), 'maxMap': ('maxMap', None), 'topKMap': ('topK', 'Map'), 'groupBitXorMap': ('groupBitXor', 'Map'), 'avgMap': ('avg', 'Map'), 'uniqMap': ('uniq', 'Map'), 'quantilesExactHighMap': ('quantilesExactHigh', 'Map'), 'quantileExactWeightedMap': ('quantileExactWeighted', 'Map'), 'minMapMap': ('minMap', 'Map'), 'anyHeavyMap': ('anyHeavy', 'Map'), 'groupArraySampleMap': ('groupArraySample', 'Map'), 'theilsUMap': ('theilsU', 'Map'), 'minMap': ('minMap', None), 'boundingRatioMap': ('boundingRatio', 'Map'), 'quantilesTDigestMap': ('quantilesTDigest', 'Map'), 'quantileDeterministicMap': ('quantileDeterministic', 'Map'), 'last_valueMap': ('last_value', 'Map'), 'cramersVMap': ('cramersV', 'Map'), 'first_valueMap': ('first_value', 'Map'), 'groupBitOrMap': ('groupBitOr', 'Map'), 'argMinMap': ('argMin', 'Map'), 'skewPopMap': ('skewPop', 'Map'), 'uniqCombined64Map': ('uniqCombined64', 'Map'), 'quantilesTDigestWeightedMap': ('quantilesTDigestWeighted', 'Map'), 'uniqThetaMap': ('uniqTheta', 'Map'), 'quantilesInterpolatedWeightedMap': ('quantilesInterpolatedWeighted', 'Map'), 'covarPopMap': ('covarPop', 'Map'), 'cramersVBiasCorrectedMap': ('cramersVBiasCorrected', 'Map'), 'avgWeightedMap': ('avgWeighted', 'Map'), 'quantileExactLowMap': ('quantileExactLow', 'Map'), 'groupArrayMap': ('groupArray', 'Map'), 'sumWithOverflowMap': ('sumWithOverflow', 'Map'), 'quantileMap': ('quantile', 'Map'), 'categoricalInformationValueMap': ('categoricalInformationValue', 'Map'), 'exponentialTimeDecayedAvgMap': ('exponentialTimeDecayedAvg', 'Map'), 'sparkBarMap': ('sparkBar', 'Map'), 'groupBitmapOrMap': ('groupBitmapOr', 'Map'), 'argMaxMap': ('argMax', 'Map'), 'quantilesBFloat16WeightedMap': ('quantilesBFloat16Weighted', 'Map'), 'quantilesMap': ('quantiles', 'Map'), 'quantilesTimingWeightedMap': ('quantilesTimingWeighted', 'Map'), 'medianMap': ('median', 'Map'), 'groupArrayMovingSumMap': ('groupArrayMovingSum', 'Map'), 'sumMap': ('sumMap', None), 'welchTTestMap': ('welchTTest', 'Map'), 'quantileTDigestWeightedMap': ('quantileTDigestWeighted', 'Map'), 'quantileTimingMap': ('quantileTiming', 'Map'), 'sequenceCountMap': ('sequenceCount', 'Map'), 'histogramMap': ('histogram', 'Map'), 'quantileBFloat16Map': ('quantileBFloat16', 'Map'), 'uniqHLL12Map': ('uniqHLL12', 'Map'), 'quantileExactInclusiveMap': ('quantileExactInclusive', 'Map'), 'approx_top_sumMap': ('approx_top_sum', 'Map'), 'quantileGKMap': ('quantileGK', 'Map'), 'kurtPopMap': ('kurtPop', 'Map'), 'corrMap': ('corr', 'Map'), 'skewSampMap': ('skewSamp', 'Map'), 'quantileBFloat16WeightedMap': ('quantileBFloat16Weighted', 'Map'), 'quantileInterpolatedWeightedMap': ('quantileInterpolatedWeighted', 'Map'), 'quantilesExactLowMap': ('quantilesExactLow', 'Map'), 'groupBitmapXorMap': ('groupBitmapXor', 'Map'), 'sumMapMap': ('sumMap', 'Map'), 'stochasticLinearRegressionMap': ('stochasticLinearRegression', 'Map'), 'uniqCombinedMap': ('uniqCombined', 'Map'), 'intervalLengthSumMap': ('intervalLengthSum', 'Map'), 'sumKahanMap': ('sumKahan', 'Map'), 'groupArrayInsertAtMap': ('groupArrayInsertAt', 'Map'), 'maxIntersectionsPositionMap': ('maxIntersectionsPosition', 'Map'), 'uniqUpToMap': ('uniqUpTo', 'Map'), 'groupBitAndMap': ('groupBitAnd', 'Map'), 'sequenceMatchMap': ('sequenceMatch', 'Map'), 'deltaSumTimestampMap': ('deltaSumTimestamp', 'Map'), 'anyMap': ('any', 'Map'), 'quantilesTimingMap': ('quantilesTiming', 'Map'), 'varSampMap': ('varSamp', 'Map'), 'groupArrayMovingAvgMap': ('groupArrayMovingAvg', 'Map'), 'retentionMap': ('retention', 'Map'), 'quantilesExactExclusiveMap': ('quantilesExactExclusive', 'Map'), 'kurtSampMap': ('kurtSamp', 'Map'), 'stddevSampMap': ('stddevSamp', 'Map'), 'quantilesBFloat16Map': ('quantilesBFloat16', 'Map'), 'quantilesGKMap': ('quantilesGK', 'Map'), 'mannWhitneyUTestMap': ('mannWhitneyUTest', 'Map'), 'exponentialMovingAverageMap': ('exponentialMovingAverage', 'Map'), 'meanZTestMap': ('meanZTest', 'Map'), 'groupBitmapAndMap': ('groupBitmapAnd', 'Map'), 'countMap': ('count', 'Map'), 'contingencyMap': ('contingency', 'Map'), 'quantileTimingWeightedIf': ('quantileTimingWeighted', 'If'), 'quantilesExactIf': ('quantilesExact', 'If'), 'simpleLinearRegressionIf': ('simpleLinearRegression', 'If'), 'groupBitmapIf': ('groupBitmap', 'If'), 'sumCountIf': ('sumCount', 'If'), 'quantileExactHighIf': ('quantileExactHigh', 'If'), 'anyLastIf': ('anyLast', 'If'), 'quantilesDeterministicIf': ('quantilesDeterministic', 'If'), 'entropyIf': ('entropy', 'If'), 'quantileTDigestIf': ('quantileTDigest', 'If'), 'sequenceNextNodeIf': ('sequenceNextNode', 'If'), 'studentTTestIf': ('studentTTest', 'If'), 'rankCorrIf': ('rankCorr', 'If'), 'maxIntersectionsIf': ('maxIntersections', 'If'), 'deltaSumIf': ('deltaSum', 'If'), 'covarSampIf': ('covarSamp', 'If'), 'varPopIf': ('varPop', 'If'), 'stochasticLogisticRegressionIf': ('stochasticLogisticRegression', 'If'), 'groupArrayLastIf': ('groupArrayLast', 'If'), 'groupConcatIf': ('groupConcat', 'If'), 'windowFunnelIf': ('windowFunnel', 'If'), 'kolmogorovSmirnovTestIf': ('kolmogorovSmirnovTest', 'If'), 'maxMapIf': ('maxMap', 'If'), 'largestTriangleThreeBucketsIf': ('largestTriangleThreeBuckets', 'If'), 'quantilesExactWeightedIf': ('quantilesExactWeighted', 'If'), 'quantileExactIf': ('quantileExact', 'If'), 'topKWeightedIf': ('topKWeighted', 'If'), 'groupUniqArrayIf': ('groupUniqArray', 'If'), 'uniqExactIf': ('uniqExact', 'If'), 'stddevPopIf': ('stddevPop', 'If'), 'maxIf': ('max', 'If'), 'topKIf': ('topK', 'If'), 'groupBitXorIf': ('groupBitXor', 'If'), 'avgIf': ('avg', 'If'), 'uniqIf': ('uniq', 'If'), 'quantilesExactHighIf': ('quantilesExactHigh', 'If'), 'quantileExactWeightedIf': ('quantileExactWeighted', 'If'), 'minMapIf': ('minMap', 'If'), 'anyHeavyIf': ('anyHeavy', 'If'), 'groupArraySampleIf': ('groupArraySample', 'If'), 'theilsUIf': ('theilsU', 'If'), 'minIf': ('min', 'If'), 'boundingRatioIf': ('boundingRatio', 'If'), 'quantilesTDigestIf': ('quantilesTDigest', 'If'), 'quantileDeterministicIf': ('quantileDeterministic', 'If'), 'last_valueIf': ('last_value', 'If'), 'cramersVIf': ('cramersV', 'If'), 'first_valueIf': ('first_value', 'If'), 'groupBitOrIf': ('groupBitOr', 'If'), 'argMinIf': ('argMin', 'If'), 'skewPopIf': ('skewPop', 'If'), 'uniqCombined64If': ('uniqCombined64', 'If'), 'quantilesTDigestWeightedIf': ('quantilesTDigestWeighted', 'If'), 'uniqThetaIf': ('uniqTheta', 'If'), 'quantilesInterpolatedWeightedIf': ('quantilesInterpolatedWeighted', 'If'), 'covarPopIf': ('covarPop', 'If'), 'cramersVBiasCorrectedIf': ('cramersVBiasCorrected', 'If'), 'avgWeightedIf': ('avgWeighted', 'If'), 'quantileExactLowIf': ('quantileExactLow', 'If'), 'groupArrayIf': ('groupArray', 'If'), 'sumWithOverflowIf': ('sumWithOverflow', 'If'), 'quantileIf': ('quantile', 'If'), 'categoricalInformationValueIf': ('categoricalInformationValue', 'If'), 'exponentialTimeDecayedAvgIf': ('exponentialTimeDecayedAvg', 'If'), 'sparkBarIf': ('sparkBar', 'If'), 'groupBitmapOrIf': ('groupBitmapOr', 'If'), 'argMaxIf': ('argMax', 'If'), 'quantilesBFloat16WeightedIf': ('quantilesBFloat16Weighted', 'If'), 'quantilesIf': ('quantiles', 'If'), 'quantilesTimingWeightedIf': ('quantilesTimingWeighted', 'If'), 'medianIf': ('median', 'If'), 'groupArrayMovingSumIf': ('groupArrayMovingSum', 'If'), 'sumIf': ('sum', 'If'), 'welchTTestIf': ('welchTTest', 'If'), 'quantileTDigestWeightedIf': ('quantileTDigestWeighted', 'If'), 'quantileTimingIf': ('quantileTiming', 'If'), 'sequenceCountIf': ('sequenceCount', 'If'), 'histogramIf': ('histogram', 'If'), 'quantileBFloat16If': ('quantileBFloat16', 'If'), 'uniqHLL12If': ('uniqHLL12', 'If'), 'quantileExactInclusiveIf': ('quantileExactInclusive', 'If'), 'approx_top_sumIf': ('approx_top_sum', 'If'), 'quantileGKIf': ('quantileGK', 'If'), 'kurtPopIf': ('kurtPop', 'If'), 'corrIf': ('corr', 'If'), 'skewSampIf': ('skewSamp', 'If'), 'quantileBFloat16WeightedIf': ('quantileBFloat16Weighted', 'If'), 'quantileInterpolatedWeightedIf': ('quantileInterpolatedWeighted', 'If'), 'quantilesExactLowIf': ('quantilesExactLow', 'If'), 'groupBitmapXorIf': ('groupBitmapXor', 'If'), 'sumMapIf': ('sumMap', 'If'), 'stochasticLinearRegressionIf': ('stochasticLinearRegression', 'If'), 'uniqCombinedIf': ('uniqCombined', 'If'), 'intervalLengthSumIf': ('intervalLengthSum', 'If'), 'sumKahanIf': ('sumKahan', 'If'), 'groupArrayInsertAtIf': ('groupArrayInsertAt', 'If'), 'maxIntersectionsPositionIf': ('maxIntersectionsPosition', 'If'), 'uniqUpToIf': ('uniqUpTo', 'If'), 'groupBitAndIf': ('groupBitAnd', 'If'), 'sequenceMatchIf': ('sequenceMatch', 'If'), 'deltaSumTimestampIf': ('deltaSumTimestamp', 'If'), 'anyIf': ('any', 'If'), 'quantilesTimingIf': ('quantilesTiming', 'If'), 'varSampIf': ('varSamp', 'If'), 'groupArrayMovingAvgIf': ('groupArrayMovingAvg', 'If'), 'retentionIf': ('retention', 'If'), 'quantilesExactExclusiveIf': ('quantilesExactExclusive', 'If'), 'kurtSampIf': ('kurtSamp', 'If'), 'stddevSampIf': ('stddevSamp', 'If'), 'quantilesBFloat16If': ('quantilesBFloat16', 'If'), 'quantilesGKIf': ('quantilesGK', 'If'), 'mannWhitneyUTestIf': ('mannWhitneyUTest', 'If'), 'exponentialMovingAverageIf': ('exponentialMovingAverage', 'If'), 'meanZTestIf': ('meanZTest', 'If'), 'groupBitmapAndIf': ('groupBitmapAnd', 'If'), 'countIf': ('count', 'If'), 'contingencyIf': ('contingency', 'If'), 'quantileTimingWeighted': ('quantileTimingWeighted', None), 'quantilesExact': ('quantilesExact', None), 'simpleLinearRegression': ('simpleLinearRegression', None), 'groupBitmap': ('groupBitmap', None), 'sumCount': ('sumCount', None), 'quantileExactHigh': ('quantileExactHigh', None), 'anyLast': ('anyLast', None), 'quantilesDeterministic': ('quantilesDeterministic', None), 'entropy': ('entropy', None), 'quantileTDigest': ('quantileTDigest', None), 'sequenceNextNode': ('sequenceNextNode', None), 'studentTTest': ('studentTTest', None), 'rankCorr': ('rankCorr', None), 'maxIntersections': ('maxIntersections', None), 'deltaSum': ('deltaSum', None), 'covarSamp': ('covarSamp', None), 'varPop': ('varPop', None), 'stochasticLogisticRegression': ('stochasticLogisticRegression', None), 'groupArrayLast': ('groupArrayLast', None), 'groupConcat': ('groupConcat', None), 'windowFunnel': ('windowFunnel', None), 'kolmogorovSmirnovTest': ('kolmogorovSmirnovTest', None), 'largestTriangleThreeBuckets': ('largestTriangleThreeBuckets', None), 'quantilesExactWeighted': ('quantilesExactWeighted', None), 'quantileExact': ('quantileExact', None), 'topKWeighted': ('topKWeighted', None), 'groupUniqArray': ('groupUniqArray', None), 'uniqExact': ('uniqExact', None), 'stddevPop': ('stddevPop', None), 'max': ('max', None), 'topK': ('topK', None), 'groupBitXor': ('groupBitXor', None), 'avg': ('avg', None), 'uniq': ('uniq', None), 'quantilesExactHigh': ('quantilesExactHigh', None), 'quantileExactWeighted': ('quantileExactWeighted', None), 'anyHeavy': ('anyHeavy', None), 'groupArraySample': ('groupArraySample', None), 'theilsU': ('theilsU', None), 'min': ('min', None), 'boundingRatio': ('boundingRatio', None), 'quantilesTDigest': ('quantilesTDigest', None), 'quantileDeterministic': ('quantileDeterministic', None), 'last_value': ('last_value', None), 'cramersV': ('cramersV', None), 'first_value': ('first_value', None), 'groupBitOr': ('groupBitOr', None), 'argMin': ('argMin', None), 'skewPop': ('skewPop', None), 'uniqCombined64': ('uniqCombined64', None), 'quantilesTDigestWeighted': ('quantilesTDigestWeighted', None), 'uniqTheta': ('uniqTheta', None), 'quantilesInterpolatedWeighted': ('quantilesInterpolatedWeighted', None), 'covarPop': ('covarPop', None), 'cramersVBiasCorrected': ('cramersVBiasCorrected', None), 'avgWeighted': ('avgWeighted', None), 'quantileExactLow': ('quantileExactLow', None), 'groupArray': ('groupArray', None), 'sumWithOverflow': ('sumWithOverflow', None), 'quantile': ('quantile', None), 'categoricalInformationValue': ('categoricalInformationValue', None), 'exponentialTimeDecayedAvg': ('exponentialTimeDecayedAvg', None), 'sparkBar': ('sparkBar', None), 'groupBitmapOr': ('groupBitmapOr', None), 'argMax': ('argMax', None), 'quantilesBFloat16Weighted': ('quantilesBFloat16Weighted', None), 'quantiles': ('quantiles', None), 'quantilesTimingWeighted': ('quantilesTimingWeighted', None), 'median': ('median', None), 'groupArrayMovingSum': ('groupArrayMovingSum', None), 'sum': ('sum', None), 'welchTTest': ('welchTTest', None), 'quantileTDigestWeighted': ('quantileTDigestWeighted', None), 'quantileTiming': ('quantileTiming', None), 'sequenceCount': ('sequenceCount', None), 'histogram': ('histogram', None), 'quantileBFloat16': ('quantileBFloat16', None), 'uniqHLL12': ('uniqHLL12', None), 'quantileExactInclusive': ('quantileExactInclusive', None), 'approx_top_sum': ('approx_top_sum', None), 'quantileGK': ('quantileGK', None), 'kurtPop': ('kurtPop', None), 'corr': ('corr', None), 'skewSamp': ('skewSamp', None), 'quantileBFloat16Weighted': ('quantileBFloat16Weighted', None), 'quantileInterpolatedWeighted': ('quantileInterpolatedWeighted', None), 'quantilesExactLow': ('quantilesExactLow', None), 'groupBitmapXor': ('groupBitmapXor', None), 'stochasticLinearRegression': ('stochasticLinearRegression', None), 'uniqCombined': ('uniqCombined', None), 'intervalLengthSum': ('intervalLengthSum', None), 'sumKahan': ('sumKahan', None), 'groupArrayInsertAt': ('groupArrayInsertAt', None), 'maxIntersectionsPosition': ('maxIntersectionsPosition', None), 'uniqUpTo': ('uniqUpTo', None), 'groupBitAnd': ('groupBitAnd', None), 'sequenceMatch': ('sequenceMatch', None), 'deltaSumTimestamp': ('deltaSumTimestamp', None), 'any': ('any', None), 'quantilesTiming': ('quantilesTiming', None), 'varSamp': ('varSamp', None), 'groupArrayMovingAvg': ('groupArrayMovingAvg', None), 'retention': ('retention', None), 'quantilesExactExclusive': ('quantilesExactExclusive', None), 'kurtSamp': ('kurtSamp', None), 'stddevSamp': ('stddevSamp', None), 'quantilesBFloat16': ('quantilesBFloat16', None), 'quantilesGK': ('quantilesGK', None), 'mannWhitneyUTest': ('mannWhitneyUTest', None), 'exponentialMovingAverage': ('exponentialMovingAverage', None), 'meanZTest': ('meanZTest', None), 'groupBitmapAnd': ('groupBitmapAnd', None), 'count': ('count', None), 'contingency': ('contingency', 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: 249>: <class 'sqlglot.expressions.temporal.CurrentDate'>, <TokenType.CURRENT_DATETIME: 250>: <class 'sqlglot.expressions.temporal.CurrentDate'>, <TokenType.CURRENT_TIME: 252>: <class 'sqlglot.expressions.temporal.CurrentTime'>, <TokenType.CURRENT_USER: 254>: <class 'sqlglot.expressions.functions.CurrentUser'>, <TokenType.CURRENT_ROLE: 256>: <class 'sqlglot.expressions.functions.CurrentRole'>}
RANGE_PARSERS = {<TokenType.AT_GT: 56>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.BETWEEN: 232>: <function Parser.<lambda>>, <TokenType.GLOB: 291>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.ILIKE: 299>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.IN: 300>: <function Parser.<lambda>>, <TokenType.IRLIKE: 311>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.IS: 312>: <function Parser.<lambda>>, <TokenType.LIKE: 322>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.LT_AT: 55>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.OVERLAPS: 353>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.RLIKE: 385>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.SIMILAR_TO: 400>: <function binary_range_parser.<locals>._parse_binary_range>, <TokenType.FOR: 283>: <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: 344>: <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: 292>: <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: 393>, <TokenType.STRAIGHT_JOIN: 407>, <TokenType.ALL: 222>, <TokenType.OUTER: 351>, <TokenType.ANY: 224>, <TokenType.ANTI: 223>, <TokenType.ARRAY: 226>, <TokenType.ASOF: 228>, <TokenType.PASTE: 358>, <TokenType.INNER: 303>, <TokenType.CROSS: 247>}
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.REF: 201>, <TokenType.INET: 202>, <TokenType.IPADDRESS: 203>, <TokenType.IPPREFIX: 204>, <TokenType.IPV4: 205>, <TokenType.IPV6: 206>, <TokenType.ENUM: 207>, <TokenType.ENUM8: 208>, <TokenType.ENUM16: 209>, <TokenType.FIXEDSTRING: 210>, <TokenType.LOWCARDINALITY: 211>, <TokenType.NESTED: 212>, <TokenType.AGGREGATEFUNCTION: 213>, <TokenType.SIMPLEAGGREGATEFUNCTION: 214>, <TokenType.TDIGEST: 215>, <TokenType.UNKNOWN: 216>, <TokenType.VECTOR: 217>, <TokenType.DYNAMIC: 218>, <TokenType.VOID: 219>, <TokenType.APPLY: 225>, <TokenType.ASC: 227>, <TokenType.ATTACH: 229>, <TokenType.AUTO_INCREMENT: 230>, <TokenType.BEGIN: 231>, <TokenType.CACHE: 234>, <TokenType.CASE: 235>, <TokenType.COLLATE: 238>, <TokenType.COMMAND: 239>, <TokenType.COMMENT: 240>, <TokenType.COMMIT: 241>, <TokenType.CONNECT: 242>, <TokenType.CONSTRAINT: 244>, <TokenType.COPY: 245>, <TokenType.CUBE: 248>, <TokenType.CURRENT_DATE: 249>, <TokenType.CURRENT_DATETIME: 250>, <TokenType.CURRENT_SCHEMA: 251>, <TokenType.CURRENT_TIME: 252>, <TokenType.CURRENT_TIMESTAMP: 253>, <TokenType.CURRENT_USER: 254>, <TokenType.CURRENT_ROLE: 256>, <TokenType.CURRENT_CATALOG: 257>, <TokenType.DECLARE: 258>, <TokenType.DEFAULT: 259>, <TokenType.DELETE: 260>, <TokenType.DESC: 261>, <TokenType.DESCRIBE: 262>, <TokenType.DETACH: 263>, <TokenType.DISCONNECT: 264>, <TokenType.DICTIONARY: 265>, <TokenType.DIV: 268>, <TokenType.END: 271>, <TokenType.ESCAPE: 272>, <TokenType.EXECUTE: 274>, <TokenType.EXISTS: 275>, <TokenType.FALSE: 276>, <TokenType.FILE: 278>, <TokenType.FILE_FORMAT: 279>, <TokenType.FILTER: 280>, <TokenType.FIRST: 282>, <TokenType.FOREIGN_KEY: 285>, <TokenType.FUNCTION: 289>, <TokenType.GET: 290>, <TokenType.IN: 300>, <TokenType.INDEX: 301>, <TokenType.INTERVAL: 308>, <TokenType.IS: 312>, <TokenType.ISNULL: 313>, <TokenType.KEEP: 316>, <TokenType.KILL: 318>, <TokenType.LIMIT: 323>, <TokenType.LIST: 324>, <TokenType.LOAD: 325>, <TokenType.MAP: 327>, <TokenType.MATCH: 328>, <TokenType.MERGE: 332>, <TokenType.MODEL: 334>, <TokenType.NEXT: 336>, <TokenType.NOTHING: 337>, <TokenType.NULL: 339>, <TokenType.OBJECT_IDENTIFIER: 340>, <TokenType.OFFSET: 341>, <TokenType.OPERATOR: 344>, <TokenType.ORDINALITY: 348>, <TokenType.OUT: 349>, <TokenType.INOUT: 350>, <TokenType.OVER: 352>, <TokenType.OVERLAPS: 353>, <TokenType.OVERWRITE: 354>, <TokenType.PARTITION: 356>, <TokenType.PERCENT: 359>, <TokenType.PIVOT: 360>, <TokenType.PRAGMA: 365>, <TokenType.PROCEDURE: 368>, <TokenType.PROJECTION: 370>, <TokenType.PSEUDO_TYPE: 371>, <TokenType.PUT: 372>, <TokenType.RANGE: 376>, <TokenType.RECURSIVE: 377>, <TokenType.REFRESH: 378>, <TokenType.RENAME: 379>, <TokenType.REPLACE: 380>, <TokenType.REFERENCES: 383>, <TokenType.ROLLUP: 388>, <TokenType.ROW: 389>, <TokenType.ROWS: 390>, <TokenType.SEQUENCE: 395>, <TokenType.SET: 397>, <TokenType.SHOW: 399>, <TokenType.SOME: 401>, <TokenType.STORAGE_INTEGRATION: 406>, <TokenType.STRAIGHT_JOIN: 407>, <TokenType.STRUCT: 408>, <TokenType.TAG: 411>, <TokenType.TEMPORARY: 412>, <TokenType.TOP: 413>, <TokenType.TRUE: 415>, <TokenType.TRUNCATE: 416>, <TokenType.TRIGGER: 417>, <TokenType.TYPE: 418>, <TokenType.UNNEST: 422>, <TokenType.UNPIVOT: 423>, <TokenType.UPDATE: 424>, <TokenType.USE: 425>, <TokenType.VIEW: 429>, <TokenType.SEMANTIC_VIEW: 430>, <TokenType.VOLATILE: 431>, <TokenType.UNIQUE: 437>, <TokenType.SINK: 442>, <TokenType.SOURCE: 443>, <TokenType.ANALYZE: 444>, <TokenType.NAMESPACE: 445>, <TokenType.EXPORT: 446>}
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.REF: 201>, <TokenType.INET: 202>, <TokenType.IPADDRESS: 203>, <TokenType.IPPREFIX: 204>, <TokenType.IPV4: 205>, <TokenType.IPV6: 206>, <TokenType.ENUM: 207>, <TokenType.ENUM8: 208>, <TokenType.ENUM16: 209>, <TokenType.FIXEDSTRING: 210>, <TokenType.LOWCARDINALITY: 211>, <TokenType.NESTED: 212>, <TokenType.AGGREGATEFUNCTION: 213>, <TokenType.SIMPLEAGGREGATEFUNCTION: 214>, <TokenType.TDIGEST: 215>, <TokenType.UNKNOWN: 216>, <TokenType.VECTOR: 217>, <TokenType.DYNAMIC: 218>, <TokenType.VOID: 219>, <TokenType.ALL: 222>, <TokenType.ANTI: 223>, <TokenType.ANY: 224>, <TokenType.APPLY: 225>, <TokenType.ARRAY: 226>, <TokenType.ASC: 227>, <TokenType.ASOF: 228>, <TokenType.ATTACH: 229>, <TokenType.AUTO_INCREMENT: 230>, <TokenType.BEGIN: 231>, <TokenType.CACHE: 234>, <TokenType.CASE: 235>, <TokenType.COLLATE: 238>, <TokenType.COMMAND: 239>, <TokenType.COMMENT: 240>, <TokenType.COMMIT: 241>, <TokenType.CONNECT: 242>, <TokenType.CONSTRAINT: 244>, <TokenType.COPY: 245>, <TokenType.CUBE: 248>, <TokenType.CURRENT_DATE: 249>, <TokenType.CURRENT_DATETIME: 250>, <TokenType.CURRENT_SCHEMA: 251>, <TokenType.CURRENT_TIME: 252>, <TokenType.CURRENT_TIMESTAMP: 253>, <TokenType.CURRENT_USER: 254>, <TokenType.CURRENT_ROLE: 256>, <TokenType.CURRENT_CATALOG: 257>, <TokenType.DECLARE: 258>, <TokenType.DEFAULT: 259>, <TokenType.DELETE: 260>, <TokenType.DESC: 261>, <TokenType.DESCRIBE: 262>, <TokenType.DETACH: 263>, <TokenType.DISCONNECT: 264>, <TokenType.DICTIONARY: 265>, <TokenType.DIV: 268>, <TokenType.END: 271>, <TokenType.ESCAPE: 272>, <TokenType.EXECUTE: 274>, <TokenType.EXISTS: 275>, <TokenType.FALSE: 276>, <TokenType.FILE: 278>, <TokenType.FILE_FORMAT: 279>, <TokenType.FILTER: 280>, <TokenType.FINAL: 281>, <TokenType.FIRST: 282>, <TokenType.FOREIGN_KEY: 285>, <TokenType.FULL: 288>, <TokenType.FUNCTION: 289>, <TokenType.GET: 290>, <TokenType.IN: 300>, <TokenType.INDEX: 301>, <TokenType.INTERVAL: 308>, <TokenType.IS: 312>, <TokenType.ISNULL: 313>, <TokenType.KEEP: 316>, <TokenType.KILL: 318>, <TokenType.LEFT: 321>, <TokenType.LIMIT: 323>, <TokenType.LIST: 324>, <TokenType.LOAD: 325>, <TokenType.LOCK: 326>, <TokenType.MAP: 327>, <TokenType.MATCH: 328>, <TokenType.MERGE: 332>, <TokenType.MODEL: 334>, <TokenType.NATURAL: 335>, <TokenType.NEXT: 336>, <TokenType.NOTHING: 337>, <TokenType.NULL: 339>, <TokenType.OBJECT_IDENTIFIER: 340>, <TokenType.OFFSET: 341>, <TokenType.OPERATOR: 344>, <TokenType.ORDINALITY: 348>, <TokenType.OUT: 349>, <TokenType.INOUT: 350>, <TokenType.OVER: 352>, <TokenType.OVERLAPS: 353>, <TokenType.OVERWRITE: 354>, <TokenType.PARTITION: 356>, <TokenType.PASTE: 358>, <TokenType.PERCENT: 359>, <TokenType.PIVOT: 360>, <TokenType.PRAGMA: 365>, <TokenType.PROCEDURE: 368>, <TokenType.PROJECTION: 370>, <TokenType.PSEUDO_TYPE: 371>, <TokenType.PUT: 372>, <TokenType.RANGE: 376>, <TokenType.RECURSIVE: 377>, <TokenType.REFRESH: 378>, <TokenType.RENAME: 379>, <TokenType.REPLACE: 380>, <TokenType.REFERENCES: 383>, <TokenType.RIGHT: 384>, <TokenType.ROLLUP: 388>, <TokenType.ROW: 389>, <TokenType.ROWS: 390>, <TokenType.SEMI: 393>, <TokenType.SEQUENCE: 395>, <TokenType.SET: 397>, <TokenType.SHOW: 399>, <TokenType.SOME: 401>, <TokenType.STORAGE_INTEGRATION: 406>, <TokenType.STRAIGHT_JOIN: 407>, <TokenType.STRUCT: 408>, <TokenType.TAG: 411>, <TokenType.TEMPORARY: 412>, <TokenType.TOP: 413>, <TokenType.TRUE: 415>, <TokenType.TRUNCATE: 416>, <TokenType.TRIGGER: 417>, <TokenType.TYPE: 418>, <TokenType.UNNEST: 422>, <TokenType.UNPIVOT: 423>, <TokenType.UPDATE: 424>, <TokenType.USE: 425>, <TokenType.VIEW: 429>, <TokenType.SEMANTIC_VIEW: 430>, <TokenType.VOLATILE: 431>, <TokenType.WINDOW: 435>, <TokenType.UNIQUE: 437>, <TokenType.SINK: 442>, <TokenType.SOURCE: 443>, <TokenType.ANALYZE: 444>, <TokenType.NAMESPACE: 445>, <TokenType.EXPORT: 446>}
LOG_DEFAULTS_TO_LN = True
QUERY_MODIFIER_PARSERS = {<TokenType.MATCH_RECOGNIZE: 330>: <function Parser.<lambda>>, <TokenType.PREWHERE: 366>: <function Parser.<lambda>>, <TokenType.WHERE: 434>: <function Parser.<lambda>>, <TokenType.GROUP_BY: 294>: <function Parser.<lambda>>, <TokenType.HAVING: 296>: <function Parser.<lambda>>, <TokenType.QUALIFY: 373>: <function Parser.<lambda>>, <TokenType.WINDOW: 435>: <function Parser.<lambda>>, <TokenType.ORDER_BY: 345>: <function Parser.<lambda>>, <TokenType.LIMIT: 323>: <function Parser.<lambda>>, <TokenType.FETCH: 277>: <function Parser.<lambda>>, <TokenType.OFFSET: 341>: <function Parser.<lambda>>, <TokenType.FOR: 283>: <function Parser.<lambda>>, <TokenType.LOCK: 326>: <function Parser.<lambda>>, <TokenType.TABLE_SAMPLE: 410>: <function Parser.<lambda>>, <TokenType.USING: 426>: <function Parser.<lambda>>, <TokenType.CLUSTER_BY: 237>: <function Parser.<lambda>>, <TokenType.DISTRIBUTE_BY: 267>: <function Parser.<lambda>>, <TokenType.SORT_BY: 402>: <function Parser.<lambda>>, <TokenType.CONNECT_BY: 243>: <function Parser.<lambda>>, <TokenType.SETTINGS: 398>: <function ClickHouseParser.<lambda>>, <TokenType.FORMAT: 286>: <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 = {'FOREIGN KEY', 'UNIQUE', 'PRIMARY KEY', 'EXCLUDE', 'PERIOD', 'BUCKET', 'LIKE', 'TRUNCATE', 'INDEX'}
PLACEHOLDER_PARSERS = {<TokenType.PLACEHOLDER: 361>: <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: 221>: <function Parser.<lambda>>, <TokenType.ANALYZE: 444>: <function Parser.<lambda>>, <TokenType.BEGIN: 231>: <function Parser.<lambda>>, <TokenType.CACHE: 234>: <function Parser.<lambda>>, <TokenType.COMMENT: 240>: <function Parser.<lambda>>, <TokenType.COMMIT: 241>: <function Parser.<lambda>>, <TokenType.COPY: 245>: <function Parser.<lambda>>, <TokenType.CREATE: 246>: <function Parser.<lambda>>, <TokenType.DECLARE: 258>: <function Parser.<lambda>>, <TokenType.DELETE: 260>: <function Parser.<lambda>>, <TokenType.DESC: 261>: <function Parser.<lambda>>, <TokenType.DESCRIBE: 262>: <function Parser.<lambda>>, <TokenType.DROP: 269>: <function Parser.<lambda>>, <TokenType.GRANT: 293>: <function Parser.<lambda>>, <TokenType.REVOKE: 382>: <function Parser.<lambda>>, <TokenType.INSERT: 304>: <function Parser.<lambda>>, <TokenType.KILL: 318>: <function Parser.<lambda>>, <TokenType.LOAD: 325>: <function Parser.<lambda>>, <TokenType.MERGE: 332>: <function Parser.<lambda>>, <TokenType.PIVOT: 360>: <function Parser.<lambda>>, <TokenType.PRAGMA: 365>: <function Parser.<lambda>>, <TokenType.REFRESH: 378>: <function Parser.<lambda>>, <TokenType.ROLLBACK: 387>: <function Parser.<lambda>>, <TokenType.SET: 397>: <function Parser.<lambda>>, <TokenType.TRUNCATE: 416>: <function Parser.<lambda>>, <TokenType.UNCACHE: 419>: <function Parser.<lambda>>, <TokenType.UNPIVOT: 423>: <function Parser.<lambda>>, <TokenType.UPDATE: 424>: <function Parser.<lambda>>, <TokenType.USE: 425>: <function Parser.<lambda>>, <TokenType.SEMICOLON: 19>: <function Parser.<lambda>>, <TokenType.DETACH: 263>: <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
SUPPORTS_DIRECTED_JOIN
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
MODIFIERS_ATTACHED_TO_SET_OP
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_TABLE_QUERY
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