sqlglot.dialects.clickhouse
1from __future__ import annotations 2 3import typing as t 4 5from sqlglot import exp, generator, parser, tokens, transforms 6from sqlglot.dialects.dialect import ( 7 Dialect, 8 arg_max_or_min_no_count, 9 date_delta_sql, 10 inline_array_sql, 11 json_extract_segments, 12 json_path_key_only_name, 13 no_pivot_sql, 14 build_json_extract_path, 15 rename_func, 16 var_map_sql, 17) 18from sqlglot.errors import ParseError 19from sqlglot.helper import is_int, seq_get 20from sqlglot.tokens import Token, TokenType 21 22 23def _lower_func(sql: str) -> str: 24 index = sql.index("(") 25 return sql[:index].lower() + sql[index:] 26 27 28def _quantile_sql(self: ClickHouse.Generator, expression: exp.Quantile) -> str: 29 quantile = expression.args["quantile"] 30 args = f"({self.sql(expression, 'this')})" 31 32 if isinstance(quantile, exp.Array): 33 func = self.func("quantiles", *quantile) 34 else: 35 func = self.func("quantile", quantile) 36 37 return func + args 38 39 40def _build_count_if(args: t.List) -> exp.CountIf | exp.CombinedAggFunc: 41 if len(args) == 1: 42 return exp.CountIf(this=seq_get(args, 0)) 43 44 return exp.CombinedAggFunc(this="countIf", expressions=args, parts=("count", "If")) 45 46 47class ClickHouse(Dialect): 48 NORMALIZE_FUNCTIONS: bool | str = False 49 NULL_ORDERING = "nulls_are_last" 50 SUPPORTS_USER_DEFINED_TYPES = False 51 SAFE_DIVISION = True 52 LOG_BASE_FIRST: t.Optional[bool] = None 53 54 ESCAPE_SEQUENCES = { 55 "\\0": "\0", 56 } 57 58 class Tokenizer(tokens.Tokenizer): 59 COMMENTS = ["--", "#", "#!", ("/*", "*/")] 60 IDENTIFIERS = ['"', "`"] 61 STRING_ESCAPES = ["'", "\\"] 62 BIT_STRINGS = [("0b", "")] 63 HEX_STRINGS = [("0x", ""), ("0X", "")] 64 HEREDOC_STRINGS = ["$"] 65 66 KEYWORDS = { 67 **tokens.Tokenizer.KEYWORDS, 68 "ATTACH": TokenType.COMMAND, 69 "DATE32": TokenType.DATE32, 70 "DATETIME64": TokenType.DATETIME64, 71 "DICTIONARY": TokenType.DICTIONARY, 72 "ENUM8": TokenType.ENUM8, 73 "ENUM16": TokenType.ENUM16, 74 "FINAL": TokenType.FINAL, 75 "FIXEDSTRING": TokenType.FIXEDSTRING, 76 "FLOAT32": TokenType.FLOAT, 77 "FLOAT64": TokenType.DOUBLE, 78 "GLOBAL": TokenType.GLOBAL, 79 "INT256": TokenType.INT256, 80 "LOWCARDINALITY": TokenType.LOWCARDINALITY, 81 "MAP": TokenType.MAP, 82 "NESTED": TokenType.NESTED, 83 "SAMPLE": TokenType.TABLE_SAMPLE, 84 "TUPLE": TokenType.STRUCT, 85 "UINT128": TokenType.UINT128, 86 "UINT16": TokenType.USMALLINT, 87 "UINT256": TokenType.UINT256, 88 "UINT32": TokenType.UINT, 89 "UINT64": TokenType.UBIGINT, 90 "UINT8": TokenType.UTINYINT, 91 "IPV4": TokenType.IPV4, 92 "IPV6": TokenType.IPV6, 93 "AGGREGATEFUNCTION": TokenType.AGGREGATEFUNCTION, 94 "SIMPLEAGGREGATEFUNCTION": TokenType.SIMPLEAGGREGATEFUNCTION, 95 "SYSTEM": TokenType.COMMAND, 96 "PREWHERE": TokenType.PREWHERE, 97 } 98 99 SINGLE_TOKENS = { 100 **tokens.Tokenizer.SINGLE_TOKENS, 101 "$": TokenType.HEREDOC_STRING, 102 } 103 104 class Parser(parser.Parser): 105 # Tested in ClickHouse's playground, it seems that the following two queries do the same thing 106 # * select x from t1 union all select x from t2 limit 1; 107 # * select x from t1 union all (select x from t2 limit 1); 108 MODIFIERS_ATTACHED_TO_UNION = False 109 110 FUNCTIONS = { 111 **parser.Parser.FUNCTIONS, 112 "ANY": exp.AnyValue.from_arg_list, 113 "ARRAYSUM": exp.ArraySum.from_arg_list, 114 "COUNTIF": _build_count_if, 115 "DATE_ADD": lambda args: exp.DateAdd( 116 this=seq_get(args, 2), expression=seq_get(args, 1), unit=seq_get(args, 0) 117 ), 118 "DATEADD": lambda args: exp.DateAdd( 119 this=seq_get(args, 2), expression=seq_get(args, 1), unit=seq_get(args, 0) 120 ), 121 "DATE_DIFF": lambda args: exp.DateDiff( 122 this=seq_get(args, 2), expression=seq_get(args, 1), unit=seq_get(args, 0) 123 ), 124 "DATEDIFF": lambda args: exp.DateDiff( 125 this=seq_get(args, 2), expression=seq_get(args, 1), unit=seq_get(args, 0) 126 ), 127 "JSONEXTRACTSTRING": build_json_extract_path( 128 exp.JSONExtractScalar, zero_based_indexing=False 129 ), 130 "MAP": parser.build_var_map, 131 "MATCH": exp.RegexpLike.from_arg_list, 132 "RANDCANONICAL": exp.Rand.from_arg_list, 133 "TUPLE": exp.Struct.from_arg_list, 134 "UNIQ": exp.ApproxDistinct.from_arg_list, 135 "XOR": lambda args: exp.Xor(expressions=args), 136 } 137 138 AGG_FUNCTIONS = { 139 "count", 140 "min", 141 "max", 142 "sum", 143 "avg", 144 "any", 145 "stddevPop", 146 "stddevSamp", 147 "varPop", 148 "varSamp", 149 "corr", 150 "covarPop", 151 "covarSamp", 152 "entropy", 153 "exponentialMovingAverage", 154 "intervalLengthSum", 155 "kolmogorovSmirnovTest", 156 "mannWhitneyUTest", 157 "median", 158 "rankCorr", 159 "sumKahan", 160 "studentTTest", 161 "welchTTest", 162 "anyHeavy", 163 "anyLast", 164 "boundingRatio", 165 "first_value", 166 "last_value", 167 "argMin", 168 "argMax", 169 "avgWeighted", 170 "topK", 171 "topKWeighted", 172 "deltaSum", 173 "deltaSumTimestamp", 174 "groupArray", 175 "groupArrayLast", 176 "groupUniqArray", 177 "groupArrayInsertAt", 178 "groupArrayMovingAvg", 179 "groupArrayMovingSum", 180 "groupArraySample", 181 "groupBitAnd", 182 "groupBitOr", 183 "groupBitXor", 184 "groupBitmap", 185 "groupBitmapAnd", 186 "groupBitmapOr", 187 "groupBitmapXor", 188 "sumWithOverflow", 189 "sumMap", 190 "minMap", 191 "maxMap", 192 "skewSamp", 193 "skewPop", 194 "kurtSamp", 195 "kurtPop", 196 "uniq", 197 "uniqExact", 198 "uniqCombined", 199 "uniqCombined64", 200 "uniqHLL12", 201 "uniqTheta", 202 "quantile", 203 "quantiles", 204 "quantileExact", 205 "quantilesExact", 206 "quantileExactLow", 207 "quantilesExactLow", 208 "quantileExactHigh", 209 "quantilesExactHigh", 210 "quantileExactWeighted", 211 "quantilesExactWeighted", 212 "quantileTiming", 213 "quantilesTiming", 214 "quantileTimingWeighted", 215 "quantilesTimingWeighted", 216 "quantileDeterministic", 217 "quantilesDeterministic", 218 "quantileTDigest", 219 "quantilesTDigest", 220 "quantileTDigestWeighted", 221 "quantilesTDigestWeighted", 222 "quantileBFloat16", 223 "quantilesBFloat16", 224 "quantileBFloat16Weighted", 225 "quantilesBFloat16Weighted", 226 "simpleLinearRegression", 227 "stochasticLinearRegression", 228 "stochasticLogisticRegression", 229 "categoricalInformationValue", 230 "contingency", 231 "cramersV", 232 "cramersVBiasCorrected", 233 "theilsU", 234 "maxIntersections", 235 "maxIntersectionsPosition", 236 "meanZTest", 237 "quantileInterpolatedWeighted", 238 "quantilesInterpolatedWeighted", 239 "quantileGK", 240 "quantilesGK", 241 "sparkBar", 242 "sumCount", 243 "largestTriangleThreeBuckets", 244 } 245 246 AGG_FUNCTIONS_SUFFIXES = [ 247 "If", 248 "Array", 249 "ArrayIf", 250 "Map", 251 "SimpleState", 252 "State", 253 "Merge", 254 "MergeState", 255 "ForEach", 256 "Distinct", 257 "OrDefault", 258 "OrNull", 259 "Resample", 260 "ArgMin", 261 "ArgMax", 262 ] 263 264 AGG_FUNC_MAPPING = ( 265 lambda functions, suffixes: { 266 f"{f}{sfx}": (f, sfx) for sfx in (suffixes + [""]) for f in functions 267 } 268 )(AGG_FUNCTIONS, AGG_FUNCTIONS_SUFFIXES) 269 270 FUNCTIONS_WITH_ALIASED_ARGS = {*parser.Parser.FUNCTIONS_WITH_ALIASED_ARGS, "TUPLE"} 271 272 FUNCTION_PARSERS = { 273 **parser.Parser.FUNCTION_PARSERS, 274 "ARRAYJOIN": lambda self: self.expression(exp.Explode, this=self._parse_expression()), 275 "QUANTILE": lambda self: self._parse_quantile(), 276 } 277 278 FUNCTION_PARSERS.pop("MATCH") 279 280 NO_PAREN_FUNCTION_PARSERS = parser.Parser.NO_PAREN_FUNCTION_PARSERS.copy() 281 NO_PAREN_FUNCTION_PARSERS.pop("ANY") 282 283 RANGE_PARSERS = { 284 **parser.Parser.RANGE_PARSERS, 285 TokenType.GLOBAL: lambda self, this: self._match(TokenType.IN) 286 and self._parse_in(this, is_global=True), 287 } 288 289 # The PLACEHOLDER entry is popped because 1) it doesn't affect Clickhouse (it corresponds to 290 # the postgres-specific JSONBContains parser) and 2) it makes parsing the ternary op simpler. 291 COLUMN_OPERATORS = parser.Parser.COLUMN_OPERATORS.copy() 292 COLUMN_OPERATORS.pop(TokenType.PLACEHOLDER) 293 294 JOIN_KINDS = { 295 *parser.Parser.JOIN_KINDS, 296 TokenType.ANY, 297 TokenType.ASOF, 298 TokenType.ARRAY, 299 } 300 301 TABLE_ALIAS_TOKENS = parser.Parser.TABLE_ALIAS_TOKENS - { 302 TokenType.ANY, 303 TokenType.ARRAY, 304 TokenType.FINAL, 305 TokenType.FORMAT, 306 TokenType.SETTINGS, 307 } 308 309 LOG_DEFAULTS_TO_LN = True 310 311 QUERY_MODIFIER_PARSERS = { 312 **parser.Parser.QUERY_MODIFIER_PARSERS, 313 TokenType.SETTINGS: lambda self: ( 314 "settings", 315 self._advance() or self._parse_csv(self._parse_conjunction), 316 ), 317 TokenType.FORMAT: lambda self: ("format", self._advance() or self._parse_id_var()), 318 } 319 320 def _parse_conjunction(self) -> t.Optional[exp.Expression]: 321 this = super()._parse_conjunction() 322 323 if self._match(TokenType.PLACEHOLDER): 324 return self.expression( 325 exp.If, 326 this=this, 327 true=self._parse_conjunction(), 328 false=self._match(TokenType.COLON) and self._parse_conjunction(), 329 ) 330 331 return this 332 333 def _parse_placeholder(self) -> t.Optional[exp.Expression]: 334 """ 335 Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier} 336 https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters 337 """ 338 if not self._match(TokenType.L_BRACE): 339 return None 340 341 this = self._parse_id_var() 342 self._match(TokenType.COLON) 343 kind = self._parse_types(check_func=False, allow_identifiers=False) or ( 344 self._match_text_seq("IDENTIFIER") and "Identifier" 345 ) 346 347 if not kind: 348 self.raise_error("Expecting a placeholder type or 'Identifier' for tables") 349 elif not self._match(TokenType.R_BRACE): 350 self.raise_error("Expecting }") 351 352 return self.expression(exp.Placeholder, this=this, kind=kind) 353 354 def _parse_in(self, this: t.Optional[exp.Expression], is_global: bool = False) -> exp.In: 355 this = super()._parse_in(this) 356 this.set("is_global", is_global) 357 return this 358 359 def _parse_table( 360 self, 361 schema: bool = False, 362 joins: bool = False, 363 alias_tokens: t.Optional[t.Collection[TokenType]] = None, 364 parse_bracket: bool = False, 365 is_db_reference: bool = False, 366 ) -> t.Optional[exp.Expression]: 367 this = super()._parse_table( 368 schema=schema, 369 joins=joins, 370 alias_tokens=alias_tokens, 371 parse_bracket=parse_bracket, 372 is_db_reference=is_db_reference, 373 ) 374 375 if self._match(TokenType.FINAL): 376 this = self.expression(exp.Final, this=this) 377 378 return this 379 380 def _parse_position(self, haystack_first: bool = False) -> exp.StrPosition: 381 return super()._parse_position(haystack_first=True) 382 383 # https://clickhouse.com/docs/en/sql-reference/statements/select/with/ 384 def _parse_cte(self) -> exp.CTE: 385 index = self._index 386 try: 387 # WITH <identifier> AS <subquery expression> 388 return super()._parse_cte() 389 except ParseError: 390 # WITH <expression> AS <identifier> 391 self._retreat(index) 392 393 return self.expression( 394 exp.CTE, 395 this=self._parse_conjunction(), 396 alias=self._parse_table_alias(), 397 scalar=True, 398 ) 399 400 def _parse_join_parts( 401 self, 402 ) -> t.Tuple[t.Optional[Token], t.Optional[Token], t.Optional[Token]]: 403 is_global = self._match(TokenType.GLOBAL) and self._prev 404 kind_pre = self._match_set(self.JOIN_KINDS, advance=False) and self._prev 405 406 if kind_pre: 407 kind = self._match_set(self.JOIN_KINDS) and self._prev 408 side = self._match_set(self.JOIN_SIDES) and self._prev 409 return is_global, side, kind 410 411 return ( 412 is_global, 413 self._match_set(self.JOIN_SIDES) and self._prev, 414 self._match_set(self.JOIN_KINDS) and self._prev, 415 ) 416 417 def _parse_join( 418 self, skip_join_token: bool = False, parse_bracket: bool = False 419 ) -> t.Optional[exp.Join]: 420 join = super()._parse_join(skip_join_token=skip_join_token, parse_bracket=True) 421 if join: 422 join.set("global", join.args.pop("method", None)) 423 424 return join 425 426 def _parse_function( 427 self, 428 functions: t.Optional[t.Dict[str, t.Callable]] = None, 429 anonymous: bool = False, 430 optional_parens: bool = True, 431 ) -> t.Optional[exp.Expression]: 432 func = super()._parse_function( 433 functions=functions, anonymous=anonymous, optional_parens=optional_parens 434 ) 435 436 if isinstance(func, exp.Anonymous): 437 parts = self.AGG_FUNC_MAPPING.get(func.this) 438 params = self._parse_func_params(func) 439 440 if params: 441 if parts and parts[1]: 442 return self.expression( 443 exp.CombinedParameterizedAgg, 444 this=func.this, 445 expressions=func.expressions, 446 params=params, 447 parts=parts, 448 ) 449 return self.expression( 450 exp.ParameterizedAgg, 451 this=func.this, 452 expressions=func.expressions, 453 params=params, 454 ) 455 456 if parts: 457 if parts[1]: 458 return self.expression( 459 exp.CombinedAggFunc, 460 this=func.this, 461 expressions=func.expressions, 462 parts=parts, 463 ) 464 return self.expression( 465 exp.AnonymousAggFunc, 466 this=func.this, 467 expressions=func.expressions, 468 ) 469 470 return func 471 472 def _parse_func_params( 473 self, this: t.Optional[exp.Func] = None 474 ) -> t.Optional[t.List[exp.Expression]]: 475 if self._match_pair(TokenType.R_PAREN, TokenType.L_PAREN): 476 return self._parse_csv(self._parse_lambda) 477 478 if self._match(TokenType.L_PAREN): 479 params = self._parse_csv(self._parse_lambda) 480 self._match_r_paren(this) 481 return params 482 483 return None 484 485 def _parse_quantile(self) -> exp.Quantile: 486 this = self._parse_lambda() 487 params = self._parse_func_params() 488 if params: 489 return self.expression(exp.Quantile, this=params[0], quantile=this) 490 return self.expression(exp.Quantile, this=this, quantile=exp.Literal.number(0.5)) 491 492 def _parse_wrapped_id_vars(self, optional: bool = False) -> t.List[exp.Expression]: 493 return super()._parse_wrapped_id_vars(optional=True) 494 495 def _parse_primary_key( 496 self, wrapped_optional: bool = False, in_props: bool = False 497 ) -> exp.PrimaryKeyColumnConstraint | exp.PrimaryKey: 498 return super()._parse_primary_key( 499 wrapped_optional=wrapped_optional or in_props, in_props=in_props 500 ) 501 502 def _parse_on_property(self) -> t.Optional[exp.Expression]: 503 index = self._index 504 if self._match_text_seq("CLUSTER"): 505 this = self._parse_id_var() 506 if this: 507 return self.expression(exp.OnCluster, this=this) 508 else: 509 self._retreat(index) 510 return None 511 512 class Generator(generator.Generator): 513 QUERY_HINTS = False 514 STRUCT_DELIMITER = ("(", ")") 515 NVL2_SUPPORTED = False 516 TABLESAMPLE_REQUIRES_PARENS = False 517 TABLESAMPLE_SIZE_IS_ROWS = False 518 TABLESAMPLE_KEYWORDS = "SAMPLE" 519 LAST_DAY_SUPPORTS_DATE_PART = False 520 CAN_IMPLEMENT_ARRAY_ANY = True 521 SUPPORTS_TO_NUMBER = False 522 523 STRING_TYPE_MAPPING = { 524 exp.DataType.Type.CHAR: "String", 525 exp.DataType.Type.LONGBLOB: "String", 526 exp.DataType.Type.LONGTEXT: "String", 527 exp.DataType.Type.MEDIUMBLOB: "String", 528 exp.DataType.Type.MEDIUMTEXT: "String", 529 exp.DataType.Type.TINYBLOB: "String", 530 exp.DataType.Type.TINYTEXT: "String", 531 exp.DataType.Type.TEXT: "String", 532 exp.DataType.Type.VARBINARY: "String", 533 exp.DataType.Type.VARCHAR: "String", 534 } 535 536 SUPPORTED_JSON_PATH_PARTS = { 537 exp.JSONPathKey, 538 exp.JSONPathRoot, 539 exp.JSONPathSubscript, 540 } 541 542 TYPE_MAPPING = { 543 **generator.Generator.TYPE_MAPPING, 544 **STRING_TYPE_MAPPING, 545 exp.DataType.Type.ARRAY: "Array", 546 exp.DataType.Type.BIGINT: "Int64", 547 exp.DataType.Type.DATE32: "Date32", 548 exp.DataType.Type.DATETIME64: "DateTime64", 549 exp.DataType.Type.DOUBLE: "Float64", 550 exp.DataType.Type.ENUM: "Enum", 551 exp.DataType.Type.ENUM8: "Enum8", 552 exp.DataType.Type.ENUM16: "Enum16", 553 exp.DataType.Type.FIXEDSTRING: "FixedString", 554 exp.DataType.Type.FLOAT: "Float32", 555 exp.DataType.Type.INT: "Int32", 556 exp.DataType.Type.MEDIUMINT: "Int32", 557 exp.DataType.Type.INT128: "Int128", 558 exp.DataType.Type.INT256: "Int256", 559 exp.DataType.Type.LOWCARDINALITY: "LowCardinality", 560 exp.DataType.Type.MAP: "Map", 561 exp.DataType.Type.NESTED: "Nested", 562 exp.DataType.Type.NULLABLE: "Nullable", 563 exp.DataType.Type.SMALLINT: "Int16", 564 exp.DataType.Type.STRUCT: "Tuple", 565 exp.DataType.Type.TINYINT: "Int8", 566 exp.DataType.Type.UBIGINT: "UInt64", 567 exp.DataType.Type.UINT: "UInt32", 568 exp.DataType.Type.UINT128: "UInt128", 569 exp.DataType.Type.UINT256: "UInt256", 570 exp.DataType.Type.USMALLINT: "UInt16", 571 exp.DataType.Type.UTINYINT: "UInt8", 572 exp.DataType.Type.IPV4: "IPv4", 573 exp.DataType.Type.IPV6: "IPv6", 574 exp.DataType.Type.AGGREGATEFUNCTION: "AggregateFunction", 575 exp.DataType.Type.SIMPLEAGGREGATEFUNCTION: "SimpleAggregateFunction", 576 } 577 578 TRANSFORMS = { 579 **generator.Generator.TRANSFORMS, 580 exp.AnyValue: rename_func("any"), 581 exp.ApproxDistinct: rename_func("uniq"), 582 exp.ArrayFilter: lambda self, e: self.func("arrayFilter", e.expression, e.this), 583 exp.ArraySize: rename_func("LENGTH"), 584 exp.ArraySum: rename_func("arraySum"), 585 exp.ArgMax: arg_max_or_min_no_count("argMax"), 586 exp.ArgMin: arg_max_or_min_no_count("argMin"), 587 exp.Array: inline_array_sql, 588 exp.CastToStrType: rename_func("CAST"), 589 exp.CountIf: rename_func("countIf"), 590 exp.CurrentDate: lambda self, e: self.func("CURRENT_DATE"), 591 exp.DateAdd: date_delta_sql("DATE_ADD"), 592 exp.DateDiff: date_delta_sql("DATE_DIFF"), 593 exp.Explode: rename_func("arrayJoin"), 594 exp.Final: lambda self, e: f"{self.sql(e, 'this')} FINAL", 595 exp.IsNan: rename_func("isNaN"), 596 exp.JSONExtract: json_extract_segments("JSONExtractString", quoted_index=False), 597 exp.JSONExtractScalar: json_extract_segments("JSONExtractString", quoted_index=False), 598 exp.JSONPathKey: json_path_key_only_name, 599 exp.JSONPathRoot: lambda *_: "", 600 exp.Map: lambda self, e: _lower_func(var_map_sql(self, e)), 601 exp.Nullif: rename_func("nullIf"), 602 exp.PartitionedByProperty: lambda self, e: f"PARTITION BY {self.sql(e, 'this')}", 603 exp.Pivot: no_pivot_sql, 604 exp.Quantile: _quantile_sql, 605 exp.RegexpLike: lambda self, e: self.func("match", e.this, e.expression), 606 exp.Rand: rename_func("randCanonical"), 607 exp.Select: transforms.preprocess([transforms.eliminate_qualify]), 608 exp.StartsWith: rename_func("startsWith"), 609 exp.StrPosition: lambda self, e: self.func( 610 "position", e.this, e.args.get("substr"), e.args.get("position") 611 ), 612 exp.VarMap: lambda self, e: _lower_func(var_map_sql(self, e)), 613 exp.Xor: lambda self, e: self.func("xor", e.this, e.expression, *e.expressions), 614 } 615 616 PROPERTIES_LOCATION = { 617 **generator.Generator.PROPERTIES_LOCATION, 618 exp.VolatileProperty: exp.Properties.Location.UNSUPPORTED, 619 exp.PartitionedByProperty: exp.Properties.Location.POST_SCHEMA, 620 exp.OnCluster: exp.Properties.Location.POST_NAME, 621 } 622 623 JOIN_HINTS = False 624 TABLE_HINTS = False 625 EXPLICIT_UNION = True 626 GROUPINGS_SEP = "" 627 628 # there's no list in docs, but it can be found in Clickhouse code 629 # see `ClickHouse/src/Parsers/ParserCreate*.cpp` 630 ON_CLUSTER_TARGETS = { 631 "DATABASE", 632 "TABLE", 633 "VIEW", 634 "DICTIONARY", 635 "INDEX", 636 "FUNCTION", 637 "NAMED COLLECTION", 638 } 639 640 def _jsonpathsubscript_sql(self, expression: exp.JSONPathSubscript) -> str: 641 this = self.json_path_part(expression.this) 642 return str(int(this) + 1) if is_int(this) else this 643 644 def likeproperty_sql(self, expression: exp.LikeProperty) -> str: 645 return f"AS {self.sql(expression, 'this')}" 646 647 def _any_to_has( 648 self, 649 expression: exp.EQ | exp.NEQ, 650 default: t.Callable[[t.Any], str], 651 prefix: str = "", 652 ) -> str: 653 if isinstance(expression.left, exp.Any): 654 arr = expression.left 655 this = expression.right 656 elif isinstance(expression.right, exp.Any): 657 arr = expression.right 658 this = expression.left 659 else: 660 return default(expression) 661 662 return prefix + self.func("has", arr.this.unnest(), this) 663 664 def eq_sql(self, expression: exp.EQ) -> str: 665 return self._any_to_has(expression, super().eq_sql) 666 667 def neq_sql(self, expression: exp.NEQ) -> str: 668 return self._any_to_has(expression, super().neq_sql, "NOT ") 669 670 def regexpilike_sql(self, expression: exp.RegexpILike) -> str: 671 # Manually add a flag to make the search case-insensitive 672 regex = self.func("CONCAT", "'(?i)'", expression.expression) 673 return self.func("match", expression.this, regex) 674 675 def datatype_sql(self, expression: exp.DataType) -> str: 676 # String is the standard ClickHouse type, every other variant is just an alias. 677 # Additionally, any supplied length parameter will be ignored. 678 # 679 # https://clickhouse.com/docs/en/sql-reference/data-types/string 680 if expression.this in self.STRING_TYPE_MAPPING: 681 return "String" 682 683 return super().datatype_sql(expression) 684 685 def cte_sql(self, expression: exp.CTE) -> str: 686 if expression.args.get("scalar"): 687 this = self.sql(expression, "this") 688 alias = self.sql(expression, "alias") 689 return f"{this} AS {alias}" 690 691 return super().cte_sql(expression) 692 693 def after_limit_modifiers(self, expression: exp.Expression) -> t.List[str]: 694 return super().after_limit_modifiers(expression) + [ 695 ( 696 self.seg("SETTINGS ") + self.expressions(expression, key="settings", flat=True) 697 if expression.args.get("settings") 698 else "" 699 ), 700 ( 701 self.seg("FORMAT ") + self.sql(expression, "format") 702 if expression.args.get("format") 703 else "" 704 ), 705 ] 706 707 def parameterizedagg_sql(self, expression: exp.ParameterizedAgg) -> str: 708 params = self.expressions(expression, key="params", flat=True) 709 return self.func(expression.name, *expression.expressions) + f"({params})" 710 711 def anonymousaggfunc_sql(self, expression: exp.AnonymousAggFunc) -> str: 712 return self.func(expression.name, *expression.expressions) 713 714 def combinedaggfunc_sql(self, expression: exp.CombinedAggFunc) -> str: 715 return self.anonymousaggfunc_sql(expression) 716 717 def combinedparameterizedagg_sql(self, expression: exp.CombinedParameterizedAgg) -> str: 718 return self.parameterizedagg_sql(expression) 719 720 def placeholder_sql(self, expression: exp.Placeholder) -> str: 721 return f"{{{expression.name}: {self.sql(expression, 'kind')}}}" 722 723 def oncluster_sql(self, expression: exp.OnCluster) -> str: 724 return f"ON CLUSTER {self.sql(expression, 'this')}" 725 726 def createable_sql(self, expression: exp.Create, locations: t.DefaultDict) -> str: 727 if expression.kind in self.ON_CLUSTER_TARGETS and locations.get( 728 exp.Properties.Location.POST_NAME 729 ): 730 this_name = self.sql(expression.this, "this") 731 this_properties = " ".join( 732 [self.sql(prop) for prop in locations[exp.Properties.Location.POST_NAME]] 733 ) 734 this_schema = self.schema_columns_sql(expression.this) 735 return f"{this_name}{self.sep()}{this_properties}{self.sep()}{this_schema}" 736 737 return super().createable_sql(expression, locations) 738 739 def prewhere_sql(self, expression: exp.PreWhere) -> str: 740 this = self.indent(self.sql(expression, "this")) 741 return f"{self.seg('PREWHERE')}{self.sep()}{this}"
48class ClickHouse(Dialect): 49 NORMALIZE_FUNCTIONS: bool | str = False 50 NULL_ORDERING = "nulls_are_last" 51 SUPPORTS_USER_DEFINED_TYPES = False 52 SAFE_DIVISION = True 53 LOG_BASE_FIRST: t.Optional[bool] = None 54 55 ESCAPE_SEQUENCES = { 56 "\\0": "\0", 57 } 58 59 class Tokenizer(tokens.Tokenizer): 60 COMMENTS = ["--", "#", "#!", ("/*", "*/")] 61 IDENTIFIERS = ['"', "`"] 62 STRING_ESCAPES = ["'", "\\"] 63 BIT_STRINGS = [("0b", "")] 64 HEX_STRINGS = [("0x", ""), ("0X", "")] 65 HEREDOC_STRINGS = ["$"] 66 67 KEYWORDS = { 68 **tokens.Tokenizer.KEYWORDS, 69 "ATTACH": TokenType.COMMAND, 70 "DATE32": TokenType.DATE32, 71 "DATETIME64": TokenType.DATETIME64, 72 "DICTIONARY": TokenType.DICTIONARY, 73 "ENUM8": TokenType.ENUM8, 74 "ENUM16": TokenType.ENUM16, 75 "FINAL": TokenType.FINAL, 76 "FIXEDSTRING": TokenType.FIXEDSTRING, 77 "FLOAT32": TokenType.FLOAT, 78 "FLOAT64": TokenType.DOUBLE, 79 "GLOBAL": TokenType.GLOBAL, 80 "INT256": TokenType.INT256, 81 "LOWCARDINALITY": TokenType.LOWCARDINALITY, 82 "MAP": TokenType.MAP, 83 "NESTED": TokenType.NESTED, 84 "SAMPLE": TokenType.TABLE_SAMPLE, 85 "TUPLE": TokenType.STRUCT, 86 "UINT128": TokenType.UINT128, 87 "UINT16": TokenType.USMALLINT, 88 "UINT256": TokenType.UINT256, 89 "UINT32": TokenType.UINT, 90 "UINT64": TokenType.UBIGINT, 91 "UINT8": TokenType.UTINYINT, 92 "IPV4": TokenType.IPV4, 93 "IPV6": TokenType.IPV6, 94 "AGGREGATEFUNCTION": TokenType.AGGREGATEFUNCTION, 95 "SIMPLEAGGREGATEFUNCTION": TokenType.SIMPLEAGGREGATEFUNCTION, 96 "SYSTEM": TokenType.COMMAND, 97 "PREWHERE": TokenType.PREWHERE, 98 } 99 100 SINGLE_TOKENS = { 101 **tokens.Tokenizer.SINGLE_TOKENS, 102 "$": TokenType.HEREDOC_STRING, 103 } 104 105 class Parser(parser.Parser): 106 # Tested in ClickHouse's playground, it seems that the following two queries do the same thing 107 # * select x from t1 union all select x from t2 limit 1; 108 # * select x from t1 union all (select x from t2 limit 1); 109 MODIFIERS_ATTACHED_TO_UNION = False 110 111 FUNCTIONS = { 112 **parser.Parser.FUNCTIONS, 113 "ANY": exp.AnyValue.from_arg_list, 114 "ARRAYSUM": exp.ArraySum.from_arg_list, 115 "COUNTIF": _build_count_if, 116 "DATE_ADD": lambda args: exp.DateAdd( 117 this=seq_get(args, 2), expression=seq_get(args, 1), unit=seq_get(args, 0) 118 ), 119 "DATEADD": lambda args: exp.DateAdd( 120 this=seq_get(args, 2), expression=seq_get(args, 1), unit=seq_get(args, 0) 121 ), 122 "DATE_DIFF": lambda args: exp.DateDiff( 123 this=seq_get(args, 2), expression=seq_get(args, 1), unit=seq_get(args, 0) 124 ), 125 "DATEDIFF": lambda args: exp.DateDiff( 126 this=seq_get(args, 2), expression=seq_get(args, 1), unit=seq_get(args, 0) 127 ), 128 "JSONEXTRACTSTRING": build_json_extract_path( 129 exp.JSONExtractScalar, zero_based_indexing=False 130 ), 131 "MAP": parser.build_var_map, 132 "MATCH": exp.RegexpLike.from_arg_list, 133 "RANDCANONICAL": exp.Rand.from_arg_list, 134 "TUPLE": exp.Struct.from_arg_list, 135 "UNIQ": exp.ApproxDistinct.from_arg_list, 136 "XOR": lambda args: exp.Xor(expressions=args), 137 } 138 139 AGG_FUNCTIONS = { 140 "count", 141 "min", 142 "max", 143 "sum", 144 "avg", 145 "any", 146 "stddevPop", 147 "stddevSamp", 148 "varPop", 149 "varSamp", 150 "corr", 151 "covarPop", 152 "covarSamp", 153 "entropy", 154 "exponentialMovingAverage", 155 "intervalLengthSum", 156 "kolmogorovSmirnovTest", 157 "mannWhitneyUTest", 158 "median", 159 "rankCorr", 160 "sumKahan", 161 "studentTTest", 162 "welchTTest", 163 "anyHeavy", 164 "anyLast", 165 "boundingRatio", 166 "first_value", 167 "last_value", 168 "argMin", 169 "argMax", 170 "avgWeighted", 171 "topK", 172 "topKWeighted", 173 "deltaSum", 174 "deltaSumTimestamp", 175 "groupArray", 176 "groupArrayLast", 177 "groupUniqArray", 178 "groupArrayInsertAt", 179 "groupArrayMovingAvg", 180 "groupArrayMovingSum", 181 "groupArraySample", 182 "groupBitAnd", 183 "groupBitOr", 184 "groupBitXor", 185 "groupBitmap", 186 "groupBitmapAnd", 187 "groupBitmapOr", 188 "groupBitmapXor", 189 "sumWithOverflow", 190 "sumMap", 191 "minMap", 192 "maxMap", 193 "skewSamp", 194 "skewPop", 195 "kurtSamp", 196 "kurtPop", 197 "uniq", 198 "uniqExact", 199 "uniqCombined", 200 "uniqCombined64", 201 "uniqHLL12", 202 "uniqTheta", 203 "quantile", 204 "quantiles", 205 "quantileExact", 206 "quantilesExact", 207 "quantileExactLow", 208 "quantilesExactLow", 209 "quantileExactHigh", 210 "quantilesExactHigh", 211 "quantileExactWeighted", 212 "quantilesExactWeighted", 213 "quantileTiming", 214 "quantilesTiming", 215 "quantileTimingWeighted", 216 "quantilesTimingWeighted", 217 "quantileDeterministic", 218 "quantilesDeterministic", 219 "quantileTDigest", 220 "quantilesTDigest", 221 "quantileTDigestWeighted", 222 "quantilesTDigestWeighted", 223 "quantileBFloat16", 224 "quantilesBFloat16", 225 "quantileBFloat16Weighted", 226 "quantilesBFloat16Weighted", 227 "simpleLinearRegression", 228 "stochasticLinearRegression", 229 "stochasticLogisticRegression", 230 "categoricalInformationValue", 231 "contingency", 232 "cramersV", 233 "cramersVBiasCorrected", 234 "theilsU", 235 "maxIntersections", 236 "maxIntersectionsPosition", 237 "meanZTest", 238 "quantileInterpolatedWeighted", 239 "quantilesInterpolatedWeighted", 240 "quantileGK", 241 "quantilesGK", 242 "sparkBar", 243 "sumCount", 244 "largestTriangleThreeBuckets", 245 } 246 247 AGG_FUNCTIONS_SUFFIXES = [ 248 "If", 249 "Array", 250 "ArrayIf", 251 "Map", 252 "SimpleState", 253 "State", 254 "Merge", 255 "MergeState", 256 "ForEach", 257 "Distinct", 258 "OrDefault", 259 "OrNull", 260 "Resample", 261 "ArgMin", 262 "ArgMax", 263 ] 264 265 AGG_FUNC_MAPPING = ( 266 lambda functions, suffixes: { 267 f"{f}{sfx}": (f, sfx) for sfx in (suffixes + [""]) for f in functions 268 } 269 )(AGG_FUNCTIONS, AGG_FUNCTIONS_SUFFIXES) 270 271 FUNCTIONS_WITH_ALIASED_ARGS = {*parser.Parser.FUNCTIONS_WITH_ALIASED_ARGS, "TUPLE"} 272 273 FUNCTION_PARSERS = { 274 **parser.Parser.FUNCTION_PARSERS, 275 "ARRAYJOIN": lambda self: self.expression(exp.Explode, this=self._parse_expression()), 276 "QUANTILE": lambda self: self._parse_quantile(), 277 } 278 279 FUNCTION_PARSERS.pop("MATCH") 280 281 NO_PAREN_FUNCTION_PARSERS = parser.Parser.NO_PAREN_FUNCTION_PARSERS.copy() 282 NO_PAREN_FUNCTION_PARSERS.pop("ANY") 283 284 RANGE_PARSERS = { 285 **parser.Parser.RANGE_PARSERS, 286 TokenType.GLOBAL: lambda self, this: self._match(TokenType.IN) 287 and self._parse_in(this, is_global=True), 288 } 289 290 # The PLACEHOLDER entry is popped because 1) it doesn't affect Clickhouse (it corresponds to 291 # the postgres-specific JSONBContains parser) and 2) it makes parsing the ternary op simpler. 292 COLUMN_OPERATORS = parser.Parser.COLUMN_OPERATORS.copy() 293 COLUMN_OPERATORS.pop(TokenType.PLACEHOLDER) 294 295 JOIN_KINDS = { 296 *parser.Parser.JOIN_KINDS, 297 TokenType.ANY, 298 TokenType.ASOF, 299 TokenType.ARRAY, 300 } 301 302 TABLE_ALIAS_TOKENS = parser.Parser.TABLE_ALIAS_TOKENS - { 303 TokenType.ANY, 304 TokenType.ARRAY, 305 TokenType.FINAL, 306 TokenType.FORMAT, 307 TokenType.SETTINGS, 308 } 309 310 LOG_DEFAULTS_TO_LN = True 311 312 QUERY_MODIFIER_PARSERS = { 313 **parser.Parser.QUERY_MODIFIER_PARSERS, 314 TokenType.SETTINGS: lambda self: ( 315 "settings", 316 self._advance() or self._parse_csv(self._parse_conjunction), 317 ), 318 TokenType.FORMAT: lambda self: ("format", self._advance() or self._parse_id_var()), 319 } 320 321 def _parse_conjunction(self) -> t.Optional[exp.Expression]: 322 this = super()._parse_conjunction() 323 324 if self._match(TokenType.PLACEHOLDER): 325 return self.expression( 326 exp.If, 327 this=this, 328 true=self._parse_conjunction(), 329 false=self._match(TokenType.COLON) and self._parse_conjunction(), 330 ) 331 332 return this 333 334 def _parse_placeholder(self) -> t.Optional[exp.Expression]: 335 """ 336 Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier} 337 https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters 338 """ 339 if not self._match(TokenType.L_BRACE): 340 return None 341 342 this = self._parse_id_var() 343 self._match(TokenType.COLON) 344 kind = self._parse_types(check_func=False, allow_identifiers=False) or ( 345 self._match_text_seq("IDENTIFIER") and "Identifier" 346 ) 347 348 if not kind: 349 self.raise_error("Expecting a placeholder type or 'Identifier' for tables") 350 elif not self._match(TokenType.R_BRACE): 351 self.raise_error("Expecting }") 352 353 return self.expression(exp.Placeholder, this=this, kind=kind) 354 355 def _parse_in(self, this: t.Optional[exp.Expression], is_global: bool = False) -> exp.In: 356 this = super()._parse_in(this) 357 this.set("is_global", is_global) 358 return this 359 360 def _parse_table( 361 self, 362 schema: bool = False, 363 joins: bool = False, 364 alias_tokens: t.Optional[t.Collection[TokenType]] = None, 365 parse_bracket: bool = False, 366 is_db_reference: bool = False, 367 ) -> t.Optional[exp.Expression]: 368 this = super()._parse_table( 369 schema=schema, 370 joins=joins, 371 alias_tokens=alias_tokens, 372 parse_bracket=parse_bracket, 373 is_db_reference=is_db_reference, 374 ) 375 376 if self._match(TokenType.FINAL): 377 this = self.expression(exp.Final, this=this) 378 379 return this 380 381 def _parse_position(self, haystack_first: bool = False) -> exp.StrPosition: 382 return super()._parse_position(haystack_first=True) 383 384 # https://clickhouse.com/docs/en/sql-reference/statements/select/with/ 385 def _parse_cte(self) -> exp.CTE: 386 index = self._index 387 try: 388 # WITH <identifier> AS <subquery expression> 389 return super()._parse_cte() 390 except ParseError: 391 # WITH <expression> AS <identifier> 392 self._retreat(index) 393 394 return self.expression( 395 exp.CTE, 396 this=self._parse_conjunction(), 397 alias=self._parse_table_alias(), 398 scalar=True, 399 ) 400 401 def _parse_join_parts( 402 self, 403 ) -> t.Tuple[t.Optional[Token], t.Optional[Token], t.Optional[Token]]: 404 is_global = self._match(TokenType.GLOBAL) and self._prev 405 kind_pre = self._match_set(self.JOIN_KINDS, advance=False) and self._prev 406 407 if kind_pre: 408 kind = self._match_set(self.JOIN_KINDS) and self._prev 409 side = self._match_set(self.JOIN_SIDES) and self._prev 410 return is_global, side, kind 411 412 return ( 413 is_global, 414 self._match_set(self.JOIN_SIDES) and self._prev, 415 self._match_set(self.JOIN_KINDS) and self._prev, 416 ) 417 418 def _parse_join( 419 self, skip_join_token: bool = False, parse_bracket: bool = False 420 ) -> t.Optional[exp.Join]: 421 join = super()._parse_join(skip_join_token=skip_join_token, parse_bracket=True) 422 if join: 423 join.set("global", join.args.pop("method", None)) 424 425 return join 426 427 def _parse_function( 428 self, 429 functions: t.Optional[t.Dict[str, t.Callable]] = None, 430 anonymous: bool = False, 431 optional_parens: bool = True, 432 ) -> t.Optional[exp.Expression]: 433 func = super()._parse_function( 434 functions=functions, anonymous=anonymous, optional_parens=optional_parens 435 ) 436 437 if isinstance(func, exp.Anonymous): 438 parts = self.AGG_FUNC_MAPPING.get(func.this) 439 params = self._parse_func_params(func) 440 441 if params: 442 if parts and parts[1]: 443 return self.expression( 444 exp.CombinedParameterizedAgg, 445 this=func.this, 446 expressions=func.expressions, 447 params=params, 448 parts=parts, 449 ) 450 return self.expression( 451 exp.ParameterizedAgg, 452 this=func.this, 453 expressions=func.expressions, 454 params=params, 455 ) 456 457 if parts: 458 if parts[1]: 459 return self.expression( 460 exp.CombinedAggFunc, 461 this=func.this, 462 expressions=func.expressions, 463 parts=parts, 464 ) 465 return self.expression( 466 exp.AnonymousAggFunc, 467 this=func.this, 468 expressions=func.expressions, 469 ) 470 471 return func 472 473 def _parse_func_params( 474 self, this: t.Optional[exp.Func] = None 475 ) -> t.Optional[t.List[exp.Expression]]: 476 if self._match_pair(TokenType.R_PAREN, TokenType.L_PAREN): 477 return self._parse_csv(self._parse_lambda) 478 479 if self._match(TokenType.L_PAREN): 480 params = self._parse_csv(self._parse_lambda) 481 self._match_r_paren(this) 482 return params 483 484 return None 485 486 def _parse_quantile(self) -> exp.Quantile: 487 this = self._parse_lambda() 488 params = self._parse_func_params() 489 if params: 490 return self.expression(exp.Quantile, this=params[0], quantile=this) 491 return self.expression(exp.Quantile, this=this, quantile=exp.Literal.number(0.5)) 492 493 def _parse_wrapped_id_vars(self, optional: bool = False) -> t.List[exp.Expression]: 494 return super()._parse_wrapped_id_vars(optional=True) 495 496 def _parse_primary_key( 497 self, wrapped_optional: bool = False, in_props: bool = False 498 ) -> exp.PrimaryKeyColumnConstraint | exp.PrimaryKey: 499 return super()._parse_primary_key( 500 wrapped_optional=wrapped_optional or in_props, in_props=in_props 501 ) 502 503 def _parse_on_property(self) -> t.Optional[exp.Expression]: 504 index = self._index 505 if self._match_text_seq("CLUSTER"): 506 this = self._parse_id_var() 507 if this: 508 return self.expression(exp.OnCluster, this=this) 509 else: 510 self._retreat(index) 511 return None 512 513 class Generator(generator.Generator): 514 QUERY_HINTS = False 515 STRUCT_DELIMITER = ("(", ")") 516 NVL2_SUPPORTED = False 517 TABLESAMPLE_REQUIRES_PARENS = False 518 TABLESAMPLE_SIZE_IS_ROWS = False 519 TABLESAMPLE_KEYWORDS = "SAMPLE" 520 LAST_DAY_SUPPORTS_DATE_PART = False 521 CAN_IMPLEMENT_ARRAY_ANY = True 522 SUPPORTS_TO_NUMBER = False 523 524 STRING_TYPE_MAPPING = { 525 exp.DataType.Type.CHAR: "String", 526 exp.DataType.Type.LONGBLOB: "String", 527 exp.DataType.Type.LONGTEXT: "String", 528 exp.DataType.Type.MEDIUMBLOB: "String", 529 exp.DataType.Type.MEDIUMTEXT: "String", 530 exp.DataType.Type.TINYBLOB: "String", 531 exp.DataType.Type.TINYTEXT: "String", 532 exp.DataType.Type.TEXT: "String", 533 exp.DataType.Type.VARBINARY: "String", 534 exp.DataType.Type.VARCHAR: "String", 535 } 536 537 SUPPORTED_JSON_PATH_PARTS = { 538 exp.JSONPathKey, 539 exp.JSONPathRoot, 540 exp.JSONPathSubscript, 541 } 542 543 TYPE_MAPPING = { 544 **generator.Generator.TYPE_MAPPING, 545 **STRING_TYPE_MAPPING, 546 exp.DataType.Type.ARRAY: "Array", 547 exp.DataType.Type.BIGINT: "Int64", 548 exp.DataType.Type.DATE32: "Date32", 549 exp.DataType.Type.DATETIME64: "DateTime64", 550 exp.DataType.Type.DOUBLE: "Float64", 551 exp.DataType.Type.ENUM: "Enum", 552 exp.DataType.Type.ENUM8: "Enum8", 553 exp.DataType.Type.ENUM16: "Enum16", 554 exp.DataType.Type.FIXEDSTRING: "FixedString", 555 exp.DataType.Type.FLOAT: "Float32", 556 exp.DataType.Type.INT: "Int32", 557 exp.DataType.Type.MEDIUMINT: "Int32", 558 exp.DataType.Type.INT128: "Int128", 559 exp.DataType.Type.INT256: "Int256", 560 exp.DataType.Type.LOWCARDINALITY: "LowCardinality", 561 exp.DataType.Type.MAP: "Map", 562 exp.DataType.Type.NESTED: "Nested", 563 exp.DataType.Type.NULLABLE: "Nullable", 564 exp.DataType.Type.SMALLINT: "Int16", 565 exp.DataType.Type.STRUCT: "Tuple", 566 exp.DataType.Type.TINYINT: "Int8", 567 exp.DataType.Type.UBIGINT: "UInt64", 568 exp.DataType.Type.UINT: "UInt32", 569 exp.DataType.Type.UINT128: "UInt128", 570 exp.DataType.Type.UINT256: "UInt256", 571 exp.DataType.Type.USMALLINT: "UInt16", 572 exp.DataType.Type.UTINYINT: "UInt8", 573 exp.DataType.Type.IPV4: "IPv4", 574 exp.DataType.Type.IPV6: "IPv6", 575 exp.DataType.Type.AGGREGATEFUNCTION: "AggregateFunction", 576 exp.DataType.Type.SIMPLEAGGREGATEFUNCTION: "SimpleAggregateFunction", 577 } 578 579 TRANSFORMS = { 580 **generator.Generator.TRANSFORMS, 581 exp.AnyValue: rename_func("any"), 582 exp.ApproxDistinct: rename_func("uniq"), 583 exp.ArrayFilter: lambda self, e: self.func("arrayFilter", e.expression, e.this), 584 exp.ArraySize: rename_func("LENGTH"), 585 exp.ArraySum: rename_func("arraySum"), 586 exp.ArgMax: arg_max_or_min_no_count("argMax"), 587 exp.ArgMin: arg_max_or_min_no_count("argMin"), 588 exp.Array: inline_array_sql, 589 exp.CastToStrType: rename_func("CAST"), 590 exp.CountIf: rename_func("countIf"), 591 exp.CurrentDate: lambda self, e: self.func("CURRENT_DATE"), 592 exp.DateAdd: date_delta_sql("DATE_ADD"), 593 exp.DateDiff: date_delta_sql("DATE_DIFF"), 594 exp.Explode: rename_func("arrayJoin"), 595 exp.Final: lambda self, e: f"{self.sql(e, 'this')} FINAL", 596 exp.IsNan: rename_func("isNaN"), 597 exp.JSONExtract: json_extract_segments("JSONExtractString", quoted_index=False), 598 exp.JSONExtractScalar: json_extract_segments("JSONExtractString", quoted_index=False), 599 exp.JSONPathKey: json_path_key_only_name, 600 exp.JSONPathRoot: lambda *_: "", 601 exp.Map: lambda self, e: _lower_func(var_map_sql(self, e)), 602 exp.Nullif: rename_func("nullIf"), 603 exp.PartitionedByProperty: lambda self, e: f"PARTITION BY {self.sql(e, 'this')}", 604 exp.Pivot: no_pivot_sql, 605 exp.Quantile: _quantile_sql, 606 exp.RegexpLike: lambda self, e: self.func("match", e.this, e.expression), 607 exp.Rand: rename_func("randCanonical"), 608 exp.Select: transforms.preprocess([transforms.eliminate_qualify]), 609 exp.StartsWith: rename_func("startsWith"), 610 exp.StrPosition: lambda self, e: self.func( 611 "position", e.this, e.args.get("substr"), e.args.get("position") 612 ), 613 exp.VarMap: lambda self, e: _lower_func(var_map_sql(self, e)), 614 exp.Xor: lambda self, e: self.func("xor", e.this, e.expression, *e.expressions), 615 } 616 617 PROPERTIES_LOCATION = { 618 **generator.Generator.PROPERTIES_LOCATION, 619 exp.VolatileProperty: exp.Properties.Location.UNSUPPORTED, 620 exp.PartitionedByProperty: exp.Properties.Location.POST_SCHEMA, 621 exp.OnCluster: exp.Properties.Location.POST_NAME, 622 } 623 624 JOIN_HINTS = False 625 TABLE_HINTS = False 626 EXPLICIT_UNION = True 627 GROUPINGS_SEP = "" 628 629 # there's no list in docs, but it can be found in Clickhouse code 630 # see `ClickHouse/src/Parsers/ParserCreate*.cpp` 631 ON_CLUSTER_TARGETS = { 632 "DATABASE", 633 "TABLE", 634 "VIEW", 635 "DICTIONARY", 636 "INDEX", 637 "FUNCTION", 638 "NAMED COLLECTION", 639 } 640 641 def _jsonpathsubscript_sql(self, expression: exp.JSONPathSubscript) -> str: 642 this = self.json_path_part(expression.this) 643 return str(int(this) + 1) if is_int(this) else this 644 645 def likeproperty_sql(self, expression: exp.LikeProperty) -> str: 646 return f"AS {self.sql(expression, 'this')}" 647 648 def _any_to_has( 649 self, 650 expression: exp.EQ | exp.NEQ, 651 default: t.Callable[[t.Any], str], 652 prefix: str = "", 653 ) -> str: 654 if isinstance(expression.left, exp.Any): 655 arr = expression.left 656 this = expression.right 657 elif isinstance(expression.right, exp.Any): 658 arr = expression.right 659 this = expression.left 660 else: 661 return default(expression) 662 663 return prefix + self.func("has", arr.this.unnest(), this) 664 665 def eq_sql(self, expression: exp.EQ) -> str: 666 return self._any_to_has(expression, super().eq_sql) 667 668 def neq_sql(self, expression: exp.NEQ) -> str: 669 return self._any_to_has(expression, super().neq_sql, "NOT ") 670 671 def regexpilike_sql(self, expression: exp.RegexpILike) -> str: 672 # Manually add a flag to make the search case-insensitive 673 regex = self.func("CONCAT", "'(?i)'", expression.expression) 674 return self.func("match", expression.this, regex) 675 676 def datatype_sql(self, expression: exp.DataType) -> str: 677 # String is the standard ClickHouse type, every other variant is just an alias. 678 # Additionally, any supplied length parameter will be ignored. 679 # 680 # https://clickhouse.com/docs/en/sql-reference/data-types/string 681 if expression.this in self.STRING_TYPE_MAPPING: 682 return "String" 683 684 return super().datatype_sql(expression) 685 686 def cte_sql(self, expression: exp.CTE) -> str: 687 if expression.args.get("scalar"): 688 this = self.sql(expression, "this") 689 alias = self.sql(expression, "alias") 690 return f"{this} AS {alias}" 691 692 return super().cte_sql(expression) 693 694 def after_limit_modifiers(self, expression: exp.Expression) -> t.List[str]: 695 return super().after_limit_modifiers(expression) + [ 696 ( 697 self.seg("SETTINGS ") + self.expressions(expression, key="settings", flat=True) 698 if expression.args.get("settings") 699 else "" 700 ), 701 ( 702 self.seg("FORMAT ") + self.sql(expression, "format") 703 if expression.args.get("format") 704 else "" 705 ), 706 ] 707 708 def parameterizedagg_sql(self, expression: exp.ParameterizedAgg) -> str: 709 params = self.expressions(expression, key="params", flat=True) 710 return self.func(expression.name, *expression.expressions) + f"({params})" 711 712 def anonymousaggfunc_sql(self, expression: exp.AnonymousAggFunc) -> str: 713 return self.func(expression.name, *expression.expressions) 714 715 def combinedaggfunc_sql(self, expression: exp.CombinedAggFunc) -> str: 716 return self.anonymousaggfunc_sql(expression) 717 718 def combinedparameterizedagg_sql(self, expression: exp.CombinedParameterizedAgg) -> str: 719 return self.parameterizedagg_sql(expression) 720 721 def placeholder_sql(self, expression: exp.Placeholder) -> str: 722 return f"{{{expression.name}: {self.sql(expression, 'kind')}}}" 723 724 def oncluster_sql(self, expression: exp.OnCluster) -> str: 725 return f"ON CLUSTER {self.sql(expression, 'this')}" 726 727 def createable_sql(self, expression: exp.Create, locations: t.DefaultDict) -> str: 728 if expression.kind in self.ON_CLUSTER_TARGETS and locations.get( 729 exp.Properties.Location.POST_NAME 730 ): 731 this_name = self.sql(expression.this, "this") 732 this_properties = " ".join( 733 [self.sql(prop) for prop in locations[exp.Properties.Location.POST_NAME]] 734 ) 735 this_schema = self.schema_columns_sql(expression.this) 736 return f"{this_name}{self.sep()}{this_properties}{self.sep()}{this_schema}" 737 738 return super().createable_sql(expression, locations) 739 740 def prewhere_sql(self, expression: exp.PreWhere) -> str: 741 this = self.indent(self.sql(expression, "this")) 742 return f"{self.seg('PREWHERE')}{self.sep()}{this}"
NORMALIZE_FUNCTIONS: bool | str =
False
Determines how function names are going to be normalized.
Possible values:
"upper" or True: Convert names to uppercase. "lower": Convert names to lowercase. False: Disables function name normalization.
NULL_ORDERING =
'nulls_are_last'
Default NULL
ordering method to use if not explicitly set.
Possible values: "nulls_are_small"
, "nulls_are_large"
, "nulls_are_last"
LOG_BASE_FIRST: Optional[bool] =
None
Whether the base comes first in the LOG
function.
Possible values: True
, False
, None
(two arguments are not supported by LOG
)
ESCAPE_SEQUENCES =
{'\\0': '\x00'}
Mapping of an unescaped escape sequence to the corresponding character.
tokenizer_class =
<class 'ClickHouse.Tokenizer'>
parser_class =
<class 'ClickHouse.Parser'>
generator_class =
<class 'ClickHouse.Generator'>
Inherited Members
- sqlglot.dialects.dialect.Dialect
- Dialect
- INDEX_OFFSET
- WEEK_OFFSET
- UNNEST_COLUMN_ONLY
- ALIAS_POST_TABLESAMPLE
- TABLESAMPLE_SIZE_IS_PERCENT
- NORMALIZATION_STRATEGY
- IDENTIFIERS_CAN_START_WITH_DIGIT
- DPIPE_IS_STRING_CONCAT
- STRICT_STRING_CONCAT
- SUPPORTS_SEMI_ANTI_JOIN
- TYPED_DIVISION
- CONCAT_COALESCE
- DATE_FORMAT
- DATEINT_FORMAT
- TIME_FORMAT
- TIME_MAPPING
- FORMAT_MAPPING
- PSEUDOCOLUMNS
- PREFER_CTE_ALIAS_COLUMN
- get_or_raise
- format_time
- normalize_identifier
- case_sensitive
- can_identify
- quote_identifier
- to_json_path
- parse
- parse_into
- generate
- transpile
- tokenize
- tokenizer
- parser
- generator
59 class Tokenizer(tokens.Tokenizer): 60 COMMENTS = ["--", "#", "#!", ("/*", "*/")] 61 IDENTIFIERS = ['"', "`"] 62 STRING_ESCAPES = ["'", "\\"] 63 BIT_STRINGS = [("0b", "")] 64 HEX_STRINGS = [("0x", ""), ("0X", "")] 65 HEREDOC_STRINGS = ["$"] 66 67 KEYWORDS = { 68 **tokens.Tokenizer.KEYWORDS, 69 "ATTACH": TokenType.COMMAND, 70 "DATE32": TokenType.DATE32, 71 "DATETIME64": TokenType.DATETIME64, 72 "DICTIONARY": TokenType.DICTIONARY, 73 "ENUM8": TokenType.ENUM8, 74 "ENUM16": TokenType.ENUM16, 75 "FINAL": TokenType.FINAL, 76 "FIXEDSTRING": TokenType.FIXEDSTRING, 77 "FLOAT32": TokenType.FLOAT, 78 "FLOAT64": TokenType.DOUBLE, 79 "GLOBAL": TokenType.GLOBAL, 80 "INT256": TokenType.INT256, 81 "LOWCARDINALITY": TokenType.LOWCARDINALITY, 82 "MAP": TokenType.MAP, 83 "NESTED": TokenType.NESTED, 84 "SAMPLE": TokenType.TABLE_SAMPLE, 85 "TUPLE": TokenType.STRUCT, 86 "UINT128": TokenType.UINT128, 87 "UINT16": TokenType.USMALLINT, 88 "UINT256": TokenType.UINT256, 89 "UINT32": TokenType.UINT, 90 "UINT64": TokenType.UBIGINT, 91 "UINT8": TokenType.UTINYINT, 92 "IPV4": TokenType.IPV4, 93 "IPV6": TokenType.IPV6, 94 "AGGREGATEFUNCTION": TokenType.AGGREGATEFUNCTION, 95 "SIMPLEAGGREGATEFUNCTION": TokenType.SIMPLEAGGREGATEFUNCTION, 96 "SYSTEM": TokenType.COMMAND, 97 "PREWHERE": TokenType.PREWHERE, 98 } 99 100 SINGLE_TOKENS = { 101 **tokens.Tokenizer.SINGLE_TOKENS, 102 "$": TokenType.HEREDOC_STRING, 103 }
KEYWORDS =
{'{%': <TokenType.BLOCK_START: 'BLOCK_START'>, '{%+': <TokenType.BLOCK_START: 'BLOCK_START'>, '{%-': <TokenType.BLOCK_START: 'BLOCK_START'>, '%}': <TokenType.BLOCK_END: 'BLOCK_END'>, '+%}': <TokenType.BLOCK_END: 'BLOCK_END'>, '-%}': <TokenType.BLOCK_END: 'BLOCK_END'>, '{{+': <TokenType.BLOCK_START: 'BLOCK_START'>, '{{-': <TokenType.BLOCK_START: 'BLOCK_START'>, '+}}': <TokenType.BLOCK_END: 'BLOCK_END'>, '-}}': <TokenType.BLOCK_END: 'BLOCK_END'>, '/*+': <TokenType.HINT: 'HINT'>, '==': <TokenType.EQ: 'EQ'>, '::': <TokenType.DCOLON: 'DCOLON'>, '||': <TokenType.DPIPE: 'DPIPE'>, '>=': <TokenType.GTE: 'GTE'>, '<=': <TokenType.LTE: 'LTE'>, '<>': <TokenType.NEQ: 'NEQ'>, '!=': <TokenType.NEQ: 'NEQ'>, ':=': <TokenType.COLON_EQ: 'COLON_EQ'>, '<=>': <TokenType.NULLSAFE_EQ: 'NULLSAFE_EQ'>, '->': <TokenType.ARROW: 'ARROW'>, '->>': <TokenType.DARROW: 'DARROW'>, '=>': <TokenType.FARROW: 'FARROW'>, '#>': <TokenType.HASH_ARROW: 'HASH_ARROW'>, '#>>': <TokenType.DHASH_ARROW: 'DHASH_ARROW'>, '<->': <TokenType.LR_ARROW: 'LR_ARROW'>, '&&': <TokenType.DAMP: 'DAMP'>, '??': <TokenType.DQMARK: 'DQMARK'>, 'ALL': <TokenType.ALL: 'ALL'>, 'ALWAYS': <TokenType.ALWAYS: 'ALWAYS'>, 'AND': <TokenType.AND: 'AND'>, 'ANTI': <TokenType.ANTI: 'ANTI'>, 'ANY': <TokenType.ANY: 'ANY'>, 'ASC': <TokenType.ASC: 'ASC'>, 'AS': <TokenType.ALIAS: 'ALIAS'>, 'ASOF': <TokenType.ASOF: 'ASOF'>, 'AUTOINCREMENT': <TokenType.AUTO_INCREMENT: 'AUTO_INCREMENT'>, 'AUTO_INCREMENT': <TokenType.AUTO_INCREMENT: 'AUTO_INCREMENT'>, 'BEGIN': <TokenType.BEGIN: 'BEGIN'>, 'BETWEEN': <TokenType.BETWEEN: 'BETWEEN'>, 'CACHE': <TokenType.CACHE: 'CACHE'>, 'UNCACHE': <TokenType.UNCACHE: 'UNCACHE'>, 'CASE': <TokenType.CASE: 'CASE'>, 'CHARACTER SET': <TokenType.CHARACTER_SET: 'CHARACTER_SET'>, 'CLUSTER BY': <TokenType.CLUSTER_BY: 'CLUSTER_BY'>, 'COLLATE': <TokenType.COLLATE: 'COLLATE'>, 'COLUMN': <TokenType.COLUMN: 'COLUMN'>, 'COMMIT': <TokenType.COMMIT: 'COMMIT'>, 'CONNECT BY': <TokenType.CONNECT_BY: 'CONNECT_BY'>, 'CONSTRAINT': <TokenType.CONSTRAINT: 'CONSTRAINT'>, 'CREATE': <TokenType.CREATE: 'CREATE'>, 'CROSS': <TokenType.CROSS: 'CROSS'>, 'CUBE': <TokenType.CUBE: 'CUBE'>, 'CURRENT_DATE': <TokenType.CURRENT_DATE: 'CURRENT_DATE'>, 'CURRENT_TIME': <TokenType.CURRENT_TIME: 'CURRENT_TIME'>, 'CURRENT_TIMESTAMP': <TokenType.CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP'>, 'CURRENT_USER': <TokenType.CURRENT_USER: 'CURRENT_USER'>, 'DATABASE': <TokenType.DATABASE: 'DATABASE'>, 'DEFAULT': <TokenType.DEFAULT: 'DEFAULT'>, 'DELETE': <TokenType.DELETE: 'DELETE'>, 'DESC': <TokenType.DESC: 'DESC'>, 'DESCRIBE': <TokenType.DESCRIBE: 'DESCRIBE'>, 'DISTINCT': <TokenType.DISTINCT: 'DISTINCT'>, 'DISTRIBUTE BY': <TokenType.DISTRIBUTE_BY: 'DISTRIBUTE_BY'>, 'DIV': <TokenType.DIV: 'DIV'>, 'DROP': <TokenType.DROP: 'DROP'>, 'ELSE': <TokenType.ELSE: 'ELSE'>, 'END': <TokenType.END: 'END'>, 'ENUM': <TokenType.ENUM: 'ENUM'>, 'ESCAPE': <TokenType.ESCAPE: 'ESCAPE'>, 'EXCEPT': <TokenType.EXCEPT: 'EXCEPT'>, 'EXECUTE': <TokenType.EXECUTE: 'EXECUTE'>, 'EXISTS': <TokenType.EXISTS: 'EXISTS'>, 'FALSE': <TokenType.FALSE: 'FALSE'>, 'FETCH': <TokenType.FETCH: 'FETCH'>, 'FILTER': <TokenType.FILTER: 'FILTER'>, 'FIRST': <TokenType.FIRST: 'FIRST'>, 'FULL': <TokenType.FULL: 'FULL'>, 'FUNCTION': <TokenType.FUNCTION: 'FUNCTION'>, 'FOR': <TokenType.FOR: 'FOR'>, 'FOREIGN KEY': <TokenType.FOREIGN_KEY: 'FOREIGN_KEY'>, 'FORMAT': <TokenType.FORMAT: 'FORMAT'>, 'FROM': <TokenType.FROM: 'FROM'>, 'GEOGRAPHY': <TokenType.GEOGRAPHY: 'GEOGRAPHY'>, 'GEOMETRY': <TokenType.GEOMETRY: 'GEOMETRY'>, 'GLOB': <TokenType.GLOB: 'GLOB'>, 'GROUP BY': <TokenType.GROUP_BY: 'GROUP_BY'>, 'GROUPING SETS': <TokenType.GROUPING_SETS: 'GROUPING_SETS'>, 'HAVING': <TokenType.HAVING: 'HAVING'>, 'ILIKE': <TokenType.ILIKE: 'ILIKE'>, 'IN': <TokenType.IN: 'IN'>, 'INDEX': <TokenType.INDEX: 'INDEX'>, 'INET': <TokenType.INET: 'INET'>, 'INNER': <TokenType.INNER: 'INNER'>, 'INSERT': <TokenType.INSERT: 'INSERT'>, 'INTERVAL': <TokenType.INTERVAL: 'INTERVAL'>, 'INTERSECT': <TokenType.INTERSECT: 'INTERSECT'>, 'INTO': <TokenType.INTO: 'INTO'>, 'IS': <TokenType.IS: 'IS'>, 'ISNULL': <TokenType.ISNULL: 'ISNULL'>, 'JOIN': <TokenType.JOIN: 'JOIN'>, 'KEEP': <TokenType.KEEP: 'KEEP'>, 'KILL': <TokenType.KILL: 'KILL'>, 'LATERAL': <TokenType.LATERAL: 'LATERAL'>, 'LEFT': <TokenType.LEFT: 'LEFT'>, 'LIKE': <TokenType.LIKE: 'LIKE'>, 'LIMIT': <TokenType.LIMIT: 'LIMIT'>, 'LOAD': <TokenType.LOAD: 'LOAD'>, 'LOCK': <TokenType.LOCK: 'LOCK'>, 'MERGE': <TokenType.MERGE: 'MERGE'>, 'NATURAL': <TokenType.NATURAL: 'NATURAL'>, 'NEXT': <TokenType.NEXT: 'NEXT'>, 'NOT': <TokenType.NOT: 'NOT'>, 'NOTNULL': <TokenType.NOTNULL: 'NOTNULL'>, 'NULL': <TokenType.NULL: 'NULL'>, 'OBJECT': <TokenType.OBJECT: 'OBJECT'>, 'OFFSET': <TokenType.OFFSET: 'OFFSET'>, 'ON': <TokenType.ON: 'ON'>, 'OR': <TokenType.OR: 'OR'>, 'XOR': <TokenType.XOR: 'XOR'>, 'ORDER BY': <TokenType.ORDER_BY: 'ORDER_BY'>, 'ORDINALITY': <TokenType.ORDINALITY: 'ORDINALITY'>, 'OUTER': <TokenType.OUTER: 'OUTER'>, 'OVER': <TokenType.OVER: 'OVER'>, 'OVERLAPS': <TokenType.OVERLAPS: 'OVERLAPS'>, 'OVERWRITE': <TokenType.OVERWRITE: 'OVERWRITE'>, 'PARTITION': <TokenType.PARTITION: 'PARTITION'>, 'PARTITION BY': <TokenType.PARTITION_BY: 'PARTITION_BY'>, 'PARTITIONED BY': <TokenType.PARTITION_BY: 'PARTITION_BY'>, 'PARTITIONED_BY': <TokenType.PARTITION_BY: 'PARTITION_BY'>, 'PERCENT': <TokenType.PERCENT: 'PERCENT'>, 'PIVOT': <TokenType.PIVOT: 'PIVOT'>, 'PRAGMA': <TokenType.PRAGMA: 'PRAGMA'>, 'PRIMARY KEY': <TokenType.PRIMARY_KEY: 'PRIMARY_KEY'>, 'PROCEDURE': <TokenType.PROCEDURE: 'PROCEDURE'>, 'QUALIFY': <TokenType.QUALIFY: 'QUALIFY'>, 'RANGE': <TokenType.RANGE: 'RANGE'>, 'RECURSIVE': <TokenType.RECURSIVE: 'RECURSIVE'>, 'REGEXP': <TokenType.RLIKE: 'RLIKE'>, 'REPLACE': <TokenType.REPLACE: 'REPLACE'>, 'RETURNING': <TokenType.RETURNING: 'RETURNING'>, 'REFERENCES': <TokenType.REFERENCES: 'REFERENCES'>, 'RIGHT': <TokenType.RIGHT: 'RIGHT'>, 'RLIKE': <TokenType.RLIKE: 'RLIKE'>, 'ROLLBACK': <TokenType.ROLLBACK: 'ROLLBACK'>, 'ROLLUP': <TokenType.ROLLUP: 'ROLLUP'>, 'ROW': <TokenType.ROW: 'ROW'>, 'ROWS': <TokenType.ROWS: 'ROWS'>, 'SCHEMA': <TokenType.SCHEMA: 'SCHEMA'>, 'SELECT': <TokenType.SELECT: 'SELECT'>, 'SEMI': <TokenType.SEMI: 'SEMI'>, 'SET': <TokenType.SET: 'SET'>, 'SETTINGS': <TokenType.SETTINGS: 'SETTINGS'>, 'SHOW': <TokenType.SHOW: 'SHOW'>, 'SIMILAR TO': <TokenType.SIMILAR_TO: 'SIMILAR_TO'>, 'SOME': <TokenType.SOME: 'SOME'>, 'SORT BY': <TokenType.SORT_BY: 'SORT_BY'>, 'START WITH': <TokenType.START_WITH: 'START_WITH'>, 'TABLE': <TokenType.TABLE: 'TABLE'>, 'TABLESAMPLE': <TokenType.TABLE_SAMPLE: 'TABLE_SAMPLE'>, 'TEMP': <TokenType.TEMPORARY: 'TEMPORARY'>, 'TEMPORARY': <TokenType.TEMPORARY: 'TEMPORARY'>, 'THEN': <TokenType.THEN: 'THEN'>, 'TRUE': <TokenType.TRUE: 'TRUE'>, 'TRUNCATE': <TokenType.TRUNCATE: 'TRUNCATE'>, 'UNION': <TokenType.UNION: 'UNION'>, 'UNKNOWN': <TokenType.UNKNOWN: 'UNKNOWN'>, 'UNNEST': <TokenType.UNNEST: 'UNNEST'>, 'UNPIVOT': <TokenType.UNPIVOT: 'UNPIVOT'>, 'UPDATE': <TokenType.UPDATE: 'UPDATE'>, 'USE': <TokenType.USE: 'USE'>, 'USING': <TokenType.USING: 'USING'>, 'UUID': <TokenType.UUID: 'UUID'>, 'VALUES': <TokenType.VALUES: 'VALUES'>, 'VIEW': <TokenType.VIEW: 'VIEW'>, 'VOLATILE': <TokenType.VOLATILE: 'VOLATILE'>, 'WHEN': <TokenType.WHEN: 'WHEN'>, 'WHERE': <TokenType.WHERE: 'WHERE'>, 'WINDOW': <TokenType.WINDOW: 'WINDOW'>, 'WITH': <TokenType.WITH: 'WITH'>, 'APPLY': <TokenType.APPLY: 'APPLY'>, 'ARRAY': <TokenType.ARRAY: 'ARRAY'>, 'BIT': <TokenType.BIT: 'BIT'>, 'BOOL': <TokenType.BOOLEAN: 'BOOLEAN'>, 'BOOLEAN': <TokenType.BOOLEAN: 'BOOLEAN'>, 'BYTE': <TokenType.TINYINT: 'TINYINT'>, 'MEDIUMINT': <TokenType.MEDIUMINT: 'MEDIUMINT'>, 'INT1': <TokenType.TINYINT: 'TINYINT'>, 'TINYINT': <TokenType.TINYINT: 'TINYINT'>, 'INT16': <TokenType.SMALLINT: 'SMALLINT'>, 'SHORT': <TokenType.SMALLINT: 'SMALLINT'>, 'SMALLINT': <TokenType.SMALLINT: 'SMALLINT'>, 'INT128': <TokenType.INT128: 'INT128'>, 'HUGEINT': <TokenType.INT128: 'INT128'>, 'INT2': <TokenType.SMALLINT: 'SMALLINT'>, 'INTEGER': <TokenType.INT: 'INT'>, 'INT': <TokenType.INT: 'INT'>, 'INT4': <TokenType.INT: 'INT'>, 'INT32': <TokenType.INT: 'INT'>, 'INT64': <TokenType.BIGINT: 'BIGINT'>, 'LONG': <TokenType.BIGINT: 'BIGINT'>, 'BIGINT': <TokenType.BIGINT: 'BIGINT'>, 'INT8': <TokenType.TINYINT: 'TINYINT'>, 'DEC': <TokenType.DECIMAL: 'DECIMAL'>, 'DECIMAL': <TokenType.DECIMAL: 'DECIMAL'>, 'BIGDECIMAL': <TokenType.BIGDECIMAL: 'BIGDECIMAL'>, 'BIGNUMERIC': <TokenType.BIGDECIMAL: 'BIGDECIMAL'>, 'MAP': <TokenType.MAP: 'MAP'>, 'NULLABLE': <TokenType.NULLABLE: 'NULLABLE'>, 'NUMBER': <TokenType.DECIMAL: 'DECIMAL'>, 'NUMERIC': <TokenType.DECIMAL: 'DECIMAL'>, 'FIXED': <TokenType.DECIMAL: 'DECIMAL'>, 'REAL': <TokenType.FLOAT: 'FLOAT'>, 'FLOAT': <TokenType.FLOAT: 'FLOAT'>, 'FLOAT4': <TokenType.FLOAT: 'FLOAT'>, 'FLOAT8': <TokenType.DOUBLE: 'DOUBLE'>, 'DOUBLE': <TokenType.DOUBLE: 'DOUBLE'>, 'DOUBLE PRECISION': <TokenType.DOUBLE: 'DOUBLE'>, 'JSON': <TokenType.JSON: 'JSON'>, 'CHAR': <TokenType.CHAR: 'CHAR'>, 'CHARACTER': <TokenType.CHAR: 'CHAR'>, 'NCHAR': <TokenType.NCHAR: 'NCHAR'>, 'VARCHAR': <TokenType.VARCHAR: 'VARCHAR'>, 'VARCHAR2': <TokenType.VARCHAR: 'VARCHAR'>, 'NVARCHAR': <TokenType.NVARCHAR: 'NVARCHAR'>, 'NVARCHAR2': <TokenType.NVARCHAR: 'NVARCHAR'>, 'BPCHAR': <TokenType.BPCHAR: 'BPCHAR'>, 'STR': <TokenType.TEXT: 'TEXT'>, 'STRING': <TokenType.TEXT: 'TEXT'>, 'TEXT': <TokenType.TEXT: 'TEXT'>, 'LONGTEXT': <TokenType.LONGTEXT: 'LONGTEXT'>, 'MEDIUMTEXT': <TokenType.MEDIUMTEXT: 'MEDIUMTEXT'>, 'TINYTEXT': <TokenType.TINYTEXT: 'TINYTEXT'>, 'CLOB': <TokenType.TEXT: 'TEXT'>, 'LONGVARCHAR': <TokenType.TEXT: 'TEXT'>, 'BINARY': <TokenType.BINARY: 'BINARY'>, 'BLOB': <TokenType.VARBINARY: 'VARBINARY'>, 'LONGBLOB': <TokenType.LONGBLOB: 'LONGBLOB'>, 'MEDIUMBLOB': <TokenType.MEDIUMBLOB: 'MEDIUMBLOB'>, 'TINYBLOB': <TokenType.TINYBLOB: 'TINYBLOB'>, 'BYTEA': <TokenType.VARBINARY: 'VARBINARY'>, 'VARBINARY': <TokenType.VARBINARY: 'VARBINARY'>, 'TIME': <TokenType.TIME: 'TIME'>, 'TIMETZ': <TokenType.TIMETZ: 'TIMETZ'>, 'TIMESTAMP': <TokenType.TIMESTAMP: 'TIMESTAMP'>, 'TIMESTAMPTZ': <TokenType.TIMESTAMPTZ: 'TIMESTAMPTZ'>, 'TIMESTAMPLTZ': <TokenType.TIMESTAMPLTZ: 'TIMESTAMPLTZ'>, 'DATE': <TokenType.DATE: 'DATE'>, 'DATETIME': <TokenType.DATETIME: 'DATETIME'>, 'INT4RANGE': <TokenType.INT4RANGE: 'INT4RANGE'>, 'INT4MULTIRANGE': <TokenType.INT4MULTIRANGE: 'INT4MULTIRANGE'>, 'INT8RANGE': <TokenType.INT8RANGE: 'INT8RANGE'>, 'INT8MULTIRANGE': <TokenType.INT8MULTIRANGE: 'INT8MULTIRANGE'>, 'NUMRANGE': <TokenType.NUMRANGE: 'NUMRANGE'>, 'NUMMULTIRANGE': <TokenType.NUMMULTIRANGE: 'NUMMULTIRANGE'>, 'TSRANGE': <TokenType.TSRANGE: 'TSRANGE'>, 'TSMULTIRANGE': <TokenType.TSMULTIRANGE: 'TSMULTIRANGE'>, 'TSTZRANGE': <TokenType.TSTZRANGE: 'TSTZRANGE'>, 'TSTZMULTIRANGE': <TokenType.TSTZMULTIRANGE: 'TSTZMULTIRANGE'>, 'DATERANGE': <TokenType.DATERANGE: 'DATERANGE'>, 'DATEMULTIRANGE': <TokenType.DATEMULTIRANGE: 'DATEMULTIRANGE'>, 'UNIQUE': <TokenType.UNIQUE: 'UNIQUE'>, 'STRUCT': <TokenType.STRUCT: 'STRUCT'>, 'SEQUENCE': <TokenType.SEQUENCE: 'SEQUENCE'>, 'VARIANT': <TokenType.VARIANT: 'VARIANT'>, 'ALTER': <TokenType.ALTER: 'ALTER'>, 'ANALYZE': <TokenType.COMMAND: 'COMMAND'>, 'CALL': <TokenType.COMMAND: 'COMMAND'>, 'COMMENT': <TokenType.COMMENT: 'COMMENT'>, 'COPY': <TokenType.COMMAND: 'COMMAND'>, 'EXPLAIN': <TokenType.COMMAND: 'COMMAND'>, 'GRANT': <TokenType.COMMAND: 'COMMAND'>, 'OPTIMIZE': <TokenType.COMMAND: 'COMMAND'>, 'PREPARE': <TokenType.COMMAND: 'COMMAND'>, 'VACUUM': <TokenType.COMMAND: 'COMMAND'>, 'USER-DEFINED': <TokenType.USERDEFINED: 'USERDEFINED'>, 'FOR VERSION': <TokenType.VERSION_SNAPSHOT: 'VERSION_SNAPSHOT'>, 'FOR TIMESTAMP': <TokenType.TIMESTAMP_SNAPSHOT: 'TIMESTAMP_SNAPSHOT'>, 'ATTACH': <TokenType.COMMAND: 'COMMAND'>, 'DATE32': <TokenType.DATE32: 'DATE32'>, 'DATETIME64': <TokenType.DATETIME64: 'DATETIME64'>, 'DICTIONARY': <TokenType.DICTIONARY: 'DICTIONARY'>, 'ENUM8': <TokenType.ENUM8: 'ENUM8'>, 'ENUM16': <TokenType.ENUM16: 'ENUM16'>, 'FINAL': <TokenType.FINAL: 'FINAL'>, 'FIXEDSTRING': <TokenType.FIXEDSTRING: 'FIXEDSTRING'>, 'FLOAT32': <TokenType.FLOAT: 'FLOAT'>, 'FLOAT64': <TokenType.DOUBLE: 'DOUBLE'>, 'GLOBAL': <TokenType.GLOBAL: 'GLOBAL'>, 'INT256': <TokenType.INT256: 'INT256'>, 'LOWCARDINALITY': <TokenType.LOWCARDINALITY: 'LOWCARDINALITY'>, 'NESTED': <TokenType.NESTED: 'NESTED'>, 'SAMPLE': <TokenType.TABLE_SAMPLE: 'TABLE_SAMPLE'>, 'TUPLE': <TokenType.STRUCT: 'STRUCT'>, 'UINT128': <TokenType.UINT128: 'UINT128'>, 'UINT16': <TokenType.USMALLINT: 'USMALLINT'>, 'UINT256': <TokenType.UINT256: 'UINT256'>, 'UINT32': <TokenType.UINT: 'UINT'>, 'UINT64': <TokenType.UBIGINT: 'UBIGINT'>, 'UINT8': <TokenType.UTINYINT: 'UTINYINT'>, 'IPV4': <TokenType.IPV4: 'IPV4'>, 'IPV6': <TokenType.IPV6: 'IPV6'>, 'AGGREGATEFUNCTION': <TokenType.AGGREGATEFUNCTION: 'AGGREGATEFUNCTION'>, 'SIMPLEAGGREGATEFUNCTION': <TokenType.SIMPLEAGGREGATEFUNCTION: 'SIMPLEAGGREGATEFUNCTION'>, 'SYSTEM': <TokenType.COMMAND: 'COMMAND'>, 'PREWHERE': <TokenType.PREWHERE: 'PREWHERE'>}
SINGLE_TOKENS =
{'(': <TokenType.L_PAREN: 'L_PAREN'>, ')': <TokenType.R_PAREN: 'R_PAREN'>, '[': <TokenType.L_BRACKET: 'L_BRACKET'>, ']': <TokenType.R_BRACKET: 'R_BRACKET'>, '{': <TokenType.L_BRACE: 'L_BRACE'>, '}': <TokenType.R_BRACE: 'R_BRACE'>, '&': <TokenType.AMP: 'AMP'>, '^': <TokenType.CARET: 'CARET'>, ':': <TokenType.COLON: 'COLON'>, ',': <TokenType.COMMA: 'COMMA'>, '.': <TokenType.DOT: 'DOT'>, '-': <TokenType.DASH: 'DASH'>, '=': <TokenType.EQ: 'EQ'>, '>': <TokenType.GT: 'GT'>, '<': <TokenType.LT: 'LT'>, '%': <TokenType.MOD: 'MOD'>, '!': <TokenType.NOT: 'NOT'>, '|': <TokenType.PIPE: 'PIPE'>, '+': <TokenType.PLUS: 'PLUS'>, ';': <TokenType.SEMICOLON: 'SEMICOLON'>, '/': <TokenType.SLASH: 'SLASH'>, '\\': <TokenType.BACKSLASH: 'BACKSLASH'>, '*': <TokenType.STAR: 'STAR'>, '~': <TokenType.TILDA: 'TILDA'>, '?': <TokenType.PLACEHOLDER: 'PLACEHOLDER'>, '@': <TokenType.PARAMETER: 'PARAMETER'>, "'": <TokenType.QUOTE: 'QUOTE'>, '`': <TokenType.IDENTIFIER: 'IDENTIFIER'>, '"': <TokenType.IDENTIFIER: 'IDENTIFIER'>, '#': <TokenType.HASH: 'HASH'>, '$': <TokenType.HEREDOC_STRING: 'HEREDOC_STRING'>}
Inherited Members
105 class Parser(parser.Parser): 106 # Tested in ClickHouse's playground, it seems that the following two queries do the same thing 107 # * select x from t1 union all select x from t2 limit 1; 108 # * select x from t1 union all (select x from t2 limit 1); 109 MODIFIERS_ATTACHED_TO_UNION = False 110 111 FUNCTIONS = { 112 **parser.Parser.FUNCTIONS, 113 "ANY": exp.AnyValue.from_arg_list, 114 "ARRAYSUM": exp.ArraySum.from_arg_list, 115 "COUNTIF": _build_count_if, 116 "DATE_ADD": lambda args: exp.DateAdd( 117 this=seq_get(args, 2), expression=seq_get(args, 1), unit=seq_get(args, 0) 118 ), 119 "DATEADD": lambda args: exp.DateAdd( 120 this=seq_get(args, 2), expression=seq_get(args, 1), unit=seq_get(args, 0) 121 ), 122 "DATE_DIFF": lambda args: exp.DateDiff( 123 this=seq_get(args, 2), expression=seq_get(args, 1), unit=seq_get(args, 0) 124 ), 125 "DATEDIFF": lambda args: exp.DateDiff( 126 this=seq_get(args, 2), expression=seq_get(args, 1), unit=seq_get(args, 0) 127 ), 128 "JSONEXTRACTSTRING": build_json_extract_path( 129 exp.JSONExtractScalar, zero_based_indexing=False 130 ), 131 "MAP": parser.build_var_map, 132 "MATCH": exp.RegexpLike.from_arg_list, 133 "RANDCANONICAL": exp.Rand.from_arg_list, 134 "TUPLE": exp.Struct.from_arg_list, 135 "UNIQ": exp.ApproxDistinct.from_arg_list, 136 "XOR": lambda args: exp.Xor(expressions=args), 137 } 138 139 AGG_FUNCTIONS = { 140 "count", 141 "min", 142 "max", 143 "sum", 144 "avg", 145 "any", 146 "stddevPop", 147 "stddevSamp", 148 "varPop", 149 "varSamp", 150 "corr", 151 "covarPop", 152 "covarSamp", 153 "entropy", 154 "exponentialMovingAverage", 155 "intervalLengthSum", 156 "kolmogorovSmirnovTest", 157 "mannWhitneyUTest", 158 "median", 159 "rankCorr", 160 "sumKahan", 161 "studentTTest", 162 "welchTTest", 163 "anyHeavy", 164 "anyLast", 165 "boundingRatio", 166 "first_value", 167 "last_value", 168 "argMin", 169 "argMax", 170 "avgWeighted", 171 "topK", 172 "topKWeighted", 173 "deltaSum", 174 "deltaSumTimestamp", 175 "groupArray", 176 "groupArrayLast", 177 "groupUniqArray", 178 "groupArrayInsertAt", 179 "groupArrayMovingAvg", 180 "groupArrayMovingSum", 181 "groupArraySample", 182 "groupBitAnd", 183 "groupBitOr", 184 "groupBitXor", 185 "groupBitmap", 186 "groupBitmapAnd", 187 "groupBitmapOr", 188 "groupBitmapXor", 189 "sumWithOverflow", 190 "sumMap", 191 "minMap", 192 "maxMap", 193 "skewSamp", 194 "skewPop", 195 "kurtSamp", 196 "kurtPop", 197 "uniq", 198 "uniqExact", 199 "uniqCombined", 200 "uniqCombined64", 201 "uniqHLL12", 202 "uniqTheta", 203 "quantile", 204 "quantiles", 205 "quantileExact", 206 "quantilesExact", 207 "quantileExactLow", 208 "quantilesExactLow", 209 "quantileExactHigh", 210 "quantilesExactHigh", 211 "quantileExactWeighted", 212 "quantilesExactWeighted", 213 "quantileTiming", 214 "quantilesTiming", 215 "quantileTimingWeighted", 216 "quantilesTimingWeighted", 217 "quantileDeterministic", 218 "quantilesDeterministic", 219 "quantileTDigest", 220 "quantilesTDigest", 221 "quantileTDigestWeighted", 222 "quantilesTDigestWeighted", 223 "quantileBFloat16", 224 "quantilesBFloat16", 225 "quantileBFloat16Weighted", 226 "quantilesBFloat16Weighted", 227 "simpleLinearRegression", 228 "stochasticLinearRegression", 229 "stochasticLogisticRegression", 230 "categoricalInformationValue", 231 "contingency", 232 "cramersV", 233 "cramersVBiasCorrected", 234 "theilsU", 235 "maxIntersections", 236 "maxIntersectionsPosition", 237 "meanZTest", 238 "quantileInterpolatedWeighted", 239 "quantilesInterpolatedWeighted", 240 "quantileGK", 241 "quantilesGK", 242 "sparkBar", 243 "sumCount", 244 "largestTriangleThreeBuckets", 245 } 246 247 AGG_FUNCTIONS_SUFFIXES = [ 248 "If", 249 "Array", 250 "ArrayIf", 251 "Map", 252 "SimpleState", 253 "State", 254 "Merge", 255 "MergeState", 256 "ForEach", 257 "Distinct", 258 "OrDefault", 259 "OrNull", 260 "Resample", 261 "ArgMin", 262 "ArgMax", 263 ] 264 265 AGG_FUNC_MAPPING = ( 266 lambda functions, suffixes: { 267 f"{f}{sfx}": (f, sfx) for sfx in (suffixes + [""]) for f in functions 268 } 269 )(AGG_FUNCTIONS, AGG_FUNCTIONS_SUFFIXES) 270 271 FUNCTIONS_WITH_ALIASED_ARGS = {*parser.Parser.FUNCTIONS_WITH_ALIASED_ARGS, "TUPLE"} 272 273 FUNCTION_PARSERS = { 274 **parser.Parser.FUNCTION_PARSERS, 275 "ARRAYJOIN": lambda self: self.expression(exp.Explode, this=self._parse_expression()), 276 "QUANTILE": lambda self: self._parse_quantile(), 277 } 278 279 FUNCTION_PARSERS.pop("MATCH") 280 281 NO_PAREN_FUNCTION_PARSERS = parser.Parser.NO_PAREN_FUNCTION_PARSERS.copy() 282 NO_PAREN_FUNCTION_PARSERS.pop("ANY") 283 284 RANGE_PARSERS = { 285 **parser.Parser.RANGE_PARSERS, 286 TokenType.GLOBAL: lambda self, this: self._match(TokenType.IN) 287 and self._parse_in(this, is_global=True), 288 } 289 290 # The PLACEHOLDER entry is popped because 1) it doesn't affect Clickhouse (it corresponds to 291 # the postgres-specific JSONBContains parser) and 2) it makes parsing the ternary op simpler. 292 COLUMN_OPERATORS = parser.Parser.COLUMN_OPERATORS.copy() 293 COLUMN_OPERATORS.pop(TokenType.PLACEHOLDER) 294 295 JOIN_KINDS = { 296 *parser.Parser.JOIN_KINDS, 297 TokenType.ANY, 298 TokenType.ASOF, 299 TokenType.ARRAY, 300 } 301 302 TABLE_ALIAS_TOKENS = parser.Parser.TABLE_ALIAS_TOKENS - { 303 TokenType.ANY, 304 TokenType.ARRAY, 305 TokenType.FINAL, 306 TokenType.FORMAT, 307 TokenType.SETTINGS, 308 } 309 310 LOG_DEFAULTS_TO_LN = True 311 312 QUERY_MODIFIER_PARSERS = { 313 **parser.Parser.QUERY_MODIFIER_PARSERS, 314 TokenType.SETTINGS: lambda self: ( 315 "settings", 316 self._advance() or self._parse_csv(self._parse_conjunction), 317 ), 318 TokenType.FORMAT: lambda self: ("format", self._advance() or self._parse_id_var()), 319 } 320 321 def _parse_conjunction(self) -> t.Optional[exp.Expression]: 322 this = super()._parse_conjunction() 323 324 if self._match(TokenType.PLACEHOLDER): 325 return self.expression( 326 exp.If, 327 this=this, 328 true=self._parse_conjunction(), 329 false=self._match(TokenType.COLON) and self._parse_conjunction(), 330 ) 331 332 return this 333 334 def _parse_placeholder(self) -> t.Optional[exp.Expression]: 335 """ 336 Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier} 337 https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters 338 """ 339 if not self._match(TokenType.L_BRACE): 340 return None 341 342 this = self._parse_id_var() 343 self._match(TokenType.COLON) 344 kind = self._parse_types(check_func=False, allow_identifiers=False) or ( 345 self._match_text_seq("IDENTIFIER") and "Identifier" 346 ) 347 348 if not kind: 349 self.raise_error("Expecting a placeholder type or 'Identifier' for tables") 350 elif not self._match(TokenType.R_BRACE): 351 self.raise_error("Expecting }") 352 353 return self.expression(exp.Placeholder, this=this, kind=kind) 354 355 def _parse_in(self, this: t.Optional[exp.Expression], is_global: bool = False) -> exp.In: 356 this = super()._parse_in(this) 357 this.set("is_global", is_global) 358 return this 359 360 def _parse_table( 361 self, 362 schema: bool = False, 363 joins: bool = False, 364 alias_tokens: t.Optional[t.Collection[TokenType]] = None, 365 parse_bracket: bool = False, 366 is_db_reference: bool = False, 367 ) -> t.Optional[exp.Expression]: 368 this = super()._parse_table( 369 schema=schema, 370 joins=joins, 371 alias_tokens=alias_tokens, 372 parse_bracket=parse_bracket, 373 is_db_reference=is_db_reference, 374 ) 375 376 if self._match(TokenType.FINAL): 377 this = self.expression(exp.Final, this=this) 378 379 return this 380 381 def _parse_position(self, haystack_first: bool = False) -> exp.StrPosition: 382 return super()._parse_position(haystack_first=True) 383 384 # https://clickhouse.com/docs/en/sql-reference/statements/select/with/ 385 def _parse_cte(self) -> exp.CTE: 386 index = self._index 387 try: 388 # WITH <identifier> AS <subquery expression> 389 return super()._parse_cte() 390 except ParseError: 391 # WITH <expression> AS <identifier> 392 self._retreat(index) 393 394 return self.expression( 395 exp.CTE, 396 this=self._parse_conjunction(), 397 alias=self._parse_table_alias(), 398 scalar=True, 399 ) 400 401 def _parse_join_parts( 402 self, 403 ) -> t.Tuple[t.Optional[Token], t.Optional[Token], t.Optional[Token]]: 404 is_global = self._match(TokenType.GLOBAL) and self._prev 405 kind_pre = self._match_set(self.JOIN_KINDS, advance=False) and self._prev 406 407 if kind_pre: 408 kind = self._match_set(self.JOIN_KINDS) and self._prev 409 side = self._match_set(self.JOIN_SIDES) and self._prev 410 return is_global, side, kind 411 412 return ( 413 is_global, 414 self._match_set(self.JOIN_SIDES) and self._prev, 415 self._match_set(self.JOIN_KINDS) and self._prev, 416 ) 417 418 def _parse_join( 419 self, skip_join_token: bool = False, parse_bracket: bool = False 420 ) -> t.Optional[exp.Join]: 421 join = super()._parse_join(skip_join_token=skip_join_token, parse_bracket=True) 422 if join: 423 join.set("global", join.args.pop("method", None)) 424 425 return join 426 427 def _parse_function( 428 self, 429 functions: t.Optional[t.Dict[str, t.Callable]] = None, 430 anonymous: bool = False, 431 optional_parens: bool = True, 432 ) -> t.Optional[exp.Expression]: 433 func = super()._parse_function( 434 functions=functions, anonymous=anonymous, optional_parens=optional_parens 435 ) 436 437 if isinstance(func, exp.Anonymous): 438 parts = self.AGG_FUNC_MAPPING.get(func.this) 439 params = self._parse_func_params(func) 440 441 if params: 442 if parts and parts[1]: 443 return self.expression( 444 exp.CombinedParameterizedAgg, 445 this=func.this, 446 expressions=func.expressions, 447 params=params, 448 parts=parts, 449 ) 450 return self.expression( 451 exp.ParameterizedAgg, 452 this=func.this, 453 expressions=func.expressions, 454 params=params, 455 ) 456 457 if parts: 458 if parts[1]: 459 return self.expression( 460 exp.CombinedAggFunc, 461 this=func.this, 462 expressions=func.expressions, 463 parts=parts, 464 ) 465 return self.expression( 466 exp.AnonymousAggFunc, 467 this=func.this, 468 expressions=func.expressions, 469 ) 470 471 return func 472 473 def _parse_func_params( 474 self, this: t.Optional[exp.Func] = None 475 ) -> t.Optional[t.List[exp.Expression]]: 476 if self._match_pair(TokenType.R_PAREN, TokenType.L_PAREN): 477 return self._parse_csv(self._parse_lambda) 478 479 if self._match(TokenType.L_PAREN): 480 params = self._parse_csv(self._parse_lambda) 481 self._match_r_paren(this) 482 return params 483 484 return None 485 486 def _parse_quantile(self) -> exp.Quantile: 487 this = self._parse_lambda() 488 params = self._parse_func_params() 489 if params: 490 return self.expression(exp.Quantile, this=params[0], quantile=this) 491 return self.expression(exp.Quantile, this=this, quantile=exp.Literal.number(0.5)) 492 493 def _parse_wrapped_id_vars(self, optional: bool = False) -> t.List[exp.Expression]: 494 return super()._parse_wrapped_id_vars(optional=True) 495 496 def _parse_primary_key( 497 self, wrapped_optional: bool = False, in_props: bool = False 498 ) -> exp.PrimaryKeyColumnConstraint | exp.PrimaryKey: 499 return super()._parse_primary_key( 500 wrapped_optional=wrapped_optional or in_props, in_props=in_props 501 ) 502 503 def _parse_on_property(self) -> t.Optional[exp.Expression]: 504 index = self._index 505 if self._match_text_seq("CLUSTER"): 506 this = self._parse_id_var() 507 if this: 508 return self.expression(exp.OnCluster, this=this) 509 else: 510 self._retreat(index) 511 return None
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
FUNCTIONS =
{'ABS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Abs'>>, 'ADD_MONTHS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.AddMonths'>>, 'ANONYMOUS_AGG_FUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.AnonymousAggFunc'>>, 'ANY_VALUE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.AnyValue'>>, 'APPROX_DISTINCT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ApproxDistinct'>>, 'APPROX_COUNT_DISTINCT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ApproxDistinct'>>, 'APPROX_QUANTILE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ApproxQuantile'>>, 'APPROX_TOP_K': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ApproxTopK'>>, 'ARG_MAX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArgMax'>>, 'ARGMAX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArgMax'>>, 'MAX_BY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArgMax'>>, 'ARG_MIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArgMin'>>, 'ARGMIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArgMin'>>, 'MIN_BY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArgMin'>>, 'ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Array'>>, 'ARRAY_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArrayAgg'>>, 'ARRAY_ALL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArrayAll'>>, 'ARRAY_ANY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArrayAny'>>, 'ARRAY_CONCAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArrayConcat'>>, 'ARRAY_CAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArrayConcat'>>, 'ARRAY_CONTAINS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArrayContains'>>, 'FILTER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArrayFilter'>>, 'ARRAY_FILTER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArrayFilter'>>, 'ARRAY_OVERLAPS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArrayOverlaps'>>, 'ARRAY_SIZE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArraySize'>>, 'ARRAY_LENGTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArraySize'>>, 'ARRAY_SORT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArraySort'>>, 'ARRAY_SUM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArraySum'>>, 'ARRAY_TO_STRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArrayToString'>>, 'ARRAY_JOIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArrayToString'>>, 'ARRAY_UNION_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArrayUnionAgg'>>, 'ARRAY_UNIQUE_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArrayUniqueAgg'>>, 'AVG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Avg'>>, 'CASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Case'>>, 'CAST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Cast'>>, 'CAST_TO_STR_TYPE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.CastToStrType'>>, 'CBRT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Cbrt'>>, 'CEIL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Ceil'>>, 'CEILING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Ceil'>>, 'CHR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Chr'>>, 'CHAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Chr'>>, 'COALESCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Coalesce'>>, 'IFNULL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Coalesce'>>, 'NVL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Coalesce'>>, 'COLLATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Collate'>>, 'COMBINED_AGG_FUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.CombinedAggFunc'>>, 'COMBINED_PARAMETERIZED_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.CombinedParameterizedAgg'>>, 'CONCAT': <function Parser.<lambda>>, 'CONCAT_WS': <function Parser.<lambda>>, 'CONNECT_BY_ROOT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ConnectByRoot'>>, 'CONVERT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Convert'>>, 'COUNT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Count'>>, 'COUNT_IF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.CountIf'>>, 'COUNTIF': <function _build_count_if>, 'CURRENT_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.CurrentDate'>>, 'CURRENT_DATETIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.CurrentDatetime'>>, 'CURRENT_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.CurrentTime'>>, 'CURRENT_TIMESTAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.CurrentTimestamp'>>, 'CURRENT_USER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.CurrentUser'>>, 'DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Date'>>, 'DATE_ADD': <function ClickHouse.Parser.<lambda>>, 'DATEDIFF': <function ClickHouse.Parser.<lambda>>, 'DATE_DIFF': <function ClickHouse.Parser.<lambda>>, 'DATE_FROM_PARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.DateFromParts'>>, 'DATEFROMPARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.DateFromParts'>>, 'DATE_STR_TO_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.DateStrToDate'>>, 'DATE_SUB': <bound method Func.from_arg_list of <class 'sqlglot.expressions.DateSub'>>, 'DATE_TO_DATE_STR': <function Parser.<lambda>>, 'DATE_TO_DI': <bound method Func.from_arg_list of <class 'sqlglot.expressions.DateToDi'>>, 'DATE_TRUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.DateTrunc'>>, 'DATETIME_ADD': <bound method Func.from_arg_list of <class 'sqlglot.expressions.DatetimeAdd'>>, 'DATETIME_DIFF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.DatetimeDiff'>>, 'DATETIME_SUB': <bound method Func.from_arg_list of <class 'sqlglot.expressions.DatetimeSub'>>, 'DATETIME_TRUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.DatetimeTrunc'>>, 'DAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Day'>>, 'DAY_OF_MONTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.DayOfMonth'>>, 'DAYOFMONTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.DayOfMonth'>>, 'DAY_OF_WEEK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.DayOfWeek'>>, 'DAYOFWEEK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.DayOfWeek'>>, 'DAY_OF_YEAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.DayOfYear'>>, 'DAYOFYEAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.DayOfYear'>>, 'DECODE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Decode'>>, 'DI_TO_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.DiToDate'>>, 'ENCODE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Encode'>>, 'EXP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Exp'>>, 'EXPLODE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Explode'>>, 'EXPLODE_OUTER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ExplodeOuter'>>, 'EXTRACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Extract'>>, 'FIRST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.First'>>, 'FIRST_VALUE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.FirstValue'>>, 'FLATTEN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Flatten'>>, 'FLOOR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Floor'>>, 'FROM_BASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.FromBase'>>, 'FROM_BASE64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.FromBase64'>>, 'GENERATE_DATE_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.GenerateDateArray'>>, 'GENERATE_SERIES': <bound method Func.from_arg_list of <class 'sqlglot.expressions.GenerateSeries'>>, 'GREATEST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Greatest'>>, 'GROUP_CONCAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.GroupConcat'>>, 'HEX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Hex'>>, 'HLL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Hll'>>, 'IF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.If'>>, 'IIF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.If'>>, 'INITCAP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Initcap'>>, 'IS_INF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.IsInf'>>, 'ISINF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.IsInf'>>, 'IS_NAN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.IsNan'>>, 'ISNAN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.IsNan'>>, 'J_S_O_N_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.JSONArray'>>, 'J_S_O_N_ARRAY_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.JSONArrayAgg'>>, 'JSON_ARRAY_CONTAINS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.JSONArrayContains'>>, 'JSONB_EXTRACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.JSONBExtract'>>, 'JSONB_EXTRACT_SCALAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.JSONBExtractScalar'>>, 'JSON_EXTRACT': <function build_extract_json_with_path.<locals>._builder>, 'JSON_EXTRACT_SCALAR': <function build_extract_json_with_path.<locals>._builder>, 'JSON_FORMAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.JSONFormat'>>, 'J_S_O_N_OBJECT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.JSONObject'>>, 'J_S_O_N_OBJECT_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.JSONObjectAgg'>>, 'J_S_O_N_TABLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.JSONTable'>>, 'LAG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Lag'>>, 'LAST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Last'>>, 'LAST_DAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.LastDay'>>, 'LAST_DAY_OF_MONTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.LastDay'>>, 'LAST_VALUE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.LastValue'>>, 'LEAD': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Lead'>>, 'LEAST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Least'>>, 'LEFT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Left'>>, 'LENGTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Length'>>, 'LEN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Length'>>, 'LEVENSHTEIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Levenshtein'>>, 'LN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Ln'>>, 'LOG': <function build_logarithm>, 'LOGICAL_AND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.LogicalAnd'>>, 'BOOL_AND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.LogicalAnd'>>, 'BOOLAND_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.LogicalAnd'>>, 'LOGICAL_OR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.LogicalOr'>>, 'BOOL_OR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.LogicalOr'>>, 'BOOLOR_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.LogicalOr'>>, 'LOWER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Lower'>>, 'LCASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Lower'>>, 'MD5': <bound method Func.from_arg_list of <class 'sqlglot.expressions.MD5'>>, 'MD5_DIGEST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.MD5Digest'>>, 'MAP': <function build_var_map>, 'MAP_FROM_ENTRIES': <bound method Func.from_arg_list of <class 'sqlglot.expressions.MapFromEntries'>>, 'MATCH_AGAINST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.MatchAgainst'>>, 'MAX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Max'>>, 'MIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Min'>>, 'MONTH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Month'>>, 'MONTHS_BETWEEN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.MonthsBetween'>>, 'NEXT_VALUE_FOR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.NextValueFor'>>, 'NTH_VALUE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.NthValue'>>, 'NULLIF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Nullif'>>, 'NUMBER_TO_STR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.NumberToStr'>>, 'NVL2': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Nvl2'>>, 'OPEN_J_S_O_N': <bound method Func.from_arg_list of <class 'sqlglot.expressions.OpenJSON'>>, 'PARAMETERIZED_AGG': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ParameterizedAgg'>>, 'PARSE_JSON': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ParseJSON'>>, 'JSON_PARSE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ParseJSON'>>, 'PERCENTILE_CONT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.PercentileCont'>>, 'PERCENTILE_DISC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.PercentileDisc'>>, 'POSEXPLODE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Posexplode'>>, 'POSEXPLODE_OUTER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.PosexplodeOuter'>>, 'POWER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Pow'>>, 'POW': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Pow'>>, 'PREDICT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Predict'>>, 'QUANTILE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Quantile'>>, 'RAND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Rand'>>, 'RANDOM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Rand'>>, 'RANDN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Randn'>>, 'RANGE_N': <bound method Func.from_arg_list of <class 'sqlglot.expressions.RangeN'>>, 'READ_CSV': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ReadCSV'>>, 'REDUCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Reduce'>>, 'REGEXP_EXTRACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.RegexpExtract'>>, 'REGEXP_I_LIKE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.RegexpILike'>>, 'REGEXP_LIKE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.RegexpLike'>>, 'REGEXP_REPLACE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.RegexpReplace'>>, 'REGEXP_SPLIT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.RegexpSplit'>>, 'REPEAT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Repeat'>>, 'RIGHT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Right'>>, 'ROUND': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Round'>>, 'ROW_NUMBER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.RowNumber'>>, 'SHA': <bound method Func.from_arg_list of <class 'sqlglot.expressions.SHA'>>, 'SHA1': <bound method Func.from_arg_list of <class 'sqlglot.expressions.SHA'>>, 'SHA2': <bound method Func.from_arg_list of <class 'sqlglot.expressions.SHA2'>>, 'SAFE_DIVIDE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.SafeDivide'>>, 'SIGN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Sign'>>, 'SIGNUM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Sign'>>, 'SORT_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.SortArray'>>, 'SPLIT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Split'>>, 'SQRT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Sqrt'>>, 'STANDARD_HASH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.StandardHash'>>, 'STAR_MAP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.StarMap'>>, 'STARTS_WITH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.StartsWith'>>, 'STARTSWITH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.StartsWith'>>, 'STDDEV': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Stddev'>>, 'STDDEV_POP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.StddevPop'>>, 'STDDEV_SAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.StddevSamp'>>, 'STR_POSITION': <bound method Func.from_arg_list of <class 'sqlglot.expressions.StrPosition'>>, 'STR_TO_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.StrToDate'>>, 'STR_TO_MAP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.StrToMap'>>, 'STR_TO_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.StrToTime'>>, 'STR_TO_UNIX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.StrToUnix'>>, 'STRUCT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Struct'>>, 'STRUCT_EXTRACT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.StructExtract'>>, 'STUFF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Stuff'>>, 'INSERT': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Stuff'>>, 'SUBSTRING': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Substring'>>, 'SUM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Sum'>>, 'TIME_ADD': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TimeAdd'>>, 'TIME_DIFF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TimeDiff'>>, 'TIME_FROM_PARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TimeFromParts'>>, 'TIMEFROMPARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TimeFromParts'>>, 'TIME_STR_TO_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TimeStrToDate'>>, 'TIME_STR_TO_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TimeStrToTime'>>, 'TIME_STR_TO_UNIX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TimeStrToUnix'>>, 'TIME_SUB': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TimeSub'>>, 'TIME_TO_STR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TimeToStr'>>, 'TIME_TO_TIME_STR': <function Parser.<lambda>>, 'TIME_TO_UNIX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TimeToUnix'>>, 'TIME_TRUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TimeTrunc'>>, 'TIMESTAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Timestamp'>>, 'TIMESTAMP_ADD': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TimestampAdd'>>, 'TIMESTAMPDIFF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TimestampDiff'>>, 'TIMESTAMP_DIFF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TimestampDiff'>>, 'TIMESTAMP_FROM_PARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TimestampFromParts'>>, 'TIMESTAMPFROMPARTS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TimestampFromParts'>>, 'TIMESTAMP_SUB': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TimestampSub'>>, 'TIMESTAMP_TRUNC': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TimestampTrunc'>>, 'TO_ARRAY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ToArray'>>, 'TO_BASE64': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ToBase64'>>, 'TO_CHAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ToChar'>>, 'TO_DAYS': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ToDays'>>, 'TO_NUMBER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ToNumber'>>, 'TRANSFORM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Transform'>>, 'TRIM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Trim'>>, 'TRY_CAST': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TryCast'>>, 'TS_OR_DI_TO_DI': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TsOrDiToDi'>>, 'TS_OR_DS_ADD': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TsOrDsAdd'>>, 'TS_OR_DS_DIFF': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TsOrDsDiff'>>, 'TS_OR_DS_TO_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TsOrDsToDate'>>, 'TS_OR_DS_TO_DATE_STR': <function Parser.<lambda>>, 'TS_OR_DS_TO_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.TsOrDsToTime'>>, 'UNHEX': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Unhex'>>, 'UNIX_DATE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.UnixDate'>>, 'UNIX_TO_STR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.UnixToStr'>>, 'UNIX_TO_TIME': <bound method Func.from_arg_list of <class 'sqlglot.expressions.UnixToTime'>>, 'UNIX_TO_TIME_STR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.UnixToTimeStr'>>, 'UPPER': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Upper'>>, 'UCASE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Upper'>>, 'VAR_MAP': <function build_var_map>, 'VARIANCE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Variance'>>, 'VARIANCE_SAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Variance'>>, 'VAR_SAMP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Variance'>>, 'VARIANCE_POP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.VariancePop'>>, 'VAR_POP': <bound method Func.from_arg_list of <class 'sqlglot.expressions.VariancePop'>>, 'WEEK': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Week'>>, 'WEEK_OF_YEAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.WeekOfYear'>>, 'WEEKOFYEAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.WeekOfYear'>>, 'WHEN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.When'>>, 'X_M_L_TABLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.XMLTable'>>, 'XOR': <function ClickHouse.Parser.<lambda>>, 'YEAR': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Year'>>, 'GLOB': <function Parser.<lambda>>, 'JSON_EXTRACT_PATH_TEXT': <function build_extract_json_with_path.<locals>._builder>, 'LIKE': <function build_like>, 'LOG2': <function Parser.<lambda>>, 'LOG10': <function Parser.<lambda>>, 'MOD': <function Parser.<lambda>>, 'ANY': <bound method Func.from_arg_list of <class 'sqlglot.expressions.AnyValue'>>, 'ARRAYSUM': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArraySum'>>, 'DATEADD': <function ClickHouse.Parser.<lambda>>, 'JSONEXTRACTSTRING': <function build_json_extract_path.<locals>._builder>, 'MATCH': <bound method Func.from_arg_list of <class 'sqlglot.expressions.RegexpLike'>>, 'RANDCANONICAL': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Rand'>>, 'TUPLE': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Struct'>>, 'UNIQ': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ApproxDistinct'>>}
AGG_FUNCTIONS =
{'maxIntersectionsPosition', 'quantileExactLow', 'any', 'kolmogorovSmirnovTest', 'uniqCombined', 'quantilesExactLow', 'groupArraySample', 'last_value', 'cramersV', 'groupBitXor', 'corr', 'median', 'quantilesTDigest', 'quantiles', 'sum', 'quantileBFloat16', 'stochasticLogisticRegression', 'avg', 'groupArrayInsertAt', 'rankCorr', 'intervalLengthSum', 'quantileBFloat16Weighted', 'meanZTest', 'deltaSum', 'quantilesExactHigh', 'exponentialMovingAverage', 'avgWeighted', 'quantileTDigestWeighted', 'simpleLinearRegression', 'cramersVBiasCorrected', 'groupBitmapXor', 'quantilesGK', 'quantilesExactWeighted', 'stochasticLinearRegression', 'contingency', 'sumMap', 'topK', 'sumWithOverflow', 'stddevPop', 'quantileTimingWeighted', 'maxIntersections', 'anyHeavy', 'boundingRatio', 'quantileInterpolatedWeighted', 'argMin', 'quantilesExact', 'studentTTest', 'groupArrayLast', 'quantileDeterministic', 'quantilesBFloat16Weighted', 'quantilesTimingWeighted', 'uniqHLL12', 'quantileExact', 'quantileExactHigh', 'quantile', 'quantileGK', 'sparkBar', 'quantilesDeterministic', 'quantilesTiming', 'skewPop', 'groupArray', 'groupArrayMovingSum', 'groupBitAnd', 'groupBitmap', 'min', 'sumKahan', 'groupBitOr', 'anyLast', 'maxMap', 'count', 'uniqCombined64', 'groupBitmapAnd', 'quantilesInterpolatedWeighted', 'quantileExactWeighted', 'stddevSamp', 'skewSamp', 'varSamp', 'quantilesTDigestWeighted', 'quantileTDigest', 'uniqExact', 'groupArrayMovingAvg', 'welchTTest', 'mannWhitneyUTest', 'covarSamp', 'quantilesBFloat16', 'max', 'theilsU', 'uniqTheta', 'deltaSumTimestamp', 'largestTriangleThreeBuckets', 'argMax', 'sumCount', 'groupUniqArray', 'minMap', 'kurtPop', 'varPop', 'first_value', 'categoricalInformationValue', 'topKWeighted', 'groupBitmapOr', 'uniq', 'kurtSamp', 'entropy', 'covarPop', 'quantileTiming'}
AGG_FUNCTIONS_SUFFIXES =
['If', 'Array', 'ArrayIf', 'Map', 'SimpleState', 'State', 'Merge', 'MergeState', 'ForEach', 'Distinct', 'OrDefault', 'OrNull', 'Resample', 'ArgMin', 'ArgMax']
AGG_FUNC_MAPPING =
{'maxIntersectionsPositionIf': ('maxIntersectionsPosition', 'If'), 'quantileExactLowIf': ('quantileExactLow', 'If'), 'anyIf': ('any', 'If'), 'kolmogorovSmirnovTestIf': ('kolmogorovSmirnovTest', 'If'), 'uniqCombinedIf': ('uniqCombined', 'If'), 'quantilesExactLowIf': ('quantilesExactLow', 'If'), 'groupArraySampleIf': ('groupArraySample', 'If'), 'last_valueIf': ('last_value', 'If'), 'cramersVIf': ('cramersV', 'If'), 'groupBitXorIf': ('groupBitXor', 'If'), 'corrIf': ('corr', 'If'), 'medianIf': ('median', 'If'), 'quantilesTDigestIf': ('quantilesTDigest', 'If'), 'quantilesIf': ('quantiles', 'If'), 'sumIf': ('sum', 'If'), 'quantileBFloat16If': ('quantileBFloat16', 'If'), 'stochasticLogisticRegressionIf': ('stochasticLogisticRegression', 'If'), 'avgIf': ('avg', 'If'), 'groupArrayInsertAtIf': ('groupArrayInsertAt', 'If'), 'rankCorrIf': ('rankCorr', 'If'), 'intervalLengthSumIf': ('intervalLengthSum', 'If'), 'quantileBFloat16WeightedIf': ('quantileBFloat16Weighted', 'If'), 'meanZTestIf': ('meanZTest', 'If'), 'deltaSumIf': ('deltaSum', 'If'), 'quantilesExactHighIf': ('quantilesExactHigh', 'If'), 'exponentialMovingAverageIf': ('exponentialMovingAverage', 'If'), 'avgWeightedIf': ('avgWeighted', 'If'), 'quantileTDigestWeightedIf': ('quantileTDigestWeighted', 'If'), 'simpleLinearRegressionIf': ('simpleLinearRegression', 'If'), 'cramersVBiasCorrectedIf': ('cramersVBiasCorrected', 'If'), 'groupBitmapXorIf': ('groupBitmapXor', 'If'), 'quantilesGKIf': ('quantilesGK', 'If'), 'quantilesExactWeightedIf': ('quantilesExactWeighted', 'If'), 'stochasticLinearRegressionIf': ('stochasticLinearRegression', 'If'), 'contingencyIf': ('contingency', 'If'), 'sumMapIf': ('sumMap', 'If'), 'topKIf': ('topK', 'If'), 'sumWithOverflowIf': ('sumWithOverflow', 'If'), 'stddevPopIf': ('stddevPop', 'If'), 'quantileTimingWeightedIf': ('quantileTimingWeighted', 'If'), 'maxIntersectionsIf': ('maxIntersections', 'If'), 'anyHeavyIf': ('anyHeavy', 'If'), 'boundingRatioIf': ('boundingRatio', 'If'), 'quantileInterpolatedWeightedIf': ('quantileInterpolatedWeighted', 'If'), 'argMinIf': ('argMin', 'If'), 'quantilesExactIf': ('quantilesExact', 'If'), 'studentTTestIf': ('studentTTest', 'If'), 'groupArrayLastIf': ('groupArrayLast', 'If'), 'quantileDeterministicIf': ('quantileDeterministic', 'If'), 'quantilesBFloat16WeightedIf': ('quantilesBFloat16Weighted', 'If'), 'quantilesTimingWeightedIf': ('quantilesTimingWeighted', 'If'), 'uniqHLL12If': ('uniqHLL12', 'If'), 'quantileExactIf': ('quantileExact', 'If'), 'quantileExactHighIf': ('quantileExactHigh', 'If'), 'quantileIf': ('quantile', 'If'), 'quantileGKIf': ('quantileGK', 'If'), 'sparkBarIf': ('sparkBar', 'If'), 'quantilesDeterministicIf': ('quantilesDeterministic', 'If'), 'quantilesTimingIf': ('quantilesTiming', 'If'), 'skewPopIf': ('skewPop', 'If'), 'groupArrayIf': ('groupArray', 'If'), 'groupArrayMovingSumIf': ('groupArrayMovingSum', 'If'), 'groupBitAndIf': ('groupBitAnd', 'If'), 'groupBitmapIf': ('groupBitmap', 'If'), 'minIf': ('min', 'If'), 'sumKahanIf': ('sumKahan', 'If'), 'groupBitOrIf': ('groupBitOr', 'If'), 'anyLastIf': ('anyLast', 'If'), 'maxMapIf': ('maxMap', 'If'), 'countIf': ('count', 'If'), 'uniqCombined64If': ('uniqCombined64', 'If'), 'groupBitmapAndIf': ('groupBitmapAnd', 'If'), 'quantilesInterpolatedWeightedIf': ('quantilesInterpolatedWeighted', 'If'), 'quantileExactWeightedIf': ('quantileExactWeighted', 'If'), 'stddevSampIf': ('stddevSamp', 'If'), 'skewSampIf': ('skewSamp', 'If'), 'varSampIf': ('varSamp', 'If'), 'quantilesTDigestWeightedIf': ('quantilesTDigestWeighted', 'If'), 'quantileTDigestIf': ('quantileTDigest', 'If'), 'uniqExactIf': ('uniqExact', 'If'), 'groupArrayMovingAvgIf': ('groupArrayMovingAvg', 'If'), 'welchTTestIf': ('welchTTest', 'If'), 'mannWhitneyUTestIf': ('mannWhitneyUTest', 'If'), 'covarSampIf': ('covarSamp', 'If'), 'quantilesBFloat16If': ('quantilesBFloat16', 'If'), 'maxIf': ('max', 'If'), 'theilsUIf': ('theilsU', 'If'), 'uniqThetaIf': ('uniqTheta', 'If'), 'deltaSumTimestampIf': ('deltaSumTimestamp', 'If'), 'largestTriangleThreeBucketsIf': ('largestTriangleThreeBuckets', 'If'), 'argMaxIf': ('argMax', 'If'), 'sumCountIf': ('sumCount', 'If'), 'groupUniqArrayIf': ('groupUniqArray', 'If'), 'minMapIf': ('minMap', 'If'), 'kurtPopIf': ('kurtPop', 'If'), 'varPopIf': ('varPop', 'If'), 'first_valueIf': ('first_value', 'If'), 'categoricalInformationValueIf': ('categoricalInformationValue', 'If'), 'topKWeightedIf': ('topKWeighted', 'If'), 'groupBitmapOrIf': ('groupBitmapOr', 'If'), 'uniqIf': ('uniq', 'If'), 'kurtSampIf': ('kurtSamp', 'If'), 'entropyIf': ('entropy', 'If'), 'covarPopIf': ('covarPop', 'If'), 'quantileTimingIf': ('quantileTiming', 'If'), 'maxIntersectionsPositionArray': ('maxIntersectionsPosition', 'Array'), 'quantileExactLowArray': ('quantileExactLow', 'Array'), 'anyArray': ('any', 'Array'), 'kolmogorovSmirnovTestArray': ('kolmogorovSmirnovTest', 'Array'), 'uniqCombinedArray': ('uniqCombined', 'Array'), 'quantilesExactLowArray': ('quantilesExactLow', 'Array'), 'groupArraySampleArray': ('groupArraySample', 'Array'), 'last_valueArray': ('last_value', 'Array'), 'cramersVArray': ('cramersV', 'Array'), 'groupBitXorArray': ('groupBitXor', 'Array'), 'corrArray': ('corr', 'Array'), 'medianArray': ('median', 'Array'), 'quantilesTDigestArray': ('quantilesTDigest', 'Array'), 'quantilesArray': ('quantiles', 'Array'), 'sumArray': ('sum', 'Array'), 'quantileBFloat16Array': ('quantileBFloat16', 'Array'), 'stochasticLogisticRegressionArray': ('stochasticLogisticRegression', 'Array'), 'avgArray': ('avg', 'Array'), 'groupArrayInsertAtArray': ('groupArrayInsertAt', 'Array'), 'rankCorrArray': ('rankCorr', 'Array'), 'intervalLengthSumArray': ('intervalLengthSum', 'Array'), 'quantileBFloat16WeightedArray': ('quantileBFloat16Weighted', 'Array'), 'meanZTestArray': ('meanZTest', 'Array'), 'deltaSumArray': ('deltaSum', 'Array'), 'quantilesExactHighArray': ('quantilesExactHigh', 'Array'), 'exponentialMovingAverageArray': ('exponentialMovingAverage', 'Array'), 'avgWeightedArray': ('avgWeighted', 'Array'), 'quantileTDigestWeightedArray': ('quantileTDigestWeighted', 'Array'), 'simpleLinearRegressionArray': ('simpleLinearRegression', 'Array'), 'cramersVBiasCorrectedArray': ('cramersVBiasCorrected', 'Array'), 'groupBitmapXorArray': ('groupBitmapXor', 'Array'), 'quantilesGKArray': ('quantilesGK', 'Array'), 'quantilesExactWeightedArray': ('quantilesExactWeighted', 'Array'), 'stochasticLinearRegressionArray': ('stochasticLinearRegression', 'Array'), 'contingencyArray': ('contingency', 'Array'), 'sumMapArray': ('sumMap', 'Array'), 'topKArray': ('topK', 'Array'), 'sumWithOverflowArray': ('sumWithOverflow', 'Array'), 'stddevPopArray': ('stddevPop', 'Array'), 'quantileTimingWeightedArray': ('quantileTimingWeighted', 'Array'), 'maxIntersectionsArray': ('maxIntersections', 'Array'), 'anyHeavyArray': ('anyHeavy', 'Array'), 'boundingRatioArray': ('boundingRatio', 'Array'), 'quantileInterpolatedWeightedArray': ('quantileInterpolatedWeighted', 'Array'), 'argMinArray': ('argMin', 'Array'), 'quantilesExactArray': ('quantilesExact', 'Array'), 'studentTTestArray': ('studentTTest', 'Array'), 'groupArrayLastArray': ('groupArrayLast', 'Array'), 'quantileDeterministicArray': ('quantileDeterministic', 'Array'), 'quantilesBFloat16WeightedArray': ('quantilesBFloat16Weighted', 'Array'), 'quantilesTimingWeightedArray': ('quantilesTimingWeighted', 'Array'), 'uniqHLL12Array': ('uniqHLL12', 'Array'), 'quantileExactArray': ('quantileExact', 'Array'), 'quantileExactHighArray': ('quantileExactHigh', 'Array'), 'quantileArray': ('quantile', 'Array'), 'quantileGKArray': ('quantileGK', 'Array'), 'sparkBarArray': ('sparkBar', 'Array'), 'quantilesDeterministicArray': ('quantilesDeterministic', 'Array'), 'quantilesTimingArray': ('quantilesTiming', 'Array'), 'skewPopArray': ('skewPop', 'Array'), 'groupArrayArray': ('groupArray', 'Array'), 'groupArrayMovingSumArray': ('groupArrayMovingSum', 'Array'), 'groupBitAndArray': ('groupBitAnd', 'Array'), 'groupBitmapArray': ('groupBitmap', 'Array'), 'minArray': ('min', 'Array'), 'sumKahanArray': ('sumKahan', 'Array'), 'groupBitOrArray': ('groupBitOr', 'Array'), 'anyLastArray': ('anyLast', 'Array'), 'maxMapArray': ('maxMap', 'Array'), 'countArray': ('count', 'Array'), 'uniqCombined64Array': ('uniqCombined64', 'Array'), 'groupBitmapAndArray': ('groupBitmapAnd', 'Array'), 'quantilesInterpolatedWeightedArray': ('quantilesInterpolatedWeighted', 'Array'), 'quantileExactWeightedArray': ('quantileExactWeighted', 'Array'), 'stddevSampArray': ('stddevSamp', 'Array'), 'skewSampArray': ('skewSamp', 'Array'), 'varSampArray': ('varSamp', 'Array'), 'quantilesTDigestWeightedArray': ('quantilesTDigestWeighted', 'Array'), 'quantileTDigestArray': ('quantileTDigest', 'Array'), 'uniqExactArray': ('uniqExact', 'Array'), 'groupArrayMovingAvgArray': ('groupArrayMovingAvg', 'Array'), 'welchTTestArray': ('welchTTest', 'Array'), 'mannWhitneyUTestArray': ('mannWhitneyUTest', 'Array'), 'covarSampArray': ('covarSamp', 'Array'), 'quantilesBFloat16Array': ('quantilesBFloat16', 'Array'), 'maxArray': ('max', 'Array'), 'theilsUArray': ('theilsU', 'Array'), 'uniqThetaArray': ('uniqTheta', 'Array'), 'deltaSumTimestampArray': ('deltaSumTimestamp', 'Array'), 'largestTriangleThreeBucketsArray': ('largestTriangleThreeBuckets', 'Array'), 'argMaxArray': ('argMax', 'Array'), 'sumCountArray': ('sumCount', 'Array'), 'groupUniqArrayArray': ('groupUniqArray', 'Array'), 'minMapArray': ('minMap', 'Array'), 'kurtPopArray': ('kurtPop', 'Array'), 'varPopArray': ('varPop', 'Array'), 'first_valueArray': ('first_value', 'Array'), 'categoricalInformationValueArray': ('categoricalInformationValue', 'Array'), 'topKWeightedArray': ('topKWeighted', 'Array'), 'groupBitmapOrArray': ('groupBitmapOr', 'Array'), 'uniqArray': ('uniq', 'Array'), 'kurtSampArray': ('kurtSamp', 'Array'), 'entropyArray': ('entropy', 'Array'), 'covarPopArray': ('covarPop', 'Array'), 'quantileTimingArray': ('quantileTiming', 'Array'), 'maxIntersectionsPositionArrayIf': ('maxIntersectionsPosition', 'ArrayIf'), 'quantileExactLowArrayIf': ('quantileExactLow', 'ArrayIf'), 'anyArrayIf': ('any', 'ArrayIf'), 'kolmogorovSmirnovTestArrayIf': ('kolmogorovSmirnovTest', 'ArrayIf'), 'uniqCombinedArrayIf': ('uniqCombined', 'ArrayIf'), 'quantilesExactLowArrayIf': ('quantilesExactLow', 'ArrayIf'), 'groupArraySampleArrayIf': ('groupArraySample', 'ArrayIf'), 'last_valueArrayIf': ('last_value', 'ArrayIf'), 'cramersVArrayIf': ('cramersV', 'ArrayIf'), 'groupBitXorArrayIf': ('groupBitXor', 'ArrayIf'), 'corrArrayIf': ('corr', 'ArrayIf'), 'medianArrayIf': ('median', 'ArrayIf'), 'quantilesTDigestArrayIf': ('quantilesTDigest', 'ArrayIf'), 'quantilesArrayIf': ('quantiles', 'ArrayIf'), 'sumArrayIf': ('sum', 'ArrayIf'), 'quantileBFloat16ArrayIf': ('quantileBFloat16', 'ArrayIf'), 'stochasticLogisticRegressionArrayIf': ('stochasticLogisticRegression', 'ArrayIf'), 'avgArrayIf': ('avg', 'ArrayIf'), 'groupArrayInsertAtArrayIf': ('groupArrayInsertAt', 'ArrayIf'), 'rankCorrArrayIf': ('rankCorr', 'ArrayIf'), 'intervalLengthSumArrayIf': ('intervalLengthSum', 'ArrayIf'), 'quantileBFloat16WeightedArrayIf': ('quantileBFloat16Weighted', 'ArrayIf'), 'meanZTestArrayIf': ('meanZTest', 'ArrayIf'), 'deltaSumArrayIf': ('deltaSum', 'ArrayIf'), 'quantilesExactHighArrayIf': ('quantilesExactHigh', 'ArrayIf'), 'exponentialMovingAverageArrayIf': ('exponentialMovingAverage', 'ArrayIf'), 'avgWeightedArrayIf': ('avgWeighted', 'ArrayIf'), 'quantileTDigestWeightedArrayIf': ('quantileTDigestWeighted', 'ArrayIf'), 'simpleLinearRegressionArrayIf': ('simpleLinearRegression', 'ArrayIf'), 'cramersVBiasCorrectedArrayIf': ('cramersVBiasCorrected', 'ArrayIf'), 'groupBitmapXorArrayIf': ('groupBitmapXor', 'ArrayIf'), 'quantilesGKArrayIf': ('quantilesGK', 'ArrayIf'), 'quantilesExactWeightedArrayIf': ('quantilesExactWeighted', 'ArrayIf'), 'stochasticLinearRegressionArrayIf': ('stochasticLinearRegression', 'ArrayIf'), 'contingencyArrayIf': ('contingency', 'ArrayIf'), 'sumMapArrayIf': ('sumMap', 'ArrayIf'), 'topKArrayIf': ('topK', 'ArrayIf'), 'sumWithOverflowArrayIf': ('sumWithOverflow', 'ArrayIf'), 'stddevPopArrayIf': ('stddevPop', 'ArrayIf'), 'quantileTimingWeightedArrayIf': ('quantileTimingWeighted', 'ArrayIf'), 'maxIntersectionsArrayIf': ('maxIntersections', 'ArrayIf'), 'anyHeavyArrayIf': ('anyHeavy', 'ArrayIf'), 'boundingRatioArrayIf': ('boundingRatio', 'ArrayIf'), 'quantileInterpolatedWeightedArrayIf': ('quantileInterpolatedWeighted', 'ArrayIf'), 'argMinArrayIf': ('argMin', 'ArrayIf'), 'quantilesExactArrayIf': ('quantilesExact', 'ArrayIf'), 'studentTTestArrayIf': ('studentTTest', 'ArrayIf'), 'groupArrayLastArrayIf': ('groupArrayLast', 'ArrayIf'), 'quantileDeterministicArrayIf': ('quantileDeterministic', 'ArrayIf'), 'quantilesBFloat16WeightedArrayIf': ('quantilesBFloat16Weighted', 'ArrayIf'), 'quantilesTimingWeightedArrayIf': ('quantilesTimingWeighted', 'ArrayIf'), 'uniqHLL12ArrayIf': ('uniqHLL12', 'ArrayIf'), 'quantileExactArrayIf': ('quantileExact', 'ArrayIf'), 'quantileExactHighArrayIf': ('quantileExactHigh', 'ArrayIf'), 'quantileArrayIf': ('quantile', 'ArrayIf'), 'quantileGKArrayIf': ('quantileGK', 'ArrayIf'), 'sparkBarArrayIf': ('sparkBar', 'ArrayIf'), 'quantilesDeterministicArrayIf': ('quantilesDeterministic', 'ArrayIf'), 'quantilesTimingArrayIf': ('quantilesTiming', 'ArrayIf'), 'skewPopArrayIf': ('skewPop', 'ArrayIf'), 'groupArrayArrayIf': ('groupArray', 'ArrayIf'), 'groupArrayMovingSumArrayIf': ('groupArrayMovingSum', 'ArrayIf'), 'groupBitAndArrayIf': ('groupBitAnd', 'ArrayIf'), 'groupBitmapArrayIf': ('groupBitmap', 'ArrayIf'), 'minArrayIf': ('min', 'ArrayIf'), 'sumKahanArrayIf': ('sumKahan', 'ArrayIf'), 'groupBitOrArrayIf': ('groupBitOr', 'ArrayIf'), 'anyLastArrayIf': ('anyLast', 'ArrayIf'), 'maxMapArrayIf': ('maxMap', 'ArrayIf'), 'countArrayIf': ('count', 'ArrayIf'), 'uniqCombined64ArrayIf': ('uniqCombined64', 'ArrayIf'), 'groupBitmapAndArrayIf': ('groupBitmapAnd', 'ArrayIf'), 'quantilesInterpolatedWeightedArrayIf': ('quantilesInterpolatedWeighted', 'ArrayIf'), 'quantileExactWeightedArrayIf': ('quantileExactWeighted', 'ArrayIf'), 'stddevSampArrayIf': ('stddevSamp', 'ArrayIf'), 'skewSampArrayIf': ('skewSamp', 'ArrayIf'), 'varSampArrayIf': ('varSamp', 'ArrayIf'), 'quantilesTDigestWeightedArrayIf': ('quantilesTDigestWeighted', 'ArrayIf'), 'quantileTDigestArrayIf': ('quantileTDigest', 'ArrayIf'), 'uniqExactArrayIf': ('uniqExact', 'ArrayIf'), 'groupArrayMovingAvgArrayIf': ('groupArrayMovingAvg', 'ArrayIf'), 'welchTTestArrayIf': ('welchTTest', 'ArrayIf'), 'mannWhitneyUTestArrayIf': ('mannWhitneyUTest', 'ArrayIf'), 'covarSampArrayIf': ('covarSamp', 'ArrayIf'), 'quantilesBFloat16ArrayIf': ('quantilesBFloat16', 'ArrayIf'), 'maxArrayIf': ('max', 'ArrayIf'), 'theilsUArrayIf': ('theilsU', 'ArrayIf'), 'uniqThetaArrayIf': ('uniqTheta', 'ArrayIf'), 'deltaSumTimestampArrayIf': ('deltaSumTimestamp', 'ArrayIf'), 'largestTriangleThreeBucketsArrayIf': ('largestTriangleThreeBuckets', 'ArrayIf'), 'argMaxArrayIf': ('argMax', 'ArrayIf'), 'sumCountArrayIf': ('sumCount', 'ArrayIf'), 'groupUniqArrayArrayIf': ('groupUniqArray', 'ArrayIf'), 'minMapArrayIf': ('minMap', 'ArrayIf'), 'kurtPopArrayIf': ('kurtPop', 'ArrayIf'), 'varPopArrayIf': ('varPop', 'ArrayIf'), 'first_valueArrayIf': ('first_value', 'ArrayIf'), 'categoricalInformationValueArrayIf': ('categoricalInformationValue', 'ArrayIf'), 'topKWeightedArrayIf': ('topKWeighted', 'ArrayIf'), 'groupBitmapOrArrayIf': ('groupBitmapOr', 'ArrayIf'), 'uniqArrayIf': ('uniq', 'ArrayIf'), 'kurtSampArrayIf': ('kurtSamp', 'ArrayIf'), 'entropyArrayIf': ('entropy', 'ArrayIf'), 'covarPopArrayIf': ('covarPop', 'ArrayIf'), 'quantileTimingArrayIf': ('quantileTiming', 'ArrayIf'), 'maxIntersectionsPositionMap': ('maxIntersectionsPosition', 'Map'), 'quantileExactLowMap': ('quantileExactLow', 'Map'), 'anyMap': ('any', 'Map'), 'kolmogorovSmirnovTestMap': ('kolmogorovSmirnovTest', 'Map'), 'uniqCombinedMap': ('uniqCombined', 'Map'), 'quantilesExactLowMap': ('quantilesExactLow', 'Map'), 'groupArraySampleMap': ('groupArraySample', 'Map'), 'last_valueMap': ('last_value', 'Map'), 'cramersVMap': ('cramersV', 'Map'), 'groupBitXorMap': ('groupBitXor', 'Map'), 'corrMap': ('corr', 'Map'), 'medianMap': ('median', 'Map'), 'quantilesTDigestMap': ('quantilesTDigest', 'Map'), 'quantilesMap': ('quantiles', 'Map'), 'sumMap': ('sumMap', ''), 'quantileBFloat16Map': ('quantileBFloat16', 'Map'), 'stochasticLogisticRegressionMap': ('stochasticLogisticRegression', 'Map'), 'avgMap': ('avg', 'Map'), 'groupArrayInsertAtMap': ('groupArrayInsertAt', 'Map'), 'rankCorrMap': ('rankCorr', 'Map'), 'intervalLengthSumMap': ('intervalLengthSum', 'Map'), 'quantileBFloat16WeightedMap': ('quantileBFloat16Weighted', 'Map'), 'meanZTestMap': ('meanZTest', 'Map'), 'deltaSumMap': ('deltaSum', 'Map'), 'quantilesExactHighMap': ('quantilesExactHigh', 'Map'), 'exponentialMovingAverageMap': ('exponentialMovingAverage', 'Map'), 'avgWeightedMap': ('avgWeighted', 'Map'), 'quantileTDigestWeightedMap': ('quantileTDigestWeighted', 'Map'), 'simpleLinearRegressionMap': ('simpleLinearRegression', 'Map'), 'cramersVBiasCorrectedMap': ('cramersVBiasCorrected', 'Map'), 'groupBitmapXorMap': ('groupBitmapXor', 'Map'), 'quantilesGKMap': ('quantilesGK', 'Map'), 'quantilesExactWeightedMap': ('quantilesExactWeighted', 'Map'), 'stochasticLinearRegressionMap': ('stochasticLinearRegression', 'Map'), 'contingencyMap': ('contingency', 'Map'), 'sumMapMap': ('sumMap', 'Map'), 'topKMap': ('topK', 'Map'), 'sumWithOverflowMap': ('sumWithOverflow', 'Map'), 'stddevPopMap': ('stddevPop', 'Map'), 'quantileTimingWeightedMap': ('quantileTimingWeighted', 'Map'), 'maxIntersectionsMap': ('maxIntersections', 'Map'), 'anyHeavyMap': ('anyHeavy', 'Map'), 'boundingRatioMap': ('boundingRatio', 'Map'), 'quantileInterpolatedWeightedMap': ('quantileInterpolatedWeighted', 'Map'), 'argMinMap': ('argMin', 'Map'), 'quantilesExactMap': ('quantilesExact', 'Map'), 'studentTTestMap': ('studentTTest', 'Map'), 'groupArrayLastMap': ('groupArrayLast', 'Map'), 'quantileDeterministicMap': ('quantileDeterministic', 'Map'), 'quantilesBFloat16WeightedMap': ('quantilesBFloat16Weighted', 'Map'), 'quantilesTimingWeightedMap': ('quantilesTimingWeighted', 'Map'), 'uniqHLL12Map': ('uniqHLL12', 'Map'), 'quantileExactMap': ('quantileExact', 'Map'), 'quantileExactHighMap': ('quantileExactHigh', 'Map'), 'quantileMap': ('quantile', 'Map'), 'quantileGKMap': ('quantileGK', 'Map'), 'sparkBarMap': ('sparkBar', 'Map'), 'quantilesDeterministicMap': ('quantilesDeterministic', 'Map'), 'quantilesTimingMap': ('quantilesTiming', 'Map'), 'skewPopMap': ('skewPop', 'Map'), 'groupArrayMap': ('groupArray', 'Map'), 'groupArrayMovingSumMap': ('groupArrayMovingSum', 'Map'), 'groupBitAndMap': ('groupBitAnd', 'Map'), 'groupBitmapMap': ('groupBitmap', 'Map'), 'minMap': ('minMap', ''), 'sumKahanMap': ('sumKahan', 'Map'), 'groupBitOrMap': ('groupBitOr', 'Map'), 'anyLastMap': ('anyLast', 'Map'), 'maxMapMap': ('maxMap', 'Map'), 'countMap': ('count', 'Map'), 'uniqCombined64Map': ('uniqCombined64', 'Map'), 'groupBitmapAndMap': ('groupBitmapAnd', 'Map'), 'quantilesInterpolatedWeightedMap': ('quantilesInterpolatedWeighted', 'Map'), 'quantileExactWeightedMap': ('quantileExactWeighted', 'Map'), 'stddevSampMap': ('stddevSamp', 'Map'), 'skewSampMap': ('skewSamp', 'Map'), 'varSampMap': ('varSamp', 'Map'), 'quantilesTDigestWeightedMap': ('quantilesTDigestWeighted', 'Map'), 'quantileTDigestMap': ('quantileTDigest', 'Map'), 'uniqExactMap': ('uniqExact', 'Map'), 'groupArrayMovingAvgMap': ('groupArrayMovingAvg', 'Map'), 'welchTTestMap': ('welchTTest', 'Map'), 'mannWhitneyUTestMap': ('mannWhitneyUTest', 'Map'), 'covarSampMap': ('covarSamp', 'Map'), 'quantilesBFloat16Map': ('quantilesBFloat16', 'Map'), 'maxMap': ('maxMap', ''), 'theilsUMap': ('theilsU', 'Map'), 'uniqThetaMap': ('uniqTheta', 'Map'), 'deltaSumTimestampMap': ('deltaSumTimestamp', 'Map'), 'largestTriangleThreeBucketsMap': ('largestTriangleThreeBuckets', 'Map'), 'argMaxMap': ('argMax', 'Map'), 'sumCountMap': ('sumCount', 'Map'), 'groupUniqArrayMap': ('groupUniqArray', 'Map'), 'minMapMap': ('minMap', 'Map'), 'kurtPopMap': ('kurtPop', 'Map'), 'varPopMap': ('varPop', 'Map'), 'first_valueMap': ('first_value', 'Map'), 'categoricalInformationValueMap': ('categoricalInformationValue', 'Map'), 'topKWeightedMap': ('topKWeighted', 'Map'), 'groupBitmapOrMap': ('groupBitmapOr', 'Map'), 'uniqMap': ('uniq', 'Map'), 'kurtSampMap': ('kurtSamp', 'Map'), 'entropyMap': ('entropy', 'Map'), 'covarPopMap': ('covarPop', 'Map'), 'quantileTimingMap': ('quantileTiming', 'Map'), 'maxIntersectionsPositionSimpleState': ('maxIntersectionsPosition', 'SimpleState'), 'quantileExactLowSimpleState': ('quantileExactLow', 'SimpleState'), 'anySimpleState': ('any', 'SimpleState'), 'kolmogorovSmirnovTestSimpleState': ('kolmogorovSmirnovTest', 'SimpleState'), 'uniqCombinedSimpleState': ('uniqCombined', 'SimpleState'), 'quantilesExactLowSimpleState': ('quantilesExactLow', 'SimpleState'), 'groupArraySampleSimpleState': ('groupArraySample', 'SimpleState'), 'last_valueSimpleState': ('last_value', 'SimpleState'), 'cramersVSimpleState': ('cramersV', 'SimpleState'), 'groupBitXorSimpleState': ('groupBitXor', 'SimpleState'), 'corrSimpleState': ('corr', 'SimpleState'), 'medianSimpleState': ('median', 'SimpleState'), 'quantilesTDigestSimpleState': ('quantilesTDigest', 'SimpleState'), 'quantilesSimpleState': ('quantiles', 'SimpleState'), 'sumSimpleState': ('sum', 'SimpleState'), 'quantileBFloat16SimpleState': ('quantileBFloat16', 'SimpleState'), 'stochasticLogisticRegressionSimpleState': ('stochasticLogisticRegression', 'SimpleState'), 'avgSimpleState': ('avg', 'SimpleState'), 'groupArrayInsertAtSimpleState': ('groupArrayInsertAt', 'SimpleState'), 'rankCorrSimpleState': ('rankCorr', 'SimpleState'), 'intervalLengthSumSimpleState': ('intervalLengthSum', 'SimpleState'), 'quantileBFloat16WeightedSimpleState': ('quantileBFloat16Weighted', 'SimpleState'), 'meanZTestSimpleState': ('meanZTest', 'SimpleState'), 'deltaSumSimpleState': ('deltaSum', 'SimpleState'), 'quantilesExactHighSimpleState': ('quantilesExactHigh', 'SimpleState'), 'exponentialMovingAverageSimpleState': ('exponentialMovingAverage', 'SimpleState'), 'avgWeightedSimpleState': ('avgWeighted', 'SimpleState'), 'quantileTDigestWeightedSimpleState': ('quantileTDigestWeighted', 'SimpleState'), 'simpleLinearRegressionSimpleState': ('simpleLinearRegression', 'SimpleState'), 'cramersVBiasCorrectedSimpleState': ('cramersVBiasCorrected', 'SimpleState'), 'groupBitmapXorSimpleState': ('groupBitmapXor', 'SimpleState'), 'quantilesGKSimpleState': ('quantilesGK', 'SimpleState'), 'quantilesExactWeightedSimpleState': ('quantilesExactWeighted', 'SimpleState'), 'stochasticLinearRegressionSimpleState': ('stochasticLinearRegression', 'SimpleState'), 'contingencySimpleState': ('contingency', 'SimpleState'), 'sumMapSimpleState': ('sumMap', 'SimpleState'), 'topKSimpleState': ('topK', 'SimpleState'), 'sumWithOverflowSimpleState': ('sumWithOverflow', 'SimpleState'), 'stddevPopSimpleState': ('stddevPop', 'SimpleState'), 'quantileTimingWeightedSimpleState': ('quantileTimingWeighted', 'SimpleState'), 'maxIntersectionsSimpleState': ('maxIntersections', 'SimpleState'), 'anyHeavySimpleState': ('anyHeavy', 'SimpleState'), 'boundingRatioSimpleState': ('boundingRatio', 'SimpleState'), 'quantileInterpolatedWeightedSimpleState': ('quantileInterpolatedWeighted', 'SimpleState'), 'argMinSimpleState': ('argMin', 'SimpleState'), 'quantilesExactSimpleState': ('quantilesExact', 'SimpleState'), 'studentTTestSimpleState': ('studentTTest', 'SimpleState'), 'groupArrayLastSimpleState': ('groupArrayLast', 'SimpleState'), 'quantileDeterministicSimpleState': ('quantileDeterministic', 'SimpleState'), 'quantilesBFloat16WeightedSimpleState': ('quantilesBFloat16Weighted', 'SimpleState'), 'quantilesTimingWeightedSimpleState': ('quantilesTimingWeighted', 'SimpleState'), 'uniqHLL12SimpleState': ('uniqHLL12', 'SimpleState'), 'quantileExactSimpleState': ('quantileExact', 'SimpleState'), 'quantileExactHighSimpleState': ('quantileExactHigh', 'SimpleState'), 'quantileSimpleState': ('quantile', 'SimpleState'), 'quantileGKSimpleState': ('quantileGK', 'SimpleState'), 'sparkBarSimpleState': ('sparkBar', 'SimpleState'), 'quantilesDeterministicSimpleState': ('quantilesDeterministic', 'SimpleState'), 'quantilesTimingSimpleState': ('quantilesTiming', 'SimpleState'), 'skewPopSimpleState': ('skewPop', 'SimpleState'), 'groupArraySimpleState': ('groupArray', 'SimpleState'), 'groupArrayMovingSumSimpleState': ('groupArrayMovingSum', 'SimpleState'), 'groupBitAndSimpleState': ('groupBitAnd', 'SimpleState'), 'groupBitmapSimpleState': ('groupBitmap', 'SimpleState'), 'minSimpleState': ('min', 'SimpleState'), 'sumKahanSimpleState': ('sumKahan', 'SimpleState'), 'groupBitOrSimpleState': ('groupBitOr', 'SimpleState'), 'anyLastSimpleState': ('anyLast', 'SimpleState'), 'maxMapSimpleState': ('maxMap', 'SimpleState'), 'countSimpleState': ('count', 'SimpleState'), 'uniqCombined64SimpleState': ('uniqCombined64', 'SimpleState'), 'groupBitmapAndSimpleState': ('groupBitmapAnd', 'SimpleState'), 'quantilesInterpolatedWeightedSimpleState': ('quantilesInterpolatedWeighted', 'SimpleState'), 'quantileExactWeightedSimpleState': ('quantileExactWeighted', 'SimpleState'), 'stddevSampSimpleState': ('stddevSamp', 'SimpleState'), 'skewSampSimpleState': ('skewSamp', 'SimpleState'), 'varSampSimpleState': ('varSamp', 'SimpleState'), 'quantilesTDigestWeightedSimpleState': ('quantilesTDigestWeighted', 'SimpleState'), 'quantileTDigestSimpleState': ('quantileTDigest', 'SimpleState'), 'uniqExactSimpleState': ('uniqExact', 'SimpleState'), 'groupArrayMovingAvgSimpleState': ('groupArrayMovingAvg', 'SimpleState'), 'welchTTestSimpleState': ('welchTTest', 'SimpleState'), 'mannWhitneyUTestSimpleState': ('mannWhitneyUTest', 'SimpleState'), 'covarSampSimpleState': ('covarSamp', 'SimpleState'), 'quantilesBFloat16SimpleState': ('quantilesBFloat16', 'SimpleState'), 'maxSimpleState': ('max', 'SimpleState'), 'theilsUSimpleState': ('theilsU', 'SimpleState'), 'uniqThetaSimpleState': ('uniqTheta', 'SimpleState'), 'deltaSumTimestampSimpleState': ('deltaSumTimestamp', 'SimpleState'), 'largestTriangleThreeBucketsSimpleState': ('largestTriangleThreeBuckets', 'SimpleState'), 'argMaxSimpleState': ('argMax', 'SimpleState'), 'sumCountSimpleState': ('sumCount', 'SimpleState'), 'groupUniqArraySimpleState': ('groupUniqArray', 'SimpleState'), 'minMapSimpleState': ('minMap', 'SimpleState'), 'kurtPopSimpleState': ('kurtPop', 'SimpleState'), 'varPopSimpleState': ('varPop', 'SimpleState'), 'first_valueSimpleState': ('first_value', 'SimpleState'), 'categoricalInformationValueSimpleState': ('categoricalInformationValue', 'SimpleState'), 'topKWeightedSimpleState': ('topKWeighted', 'SimpleState'), 'groupBitmapOrSimpleState': ('groupBitmapOr', 'SimpleState'), 'uniqSimpleState': ('uniq', 'SimpleState'), 'kurtSampSimpleState': ('kurtSamp', 'SimpleState'), 'entropySimpleState': ('entropy', 'SimpleState'), 'covarPopSimpleState': ('covarPop', 'SimpleState'), 'quantileTimingSimpleState': ('quantileTiming', 'SimpleState'), 'maxIntersectionsPositionState': ('maxIntersectionsPosition', 'State'), 'quantileExactLowState': ('quantileExactLow', 'State'), 'anyState': ('any', 'State'), 'kolmogorovSmirnovTestState': ('kolmogorovSmirnovTest', 'State'), 'uniqCombinedState': ('uniqCombined', 'State'), 'quantilesExactLowState': ('quantilesExactLow', 'State'), 'groupArraySampleState': ('groupArraySample', 'State'), 'last_valueState': ('last_value', 'State'), 'cramersVState': ('cramersV', 'State'), 'groupBitXorState': ('groupBitXor', 'State'), 'corrState': ('corr', 'State'), 'medianState': ('median', 'State'), 'quantilesTDigestState': ('quantilesTDigest', 'State'), 'quantilesState': ('quantiles', 'State'), 'sumState': ('sum', 'State'), 'quantileBFloat16State': ('quantileBFloat16', 'State'), 'stochasticLogisticRegressionState': ('stochasticLogisticRegression', 'State'), 'avgState': ('avg', 'State'), 'groupArrayInsertAtState': ('groupArrayInsertAt', 'State'), 'rankCorrState': ('rankCorr', 'State'), 'intervalLengthSumState': ('intervalLengthSum', 'State'), 'quantileBFloat16WeightedState': ('quantileBFloat16Weighted', 'State'), 'meanZTestState': ('meanZTest', 'State'), 'deltaSumState': ('deltaSum', 'State'), 'quantilesExactHighState': ('quantilesExactHigh', 'State'), 'exponentialMovingAverageState': ('exponentialMovingAverage', 'State'), 'avgWeightedState': ('avgWeighted', 'State'), 'quantileTDigestWeightedState': ('quantileTDigestWeighted', 'State'), 'simpleLinearRegressionState': ('simpleLinearRegression', 'State'), 'cramersVBiasCorrectedState': ('cramersVBiasCorrected', 'State'), 'groupBitmapXorState': ('groupBitmapXor', 'State'), 'quantilesGKState': ('quantilesGK', 'State'), 'quantilesExactWeightedState': ('quantilesExactWeighted', 'State'), 'stochasticLinearRegressionState': ('stochasticLinearRegression', 'State'), 'contingencyState': ('contingency', 'State'), 'sumMapState': ('sumMap', 'State'), 'topKState': ('topK', 'State'), 'sumWithOverflowState': ('sumWithOverflow', 'State'), 'stddevPopState': ('stddevPop', 'State'), 'quantileTimingWeightedState': ('quantileTimingWeighted', 'State'), 'maxIntersectionsState': ('maxIntersections', 'State'), 'anyHeavyState': ('anyHeavy', 'State'), 'boundingRatioState': ('boundingRatio', 'State'), 'quantileInterpolatedWeightedState': ('quantileInterpolatedWeighted', 'State'), 'argMinState': ('argMin', 'State'), 'quantilesExactState': ('quantilesExact', 'State'), 'studentTTestState': ('studentTTest', 'State'), 'groupArrayLastState': ('groupArrayLast', 'State'), 'quantileDeterministicState': ('quantileDeterministic', 'State'), 'quantilesBFloat16WeightedState': ('quantilesBFloat16Weighted', 'State'), 'quantilesTimingWeightedState': ('quantilesTimingWeighted', 'State'), 'uniqHLL12State': ('uniqHLL12', 'State'), 'quantileExactState': ('quantileExact', 'State'), 'quantileExactHighState': ('quantileExactHigh', 'State'), 'quantileState': ('quantile', 'State'), 'quantileGKState': ('quantileGK', 'State'), 'sparkBarState': ('sparkBar', 'State'), 'quantilesDeterministicState': ('quantilesDeterministic', 'State'), 'quantilesTimingState': ('quantilesTiming', 'State'), 'skewPopState': ('skewPop', 'State'), 'groupArrayState': ('groupArray', 'State'), 'groupArrayMovingSumState': ('groupArrayMovingSum', 'State'), 'groupBitAndState': ('groupBitAnd', 'State'), 'groupBitmapState': ('groupBitmap', 'State'), 'minState': ('min', 'State'), 'sumKahanState': ('sumKahan', 'State'), 'groupBitOrState': ('groupBitOr', 'State'), 'anyLastState': ('anyLast', 'State'), 'maxMapState': ('maxMap', 'State'), 'countState': ('count', 'State'), 'uniqCombined64State': ('uniqCombined64', 'State'), 'groupBitmapAndState': ('groupBitmapAnd', 'State'), 'quantilesInterpolatedWeightedState': ('quantilesInterpolatedWeighted', 'State'), 'quantileExactWeightedState': ('quantileExactWeighted', 'State'), 'stddevSampState': ('stddevSamp', 'State'), 'skewSampState': ('skewSamp', 'State'), 'varSampState': ('varSamp', 'State'), 'quantilesTDigestWeightedState': ('quantilesTDigestWeighted', 'State'), 'quantileTDigestState': ('quantileTDigest', 'State'), 'uniqExactState': ('uniqExact', 'State'), 'groupArrayMovingAvgState': ('groupArrayMovingAvg', 'State'), 'welchTTestState': ('welchTTest', 'State'), 'mannWhitneyUTestState': ('mannWhitneyUTest', 'State'), 'covarSampState': ('covarSamp', 'State'), 'quantilesBFloat16State': ('quantilesBFloat16', 'State'), 'maxState': ('max', 'State'), 'theilsUState': ('theilsU', 'State'), 'uniqThetaState': ('uniqTheta', 'State'), 'deltaSumTimestampState': ('deltaSumTimestamp', 'State'), 'largestTriangleThreeBucketsState': ('largestTriangleThreeBuckets', 'State'), 'argMaxState': ('argMax', 'State'), 'sumCountState': ('sumCount', 'State'), 'groupUniqArrayState': ('groupUniqArray', 'State'), 'minMapState': ('minMap', 'State'), 'kurtPopState': ('kurtPop', 'State'), 'varPopState': ('varPop', 'State'), 'first_valueState': ('first_value', 'State'), 'categoricalInformationValueState': ('categoricalInformationValue', 'State'), 'topKWeightedState': ('topKWeighted', 'State'), 'groupBitmapOrState': ('groupBitmapOr', 'State'), 'uniqState': ('uniq', 'State'), 'kurtSampState': ('kurtSamp', 'State'), 'entropyState': ('entropy', 'State'), 'covarPopState': ('covarPop', 'State'), 'quantileTimingState': ('quantileTiming', 'State'), 'maxIntersectionsPositionMerge': ('maxIntersectionsPosition', 'Merge'), 'quantileExactLowMerge': ('quantileExactLow', 'Merge'), 'anyMerge': ('any', 'Merge'), 'kolmogorovSmirnovTestMerge': ('kolmogorovSmirnovTest', 'Merge'), 'uniqCombinedMerge': ('uniqCombined', 'Merge'), 'quantilesExactLowMerge': ('quantilesExactLow', 'Merge'), 'groupArraySampleMerge': ('groupArraySample', 'Merge'), 'last_valueMerge': ('last_value', 'Merge'), 'cramersVMerge': ('cramersV', 'Merge'), 'groupBitXorMerge': ('groupBitXor', 'Merge'), 'corrMerge': ('corr', 'Merge'), 'medianMerge': ('median', 'Merge'), 'quantilesTDigestMerge': ('quantilesTDigest', 'Merge'), 'quantilesMerge': ('quantiles', 'Merge'), 'sumMerge': ('sum', 'Merge'), 'quantileBFloat16Merge': ('quantileBFloat16', 'Merge'), 'stochasticLogisticRegressionMerge': ('stochasticLogisticRegression', 'Merge'), 'avgMerge': ('avg', 'Merge'), 'groupArrayInsertAtMerge': ('groupArrayInsertAt', 'Merge'), 'rankCorrMerge': ('rankCorr', 'Merge'), 'intervalLengthSumMerge': ('intervalLengthSum', 'Merge'), 'quantileBFloat16WeightedMerge': ('quantileBFloat16Weighted', 'Merge'), 'meanZTestMerge': ('meanZTest', 'Merge'), 'deltaSumMerge': ('deltaSum', 'Merge'), 'quantilesExactHighMerge': ('quantilesExactHigh', 'Merge'), 'exponentialMovingAverageMerge': ('exponentialMovingAverage', 'Merge'), 'avgWeightedMerge': ('avgWeighted', 'Merge'), 'quantileTDigestWeightedMerge': ('quantileTDigestWeighted', 'Merge'), 'simpleLinearRegressionMerge': ('simpleLinearRegression', 'Merge'), 'cramersVBiasCorrectedMerge': ('cramersVBiasCorrected', 'Merge'), 'groupBitmapXorMerge': ('groupBitmapXor', 'Merge'), 'quantilesGKMerge': ('quantilesGK', 'Merge'), 'quantilesExactWeightedMerge': ('quantilesExactWeighted', 'Merge'), 'stochasticLinearRegressionMerge': ('stochasticLinearRegression', 'Merge'), 'contingencyMerge': ('contingency', 'Merge'), 'sumMapMerge': ('sumMap', 'Merge'), 'topKMerge': ('topK', 'Merge'), 'sumWithOverflowMerge': ('sumWithOverflow', 'Merge'), 'stddevPopMerge': ('stddevPop', 'Merge'), 'quantileTimingWeightedMerge': ('quantileTimingWeighted', 'Merge'), 'maxIntersectionsMerge': ('maxIntersections', 'Merge'), 'anyHeavyMerge': ('anyHeavy', 'Merge'), 'boundingRatioMerge': ('boundingRatio', 'Merge'), 'quantileInterpolatedWeightedMerge': ('quantileInterpolatedWeighted', 'Merge'), 'argMinMerge': ('argMin', 'Merge'), 'quantilesExactMerge': ('quantilesExact', 'Merge'), 'studentTTestMerge': ('studentTTest', 'Merge'), 'groupArrayLastMerge': ('groupArrayLast', 'Merge'), 'quantileDeterministicMerge': ('quantileDeterministic', 'Merge'), 'quantilesBFloat16WeightedMerge': ('quantilesBFloat16Weighted', 'Merge'), 'quantilesTimingWeightedMerge': ('quantilesTimingWeighted', 'Merge'), 'uniqHLL12Merge': ('uniqHLL12', 'Merge'), 'quantileExactMerge': ('quantileExact', 'Merge'), 'quantileExactHighMerge': ('quantileExactHigh', 'Merge'), 'quantileMerge': ('quantile', 'Merge'), 'quantileGKMerge': ('quantileGK', 'Merge'), 'sparkBarMerge': ('sparkBar', 'Merge'), 'quantilesDeterministicMerge': ('quantilesDeterministic', 'Merge'), 'quantilesTimingMerge': ('quantilesTiming', 'Merge'), 'skewPopMerge': ('skewPop', 'Merge'), 'groupArrayMerge': ('groupArray', 'Merge'), 'groupArrayMovingSumMerge': ('groupArrayMovingSum', 'Merge'), 'groupBitAndMerge': ('groupBitAnd', 'Merge'), 'groupBitmapMerge': ('groupBitmap', 'Merge'), 'minMerge': ('min', 'Merge'), 'sumKahanMerge': ('sumKahan', 'Merge'), 'groupBitOrMerge': ('groupBitOr', 'Merge'), 'anyLastMerge': ('anyLast', 'Merge'), 'maxMapMerge': ('maxMap', 'Merge'), 'countMerge': ('count', 'Merge'), 'uniqCombined64Merge': ('uniqCombined64', 'Merge'), 'groupBitmapAndMerge': ('groupBitmapAnd', 'Merge'), 'quantilesInterpolatedWeightedMerge': ('quantilesInterpolatedWeighted', 'Merge'), 'quantileExactWeightedMerge': ('quantileExactWeighted', 'Merge'), 'stddevSampMerge': ('stddevSamp', 'Merge'), 'skewSampMerge': ('skewSamp', 'Merge'), 'varSampMerge': ('varSamp', 'Merge'), 'quantilesTDigestWeightedMerge': ('quantilesTDigestWeighted', 'Merge'), 'quantileTDigestMerge': ('quantileTDigest', 'Merge'), 'uniqExactMerge': ('uniqExact', 'Merge'), 'groupArrayMovingAvgMerge': ('groupArrayMovingAvg', 'Merge'), 'welchTTestMerge': ('welchTTest', 'Merge'), 'mannWhitneyUTestMerge': ('mannWhitneyUTest', 'Merge'), 'covarSampMerge': ('covarSamp', 'Merge'), 'quantilesBFloat16Merge': ('quantilesBFloat16', 'Merge'), 'maxMerge': ('max', 'Merge'), 'theilsUMerge': ('theilsU', 'Merge'), 'uniqThetaMerge': ('uniqTheta', 'Merge'), 'deltaSumTimestampMerge': ('deltaSumTimestamp', 'Merge'), 'largestTriangleThreeBucketsMerge': ('largestTriangleThreeBuckets', 'Merge'), 'argMaxMerge': ('argMax', 'Merge'), 'sumCountMerge': ('sumCount', 'Merge'), 'groupUniqArrayMerge': ('groupUniqArray', 'Merge'), 'minMapMerge': ('minMap', 'Merge'), 'kurtPopMerge': ('kurtPop', 'Merge'), 'varPopMerge': ('varPop', 'Merge'), 'first_valueMerge': ('first_value', 'Merge'), 'categoricalInformationValueMerge': ('categoricalInformationValue', 'Merge'), 'topKWeightedMerge': ('topKWeighted', 'Merge'), 'groupBitmapOrMerge': ('groupBitmapOr', 'Merge'), 'uniqMerge': ('uniq', 'Merge'), 'kurtSampMerge': ('kurtSamp', 'Merge'), 'entropyMerge': ('entropy', 'Merge'), 'covarPopMerge': ('covarPop', 'Merge'), 'quantileTimingMerge': ('quantileTiming', 'Merge'), 'maxIntersectionsPositionMergeState': ('maxIntersectionsPosition', 'MergeState'), 'quantileExactLowMergeState': ('quantileExactLow', 'MergeState'), 'anyMergeState': ('any', 'MergeState'), 'kolmogorovSmirnovTestMergeState': ('kolmogorovSmirnovTest', 'MergeState'), 'uniqCombinedMergeState': ('uniqCombined', 'MergeState'), 'quantilesExactLowMergeState': ('quantilesExactLow', 'MergeState'), 'groupArraySampleMergeState': ('groupArraySample', 'MergeState'), 'last_valueMergeState': ('last_value', 'MergeState'), 'cramersVMergeState': ('cramersV', 'MergeState'), 'groupBitXorMergeState': ('groupBitXor', 'MergeState'), 'corrMergeState': ('corr', 'MergeState'), 'medianMergeState': ('median', 'MergeState'), 'quantilesTDigestMergeState': ('quantilesTDigest', 'MergeState'), 'quantilesMergeState': ('quantiles', 'MergeState'), 'sumMergeState': ('sum', 'MergeState'), 'quantileBFloat16MergeState': ('quantileBFloat16', 'MergeState'), 'stochasticLogisticRegressionMergeState': ('stochasticLogisticRegression', 'MergeState'), 'avgMergeState': ('avg', 'MergeState'), 'groupArrayInsertAtMergeState': ('groupArrayInsertAt', 'MergeState'), 'rankCorrMergeState': ('rankCorr', 'MergeState'), 'intervalLengthSumMergeState': ('intervalLengthSum', 'MergeState'), 'quantileBFloat16WeightedMergeState': ('quantileBFloat16Weighted', 'MergeState'), 'meanZTestMergeState': ('meanZTest', 'MergeState'), 'deltaSumMergeState': ('deltaSum', 'MergeState'), 'quantilesExactHighMergeState': ('quantilesExactHigh', 'MergeState'), 'exponentialMovingAverageMergeState': ('exponentialMovingAverage', 'MergeState'), 'avgWeightedMergeState': ('avgWeighted', 'MergeState'), 'quantileTDigestWeightedMergeState': ('quantileTDigestWeighted', 'MergeState'), 'simpleLinearRegressionMergeState': ('simpleLinearRegression', 'MergeState'), 'cramersVBiasCorrectedMergeState': ('cramersVBiasCorrected', 'MergeState'), 'groupBitmapXorMergeState': ('groupBitmapXor', 'MergeState'), 'quantilesGKMergeState': ('quantilesGK', 'MergeState'), 'quantilesExactWeightedMergeState': ('quantilesExactWeighted', 'MergeState'), 'stochasticLinearRegressionMergeState': ('stochasticLinearRegression', 'MergeState'), 'contingencyMergeState': ('contingency', 'MergeState'), 'sumMapMergeState': ('sumMap', 'MergeState'), 'topKMergeState': ('topK', 'MergeState'), 'sumWithOverflowMergeState': ('sumWithOverflow', 'MergeState'), 'stddevPopMergeState': ('stddevPop', 'MergeState'), 'quantileTimingWeightedMergeState': ('quantileTimingWeighted', 'MergeState'), 'maxIntersectionsMergeState': ('maxIntersections', 'MergeState'), 'anyHeavyMergeState': ('anyHeavy', 'MergeState'), 'boundingRatioMergeState': ('boundingRatio', 'MergeState'), 'quantileInterpolatedWeightedMergeState': ('quantileInterpolatedWeighted', 'MergeState'), 'argMinMergeState': ('argMin', 'MergeState'), 'quantilesExactMergeState': ('quantilesExact', 'MergeState'), 'studentTTestMergeState': ('studentTTest', 'MergeState'), 'groupArrayLastMergeState': ('groupArrayLast', 'MergeState'), 'quantileDeterministicMergeState': ('quantileDeterministic', 'MergeState'), 'quantilesBFloat16WeightedMergeState': ('quantilesBFloat16Weighted', 'MergeState'), 'quantilesTimingWeightedMergeState': ('quantilesTimingWeighted', 'MergeState'), 'uniqHLL12MergeState': ('uniqHLL12', 'MergeState'), 'quantileExactMergeState': ('quantileExact', 'MergeState'), 'quantileExactHighMergeState': ('quantileExactHigh', 'MergeState'), 'quantileMergeState': ('quantile', 'MergeState'), 'quantileGKMergeState': ('quantileGK', 'MergeState'), 'sparkBarMergeState': ('sparkBar', 'MergeState'), 'quantilesDeterministicMergeState': ('quantilesDeterministic', 'MergeState'), 'quantilesTimingMergeState': ('quantilesTiming', 'MergeState'), 'skewPopMergeState': ('skewPop', 'MergeState'), 'groupArrayMergeState': ('groupArray', 'MergeState'), 'groupArrayMovingSumMergeState': ('groupArrayMovingSum', 'MergeState'), 'groupBitAndMergeState': ('groupBitAnd', 'MergeState'), 'groupBitmapMergeState': ('groupBitmap', 'MergeState'), 'minMergeState': ('min', 'MergeState'), 'sumKahanMergeState': ('sumKahan', 'MergeState'), 'groupBitOrMergeState': ('groupBitOr', 'MergeState'), 'anyLastMergeState': ('anyLast', 'MergeState'), 'maxMapMergeState': ('maxMap', 'MergeState'), 'countMergeState': ('count', 'MergeState'), 'uniqCombined64MergeState': ('uniqCombined64', 'MergeState'), 'groupBitmapAndMergeState': ('groupBitmapAnd', 'MergeState'), 'quantilesInterpolatedWeightedMergeState': ('quantilesInterpolatedWeighted', 'MergeState'), 'quantileExactWeightedMergeState': ('quantileExactWeighted', 'MergeState'), 'stddevSampMergeState': ('stddevSamp', 'MergeState'), 'skewSampMergeState': ('skewSamp', 'MergeState'), 'varSampMergeState': ('varSamp', 'MergeState'), 'quantilesTDigestWeightedMergeState': ('quantilesTDigestWeighted', 'MergeState'), 'quantileTDigestMergeState': ('quantileTDigest', 'MergeState'), 'uniqExactMergeState': ('uniqExact', 'MergeState'), 'groupArrayMovingAvgMergeState': ('groupArrayMovingAvg', 'MergeState'), 'welchTTestMergeState': ('welchTTest', 'MergeState'), 'mannWhitneyUTestMergeState': ('mannWhitneyUTest', 'MergeState'), 'covarSampMergeState': ('covarSamp', 'MergeState'), 'quantilesBFloat16MergeState': ('quantilesBFloat16', 'MergeState'), 'maxMergeState': ('max', 'MergeState'), 'theilsUMergeState': ('theilsU', 'MergeState'), 'uniqThetaMergeState': ('uniqTheta', 'MergeState'), 'deltaSumTimestampMergeState': ('deltaSumTimestamp', 'MergeState'), 'largestTriangleThreeBucketsMergeState': ('largestTriangleThreeBuckets', 'MergeState'), 'argMaxMergeState': ('argMax', 'MergeState'), 'sumCountMergeState': ('sumCount', 'MergeState'), 'groupUniqArrayMergeState': ('groupUniqArray', 'MergeState'), 'minMapMergeState': ('minMap', 'MergeState'), 'kurtPopMergeState': ('kurtPop', 'MergeState'), 'varPopMergeState': ('varPop', 'MergeState'), 'first_valueMergeState': ('first_value', 'MergeState'), 'categoricalInformationValueMergeState': ('categoricalInformationValue', 'MergeState'), 'topKWeightedMergeState': ('topKWeighted', 'MergeState'), 'groupBitmapOrMergeState': ('groupBitmapOr', 'MergeState'), 'uniqMergeState': ('uniq', 'MergeState'), 'kurtSampMergeState': ('kurtSamp', 'MergeState'), 'entropyMergeState': ('entropy', 'MergeState'), 'covarPopMergeState': ('covarPop', 'MergeState'), 'quantileTimingMergeState': ('quantileTiming', 'MergeState'), 'maxIntersectionsPositionForEach': ('maxIntersectionsPosition', 'ForEach'), 'quantileExactLowForEach': ('quantileExactLow', 'ForEach'), 'anyForEach': ('any', 'ForEach'), 'kolmogorovSmirnovTestForEach': ('kolmogorovSmirnovTest', 'ForEach'), 'uniqCombinedForEach': ('uniqCombined', 'ForEach'), 'quantilesExactLowForEach': ('quantilesExactLow', 'ForEach'), 'groupArraySampleForEach': ('groupArraySample', 'ForEach'), 'last_valueForEach': ('last_value', 'ForEach'), 'cramersVForEach': ('cramersV', 'ForEach'), 'groupBitXorForEach': ('groupBitXor', 'ForEach'), 'corrForEach': ('corr', 'ForEach'), 'medianForEach': ('median', 'ForEach'), 'quantilesTDigestForEach': ('quantilesTDigest', 'ForEach'), 'quantilesForEach': ('quantiles', 'ForEach'), 'sumForEach': ('sum', 'ForEach'), 'quantileBFloat16ForEach': ('quantileBFloat16', 'ForEach'), 'stochasticLogisticRegressionForEach': ('stochasticLogisticRegression', 'ForEach'), 'avgForEach': ('avg', 'ForEach'), 'groupArrayInsertAtForEach': ('groupArrayInsertAt', 'ForEach'), 'rankCorrForEach': ('rankCorr', 'ForEach'), 'intervalLengthSumForEach': ('intervalLengthSum', 'ForEach'), 'quantileBFloat16WeightedForEach': ('quantileBFloat16Weighted', 'ForEach'), 'meanZTestForEach': ('meanZTest', 'ForEach'), 'deltaSumForEach': ('deltaSum', 'ForEach'), 'quantilesExactHighForEach': ('quantilesExactHigh', 'ForEach'), 'exponentialMovingAverageForEach': ('exponentialMovingAverage', 'ForEach'), 'avgWeightedForEach': ('avgWeighted', 'ForEach'), 'quantileTDigestWeightedForEach': ('quantileTDigestWeighted', 'ForEach'), 'simpleLinearRegressionForEach': ('simpleLinearRegression', 'ForEach'), 'cramersVBiasCorrectedForEach': ('cramersVBiasCorrected', 'ForEach'), 'groupBitmapXorForEach': ('groupBitmapXor', 'ForEach'), 'quantilesGKForEach': ('quantilesGK', 'ForEach'), 'quantilesExactWeightedForEach': ('quantilesExactWeighted', 'ForEach'), 'stochasticLinearRegressionForEach': ('stochasticLinearRegression', 'ForEach'), 'contingencyForEach': ('contingency', 'ForEach'), 'sumMapForEach': ('sumMap', 'ForEach'), 'topKForEach': ('topK', 'ForEach'), 'sumWithOverflowForEach': ('sumWithOverflow', 'ForEach'), 'stddevPopForEach': ('stddevPop', 'ForEach'), 'quantileTimingWeightedForEach': ('quantileTimingWeighted', 'ForEach'), 'maxIntersectionsForEach': ('maxIntersections', 'ForEach'), 'anyHeavyForEach': ('anyHeavy', 'ForEach'), 'boundingRatioForEach': ('boundingRatio', 'ForEach'), 'quantileInterpolatedWeightedForEach': ('quantileInterpolatedWeighted', 'ForEach'), 'argMinForEach': ('argMin', 'ForEach'), 'quantilesExactForEach': ('quantilesExact', 'ForEach'), 'studentTTestForEach': ('studentTTest', 'ForEach'), 'groupArrayLastForEach': ('groupArrayLast', 'ForEach'), 'quantileDeterministicForEach': ('quantileDeterministic', 'ForEach'), 'quantilesBFloat16WeightedForEach': ('quantilesBFloat16Weighted', 'ForEach'), 'quantilesTimingWeightedForEach': ('quantilesTimingWeighted', 'ForEach'), 'uniqHLL12ForEach': ('uniqHLL12', 'ForEach'), 'quantileExactForEach': ('quantileExact', 'ForEach'), 'quantileExactHighForEach': ('quantileExactHigh', 'ForEach'), 'quantileForEach': ('quantile', 'ForEach'), 'quantileGKForEach': ('quantileGK', 'ForEach'), 'sparkBarForEach': ('sparkBar', 'ForEach'), 'quantilesDeterministicForEach': ('quantilesDeterministic', 'ForEach'), 'quantilesTimingForEach': ('quantilesTiming', 'ForEach'), 'skewPopForEach': ('skewPop', 'ForEach'), 'groupArrayForEach': ('groupArray', 'ForEach'), 'groupArrayMovingSumForEach': ('groupArrayMovingSum', 'ForEach'), 'groupBitAndForEach': ('groupBitAnd', 'ForEach'), 'groupBitmapForEach': ('groupBitmap', 'ForEach'), 'minForEach': ('min', 'ForEach'), 'sumKahanForEach': ('sumKahan', 'ForEach'), 'groupBitOrForEach': ('groupBitOr', 'ForEach'), 'anyLastForEach': ('anyLast', 'ForEach'), 'maxMapForEach': ('maxMap', 'ForEach'), 'countForEach': ('count', 'ForEach'), 'uniqCombined64ForEach': ('uniqCombined64', 'ForEach'), 'groupBitmapAndForEach': ('groupBitmapAnd', 'ForEach'), 'quantilesInterpolatedWeightedForEach': ('quantilesInterpolatedWeighted', 'ForEach'), 'quantileExactWeightedForEach': ('quantileExactWeighted', 'ForEach'), 'stddevSampForEach': ('stddevSamp', 'ForEach'), 'skewSampForEach': ('skewSamp', 'ForEach'), 'varSampForEach': ('varSamp', 'ForEach'), 'quantilesTDigestWeightedForEach': ('quantilesTDigestWeighted', 'ForEach'), 'quantileTDigestForEach': ('quantileTDigest', 'ForEach'), 'uniqExactForEach': ('uniqExact', 'ForEach'), 'groupArrayMovingAvgForEach': ('groupArrayMovingAvg', 'ForEach'), 'welchTTestForEach': ('welchTTest', 'ForEach'), 'mannWhitneyUTestForEach': ('mannWhitneyUTest', 'ForEach'), 'covarSampForEach': ('covarSamp', 'ForEach'), 'quantilesBFloat16ForEach': ('quantilesBFloat16', 'ForEach'), 'maxForEach': ('max', 'ForEach'), 'theilsUForEach': ('theilsU', 'ForEach'), 'uniqThetaForEach': ('uniqTheta', 'ForEach'), 'deltaSumTimestampForEach': ('deltaSumTimestamp', 'ForEach'), 'largestTriangleThreeBucketsForEach': ('largestTriangleThreeBuckets', 'ForEach'), 'argMaxForEach': ('argMax', 'ForEach'), 'sumCountForEach': ('sumCount', 'ForEach'), 'groupUniqArrayForEach': ('groupUniqArray', 'ForEach'), 'minMapForEach': ('minMap', 'ForEach'), 'kurtPopForEach': ('kurtPop', 'ForEach'), 'varPopForEach': ('varPop', 'ForEach'), 'first_valueForEach': ('first_value', 'ForEach'), 'categoricalInformationValueForEach': ('categoricalInformationValue', 'ForEach'), 'topKWeightedForEach': ('topKWeighted', 'ForEach'), 'groupBitmapOrForEach': ('groupBitmapOr', 'ForEach'), 'uniqForEach': ('uniq', 'ForEach'), 'kurtSampForEach': ('kurtSamp', 'ForEach'), 'entropyForEach': ('entropy', 'ForEach'), 'covarPopForEach': ('covarPop', 'ForEach'), 'quantileTimingForEach': ('quantileTiming', 'ForEach'), 'maxIntersectionsPositionDistinct': ('maxIntersectionsPosition', 'Distinct'), 'quantileExactLowDistinct': ('quantileExactLow', 'Distinct'), 'anyDistinct': ('any', 'Distinct'), 'kolmogorovSmirnovTestDistinct': ('kolmogorovSmirnovTest', 'Distinct'), 'uniqCombinedDistinct': ('uniqCombined', 'Distinct'), 'quantilesExactLowDistinct': ('quantilesExactLow', 'Distinct'), 'groupArraySampleDistinct': ('groupArraySample', 'Distinct'), 'last_valueDistinct': ('last_value', 'Distinct'), 'cramersVDistinct': ('cramersV', 'Distinct'), 'groupBitXorDistinct': ('groupBitXor', 'Distinct'), 'corrDistinct': ('corr', 'Distinct'), 'medianDistinct': ('median', 'Distinct'), 'quantilesTDigestDistinct': ('quantilesTDigest', 'Distinct'), 'quantilesDistinct': ('quantiles', 'Distinct'), 'sumDistinct': ('sum', 'Distinct'), 'quantileBFloat16Distinct': ('quantileBFloat16', 'Distinct'), 'stochasticLogisticRegressionDistinct': ('stochasticLogisticRegression', 'Distinct'), 'avgDistinct': ('avg', 'Distinct'), 'groupArrayInsertAtDistinct': ('groupArrayInsertAt', 'Distinct'), 'rankCorrDistinct': ('rankCorr', 'Distinct'), 'intervalLengthSumDistinct': ('intervalLengthSum', 'Distinct'), 'quantileBFloat16WeightedDistinct': ('quantileBFloat16Weighted', 'Distinct'), 'meanZTestDistinct': ('meanZTest', 'Distinct'), 'deltaSumDistinct': ('deltaSum', 'Distinct'), 'quantilesExactHighDistinct': ('quantilesExactHigh', 'Distinct'), 'exponentialMovingAverageDistinct': ('exponentialMovingAverage', 'Distinct'), 'avgWeightedDistinct': ('avgWeighted', 'Distinct'), 'quantileTDigestWeightedDistinct': ('quantileTDigestWeighted', 'Distinct'), 'simpleLinearRegressionDistinct': ('simpleLinearRegression', 'Distinct'), 'cramersVBiasCorrectedDistinct': ('cramersVBiasCorrected', 'Distinct'), 'groupBitmapXorDistinct': ('groupBitmapXor', 'Distinct'), 'quantilesGKDistinct': ('quantilesGK', 'Distinct'), 'quantilesExactWeightedDistinct': ('quantilesExactWeighted', 'Distinct'), 'stochasticLinearRegressionDistinct': ('stochasticLinearRegression', 'Distinct'), 'contingencyDistinct': ('contingency', 'Distinct'), 'sumMapDistinct': ('sumMap', 'Distinct'), 'topKDistinct': ('topK', 'Distinct'), 'sumWithOverflowDistinct': ('sumWithOverflow', 'Distinct'), 'stddevPopDistinct': ('stddevPop', 'Distinct'), 'quantileTimingWeightedDistinct': ('quantileTimingWeighted', 'Distinct'), 'maxIntersectionsDistinct': ('maxIntersections', 'Distinct'), 'anyHeavyDistinct': ('anyHeavy', 'Distinct'), 'boundingRatioDistinct': ('boundingRatio', 'Distinct'), 'quantileInterpolatedWeightedDistinct': ('quantileInterpolatedWeighted', 'Distinct'), 'argMinDistinct': ('argMin', 'Distinct'), 'quantilesExactDistinct': ('quantilesExact', 'Distinct'), 'studentTTestDistinct': ('studentTTest', 'Distinct'), 'groupArrayLastDistinct': ('groupArrayLast', 'Distinct'), 'quantileDeterministicDistinct': ('quantileDeterministic', 'Distinct'), 'quantilesBFloat16WeightedDistinct': ('quantilesBFloat16Weighted', 'Distinct'), 'quantilesTimingWeightedDistinct': ('quantilesTimingWeighted', 'Distinct'), 'uniqHLL12Distinct': ('uniqHLL12', 'Distinct'), 'quantileExactDistinct': ('quantileExact', 'Distinct'), 'quantileExactHighDistinct': ('quantileExactHigh', 'Distinct'), 'quantileDistinct': ('quantile', 'Distinct'), 'quantileGKDistinct': ('quantileGK', 'Distinct'), 'sparkBarDistinct': ('sparkBar', 'Distinct'), 'quantilesDeterministicDistinct': ('quantilesDeterministic', 'Distinct'), 'quantilesTimingDistinct': ('quantilesTiming', 'Distinct'), 'skewPopDistinct': ('skewPop', 'Distinct'), 'groupArrayDistinct': ('groupArray', 'Distinct'), 'groupArrayMovingSumDistinct': ('groupArrayMovingSum', 'Distinct'), 'groupBitAndDistinct': ('groupBitAnd', 'Distinct'), 'groupBitmapDistinct': ('groupBitmap', 'Distinct'), 'minDistinct': ('min', 'Distinct'), 'sumKahanDistinct': ('sumKahan', 'Distinct'), 'groupBitOrDistinct': ('groupBitOr', 'Distinct'), 'anyLastDistinct': ('anyLast', 'Distinct'), 'maxMapDistinct': ('maxMap', 'Distinct'), 'countDistinct': ('count', 'Distinct'), 'uniqCombined64Distinct': ('uniqCombined64', 'Distinct'), 'groupBitmapAndDistinct': ('groupBitmapAnd', 'Distinct'), 'quantilesInterpolatedWeightedDistinct': ('quantilesInterpolatedWeighted', 'Distinct'), 'quantileExactWeightedDistinct': ('quantileExactWeighted', 'Distinct'), 'stddevSampDistinct': ('stddevSamp', 'Distinct'), 'skewSampDistinct': ('skewSamp', 'Distinct'), 'varSampDistinct': ('varSamp', 'Distinct'), 'quantilesTDigestWeightedDistinct': ('quantilesTDigestWeighted', 'Distinct'), 'quantileTDigestDistinct': ('quantileTDigest', 'Distinct'), 'uniqExactDistinct': ('uniqExact', 'Distinct'), 'groupArrayMovingAvgDistinct': ('groupArrayMovingAvg', 'Distinct'), 'welchTTestDistinct': ('welchTTest', 'Distinct'), 'mannWhitneyUTestDistinct': ('mannWhitneyUTest', 'Distinct'), 'covarSampDistinct': ('covarSamp', 'Distinct'), 'quantilesBFloat16Distinct': ('quantilesBFloat16', 'Distinct'), 'maxDistinct': ('max', 'Distinct'), 'theilsUDistinct': ('theilsU', 'Distinct'), 'uniqThetaDistinct': ('uniqTheta', 'Distinct'), 'deltaSumTimestampDistinct': ('deltaSumTimestamp', 'Distinct'), 'largestTriangleThreeBucketsDistinct': ('largestTriangleThreeBuckets', 'Distinct'), 'argMaxDistinct': ('argMax', 'Distinct'), 'sumCountDistinct': ('sumCount', 'Distinct'), 'groupUniqArrayDistinct': ('groupUniqArray', 'Distinct'), 'minMapDistinct': ('minMap', 'Distinct'), 'kurtPopDistinct': ('kurtPop', 'Distinct'), 'varPopDistinct': ('varPop', 'Distinct'), 'first_valueDistinct': ('first_value', 'Distinct'), 'categoricalInformationValueDistinct': ('categoricalInformationValue', 'Distinct'), 'topKWeightedDistinct': ('topKWeighted', 'Distinct'), 'groupBitmapOrDistinct': ('groupBitmapOr', 'Distinct'), 'uniqDistinct': ('uniq', 'Distinct'), 'kurtSampDistinct': ('kurtSamp', 'Distinct'), 'entropyDistinct': ('entropy', 'Distinct'), 'covarPopDistinct': ('covarPop', 'Distinct'), 'quantileTimingDistinct': ('quantileTiming', 'Distinct'), 'maxIntersectionsPositionOrDefault': ('maxIntersectionsPosition', 'OrDefault'), 'quantileExactLowOrDefault': ('quantileExactLow', 'OrDefault'), 'anyOrDefault': ('any', 'OrDefault'), 'kolmogorovSmirnovTestOrDefault': ('kolmogorovSmirnovTest', 'OrDefault'), 'uniqCombinedOrDefault': ('uniqCombined', 'OrDefault'), 'quantilesExactLowOrDefault': ('quantilesExactLow', 'OrDefault'), 'groupArraySampleOrDefault': ('groupArraySample', 'OrDefault'), 'last_valueOrDefault': ('last_value', 'OrDefault'), 'cramersVOrDefault': ('cramersV', 'OrDefault'), 'groupBitXorOrDefault': ('groupBitXor', 'OrDefault'), 'corrOrDefault': ('corr', 'OrDefault'), 'medianOrDefault': ('median', 'OrDefault'), 'quantilesTDigestOrDefault': ('quantilesTDigest', 'OrDefault'), 'quantilesOrDefault': ('quantiles', 'OrDefault'), 'sumOrDefault': ('sum', 'OrDefault'), 'quantileBFloat16OrDefault': ('quantileBFloat16', 'OrDefault'), 'stochasticLogisticRegressionOrDefault': ('stochasticLogisticRegression', 'OrDefault'), 'avgOrDefault': ('avg', 'OrDefault'), 'groupArrayInsertAtOrDefault': ('groupArrayInsertAt', 'OrDefault'), 'rankCorrOrDefault': ('rankCorr', 'OrDefault'), 'intervalLengthSumOrDefault': ('intervalLengthSum', 'OrDefault'), 'quantileBFloat16WeightedOrDefault': ('quantileBFloat16Weighted', 'OrDefault'), 'meanZTestOrDefault': ('meanZTest', 'OrDefault'), 'deltaSumOrDefault': ('deltaSum', 'OrDefault'), 'quantilesExactHighOrDefault': ('quantilesExactHigh', 'OrDefault'), 'exponentialMovingAverageOrDefault': ('exponentialMovingAverage', 'OrDefault'), 'avgWeightedOrDefault': ('avgWeighted', 'OrDefault'), 'quantileTDigestWeightedOrDefault': ('quantileTDigestWeighted', 'OrDefault'), 'simpleLinearRegressionOrDefault': ('simpleLinearRegression', 'OrDefault'), 'cramersVBiasCorrectedOrDefault': ('cramersVBiasCorrected', 'OrDefault'), 'groupBitmapXorOrDefault': ('groupBitmapXor', 'OrDefault'), 'quantilesGKOrDefault': ('quantilesGK', 'OrDefault'), 'quantilesExactWeightedOrDefault': ('quantilesExactWeighted', 'OrDefault'), 'stochasticLinearRegressionOrDefault': ('stochasticLinearRegression', 'OrDefault'), 'contingencyOrDefault': ('contingency', 'OrDefault'), 'sumMapOrDefault': ('sumMap', 'OrDefault'), 'topKOrDefault': ('topK', 'OrDefault'), 'sumWithOverflowOrDefault': ('sumWithOverflow', 'OrDefault'), 'stddevPopOrDefault': ('stddevPop', 'OrDefault'), 'quantileTimingWeightedOrDefault': ('quantileTimingWeighted', 'OrDefault'), 'maxIntersectionsOrDefault': ('maxIntersections', 'OrDefault'), 'anyHeavyOrDefault': ('anyHeavy', 'OrDefault'), 'boundingRatioOrDefault': ('boundingRatio', 'OrDefault'), 'quantileInterpolatedWeightedOrDefault': ('quantileInterpolatedWeighted', 'OrDefault'), 'argMinOrDefault': ('argMin', 'OrDefault'), 'quantilesExactOrDefault': ('quantilesExact', 'OrDefault'), 'studentTTestOrDefault': ('studentTTest', 'OrDefault'), 'groupArrayLastOrDefault': ('groupArrayLast', 'OrDefault'), 'quantileDeterministicOrDefault': ('quantileDeterministic', 'OrDefault'), 'quantilesBFloat16WeightedOrDefault': ('quantilesBFloat16Weighted', 'OrDefault'), 'quantilesTimingWeightedOrDefault': ('quantilesTimingWeighted', 'OrDefault'), 'uniqHLL12OrDefault': ('uniqHLL12', 'OrDefault'), 'quantileExactOrDefault': ('quantileExact', 'OrDefault'), 'quantileExactHighOrDefault': ('quantileExactHigh', 'OrDefault'), 'quantileOrDefault': ('quantile', 'OrDefault'), 'quantileGKOrDefault': ('quantileGK', 'OrDefault'), 'sparkBarOrDefault': ('sparkBar', 'OrDefault'), 'quantilesDeterministicOrDefault': ('quantilesDeterministic', 'OrDefault'), 'quantilesTimingOrDefault': ('quantilesTiming', 'OrDefault'), 'skewPopOrDefault': ('skewPop', 'OrDefault'), 'groupArrayOrDefault': ('groupArray', 'OrDefault'), 'groupArrayMovingSumOrDefault': ('groupArrayMovingSum', 'OrDefault'), 'groupBitAndOrDefault': ('groupBitAnd', 'OrDefault'), 'groupBitmapOrDefault': ('groupBitmap', 'OrDefault'), 'minOrDefault': ('min', 'OrDefault'), 'sumKahanOrDefault': ('sumKahan', 'OrDefault'), 'groupBitOrOrDefault': ('groupBitOr', 'OrDefault'), 'anyLastOrDefault': ('anyLast', 'OrDefault'), 'maxMapOrDefault': ('maxMap', 'OrDefault'), 'countOrDefault': ('count', 'OrDefault'), 'uniqCombined64OrDefault': ('uniqCombined64', 'OrDefault'), 'groupBitmapAndOrDefault': ('groupBitmapAnd', 'OrDefault'), 'quantilesInterpolatedWeightedOrDefault': ('quantilesInterpolatedWeighted', 'OrDefault'), 'quantileExactWeightedOrDefault': ('quantileExactWeighted', 'OrDefault'), 'stddevSampOrDefault': ('stddevSamp', 'OrDefault'), 'skewSampOrDefault': ('skewSamp', 'OrDefault'), 'varSampOrDefault': ('varSamp', 'OrDefault'), 'quantilesTDigestWeightedOrDefault': ('quantilesTDigestWeighted', 'OrDefault'), 'quantileTDigestOrDefault': ('quantileTDigest', 'OrDefault'), 'uniqExactOrDefault': ('uniqExact', 'OrDefault'), 'groupArrayMovingAvgOrDefault': ('groupArrayMovingAvg', 'OrDefault'), 'welchTTestOrDefault': ('welchTTest', 'OrDefault'), 'mannWhitneyUTestOrDefault': ('mannWhitneyUTest', 'OrDefault'), 'covarSampOrDefault': ('covarSamp', 'OrDefault'), 'quantilesBFloat16OrDefault': ('quantilesBFloat16', 'OrDefault'), 'maxOrDefault': ('max', 'OrDefault'), 'theilsUOrDefault': ('theilsU', 'OrDefault'), 'uniqThetaOrDefault': ('uniqTheta', 'OrDefault'), 'deltaSumTimestampOrDefault': ('deltaSumTimestamp', 'OrDefault'), 'largestTriangleThreeBucketsOrDefault': ('largestTriangleThreeBuckets', 'OrDefault'), 'argMaxOrDefault': ('argMax', 'OrDefault'), 'sumCountOrDefault': ('sumCount', 'OrDefault'), 'groupUniqArrayOrDefault': ('groupUniqArray', 'OrDefault'), 'minMapOrDefault': ('minMap', 'OrDefault'), 'kurtPopOrDefault': ('kurtPop', 'OrDefault'), 'varPopOrDefault': ('varPop', 'OrDefault'), 'first_valueOrDefault': ('first_value', 'OrDefault'), 'categoricalInformationValueOrDefault': ('categoricalInformationValue', 'OrDefault'), 'topKWeightedOrDefault': ('topKWeighted', 'OrDefault'), 'groupBitmapOrOrDefault': ('groupBitmapOr', 'OrDefault'), 'uniqOrDefault': ('uniq', 'OrDefault'), 'kurtSampOrDefault': ('kurtSamp', 'OrDefault'), 'entropyOrDefault': ('entropy', 'OrDefault'), 'covarPopOrDefault': ('covarPop', 'OrDefault'), 'quantileTimingOrDefault': ('quantileTiming', 'OrDefault'), 'maxIntersectionsPositionOrNull': ('maxIntersectionsPosition', 'OrNull'), 'quantileExactLowOrNull': ('quantileExactLow', 'OrNull'), 'anyOrNull': ('any', 'OrNull'), 'kolmogorovSmirnovTestOrNull': ('kolmogorovSmirnovTest', 'OrNull'), 'uniqCombinedOrNull': ('uniqCombined', 'OrNull'), 'quantilesExactLowOrNull': ('quantilesExactLow', 'OrNull'), 'groupArraySampleOrNull': ('groupArraySample', 'OrNull'), 'last_valueOrNull': ('last_value', 'OrNull'), 'cramersVOrNull': ('cramersV', 'OrNull'), 'groupBitXorOrNull': ('groupBitXor', 'OrNull'), 'corrOrNull': ('corr', 'OrNull'), 'medianOrNull': ('median', 'OrNull'), 'quantilesTDigestOrNull': ('quantilesTDigest', 'OrNull'), 'quantilesOrNull': ('quantiles', 'OrNull'), 'sumOrNull': ('sum', 'OrNull'), 'quantileBFloat16OrNull': ('quantileBFloat16', 'OrNull'), 'stochasticLogisticRegressionOrNull': ('stochasticLogisticRegression', 'OrNull'), 'avgOrNull': ('avg', 'OrNull'), 'groupArrayInsertAtOrNull': ('groupArrayInsertAt', 'OrNull'), 'rankCorrOrNull': ('rankCorr', 'OrNull'), 'intervalLengthSumOrNull': ('intervalLengthSum', 'OrNull'), 'quantileBFloat16WeightedOrNull': ('quantileBFloat16Weighted', 'OrNull'), 'meanZTestOrNull': ('meanZTest', 'OrNull'), 'deltaSumOrNull': ('deltaSum', 'OrNull'), 'quantilesExactHighOrNull': ('quantilesExactHigh', 'OrNull'), 'exponentialMovingAverageOrNull': ('exponentialMovingAverage', 'OrNull'), 'avgWeightedOrNull': ('avgWeighted', 'OrNull'), 'quantileTDigestWeightedOrNull': ('quantileTDigestWeighted', 'OrNull'), 'simpleLinearRegressionOrNull': ('simpleLinearRegression', 'OrNull'), 'cramersVBiasCorrectedOrNull': ('cramersVBiasCorrected', 'OrNull'), 'groupBitmapXorOrNull': ('groupBitmapXor', 'OrNull'), 'quantilesGKOrNull': ('quantilesGK', 'OrNull'), 'quantilesExactWeightedOrNull': ('quantilesExactWeighted', 'OrNull'), 'stochasticLinearRegressionOrNull': ('stochasticLinearRegression', 'OrNull'), 'contingencyOrNull': ('contingency', 'OrNull'), 'sumMapOrNull': ('sumMap', 'OrNull'), 'topKOrNull': ('topK', 'OrNull'), 'sumWithOverflowOrNull': ('sumWithOverflow', 'OrNull'), 'stddevPopOrNull': ('stddevPop', 'OrNull'), 'quantileTimingWeightedOrNull': ('quantileTimingWeighted', 'OrNull'), 'maxIntersectionsOrNull': ('maxIntersections', 'OrNull'), 'anyHeavyOrNull': ('anyHeavy', 'OrNull'), 'boundingRatioOrNull': ('boundingRatio', 'OrNull'), 'quantileInterpolatedWeightedOrNull': ('quantileInterpolatedWeighted', 'OrNull'), 'argMinOrNull': ('argMin', 'OrNull'), 'quantilesExactOrNull': ('quantilesExact', 'OrNull'), 'studentTTestOrNull': ('studentTTest', 'OrNull'), 'groupArrayLastOrNull': ('groupArrayLast', 'OrNull'), 'quantileDeterministicOrNull': ('quantileDeterministic', 'OrNull'), 'quantilesBFloat16WeightedOrNull': ('quantilesBFloat16Weighted', 'OrNull'), 'quantilesTimingWeightedOrNull': ('quantilesTimingWeighted', 'OrNull'), 'uniqHLL12OrNull': ('uniqHLL12', 'OrNull'), 'quantileExactOrNull': ('quantileExact', 'OrNull'), 'quantileExactHighOrNull': ('quantileExactHigh', 'OrNull'), 'quantileOrNull': ('quantile', 'OrNull'), 'quantileGKOrNull': ('quantileGK', 'OrNull'), 'sparkBarOrNull': ('sparkBar', 'OrNull'), 'quantilesDeterministicOrNull': ('quantilesDeterministic', 'OrNull'), 'quantilesTimingOrNull': ('quantilesTiming', 'OrNull'), 'skewPopOrNull': ('skewPop', 'OrNull'), 'groupArrayOrNull': ('groupArray', 'OrNull'), 'groupArrayMovingSumOrNull': ('groupArrayMovingSum', 'OrNull'), 'groupBitAndOrNull': ('groupBitAnd', 'OrNull'), 'groupBitmapOrNull': ('groupBitmap', 'OrNull'), 'minOrNull': ('min', 'OrNull'), 'sumKahanOrNull': ('sumKahan', 'OrNull'), 'groupBitOrOrNull': ('groupBitOr', 'OrNull'), 'anyLastOrNull': ('anyLast', 'OrNull'), 'maxMapOrNull': ('maxMap', 'OrNull'), 'countOrNull': ('count', 'OrNull'), 'uniqCombined64OrNull': ('uniqCombined64', 'OrNull'), 'groupBitmapAndOrNull': ('groupBitmapAnd', 'OrNull'), 'quantilesInterpolatedWeightedOrNull': ('quantilesInterpolatedWeighted', 'OrNull'), 'quantileExactWeightedOrNull': ('quantileExactWeighted', 'OrNull'), 'stddevSampOrNull': ('stddevSamp', 'OrNull'), 'skewSampOrNull': ('skewSamp', 'OrNull'), 'varSampOrNull': ('varSamp', 'OrNull'), 'quantilesTDigestWeightedOrNull': ('quantilesTDigestWeighted', 'OrNull'), 'quantileTDigestOrNull': ('quantileTDigest', 'OrNull'), 'uniqExactOrNull': ('uniqExact', 'OrNull'), 'groupArrayMovingAvgOrNull': ('groupArrayMovingAvg', 'OrNull'), 'welchTTestOrNull': ('welchTTest', 'OrNull'), 'mannWhitneyUTestOrNull': ('mannWhitneyUTest', 'OrNull'), 'covarSampOrNull': ('covarSamp', 'OrNull'), 'quantilesBFloat16OrNull': ('quantilesBFloat16', 'OrNull'), 'maxOrNull': ('max', 'OrNull'), 'theilsUOrNull': ('theilsU', 'OrNull'), 'uniqThetaOrNull': ('uniqTheta', 'OrNull'), 'deltaSumTimestampOrNull': ('deltaSumTimestamp', 'OrNull'), 'largestTriangleThreeBucketsOrNull': ('largestTriangleThreeBuckets', 'OrNull'), 'argMaxOrNull': ('argMax', 'OrNull'), 'sumCountOrNull': ('sumCount', 'OrNull'), 'groupUniqArrayOrNull': ('groupUniqArray', 'OrNull'), 'minMapOrNull': ('minMap', 'OrNull'), 'kurtPopOrNull': ('kurtPop', 'OrNull'), 'varPopOrNull': ('varPop', 'OrNull'), 'first_valueOrNull': ('first_value', 'OrNull'), 'categoricalInformationValueOrNull': ('categoricalInformationValue', 'OrNull'), 'topKWeightedOrNull': ('topKWeighted', 'OrNull'), 'groupBitmapOrOrNull': ('groupBitmapOr', 'OrNull'), 'uniqOrNull': ('uniq', 'OrNull'), 'kurtSampOrNull': ('kurtSamp', 'OrNull'), 'entropyOrNull': ('entropy', 'OrNull'), 'covarPopOrNull': ('covarPop', 'OrNull'), 'quantileTimingOrNull': ('quantileTiming', 'OrNull'), 'maxIntersectionsPositionResample': ('maxIntersectionsPosition', 'Resample'), 'quantileExactLowResample': ('quantileExactLow', 'Resample'), 'anyResample': ('any', 'Resample'), 'kolmogorovSmirnovTestResample': ('kolmogorovSmirnovTest', 'Resample'), 'uniqCombinedResample': ('uniqCombined', 'Resample'), 'quantilesExactLowResample': ('quantilesExactLow', 'Resample'), 'groupArraySampleResample': ('groupArraySample', 'Resample'), 'last_valueResample': ('last_value', 'Resample'), 'cramersVResample': ('cramersV', 'Resample'), 'groupBitXorResample': ('groupBitXor', 'Resample'), 'corrResample': ('corr', 'Resample'), 'medianResample': ('median', 'Resample'), 'quantilesTDigestResample': ('quantilesTDigest', 'Resample'), 'quantilesResample': ('quantiles', 'Resample'), 'sumResample': ('sum', 'Resample'), 'quantileBFloat16Resample': ('quantileBFloat16', 'Resample'), 'stochasticLogisticRegressionResample': ('stochasticLogisticRegression', 'Resample'), 'avgResample': ('avg', 'Resample'), 'groupArrayInsertAtResample': ('groupArrayInsertAt', 'Resample'), 'rankCorrResample': ('rankCorr', 'Resample'), 'intervalLengthSumResample': ('intervalLengthSum', 'Resample'), 'quantileBFloat16WeightedResample': ('quantileBFloat16Weighted', 'Resample'), 'meanZTestResample': ('meanZTest', 'Resample'), 'deltaSumResample': ('deltaSum', 'Resample'), 'quantilesExactHighResample': ('quantilesExactHigh', 'Resample'), 'exponentialMovingAverageResample': ('exponentialMovingAverage', 'Resample'), 'avgWeightedResample': ('avgWeighted', 'Resample'), 'quantileTDigestWeightedResample': ('quantileTDigestWeighted', 'Resample'), 'simpleLinearRegressionResample': ('simpleLinearRegression', 'Resample'), 'cramersVBiasCorrectedResample': ('cramersVBiasCorrected', 'Resample'), 'groupBitmapXorResample': ('groupBitmapXor', 'Resample'), 'quantilesGKResample': ('quantilesGK', 'Resample'), 'quantilesExactWeightedResample': ('quantilesExactWeighted', 'Resample'), 'stochasticLinearRegressionResample': ('stochasticLinearRegression', 'Resample'), 'contingencyResample': ('contingency', 'Resample'), 'sumMapResample': ('sumMap', 'Resample'), 'topKResample': ('topK', 'Resample'), 'sumWithOverflowResample': ('sumWithOverflow', 'Resample'), 'stddevPopResample': ('stddevPop', 'Resample'), 'quantileTimingWeightedResample': ('quantileTimingWeighted', 'Resample'), 'maxIntersectionsResample': ('maxIntersections', 'Resample'), 'anyHeavyResample': ('anyHeavy', 'Resample'), 'boundingRatioResample': ('boundingRatio', 'Resample'), 'quantileInterpolatedWeightedResample': ('quantileInterpolatedWeighted', 'Resample'), 'argMinResample': ('argMin', 'Resample'), 'quantilesExactResample': ('quantilesExact', 'Resample'), 'studentTTestResample': ('studentTTest', 'Resample'), 'groupArrayLastResample': ('groupArrayLast', 'Resample'), 'quantileDeterministicResample': ('quantileDeterministic', 'Resample'), 'quantilesBFloat16WeightedResample': ('quantilesBFloat16Weighted', 'Resample'), 'quantilesTimingWeightedResample': ('quantilesTimingWeighted', 'Resample'), 'uniqHLL12Resample': ('uniqHLL12', 'Resample'), 'quantileExactResample': ('quantileExact', 'Resample'), 'quantileExactHighResample': ('quantileExactHigh', 'Resample'), 'quantileResample': ('quantile', 'Resample'), 'quantileGKResample': ('quantileGK', 'Resample'), 'sparkBarResample': ('sparkBar', 'Resample'), 'quantilesDeterministicResample': ('quantilesDeterministic', 'Resample'), 'quantilesTimingResample': ('quantilesTiming', 'Resample'), 'skewPopResample': ('skewPop', 'Resample'), 'groupArrayResample': ('groupArray', 'Resample'), 'groupArrayMovingSumResample': ('groupArrayMovingSum', 'Resample'), 'groupBitAndResample': ('groupBitAnd', 'Resample'), 'groupBitmapResample': ('groupBitmap', 'Resample'), 'minResample': ('min', 'Resample'), 'sumKahanResample': ('sumKahan', 'Resample'), 'groupBitOrResample': ('groupBitOr', 'Resample'), 'anyLastResample': ('anyLast', 'Resample'), 'maxMapResample': ('maxMap', 'Resample'), 'countResample': ('count', 'Resample'), 'uniqCombined64Resample': ('uniqCombined64', 'Resample'), 'groupBitmapAndResample': ('groupBitmapAnd', 'Resample'), 'quantilesInterpolatedWeightedResample': ('quantilesInterpolatedWeighted', 'Resample'), 'quantileExactWeightedResample': ('quantileExactWeighted', 'Resample'), 'stddevSampResample': ('stddevSamp', 'Resample'), 'skewSampResample': ('skewSamp', 'Resample'), 'varSampResample': ('varSamp', 'Resample'), 'quantilesTDigestWeightedResample': ('quantilesTDigestWeighted', 'Resample'), 'quantileTDigestResample': ('quantileTDigest', 'Resample'), 'uniqExactResample': ('uniqExact', 'Resample'), 'groupArrayMovingAvgResample': ('groupArrayMovingAvg', 'Resample'), 'welchTTestResample': ('welchTTest', 'Resample'), 'mannWhitneyUTestResample': ('mannWhitneyUTest', 'Resample'), 'covarSampResample': ('covarSamp', 'Resample'), 'quantilesBFloat16Resample': ('quantilesBFloat16', 'Resample'), 'maxResample': ('max', 'Resample'), 'theilsUResample': ('theilsU', 'Resample'), 'uniqThetaResample': ('uniqTheta', 'Resample'), 'deltaSumTimestampResample': ('deltaSumTimestamp', 'Resample'), 'largestTriangleThreeBucketsResample': ('largestTriangleThreeBuckets', 'Resample'), 'argMaxResample': ('argMax', 'Resample'), 'sumCountResample': ('sumCount', 'Resample'), 'groupUniqArrayResample': ('groupUniqArray', 'Resample'), 'minMapResample': ('minMap', 'Resample'), 'kurtPopResample': ('kurtPop', 'Resample'), 'varPopResample': ('varPop', 'Resample'), 'first_valueResample': ('first_value', 'Resample'), 'categoricalInformationValueResample': ('categoricalInformationValue', 'Resample'), 'topKWeightedResample': ('topKWeighted', 'Resample'), 'groupBitmapOrResample': ('groupBitmapOr', 'Resample'), 'uniqResample': ('uniq', 'Resample'), 'kurtSampResample': ('kurtSamp', 'Resample'), 'entropyResample': ('entropy', 'Resample'), 'covarPopResample': ('covarPop', 'Resample'), 'quantileTimingResample': ('quantileTiming', 'Resample'), 'maxIntersectionsPositionArgMin': ('maxIntersectionsPosition', 'ArgMin'), 'quantileExactLowArgMin': ('quantileExactLow', 'ArgMin'), 'anyArgMin': ('any', 'ArgMin'), 'kolmogorovSmirnovTestArgMin': ('kolmogorovSmirnovTest', 'ArgMin'), 'uniqCombinedArgMin': ('uniqCombined', 'ArgMin'), 'quantilesExactLowArgMin': ('quantilesExactLow', 'ArgMin'), 'groupArraySampleArgMin': ('groupArraySample', 'ArgMin'), 'last_valueArgMin': ('last_value', 'ArgMin'), 'cramersVArgMin': ('cramersV', 'ArgMin'), 'groupBitXorArgMin': ('groupBitXor', 'ArgMin'), 'corrArgMin': ('corr', 'ArgMin'), 'medianArgMin': ('median', 'ArgMin'), 'quantilesTDigestArgMin': ('quantilesTDigest', 'ArgMin'), 'quantilesArgMin': ('quantiles', 'ArgMin'), 'sumArgMin': ('sum', 'ArgMin'), 'quantileBFloat16ArgMin': ('quantileBFloat16', 'ArgMin'), 'stochasticLogisticRegressionArgMin': ('stochasticLogisticRegression', 'ArgMin'), 'avgArgMin': ('avg', 'ArgMin'), 'groupArrayInsertAtArgMin': ('groupArrayInsertAt', 'ArgMin'), 'rankCorrArgMin': ('rankCorr', 'ArgMin'), 'intervalLengthSumArgMin': ('intervalLengthSum', 'ArgMin'), 'quantileBFloat16WeightedArgMin': ('quantileBFloat16Weighted', 'ArgMin'), 'meanZTestArgMin': ('meanZTest', 'ArgMin'), 'deltaSumArgMin': ('deltaSum', 'ArgMin'), 'quantilesExactHighArgMin': ('quantilesExactHigh', 'ArgMin'), 'exponentialMovingAverageArgMin': ('exponentialMovingAverage', 'ArgMin'), 'avgWeightedArgMin': ('avgWeighted', 'ArgMin'), 'quantileTDigestWeightedArgMin': ('quantileTDigestWeighted', 'ArgMin'), 'simpleLinearRegressionArgMin': ('simpleLinearRegression', 'ArgMin'), 'cramersVBiasCorrectedArgMin': ('cramersVBiasCorrected', 'ArgMin'), 'groupBitmapXorArgMin': ('groupBitmapXor', 'ArgMin'), 'quantilesGKArgMin': ('quantilesGK', 'ArgMin'), 'quantilesExactWeightedArgMin': ('quantilesExactWeighted', 'ArgMin'), 'stochasticLinearRegressionArgMin': ('stochasticLinearRegression', 'ArgMin'), 'contingencyArgMin': ('contingency', 'ArgMin'), 'sumMapArgMin': ('sumMap', 'ArgMin'), 'topKArgMin': ('topK', 'ArgMin'), 'sumWithOverflowArgMin': ('sumWithOverflow', 'ArgMin'), 'stddevPopArgMin': ('stddevPop', 'ArgMin'), 'quantileTimingWeightedArgMin': ('quantileTimingWeighted', 'ArgMin'), 'maxIntersectionsArgMin': ('maxIntersections', 'ArgMin'), 'anyHeavyArgMin': ('anyHeavy', 'ArgMin'), 'boundingRatioArgMin': ('boundingRatio', 'ArgMin'), 'quantileInterpolatedWeightedArgMin': ('quantileInterpolatedWeighted', 'ArgMin'), 'argMinArgMin': ('argMin', 'ArgMin'), 'quantilesExactArgMin': ('quantilesExact', 'ArgMin'), 'studentTTestArgMin': ('studentTTest', 'ArgMin'), 'groupArrayLastArgMin': ('groupArrayLast', 'ArgMin'), 'quantileDeterministicArgMin': ('quantileDeterministic', 'ArgMin'), 'quantilesBFloat16WeightedArgMin': ('quantilesBFloat16Weighted', 'ArgMin'), 'quantilesTimingWeightedArgMin': ('quantilesTimingWeighted', 'ArgMin'), 'uniqHLL12ArgMin': ('uniqHLL12', 'ArgMin'), 'quantileExactArgMin': ('quantileExact', 'ArgMin'), 'quantileExactHighArgMin': ('quantileExactHigh', 'ArgMin'), 'quantileArgMin': ('quantile', 'ArgMin'), 'quantileGKArgMin': ('quantileGK', 'ArgMin'), 'sparkBarArgMin': ('sparkBar', 'ArgMin'), 'quantilesDeterministicArgMin': ('quantilesDeterministic', 'ArgMin'), 'quantilesTimingArgMin': ('quantilesTiming', 'ArgMin'), 'skewPopArgMin': ('skewPop', 'ArgMin'), 'groupArrayArgMin': ('groupArray', 'ArgMin'), 'groupArrayMovingSumArgMin': ('groupArrayMovingSum', 'ArgMin'), 'groupBitAndArgMin': ('groupBitAnd', 'ArgMin'), 'groupBitmapArgMin': ('groupBitmap', 'ArgMin'), 'minArgMin': ('min', 'ArgMin'), 'sumKahanArgMin': ('sumKahan', 'ArgMin'), 'groupBitOrArgMin': ('groupBitOr', 'ArgMin'), 'anyLastArgMin': ('anyLast', 'ArgMin'), 'maxMapArgMin': ('maxMap', 'ArgMin'), 'countArgMin': ('count', 'ArgMin'), 'uniqCombined64ArgMin': ('uniqCombined64', 'ArgMin'), 'groupBitmapAndArgMin': ('groupBitmapAnd', 'ArgMin'), 'quantilesInterpolatedWeightedArgMin': ('quantilesInterpolatedWeighted', 'ArgMin'), 'quantileExactWeightedArgMin': ('quantileExactWeighted', 'ArgMin'), 'stddevSampArgMin': ('stddevSamp', 'ArgMin'), 'skewSampArgMin': ('skewSamp', 'ArgMin'), 'varSampArgMin': ('varSamp', 'ArgMin'), 'quantilesTDigestWeightedArgMin': ('quantilesTDigestWeighted', 'ArgMin'), 'quantileTDigestArgMin': ('quantileTDigest', 'ArgMin'), 'uniqExactArgMin': ('uniqExact', 'ArgMin'), 'groupArrayMovingAvgArgMin': ('groupArrayMovingAvg', 'ArgMin'), 'welchTTestArgMin': ('welchTTest', 'ArgMin'), 'mannWhitneyUTestArgMin': ('mannWhitneyUTest', 'ArgMin'), 'covarSampArgMin': ('covarSamp', 'ArgMin'), 'quantilesBFloat16ArgMin': ('quantilesBFloat16', 'ArgMin'), 'maxArgMin': ('max', 'ArgMin'), 'theilsUArgMin': ('theilsU', 'ArgMin'), 'uniqThetaArgMin': ('uniqTheta', 'ArgMin'), 'deltaSumTimestampArgMin': ('deltaSumTimestamp', 'ArgMin'), 'largestTriangleThreeBucketsArgMin': ('largestTriangleThreeBuckets', 'ArgMin'), 'argMaxArgMin': ('argMax', 'ArgMin'), 'sumCountArgMin': ('sumCount', 'ArgMin'), 'groupUniqArrayArgMin': ('groupUniqArray', 'ArgMin'), 'minMapArgMin': ('minMap', 'ArgMin'), 'kurtPopArgMin': ('kurtPop', 'ArgMin'), 'varPopArgMin': ('varPop', 'ArgMin'), 'first_valueArgMin': ('first_value', 'ArgMin'), 'categoricalInformationValueArgMin': ('categoricalInformationValue', 'ArgMin'), 'topKWeightedArgMin': ('topKWeighted', 'ArgMin'), 'groupBitmapOrArgMin': ('groupBitmapOr', 'ArgMin'), 'uniqArgMin': ('uniq', 'ArgMin'), 'kurtSampArgMin': ('kurtSamp', 'ArgMin'), 'entropyArgMin': ('entropy', 'ArgMin'), 'covarPopArgMin': ('covarPop', 'ArgMin'), 'quantileTimingArgMin': ('quantileTiming', 'ArgMin'), 'maxIntersectionsPositionArgMax': ('maxIntersectionsPosition', 'ArgMax'), 'quantileExactLowArgMax': ('quantileExactLow', 'ArgMax'), 'anyArgMax': ('any', 'ArgMax'), 'kolmogorovSmirnovTestArgMax': ('kolmogorovSmirnovTest', 'ArgMax'), 'uniqCombinedArgMax': ('uniqCombined', 'ArgMax'), 'quantilesExactLowArgMax': ('quantilesExactLow', 'ArgMax'), 'groupArraySampleArgMax': ('groupArraySample', 'ArgMax'), 'last_valueArgMax': ('last_value', 'ArgMax'), 'cramersVArgMax': ('cramersV', 'ArgMax'), 'groupBitXorArgMax': ('groupBitXor', 'ArgMax'), 'corrArgMax': ('corr', 'ArgMax'), 'medianArgMax': ('median', 'ArgMax'), 'quantilesTDigestArgMax': ('quantilesTDigest', 'ArgMax'), 'quantilesArgMax': ('quantiles', 'ArgMax'), 'sumArgMax': ('sum', 'ArgMax'), 'quantileBFloat16ArgMax': ('quantileBFloat16', 'ArgMax'), 'stochasticLogisticRegressionArgMax': ('stochasticLogisticRegression', 'ArgMax'), 'avgArgMax': ('avg', 'ArgMax'), 'groupArrayInsertAtArgMax': ('groupArrayInsertAt', 'ArgMax'), 'rankCorrArgMax': ('rankCorr', 'ArgMax'), 'intervalLengthSumArgMax': ('intervalLengthSum', 'ArgMax'), 'quantileBFloat16WeightedArgMax': ('quantileBFloat16Weighted', 'ArgMax'), 'meanZTestArgMax': ('meanZTest', 'ArgMax'), 'deltaSumArgMax': ('deltaSum', 'ArgMax'), 'quantilesExactHighArgMax': ('quantilesExactHigh', 'ArgMax'), 'exponentialMovingAverageArgMax': ('exponentialMovingAverage', 'ArgMax'), 'avgWeightedArgMax': ('avgWeighted', 'ArgMax'), 'quantileTDigestWeightedArgMax': ('quantileTDigestWeighted', 'ArgMax'), 'simpleLinearRegressionArgMax': ('simpleLinearRegression', 'ArgMax'), 'cramersVBiasCorrectedArgMax': ('cramersVBiasCorrected', 'ArgMax'), 'groupBitmapXorArgMax': ('groupBitmapXor', 'ArgMax'), 'quantilesGKArgMax': ('quantilesGK', 'ArgMax'), 'quantilesExactWeightedArgMax': ('quantilesExactWeighted', 'ArgMax'), 'stochasticLinearRegressionArgMax': ('stochasticLinearRegression', 'ArgMax'), 'contingencyArgMax': ('contingency', 'ArgMax'), 'sumMapArgMax': ('sumMap', 'ArgMax'), 'topKArgMax': ('topK', 'ArgMax'), 'sumWithOverflowArgMax': ('sumWithOverflow', 'ArgMax'), 'stddevPopArgMax': ('stddevPop', 'ArgMax'), 'quantileTimingWeightedArgMax': ('quantileTimingWeighted', 'ArgMax'), 'maxIntersectionsArgMax': ('maxIntersections', 'ArgMax'), 'anyHeavyArgMax': ('anyHeavy', 'ArgMax'), 'boundingRatioArgMax': ('boundingRatio', 'ArgMax'), 'quantileInterpolatedWeightedArgMax': ('quantileInterpolatedWeighted', 'ArgMax'), 'argMinArgMax': ('argMin', 'ArgMax'), 'quantilesExactArgMax': ('quantilesExact', 'ArgMax'), 'studentTTestArgMax': ('studentTTest', 'ArgMax'), 'groupArrayLastArgMax': ('groupArrayLast', 'ArgMax'), 'quantileDeterministicArgMax': ('quantileDeterministic', 'ArgMax'), 'quantilesBFloat16WeightedArgMax': ('quantilesBFloat16Weighted', 'ArgMax'), 'quantilesTimingWeightedArgMax': ('quantilesTimingWeighted', 'ArgMax'), 'uniqHLL12ArgMax': ('uniqHLL12', 'ArgMax'), 'quantileExactArgMax': ('quantileExact', 'ArgMax'), 'quantileExactHighArgMax': ('quantileExactHigh', 'ArgMax'), 'quantileArgMax': ('quantile', 'ArgMax'), 'quantileGKArgMax': ('quantileGK', 'ArgMax'), 'sparkBarArgMax': ('sparkBar', 'ArgMax'), 'quantilesDeterministicArgMax': ('quantilesDeterministic', 'ArgMax'), 'quantilesTimingArgMax': ('quantilesTiming', 'ArgMax'), 'skewPopArgMax': ('skewPop', 'ArgMax'), 'groupArrayArgMax': ('groupArray', 'ArgMax'), 'groupArrayMovingSumArgMax': ('groupArrayMovingSum', 'ArgMax'), 'groupBitAndArgMax': ('groupBitAnd', 'ArgMax'), 'groupBitmapArgMax': ('groupBitmap', 'ArgMax'), 'minArgMax': ('min', 'ArgMax'), 'sumKahanArgMax': ('sumKahan', 'ArgMax'), 'groupBitOrArgMax': ('groupBitOr', 'ArgMax'), 'anyLastArgMax': ('anyLast', 'ArgMax'), 'maxMapArgMax': ('maxMap', 'ArgMax'), 'countArgMax': ('count', 'ArgMax'), 'uniqCombined64ArgMax': ('uniqCombined64', 'ArgMax'), 'groupBitmapAndArgMax': ('groupBitmapAnd', 'ArgMax'), 'quantilesInterpolatedWeightedArgMax': ('quantilesInterpolatedWeighted', 'ArgMax'), 'quantileExactWeightedArgMax': ('quantileExactWeighted', 'ArgMax'), 'stddevSampArgMax': ('stddevSamp', 'ArgMax'), 'skewSampArgMax': ('skewSamp', 'ArgMax'), 'varSampArgMax': ('varSamp', 'ArgMax'), 'quantilesTDigestWeightedArgMax': ('quantilesTDigestWeighted', 'ArgMax'), 'quantileTDigestArgMax': ('quantileTDigest', 'ArgMax'), 'uniqExactArgMax': ('uniqExact', 'ArgMax'), 'groupArrayMovingAvgArgMax': ('groupArrayMovingAvg', 'ArgMax'), 'welchTTestArgMax': ('welchTTest', 'ArgMax'), 'mannWhitneyUTestArgMax': ('mannWhitneyUTest', 'ArgMax'), 'covarSampArgMax': ('covarSamp', 'ArgMax'), 'quantilesBFloat16ArgMax': ('quantilesBFloat16', 'ArgMax'), 'maxArgMax': ('max', 'ArgMax'), 'theilsUArgMax': ('theilsU', 'ArgMax'), 'uniqThetaArgMax': ('uniqTheta', 'ArgMax'), 'deltaSumTimestampArgMax': ('deltaSumTimestamp', 'ArgMax'), 'largestTriangleThreeBucketsArgMax': ('largestTriangleThreeBuckets', 'ArgMax'), 'argMaxArgMax': ('argMax', 'ArgMax'), 'sumCountArgMax': ('sumCount', 'ArgMax'), 'groupUniqArrayArgMax': ('groupUniqArray', 'ArgMax'), 'minMapArgMax': ('minMap', 'ArgMax'), 'kurtPopArgMax': ('kurtPop', 'ArgMax'), 'varPopArgMax': ('varPop', 'ArgMax'), 'first_valueArgMax': ('first_value', 'ArgMax'), 'categoricalInformationValueArgMax': ('categoricalInformationValue', 'ArgMax'), 'topKWeightedArgMax': ('topKWeighted', 'ArgMax'), 'groupBitmapOrArgMax': ('groupBitmapOr', 'ArgMax'), 'uniqArgMax': ('uniq', 'ArgMax'), 'kurtSampArgMax': ('kurtSamp', 'ArgMax'), 'entropyArgMax': ('entropy', 'ArgMax'), 'covarPopArgMax': ('covarPop', 'ArgMax'), 'quantileTimingArgMax': ('quantileTiming', 'ArgMax'), 'maxIntersectionsPosition': ('maxIntersectionsPosition', ''), 'quantileExactLow': ('quantileExactLow', ''), 'any': ('any', ''), 'kolmogorovSmirnovTest': ('kolmogorovSmirnovTest', ''), 'uniqCombined': ('uniqCombined', ''), 'quantilesExactLow': ('quantilesExactLow', ''), 'groupArraySample': ('groupArraySample', ''), 'last_value': ('last_value', ''), 'cramersV': ('cramersV', ''), 'groupBitXor': ('groupBitXor', ''), 'corr': ('corr', ''), 'median': ('median', ''), 'quantilesTDigest': ('quantilesTDigest', ''), 'quantiles': ('quantiles', ''), 'sum': ('sum', ''), 'quantileBFloat16': ('quantileBFloat16', ''), 'stochasticLogisticRegression': ('stochasticLogisticRegression', ''), 'avg': ('avg', ''), 'groupArrayInsertAt': ('groupArrayInsertAt', ''), 'rankCorr': ('rankCorr', ''), 'intervalLengthSum': ('intervalLengthSum', ''), 'quantileBFloat16Weighted': ('quantileBFloat16Weighted', ''), 'meanZTest': ('meanZTest', ''), 'deltaSum': ('deltaSum', ''), 'quantilesExactHigh': ('quantilesExactHigh', ''), 'exponentialMovingAverage': ('exponentialMovingAverage', ''), 'avgWeighted': ('avgWeighted', ''), 'quantileTDigestWeighted': ('quantileTDigestWeighted', ''), 'simpleLinearRegression': ('simpleLinearRegression', ''), 'cramersVBiasCorrected': ('cramersVBiasCorrected', ''), 'groupBitmapXor': ('groupBitmapXor', ''), 'quantilesGK': ('quantilesGK', ''), 'quantilesExactWeighted': ('quantilesExactWeighted', ''), 'stochasticLinearRegression': ('stochasticLinearRegression', ''), 'contingency': ('contingency', ''), 'topK': ('topK', ''), 'sumWithOverflow': ('sumWithOverflow', ''), 'stddevPop': ('stddevPop', ''), 'quantileTimingWeighted': ('quantileTimingWeighted', ''), 'maxIntersections': ('maxIntersections', ''), 'anyHeavy': ('anyHeavy', ''), 'boundingRatio': ('boundingRatio', ''), 'quantileInterpolatedWeighted': ('quantileInterpolatedWeighted', ''), 'argMin': ('argMin', ''), 'quantilesExact': ('quantilesExact', ''), 'studentTTest': ('studentTTest', ''), 'groupArrayLast': ('groupArrayLast', ''), 'quantileDeterministic': ('quantileDeterministic', ''), 'quantilesBFloat16Weighted': ('quantilesBFloat16Weighted', ''), 'quantilesTimingWeighted': ('quantilesTimingWeighted', ''), 'uniqHLL12': ('uniqHLL12', ''), 'quantileExact': ('quantileExact', ''), 'quantileExactHigh': ('quantileExactHigh', ''), 'quantile': ('quantile', ''), 'quantileGK': ('quantileGK', ''), 'sparkBar': ('sparkBar', ''), 'quantilesDeterministic': ('quantilesDeterministic', ''), 'quantilesTiming': ('quantilesTiming', ''), 'skewPop': ('skewPop', ''), 'groupArray': ('groupArray', ''), 'groupArrayMovingSum': ('groupArrayMovingSum', ''), 'groupBitAnd': ('groupBitAnd', ''), 'groupBitmap': ('groupBitmap', ''), 'min': ('min', ''), 'sumKahan': ('sumKahan', ''), 'groupBitOr': ('groupBitOr', ''), 'anyLast': ('anyLast', ''), 'count': ('count', ''), 'uniqCombined64': ('uniqCombined64', ''), 'groupBitmapAnd': ('groupBitmapAnd', ''), 'quantilesInterpolatedWeighted': ('quantilesInterpolatedWeighted', ''), 'quantileExactWeighted': ('quantileExactWeighted', ''), 'stddevSamp': ('stddevSamp', ''), 'skewSamp': ('skewSamp', ''), 'varSamp': ('varSamp', ''), 'quantilesTDigestWeighted': ('quantilesTDigestWeighted', ''), 'quantileTDigest': ('quantileTDigest', ''), 'uniqExact': ('uniqExact', ''), 'groupArrayMovingAvg': ('groupArrayMovingAvg', ''), 'welchTTest': ('welchTTest', ''), 'mannWhitneyUTest': ('mannWhitneyUTest', ''), 'covarSamp': ('covarSamp', ''), 'quantilesBFloat16': ('quantilesBFloat16', ''), 'max': ('max', ''), 'theilsU': ('theilsU', ''), 'uniqTheta': ('uniqTheta', ''), 'deltaSumTimestamp': ('deltaSumTimestamp', ''), 'largestTriangleThreeBuckets': ('largestTriangleThreeBuckets', ''), 'argMax': ('argMax', ''), 'sumCount': ('sumCount', ''), 'groupUniqArray': ('groupUniqArray', ''), 'kurtPop': ('kurtPop', ''), 'varPop': ('varPop', ''), 'first_value': ('first_value', ''), 'categoricalInformationValue': ('categoricalInformationValue', ''), 'topKWeighted': ('topKWeighted', ''), 'groupBitmapOr': ('groupBitmapOr', ''), 'uniq': ('uniq', ''), 'kurtSamp': ('kurtSamp', ''), 'entropy': ('entropy', ''), 'covarPop': ('covarPop', ''), 'quantileTiming': ('quantileTiming', '')}
FUNCTION_PARSERS =
{'CAST': <function Parser.<lambda>>, 'CONVERT': <function Parser.<lambda>>, 'DECODE': <function Parser.<lambda>>, 'EXTRACT': <function Parser.<lambda>>, 'JSON_OBJECT': <function Parser.<lambda>>, 'JSON_OBJECTAGG': <function Parser.<lambda>>, 'JSON_TABLE': <function Parser.<lambda>>, 'OPENJSON': <function Parser.<lambda>>, 'POSITION': <function Parser.<lambda>>, 'PREDICT': <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>>, 'ARRAYJOIN': <function ClickHouse.Parser.<lambda>>, 'QUANTILE': <function ClickHouse.Parser.<lambda>>}
NO_PAREN_FUNCTION_PARSERS =
{'CASE': <function Parser.<lambda>>, 'IF': <function Parser.<lambda>>, 'NEXT': <function Parser.<lambda>>}
RANGE_PARSERS =
{<TokenType.BETWEEN: 'BETWEEN'>: <function Parser.<lambda>>, <TokenType.GLOB: 'GLOB'>: <function binary_range_parser.<locals>.<lambda>>, <TokenType.ILIKE: 'ILIKE'>: <function binary_range_parser.<locals>.<lambda>>, <TokenType.IN: 'IN'>: <function Parser.<lambda>>, <TokenType.IRLIKE: 'IRLIKE'>: <function binary_range_parser.<locals>.<lambda>>, <TokenType.IS: 'IS'>: <function Parser.<lambda>>, <TokenType.LIKE: 'LIKE'>: <function binary_range_parser.<locals>.<lambda>>, <TokenType.OVERLAPS: 'OVERLAPS'>: <function binary_range_parser.<locals>.<lambda>>, <TokenType.RLIKE: 'RLIKE'>: <function binary_range_parser.<locals>.<lambda>>, <TokenType.SIMILAR_TO: 'SIMILAR_TO'>: <function binary_range_parser.<locals>.<lambda>>, <TokenType.FOR: 'FOR'>: <function Parser.<lambda>>, <TokenType.GLOBAL: 'GLOBAL'>: <function ClickHouse.Parser.<lambda>>}
COLUMN_OPERATORS =
{<TokenType.DOT: 'DOT'>: None, <TokenType.DCOLON: 'DCOLON'>: <function Parser.<lambda>>, <TokenType.ARROW: 'ARROW'>: <function Parser.<lambda>>, <TokenType.DARROW: 'DARROW'>: <function Parser.<lambda>>, <TokenType.HASH_ARROW: 'HASH_ARROW'>: <function Parser.<lambda>>, <TokenType.DHASH_ARROW: 'DHASH_ARROW'>: <function Parser.<lambda>>}
JOIN_KINDS =
{<TokenType.ARRAY: 'ARRAY'>, <TokenType.ANY: 'ANY'>, <TokenType.CROSS: 'CROSS'>, <TokenType.OUTER: 'OUTER'>, <TokenType.ASOF: 'ASOF'>, <TokenType.SEMI: 'SEMI'>, <TokenType.INNER: 'INNER'>, <TokenType.ANTI: 'ANTI'>}
TABLE_ALIAS_TOKENS =
{<TokenType.SMALLINT: 'SMALLINT'>, <TokenType.SOME: 'SOME'>, <TokenType.INET: 'INET'>, <TokenType.FUNCTION: 'FUNCTION'>, <TokenType.END: 'END'>, <TokenType.DIV: 'DIV'>, <TokenType.TEMPORARY: 'TEMPORARY'>, <TokenType.VARBINARY: 'VARBINARY'>, <TokenType.FOREIGN_KEY: 'FOREIGN_KEY'>, <TokenType.DATABASE: 'DATABASE'>, <TokenType.OBJECT: 'OBJECT'>, <TokenType.UBIGINT: 'UBIGINT'>, <TokenType.FALSE: 'FALSE'>, <TokenType.INT: 'INT'>, <TokenType.COLLATE: 'COLLATE'>, <TokenType.NCHAR: 'NCHAR'>, <TokenType.SERIAL: 'SERIAL'>, <TokenType.IPADDRESS: 'IPADDRESS'>, <TokenType.BPCHAR: 'BPCHAR'>, <TokenType.ESCAPE: 'ESCAPE'>, <TokenType.IPV6: 'IPV6'>, <TokenType.MAP: 'MAP'>, <TokenType.TSMULTIRANGE: 'TSMULTIRANGE'>, <TokenType.FIXEDSTRING: 'FIXEDSTRING'>, <TokenType.DATE32: 'DATE32'>, <TokenType.REFERENCES: 'REFERENCES'>, <TokenType.MEDIUMINT: 'MEDIUMINT'>, <TokenType.TINYINT: 'TINYINT'>, <TokenType.COMMAND: 'COMMAND'>, <TokenType.DECIMAL: 'DECIMAL'>, <TokenType.OBJECT_IDENTIFIER: 'OBJECT_IDENTIFIER'>, <TokenType.ENUM8: 'ENUM8'>, <TokenType.FILTER: 'FILTER'>, <TokenType.OPERATOR: 'OPERATOR'>, <TokenType.NUMRANGE: 'NUMRANGE'>, <TokenType.DOUBLE: 'DOUBLE'>, <TokenType.SUPER: 'SUPER'>, <TokenType.BIGSERIAL: 'BIGSERIAL'>, <TokenType.IPV4: 'IPV4'>, <TokenType.DELETE: 'DELETE'>, <TokenType.USMALLINT: 'USMALLINT'>, <TokenType.INTERVAL: 'INTERVAL'>, <TokenType.TIMESTAMP_S: 'TIMESTAMP_S'>, <TokenType.CURRENT_DATETIME: 'CURRENT_DATETIME'>, <TokenType.USE: 'USE'>, <TokenType.TOP: 'TOP'>, <TokenType.DATETIME64: 'DATETIME64'>, <TokenType.MEDIUMTEXT: 'MEDIUMTEXT'>, <TokenType.BIT: 'BIT'>, <TokenType.XML: 'XML'>, <TokenType.COMMENT: 'COMMENT'>, <TokenType.CONSTRAINT: 'CONSTRAINT'>, <TokenType.NULLABLE: 'NULLABLE'>, <TokenType.TIMESTAMPLTZ: 'TIMESTAMPLTZ'>, <TokenType.TABLE: 'TABLE'>, <TokenType.UINT128: 'UINT128'>, <TokenType.DICTIONARY: 'DICTIONARY'>, <TokenType.YEAR: 'YEAR'>, <TokenType.CASE: 'CASE'>, <TokenType.VARCHAR: 'VARCHAR'>, <TokenType.PSEUDO_TYPE: 'PSEUDO_TYPE'>, <TokenType.BOOLEAN: 'BOOLEAN'>, <TokenType.DEFAULT: 'DEFAULT'>, <TokenType.TINYTEXT: 'TINYTEXT'>, <TokenType.JSONB: 'JSONB'>, <TokenType.INT8MULTIRANGE: 'INT8MULTIRANGE'>, <TokenType.RANGE: 'RANGE'>, <TokenType.HLLSKETCH: 'HLLSKETCH'>, <TokenType.NULL: 'NULL'>, <TokenType.CURRENT_DATE: 'CURRENT_DATE'>, <TokenType.UINT: 'UINT'>, <TokenType.TIME: 'TIME'>, <TokenType.KEEP: 'KEEP'>, <TokenType.JSON: 'JSON'>, <TokenType.DATE: 'DATE'>, <TokenType.DATEMULTIRANGE: 'DATEMULTIRANGE'>, <TokenType.INT8RANGE: 'INT8RANGE'>, <TokenType.PIVOT: 'PIVOT'>, <TokenType.UDECIMAL: 'UDECIMAL'>, <TokenType.IMAGE: 'IMAGE'>, <TokenType.LOAD: 'LOAD'>, <TokenType.GEOGRAPHY: 'GEOGRAPHY'>, <TokenType.ALL: 'ALL'>, <TokenType.BEGIN: 'BEGIN'>, <TokenType.NUMMULTIRANGE: 'NUMMULTIRANGE'>, <TokenType.BINARY: 'BINARY'>, <TokenType.IS: 'IS'>, <TokenType.REPLACE: 'REPLACE'>, <TokenType.PARTITION: 'PARTITION'>, <TokenType.UNIQUE: 'UNIQUE'>, <TokenType.FLOAT: 'FLOAT'>, <TokenType.TIMETZ: 'TIMETZ'>, <TokenType.UNKNOWN: 'UNKNOWN'>, <TokenType.TIMESTAMP_NS: 'TIMESTAMP_NS'>, <TokenType.SCHEMA: 'SCHEMA'>, <TokenType.INT256: 'INT256'>, <TokenType.INT128: 'INT128'>, <TokenType.ORDINALITY: 'ORDINALITY'>, <TokenType.TRUE: 'TRUE'>, <TokenType.SMALLSERIAL: 'SMALLSERIAL'>, <TokenType.MERGE: 'MERGE'>, <TokenType.CHAR: 'CHAR'>, <TokenType.VOLATILE: 'VOLATILE'>, <TokenType.UNIQUEIDENTIFIER: 'UNIQUEIDENTIFIER'>, <TokenType.TINYBLOB: 'TINYBLOB'>, <TokenType.UINT256: 'UINT256'>, <TokenType.CURRENT_TIME: 'CURRENT_TIME'>, <TokenType.IPPREFIX: 'IPPREFIX'>, <TokenType.TSRANGE: 'TSRANGE'>, <TokenType.NAME: 'NAME'>, <TokenType.LOWCARDINALITY: 'LOWCARDINALITY'>, <TokenType.VAR: 'VAR'>, <TokenType.OVERWRITE: 'OVERWRITE'>, <TokenType.CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP'>, <TokenType.TSTZMULTIRANGE: 'TSTZMULTIRANGE'>, <TokenType.ROWVERSION: 'ROWVERSION'>, <TokenType.SET: 'SET'>, <TokenType.LONGTEXT: 'LONGTEXT'>, <TokenType.PRAGMA: 'PRAGMA'>, <TokenType.TEXT: 'TEXT'>, <TokenType.INT4RANGE: 'INT4RANGE'>, <TokenType.CURRENT_USER: 'CURRENT_USER'>, <TokenType.INT4MULTIRANGE: 'INT4MULTIRANGE'>, <TokenType.CACHE: 'CACHE'>, <TokenType.DESC: 'DESC'>, <TokenType.RECURSIVE: 'RECURSIVE'>, <TokenType.UPDATE: 'UPDATE'>, <TokenType.SMALLMONEY: 'SMALLMONEY'>, <TokenType.GEOMETRY: 'GEOMETRY'>, <TokenType.VIEW: 'VIEW'>, <TokenType.EXECUTE: 'EXECUTE'>, <TokenType.AUTO_INCREMENT: 'AUTO_INCREMENT'>, <TokenType.KILL: 'KILL'>, <TokenType.AGGREGATEFUNCTION: 'AGGREGATEFUNCTION'>, <TokenType.COMMIT: 'COMMIT'>, <TokenType.REFRESH: 'REFRESH'>, <TokenType.NVARCHAR: 'NVARCHAR'>, <TokenType.STRUCT: 'STRUCT'>, <TokenType.FIRST: 'FIRST'>, <TokenType.STORAGE_INTEGRATION: 'STORAGE_INTEGRATION'>, <TokenType.SIMPLEAGGREGATEFUNCTION: 'SIMPLEAGGREGATEFUNCTION'>, <TokenType.UMEDIUMINT: 'UMEDIUMINT'>, <TokenType.DESCRIBE: 'DESCRIBE'>, <TokenType.UNPIVOT: 'UNPIVOT'>, <TokenType.TIMESTAMPTZ: 'TIMESTAMPTZ'>, <TokenType.ROWS: 'ROWS'>, <TokenType.PERCENT: 'PERCENT'>, <TokenType.MEDIUMBLOB: 'MEDIUMBLOB'>, <TokenType.VARIANT: 'VARIANT'>, <TokenType.EXISTS: 'EXISTS'>, <TokenType.UTINYINT: 'UTINYINT'>, <TokenType.DATERANGE: 'DATERANGE'>, <TokenType.INDEX: 'INDEX'>, <TokenType.LONGBLOB: 'LONGBLOB'>, <TokenType.SHOW: 'SHOW'>, <TokenType.PROCEDURE: 'PROCEDURE'>, <TokenType.ASC: 'ASC'>, <TokenType.BIGDECIMAL: 'BIGDECIMAL'>, <TokenType.NEXT: 'NEXT'>, <TokenType.SEQUENCE: 'SEQUENCE'>, <TokenType.TIMESTAMP_MS: 'TIMESTAMP_MS'>, <TokenType.MODEL: 'MODEL'>, <TokenType.ENUM: 'ENUM'>, <TokenType.NESTED: 'NESTED'>, <TokenType.DATETIME: 'DATETIME'>, <TokenType.BIGINT: 'BIGINT'>, <TokenType.USERDEFINED: 'USERDEFINED'>, <TokenType.ENUM16: 'ENUM16'>, <TokenType.TIMESTAMP: 'TIMESTAMP'>, <TokenType.ROW: 'ROW'>, <TokenType.TRUNCATE: 'TRUNCATE'>, <TokenType.UUID: 'UUID'>, <TokenType.MONEY: 'MONEY'>, <TokenType.OVERLAPS: 'OVERLAPS'>, <TokenType.ISNULL: 'ISNULL'>, <TokenType.COLUMN: 'COLUMN'>, <TokenType.HSTORE: 'HSTORE'>, <TokenType.TSTZRANGE: 'TSTZRANGE'>}
QUERY_MODIFIER_PARSERS =
{<TokenType.MATCH_RECOGNIZE: 'MATCH_RECOGNIZE'>: <function Parser.<lambda>>, <TokenType.PREWHERE: 'PREWHERE'>: <function Parser.<lambda>>, <TokenType.WHERE: 'WHERE'>: <function Parser.<lambda>>, <TokenType.GROUP_BY: 'GROUP_BY'>: <function Parser.<lambda>>, <TokenType.HAVING: 'HAVING'>: <function Parser.<lambda>>, <TokenType.QUALIFY: 'QUALIFY'>: <function Parser.<lambda>>, <TokenType.WINDOW: 'WINDOW'>: <function Parser.<lambda>>, <TokenType.ORDER_BY: 'ORDER_BY'>: <function Parser.<lambda>>, <TokenType.LIMIT: 'LIMIT'>: <function Parser.<lambda>>, <TokenType.FETCH: 'FETCH'>: <function Parser.<lambda>>, <TokenType.OFFSET: 'OFFSET'>: <function Parser.<lambda>>, <TokenType.FOR: 'FOR'>: <function Parser.<lambda>>, <TokenType.LOCK: 'LOCK'>: <function Parser.<lambda>>, <TokenType.TABLE_SAMPLE: 'TABLE_SAMPLE'>: <function Parser.<lambda>>, <TokenType.USING: 'USING'>: <function Parser.<lambda>>, <TokenType.CLUSTER_BY: 'CLUSTER_BY'>: <function Parser.<lambda>>, <TokenType.DISTRIBUTE_BY: 'DISTRIBUTE_BY'>: <function Parser.<lambda>>, <TokenType.SORT_BY: 'SORT_BY'>: <function Parser.<lambda>>, <TokenType.CONNECT_BY: 'CONNECT_BY'>: <function Parser.<lambda>>, <TokenType.START_WITH: 'START_WITH'>: <function Parser.<lambda>>, <TokenType.SETTINGS: 'SETTINGS'>: <function ClickHouse.Parser.<lambda>>, <TokenType.FORMAT: 'FORMAT'>: <function ClickHouse.Parser.<lambda>>}
SET_TRIE: Dict =
{'GLOBAL': {0: True}, 'LOCAL': {0: True}, 'SESSION': {0: True}, 'TRANSACTION': {0: True}}
Inherited Members
- sqlglot.parser.Parser
- Parser
- NO_PAREN_FUNCTIONS
- STRUCT_TYPE_TOKENS
- NESTED_TYPE_TOKENS
- ENUM_TYPE_TOKENS
- AGGREGATE_TYPE_TOKENS
- TYPE_TOKENS
- SIGNED_TO_UNSIGNED_TYPE_TOKEN
- SUBQUERY_PREDICATES
- RESERVED_TOKENS
- DB_CREATABLES
- CREATABLES
- ID_VAR_TOKENS
- INTERVAL_VARS
- COMMENT_TABLE_ALIAS_TOKENS
- UPDATE_ALIAS_TOKENS
- TRIM_TYPES
- FUNC_TOKENS
- CONJUNCTION
- EQUALITY
- COMPARISON
- BITWISE
- TERM
- FACTOR
- EXPONENT
- TIMES
- TIMESTAMPS
- SET_OPERATIONS
- JOIN_METHODS
- JOIN_SIDES
- JOIN_HINTS
- LAMBDAS
- EXPRESSION_PARSERS
- STATEMENT_PARSERS
- UNARY_PARSERS
- STRING_PARSERS
- NUMERIC_PARSERS
- PRIMARY_PARSERS
- PLACEHOLDER_PARSERS
- PROPERTY_PARSERS
- CONSTRAINT_PARSERS
- ALTER_PARSERS
- SCHEMA_UNNAMED_CONSTRAINTS
- INVALID_FUNC_NAME_TOKENS
- KEY_VALUE_DEFINITIONS
- SET_PARSERS
- SHOW_PARSERS
- TYPE_LITERAL_PARSERS
- DDL_SELECT_TOKENS
- PRE_VOLATILE_TOKENS
- TRANSACTION_KIND
- TRANSACTION_CHARACTERISTICS
- CONFLICT_ACTIONS
- CREATE_SEQUENCE
- USABLES
- CAST_ACTIONS
- INSERT_ALTERNATIVES
- CLONE_KEYWORDS
- HISTORICAL_DATA_KIND
- OPCLASS_FOLLOW_KEYWORDS
- OPTYPE_FOLLOW_TOKENS
- TABLE_INDEX_HINT_TOKENS
- WINDOW_ALIAS_TOKENS
- WINDOW_BEFORE_PAREN_TOKENS
- WINDOW_SIDES
- JSON_KEY_VALUE_SEPARATOR_TOKENS
- FETCH_TOKENS
- ADD_CONSTRAINT_TOKENS
- DISTINCT_TOKENS
- NULL_TOKENS
- UNNEST_OFFSET_ALIAS_TOKENS
- STRICT_CAST
- PREFIXED_PIVOT_COLUMNS
- IDENTIFY_PIVOT_STRINGS
- ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN
- TABLESAMPLE_CSV
- SET_REQUIRES_ASSIGNMENT_DELIMITER
- TRIM_PATTERN_FIRST
- STRING_ALIASES
- UNION_MODIFIERS
- NO_PAREN_IF_COMMANDS
- JSON_ARROWS_REQUIRE_JSON_TYPE
- VALUES_FOLLOWED_BY_PAREN
- SUPPORTS_IMPLICIT_UNNEST
- error_level
- error_message_context
- max_errors
- dialect
- reset
- parse
- parse_into
- check_errors
- raise_error
- expression
- validate_expression
- errors
- sql
513 class Generator(generator.Generator): 514 QUERY_HINTS = False 515 STRUCT_DELIMITER = ("(", ")") 516 NVL2_SUPPORTED = False 517 TABLESAMPLE_REQUIRES_PARENS = False 518 TABLESAMPLE_SIZE_IS_ROWS = False 519 TABLESAMPLE_KEYWORDS = "SAMPLE" 520 LAST_DAY_SUPPORTS_DATE_PART = False 521 CAN_IMPLEMENT_ARRAY_ANY = True 522 SUPPORTS_TO_NUMBER = False 523 524 STRING_TYPE_MAPPING = { 525 exp.DataType.Type.CHAR: "String", 526 exp.DataType.Type.LONGBLOB: "String", 527 exp.DataType.Type.LONGTEXT: "String", 528 exp.DataType.Type.MEDIUMBLOB: "String", 529 exp.DataType.Type.MEDIUMTEXT: "String", 530 exp.DataType.Type.TINYBLOB: "String", 531 exp.DataType.Type.TINYTEXT: "String", 532 exp.DataType.Type.TEXT: "String", 533 exp.DataType.Type.VARBINARY: "String", 534 exp.DataType.Type.VARCHAR: "String", 535 } 536 537 SUPPORTED_JSON_PATH_PARTS = { 538 exp.JSONPathKey, 539 exp.JSONPathRoot, 540 exp.JSONPathSubscript, 541 } 542 543 TYPE_MAPPING = { 544 **generator.Generator.TYPE_MAPPING, 545 **STRING_TYPE_MAPPING, 546 exp.DataType.Type.ARRAY: "Array", 547 exp.DataType.Type.BIGINT: "Int64", 548 exp.DataType.Type.DATE32: "Date32", 549 exp.DataType.Type.DATETIME64: "DateTime64", 550 exp.DataType.Type.DOUBLE: "Float64", 551 exp.DataType.Type.ENUM: "Enum", 552 exp.DataType.Type.ENUM8: "Enum8", 553 exp.DataType.Type.ENUM16: "Enum16", 554 exp.DataType.Type.FIXEDSTRING: "FixedString", 555 exp.DataType.Type.FLOAT: "Float32", 556 exp.DataType.Type.INT: "Int32", 557 exp.DataType.Type.MEDIUMINT: "Int32", 558 exp.DataType.Type.INT128: "Int128", 559 exp.DataType.Type.INT256: "Int256", 560 exp.DataType.Type.LOWCARDINALITY: "LowCardinality", 561 exp.DataType.Type.MAP: "Map", 562 exp.DataType.Type.NESTED: "Nested", 563 exp.DataType.Type.NULLABLE: "Nullable", 564 exp.DataType.Type.SMALLINT: "Int16", 565 exp.DataType.Type.STRUCT: "Tuple", 566 exp.DataType.Type.TINYINT: "Int8", 567 exp.DataType.Type.UBIGINT: "UInt64", 568 exp.DataType.Type.UINT: "UInt32", 569 exp.DataType.Type.UINT128: "UInt128", 570 exp.DataType.Type.UINT256: "UInt256", 571 exp.DataType.Type.USMALLINT: "UInt16", 572 exp.DataType.Type.UTINYINT: "UInt8", 573 exp.DataType.Type.IPV4: "IPv4", 574 exp.DataType.Type.IPV6: "IPv6", 575 exp.DataType.Type.AGGREGATEFUNCTION: "AggregateFunction", 576 exp.DataType.Type.SIMPLEAGGREGATEFUNCTION: "SimpleAggregateFunction", 577 } 578 579 TRANSFORMS = { 580 **generator.Generator.TRANSFORMS, 581 exp.AnyValue: rename_func("any"), 582 exp.ApproxDistinct: rename_func("uniq"), 583 exp.ArrayFilter: lambda self, e: self.func("arrayFilter", e.expression, e.this), 584 exp.ArraySize: rename_func("LENGTH"), 585 exp.ArraySum: rename_func("arraySum"), 586 exp.ArgMax: arg_max_or_min_no_count("argMax"), 587 exp.ArgMin: arg_max_or_min_no_count("argMin"), 588 exp.Array: inline_array_sql, 589 exp.CastToStrType: rename_func("CAST"), 590 exp.CountIf: rename_func("countIf"), 591 exp.CurrentDate: lambda self, e: self.func("CURRENT_DATE"), 592 exp.DateAdd: date_delta_sql("DATE_ADD"), 593 exp.DateDiff: date_delta_sql("DATE_DIFF"), 594 exp.Explode: rename_func("arrayJoin"), 595 exp.Final: lambda self, e: f"{self.sql(e, 'this')} FINAL", 596 exp.IsNan: rename_func("isNaN"), 597 exp.JSONExtract: json_extract_segments("JSONExtractString", quoted_index=False), 598 exp.JSONExtractScalar: json_extract_segments("JSONExtractString", quoted_index=False), 599 exp.JSONPathKey: json_path_key_only_name, 600 exp.JSONPathRoot: lambda *_: "", 601 exp.Map: lambda self, e: _lower_func(var_map_sql(self, e)), 602 exp.Nullif: rename_func("nullIf"), 603 exp.PartitionedByProperty: lambda self, e: f"PARTITION BY {self.sql(e, 'this')}", 604 exp.Pivot: no_pivot_sql, 605 exp.Quantile: _quantile_sql, 606 exp.RegexpLike: lambda self, e: self.func("match", e.this, e.expression), 607 exp.Rand: rename_func("randCanonical"), 608 exp.Select: transforms.preprocess([transforms.eliminate_qualify]), 609 exp.StartsWith: rename_func("startsWith"), 610 exp.StrPosition: lambda self, e: self.func( 611 "position", e.this, e.args.get("substr"), e.args.get("position") 612 ), 613 exp.VarMap: lambda self, e: _lower_func(var_map_sql(self, e)), 614 exp.Xor: lambda self, e: self.func("xor", e.this, e.expression, *e.expressions), 615 } 616 617 PROPERTIES_LOCATION = { 618 **generator.Generator.PROPERTIES_LOCATION, 619 exp.VolatileProperty: exp.Properties.Location.UNSUPPORTED, 620 exp.PartitionedByProperty: exp.Properties.Location.POST_SCHEMA, 621 exp.OnCluster: exp.Properties.Location.POST_NAME, 622 } 623 624 JOIN_HINTS = False 625 TABLE_HINTS = False 626 EXPLICIT_UNION = True 627 GROUPINGS_SEP = "" 628 629 # there's no list in docs, but it can be found in Clickhouse code 630 # see `ClickHouse/src/Parsers/ParserCreate*.cpp` 631 ON_CLUSTER_TARGETS = { 632 "DATABASE", 633 "TABLE", 634 "VIEW", 635 "DICTIONARY", 636 "INDEX", 637 "FUNCTION", 638 "NAMED COLLECTION", 639 } 640 641 def _jsonpathsubscript_sql(self, expression: exp.JSONPathSubscript) -> str: 642 this = self.json_path_part(expression.this) 643 return str(int(this) + 1) if is_int(this) else this 644 645 def likeproperty_sql(self, expression: exp.LikeProperty) -> str: 646 return f"AS {self.sql(expression, 'this')}" 647 648 def _any_to_has( 649 self, 650 expression: exp.EQ | exp.NEQ, 651 default: t.Callable[[t.Any], str], 652 prefix: str = "", 653 ) -> str: 654 if isinstance(expression.left, exp.Any): 655 arr = expression.left 656 this = expression.right 657 elif isinstance(expression.right, exp.Any): 658 arr = expression.right 659 this = expression.left 660 else: 661 return default(expression) 662 663 return prefix + self.func("has", arr.this.unnest(), this) 664 665 def eq_sql(self, expression: exp.EQ) -> str: 666 return self._any_to_has(expression, super().eq_sql) 667 668 def neq_sql(self, expression: exp.NEQ) -> str: 669 return self._any_to_has(expression, super().neq_sql, "NOT ") 670 671 def regexpilike_sql(self, expression: exp.RegexpILike) -> str: 672 # Manually add a flag to make the search case-insensitive 673 regex = self.func("CONCAT", "'(?i)'", expression.expression) 674 return self.func("match", expression.this, regex) 675 676 def datatype_sql(self, expression: exp.DataType) -> str: 677 # String is the standard ClickHouse type, every other variant is just an alias. 678 # Additionally, any supplied length parameter will be ignored. 679 # 680 # https://clickhouse.com/docs/en/sql-reference/data-types/string 681 if expression.this in self.STRING_TYPE_MAPPING: 682 return "String" 683 684 return super().datatype_sql(expression) 685 686 def cte_sql(self, expression: exp.CTE) -> str: 687 if expression.args.get("scalar"): 688 this = self.sql(expression, "this") 689 alias = self.sql(expression, "alias") 690 return f"{this} AS {alias}" 691 692 return super().cte_sql(expression) 693 694 def after_limit_modifiers(self, expression: exp.Expression) -> t.List[str]: 695 return super().after_limit_modifiers(expression) + [ 696 ( 697 self.seg("SETTINGS ") + self.expressions(expression, key="settings", flat=True) 698 if expression.args.get("settings") 699 else "" 700 ), 701 ( 702 self.seg("FORMAT ") + self.sql(expression, "format") 703 if expression.args.get("format") 704 else "" 705 ), 706 ] 707 708 def parameterizedagg_sql(self, expression: exp.ParameterizedAgg) -> str: 709 params = self.expressions(expression, key="params", flat=True) 710 return self.func(expression.name, *expression.expressions) + f"({params})" 711 712 def anonymousaggfunc_sql(self, expression: exp.AnonymousAggFunc) -> str: 713 return self.func(expression.name, *expression.expressions) 714 715 def combinedaggfunc_sql(self, expression: exp.CombinedAggFunc) -> str: 716 return self.anonymousaggfunc_sql(expression) 717 718 def combinedparameterizedagg_sql(self, expression: exp.CombinedParameterizedAgg) -> str: 719 return self.parameterizedagg_sql(expression) 720 721 def placeholder_sql(self, expression: exp.Placeholder) -> str: 722 return f"{{{expression.name}: {self.sql(expression, 'kind')}}}" 723 724 def oncluster_sql(self, expression: exp.OnCluster) -> str: 725 return f"ON CLUSTER {self.sql(expression, 'this')}" 726 727 def createable_sql(self, expression: exp.Create, locations: t.DefaultDict) -> str: 728 if expression.kind in self.ON_CLUSTER_TARGETS and locations.get( 729 exp.Properties.Location.POST_NAME 730 ): 731 this_name = self.sql(expression.this, "this") 732 this_properties = " ".join( 733 [self.sql(prop) for prop in locations[exp.Properties.Location.POST_NAME]] 734 ) 735 this_schema = self.schema_columns_sql(expression.this) 736 return f"{this_name}{self.sep()}{this_properties}{self.sep()}{this_schema}" 737 738 return super().createable_sql(expression, locations) 739 740 def prewhere_sql(self, expression: exp.PreWhere) -> str: 741 this = self.indent(self.sql(expression, "this")) 742 return f"{self.seg('PREWHERE')}{self.sep()}{this}"
Generator converts a given syntax tree to the corresponding SQL string.
Arguments:
- pretty: Whether to format the produced SQL string. Default: False.
- identify: Determines when an identifier should be quoted. Possible values are: False (default): Never quote, except in cases where it's mandatory by the dialect. True or 'always': Always quote. 'safe': Only quote identifiers that are case insensitive.
- normalize: Whether to normalize identifiers to lowercase. Default: False.
- pad: The pad size in a formatted string. Default: 2.
- indent: The indentation size in a formatted string. Default: 2.
- normalize_functions: How to normalize function names. Possible values are: "upper" or True (default): Convert names to uppercase. "lower": Convert names to lowercase. False: Disables function name normalization.
- unsupported_level: Determines the generator's behavior when it encounters unsupported expressions. Default ErrorLevel.WARN.
- max_unsupported: Maximum number of unsupported messages to include in a raised UnsupportedError. This is only relevant if unsupported_level is ErrorLevel.RAISE. Default: 3
- leading_comma: Whether the comma is leading or trailing in select expressions. This is only relevant when generating in pretty mode. Default: False
- max_text_width: The max number of characters in a segment before creating new lines in pretty mode. The default is on the smaller end because the length only represents a segment and not the true line length. Default: 80
- comments: Whether to preserve comments in the output SQL code. Default: True
STRING_TYPE_MAPPING =
{<Type.CHAR: 'CHAR'>: 'String', <Type.LONGBLOB: 'LONGBLOB'>: 'String', <Type.LONGTEXT: 'LONGTEXT'>: 'String', <Type.MEDIUMBLOB: 'MEDIUMBLOB'>: 'String', <Type.MEDIUMTEXT: 'MEDIUMTEXT'>: 'String', <Type.TINYBLOB: 'TINYBLOB'>: 'String', <Type.TINYTEXT: 'TINYTEXT'>: 'String', <Type.TEXT: 'TEXT'>: 'String', <Type.VARBINARY: 'VARBINARY'>: 'String', <Type.VARCHAR: 'VARCHAR'>: 'String'}
SUPPORTED_JSON_PATH_PARTS =
{<class 'sqlglot.expressions.JSONPathKey'>, <class 'sqlglot.expressions.JSONPathSubscript'>, <class 'sqlglot.expressions.JSONPathRoot'>}
TYPE_MAPPING =
{<Type.NCHAR: 'NCHAR'>: 'CHAR', <Type.NVARCHAR: 'NVARCHAR'>: 'VARCHAR', <Type.MEDIUMTEXT: 'MEDIUMTEXT'>: 'String', <Type.LONGTEXT: 'LONGTEXT'>: 'String', <Type.TINYTEXT: 'TINYTEXT'>: 'String', <Type.MEDIUMBLOB: 'MEDIUMBLOB'>: 'String', <Type.LONGBLOB: 'LONGBLOB'>: 'String', <Type.TINYBLOB: 'TINYBLOB'>: 'String', <Type.INET: 'INET'>: 'INET', <Type.CHAR: 'CHAR'>: 'String', <Type.TEXT: 'TEXT'>: 'String', <Type.VARBINARY: 'VARBINARY'>: 'String', <Type.VARCHAR: 'VARCHAR'>: 'String', <Type.ARRAY: 'ARRAY'>: 'Array', <Type.BIGINT: 'BIGINT'>: 'Int64', <Type.DATE32: 'DATE32'>: 'Date32', <Type.DATETIME64: 'DATETIME64'>: 'DateTime64', <Type.DOUBLE: 'DOUBLE'>: 'Float64', <Type.ENUM: 'ENUM'>: 'Enum', <Type.ENUM8: 'ENUM8'>: 'Enum8', <Type.ENUM16: 'ENUM16'>: 'Enum16', <Type.FIXEDSTRING: 'FIXEDSTRING'>: 'FixedString', <Type.FLOAT: 'FLOAT'>: 'Float32', <Type.INT: 'INT'>: 'Int32', <Type.MEDIUMINT: 'MEDIUMINT'>: 'Int32', <Type.INT128: 'INT128'>: 'Int128', <Type.INT256: 'INT256'>: 'Int256', <Type.LOWCARDINALITY: 'LOWCARDINALITY'>: 'LowCardinality', <Type.MAP: 'MAP'>: 'Map', <Type.NESTED: 'NESTED'>: 'Nested', <Type.NULLABLE: 'NULLABLE'>: 'Nullable', <Type.SMALLINT: 'SMALLINT'>: 'Int16', <Type.STRUCT: 'STRUCT'>: 'Tuple', <Type.TINYINT: 'TINYINT'>: 'Int8', <Type.UBIGINT: 'UBIGINT'>: 'UInt64', <Type.UINT: 'UINT'>: 'UInt32', <Type.UINT128: 'UINT128'>: 'UInt128', <Type.UINT256: 'UINT256'>: 'UInt256', <Type.USMALLINT: 'USMALLINT'>: 'UInt16', <Type.UTINYINT: 'UTINYINT'>: 'UInt8', <Type.IPV4: 'IPV4'>: 'IPv4', <Type.IPV6: 'IPV6'>: 'IPv6', <Type.AGGREGATEFUNCTION: 'AGGREGATEFUNCTION'>: 'AggregateFunction', <Type.SIMPLEAGGREGATEFUNCTION: 'SIMPLEAGGREGATEFUNCTION'>: 'SimpleAggregateFunction'}
TRANSFORMS =
{<class 'sqlglot.expressions.JSONPathKey'>: <function json_path_key_only_name>, <class 'sqlglot.expressions.JSONPathRoot'>: <function ClickHouse.Generator.<lambda>>, <class 'sqlglot.expressions.JSONPathSubscript'>: <function <lambda>>, <class 'sqlglot.expressions.AutoRefreshProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.BackupProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.CaseSpecificColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.CharacterSetColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.CharacterSetProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.ClusteredColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.CollateColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.CommentColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.CopyGrantsProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.DateAdd'>: <function date_delta_sql.<locals>._delta_sql>, <class 'sqlglot.expressions.DateFormatColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.DefaultColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.EncodeColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.ExcludeColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.ExecuteAsProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.ExternalProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.GlobalProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.HeapProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.IcebergProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.InheritsProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.InlineLengthColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.InputModelProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.IntervalSpan'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.JSONExtract'>: <function json_extract_segments.<locals>._json_extract_segments>, <class 'sqlglot.expressions.JSONExtractScalar'>: <function json_extract_segments.<locals>._json_extract_segments>, <class 'sqlglot.expressions.LanguageProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.LocationProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.LogProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.MaterializedProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.NonClusteredColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.NoPrimaryIndexProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.NotForReplicationColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.OnCommitProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.OnProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.OnUpdateColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.OutputModelProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.PathColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.RemoteWithConnectionModelProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.ReturnsProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.SampleProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.SetConfigProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.SetProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.SettingsProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.SharingProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.SqlReadWriteProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.SqlSecurityProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.StabilityProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.TemporaryProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.TitleColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.Timestamp'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.ToTableProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.TransformModelProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.TransientProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.UppercaseColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.UnloggedProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.VarMap'>: <function ClickHouse.Generator.<lambda>>, <class 'sqlglot.expressions.VolatileProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.WithJournalTableProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.WithOperator'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.AnyValue'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.ApproxDistinct'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.ArrayFilter'>: <function ClickHouse.Generator.<lambda>>, <class 'sqlglot.expressions.ArraySize'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.ArraySum'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.ArgMax'>: <function arg_max_or_min_no_count.<locals>._arg_max_or_min_sql>, <class 'sqlglot.expressions.ArgMin'>: <function arg_max_or_min_no_count.<locals>._arg_max_or_min_sql>, <class 'sqlglot.expressions.Array'>: <function inline_array_sql>, <class 'sqlglot.expressions.CastToStrType'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.CountIf'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.CurrentDate'>: <function ClickHouse.Generator.<lambda>>, <class 'sqlglot.expressions.DateDiff'>: <function date_delta_sql.<locals>._delta_sql>, <class 'sqlglot.expressions.Explode'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.Final'>: <function ClickHouse.Generator.<lambda>>, <class 'sqlglot.expressions.IsNan'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.Map'>: <function ClickHouse.Generator.<lambda>>, <class 'sqlglot.expressions.Nullif'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.PartitionedByProperty'>: <function ClickHouse.Generator.<lambda>>, <class 'sqlglot.expressions.Pivot'>: <function no_pivot_sql>, <class 'sqlglot.expressions.Quantile'>: <function _quantile_sql>, <class 'sqlglot.expressions.RegexpLike'>: <function ClickHouse.Generator.<lambda>>, <class 'sqlglot.expressions.Rand'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.Select'>: <function preprocess.<locals>._to_sql>, <class 'sqlglot.expressions.StartsWith'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.StrPosition'>: <function ClickHouse.Generator.<lambda>>, <class 'sqlglot.expressions.Xor'>: <function ClickHouse.Generator.<lambda>>}
PROPERTIES_LOCATION =
{<class 'sqlglot.expressions.AlgorithmProperty'>: <Location.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.AutoIncrementProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.AutoRefreshProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.BackupProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.BlockCompressionProperty'>: <Location.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.CharacterSetProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.ChecksumProperty'>: <Location.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.CollateProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.CopyGrantsProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.Cluster'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.ClusteredByProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.DataBlocksizeProperty'>: <Location.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.DefinerProperty'>: <Location.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.DictRange'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.DictProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.DistKeyProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.DistStyleProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.EngineProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.ExecuteAsProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.ExternalProperty'>: <Location.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.FallbackProperty'>: <Location.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.FileFormatProperty'>: <Location.POST_WITH: 'POST_WITH'>, <class 'sqlglot.expressions.FreespaceProperty'>: <Location.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.GlobalProperty'>: <Location.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.HeapProperty'>: <Location.POST_WITH: 'POST_WITH'>, <class 'sqlglot.expressions.InheritsProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.IcebergProperty'>: <Location.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.InputModelProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.IsolatedLoadingProperty'>: <Location.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.JournalProperty'>: <Location.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.LanguageProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.LikeProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.LocationProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.LockProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.LockingProperty'>: <Location.POST_ALIAS: 'POST_ALIAS'>, <class 'sqlglot.expressions.LogProperty'>: <Location.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.MaterializedProperty'>: <Location.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.MergeBlockRatioProperty'>: <Location.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.NoPrimaryIndexProperty'>: <Location.POST_EXPRESSION: 'POST_EXPRESSION'>, <class 'sqlglot.expressions.OnProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.OnCommitProperty'>: <Location.POST_EXPRESSION: 'POST_EXPRESSION'>, <class 'sqlglot.expressions.Order'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.OutputModelProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.PartitionedByProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.PartitionedOfProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.PrimaryKey'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.Property'>: <Location.POST_WITH: 'POST_WITH'>, <class 'sqlglot.expressions.RemoteWithConnectionModelProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.ReturnsProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.RowFormatProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.RowFormatDelimitedProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.RowFormatSerdeProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.SampleProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.SchemaCommentProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.SerdeProperties'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.Set'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.SettingsProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.SetProperty'>: <Location.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.SetConfigProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.SharingProperty'>: <Location.POST_EXPRESSION: 'POST_EXPRESSION'>, <class 'sqlglot.expressions.SequenceProperties'>: <Location.POST_EXPRESSION: 'POST_EXPRESSION'>, <class 'sqlglot.expressions.SortKeyProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.SqlReadWriteProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.SqlSecurityProperty'>: <Location.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.StabilityProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.TemporaryProperty'>: <Location.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.ToTableProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.TransientProperty'>: <Location.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.TransformModelProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.MergeTreeTTL'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.UnloggedProperty'>: <Location.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.VolatileProperty'>: <Location.UNSUPPORTED: 'UNSUPPORTED'>, <class 'sqlglot.expressions.WithDataProperty'>: <Location.POST_EXPRESSION: 'POST_EXPRESSION'>, <class 'sqlglot.expressions.WithJournalTableProperty'>: <Location.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.WithSystemVersioningProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.OnCluster'>: <Location.POST_NAME: 'POST_NAME'>}
ON_CLUSTER_TARGETS =
{'NAMED COLLECTION', 'DATABASE', 'TABLE', 'FUNCTION', 'INDEX', 'VIEW', 'DICTIONARY'}
676 def datatype_sql(self, expression: exp.DataType) -> str: 677 # String is the standard ClickHouse type, every other variant is just an alias. 678 # Additionally, any supplied length parameter will be ignored. 679 # 680 # https://clickhouse.com/docs/en/sql-reference/data-types/string 681 if expression.this in self.STRING_TYPE_MAPPING: 682 return "String" 683 684 return super().datatype_sql(expression)
694 def after_limit_modifiers(self, expression: exp.Expression) -> t.List[str]: 695 return super().after_limit_modifiers(expression) + [ 696 ( 697 self.seg("SETTINGS ") + self.expressions(expression, key="settings", flat=True) 698 if expression.args.get("settings") 699 else "" 700 ), 701 ( 702 self.seg("FORMAT ") + self.sql(expression, "format") 703 if expression.args.get("format") 704 else "" 705 ), 706 ]
def
combinedparameterizedagg_sql(self, expression: sqlglot.expressions.CombinedParameterizedAgg) -> str:
727 def createable_sql(self, expression: exp.Create, locations: t.DefaultDict) -> str: 728 if expression.kind in self.ON_CLUSTER_TARGETS and locations.get( 729 exp.Properties.Location.POST_NAME 730 ): 731 this_name = self.sql(expression.this, "this") 732 this_properties = " ".join( 733 [self.sql(prop) for prop in locations[exp.Properties.Location.POST_NAME]] 734 ) 735 this_schema = self.schema_columns_sql(expression.this) 736 return f"{this_name}{self.sep()}{this_properties}{self.sep()}{this_schema}" 737 738 return super().createable_sql(expression, locations)
AFTER_HAVING_MODIFIER_TRANSFORMS =
{'qualify': <function Generator.<lambda>>, 'windows': <function Generator.<lambda>>}
Inherited Members
- sqlglot.generator.Generator
- Generator
- NULL_ORDERING_SUPPORTED
- IGNORE_NULLS_IN_FUNC
- LOCKING_READS_SUPPORTED
- WRAP_DERIVED_VALUES
- CREATE_FUNCTION_RETURN_AS
- MATCHED_BY_SOURCE
- SINGLE_STRING_INTERVAL
- INTERVAL_ALLOWS_PLURAL_FORM
- LIMIT_FETCH
- LIMIT_ONLY_LITERALS
- RENAME_TABLE_WITH_DB
- INDEX_ON
- QUERY_HINT_SEP
- IS_BOOL_ALLOWED
- DUPLICATE_KEY_UPDATE_WITH_SET
- LIMIT_IS_TOP
- RETURNING_END
- COLUMN_JOIN_MARKS_SUPPORTED
- EXTRACT_ALLOWS_QUOTES
- TZ_TO_WITH_TIME_ZONE
- VALUES_AS_TABLE
- ALTER_TABLE_INCLUDE_COLUMN_KEYWORD
- UNNEST_WITH_ORDINALITY
- AGGREGATE_FILTER_SUPPORTED
- SEMI_ANTI_JOIN_WITH_SIDE
- COMPUTED_COLUMN_WITH_TYPE
- SUPPORTS_TABLE_COPY
- TABLESAMPLE_WITH_METHOD
- TABLESAMPLE_SEED_KEYWORD
- COLLATE_IS_FUNC
- DATA_TYPE_SPECIFIERS_ALLOWED
- ENSURE_BOOLS
- CTE_RECURSIVE_KEYWORD_REQUIRED
- SUPPORTS_SINGLE_ARG_CONCAT
- SUPPORTS_TABLE_ALIAS_COLUMNS
- UNPIVOT_ALIASES_ARE_IDENTIFIERS
- JSON_KEY_VALUE_PAIR_SEP
- INSERT_OVERWRITE
- SUPPORTS_SELECT_INTO
- SUPPORTS_UNLOGGED_TABLES
- SUPPORTS_CREATE_TABLE_LIKE
- LIKE_PROPERTY_INSIDE_SCHEMA
- MULTI_ARG_DISTINCT
- JSON_TYPE_REQUIRED_FOR_EXTRACTION
- JSON_PATH_BRACKETED_KEY_SUPPORTED
- JSON_PATH_SINGLE_QUOTE_ESCAPE
- STAR_MAPPING
- TIME_PART_SINGULARS
- TOKEN_MAPPING
- PARAMETER_TOKEN
- NAMED_PLACEHOLDER_TOKEN
- RESERVED_KEYWORDS
- WITH_SEPARATED_COMMENTS
- EXCLUDE_COMMENTS
- UNWRAPPED_INTERVAL_VALUES
- PARAMETERIZABLE_TEXT_TYPES
- EXPRESSIONS_WITHOUT_NESTED_CTES
- SENTINEL_LINE_BREAK
- pretty
- identify
- normalize
- pad
- unsupported_level
- max_unsupported
- leading_comma
- max_text_width
- comments
- dialect
- normalize_functions
- unsupported_messages
- generate
- preprocess
- unsupported
- sep
- seg
- pad_comment
- maybe_comment
- wrap
- no_identify
- normalize_func
- indent
- sql
- uncache_sql
- cache_sql
- characterset_sql
- column_sql
- columnposition_sql
- columndef_sql
- columnconstraint_sql
- computedcolumnconstraint_sql
- autoincrementcolumnconstraint_sql
- compresscolumnconstraint_sql
- generatedasidentitycolumnconstraint_sql
- generatedasrowcolumnconstraint_sql
- periodforsystemtimeconstraint_sql
- notnullcolumnconstraint_sql
- transformcolumnconstraint_sql
- primarykeycolumnconstraint_sql
- uniquecolumnconstraint_sql
- create_sql
- sequenceproperties_sql
- clone_sql
- describe_sql
- heredoc_sql
- prepend_ctes
- with_sql
- tablealias_sql
- bitstring_sql
- hexstring_sql
- bytestring_sql
- unicodestring_sql
- rawstring_sql
- datatypeparam_sql
- directory_sql
- delete_sql
- drop_sql
- except_sql
- except_op
- fetch_sql
- filter_sql
- hint_sql
- indexparameters_sql
- index_sql
- identifier_sql
- inputoutputformat_sql
- national_sql
- partition_sql
- properties_sql
- root_properties
- properties
- with_properties
- locate_properties
- property_name
- property_sql
- fallbackproperty_sql
- journalproperty_sql
- freespaceproperty_sql
- checksumproperty_sql
- mergeblockratioproperty_sql
- datablocksizeproperty_sql
- blockcompressionproperty_sql
- isolatedloadingproperty_sql
- partitionboundspec_sql
- partitionedofproperty_sql
- lockingproperty_sql
- withdataproperty_sql
- withsystemversioningproperty_sql
- insert_sql
- intersect_sql
- intersect_op
- introducer_sql
- kill_sql
- pseudotype_sql
- objectidentifier_sql
- onconflict_sql
- returning_sql
- rowformatdelimitedproperty_sql
- withtablehint_sql
- indextablehint_sql
- historicaldata_sql
- table_parts
- table_sql
- tablesample_sql
- pivot_sql
- version_sql
- tuple_sql
- update_sql
- values_sql
- var_sql
- into_sql
- from_sql
- group_sql
- having_sql
- connect_sql
- prior_sql
- join_sql
- lambda_sql
- lateral_op
- lateral_sql
- limit_sql
- offset_sql
- setitem_sql
- set_sql
- pragma_sql
- lock_sql
- literal_sql
- escape_str
- loaddata_sql
- null_sql
- boolean_sql
- order_sql
- withfill_sql
- cluster_sql
- distribute_sql
- sort_sql
- ordered_sql
- matchrecognize_sql
- query_modifiers
- queryoption_sql
- offset_limit_modifiers
- select_sql
- schema_sql
- schema_columns_sql
- star_sql
- parameter_sql
- sessionparameter_sql
- subquery_sql
- qualify_sql
- set_operations
- union_sql
- union_op
- unnest_sql
- where_sql
- window_sql
- partition_by_sql
- windowspec_sql
- withingroup_sql
- between_sql
- bracket_sql
- all_sql
- any_sql
- exists_sql
- case_sql
- constraint_sql
- nextvaluefor_sql
- extract_sql
- trim_sql
- convert_concat_args
- concat_sql
- concatws_sql
- check_sql
- foreignkey_sql
- primarykey_sql
- if_sql
- matchagainst_sql
- jsonkeyvalue_sql
- jsonpath_sql
- json_path_part
- formatjson_sql
- jsonobject_sql
- jsonobjectagg_sql
- jsonarray_sql
- jsonarrayagg_sql
- jsoncolumndef_sql
- jsonschema_sql
- jsontable_sql
- openjsoncolumndef_sql
- openjson_sql
- in_sql
- in_unnest_op
- interval_sql
- return_sql
- reference_sql
- anonymous_sql
- paren_sql
- neg_sql
- not_sql
- alias_sql
- pivotalias_sql
- aliases_sql
- atindex_sql
- attimezone_sql
- fromtimezone_sql
- add_sql
- and_sql
- or_sql
- xor_sql
- connector_sql
- bitwiseand_sql
- bitwiseleftshift_sql
- bitwisenot_sql
- bitwiseor_sql
- bitwiserightshift_sql
- bitwisexor_sql
- cast_sql
- currentdate_sql
- currenttimestamp_sql
- collate_sql
- command_sql
- comment_sql
- mergetreettlaction_sql
- mergetreettl_sql
- transaction_sql
- commit_sql
- rollback_sql
- altercolumn_sql
- renametable_sql
- renamecolumn_sql
- altertable_sql
- add_column_sql
- droppartition_sql
- addconstraint_sql
- distinct_sql
- ignorenulls_sql
- respectnulls_sql
- havingmax_sql
- intdiv_sql
- dpipe_sql
- div_sql
- overlaps_sql
- distance_sql
- dot_sql
- propertyeq_sql
- escape_sql
- glob_sql
- gt_sql
- gte_sql
- ilike_sql
- ilikeany_sql
- is_sql
- like_sql
- likeany_sql
- similarto_sql
- lt_sql
- lte_sql
- mod_sql
- mul_sql
- nullsafeeq_sql
- nullsafeneq_sql
- slice_sql
- sub_sql
- trycast_sql
- log_sql
- use_sql
- binary
- function_fallback_sql
- func
- format_args
- text_width
- format_time
- expressions
- op_expressions
- naked_property
- tag_sql
- token_sql
- userdefinedfunction_sql
- joinhint_sql
- kwarg_sql
- when_sql
- merge_sql
- tochar_sql
- tonumber_sql
- dictproperty_sql
- dictrange_sql
- dictsubproperty_sql
- clusteredbyproperty_sql
- anyvalue_sql
- querytransform_sql
- indexconstraintoption_sql
- checkcolumnconstraint_sql
- indexcolumnconstraint_sql
- nvl2_sql
- comprehension_sql
- columnprefix_sql
- opclass_sql
- predict_sql
- forin_sql
- refresh_sql
- operator_sql
- toarray_sql
- tsordstotime_sql
- tsordstodate_sql
- unixdate_sql
- lastday_sql
- arrayany_sql
- generateseries_sql
- struct_sql
- partitionrange_sql
- truncatetable_sql
- convert_sql