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 53 ESCAPE_SEQUENCES = { 54 "\\0": "\0", 55 } 56 57 class Tokenizer(tokens.Tokenizer): 58 COMMENTS = ["--", "#", "#!", ("/*", "*/")] 59 IDENTIFIERS = ['"', "`"] 60 STRING_ESCAPES = ["'", "\\"] 61 BIT_STRINGS = [("0b", "")] 62 HEX_STRINGS = [("0x", ""), ("0X", "")] 63 HEREDOC_STRINGS = ["$"] 64 65 KEYWORDS = { 66 **tokens.Tokenizer.KEYWORDS, 67 "ATTACH": TokenType.COMMAND, 68 "DATE32": TokenType.DATE32, 69 "DATETIME64": TokenType.DATETIME64, 70 "DICTIONARY": TokenType.DICTIONARY, 71 "ENUM": TokenType.ENUM, 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 } 97 98 SINGLE_TOKENS = { 99 **tokens.Tokenizer.SINGLE_TOKENS, 100 "$": TokenType.HEREDOC_STRING, 101 } 102 103 class Parser(parser.Parser): 104 # Tested in ClickHouse's playground, it seems that the following two queries do the same thing 105 # * select x from t1 union all select x from t2 limit 1; 106 # * select x from t1 union all (select x from t2 limit 1); 107 MODIFIERS_ATTACHED_TO_UNION = False 108 109 FUNCTIONS = { 110 **parser.Parser.FUNCTIONS, 111 "ANY": exp.AnyValue.from_arg_list, 112 "ARRAYSUM": exp.ArraySum.from_arg_list, 113 "COUNTIF": _build_count_if, 114 "DATE_ADD": lambda args: exp.DateAdd( 115 this=seq_get(args, 2), expression=seq_get(args, 1), unit=seq_get(args, 0) 116 ), 117 "DATEADD": lambda args: exp.DateAdd( 118 this=seq_get(args, 2), expression=seq_get(args, 1), unit=seq_get(args, 0) 119 ), 120 "DATE_DIFF": lambda args: exp.DateDiff( 121 this=seq_get(args, 2), expression=seq_get(args, 1), unit=seq_get(args, 0) 122 ), 123 "DATEDIFF": lambda args: exp.DateDiff( 124 this=seq_get(args, 2), expression=seq_get(args, 1), unit=seq_get(args, 0) 125 ), 126 "JSONEXTRACTSTRING": build_json_extract_path( 127 exp.JSONExtractScalar, zero_based_indexing=False 128 ), 129 "MAP": parser.build_var_map, 130 "MATCH": exp.RegexpLike.from_arg_list, 131 "RANDCANONICAL": exp.Rand.from_arg_list, 132 "UNIQ": exp.ApproxDistinct.from_arg_list, 133 "XOR": lambda args: exp.Xor(expressions=args), 134 } 135 136 AGG_FUNCTIONS = { 137 "count", 138 "min", 139 "max", 140 "sum", 141 "avg", 142 "any", 143 "stddevPop", 144 "stddevSamp", 145 "varPop", 146 "varSamp", 147 "corr", 148 "covarPop", 149 "covarSamp", 150 "entropy", 151 "exponentialMovingAverage", 152 "intervalLengthSum", 153 "kolmogorovSmirnovTest", 154 "mannWhitneyUTest", 155 "median", 156 "rankCorr", 157 "sumKahan", 158 "studentTTest", 159 "welchTTest", 160 "anyHeavy", 161 "anyLast", 162 "boundingRatio", 163 "first_value", 164 "last_value", 165 "argMin", 166 "argMax", 167 "avgWeighted", 168 "topK", 169 "topKWeighted", 170 "deltaSum", 171 "deltaSumTimestamp", 172 "groupArray", 173 "groupArrayLast", 174 "groupUniqArray", 175 "groupArrayInsertAt", 176 "groupArrayMovingAvg", 177 "groupArrayMovingSum", 178 "groupArraySample", 179 "groupBitAnd", 180 "groupBitOr", 181 "groupBitXor", 182 "groupBitmap", 183 "groupBitmapAnd", 184 "groupBitmapOr", 185 "groupBitmapXor", 186 "sumWithOverflow", 187 "sumMap", 188 "minMap", 189 "maxMap", 190 "skewSamp", 191 "skewPop", 192 "kurtSamp", 193 "kurtPop", 194 "uniq", 195 "uniqExact", 196 "uniqCombined", 197 "uniqCombined64", 198 "uniqHLL12", 199 "uniqTheta", 200 "quantile", 201 "quantiles", 202 "quantileExact", 203 "quantilesExact", 204 "quantileExactLow", 205 "quantilesExactLow", 206 "quantileExactHigh", 207 "quantilesExactHigh", 208 "quantileExactWeighted", 209 "quantilesExactWeighted", 210 "quantileTiming", 211 "quantilesTiming", 212 "quantileTimingWeighted", 213 "quantilesTimingWeighted", 214 "quantileDeterministic", 215 "quantilesDeterministic", 216 "quantileTDigest", 217 "quantilesTDigest", 218 "quantileTDigestWeighted", 219 "quantilesTDigestWeighted", 220 "quantileBFloat16", 221 "quantilesBFloat16", 222 "quantileBFloat16Weighted", 223 "quantilesBFloat16Weighted", 224 "simpleLinearRegression", 225 "stochasticLinearRegression", 226 "stochasticLogisticRegression", 227 "categoricalInformationValue", 228 "contingency", 229 "cramersV", 230 "cramersVBiasCorrected", 231 "theilsU", 232 "maxIntersections", 233 "maxIntersectionsPosition", 234 "meanZTest", 235 "quantileInterpolatedWeighted", 236 "quantilesInterpolatedWeighted", 237 "quantileGK", 238 "quantilesGK", 239 "sparkBar", 240 "sumCount", 241 "largestTriangleThreeBuckets", 242 } 243 244 AGG_FUNCTIONS_SUFFIXES = [ 245 "If", 246 "Array", 247 "ArrayIf", 248 "Map", 249 "SimpleState", 250 "State", 251 "Merge", 252 "MergeState", 253 "ForEach", 254 "Distinct", 255 "OrDefault", 256 "OrNull", 257 "Resample", 258 "ArgMin", 259 "ArgMax", 260 ] 261 262 AGG_FUNC_MAPPING = ( 263 lambda functions, suffixes: { 264 f"{f}{sfx}": (f, sfx) for sfx in (suffixes + [""]) for f in functions 265 } 266 )(AGG_FUNCTIONS, AGG_FUNCTIONS_SUFFIXES) 267 268 FUNCTIONS_WITH_ALIASED_ARGS = {*parser.Parser.FUNCTIONS_WITH_ALIASED_ARGS, "TUPLE"} 269 270 FUNCTION_PARSERS = { 271 **parser.Parser.FUNCTION_PARSERS, 272 "ARRAYJOIN": lambda self: self.expression(exp.Explode, this=self._parse_expression()), 273 "QUANTILE": lambda self: self._parse_quantile(), 274 } 275 276 FUNCTION_PARSERS.pop("MATCH") 277 278 NO_PAREN_FUNCTION_PARSERS = parser.Parser.NO_PAREN_FUNCTION_PARSERS.copy() 279 NO_PAREN_FUNCTION_PARSERS.pop("ANY") 280 281 RANGE_PARSERS = { 282 **parser.Parser.RANGE_PARSERS, 283 TokenType.GLOBAL: lambda self, this: self._match(TokenType.IN) 284 and self._parse_in(this, is_global=True), 285 } 286 287 # The PLACEHOLDER entry is popped because 1) it doesn't affect Clickhouse (it corresponds to 288 # the postgres-specific JSONBContains parser) and 2) it makes parsing the ternary op simpler. 289 COLUMN_OPERATORS = parser.Parser.COLUMN_OPERATORS.copy() 290 COLUMN_OPERATORS.pop(TokenType.PLACEHOLDER) 291 292 JOIN_KINDS = { 293 *parser.Parser.JOIN_KINDS, 294 TokenType.ANY, 295 TokenType.ASOF, 296 TokenType.ARRAY, 297 } 298 299 TABLE_ALIAS_TOKENS = parser.Parser.TABLE_ALIAS_TOKENS - { 300 TokenType.ANY, 301 TokenType.ARRAY, 302 TokenType.FINAL, 303 TokenType.FORMAT, 304 TokenType.SETTINGS, 305 } 306 307 LOG_DEFAULTS_TO_LN = True 308 309 QUERY_MODIFIER_PARSERS = { 310 **parser.Parser.QUERY_MODIFIER_PARSERS, 311 TokenType.SETTINGS: lambda self: ( 312 "settings", 313 self._advance() or self._parse_csv(self._parse_conjunction), 314 ), 315 TokenType.FORMAT: lambda self: ("format", self._advance() or self._parse_id_var()), 316 } 317 318 def _parse_conjunction(self) -> t.Optional[exp.Expression]: 319 this = super()._parse_conjunction() 320 321 if self._match(TokenType.PLACEHOLDER): 322 return self.expression( 323 exp.If, 324 this=this, 325 true=self._parse_conjunction(), 326 false=self._match(TokenType.COLON) and self._parse_conjunction(), 327 ) 328 329 return this 330 331 def _parse_placeholder(self) -> t.Optional[exp.Expression]: 332 """ 333 Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier} 334 https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters 335 """ 336 if not self._match(TokenType.L_BRACE): 337 return None 338 339 this = self._parse_id_var() 340 self._match(TokenType.COLON) 341 kind = self._parse_types(check_func=False, allow_identifiers=False) or ( 342 self._match_text_seq("IDENTIFIER") and "Identifier" 343 ) 344 345 if not kind: 346 self.raise_error("Expecting a placeholder type or 'Identifier' for tables") 347 elif not self._match(TokenType.R_BRACE): 348 self.raise_error("Expecting }") 349 350 return self.expression(exp.Placeholder, this=this, kind=kind) 351 352 def _parse_in(self, this: t.Optional[exp.Expression], is_global: bool = False) -> exp.In: 353 this = super()._parse_in(this) 354 this.set("is_global", is_global) 355 return this 356 357 def _parse_table( 358 self, 359 schema: bool = False, 360 joins: bool = False, 361 alias_tokens: t.Optional[t.Collection[TokenType]] = None, 362 parse_bracket: bool = False, 363 is_db_reference: bool = False, 364 ) -> t.Optional[exp.Expression]: 365 this = super()._parse_table( 366 schema=schema, 367 joins=joins, 368 alias_tokens=alias_tokens, 369 parse_bracket=parse_bracket, 370 is_db_reference=is_db_reference, 371 ) 372 373 if self._match(TokenType.FINAL): 374 this = self.expression(exp.Final, this=this) 375 376 return this 377 378 def _parse_position(self, haystack_first: bool = False) -> exp.StrPosition: 379 return super()._parse_position(haystack_first=True) 380 381 # https://clickhouse.com/docs/en/sql-reference/statements/select/with/ 382 def _parse_cte(self) -> exp.CTE: 383 index = self._index 384 try: 385 # WITH <identifier> AS <subquery expression> 386 return super()._parse_cte() 387 except ParseError: 388 # WITH <expression> AS <identifier> 389 self._retreat(index) 390 391 return self.expression( 392 exp.CTE, 393 this=self._parse_field(), 394 alias=self._parse_table_alias(), 395 scalar=True, 396 ) 397 398 def _parse_join_parts( 399 self, 400 ) -> t.Tuple[t.Optional[Token], t.Optional[Token], t.Optional[Token]]: 401 is_global = self._match(TokenType.GLOBAL) and self._prev 402 kind_pre = self._match_set(self.JOIN_KINDS, advance=False) and self._prev 403 404 if kind_pre: 405 kind = self._match_set(self.JOIN_KINDS) and self._prev 406 side = self._match_set(self.JOIN_SIDES) and self._prev 407 return is_global, side, kind 408 409 return ( 410 is_global, 411 self._match_set(self.JOIN_SIDES) and self._prev, 412 self._match_set(self.JOIN_KINDS) and self._prev, 413 ) 414 415 def _parse_join( 416 self, skip_join_token: bool = False, parse_bracket: bool = False 417 ) -> t.Optional[exp.Join]: 418 join = super()._parse_join(skip_join_token=skip_join_token, parse_bracket=True) 419 if join: 420 join.set("global", join.args.pop("method", None)) 421 422 return join 423 424 def _parse_function( 425 self, 426 functions: t.Optional[t.Dict[str, t.Callable]] = None, 427 anonymous: bool = False, 428 optional_parens: bool = True, 429 ) -> t.Optional[exp.Expression]: 430 func = super()._parse_function( 431 functions=functions, anonymous=anonymous, optional_parens=optional_parens 432 ) 433 434 if isinstance(func, exp.Anonymous): 435 parts = self.AGG_FUNC_MAPPING.get(func.this) 436 params = self._parse_func_params(func) 437 438 if params: 439 if parts and parts[1]: 440 return self.expression( 441 exp.CombinedParameterizedAgg, 442 this=func.this, 443 expressions=func.expressions, 444 params=params, 445 parts=parts, 446 ) 447 return self.expression( 448 exp.ParameterizedAgg, 449 this=func.this, 450 expressions=func.expressions, 451 params=params, 452 ) 453 454 if parts: 455 if parts[1]: 456 return self.expression( 457 exp.CombinedAggFunc, 458 this=func.this, 459 expressions=func.expressions, 460 parts=parts, 461 ) 462 return self.expression( 463 exp.AnonymousAggFunc, 464 this=func.this, 465 expressions=func.expressions, 466 ) 467 468 return func 469 470 def _parse_func_params( 471 self, this: t.Optional[exp.Func] = None 472 ) -> t.Optional[t.List[exp.Expression]]: 473 if self._match_pair(TokenType.R_PAREN, TokenType.L_PAREN): 474 return self._parse_csv(self._parse_lambda) 475 476 if self._match(TokenType.L_PAREN): 477 params = self._parse_csv(self._parse_lambda) 478 self._match_r_paren(this) 479 return params 480 481 return None 482 483 def _parse_quantile(self) -> exp.Quantile: 484 this = self._parse_lambda() 485 params = self._parse_func_params() 486 if params: 487 return self.expression(exp.Quantile, this=params[0], quantile=this) 488 return self.expression(exp.Quantile, this=this, quantile=exp.Literal.number(0.5)) 489 490 def _parse_wrapped_id_vars(self, optional: bool = False) -> t.List[exp.Expression]: 491 return super()._parse_wrapped_id_vars(optional=True) 492 493 def _parse_primary_key( 494 self, wrapped_optional: bool = False, in_props: bool = False 495 ) -> exp.PrimaryKeyColumnConstraint | exp.PrimaryKey: 496 return super()._parse_primary_key( 497 wrapped_optional=wrapped_optional or in_props, in_props=in_props 498 ) 499 500 def _parse_on_property(self) -> t.Optional[exp.Expression]: 501 index = self._index 502 if self._match_text_seq("CLUSTER"): 503 this = self._parse_id_var() 504 if this: 505 return self.expression(exp.OnCluster, this=this) 506 else: 507 self._retreat(index) 508 return None 509 510 class Generator(generator.Generator): 511 QUERY_HINTS = False 512 STRUCT_DELIMITER = ("(", ")") 513 NVL2_SUPPORTED = False 514 TABLESAMPLE_REQUIRES_PARENS = False 515 TABLESAMPLE_SIZE_IS_ROWS = False 516 TABLESAMPLE_KEYWORDS = "SAMPLE" 517 LAST_DAY_SUPPORTS_DATE_PART = False 518 CAN_IMPLEMENT_ARRAY_ANY = True 519 520 STRING_TYPE_MAPPING = { 521 exp.DataType.Type.CHAR: "String", 522 exp.DataType.Type.LONGBLOB: "String", 523 exp.DataType.Type.LONGTEXT: "String", 524 exp.DataType.Type.MEDIUMBLOB: "String", 525 exp.DataType.Type.MEDIUMTEXT: "String", 526 exp.DataType.Type.TINYBLOB: "String", 527 exp.DataType.Type.TINYTEXT: "String", 528 exp.DataType.Type.TEXT: "String", 529 exp.DataType.Type.VARBINARY: "String", 530 exp.DataType.Type.VARCHAR: "String", 531 } 532 533 SUPPORTED_JSON_PATH_PARTS = { 534 exp.JSONPathKey, 535 exp.JSONPathRoot, 536 exp.JSONPathSubscript, 537 } 538 539 TYPE_MAPPING = { 540 **generator.Generator.TYPE_MAPPING, 541 **STRING_TYPE_MAPPING, 542 exp.DataType.Type.ARRAY: "Array", 543 exp.DataType.Type.BIGINT: "Int64", 544 exp.DataType.Type.DATE32: "Date32", 545 exp.DataType.Type.DATETIME64: "DateTime64", 546 exp.DataType.Type.DOUBLE: "Float64", 547 exp.DataType.Type.ENUM: "Enum", 548 exp.DataType.Type.ENUM8: "Enum8", 549 exp.DataType.Type.ENUM16: "Enum16", 550 exp.DataType.Type.FIXEDSTRING: "FixedString", 551 exp.DataType.Type.FLOAT: "Float32", 552 exp.DataType.Type.INT: "Int32", 553 exp.DataType.Type.MEDIUMINT: "Int32", 554 exp.DataType.Type.INT128: "Int128", 555 exp.DataType.Type.INT256: "Int256", 556 exp.DataType.Type.LOWCARDINALITY: "LowCardinality", 557 exp.DataType.Type.MAP: "Map", 558 exp.DataType.Type.NESTED: "Nested", 559 exp.DataType.Type.NULLABLE: "Nullable", 560 exp.DataType.Type.SMALLINT: "Int16", 561 exp.DataType.Type.STRUCT: "Tuple", 562 exp.DataType.Type.TINYINT: "Int8", 563 exp.DataType.Type.UBIGINT: "UInt64", 564 exp.DataType.Type.UINT: "UInt32", 565 exp.DataType.Type.UINT128: "UInt128", 566 exp.DataType.Type.UINT256: "UInt256", 567 exp.DataType.Type.USMALLINT: "UInt16", 568 exp.DataType.Type.UTINYINT: "UInt8", 569 exp.DataType.Type.IPV4: "IPv4", 570 exp.DataType.Type.IPV6: "IPv6", 571 exp.DataType.Type.AGGREGATEFUNCTION: "AggregateFunction", 572 exp.DataType.Type.SIMPLEAGGREGATEFUNCTION: "SimpleAggregateFunction", 573 } 574 575 TRANSFORMS = { 576 **generator.Generator.TRANSFORMS, 577 exp.AnyValue: rename_func("any"), 578 exp.ApproxDistinct: rename_func("uniq"), 579 exp.ArrayFilter: lambda self, e: self.func("arrayFilter", e.expression, e.this), 580 exp.ArraySize: rename_func("LENGTH"), 581 exp.ArraySum: rename_func("arraySum"), 582 exp.ArgMax: arg_max_or_min_no_count("argMax"), 583 exp.ArgMin: arg_max_or_min_no_count("argMin"), 584 exp.Array: inline_array_sql, 585 exp.CastToStrType: rename_func("CAST"), 586 exp.CountIf: rename_func("countIf"), 587 exp.CurrentDate: lambda self, e: self.func("CURRENT_DATE"), 588 exp.DateAdd: date_delta_sql("DATE_ADD"), 589 exp.DateDiff: date_delta_sql("DATE_DIFF"), 590 exp.Explode: rename_func("arrayJoin"), 591 exp.Final: lambda self, e: f"{self.sql(e, 'this')} FINAL", 592 exp.IsNan: rename_func("isNaN"), 593 exp.JSONExtract: json_extract_segments("JSONExtractString", quoted_index=False), 594 exp.JSONExtractScalar: json_extract_segments("JSONExtractString", quoted_index=False), 595 exp.JSONPathKey: json_path_key_only_name, 596 exp.JSONPathRoot: lambda *_: "", 597 exp.Map: lambda self, e: _lower_func(var_map_sql(self, e)), 598 exp.Nullif: rename_func("nullIf"), 599 exp.PartitionedByProperty: lambda self, e: f"PARTITION BY {self.sql(e, 'this')}", 600 exp.Pivot: no_pivot_sql, 601 exp.Quantile: _quantile_sql, 602 exp.RegexpLike: lambda self, e: self.func("match", e.this, e.expression), 603 exp.Rand: rename_func("randCanonical"), 604 exp.Select: transforms.preprocess([transforms.eliminate_qualify]), 605 exp.StartsWith: rename_func("startsWith"), 606 exp.StrPosition: lambda self, e: self.func( 607 "position", e.this, e.args.get("substr"), e.args.get("position") 608 ), 609 exp.VarMap: lambda self, e: _lower_func(var_map_sql(self, e)), 610 exp.Xor: lambda self, e: self.func("xor", e.this, e.expression, *e.expressions), 611 } 612 613 PROPERTIES_LOCATION = { 614 **generator.Generator.PROPERTIES_LOCATION, 615 exp.VolatileProperty: exp.Properties.Location.UNSUPPORTED, 616 exp.PartitionedByProperty: exp.Properties.Location.POST_SCHEMA, 617 exp.OnCluster: exp.Properties.Location.POST_NAME, 618 } 619 620 JOIN_HINTS = False 621 TABLE_HINTS = False 622 EXPLICIT_UNION = True 623 GROUPINGS_SEP = "" 624 625 # there's no list in docs, but it can be found in Clickhouse code 626 # see `ClickHouse/src/Parsers/ParserCreate*.cpp` 627 ON_CLUSTER_TARGETS = { 628 "DATABASE", 629 "TABLE", 630 "VIEW", 631 "DICTIONARY", 632 "INDEX", 633 "FUNCTION", 634 "NAMED COLLECTION", 635 } 636 637 def _jsonpathsubscript_sql(self, expression: exp.JSONPathSubscript) -> str: 638 this = self.json_path_part(expression.this) 639 return str(int(this) + 1) if is_int(this) else this 640 641 def likeproperty_sql(self, expression: exp.LikeProperty) -> str: 642 return f"AS {self.sql(expression, 'this')}" 643 644 def _any_to_has( 645 self, 646 expression: exp.EQ | exp.NEQ, 647 default: t.Callable[[t.Any], str], 648 prefix: str = "", 649 ) -> str: 650 if isinstance(expression.left, exp.Any): 651 arr = expression.left 652 this = expression.right 653 elif isinstance(expression.right, exp.Any): 654 arr = expression.right 655 this = expression.left 656 else: 657 return default(expression) 658 659 return prefix + self.func("has", arr.this.unnest(), this) 660 661 def eq_sql(self, expression: exp.EQ) -> str: 662 return self._any_to_has(expression, super().eq_sql) 663 664 def neq_sql(self, expression: exp.NEQ) -> str: 665 return self._any_to_has(expression, super().neq_sql, "NOT ") 666 667 def regexpilike_sql(self, expression: exp.RegexpILike) -> str: 668 # Manually add a flag to make the search case-insensitive 669 regex = self.func("CONCAT", "'(?i)'", expression.expression) 670 return self.func("match", expression.this, regex) 671 672 def datatype_sql(self, expression: exp.DataType) -> str: 673 # String is the standard ClickHouse type, every other variant is just an alias. 674 # Additionally, any supplied length parameter will be ignored. 675 # 676 # https://clickhouse.com/docs/en/sql-reference/data-types/string 677 if expression.this in self.STRING_TYPE_MAPPING: 678 return "String" 679 680 return super().datatype_sql(expression) 681 682 def cte_sql(self, expression: exp.CTE) -> str: 683 if expression.args.get("scalar"): 684 this = self.sql(expression, "this") 685 alias = self.sql(expression, "alias") 686 return f"{this} AS {alias}" 687 688 return super().cte_sql(expression) 689 690 def after_limit_modifiers(self, expression: exp.Expression) -> t.List[str]: 691 return super().after_limit_modifiers(expression) + [ 692 ( 693 self.seg("SETTINGS ") + self.expressions(expression, key="settings", flat=True) 694 if expression.args.get("settings") 695 else "" 696 ), 697 ( 698 self.seg("FORMAT ") + self.sql(expression, "format") 699 if expression.args.get("format") 700 else "" 701 ), 702 ] 703 704 def parameterizedagg_sql(self, expression: exp.ParameterizedAgg) -> str: 705 params = self.expressions(expression, key="params", flat=True) 706 return self.func(expression.name, *expression.expressions) + f"({params})" 707 708 def anonymousaggfunc_sql(self, expression: exp.AnonymousAggFunc) -> str: 709 return self.func(expression.name, *expression.expressions) 710 711 def combinedaggfunc_sql(self, expression: exp.CombinedAggFunc) -> str: 712 return self.anonymousaggfunc_sql(expression) 713 714 def combinedparameterizedagg_sql(self, expression: exp.CombinedParameterizedAgg) -> str: 715 return self.parameterizedagg_sql(expression) 716 717 def placeholder_sql(self, expression: exp.Placeholder) -> str: 718 return f"{{{expression.name}: {self.sql(expression, 'kind')}}}" 719 720 def oncluster_sql(self, expression: exp.OnCluster) -> str: 721 return f"ON CLUSTER {self.sql(expression, 'this')}" 722 723 def createable_sql(self, expression: exp.Create, locations: t.DefaultDict) -> str: 724 if expression.kind in self.ON_CLUSTER_TARGETS and locations.get( 725 exp.Properties.Location.POST_NAME 726 ): 727 this_name = self.sql(expression.this, "this") 728 this_properties = " ".join( 729 [self.sql(prop) for prop in locations[exp.Properties.Location.POST_NAME]] 730 ) 731 this_schema = self.schema_columns_sql(expression.this) 732 return f"{this_name}{self.sep()}{this_properties}{self.sep()}{this_schema}" 733 734 return super().createable_sql(expression, locations)
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 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 "ENUM": TokenType.ENUM, 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 } 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 "UNIQ": exp.ApproxDistinct.from_arg_list, 134 "XOR": lambda args: exp.Xor(expressions=args), 135 } 136 137 AGG_FUNCTIONS = { 138 "count", 139 "min", 140 "max", 141 "sum", 142 "avg", 143 "any", 144 "stddevPop", 145 "stddevSamp", 146 "varPop", 147 "varSamp", 148 "corr", 149 "covarPop", 150 "covarSamp", 151 "entropy", 152 "exponentialMovingAverage", 153 "intervalLengthSum", 154 "kolmogorovSmirnovTest", 155 "mannWhitneyUTest", 156 "median", 157 "rankCorr", 158 "sumKahan", 159 "studentTTest", 160 "welchTTest", 161 "anyHeavy", 162 "anyLast", 163 "boundingRatio", 164 "first_value", 165 "last_value", 166 "argMin", 167 "argMax", 168 "avgWeighted", 169 "topK", 170 "topKWeighted", 171 "deltaSum", 172 "deltaSumTimestamp", 173 "groupArray", 174 "groupArrayLast", 175 "groupUniqArray", 176 "groupArrayInsertAt", 177 "groupArrayMovingAvg", 178 "groupArrayMovingSum", 179 "groupArraySample", 180 "groupBitAnd", 181 "groupBitOr", 182 "groupBitXor", 183 "groupBitmap", 184 "groupBitmapAnd", 185 "groupBitmapOr", 186 "groupBitmapXor", 187 "sumWithOverflow", 188 "sumMap", 189 "minMap", 190 "maxMap", 191 "skewSamp", 192 "skewPop", 193 "kurtSamp", 194 "kurtPop", 195 "uniq", 196 "uniqExact", 197 "uniqCombined", 198 "uniqCombined64", 199 "uniqHLL12", 200 "uniqTheta", 201 "quantile", 202 "quantiles", 203 "quantileExact", 204 "quantilesExact", 205 "quantileExactLow", 206 "quantilesExactLow", 207 "quantileExactHigh", 208 "quantilesExactHigh", 209 "quantileExactWeighted", 210 "quantilesExactWeighted", 211 "quantileTiming", 212 "quantilesTiming", 213 "quantileTimingWeighted", 214 "quantilesTimingWeighted", 215 "quantileDeterministic", 216 "quantilesDeterministic", 217 "quantileTDigest", 218 "quantilesTDigest", 219 "quantileTDigestWeighted", 220 "quantilesTDigestWeighted", 221 "quantileBFloat16", 222 "quantilesBFloat16", 223 "quantileBFloat16Weighted", 224 "quantilesBFloat16Weighted", 225 "simpleLinearRegression", 226 "stochasticLinearRegression", 227 "stochasticLogisticRegression", 228 "categoricalInformationValue", 229 "contingency", 230 "cramersV", 231 "cramersVBiasCorrected", 232 "theilsU", 233 "maxIntersections", 234 "maxIntersectionsPosition", 235 "meanZTest", 236 "quantileInterpolatedWeighted", 237 "quantilesInterpolatedWeighted", 238 "quantileGK", 239 "quantilesGK", 240 "sparkBar", 241 "sumCount", 242 "largestTriangleThreeBuckets", 243 } 244 245 AGG_FUNCTIONS_SUFFIXES = [ 246 "If", 247 "Array", 248 "ArrayIf", 249 "Map", 250 "SimpleState", 251 "State", 252 "Merge", 253 "MergeState", 254 "ForEach", 255 "Distinct", 256 "OrDefault", 257 "OrNull", 258 "Resample", 259 "ArgMin", 260 "ArgMax", 261 ] 262 263 AGG_FUNC_MAPPING = ( 264 lambda functions, suffixes: { 265 f"{f}{sfx}": (f, sfx) for sfx in (suffixes + [""]) for f in functions 266 } 267 )(AGG_FUNCTIONS, AGG_FUNCTIONS_SUFFIXES) 268 269 FUNCTIONS_WITH_ALIASED_ARGS = {*parser.Parser.FUNCTIONS_WITH_ALIASED_ARGS, "TUPLE"} 270 271 FUNCTION_PARSERS = { 272 **parser.Parser.FUNCTION_PARSERS, 273 "ARRAYJOIN": lambda self: self.expression(exp.Explode, this=self._parse_expression()), 274 "QUANTILE": lambda self: self._parse_quantile(), 275 } 276 277 FUNCTION_PARSERS.pop("MATCH") 278 279 NO_PAREN_FUNCTION_PARSERS = parser.Parser.NO_PAREN_FUNCTION_PARSERS.copy() 280 NO_PAREN_FUNCTION_PARSERS.pop("ANY") 281 282 RANGE_PARSERS = { 283 **parser.Parser.RANGE_PARSERS, 284 TokenType.GLOBAL: lambda self, this: self._match(TokenType.IN) 285 and self._parse_in(this, is_global=True), 286 } 287 288 # The PLACEHOLDER entry is popped because 1) it doesn't affect Clickhouse (it corresponds to 289 # the postgres-specific JSONBContains parser) and 2) it makes parsing the ternary op simpler. 290 COLUMN_OPERATORS = parser.Parser.COLUMN_OPERATORS.copy() 291 COLUMN_OPERATORS.pop(TokenType.PLACEHOLDER) 292 293 JOIN_KINDS = { 294 *parser.Parser.JOIN_KINDS, 295 TokenType.ANY, 296 TokenType.ASOF, 297 TokenType.ARRAY, 298 } 299 300 TABLE_ALIAS_TOKENS = parser.Parser.TABLE_ALIAS_TOKENS - { 301 TokenType.ANY, 302 TokenType.ARRAY, 303 TokenType.FINAL, 304 TokenType.FORMAT, 305 TokenType.SETTINGS, 306 } 307 308 LOG_DEFAULTS_TO_LN = True 309 310 QUERY_MODIFIER_PARSERS = { 311 **parser.Parser.QUERY_MODIFIER_PARSERS, 312 TokenType.SETTINGS: lambda self: ( 313 "settings", 314 self._advance() or self._parse_csv(self._parse_conjunction), 315 ), 316 TokenType.FORMAT: lambda self: ("format", self._advance() or self._parse_id_var()), 317 } 318 319 def _parse_conjunction(self) -> t.Optional[exp.Expression]: 320 this = super()._parse_conjunction() 321 322 if self._match(TokenType.PLACEHOLDER): 323 return self.expression( 324 exp.If, 325 this=this, 326 true=self._parse_conjunction(), 327 false=self._match(TokenType.COLON) and self._parse_conjunction(), 328 ) 329 330 return this 331 332 def _parse_placeholder(self) -> t.Optional[exp.Expression]: 333 """ 334 Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier} 335 https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters 336 """ 337 if not self._match(TokenType.L_BRACE): 338 return None 339 340 this = self._parse_id_var() 341 self._match(TokenType.COLON) 342 kind = self._parse_types(check_func=False, allow_identifiers=False) or ( 343 self._match_text_seq("IDENTIFIER") and "Identifier" 344 ) 345 346 if not kind: 347 self.raise_error("Expecting a placeholder type or 'Identifier' for tables") 348 elif not self._match(TokenType.R_BRACE): 349 self.raise_error("Expecting }") 350 351 return self.expression(exp.Placeholder, this=this, kind=kind) 352 353 def _parse_in(self, this: t.Optional[exp.Expression], is_global: bool = False) -> exp.In: 354 this = super()._parse_in(this) 355 this.set("is_global", is_global) 356 return this 357 358 def _parse_table( 359 self, 360 schema: bool = False, 361 joins: bool = False, 362 alias_tokens: t.Optional[t.Collection[TokenType]] = None, 363 parse_bracket: bool = False, 364 is_db_reference: bool = False, 365 ) -> t.Optional[exp.Expression]: 366 this = super()._parse_table( 367 schema=schema, 368 joins=joins, 369 alias_tokens=alias_tokens, 370 parse_bracket=parse_bracket, 371 is_db_reference=is_db_reference, 372 ) 373 374 if self._match(TokenType.FINAL): 375 this = self.expression(exp.Final, this=this) 376 377 return this 378 379 def _parse_position(self, haystack_first: bool = False) -> exp.StrPosition: 380 return super()._parse_position(haystack_first=True) 381 382 # https://clickhouse.com/docs/en/sql-reference/statements/select/with/ 383 def _parse_cte(self) -> exp.CTE: 384 index = self._index 385 try: 386 # WITH <identifier> AS <subquery expression> 387 return super()._parse_cte() 388 except ParseError: 389 # WITH <expression> AS <identifier> 390 self._retreat(index) 391 392 return self.expression( 393 exp.CTE, 394 this=self._parse_field(), 395 alias=self._parse_table_alias(), 396 scalar=True, 397 ) 398 399 def _parse_join_parts( 400 self, 401 ) -> t.Tuple[t.Optional[Token], t.Optional[Token], t.Optional[Token]]: 402 is_global = self._match(TokenType.GLOBAL) and self._prev 403 kind_pre = self._match_set(self.JOIN_KINDS, advance=False) and self._prev 404 405 if kind_pre: 406 kind = self._match_set(self.JOIN_KINDS) and self._prev 407 side = self._match_set(self.JOIN_SIDES) and self._prev 408 return is_global, side, kind 409 410 return ( 411 is_global, 412 self._match_set(self.JOIN_SIDES) and self._prev, 413 self._match_set(self.JOIN_KINDS) and self._prev, 414 ) 415 416 def _parse_join( 417 self, skip_join_token: bool = False, parse_bracket: bool = False 418 ) -> t.Optional[exp.Join]: 419 join = super()._parse_join(skip_join_token=skip_join_token, parse_bracket=True) 420 if join: 421 join.set("global", join.args.pop("method", None)) 422 423 return join 424 425 def _parse_function( 426 self, 427 functions: t.Optional[t.Dict[str, t.Callable]] = None, 428 anonymous: bool = False, 429 optional_parens: bool = True, 430 ) -> t.Optional[exp.Expression]: 431 func = super()._parse_function( 432 functions=functions, anonymous=anonymous, optional_parens=optional_parens 433 ) 434 435 if isinstance(func, exp.Anonymous): 436 parts = self.AGG_FUNC_MAPPING.get(func.this) 437 params = self._parse_func_params(func) 438 439 if params: 440 if parts and parts[1]: 441 return self.expression( 442 exp.CombinedParameterizedAgg, 443 this=func.this, 444 expressions=func.expressions, 445 params=params, 446 parts=parts, 447 ) 448 return self.expression( 449 exp.ParameterizedAgg, 450 this=func.this, 451 expressions=func.expressions, 452 params=params, 453 ) 454 455 if parts: 456 if parts[1]: 457 return self.expression( 458 exp.CombinedAggFunc, 459 this=func.this, 460 expressions=func.expressions, 461 parts=parts, 462 ) 463 return self.expression( 464 exp.AnonymousAggFunc, 465 this=func.this, 466 expressions=func.expressions, 467 ) 468 469 return func 470 471 def _parse_func_params( 472 self, this: t.Optional[exp.Func] = None 473 ) -> t.Optional[t.List[exp.Expression]]: 474 if self._match_pair(TokenType.R_PAREN, TokenType.L_PAREN): 475 return self._parse_csv(self._parse_lambda) 476 477 if self._match(TokenType.L_PAREN): 478 params = self._parse_csv(self._parse_lambda) 479 self._match_r_paren(this) 480 return params 481 482 return None 483 484 def _parse_quantile(self) -> exp.Quantile: 485 this = self._parse_lambda() 486 params = self._parse_func_params() 487 if params: 488 return self.expression(exp.Quantile, this=params[0], quantile=this) 489 return self.expression(exp.Quantile, this=this, quantile=exp.Literal.number(0.5)) 490 491 def _parse_wrapped_id_vars(self, optional: bool = False) -> t.List[exp.Expression]: 492 return super()._parse_wrapped_id_vars(optional=True) 493 494 def _parse_primary_key( 495 self, wrapped_optional: bool = False, in_props: bool = False 496 ) -> exp.PrimaryKeyColumnConstraint | exp.PrimaryKey: 497 return super()._parse_primary_key( 498 wrapped_optional=wrapped_optional or in_props, in_props=in_props 499 ) 500 501 def _parse_on_property(self) -> t.Optional[exp.Expression]: 502 index = self._index 503 if self._match_text_seq("CLUSTER"): 504 this = self._parse_id_var() 505 if this: 506 return self.expression(exp.OnCluster, this=this) 507 else: 508 self._retreat(index) 509 return None 510 511 class Generator(generator.Generator): 512 QUERY_HINTS = False 513 STRUCT_DELIMITER = ("(", ")") 514 NVL2_SUPPORTED = False 515 TABLESAMPLE_REQUIRES_PARENS = False 516 TABLESAMPLE_SIZE_IS_ROWS = False 517 TABLESAMPLE_KEYWORDS = "SAMPLE" 518 LAST_DAY_SUPPORTS_DATE_PART = False 519 CAN_IMPLEMENT_ARRAY_ANY = True 520 521 STRING_TYPE_MAPPING = { 522 exp.DataType.Type.CHAR: "String", 523 exp.DataType.Type.LONGBLOB: "String", 524 exp.DataType.Type.LONGTEXT: "String", 525 exp.DataType.Type.MEDIUMBLOB: "String", 526 exp.DataType.Type.MEDIUMTEXT: "String", 527 exp.DataType.Type.TINYBLOB: "String", 528 exp.DataType.Type.TINYTEXT: "String", 529 exp.DataType.Type.TEXT: "String", 530 exp.DataType.Type.VARBINARY: "String", 531 exp.DataType.Type.VARCHAR: "String", 532 } 533 534 SUPPORTED_JSON_PATH_PARTS = { 535 exp.JSONPathKey, 536 exp.JSONPathRoot, 537 exp.JSONPathSubscript, 538 } 539 540 TYPE_MAPPING = { 541 **generator.Generator.TYPE_MAPPING, 542 **STRING_TYPE_MAPPING, 543 exp.DataType.Type.ARRAY: "Array", 544 exp.DataType.Type.BIGINT: "Int64", 545 exp.DataType.Type.DATE32: "Date32", 546 exp.DataType.Type.DATETIME64: "DateTime64", 547 exp.DataType.Type.DOUBLE: "Float64", 548 exp.DataType.Type.ENUM: "Enum", 549 exp.DataType.Type.ENUM8: "Enum8", 550 exp.DataType.Type.ENUM16: "Enum16", 551 exp.DataType.Type.FIXEDSTRING: "FixedString", 552 exp.DataType.Type.FLOAT: "Float32", 553 exp.DataType.Type.INT: "Int32", 554 exp.DataType.Type.MEDIUMINT: "Int32", 555 exp.DataType.Type.INT128: "Int128", 556 exp.DataType.Type.INT256: "Int256", 557 exp.DataType.Type.LOWCARDINALITY: "LowCardinality", 558 exp.DataType.Type.MAP: "Map", 559 exp.DataType.Type.NESTED: "Nested", 560 exp.DataType.Type.NULLABLE: "Nullable", 561 exp.DataType.Type.SMALLINT: "Int16", 562 exp.DataType.Type.STRUCT: "Tuple", 563 exp.DataType.Type.TINYINT: "Int8", 564 exp.DataType.Type.UBIGINT: "UInt64", 565 exp.DataType.Type.UINT: "UInt32", 566 exp.DataType.Type.UINT128: "UInt128", 567 exp.DataType.Type.UINT256: "UInt256", 568 exp.DataType.Type.USMALLINT: "UInt16", 569 exp.DataType.Type.UTINYINT: "UInt8", 570 exp.DataType.Type.IPV4: "IPv4", 571 exp.DataType.Type.IPV6: "IPv6", 572 exp.DataType.Type.AGGREGATEFUNCTION: "AggregateFunction", 573 exp.DataType.Type.SIMPLEAGGREGATEFUNCTION: "SimpleAggregateFunction", 574 } 575 576 TRANSFORMS = { 577 **generator.Generator.TRANSFORMS, 578 exp.AnyValue: rename_func("any"), 579 exp.ApproxDistinct: rename_func("uniq"), 580 exp.ArrayFilter: lambda self, e: self.func("arrayFilter", e.expression, e.this), 581 exp.ArraySize: rename_func("LENGTH"), 582 exp.ArraySum: rename_func("arraySum"), 583 exp.ArgMax: arg_max_or_min_no_count("argMax"), 584 exp.ArgMin: arg_max_or_min_no_count("argMin"), 585 exp.Array: inline_array_sql, 586 exp.CastToStrType: rename_func("CAST"), 587 exp.CountIf: rename_func("countIf"), 588 exp.CurrentDate: lambda self, e: self.func("CURRENT_DATE"), 589 exp.DateAdd: date_delta_sql("DATE_ADD"), 590 exp.DateDiff: date_delta_sql("DATE_DIFF"), 591 exp.Explode: rename_func("arrayJoin"), 592 exp.Final: lambda self, e: f"{self.sql(e, 'this')} FINAL", 593 exp.IsNan: rename_func("isNaN"), 594 exp.JSONExtract: json_extract_segments("JSONExtractString", quoted_index=False), 595 exp.JSONExtractScalar: json_extract_segments("JSONExtractString", quoted_index=False), 596 exp.JSONPathKey: json_path_key_only_name, 597 exp.JSONPathRoot: lambda *_: "", 598 exp.Map: lambda self, e: _lower_func(var_map_sql(self, e)), 599 exp.Nullif: rename_func("nullIf"), 600 exp.PartitionedByProperty: lambda self, e: f"PARTITION BY {self.sql(e, 'this')}", 601 exp.Pivot: no_pivot_sql, 602 exp.Quantile: _quantile_sql, 603 exp.RegexpLike: lambda self, e: self.func("match", e.this, e.expression), 604 exp.Rand: rename_func("randCanonical"), 605 exp.Select: transforms.preprocess([transforms.eliminate_qualify]), 606 exp.StartsWith: rename_func("startsWith"), 607 exp.StrPosition: lambda self, e: self.func( 608 "position", e.this, e.args.get("substr"), e.args.get("position") 609 ), 610 exp.VarMap: lambda self, e: _lower_func(var_map_sql(self, e)), 611 exp.Xor: lambda self, e: self.func("xor", e.this, e.expression, *e.expressions), 612 } 613 614 PROPERTIES_LOCATION = { 615 **generator.Generator.PROPERTIES_LOCATION, 616 exp.VolatileProperty: exp.Properties.Location.UNSUPPORTED, 617 exp.PartitionedByProperty: exp.Properties.Location.POST_SCHEMA, 618 exp.OnCluster: exp.Properties.Location.POST_NAME, 619 } 620 621 JOIN_HINTS = False 622 TABLE_HINTS = False 623 EXPLICIT_UNION = True 624 GROUPINGS_SEP = "" 625 626 # there's no list in docs, but it can be found in Clickhouse code 627 # see `ClickHouse/src/Parsers/ParserCreate*.cpp` 628 ON_CLUSTER_TARGETS = { 629 "DATABASE", 630 "TABLE", 631 "VIEW", 632 "DICTIONARY", 633 "INDEX", 634 "FUNCTION", 635 "NAMED COLLECTION", 636 } 637 638 def _jsonpathsubscript_sql(self, expression: exp.JSONPathSubscript) -> str: 639 this = self.json_path_part(expression.this) 640 return str(int(this) + 1) if is_int(this) else this 641 642 def likeproperty_sql(self, expression: exp.LikeProperty) -> str: 643 return f"AS {self.sql(expression, 'this')}" 644 645 def _any_to_has( 646 self, 647 expression: exp.EQ | exp.NEQ, 648 default: t.Callable[[t.Any], str], 649 prefix: str = "", 650 ) -> str: 651 if isinstance(expression.left, exp.Any): 652 arr = expression.left 653 this = expression.right 654 elif isinstance(expression.right, exp.Any): 655 arr = expression.right 656 this = expression.left 657 else: 658 return default(expression) 659 660 return prefix + self.func("has", arr.this.unnest(), this) 661 662 def eq_sql(self, expression: exp.EQ) -> str: 663 return self._any_to_has(expression, super().eq_sql) 664 665 def neq_sql(self, expression: exp.NEQ) -> str: 666 return self._any_to_has(expression, super().neq_sql, "NOT ") 667 668 def regexpilike_sql(self, expression: exp.RegexpILike) -> str: 669 # Manually add a flag to make the search case-insensitive 670 regex = self.func("CONCAT", "'(?i)'", expression.expression) 671 return self.func("match", expression.this, regex) 672 673 def datatype_sql(self, expression: exp.DataType) -> str: 674 # String is the standard ClickHouse type, every other variant is just an alias. 675 # Additionally, any supplied length parameter will be ignored. 676 # 677 # https://clickhouse.com/docs/en/sql-reference/data-types/string 678 if expression.this in self.STRING_TYPE_MAPPING: 679 return "String" 680 681 return super().datatype_sql(expression) 682 683 def cte_sql(self, expression: exp.CTE) -> str: 684 if expression.args.get("scalar"): 685 this = self.sql(expression, "this") 686 alias = self.sql(expression, "alias") 687 return f"{this} AS {alias}" 688 689 return super().cte_sql(expression) 690 691 def after_limit_modifiers(self, expression: exp.Expression) -> t.List[str]: 692 return super().after_limit_modifiers(expression) + [ 693 ( 694 self.seg("SETTINGS ") + self.expressions(expression, key="settings", flat=True) 695 if expression.args.get("settings") 696 else "" 697 ), 698 ( 699 self.seg("FORMAT ") + self.sql(expression, "format") 700 if expression.args.get("format") 701 else "" 702 ), 703 ] 704 705 def parameterizedagg_sql(self, expression: exp.ParameterizedAgg) -> str: 706 params = self.expressions(expression, key="params", flat=True) 707 return self.func(expression.name, *expression.expressions) + f"({params})" 708 709 def anonymousaggfunc_sql(self, expression: exp.AnonymousAggFunc) -> str: 710 return self.func(expression.name, *expression.expressions) 711 712 def combinedaggfunc_sql(self, expression: exp.CombinedAggFunc) -> str: 713 return self.anonymousaggfunc_sql(expression) 714 715 def combinedparameterizedagg_sql(self, expression: exp.CombinedParameterizedAgg) -> str: 716 return self.parameterizedagg_sql(expression) 717 718 def placeholder_sql(self, expression: exp.Placeholder) -> str: 719 return f"{{{expression.name}: {self.sql(expression, 'kind')}}}" 720 721 def oncluster_sql(self, expression: exp.OnCluster) -> str: 722 return f"ON CLUSTER {self.sql(expression, 'this')}" 723 724 def createable_sql(self, expression: exp.Create, locations: t.DefaultDict) -> str: 725 if expression.kind in self.ON_CLUSTER_TARGETS and locations.get( 726 exp.Properties.Location.POST_NAME 727 ): 728 this_name = self.sql(expression.this, "this") 729 this_properties = " ".join( 730 [self.sql(prop) for prop in locations[exp.Properties.Location.POST_NAME]] 731 ) 732 this_schema = self.schema_columns_sql(expression.this) 733 return f"{this_name}{self.sep()}{this_properties}{self.sep()}{this_schema}" 734 735 return super().createable_sql(expression, locations)
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"
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
- LOG_BASE_FIRST
- 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
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 "ENUM": TokenType.ENUM, 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 } 98 99 SINGLE_TOKENS = { 100 **tokens.Tokenizer.SINGLE_TOKENS, 101 "$": TokenType.HEREDOC_STRING, 102 }
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'>, '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'>, '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'>, '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'>, 'TRUNCATE': <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'>, 'ENUM': <TokenType.ENUM: 'ENUM'>, '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'>}
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
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 "UNIQ": exp.ApproxDistinct.from_arg_list, 134 "XOR": lambda args: exp.Xor(expressions=args), 135 } 136 137 AGG_FUNCTIONS = { 138 "count", 139 "min", 140 "max", 141 "sum", 142 "avg", 143 "any", 144 "stddevPop", 145 "stddevSamp", 146 "varPop", 147 "varSamp", 148 "corr", 149 "covarPop", 150 "covarSamp", 151 "entropy", 152 "exponentialMovingAverage", 153 "intervalLengthSum", 154 "kolmogorovSmirnovTest", 155 "mannWhitneyUTest", 156 "median", 157 "rankCorr", 158 "sumKahan", 159 "studentTTest", 160 "welchTTest", 161 "anyHeavy", 162 "anyLast", 163 "boundingRatio", 164 "first_value", 165 "last_value", 166 "argMin", 167 "argMax", 168 "avgWeighted", 169 "topK", 170 "topKWeighted", 171 "deltaSum", 172 "deltaSumTimestamp", 173 "groupArray", 174 "groupArrayLast", 175 "groupUniqArray", 176 "groupArrayInsertAt", 177 "groupArrayMovingAvg", 178 "groupArrayMovingSum", 179 "groupArraySample", 180 "groupBitAnd", 181 "groupBitOr", 182 "groupBitXor", 183 "groupBitmap", 184 "groupBitmapAnd", 185 "groupBitmapOr", 186 "groupBitmapXor", 187 "sumWithOverflow", 188 "sumMap", 189 "minMap", 190 "maxMap", 191 "skewSamp", 192 "skewPop", 193 "kurtSamp", 194 "kurtPop", 195 "uniq", 196 "uniqExact", 197 "uniqCombined", 198 "uniqCombined64", 199 "uniqHLL12", 200 "uniqTheta", 201 "quantile", 202 "quantiles", 203 "quantileExact", 204 "quantilesExact", 205 "quantileExactLow", 206 "quantilesExactLow", 207 "quantileExactHigh", 208 "quantilesExactHigh", 209 "quantileExactWeighted", 210 "quantilesExactWeighted", 211 "quantileTiming", 212 "quantilesTiming", 213 "quantileTimingWeighted", 214 "quantilesTimingWeighted", 215 "quantileDeterministic", 216 "quantilesDeterministic", 217 "quantileTDigest", 218 "quantilesTDigest", 219 "quantileTDigestWeighted", 220 "quantilesTDigestWeighted", 221 "quantileBFloat16", 222 "quantilesBFloat16", 223 "quantileBFloat16Weighted", 224 "quantilesBFloat16Weighted", 225 "simpleLinearRegression", 226 "stochasticLinearRegression", 227 "stochasticLogisticRegression", 228 "categoricalInformationValue", 229 "contingency", 230 "cramersV", 231 "cramersVBiasCorrected", 232 "theilsU", 233 "maxIntersections", 234 "maxIntersectionsPosition", 235 "meanZTest", 236 "quantileInterpolatedWeighted", 237 "quantilesInterpolatedWeighted", 238 "quantileGK", 239 "quantilesGK", 240 "sparkBar", 241 "sumCount", 242 "largestTriangleThreeBuckets", 243 } 244 245 AGG_FUNCTIONS_SUFFIXES = [ 246 "If", 247 "Array", 248 "ArrayIf", 249 "Map", 250 "SimpleState", 251 "State", 252 "Merge", 253 "MergeState", 254 "ForEach", 255 "Distinct", 256 "OrDefault", 257 "OrNull", 258 "Resample", 259 "ArgMin", 260 "ArgMax", 261 ] 262 263 AGG_FUNC_MAPPING = ( 264 lambda functions, suffixes: { 265 f"{f}{sfx}": (f, sfx) for sfx in (suffixes + [""]) for f in functions 266 } 267 )(AGG_FUNCTIONS, AGG_FUNCTIONS_SUFFIXES) 268 269 FUNCTIONS_WITH_ALIASED_ARGS = {*parser.Parser.FUNCTIONS_WITH_ALIASED_ARGS, "TUPLE"} 270 271 FUNCTION_PARSERS = { 272 **parser.Parser.FUNCTION_PARSERS, 273 "ARRAYJOIN": lambda self: self.expression(exp.Explode, this=self._parse_expression()), 274 "QUANTILE": lambda self: self._parse_quantile(), 275 } 276 277 FUNCTION_PARSERS.pop("MATCH") 278 279 NO_PAREN_FUNCTION_PARSERS = parser.Parser.NO_PAREN_FUNCTION_PARSERS.copy() 280 NO_PAREN_FUNCTION_PARSERS.pop("ANY") 281 282 RANGE_PARSERS = { 283 **parser.Parser.RANGE_PARSERS, 284 TokenType.GLOBAL: lambda self, this: self._match(TokenType.IN) 285 and self._parse_in(this, is_global=True), 286 } 287 288 # The PLACEHOLDER entry is popped because 1) it doesn't affect Clickhouse (it corresponds to 289 # the postgres-specific JSONBContains parser) and 2) it makes parsing the ternary op simpler. 290 COLUMN_OPERATORS = parser.Parser.COLUMN_OPERATORS.copy() 291 COLUMN_OPERATORS.pop(TokenType.PLACEHOLDER) 292 293 JOIN_KINDS = { 294 *parser.Parser.JOIN_KINDS, 295 TokenType.ANY, 296 TokenType.ASOF, 297 TokenType.ARRAY, 298 } 299 300 TABLE_ALIAS_TOKENS = parser.Parser.TABLE_ALIAS_TOKENS - { 301 TokenType.ANY, 302 TokenType.ARRAY, 303 TokenType.FINAL, 304 TokenType.FORMAT, 305 TokenType.SETTINGS, 306 } 307 308 LOG_DEFAULTS_TO_LN = True 309 310 QUERY_MODIFIER_PARSERS = { 311 **parser.Parser.QUERY_MODIFIER_PARSERS, 312 TokenType.SETTINGS: lambda self: ( 313 "settings", 314 self._advance() or self._parse_csv(self._parse_conjunction), 315 ), 316 TokenType.FORMAT: lambda self: ("format", self._advance() or self._parse_id_var()), 317 } 318 319 def _parse_conjunction(self) -> t.Optional[exp.Expression]: 320 this = super()._parse_conjunction() 321 322 if self._match(TokenType.PLACEHOLDER): 323 return self.expression( 324 exp.If, 325 this=this, 326 true=self._parse_conjunction(), 327 false=self._match(TokenType.COLON) and self._parse_conjunction(), 328 ) 329 330 return this 331 332 def _parse_placeholder(self) -> t.Optional[exp.Expression]: 333 """ 334 Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier} 335 https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters 336 """ 337 if not self._match(TokenType.L_BRACE): 338 return None 339 340 this = self._parse_id_var() 341 self._match(TokenType.COLON) 342 kind = self._parse_types(check_func=False, allow_identifiers=False) or ( 343 self._match_text_seq("IDENTIFIER") and "Identifier" 344 ) 345 346 if not kind: 347 self.raise_error("Expecting a placeholder type or 'Identifier' for tables") 348 elif not self._match(TokenType.R_BRACE): 349 self.raise_error("Expecting }") 350 351 return self.expression(exp.Placeholder, this=this, kind=kind) 352 353 def _parse_in(self, this: t.Optional[exp.Expression], is_global: bool = False) -> exp.In: 354 this = super()._parse_in(this) 355 this.set("is_global", is_global) 356 return this 357 358 def _parse_table( 359 self, 360 schema: bool = False, 361 joins: bool = False, 362 alias_tokens: t.Optional[t.Collection[TokenType]] = None, 363 parse_bracket: bool = False, 364 is_db_reference: bool = False, 365 ) -> t.Optional[exp.Expression]: 366 this = super()._parse_table( 367 schema=schema, 368 joins=joins, 369 alias_tokens=alias_tokens, 370 parse_bracket=parse_bracket, 371 is_db_reference=is_db_reference, 372 ) 373 374 if self._match(TokenType.FINAL): 375 this = self.expression(exp.Final, this=this) 376 377 return this 378 379 def _parse_position(self, haystack_first: bool = False) -> exp.StrPosition: 380 return super()._parse_position(haystack_first=True) 381 382 # https://clickhouse.com/docs/en/sql-reference/statements/select/with/ 383 def _parse_cte(self) -> exp.CTE: 384 index = self._index 385 try: 386 # WITH <identifier> AS <subquery expression> 387 return super()._parse_cte() 388 except ParseError: 389 # WITH <expression> AS <identifier> 390 self._retreat(index) 391 392 return self.expression( 393 exp.CTE, 394 this=self._parse_field(), 395 alias=self._parse_table_alias(), 396 scalar=True, 397 ) 398 399 def _parse_join_parts( 400 self, 401 ) -> t.Tuple[t.Optional[Token], t.Optional[Token], t.Optional[Token]]: 402 is_global = self._match(TokenType.GLOBAL) and self._prev 403 kind_pre = self._match_set(self.JOIN_KINDS, advance=False) and self._prev 404 405 if kind_pre: 406 kind = self._match_set(self.JOIN_KINDS) and self._prev 407 side = self._match_set(self.JOIN_SIDES) and self._prev 408 return is_global, side, kind 409 410 return ( 411 is_global, 412 self._match_set(self.JOIN_SIDES) and self._prev, 413 self._match_set(self.JOIN_KINDS) and self._prev, 414 ) 415 416 def _parse_join( 417 self, skip_join_token: bool = False, parse_bracket: bool = False 418 ) -> t.Optional[exp.Join]: 419 join = super()._parse_join(skip_join_token=skip_join_token, parse_bracket=True) 420 if join: 421 join.set("global", join.args.pop("method", None)) 422 423 return join 424 425 def _parse_function( 426 self, 427 functions: t.Optional[t.Dict[str, t.Callable]] = None, 428 anonymous: bool = False, 429 optional_parens: bool = True, 430 ) -> t.Optional[exp.Expression]: 431 func = super()._parse_function( 432 functions=functions, anonymous=anonymous, optional_parens=optional_parens 433 ) 434 435 if isinstance(func, exp.Anonymous): 436 parts = self.AGG_FUNC_MAPPING.get(func.this) 437 params = self._parse_func_params(func) 438 439 if params: 440 if parts and parts[1]: 441 return self.expression( 442 exp.CombinedParameterizedAgg, 443 this=func.this, 444 expressions=func.expressions, 445 params=params, 446 parts=parts, 447 ) 448 return self.expression( 449 exp.ParameterizedAgg, 450 this=func.this, 451 expressions=func.expressions, 452 params=params, 453 ) 454 455 if parts: 456 if parts[1]: 457 return self.expression( 458 exp.CombinedAggFunc, 459 this=func.this, 460 expressions=func.expressions, 461 parts=parts, 462 ) 463 return self.expression( 464 exp.AnonymousAggFunc, 465 this=func.this, 466 expressions=func.expressions, 467 ) 468 469 return func 470 471 def _parse_func_params( 472 self, this: t.Optional[exp.Func] = None 473 ) -> t.Optional[t.List[exp.Expression]]: 474 if self._match_pair(TokenType.R_PAREN, TokenType.L_PAREN): 475 return self._parse_csv(self._parse_lambda) 476 477 if self._match(TokenType.L_PAREN): 478 params = self._parse_csv(self._parse_lambda) 479 self._match_r_paren(this) 480 return params 481 482 return None 483 484 def _parse_quantile(self) -> exp.Quantile: 485 this = self._parse_lambda() 486 params = self._parse_func_params() 487 if params: 488 return self.expression(exp.Quantile, this=params[0], quantile=this) 489 return self.expression(exp.Quantile, this=this, quantile=exp.Literal.number(0.5)) 490 491 def _parse_wrapped_id_vars(self, optional: bool = False) -> t.List[exp.Expression]: 492 return super()._parse_wrapped_id_vars(optional=True) 493 494 def _parse_primary_key( 495 self, wrapped_optional: bool = False, in_props: bool = False 496 ) -> exp.PrimaryKeyColumnConstraint | exp.PrimaryKey: 497 return super()._parse_primary_key( 498 wrapped_optional=wrapped_optional or in_props, in_props=in_props 499 ) 500 501 def _parse_on_property(self) -> t.Optional[exp.Expression]: 502 index = self._index 503 if self._match_text_seq("CLUSTER"): 504 this = self._parse_id_var() 505 if this: 506 return self.expression(exp.OnCluster, this=this) 507 else: 508 self._retreat(index) 509 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'>>, '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_JOIN': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ArrayJoin'>>, '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_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>>, '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_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>, 'LOG10': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Log10'>>, 'LOG2': <bound method Func.from_arg_list of <class 'sqlglot.expressions.Log2'>>, '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'>>, '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'>>, '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>, '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'>>, 'UNIQ': <bound method Func.from_arg_list of <class 'sqlglot.expressions.ApproxDistinct'>>}
AGG_FUNCTIONS =
{'first_value', 'groupBitAnd', 'groupBitmap', 'groupBitmapAnd', 'quantilesExact', 'groupArrayInsertAt', 'uniqHLL12', 'argMax', 'quantileExactWeighted', 'quantileGK', 'cramersV', 'kurtSamp', 'maxIntersectionsPosition', 'quantileExact', 'quantiles', 'quantilesTiming', 'quantilesTimingWeighted', 'quantilesInterpolatedWeighted', 'deltaSum', 'quantileExactLow', 'simpleLinearRegression', 'quantileExactHigh', 'stochasticLinearRegression', 'quantilesBFloat16', 'groupArray', 'corr', 'skewSamp', 'quantilesExactWeighted', 'last_value', 'stddevSamp', 'meanZTest', 'minMap', 'groupArrayLast', 'groupUniqArray', 'largestTriangleThreeBuckets', 'sum', 'median', 'groupArrayMovingSum', 'quantilesExactHigh', 'covarPop', 'boundingRatio', 'quantilesGK', 'theilsU', 'deltaSumTimestamp', 'stochasticLogisticRegression', 'quantilesTDigest', 'studentTTest', 'maxIntersections', 'quantilesBFloat16Weighted', 'kurtPop', 'quantileTimingWeighted', 'sumMap', 'anyHeavy', 'groupBitmapXor', 'uniqCombined', 'varPop', 'min', 'quantilesDeterministic', 'sparkBar', 'max', 'cramersVBiasCorrected', 'quantileInterpolatedWeighted', 'groupArraySample', 'varSamp', 'exponentialMovingAverage', 'count', 'intervalLengthSum', 'mannWhitneyUTest', 'quantileDeterministic', 'groupBitmapOr', 'sumCount', 'argMin', 'uniq', 'avgWeighted', 'avg', 'rankCorr', 'groupArrayMovingAvg', 'contingency', 'uniqExact', 'stddevPop', 'quantileTDigest', 'quantileTDigestWeighted', 'maxMap', 'welchTTest', 'quantilesExactLow', 'quantilesTDigestWeighted', 'quantileBFloat16Weighted', 'quantile', 'covarSamp', 'quantileTiming', 'groupBitXor', 'sumWithOverflow', 'quantileBFloat16', 'entropy', 'categoricalInformationValue', 'kolmogorovSmirnovTest', 'sumKahan', 'topK', 'groupBitOr', 'anyLast', 'topKWeighted', 'any', 'skewPop', 'uniqCombined64', 'uniqTheta'}
AGG_FUNCTIONS_SUFFIXES =
['If', 'Array', 'ArrayIf', 'Map', 'SimpleState', 'State', 'Merge', 'MergeState', 'ForEach', 'Distinct', 'OrDefault', 'OrNull', 'Resample', 'ArgMin', 'ArgMax']
AGG_FUNC_MAPPING =
{'first_valueIf': ('first_value', 'If'), 'groupBitAndIf': ('groupBitAnd', 'If'), 'groupBitmapIf': ('groupBitmap', 'If'), 'groupBitmapAndIf': ('groupBitmapAnd', 'If'), 'quantilesExactIf': ('quantilesExact', 'If'), 'groupArrayInsertAtIf': ('groupArrayInsertAt', 'If'), 'uniqHLL12If': ('uniqHLL12', 'If'), 'argMaxIf': ('argMax', 'If'), 'quantileExactWeightedIf': ('quantileExactWeighted', 'If'), 'quantileGKIf': ('quantileGK', 'If'), 'cramersVIf': ('cramersV', 'If'), 'kurtSampIf': ('kurtSamp', 'If'), 'maxIntersectionsPositionIf': ('maxIntersectionsPosition', 'If'), 'quantileExactIf': ('quantileExact', 'If'), 'quantilesIf': ('quantiles', 'If'), 'quantilesTimingIf': ('quantilesTiming', 'If'), 'quantilesTimingWeightedIf': ('quantilesTimingWeighted', 'If'), 'quantilesInterpolatedWeightedIf': ('quantilesInterpolatedWeighted', 'If'), 'deltaSumIf': ('deltaSum', 'If'), 'quantileExactLowIf': ('quantileExactLow', 'If'), 'simpleLinearRegressionIf': ('simpleLinearRegression', 'If'), 'quantileExactHighIf': ('quantileExactHigh', 'If'), 'stochasticLinearRegressionIf': ('stochasticLinearRegression', 'If'), 'quantilesBFloat16If': ('quantilesBFloat16', 'If'), 'groupArrayIf': ('groupArray', 'If'), 'corrIf': ('corr', 'If'), 'skewSampIf': ('skewSamp', 'If'), 'quantilesExactWeightedIf': ('quantilesExactWeighted', 'If'), 'last_valueIf': ('last_value', 'If'), 'stddevSampIf': ('stddevSamp', 'If'), 'meanZTestIf': ('meanZTest', 'If'), 'minMapIf': ('minMap', 'If'), 'groupArrayLastIf': ('groupArrayLast', 'If'), 'groupUniqArrayIf': ('groupUniqArray', 'If'), 'largestTriangleThreeBucketsIf': ('largestTriangleThreeBuckets', 'If'), 'sumIf': ('sum', 'If'), 'medianIf': ('median', 'If'), 'groupArrayMovingSumIf': ('groupArrayMovingSum', 'If'), 'quantilesExactHighIf': ('quantilesExactHigh', 'If'), 'covarPopIf': ('covarPop', 'If'), 'boundingRatioIf': ('boundingRatio', 'If'), 'quantilesGKIf': ('quantilesGK', 'If'), 'theilsUIf': ('theilsU', 'If'), 'deltaSumTimestampIf': ('deltaSumTimestamp', 'If'), 'stochasticLogisticRegressionIf': ('stochasticLogisticRegression', 'If'), 'quantilesTDigestIf': ('quantilesTDigest', 'If'), 'studentTTestIf': ('studentTTest', 'If'), 'maxIntersectionsIf': ('maxIntersections', 'If'), 'quantilesBFloat16WeightedIf': ('quantilesBFloat16Weighted', 'If'), 'kurtPopIf': ('kurtPop', 'If'), 'quantileTimingWeightedIf': ('quantileTimingWeighted', 'If'), 'sumMapIf': ('sumMap', 'If'), 'anyHeavyIf': ('anyHeavy', 'If'), 'groupBitmapXorIf': ('groupBitmapXor', 'If'), 'uniqCombinedIf': ('uniqCombined', 'If'), 'varPopIf': ('varPop', 'If'), 'minIf': ('min', 'If'), 'quantilesDeterministicIf': ('quantilesDeterministic', 'If'), 'sparkBarIf': ('sparkBar', 'If'), 'maxIf': ('max', 'If'), 'cramersVBiasCorrectedIf': ('cramersVBiasCorrected', 'If'), 'quantileInterpolatedWeightedIf': ('quantileInterpolatedWeighted', 'If'), 'groupArraySampleIf': ('groupArraySample', 'If'), 'varSampIf': ('varSamp', 'If'), 'exponentialMovingAverageIf': ('exponentialMovingAverage', 'If'), 'countIf': ('count', 'If'), 'intervalLengthSumIf': ('intervalLengthSum', 'If'), 'mannWhitneyUTestIf': ('mannWhitneyUTest', 'If'), 'quantileDeterministicIf': ('quantileDeterministic', 'If'), 'groupBitmapOrIf': ('groupBitmapOr', 'If'), 'sumCountIf': ('sumCount', 'If'), 'argMinIf': ('argMin', 'If'), 'uniqIf': ('uniq', 'If'), 'avgWeightedIf': ('avgWeighted', 'If'), 'avgIf': ('avg', 'If'), 'rankCorrIf': ('rankCorr', 'If'), 'groupArrayMovingAvgIf': ('groupArrayMovingAvg', 'If'), 'contingencyIf': ('contingency', 'If'), 'uniqExactIf': ('uniqExact', 'If'), 'stddevPopIf': ('stddevPop', 'If'), 'quantileTDigestIf': ('quantileTDigest', 'If'), 'quantileTDigestWeightedIf': ('quantileTDigestWeighted', 'If'), 'maxMapIf': ('maxMap', 'If'), 'welchTTestIf': ('welchTTest', 'If'), 'quantilesExactLowIf': ('quantilesExactLow', 'If'), 'quantilesTDigestWeightedIf': ('quantilesTDigestWeighted', 'If'), 'quantileBFloat16WeightedIf': ('quantileBFloat16Weighted', 'If'), 'quantileIf': ('quantile', 'If'), 'covarSampIf': ('covarSamp', 'If'), 'quantileTimingIf': ('quantileTiming', 'If'), 'groupBitXorIf': ('groupBitXor', 'If'), 'sumWithOverflowIf': ('sumWithOverflow', 'If'), 'quantileBFloat16If': ('quantileBFloat16', 'If'), 'entropyIf': ('entropy', 'If'), 'categoricalInformationValueIf': ('categoricalInformationValue', 'If'), 'kolmogorovSmirnovTestIf': ('kolmogorovSmirnovTest', 'If'), 'sumKahanIf': ('sumKahan', 'If'), 'topKIf': ('topK', 'If'), 'groupBitOrIf': ('groupBitOr', 'If'), 'anyLastIf': ('anyLast', 'If'), 'topKWeightedIf': ('topKWeighted', 'If'), 'anyIf': ('any', 'If'), 'skewPopIf': ('skewPop', 'If'), 'uniqCombined64If': ('uniqCombined64', 'If'), 'uniqThetaIf': ('uniqTheta', 'If'), 'first_valueArray': ('first_value', 'Array'), 'groupBitAndArray': ('groupBitAnd', 'Array'), 'groupBitmapArray': ('groupBitmap', 'Array'), 'groupBitmapAndArray': ('groupBitmapAnd', 'Array'), 'quantilesExactArray': ('quantilesExact', 'Array'), 'groupArrayInsertAtArray': ('groupArrayInsertAt', 'Array'), 'uniqHLL12Array': ('uniqHLL12', 'Array'), 'argMaxArray': ('argMax', 'Array'), 'quantileExactWeightedArray': ('quantileExactWeighted', 'Array'), 'quantileGKArray': ('quantileGK', 'Array'), 'cramersVArray': ('cramersV', 'Array'), 'kurtSampArray': ('kurtSamp', 'Array'), 'maxIntersectionsPositionArray': ('maxIntersectionsPosition', 'Array'), 'quantileExactArray': ('quantileExact', 'Array'), 'quantilesArray': ('quantiles', 'Array'), 'quantilesTimingArray': ('quantilesTiming', 'Array'), 'quantilesTimingWeightedArray': ('quantilesTimingWeighted', 'Array'), 'quantilesInterpolatedWeightedArray': ('quantilesInterpolatedWeighted', 'Array'), 'deltaSumArray': ('deltaSum', 'Array'), 'quantileExactLowArray': ('quantileExactLow', 'Array'), 'simpleLinearRegressionArray': ('simpleLinearRegression', 'Array'), 'quantileExactHighArray': ('quantileExactHigh', 'Array'), 'stochasticLinearRegressionArray': ('stochasticLinearRegression', 'Array'), 'quantilesBFloat16Array': ('quantilesBFloat16', 'Array'), 'groupArrayArray': ('groupArray', 'Array'), 'corrArray': ('corr', 'Array'), 'skewSampArray': ('skewSamp', 'Array'), 'quantilesExactWeightedArray': ('quantilesExactWeighted', 'Array'), 'last_valueArray': ('last_value', 'Array'), 'stddevSampArray': ('stddevSamp', 'Array'), 'meanZTestArray': ('meanZTest', 'Array'), 'minMapArray': ('minMap', 'Array'), 'groupArrayLastArray': ('groupArrayLast', 'Array'), 'groupUniqArrayArray': ('groupUniqArray', 'Array'), 'largestTriangleThreeBucketsArray': ('largestTriangleThreeBuckets', 'Array'), 'sumArray': ('sum', 'Array'), 'medianArray': ('median', 'Array'), 'groupArrayMovingSumArray': ('groupArrayMovingSum', 'Array'), 'quantilesExactHighArray': ('quantilesExactHigh', 'Array'), 'covarPopArray': ('covarPop', 'Array'), 'boundingRatioArray': ('boundingRatio', 'Array'), 'quantilesGKArray': ('quantilesGK', 'Array'), 'theilsUArray': ('theilsU', 'Array'), 'deltaSumTimestampArray': ('deltaSumTimestamp', 'Array'), 'stochasticLogisticRegressionArray': ('stochasticLogisticRegression', 'Array'), 'quantilesTDigestArray': ('quantilesTDigest', 'Array'), 'studentTTestArray': ('studentTTest', 'Array'), 'maxIntersectionsArray': ('maxIntersections', 'Array'), 'quantilesBFloat16WeightedArray': ('quantilesBFloat16Weighted', 'Array'), 'kurtPopArray': ('kurtPop', 'Array'), 'quantileTimingWeightedArray': ('quantileTimingWeighted', 'Array'), 'sumMapArray': ('sumMap', 'Array'), 'anyHeavyArray': ('anyHeavy', 'Array'), 'groupBitmapXorArray': ('groupBitmapXor', 'Array'), 'uniqCombinedArray': ('uniqCombined', 'Array'), 'varPopArray': ('varPop', 'Array'), 'minArray': ('min', 'Array'), 'quantilesDeterministicArray': ('quantilesDeterministic', 'Array'), 'sparkBarArray': ('sparkBar', 'Array'), 'maxArray': ('max', 'Array'), 'cramersVBiasCorrectedArray': ('cramersVBiasCorrected', 'Array'), 'quantileInterpolatedWeightedArray': ('quantileInterpolatedWeighted', 'Array'), 'groupArraySampleArray': ('groupArraySample', 'Array'), 'varSampArray': ('varSamp', 'Array'), 'exponentialMovingAverageArray': ('exponentialMovingAverage', 'Array'), 'countArray': ('count', 'Array'), 'intervalLengthSumArray': ('intervalLengthSum', 'Array'), 'mannWhitneyUTestArray': ('mannWhitneyUTest', 'Array'), 'quantileDeterministicArray': ('quantileDeterministic', 'Array'), 'groupBitmapOrArray': ('groupBitmapOr', 'Array'), 'sumCountArray': ('sumCount', 'Array'), 'argMinArray': ('argMin', 'Array'), 'uniqArray': ('uniq', 'Array'), 'avgWeightedArray': ('avgWeighted', 'Array'), 'avgArray': ('avg', 'Array'), 'rankCorrArray': ('rankCorr', 'Array'), 'groupArrayMovingAvgArray': ('groupArrayMovingAvg', 'Array'), 'contingencyArray': ('contingency', 'Array'), 'uniqExactArray': ('uniqExact', 'Array'), 'stddevPopArray': ('stddevPop', 'Array'), 'quantileTDigestArray': ('quantileTDigest', 'Array'), 'quantileTDigestWeightedArray': ('quantileTDigestWeighted', 'Array'), 'maxMapArray': ('maxMap', 'Array'), 'welchTTestArray': ('welchTTest', 'Array'), 'quantilesExactLowArray': ('quantilesExactLow', 'Array'), 'quantilesTDigestWeightedArray': ('quantilesTDigestWeighted', 'Array'), 'quantileBFloat16WeightedArray': ('quantileBFloat16Weighted', 'Array'), 'quantileArray': ('quantile', 'Array'), 'covarSampArray': ('covarSamp', 'Array'), 'quantileTimingArray': ('quantileTiming', 'Array'), 'groupBitXorArray': ('groupBitXor', 'Array'), 'sumWithOverflowArray': ('sumWithOverflow', 'Array'), 'quantileBFloat16Array': ('quantileBFloat16', 'Array'), 'entropyArray': ('entropy', 'Array'), 'categoricalInformationValueArray': ('categoricalInformationValue', 'Array'), 'kolmogorovSmirnovTestArray': ('kolmogorovSmirnovTest', 'Array'), 'sumKahanArray': ('sumKahan', 'Array'), 'topKArray': ('topK', 'Array'), 'groupBitOrArray': ('groupBitOr', 'Array'), 'anyLastArray': ('anyLast', 'Array'), 'topKWeightedArray': ('topKWeighted', 'Array'), 'anyArray': ('any', 'Array'), 'skewPopArray': ('skewPop', 'Array'), 'uniqCombined64Array': ('uniqCombined64', 'Array'), 'uniqThetaArray': ('uniqTheta', 'Array'), 'first_valueArrayIf': ('first_value', 'ArrayIf'), 'groupBitAndArrayIf': ('groupBitAnd', 'ArrayIf'), 'groupBitmapArrayIf': ('groupBitmap', 'ArrayIf'), 'groupBitmapAndArrayIf': ('groupBitmapAnd', 'ArrayIf'), 'quantilesExactArrayIf': ('quantilesExact', 'ArrayIf'), 'groupArrayInsertAtArrayIf': ('groupArrayInsertAt', 'ArrayIf'), 'uniqHLL12ArrayIf': ('uniqHLL12', 'ArrayIf'), 'argMaxArrayIf': ('argMax', 'ArrayIf'), 'quantileExactWeightedArrayIf': ('quantileExactWeighted', 'ArrayIf'), 'quantileGKArrayIf': ('quantileGK', 'ArrayIf'), 'cramersVArrayIf': ('cramersV', 'ArrayIf'), 'kurtSampArrayIf': ('kurtSamp', 'ArrayIf'), 'maxIntersectionsPositionArrayIf': ('maxIntersectionsPosition', 'ArrayIf'), 'quantileExactArrayIf': ('quantileExact', 'ArrayIf'), 'quantilesArrayIf': ('quantiles', 'ArrayIf'), 'quantilesTimingArrayIf': ('quantilesTiming', 'ArrayIf'), 'quantilesTimingWeightedArrayIf': ('quantilesTimingWeighted', 'ArrayIf'), 'quantilesInterpolatedWeightedArrayIf': ('quantilesInterpolatedWeighted', 'ArrayIf'), 'deltaSumArrayIf': ('deltaSum', 'ArrayIf'), 'quantileExactLowArrayIf': ('quantileExactLow', 'ArrayIf'), 'simpleLinearRegressionArrayIf': ('simpleLinearRegression', 'ArrayIf'), 'quantileExactHighArrayIf': ('quantileExactHigh', 'ArrayIf'), 'stochasticLinearRegressionArrayIf': ('stochasticLinearRegression', 'ArrayIf'), 'quantilesBFloat16ArrayIf': ('quantilesBFloat16', 'ArrayIf'), 'groupArrayArrayIf': ('groupArray', 'ArrayIf'), 'corrArrayIf': ('corr', 'ArrayIf'), 'skewSampArrayIf': ('skewSamp', 'ArrayIf'), 'quantilesExactWeightedArrayIf': ('quantilesExactWeighted', 'ArrayIf'), 'last_valueArrayIf': ('last_value', 'ArrayIf'), 'stddevSampArrayIf': ('stddevSamp', 'ArrayIf'), 'meanZTestArrayIf': ('meanZTest', 'ArrayIf'), 'minMapArrayIf': ('minMap', 'ArrayIf'), 'groupArrayLastArrayIf': ('groupArrayLast', 'ArrayIf'), 'groupUniqArrayArrayIf': ('groupUniqArray', 'ArrayIf'), 'largestTriangleThreeBucketsArrayIf': ('largestTriangleThreeBuckets', 'ArrayIf'), 'sumArrayIf': ('sum', 'ArrayIf'), 'medianArrayIf': ('median', 'ArrayIf'), 'groupArrayMovingSumArrayIf': ('groupArrayMovingSum', 'ArrayIf'), 'quantilesExactHighArrayIf': ('quantilesExactHigh', 'ArrayIf'), 'covarPopArrayIf': ('covarPop', 'ArrayIf'), 'boundingRatioArrayIf': ('boundingRatio', 'ArrayIf'), 'quantilesGKArrayIf': ('quantilesGK', 'ArrayIf'), 'theilsUArrayIf': ('theilsU', 'ArrayIf'), 'deltaSumTimestampArrayIf': ('deltaSumTimestamp', 'ArrayIf'), 'stochasticLogisticRegressionArrayIf': ('stochasticLogisticRegression', 'ArrayIf'), 'quantilesTDigestArrayIf': ('quantilesTDigest', 'ArrayIf'), 'studentTTestArrayIf': ('studentTTest', 'ArrayIf'), 'maxIntersectionsArrayIf': ('maxIntersections', 'ArrayIf'), 'quantilesBFloat16WeightedArrayIf': ('quantilesBFloat16Weighted', 'ArrayIf'), 'kurtPopArrayIf': ('kurtPop', 'ArrayIf'), 'quantileTimingWeightedArrayIf': ('quantileTimingWeighted', 'ArrayIf'), 'sumMapArrayIf': ('sumMap', 'ArrayIf'), 'anyHeavyArrayIf': ('anyHeavy', 'ArrayIf'), 'groupBitmapXorArrayIf': ('groupBitmapXor', 'ArrayIf'), 'uniqCombinedArrayIf': ('uniqCombined', 'ArrayIf'), 'varPopArrayIf': ('varPop', 'ArrayIf'), 'minArrayIf': ('min', 'ArrayIf'), 'quantilesDeterministicArrayIf': ('quantilesDeterministic', 'ArrayIf'), 'sparkBarArrayIf': ('sparkBar', 'ArrayIf'), 'maxArrayIf': ('max', 'ArrayIf'), 'cramersVBiasCorrectedArrayIf': ('cramersVBiasCorrected', 'ArrayIf'), 'quantileInterpolatedWeightedArrayIf': ('quantileInterpolatedWeighted', 'ArrayIf'), 'groupArraySampleArrayIf': ('groupArraySample', 'ArrayIf'), 'varSampArrayIf': ('varSamp', 'ArrayIf'), 'exponentialMovingAverageArrayIf': ('exponentialMovingAverage', 'ArrayIf'), 'countArrayIf': ('count', 'ArrayIf'), 'intervalLengthSumArrayIf': ('intervalLengthSum', 'ArrayIf'), 'mannWhitneyUTestArrayIf': ('mannWhitneyUTest', 'ArrayIf'), 'quantileDeterministicArrayIf': ('quantileDeterministic', 'ArrayIf'), 'groupBitmapOrArrayIf': ('groupBitmapOr', 'ArrayIf'), 'sumCountArrayIf': ('sumCount', 'ArrayIf'), 'argMinArrayIf': ('argMin', 'ArrayIf'), 'uniqArrayIf': ('uniq', 'ArrayIf'), 'avgWeightedArrayIf': ('avgWeighted', 'ArrayIf'), 'avgArrayIf': ('avg', 'ArrayIf'), 'rankCorrArrayIf': ('rankCorr', 'ArrayIf'), 'groupArrayMovingAvgArrayIf': ('groupArrayMovingAvg', 'ArrayIf'), 'contingencyArrayIf': ('contingency', 'ArrayIf'), 'uniqExactArrayIf': ('uniqExact', 'ArrayIf'), 'stddevPopArrayIf': ('stddevPop', 'ArrayIf'), 'quantileTDigestArrayIf': ('quantileTDigest', 'ArrayIf'), 'quantileTDigestWeightedArrayIf': ('quantileTDigestWeighted', 'ArrayIf'), 'maxMapArrayIf': ('maxMap', 'ArrayIf'), 'welchTTestArrayIf': ('welchTTest', 'ArrayIf'), 'quantilesExactLowArrayIf': ('quantilesExactLow', 'ArrayIf'), 'quantilesTDigestWeightedArrayIf': ('quantilesTDigestWeighted', 'ArrayIf'), 'quantileBFloat16WeightedArrayIf': ('quantileBFloat16Weighted', 'ArrayIf'), 'quantileArrayIf': ('quantile', 'ArrayIf'), 'covarSampArrayIf': ('covarSamp', 'ArrayIf'), 'quantileTimingArrayIf': ('quantileTiming', 'ArrayIf'), 'groupBitXorArrayIf': ('groupBitXor', 'ArrayIf'), 'sumWithOverflowArrayIf': ('sumWithOverflow', 'ArrayIf'), 'quantileBFloat16ArrayIf': ('quantileBFloat16', 'ArrayIf'), 'entropyArrayIf': ('entropy', 'ArrayIf'), 'categoricalInformationValueArrayIf': ('categoricalInformationValue', 'ArrayIf'), 'kolmogorovSmirnovTestArrayIf': ('kolmogorovSmirnovTest', 'ArrayIf'), 'sumKahanArrayIf': ('sumKahan', 'ArrayIf'), 'topKArrayIf': ('topK', 'ArrayIf'), 'groupBitOrArrayIf': ('groupBitOr', 'ArrayIf'), 'anyLastArrayIf': ('anyLast', 'ArrayIf'), 'topKWeightedArrayIf': ('topKWeighted', 'ArrayIf'), 'anyArrayIf': ('any', 'ArrayIf'), 'skewPopArrayIf': ('skewPop', 'ArrayIf'), 'uniqCombined64ArrayIf': ('uniqCombined64', 'ArrayIf'), 'uniqThetaArrayIf': ('uniqTheta', 'ArrayIf'), 'first_valueMap': ('first_value', 'Map'), 'groupBitAndMap': ('groupBitAnd', 'Map'), 'groupBitmapMap': ('groupBitmap', 'Map'), 'groupBitmapAndMap': ('groupBitmapAnd', 'Map'), 'quantilesExactMap': ('quantilesExact', 'Map'), 'groupArrayInsertAtMap': ('groupArrayInsertAt', 'Map'), 'uniqHLL12Map': ('uniqHLL12', 'Map'), 'argMaxMap': ('argMax', 'Map'), 'quantileExactWeightedMap': ('quantileExactWeighted', 'Map'), 'quantileGKMap': ('quantileGK', 'Map'), 'cramersVMap': ('cramersV', 'Map'), 'kurtSampMap': ('kurtSamp', 'Map'), 'maxIntersectionsPositionMap': ('maxIntersectionsPosition', 'Map'), 'quantileExactMap': ('quantileExact', 'Map'), 'quantilesMap': ('quantiles', 'Map'), 'quantilesTimingMap': ('quantilesTiming', 'Map'), 'quantilesTimingWeightedMap': ('quantilesTimingWeighted', 'Map'), 'quantilesInterpolatedWeightedMap': ('quantilesInterpolatedWeighted', 'Map'), 'deltaSumMap': ('deltaSum', 'Map'), 'quantileExactLowMap': ('quantileExactLow', 'Map'), 'simpleLinearRegressionMap': ('simpleLinearRegression', 'Map'), 'quantileExactHighMap': ('quantileExactHigh', 'Map'), 'stochasticLinearRegressionMap': ('stochasticLinearRegression', 'Map'), 'quantilesBFloat16Map': ('quantilesBFloat16', 'Map'), 'groupArrayMap': ('groupArray', 'Map'), 'corrMap': ('corr', 'Map'), 'skewSampMap': ('skewSamp', 'Map'), 'quantilesExactWeightedMap': ('quantilesExactWeighted', 'Map'), 'last_valueMap': ('last_value', 'Map'), 'stddevSampMap': ('stddevSamp', 'Map'), 'meanZTestMap': ('meanZTest', 'Map'), 'minMapMap': ('minMap', 'Map'), 'groupArrayLastMap': ('groupArrayLast', 'Map'), 'groupUniqArrayMap': ('groupUniqArray', 'Map'), 'largestTriangleThreeBucketsMap': ('largestTriangleThreeBuckets', 'Map'), 'sumMap': ('sumMap', ''), 'medianMap': ('median', 'Map'), 'groupArrayMovingSumMap': ('groupArrayMovingSum', 'Map'), 'quantilesExactHighMap': ('quantilesExactHigh', 'Map'), 'covarPopMap': ('covarPop', 'Map'), 'boundingRatioMap': ('boundingRatio', 'Map'), 'quantilesGKMap': ('quantilesGK', 'Map'), 'theilsUMap': ('theilsU', 'Map'), 'deltaSumTimestampMap': ('deltaSumTimestamp', 'Map'), 'stochasticLogisticRegressionMap': ('stochasticLogisticRegression', 'Map'), 'quantilesTDigestMap': ('quantilesTDigest', 'Map'), 'studentTTestMap': ('studentTTest', 'Map'), 'maxIntersectionsMap': ('maxIntersections', 'Map'), 'quantilesBFloat16WeightedMap': ('quantilesBFloat16Weighted', 'Map'), 'kurtPopMap': ('kurtPop', 'Map'), 'quantileTimingWeightedMap': ('quantileTimingWeighted', 'Map'), 'sumMapMap': ('sumMap', 'Map'), 'anyHeavyMap': ('anyHeavy', 'Map'), 'groupBitmapXorMap': ('groupBitmapXor', 'Map'), 'uniqCombinedMap': ('uniqCombined', 'Map'), 'varPopMap': ('varPop', 'Map'), 'minMap': ('minMap', ''), 'quantilesDeterministicMap': ('quantilesDeterministic', 'Map'), 'sparkBarMap': ('sparkBar', 'Map'), 'maxMap': ('maxMap', ''), 'cramersVBiasCorrectedMap': ('cramersVBiasCorrected', 'Map'), 'quantileInterpolatedWeightedMap': ('quantileInterpolatedWeighted', 'Map'), 'groupArraySampleMap': ('groupArraySample', 'Map'), 'varSampMap': ('varSamp', 'Map'), 'exponentialMovingAverageMap': ('exponentialMovingAverage', 'Map'), 'countMap': ('count', 'Map'), 'intervalLengthSumMap': ('intervalLengthSum', 'Map'), 'mannWhitneyUTestMap': ('mannWhitneyUTest', 'Map'), 'quantileDeterministicMap': ('quantileDeterministic', 'Map'), 'groupBitmapOrMap': ('groupBitmapOr', 'Map'), 'sumCountMap': ('sumCount', 'Map'), 'argMinMap': ('argMin', 'Map'), 'uniqMap': ('uniq', 'Map'), 'avgWeightedMap': ('avgWeighted', 'Map'), 'avgMap': ('avg', 'Map'), 'rankCorrMap': ('rankCorr', 'Map'), 'groupArrayMovingAvgMap': ('groupArrayMovingAvg', 'Map'), 'contingencyMap': ('contingency', 'Map'), 'uniqExactMap': ('uniqExact', 'Map'), 'stddevPopMap': ('stddevPop', 'Map'), 'quantileTDigestMap': ('quantileTDigest', 'Map'), 'quantileTDigestWeightedMap': ('quantileTDigestWeighted', 'Map'), 'maxMapMap': ('maxMap', 'Map'), 'welchTTestMap': ('welchTTest', 'Map'), 'quantilesExactLowMap': ('quantilesExactLow', 'Map'), 'quantilesTDigestWeightedMap': ('quantilesTDigestWeighted', 'Map'), 'quantileBFloat16WeightedMap': ('quantileBFloat16Weighted', 'Map'), 'quantileMap': ('quantile', 'Map'), 'covarSampMap': ('covarSamp', 'Map'), 'quantileTimingMap': ('quantileTiming', 'Map'), 'groupBitXorMap': ('groupBitXor', 'Map'), 'sumWithOverflowMap': ('sumWithOverflow', 'Map'), 'quantileBFloat16Map': ('quantileBFloat16', 'Map'), 'entropyMap': ('entropy', 'Map'), 'categoricalInformationValueMap': ('categoricalInformationValue', 'Map'), 'kolmogorovSmirnovTestMap': ('kolmogorovSmirnovTest', 'Map'), 'sumKahanMap': ('sumKahan', 'Map'), 'topKMap': ('topK', 'Map'), 'groupBitOrMap': ('groupBitOr', 'Map'), 'anyLastMap': ('anyLast', 'Map'), 'topKWeightedMap': ('topKWeighted', 'Map'), 'anyMap': ('any', 'Map'), 'skewPopMap': ('skewPop', 'Map'), 'uniqCombined64Map': ('uniqCombined64', 'Map'), 'uniqThetaMap': ('uniqTheta', 'Map'), 'first_valueSimpleState': ('first_value', 'SimpleState'), 'groupBitAndSimpleState': ('groupBitAnd', 'SimpleState'), 'groupBitmapSimpleState': ('groupBitmap', 'SimpleState'), 'groupBitmapAndSimpleState': ('groupBitmapAnd', 'SimpleState'), 'quantilesExactSimpleState': ('quantilesExact', 'SimpleState'), 'groupArrayInsertAtSimpleState': ('groupArrayInsertAt', 'SimpleState'), 'uniqHLL12SimpleState': ('uniqHLL12', 'SimpleState'), 'argMaxSimpleState': ('argMax', 'SimpleState'), 'quantileExactWeightedSimpleState': ('quantileExactWeighted', 'SimpleState'), 'quantileGKSimpleState': ('quantileGK', 'SimpleState'), 'cramersVSimpleState': ('cramersV', 'SimpleState'), 'kurtSampSimpleState': ('kurtSamp', 'SimpleState'), 'maxIntersectionsPositionSimpleState': ('maxIntersectionsPosition', 'SimpleState'), 'quantileExactSimpleState': ('quantileExact', 'SimpleState'), 'quantilesSimpleState': ('quantiles', 'SimpleState'), 'quantilesTimingSimpleState': ('quantilesTiming', 'SimpleState'), 'quantilesTimingWeightedSimpleState': ('quantilesTimingWeighted', 'SimpleState'), 'quantilesInterpolatedWeightedSimpleState': ('quantilesInterpolatedWeighted', 'SimpleState'), 'deltaSumSimpleState': ('deltaSum', 'SimpleState'), 'quantileExactLowSimpleState': ('quantileExactLow', 'SimpleState'), 'simpleLinearRegressionSimpleState': ('simpleLinearRegression', 'SimpleState'), 'quantileExactHighSimpleState': ('quantileExactHigh', 'SimpleState'), 'stochasticLinearRegressionSimpleState': ('stochasticLinearRegression', 'SimpleState'), 'quantilesBFloat16SimpleState': ('quantilesBFloat16', 'SimpleState'), 'groupArraySimpleState': ('groupArray', 'SimpleState'), 'corrSimpleState': ('corr', 'SimpleState'), 'skewSampSimpleState': ('skewSamp', 'SimpleState'), 'quantilesExactWeightedSimpleState': ('quantilesExactWeighted', 'SimpleState'), 'last_valueSimpleState': ('last_value', 'SimpleState'), 'stddevSampSimpleState': ('stddevSamp', 'SimpleState'), 'meanZTestSimpleState': ('meanZTest', 'SimpleState'), 'minMapSimpleState': ('minMap', 'SimpleState'), 'groupArrayLastSimpleState': ('groupArrayLast', 'SimpleState'), 'groupUniqArraySimpleState': ('groupUniqArray', 'SimpleState'), 'largestTriangleThreeBucketsSimpleState': ('largestTriangleThreeBuckets', 'SimpleState'), 'sumSimpleState': ('sum', 'SimpleState'), 'medianSimpleState': ('median', 'SimpleState'), 'groupArrayMovingSumSimpleState': ('groupArrayMovingSum', 'SimpleState'), 'quantilesExactHighSimpleState': ('quantilesExactHigh', 'SimpleState'), 'covarPopSimpleState': ('covarPop', 'SimpleState'), 'boundingRatioSimpleState': ('boundingRatio', 'SimpleState'), 'quantilesGKSimpleState': ('quantilesGK', 'SimpleState'), 'theilsUSimpleState': ('theilsU', 'SimpleState'), 'deltaSumTimestampSimpleState': ('deltaSumTimestamp', 'SimpleState'), 'stochasticLogisticRegressionSimpleState': ('stochasticLogisticRegression', 'SimpleState'), 'quantilesTDigestSimpleState': ('quantilesTDigest', 'SimpleState'), 'studentTTestSimpleState': ('studentTTest', 'SimpleState'), 'maxIntersectionsSimpleState': ('maxIntersections', 'SimpleState'), 'quantilesBFloat16WeightedSimpleState': ('quantilesBFloat16Weighted', 'SimpleState'), 'kurtPopSimpleState': ('kurtPop', 'SimpleState'), 'quantileTimingWeightedSimpleState': ('quantileTimingWeighted', 'SimpleState'), 'sumMapSimpleState': ('sumMap', 'SimpleState'), 'anyHeavySimpleState': ('anyHeavy', 'SimpleState'), 'groupBitmapXorSimpleState': ('groupBitmapXor', 'SimpleState'), 'uniqCombinedSimpleState': ('uniqCombined', 'SimpleState'), 'varPopSimpleState': ('varPop', 'SimpleState'), 'minSimpleState': ('min', 'SimpleState'), 'quantilesDeterministicSimpleState': ('quantilesDeterministic', 'SimpleState'), 'sparkBarSimpleState': ('sparkBar', 'SimpleState'), 'maxSimpleState': ('max', 'SimpleState'), 'cramersVBiasCorrectedSimpleState': ('cramersVBiasCorrected', 'SimpleState'), 'quantileInterpolatedWeightedSimpleState': ('quantileInterpolatedWeighted', 'SimpleState'), 'groupArraySampleSimpleState': ('groupArraySample', 'SimpleState'), 'varSampSimpleState': ('varSamp', 'SimpleState'), 'exponentialMovingAverageSimpleState': ('exponentialMovingAverage', 'SimpleState'), 'countSimpleState': ('count', 'SimpleState'), 'intervalLengthSumSimpleState': ('intervalLengthSum', 'SimpleState'), 'mannWhitneyUTestSimpleState': ('mannWhitneyUTest', 'SimpleState'), 'quantileDeterministicSimpleState': ('quantileDeterministic', 'SimpleState'), 'groupBitmapOrSimpleState': ('groupBitmapOr', 'SimpleState'), 'sumCountSimpleState': ('sumCount', 'SimpleState'), 'argMinSimpleState': ('argMin', 'SimpleState'), 'uniqSimpleState': ('uniq', 'SimpleState'), 'avgWeightedSimpleState': ('avgWeighted', 'SimpleState'), 'avgSimpleState': ('avg', 'SimpleState'), 'rankCorrSimpleState': ('rankCorr', 'SimpleState'), 'groupArrayMovingAvgSimpleState': ('groupArrayMovingAvg', 'SimpleState'), 'contingencySimpleState': ('contingency', 'SimpleState'), 'uniqExactSimpleState': ('uniqExact', 'SimpleState'), 'stddevPopSimpleState': ('stddevPop', 'SimpleState'), 'quantileTDigestSimpleState': ('quantileTDigest', 'SimpleState'), 'quantileTDigestWeightedSimpleState': ('quantileTDigestWeighted', 'SimpleState'), 'maxMapSimpleState': ('maxMap', 'SimpleState'), 'welchTTestSimpleState': ('welchTTest', 'SimpleState'), 'quantilesExactLowSimpleState': ('quantilesExactLow', 'SimpleState'), 'quantilesTDigestWeightedSimpleState': ('quantilesTDigestWeighted', 'SimpleState'), 'quantileBFloat16WeightedSimpleState': ('quantileBFloat16Weighted', 'SimpleState'), 'quantileSimpleState': ('quantile', 'SimpleState'), 'covarSampSimpleState': ('covarSamp', 'SimpleState'), 'quantileTimingSimpleState': ('quantileTiming', 'SimpleState'), 'groupBitXorSimpleState': ('groupBitXor', 'SimpleState'), 'sumWithOverflowSimpleState': ('sumWithOverflow', 'SimpleState'), 'quantileBFloat16SimpleState': ('quantileBFloat16', 'SimpleState'), 'entropySimpleState': ('entropy', 'SimpleState'), 'categoricalInformationValueSimpleState': ('categoricalInformationValue', 'SimpleState'), 'kolmogorovSmirnovTestSimpleState': ('kolmogorovSmirnovTest', 'SimpleState'), 'sumKahanSimpleState': ('sumKahan', 'SimpleState'), 'topKSimpleState': ('topK', 'SimpleState'), 'groupBitOrSimpleState': ('groupBitOr', 'SimpleState'), 'anyLastSimpleState': ('anyLast', 'SimpleState'), 'topKWeightedSimpleState': ('topKWeighted', 'SimpleState'), 'anySimpleState': ('any', 'SimpleState'), 'skewPopSimpleState': ('skewPop', 'SimpleState'), 'uniqCombined64SimpleState': ('uniqCombined64', 'SimpleState'), 'uniqThetaSimpleState': ('uniqTheta', 'SimpleState'), 'first_valueState': ('first_value', 'State'), 'groupBitAndState': ('groupBitAnd', 'State'), 'groupBitmapState': ('groupBitmap', 'State'), 'groupBitmapAndState': ('groupBitmapAnd', 'State'), 'quantilesExactState': ('quantilesExact', 'State'), 'groupArrayInsertAtState': ('groupArrayInsertAt', 'State'), 'uniqHLL12State': ('uniqHLL12', 'State'), 'argMaxState': ('argMax', 'State'), 'quantileExactWeightedState': ('quantileExactWeighted', 'State'), 'quantileGKState': ('quantileGK', 'State'), 'cramersVState': ('cramersV', 'State'), 'kurtSampState': ('kurtSamp', 'State'), 'maxIntersectionsPositionState': ('maxIntersectionsPosition', 'State'), 'quantileExactState': ('quantileExact', 'State'), 'quantilesState': ('quantiles', 'State'), 'quantilesTimingState': ('quantilesTiming', 'State'), 'quantilesTimingWeightedState': ('quantilesTimingWeighted', 'State'), 'quantilesInterpolatedWeightedState': ('quantilesInterpolatedWeighted', 'State'), 'deltaSumState': ('deltaSum', 'State'), 'quantileExactLowState': ('quantileExactLow', 'State'), 'simpleLinearRegressionState': ('simpleLinearRegression', 'State'), 'quantileExactHighState': ('quantileExactHigh', 'State'), 'stochasticLinearRegressionState': ('stochasticLinearRegression', 'State'), 'quantilesBFloat16State': ('quantilesBFloat16', 'State'), 'groupArrayState': ('groupArray', 'State'), 'corrState': ('corr', 'State'), 'skewSampState': ('skewSamp', 'State'), 'quantilesExactWeightedState': ('quantilesExactWeighted', 'State'), 'last_valueState': ('last_value', 'State'), 'stddevSampState': ('stddevSamp', 'State'), 'meanZTestState': ('meanZTest', 'State'), 'minMapState': ('minMap', 'State'), 'groupArrayLastState': ('groupArrayLast', 'State'), 'groupUniqArrayState': ('groupUniqArray', 'State'), 'largestTriangleThreeBucketsState': ('largestTriangleThreeBuckets', 'State'), 'sumState': ('sum', 'State'), 'medianState': ('median', 'State'), 'groupArrayMovingSumState': ('groupArrayMovingSum', 'State'), 'quantilesExactHighState': ('quantilesExactHigh', 'State'), 'covarPopState': ('covarPop', 'State'), 'boundingRatioState': ('boundingRatio', 'State'), 'quantilesGKState': ('quantilesGK', 'State'), 'theilsUState': ('theilsU', 'State'), 'deltaSumTimestampState': ('deltaSumTimestamp', 'State'), 'stochasticLogisticRegressionState': ('stochasticLogisticRegression', 'State'), 'quantilesTDigestState': ('quantilesTDigest', 'State'), 'studentTTestState': ('studentTTest', 'State'), 'maxIntersectionsState': ('maxIntersections', 'State'), 'quantilesBFloat16WeightedState': ('quantilesBFloat16Weighted', 'State'), 'kurtPopState': ('kurtPop', 'State'), 'quantileTimingWeightedState': ('quantileTimingWeighted', 'State'), 'sumMapState': ('sumMap', 'State'), 'anyHeavyState': ('anyHeavy', 'State'), 'groupBitmapXorState': ('groupBitmapXor', 'State'), 'uniqCombinedState': ('uniqCombined', 'State'), 'varPopState': ('varPop', 'State'), 'minState': ('min', 'State'), 'quantilesDeterministicState': ('quantilesDeterministic', 'State'), 'sparkBarState': ('sparkBar', 'State'), 'maxState': ('max', 'State'), 'cramersVBiasCorrectedState': ('cramersVBiasCorrected', 'State'), 'quantileInterpolatedWeightedState': ('quantileInterpolatedWeighted', 'State'), 'groupArraySampleState': ('groupArraySample', 'State'), 'varSampState': ('varSamp', 'State'), 'exponentialMovingAverageState': ('exponentialMovingAverage', 'State'), 'countState': ('count', 'State'), 'intervalLengthSumState': ('intervalLengthSum', 'State'), 'mannWhitneyUTestState': ('mannWhitneyUTest', 'State'), 'quantileDeterministicState': ('quantileDeterministic', 'State'), 'groupBitmapOrState': ('groupBitmapOr', 'State'), 'sumCountState': ('sumCount', 'State'), 'argMinState': ('argMin', 'State'), 'uniqState': ('uniq', 'State'), 'avgWeightedState': ('avgWeighted', 'State'), 'avgState': ('avg', 'State'), 'rankCorrState': ('rankCorr', 'State'), 'groupArrayMovingAvgState': ('groupArrayMovingAvg', 'State'), 'contingencyState': ('contingency', 'State'), 'uniqExactState': ('uniqExact', 'State'), 'stddevPopState': ('stddevPop', 'State'), 'quantileTDigestState': ('quantileTDigest', 'State'), 'quantileTDigestWeightedState': ('quantileTDigestWeighted', 'State'), 'maxMapState': ('maxMap', 'State'), 'welchTTestState': ('welchTTest', 'State'), 'quantilesExactLowState': ('quantilesExactLow', 'State'), 'quantilesTDigestWeightedState': ('quantilesTDigestWeighted', 'State'), 'quantileBFloat16WeightedState': ('quantileBFloat16Weighted', 'State'), 'quantileState': ('quantile', 'State'), 'covarSampState': ('covarSamp', 'State'), 'quantileTimingState': ('quantileTiming', 'State'), 'groupBitXorState': ('groupBitXor', 'State'), 'sumWithOverflowState': ('sumWithOverflow', 'State'), 'quantileBFloat16State': ('quantileBFloat16', 'State'), 'entropyState': ('entropy', 'State'), 'categoricalInformationValueState': ('categoricalInformationValue', 'State'), 'kolmogorovSmirnovTestState': ('kolmogorovSmirnovTest', 'State'), 'sumKahanState': ('sumKahan', 'State'), 'topKState': ('topK', 'State'), 'groupBitOrState': ('groupBitOr', 'State'), 'anyLastState': ('anyLast', 'State'), 'topKWeightedState': ('topKWeighted', 'State'), 'anyState': ('any', 'State'), 'skewPopState': ('skewPop', 'State'), 'uniqCombined64State': ('uniqCombined64', 'State'), 'uniqThetaState': ('uniqTheta', 'State'), 'first_valueMerge': ('first_value', 'Merge'), 'groupBitAndMerge': ('groupBitAnd', 'Merge'), 'groupBitmapMerge': ('groupBitmap', 'Merge'), 'groupBitmapAndMerge': ('groupBitmapAnd', 'Merge'), 'quantilesExactMerge': ('quantilesExact', 'Merge'), 'groupArrayInsertAtMerge': ('groupArrayInsertAt', 'Merge'), 'uniqHLL12Merge': ('uniqHLL12', 'Merge'), 'argMaxMerge': ('argMax', 'Merge'), 'quantileExactWeightedMerge': ('quantileExactWeighted', 'Merge'), 'quantileGKMerge': ('quantileGK', 'Merge'), 'cramersVMerge': ('cramersV', 'Merge'), 'kurtSampMerge': ('kurtSamp', 'Merge'), 'maxIntersectionsPositionMerge': ('maxIntersectionsPosition', 'Merge'), 'quantileExactMerge': ('quantileExact', 'Merge'), 'quantilesMerge': ('quantiles', 'Merge'), 'quantilesTimingMerge': ('quantilesTiming', 'Merge'), 'quantilesTimingWeightedMerge': ('quantilesTimingWeighted', 'Merge'), 'quantilesInterpolatedWeightedMerge': ('quantilesInterpolatedWeighted', 'Merge'), 'deltaSumMerge': ('deltaSum', 'Merge'), 'quantileExactLowMerge': ('quantileExactLow', 'Merge'), 'simpleLinearRegressionMerge': ('simpleLinearRegression', 'Merge'), 'quantileExactHighMerge': ('quantileExactHigh', 'Merge'), 'stochasticLinearRegressionMerge': ('stochasticLinearRegression', 'Merge'), 'quantilesBFloat16Merge': ('quantilesBFloat16', 'Merge'), 'groupArrayMerge': ('groupArray', 'Merge'), 'corrMerge': ('corr', 'Merge'), 'skewSampMerge': ('skewSamp', 'Merge'), 'quantilesExactWeightedMerge': ('quantilesExactWeighted', 'Merge'), 'last_valueMerge': ('last_value', 'Merge'), 'stddevSampMerge': ('stddevSamp', 'Merge'), 'meanZTestMerge': ('meanZTest', 'Merge'), 'minMapMerge': ('minMap', 'Merge'), 'groupArrayLastMerge': ('groupArrayLast', 'Merge'), 'groupUniqArrayMerge': ('groupUniqArray', 'Merge'), 'largestTriangleThreeBucketsMerge': ('largestTriangleThreeBuckets', 'Merge'), 'sumMerge': ('sum', 'Merge'), 'medianMerge': ('median', 'Merge'), 'groupArrayMovingSumMerge': ('groupArrayMovingSum', 'Merge'), 'quantilesExactHighMerge': ('quantilesExactHigh', 'Merge'), 'covarPopMerge': ('covarPop', 'Merge'), 'boundingRatioMerge': ('boundingRatio', 'Merge'), 'quantilesGKMerge': ('quantilesGK', 'Merge'), 'theilsUMerge': ('theilsU', 'Merge'), 'deltaSumTimestampMerge': ('deltaSumTimestamp', 'Merge'), 'stochasticLogisticRegressionMerge': ('stochasticLogisticRegression', 'Merge'), 'quantilesTDigestMerge': ('quantilesTDigest', 'Merge'), 'studentTTestMerge': ('studentTTest', 'Merge'), 'maxIntersectionsMerge': ('maxIntersections', 'Merge'), 'quantilesBFloat16WeightedMerge': ('quantilesBFloat16Weighted', 'Merge'), 'kurtPopMerge': ('kurtPop', 'Merge'), 'quantileTimingWeightedMerge': ('quantileTimingWeighted', 'Merge'), 'sumMapMerge': ('sumMap', 'Merge'), 'anyHeavyMerge': ('anyHeavy', 'Merge'), 'groupBitmapXorMerge': ('groupBitmapXor', 'Merge'), 'uniqCombinedMerge': ('uniqCombined', 'Merge'), 'varPopMerge': ('varPop', 'Merge'), 'minMerge': ('min', 'Merge'), 'quantilesDeterministicMerge': ('quantilesDeterministic', 'Merge'), 'sparkBarMerge': ('sparkBar', 'Merge'), 'maxMerge': ('max', 'Merge'), 'cramersVBiasCorrectedMerge': ('cramersVBiasCorrected', 'Merge'), 'quantileInterpolatedWeightedMerge': ('quantileInterpolatedWeighted', 'Merge'), 'groupArraySampleMerge': ('groupArraySample', 'Merge'), 'varSampMerge': ('varSamp', 'Merge'), 'exponentialMovingAverageMerge': ('exponentialMovingAverage', 'Merge'), 'countMerge': ('count', 'Merge'), 'intervalLengthSumMerge': ('intervalLengthSum', 'Merge'), 'mannWhitneyUTestMerge': ('mannWhitneyUTest', 'Merge'), 'quantileDeterministicMerge': ('quantileDeterministic', 'Merge'), 'groupBitmapOrMerge': ('groupBitmapOr', 'Merge'), 'sumCountMerge': ('sumCount', 'Merge'), 'argMinMerge': ('argMin', 'Merge'), 'uniqMerge': ('uniq', 'Merge'), 'avgWeightedMerge': ('avgWeighted', 'Merge'), 'avgMerge': ('avg', 'Merge'), 'rankCorrMerge': ('rankCorr', 'Merge'), 'groupArrayMovingAvgMerge': ('groupArrayMovingAvg', 'Merge'), 'contingencyMerge': ('contingency', 'Merge'), 'uniqExactMerge': ('uniqExact', 'Merge'), 'stddevPopMerge': ('stddevPop', 'Merge'), 'quantileTDigestMerge': ('quantileTDigest', 'Merge'), 'quantileTDigestWeightedMerge': ('quantileTDigestWeighted', 'Merge'), 'maxMapMerge': ('maxMap', 'Merge'), 'welchTTestMerge': ('welchTTest', 'Merge'), 'quantilesExactLowMerge': ('quantilesExactLow', 'Merge'), 'quantilesTDigestWeightedMerge': ('quantilesTDigestWeighted', 'Merge'), 'quantileBFloat16WeightedMerge': ('quantileBFloat16Weighted', 'Merge'), 'quantileMerge': ('quantile', 'Merge'), 'covarSampMerge': ('covarSamp', 'Merge'), 'quantileTimingMerge': ('quantileTiming', 'Merge'), 'groupBitXorMerge': ('groupBitXor', 'Merge'), 'sumWithOverflowMerge': ('sumWithOverflow', 'Merge'), 'quantileBFloat16Merge': ('quantileBFloat16', 'Merge'), 'entropyMerge': ('entropy', 'Merge'), 'categoricalInformationValueMerge': ('categoricalInformationValue', 'Merge'), 'kolmogorovSmirnovTestMerge': ('kolmogorovSmirnovTest', 'Merge'), 'sumKahanMerge': ('sumKahan', 'Merge'), 'topKMerge': ('topK', 'Merge'), 'groupBitOrMerge': ('groupBitOr', 'Merge'), 'anyLastMerge': ('anyLast', 'Merge'), 'topKWeightedMerge': ('topKWeighted', 'Merge'), 'anyMerge': ('any', 'Merge'), 'skewPopMerge': ('skewPop', 'Merge'), 'uniqCombined64Merge': ('uniqCombined64', 'Merge'), 'uniqThetaMerge': ('uniqTheta', 'Merge'), 'first_valueMergeState': ('first_value', 'MergeState'), 'groupBitAndMergeState': ('groupBitAnd', 'MergeState'), 'groupBitmapMergeState': ('groupBitmap', 'MergeState'), 'groupBitmapAndMergeState': ('groupBitmapAnd', 'MergeState'), 'quantilesExactMergeState': ('quantilesExact', 'MergeState'), 'groupArrayInsertAtMergeState': ('groupArrayInsertAt', 'MergeState'), 'uniqHLL12MergeState': ('uniqHLL12', 'MergeState'), 'argMaxMergeState': ('argMax', 'MergeState'), 'quantileExactWeightedMergeState': ('quantileExactWeighted', 'MergeState'), 'quantileGKMergeState': ('quantileGK', 'MergeState'), 'cramersVMergeState': ('cramersV', 'MergeState'), 'kurtSampMergeState': ('kurtSamp', 'MergeState'), 'maxIntersectionsPositionMergeState': ('maxIntersectionsPosition', 'MergeState'), 'quantileExactMergeState': ('quantileExact', 'MergeState'), 'quantilesMergeState': ('quantiles', 'MergeState'), 'quantilesTimingMergeState': ('quantilesTiming', 'MergeState'), 'quantilesTimingWeightedMergeState': ('quantilesTimingWeighted', 'MergeState'), 'quantilesInterpolatedWeightedMergeState': ('quantilesInterpolatedWeighted', 'MergeState'), 'deltaSumMergeState': ('deltaSum', 'MergeState'), 'quantileExactLowMergeState': ('quantileExactLow', 'MergeState'), 'simpleLinearRegressionMergeState': ('simpleLinearRegression', 'MergeState'), 'quantileExactHighMergeState': ('quantileExactHigh', 'MergeState'), 'stochasticLinearRegressionMergeState': ('stochasticLinearRegression', 'MergeState'), 'quantilesBFloat16MergeState': ('quantilesBFloat16', 'MergeState'), 'groupArrayMergeState': ('groupArray', 'MergeState'), 'corrMergeState': ('corr', 'MergeState'), 'skewSampMergeState': ('skewSamp', 'MergeState'), 'quantilesExactWeightedMergeState': ('quantilesExactWeighted', 'MergeState'), 'last_valueMergeState': ('last_value', 'MergeState'), 'stddevSampMergeState': ('stddevSamp', 'MergeState'), 'meanZTestMergeState': ('meanZTest', 'MergeState'), 'minMapMergeState': ('minMap', 'MergeState'), 'groupArrayLastMergeState': ('groupArrayLast', 'MergeState'), 'groupUniqArrayMergeState': ('groupUniqArray', 'MergeState'), 'largestTriangleThreeBucketsMergeState': ('largestTriangleThreeBuckets', 'MergeState'), 'sumMergeState': ('sum', 'MergeState'), 'medianMergeState': ('median', 'MergeState'), 'groupArrayMovingSumMergeState': ('groupArrayMovingSum', 'MergeState'), 'quantilesExactHighMergeState': ('quantilesExactHigh', 'MergeState'), 'covarPopMergeState': ('covarPop', 'MergeState'), 'boundingRatioMergeState': ('boundingRatio', 'MergeState'), 'quantilesGKMergeState': ('quantilesGK', 'MergeState'), 'theilsUMergeState': ('theilsU', 'MergeState'), 'deltaSumTimestampMergeState': ('deltaSumTimestamp', 'MergeState'), 'stochasticLogisticRegressionMergeState': ('stochasticLogisticRegression', 'MergeState'), 'quantilesTDigestMergeState': ('quantilesTDigest', 'MergeState'), 'studentTTestMergeState': ('studentTTest', 'MergeState'), 'maxIntersectionsMergeState': ('maxIntersections', 'MergeState'), 'quantilesBFloat16WeightedMergeState': ('quantilesBFloat16Weighted', 'MergeState'), 'kurtPopMergeState': ('kurtPop', 'MergeState'), 'quantileTimingWeightedMergeState': ('quantileTimingWeighted', 'MergeState'), 'sumMapMergeState': ('sumMap', 'MergeState'), 'anyHeavyMergeState': ('anyHeavy', 'MergeState'), 'groupBitmapXorMergeState': ('groupBitmapXor', 'MergeState'), 'uniqCombinedMergeState': ('uniqCombined', 'MergeState'), 'varPopMergeState': ('varPop', 'MergeState'), 'minMergeState': ('min', 'MergeState'), 'quantilesDeterministicMergeState': ('quantilesDeterministic', 'MergeState'), 'sparkBarMergeState': ('sparkBar', 'MergeState'), 'maxMergeState': ('max', 'MergeState'), 'cramersVBiasCorrectedMergeState': ('cramersVBiasCorrected', 'MergeState'), 'quantileInterpolatedWeightedMergeState': ('quantileInterpolatedWeighted', 'MergeState'), 'groupArraySampleMergeState': ('groupArraySample', 'MergeState'), 'varSampMergeState': ('varSamp', 'MergeState'), 'exponentialMovingAverageMergeState': ('exponentialMovingAverage', 'MergeState'), 'countMergeState': ('count', 'MergeState'), 'intervalLengthSumMergeState': ('intervalLengthSum', 'MergeState'), 'mannWhitneyUTestMergeState': ('mannWhitneyUTest', 'MergeState'), 'quantileDeterministicMergeState': ('quantileDeterministic', 'MergeState'), 'groupBitmapOrMergeState': ('groupBitmapOr', 'MergeState'), 'sumCountMergeState': ('sumCount', 'MergeState'), 'argMinMergeState': ('argMin', 'MergeState'), 'uniqMergeState': ('uniq', 'MergeState'), 'avgWeightedMergeState': ('avgWeighted', 'MergeState'), 'avgMergeState': ('avg', 'MergeState'), 'rankCorrMergeState': ('rankCorr', 'MergeState'), 'groupArrayMovingAvgMergeState': ('groupArrayMovingAvg', 'MergeState'), 'contingencyMergeState': ('contingency', 'MergeState'), 'uniqExactMergeState': ('uniqExact', 'MergeState'), 'stddevPopMergeState': ('stddevPop', 'MergeState'), 'quantileTDigestMergeState': ('quantileTDigest', 'MergeState'), 'quantileTDigestWeightedMergeState': ('quantileTDigestWeighted', 'MergeState'), 'maxMapMergeState': ('maxMap', 'MergeState'), 'welchTTestMergeState': ('welchTTest', 'MergeState'), 'quantilesExactLowMergeState': ('quantilesExactLow', 'MergeState'), 'quantilesTDigestWeightedMergeState': ('quantilesTDigestWeighted', 'MergeState'), 'quantileBFloat16WeightedMergeState': ('quantileBFloat16Weighted', 'MergeState'), 'quantileMergeState': ('quantile', 'MergeState'), 'covarSampMergeState': ('covarSamp', 'MergeState'), 'quantileTimingMergeState': ('quantileTiming', 'MergeState'), 'groupBitXorMergeState': ('groupBitXor', 'MergeState'), 'sumWithOverflowMergeState': ('sumWithOverflow', 'MergeState'), 'quantileBFloat16MergeState': ('quantileBFloat16', 'MergeState'), 'entropyMergeState': ('entropy', 'MergeState'), 'categoricalInformationValueMergeState': ('categoricalInformationValue', 'MergeState'), 'kolmogorovSmirnovTestMergeState': ('kolmogorovSmirnovTest', 'MergeState'), 'sumKahanMergeState': ('sumKahan', 'MergeState'), 'topKMergeState': ('topK', 'MergeState'), 'groupBitOrMergeState': ('groupBitOr', 'MergeState'), 'anyLastMergeState': ('anyLast', 'MergeState'), 'topKWeightedMergeState': ('topKWeighted', 'MergeState'), 'anyMergeState': ('any', 'MergeState'), 'skewPopMergeState': ('skewPop', 'MergeState'), 'uniqCombined64MergeState': ('uniqCombined64', 'MergeState'), 'uniqThetaMergeState': ('uniqTheta', 'MergeState'), 'first_valueForEach': ('first_value', 'ForEach'), 'groupBitAndForEach': ('groupBitAnd', 'ForEach'), 'groupBitmapForEach': ('groupBitmap', 'ForEach'), 'groupBitmapAndForEach': ('groupBitmapAnd', 'ForEach'), 'quantilesExactForEach': ('quantilesExact', 'ForEach'), 'groupArrayInsertAtForEach': ('groupArrayInsertAt', 'ForEach'), 'uniqHLL12ForEach': ('uniqHLL12', 'ForEach'), 'argMaxForEach': ('argMax', 'ForEach'), 'quantileExactWeightedForEach': ('quantileExactWeighted', 'ForEach'), 'quantileGKForEach': ('quantileGK', 'ForEach'), 'cramersVForEach': ('cramersV', 'ForEach'), 'kurtSampForEach': ('kurtSamp', 'ForEach'), 'maxIntersectionsPositionForEach': ('maxIntersectionsPosition', 'ForEach'), 'quantileExactForEach': ('quantileExact', 'ForEach'), 'quantilesForEach': ('quantiles', 'ForEach'), 'quantilesTimingForEach': ('quantilesTiming', 'ForEach'), 'quantilesTimingWeightedForEach': ('quantilesTimingWeighted', 'ForEach'), 'quantilesInterpolatedWeightedForEach': ('quantilesInterpolatedWeighted', 'ForEach'), 'deltaSumForEach': ('deltaSum', 'ForEach'), 'quantileExactLowForEach': ('quantileExactLow', 'ForEach'), 'simpleLinearRegressionForEach': ('simpleLinearRegression', 'ForEach'), 'quantileExactHighForEach': ('quantileExactHigh', 'ForEach'), 'stochasticLinearRegressionForEach': ('stochasticLinearRegression', 'ForEach'), 'quantilesBFloat16ForEach': ('quantilesBFloat16', 'ForEach'), 'groupArrayForEach': ('groupArray', 'ForEach'), 'corrForEach': ('corr', 'ForEach'), 'skewSampForEach': ('skewSamp', 'ForEach'), 'quantilesExactWeightedForEach': ('quantilesExactWeighted', 'ForEach'), 'last_valueForEach': ('last_value', 'ForEach'), 'stddevSampForEach': ('stddevSamp', 'ForEach'), 'meanZTestForEach': ('meanZTest', 'ForEach'), 'minMapForEach': ('minMap', 'ForEach'), 'groupArrayLastForEach': ('groupArrayLast', 'ForEach'), 'groupUniqArrayForEach': ('groupUniqArray', 'ForEach'), 'largestTriangleThreeBucketsForEach': ('largestTriangleThreeBuckets', 'ForEach'), 'sumForEach': ('sum', 'ForEach'), 'medianForEach': ('median', 'ForEach'), 'groupArrayMovingSumForEach': ('groupArrayMovingSum', 'ForEach'), 'quantilesExactHighForEach': ('quantilesExactHigh', 'ForEach'), 'covarPopForEach': ('covarPop', 'ForEach'), 'boundingRatioForEach': ('boundingRatio', 'ForEach'), 'quantilesGKForEach': ('quantilesGK', 'ForEach'), 'theilsUForEach': ('theilsU', 'ForEach'), 'deltaSumTimestampForEach': ('deltaSumTimestamp', 'ForEach'), 'stochasticLogisticRegressionForEach': ('stochasticLogisticRegression', 'ForEach'), 'quantilesTDigestForEach': ('quantilesTDigest', 'ForEach'), 'studentTTestForEach': ('studentTTest', 'ForEach'), 'maxIntersectionsForEach': ('maxIntersections', 'ForEach'), 'quantilesBFloat16WeightedForEach': ('quantilesBFloat16Weighted', 'ForEach'), 'kurtPopForEach': ('kurtPop', 'ForEach'), 'quantileTimingWeightedForEach': ('quantileTimingWeighted', 'ForEach'), 'sumMapForEach': ('sumMap', 'ForEach'), 'anyHeavyForEach': ('anyHeavy', 'ForEach'), 'groupBitmapXorForEach': ('groupBitmapXor', 'ForEach'), 'uniqCombinedForEach': ('uniqCombined', 'ForEach'), 'varPopForEach': ('varPop', 'ForEach'), 'minForEach': ('min', 'ForEach'), 'quantilesDeterministicForEach': ('quantilesDeterministic', 'ForEach'), 'sparkBarForEach': ('sparkBar', 'ForEach'), 'maxForEach': ('max', 'ForEach'), 'cramersVBiasCorrectedForEach': ('cramersVBiasCorrected', 'ForEach'), 'quantileInterpolatedWeightedForEach': ('quantileInterpolatedWeighted', 'ForEach'), 'groupArraySampleForEach': ('groupArraySample', 'ForEach'), 'varSampForEach': ('varSamp', 'ForEach'), 'exponentialMovingAverageForEach': ('exponentialMovingAverage', 'ForEach'), 'countForEach': ('count', 'ForEach'), 'intervalLengthSumForEach': ('intervalLengthSum', 'ForEach'), 'mannWhitneyUTestForEach': ('mannWhitneyUTest', 'ForEach'), 'quantileDeterministicForEach': ('quantileDeterministic', 'ForEach'), 'groupBitmapOrForEach': ('groupBitmapOr', 'ForEach'), 'sumCountForEach': ('sumCount', 'ForEach'), 'argMinForEach': ('argMin', 'ForEach'), 'uniqForEach': ('uniq', 'ForEach'), 'avgWeightedForEach': ('avgWeighted', 'ForEach'), 'avgForEach': ('avg', 'ForEach'), 'rankCorrForEach': ('rankCorr', 'ForEach'), 'groupArrayMovingAvgForEach': ('groupArrayMovingAvg', 'ForEach'), 'contingencyForEach': ('contingency', 'ForEach'), 'uniqExactForEach': ('uniqExact', 'ForEach'), 'stddevPopForEach': ('stddevPop', 'ForEach'), 'quantileTDigestForEach': ('quantileTDigest', 'ForEach'), 'quantileTDigestWeightedForEach': ('quantileTDigestWeighted', 'ForEach'), 'maxMapForEach': ('maxMap', 'ForEach'), 'welchTTestForEach': ('welchTTest', 'ForEach'), 'quantilesExactLowForEach': ('quantilesExactLow', 'ForEach'), 'quantilesTDigestWeightedForEach': ('quantilesTDigestWeighted', 'ForEach'), 'quantileBFloat16WeightedForEach': ('quantileBFloat16Weighted', 'ForEach'), 'quantileForEach': ('quantile', 'ForEach'), 'covarSampForEach': ('covarSamp', 'ForEach'), 'quantileTimingForEach': ('quantileTiming', 'ForEach'), 'groupBitXorForEach': ('groupBitXor', 'ForEach'), 'sumWithOverflowForEach': ('sumWithOverflow', 'ForEach'), 'quantileBFloat16ForEach': ('quantileBFloat16', 'ForEach'), 'entropyForEach': ('entropy', 'ForEach'), 'categoricalInformationValueForEach': ('categoricalInformationValue', 'ForEach'), 'kolmogorovSmirnovTestForEach': ('kolmogorovSmirnovTest', 'ForEach'), 'sumKahanForEach': ('sumKahan', 'ForEach'), 'topKForEach': ('topK', 'ForEach'), 'groupBitOrForEach': ('groupBitOr', 'ForEach'), 'anyLastForEach': ('anyLast', 'ForEach'), 'topKWeightedForEach': ('topKWeighted', 'ForEach'), 'anyForEach': ('any', 'ForEach'), 'skewPopForEach': ('skewPop', 'ForEach'), 'uniqCombined64ForEach': ('uniqCombined64', 'ForEach'), 'uniqThetaForEach': ('uniqTheta', 'ForEach'), 'first_valueDistinct': ('first_value', 'Distinct'), 'groupBitAndDistinct': ('groupBitAnd', 'Distinct'), 'groupBitmapDistinct': ('groupBitmap', 'Distinct'), 'groupBitmapAndDistinct': ('groupBitmapAnd', 'Distinct'), 'quantilesExactDistinct': ('quantilesExact', 'Distinct'), 'groupArrayInsertAtDistinct': ('groupArrayInsertAt', 'Distinct'), 'uniqHLL12Distinct': ('uniqHLL12', 'Distinct'), 'argMaxDistinct': ('argMax', 'Distinct'), 'quantileExactWeightedDistinct': ('quantileExactWeighted', 'Distinct'), 'quantileGKDistinct': ('quantileGK', 'Distinct'), 'cramersVDistinct': ('cramersV', 'Distinct'), 'kurtSampDistinct': ('kurtSamp', 'Distinct'), 'maxIntersectionsPositionDistinct': ('maxIntersectionsPosition', 'Distinct'), 'quantileExactDistinct': ('quantileExact', 'Distinct'), 'quantilesDistinct': ('quantiles', 'Distinct'), 'quantilesTimingDistinct': ('quantilesTiming', 'Distinct'), 'quantilesTimingWeightedDistinct': ('quantilesTimingWeighted', 'Distinct'), 'quantilesInterpolatedWeightedDistinct': ('quantilesInterpolatedWeighted', 'Distinct'), 'deltaSumDistinct': ('deltaSum', 'Distinct'), 'quantileExactLowDistinct': ('quantileExactLow', 'Distinct'), 'simpleLinearRegressionDistinct': ('simpleLinearRegression', 'Distinct'), 'quantileExactHighDistinct': ('quantileExactHigh', 'Distinct'), 'stochasticLinearRegressionDistinct': ('stochasticLinearRegression', 'Distinct'), 'quantilesBFloat16Distinct': ('quantilesBFloat16', 'Distinct'), 'groupArrayDistinct': ('groupArray', 'Distinct'), 'corrDistinct': ('corr', 'Distinct'), 'skewSampDistinct': ('skewSamp', 'Distinct'), 'quantilesExactWeightedDistinct': ('quantilesExactWeighted', 'Distinct'), 'last_valueDistinct': ('last_value', 'Distinct'), 'stddevSampDistinct': ('stddevSamp', 'Distinct'), 'meanZTestDistinct': ('meanZTest', 'Distinct'), 'minMapDistinct': ('minMap', 'Distinct'), 'groupArrayLastDistinct': ('groupArrayLast', 'Distinct'), 'groupUniqArrayDistinct': ('groupUniqArray', 'Distinct'), 'largestTriangleThreeBucketsDistinct': ('largestTriangleThreeBuckets', 'Distinct'), 'sumDistinct': ('sum', 'Distinct'), 'medianDistinct': ('median', 'Distinct'), 'groupArrayMovingSumDistinct': ('groupArrayMovingSum', 'Distinct'), 'quantilesExactHighDistinct': ('quantilesExactHigh', 'Distinct'), 'covarPopDistinct': ('covarPop', 'Distinct'), 'boundingRatioDistinct': ('boundingRatio', 'Distinct'), 'quantilesGKDistinct': ('quantilesGK', 'Distinct'), 'theilsUDistinct': ('theilsU', 'Distinct'), 'deltaSumTimestampDistinct': ('deltaSumTimestamp', 'Distinct'), 'stochasticLogisticRegressionDistinct': ('stochasticLogisticRegression', 'Distinct'), 'quantilesTDigestDistinct': ('quantilesTDigest', 'Distinct'), 'studentTTestDistinct': ('studentTTest', 'Distinct'), 'maxIntersectionsDistinct': ('maxIntersections', 'Distinct'), 'quantilesBFloat16WeightedDistinct': ('quantilesBFloat16Weighted', 'Distinct'), 'kurtPopDistinct': ('kurtPop', 'Distinct'), 'quantileTimingWeightedDistinct': ('quantileTimingWeighted', 'Distinct'), 'sumMapDistinct': ('sumMap', 'Distinct'), 'anyHeavyDistinct': ('anyHeavy', 'Distinct'), 'groupBitmapXorDistinct': ('groupBitmapXor', 'Distinct'), 'uniqCombinedDistinct': ('uniqCombined', 'Distinct'), 'varPopDistinct': ('varPop', 'Distinct'), 'minDistinct': ('min', 'Distinct'), 'quantilesDeterministicDistinct': ('quantilesDeterministic', 'Distinct'), 'sparkBarDistinct': ('sparkBar', 'Distinct'), 'maxDistinct': ('max', 'Distinct'), 'cramersVBiasCorrectedDistinct': ('cramersVBiasCorrected', 'Distinct'), 'quantileInterpolatedWeightedDistinct': ('quantileInterpolatedWeighted', 'Distinct'), 'groupArraySampleDistinct': ('groupArraySample', 'Distinct'), 'varSampDistinct': ('varSamp', 'Distinct'), 'exponentialMovingAverageDistinct': ('exponentialMovingAverage', 'Distinct'), 'countDistinct': ('count', 'Distinct'), 'intervalLengthSumDistinct': ('intervalLengthSum', 'Distinct'), 'mannWhitneyUTestDistinct': ('mannWhitneyUTest', 'Distinct'), 'quantileDeterministicDistinct': ('quantileDeterministic', 'Distinct'), 'groupBitmapOrDistinct': ('groupBitmapOr', 'Distinct'), 'sumCountDistinct': ('sumCount', 'Distinct'), 'argMinDistinct': ('argMin', 'Distinct'), 'uniqDistinct': ('uniq', 'Distinct'), 'avgWeightedDistinct': ('avgWeighted', 'Distinct'), 'avgDistinct': ('avg', 'Distinct'), 'rankCorrDistinct': ('rankCorr', 'Distinct'), 'groupArrayMovingAvgDistinct': ('groupArrayMovingAvg', 'Distinct'), 'contingencyDistinct': ('contingency', 'Distinct'), 'uniqExactDistinct': ('uniqExact', 'Distinct'), 'stddevPopDistinct': ('stddevPop', 'Distinct'), 'quantileTDigestDistinct': ('quantileTDigest', 'Distinct'), 'quantileTDigestWeightedDistinct': ('quantileTDigestWeighted', 'Distinct'), 'maxMapDistinct': ('maxMap', 'Distinct'), 'welchTTestDistinct': ('welchTTest', 'Distinct'), 'quantilesExactLowDistinct': ('quantilesExactLow', 'Distinct'), 'quantilesTDigestWeightedDistinct': ('quantilesTDigestWeighted', 'Distinct'), 'quantileBFloat16WeightedDistinct': ('quantileBFloat16Weighted', 'Distinct'), 'quantileDistinct': ('quantile', 'Distinct'), 'covarSampDistinct': ('covarSamp', 'Distinct'), 'quantileTimingDistinct': ('quantileTiming', 'Distinct'), 'groupBitXorDistinct': ('groupBitXor', 'Distinct'), 'sumWithOverflowDistinct': ('sumWithOverflow', 'Distinct'), 'quantileBFloat16Distinct': ('quantileBFloat16', 'Distinct'), 'entropyDistinct': ('entropy', 'Distinct'), 'categoricalInformationValueDistinct': ('categoricalInformationValue', 'Distinct'), 'kolmogorovSmirnovTestDistinct': ('kolmogorovSmirnovTest', 'Distinct'), 'sumKahanDistinct': ('sumKahan', 'Distinct'), 'topKDistinct': ('topK', 'Distinct'), 'groupBitOrDistinct': ('groupBitOr', 'Distinct'), 'anyLastDistinct': ('anyLast', 'Distinct'), 'topKWeightedDistinct': ('topKWeighted', 'Distinct'), 'anyDistinct': ('any', 'Distinct'), 'skewPopDistinct': ('skewPop', 'Distinct'), 'uniqCombined64Distinct': ('uniqCombined64', 'Distinct'), 'uniqThetaDistinct': ('uniqTheta', 'Distinct'), 'first_valueOrDefault': ('first_value', 'OrDefault'), 'groupBitAndOrDefault': ('groupBitAnd', 'OrDefault'), 'groupBitmapOrDefault': ('groupBitmap', 'OrDefault'), 'groupBitmapAndOrDefault': ('groupBitmapAnd', 'OrDefault'), 'quantilesExactOrDefault': ('quantilesExact', 'OrDefault'), 'groupArrayInsertAtOrDefault': ('groupArrayInsertAt', 'OrDefault'), 'uniqHLL12OrDefault': ('uniqHLL12', 'OrDefault'), 'argMaxOrDefault': ('argMax', 'OrDefault'), 'quantileExactWeightedOrDefault': ('quantileExactWeighted', 'OrDefault'), 'quantileGKOrDefault': ('quantileGK', 'OrDefault'), 'cramersVOrDefault': ('cramersV', 'OrDefault'), 'kurtSampOrDefault': ('kurtSamp', 'OrDefault'), 'maxIntersectionsPositionOrDefault': ('maxIntersectionsPosition', 'OrDefault'), 'quantileExactOrDefault': ('quantileExact', 'OrDefault'), 'quantilesOrDefault': ('quantiles', 'OrDefault'), 'quantilesTimingOrDefault': ('quantilesTiming', 'OrDefault'), 'quantilesTimingWeightedOrDefault': ('quantilesTimingWeighted', 'OrDefault'), 'quantilesInterpolatedWeightedOrDefault': ('quantilesInterpolatedWeighted', 'OrDefault'), 'deltaSumOrDefault': ('deltaSum', 'OrDefault'), 'quantileExactLowOrDefault': ('quantileExactLow', 'OrDefault'), 'simpleLinearRegressionOrDefault': ('simpleLinearRegression', 'OrDefault'), 'quantileExactHighOrDefault': ('quantileExactHigh', 'OrDefault'), 'stochasticLinearRegressionOrDefault': ('stochasticLinearRegression', 'OrDefault'), 'quantilesBFloat16OrDefault': ('quantilesBFloat16', 'OrDefault'), 'groupArrayOrDefault': ('groupArray', 'OrDefault'), 'corrOrDefault': ('corr', 'OrDefault'), 'skewSampOrDefault': ('skewSamp', 'OrDefault'), 'quantilesExactWeightedOrDefault': ('quantilesExactWeighted', 'OrDefault'), 'last_valueOrDefault': ('last_value', 'OrDefault'), 'stddevSampOrDefault': ('stddevSamp', 'OrDefault'), 'meanZTestOrDefault': ('meanZTest', 'OrDefault'), 'minMapOrDefault': ('minMap', 'OrDefault'), 'groupArrayLastOrDefault': ('groupArrayLast', 'OrDefault'), 'groupUniqArrayOrDefault': ('groupUniqArray', 'OrDefault'), 'largestTriangleThreeBucketsOrDefault': ('largestTriangleThreeBuckets', 'OrDefault'), 'sumOrDefault': ('sum', 'OrDefault'), 'medianOrDefault': ('median', 'OrDefault'), 'groupArrayMovingSumOrDefault': ('groupArrayMovingSum', 'OrDefault'), 'quantilesExactHighOrDefault': ('quantilesExactHigh', 'OrDefault'), 'covarPopOrDefault': ('covarPop', 'OrDefault'), 'boundingRatioOrDefault': ('boundingRatio', 'OrDefault'), 'quantilesGKOrDefault': ('quantilesGK', 'OrDefault'), 'theilsUOrDefault': ('theilsU', 'OrDefault'), 'deltaSumTimestampOrDefault': ('deltaSumTimestamp', 'OrDefault'), 'stochasticLogisticRegressionOrDefault': ('stochasticLogisticRegression', 'OrDefault'), 'quantilesTDigestOrDefault': ('quantilesTDigest', 'OrDefault'), 'studentTTestOrDefault': ('studentTTest', 'OrDefault'), 'maxIntersectionsOrDefault': ('maxIntersections', 'OrDefault'), 'quantilesBFloat16WeightedOrDefault': ('quantilesBFloat16Weighted', 'OrDefault'), 'kurtPopOrDefault': ('kurtPop', 'OrDefault'), 'quantileTimingWeightedOrDefault': ('quantileTimingWeighted', 'OrDefault'), 'sumMapOrDefault': ('sumMap', 'OrDefault'), 'anyHeavyOrDefault': ('anyHeavy', 'OrDefault'), 'groupBitmapXorOrDefault': ('groupBitmapXor', 'OrDefault'), 'uniqCombinedOrDefault': ('uniqCombined', 'OrDefault'), 'varPopOrDefault': ('varPop', 'OrDefault'), 'minOrDefault': ('min', 'OrDefault'), 'quantilesDeterministicOrDefault': ('quantilesDeterministic', 'OrDefault'), 'sparkBarOrDefault': ('sparkBar', 'OrDefault'), 'maxOrDefault': ('max', 'OrDefault'), 'cramersVBiasCorrectedOrDefault': ('cramersVBiasCorrected', 'OrDefault'), 'quantileInterpolatedWeightedOrDefault': ('quantileInterpolatedWeighted', 'OrDefault'), 'groupArraySampleOrDefault': ('groupArraySample', 'OrDefault'), 'varSampOrDefault': ('varSamp', 'OrDefault'), 'exponentialMovingAverageOrDefault': ('exponentialMovingAverage', 'OrDefault'), 'countOrDefault': ('count', 'OrDefault'), 'intervalLengthSumOrDefault': ('intervalLengthSum', 'OrDefault'), 'mannWhitneyUTestOrDefault': ('mannWhitneyUTest', 'OrDefault'), 'quantileDeterministicOrDefault': ('quantileDeterministic', 'OrDefault'), 'groupBitmapOrOrDefault': ('groupBitmapOr', 'OrDefault'), 'sumCountOrDefault': ('sumCount', 'OrDefault'), 'argMinOrDefault': ('argMin', 'OrDefault'), 'uniqOrDefault': ('uniq', 'OrDefault'), 'avgWeightedOrDefault': ('avgWeighted', 'OrDefault'), 'avgOrDefault': ('avg', 'OrDefault'), 'rankCorrOrDefault': ('rankCorr', 'OrDefault'), 'groupArrayMovingAvgOrDefault': ('groupArrayMovingAvg', 'OrDefault'), 'contingencyOrDefault': ('contingency', 'OrDefault'), 'uniqExactOrDefault': ('uniqExact', 'OrDefault'), 'stddevPopOrDefault': ('stddevPop', 'OrDefault'), 'quantileTDigestOrDefault': ('quantileTDigest', 'OrDefault'), 'quantileTDigestWeightedOrDefault': ('quantileTDigestWeighted', 'OrDefault'), 'maxMapOrDefault': ('maxMap', 'OrDefault'), 'welchTTestOrDefault': ('welchTTest', 'OrDefault'), 'quantilesExactLowOrDefault': ('quantilesExactLow', 'OrDefault'), 'quantilesTDigestWeightedOrDefault': ('quantilesTDigestWeighted', 'OrDefault'), 'quantileBFloat16WeightedOrDefault': ('quantileBFloat16Weighted', 'OrDefault'), 'quantileOrDefault': ('quantile', 'OrDefault'), 'covarSampOrDefault': ('covarSamp', 'OrDefault'), 'quantileTimingOrDefault': ('quantileTiming', 'OrDefault'), 'groupBitXorOrDefault': ('groupBitXor', 'OrDefault'), 'sumWithOverflowOrDefault': ('sumWithOverflow', 'OrDefault'), 'quantileBFloat16OrDefault': ('quantileBFloat16', 'OrDefault'), 'entropyOrDefault': ('entropy', 'OrDefault'), 'categoricalInformationValueOrDefault': ('categoricalInformationValue', 'OrDefault'), 'kolmogorovSmirnovTestOrDefault': ('kolmogorovSmirnovTest', 'OrDefault'), 'sumKahanOrDefault': ('sumKahan', 'OrDefault'), 'topKOrDefault': ('topK', 'OrDefault'), 'groupBitOrOrDefault': ('groupBitOr', 'OrDefault'), 'anyLastOrDefault': ('anyLast', 'OrDefault'), 'topKWeightedOrDefault': ('topKWeighted', 'OrDefault'), 'anyOrDefault': ('any', 'OrDefault'), 'skewPopOrDefault': ('skewPop', 'OrDefault'), 'uniqCombined64OrDefault': ('uniqCombined64', 'OrDefault'), 'uniqThetaOrDefault': ('uniqTheta', 'OrDefault'), 'first_valueOrNull': ('first_value', 'OrNull'), 'groupBitAndOrNull': ('groupBitAnd', 'OrNull'), 'groupBitmapOrNull': ('groupBitmap', 'OrNull'), 'groupBitmapAndOrNull': ('groupBitmapAnd', 'OrNull'), 'quantilesExactOrNull': ('quantilesExact', 'OrNull'), 'groupArrayInsertAtOrNull': ('groupArrayInsertAt', 'OrNull'), 'uniqHLL12OrNull': ('uniqHLL12', 'OrNull'), 'argMaxOrNull': ('argMax', 'OrNull'), 'quantileExactWeightedOrNull': ('quantileExactWeighted', 'OrNull'), 'quantileGKOrNull': ('quantileGK', 'OrNull'), 'cramersVOrNull': ('cramersV', 'OrNull'), 'kurtSampOrNull': ('kurtSamp', 'OrNull'), 'maxIntersectionsPositionOrNull': ('maxIntersectionsPosition', 'OrNull'), 'quantileExactOrNull': ('quantileExact', 'OrNull'), 'quantilesOrNull': ('quantiles', 'OrNull'), 'quantilesTimingOrNull': ('quantilesTiming', 'OrNull'), 'quantilesTimingWeightedOrNull': ('quantilesTimingWeighted', 'OrNull'), 'quantilesInterpolatedWeightedOrNull': ('quantilesInterpolatedWeighted', 'OrNull'), 'deltaSumOrNull': ('deltaSum', 'OrNull'), 'quantileExactLowOrNull': ('quantileExactLow', 'OrNull'), 'simpleLinearRegressionOrNull': ('simpleLinearRegression', 'OrNull'), 'quantileExactHighOrNull': ('quantileExactHigh', 'OrNull'), 'stochasticLinearRegressionOrNull': ('stochasticLinearRegression', 'OrNull'), 'quantilesBFloat16OrNull': ('quantilesBFloat16', 'OrNull'), 'groupArrayOrNull': ('groupArray', 'OrNull'), 'corrOrNull': ('corr', 'OrNull'), 'skewSampOrNull': ('skewSamp', 'OrNull'), 'quantilesExactWeightedOrNull': ('quantilesExactWeighted', 'OrNull'), 'last_valueOrNull': ('last_value', 'OrNull'), 'stddevSampOrNull': ('stddevSamp', 'OrNull'), 'meanZTestOrNull': ('meanZTest', 'OrNull'), 'minMapOrNull': ('minMap', 'OrNull'), 'groupArrayLastOrNull': ('groupArrayLast', 'OrNull'), 'groupUniqArrayOrNull': ('groupUniqArray', 'OrNull'), 'largestTriangleThreeBucketsOrNull': ('largestTriangleThreeBuckets', 'OrNull'), 'sumOrNull': ('sum', 'OrNull'), 'medianOrNull': ('median', 'OrNull'), 'groupArrayMovingSumOrNull': ('groupArrayMovingSum', 'OrNull'), 'quantilesExactHighOrNull': ('quantilesExactHigh', 'OrNull'), 'covarPopOrNull': ('covarPop', 'OrNull'), 'boundingRatioOrNull': ('boundingRatio', 'OrNull'), 'quantilesGKOrNull': ('quantilesGK', 'OrNull'), 'theilsUOrNull': ('theilsU', 'OrNull'), 'deltaSumTimestampOrNull': ('deltaSumTimestamp', 'OrNull'), 'stochasticLogisticRegressionOrNull': ('stochasticLogisticRegression', 'OrNull'), 'quantilesTDigestOrNull': ('quantilesTDigest', 'OrNull'), 'studentTTestOrNull': ('studentTTest', 'OrNull'), 'maxIntersectionsOrNull': ('maxIntersections', 'OrNull'), 'quantilesBFloat16WeightedOrNull': ('quantilesBFloat16Weighted', 'OrNull'), 'kurtPopOrNull': ('kurtPop', 'OrNull'), 'quantileTimingWeightedOrNull': ('quantileTimingWeighted', 'OrNull'), 'sumMapOrNull': ('sumMap', 'OrNull'), 'anyHeavyOrNull': ('anyHeavy', 'OrNull'), 'groupBitmapXorOrNull': ('groupBitmapXor', 'OrNull'), 'uniqCombinedOrNull': ('uniqCombined', 'OrNull'), 'varPopOrNull': ('varPop', 'OrNull'), 'minOrNull': ('min', 'OrNull'), 'quantilesDeterministicOrNull': ('quantilesDeterministic', 'OrNull'), 'sparkBarOrNull': ('sparkBar', 'OrNull'), 'maxOrNull': ('max', 'OrNull'), 'cramersVBiasCorrectedOrNull': ('cramersVBiasCorrected', 'OrNull'), 'quantileInterpolatedWeightedOrNull': ('quantileInterpolatedWeighted', 'OrNull'), 'groupArraySampleOrNull': ('groupArraySample', 'OrNull'), 'varSampOrNull': ('varSamp', 'OrNull'), 'exponentialMovingAverageOrNull': ('exponentialMovingAverage', 'OrNull'), 'countOrNull': ('count', 'OrNull'), 'intervalLengthSumOrNull': ('intervalLengthSum', 'OrNull'), 'mannWhitneyUTestOrNull': ('mannWhitneyUTest', 'OrNull'), 'quantileDeterministicOrNull': ('quantileDeterministic', 'OrNull'), 'groupBitmapOrOrNull': ('groupBitmapOr', 'OrNull'), 'sumCountOrNull': ('sumCount', 'OrNull'), 'argMinOrNull': ('argMin', 'OrNull'), 'uniqOrNull': ('uniq', 'OrNull'), 'avgWeightedOrNull': ('avgWeighted', 'OrNull'), 'avgOrNull': ('avg', 'OrNull'), 'rankCorrOrNull': ('rankCorr', 'OrNull'), 'groupArrayMovingAvgOrNull': ('groupArrayMovingAvg', 'OrNull'), 'contingencyOrNull': ('contingency', 'OrNull'), 'uniqExactOrNull': ('uniqExact', 'OrNull'), 'stddevPopOrNull': ('stddevPop', 'OrNull'), 'quantileTDigestOrNull': ('quantileTDigest', 'OrNull'), 'quantileTDigestWeightedOrNull': ('quantileTDigestWeighted', 'OrNull'), 'maxMapOrNull': ('maxMap', 'OrNull'), 'welchTTestOrNull': ('welchTTest', 'OrNull'), 'quantilesExactLowOrNull': ('quantilesExactLow', 'OrNull'), 'quantilesTDigestWeightedOrNull': ('quantilesTDigestWeighted', 'OrNull'), 'quantileBFloat16WeightedOrNull': ('quantileBFloat16Weighted', 'OrNull'), 'quantileOrNull': ('quantile', 'OrNull'), 'covarSampOrNull': ('covarSamp', 'OrNull'), 'quantileTimingOrNull': ('quantileTiming', 'OrNull'), 'groupBitXorOrNull': ('groupBitXor', 'OrNull'), 'sumWithOverflowOrNull': ('sumWithOverflow', 'OrNull'), 'quantileBFloat16OrNull': ('quantileBFloat16', 'OrNull'), 'entropyOrNull': ('entropy', 'OrNull'), 'categoricalInformationValueOrNull': ('categoricalInformationValue', 'OrNull'), 'kolmogorovSmirnovTestOrNull': ('kolmogorovSmirnovTest', 'OrNull'), 'sumKahanOrNull': ('sumKahan', 'OrNull'), 'topKOrNull': ('topK', 'OrNull'), 'groupBitOrOrNull': ('groupBitOr', 'OrNull'), 'anyLastOrNull': ('anyLast', 'OrNull'), 'topKWeightedOrNull': ('topKWeighted', 'OrNull'), 'anyOrNull': ('any', 'OrNull'), 'skewPopOrNull': ('skewPop', 'OrNull'), 'uniqCombined64OrNull': ('uniqCombined64', 'OrNull'), 'uniqThetaOrNull': ('uniqTheta', 'OrNull'), 'first_valueResample': ('first_value', 'Resample'), 'groupBitAndResample': ('groupBitAnd', 'Resample'), 'groupBitmapResample': ('groupBitmap', 'Resample'), 'groupBitmapAndResample': ('groupBitmapAnd', 'Resample'), 'quantilesExactResample': ('quantilesExact', 'Resample'), 'groupArrayInsertAtResample': ('groupArrayInsertAt', 'Resample'), 'uniqHLL12Resample': ('uniqHLL12', 'Resample'), 'argMaxResample': ('argMax', 'Resample'), 'quantileExactWeightedResample': ('quantileExactWeighted', 'Resample'), 'quantileGKResample': ('quantileGK', 'Resample'), 'cramersVResample': ('cramersV', 'Resample'), 'kurtSampResample': ('kurtSamp', 'Resample'), 'maxIntersectionsPositionResample': ('maxIntersectionsPosition', 'Resample'), 'quantileExactResample': ('quantileExact', 'Resample'), 'quantilesResample': ('quantiles', 'Resample'), 'quantilesTimingResample': ('quantilesTiming', 'Resample'), 'quantilesTimingWeightedResample': ('quantilesTimingWeighted', 'Resample'), 'quantilesInterpolatedWeightedResample': ('quantilesInterpolatedWeighted', 'Resample'), 'deltaSumResample': ('deltaSum', 'Resample'), 'quantileExactLowResample': ('quantileExactLow', 'Resample'), 'simpleLinearRegressionResample': ('simpleLinearRegression', 'Resample'), 'quantileExactHighResample': ('quantileExactHigh', 'Resample'), 'stochasticLinearRegressionResample': ('stochasticLinearRegression', 'Resample'), 'quantilesBFloat16Resample': ('quantilesBFloat16', 'Resample'), 'groupArrayResample': ('groupArray', 'Resample'), 'corrResample': ('corr', 'Resample'), 'skewSampResample': ('skewSamp', 'Resample'), 'quantilesExactWeightedResample': ('quantilesExactWeighted', 'Resample'), 'last_valueResample': ('last_value', 'Resample'), 'stddevSampResample': ('stddevSamp', 'Resample'), 'meanZTestResample': ('meanZTest', 'Resample'), 'minMapResample': ('minMap', 'Resample'), 'groupArrayLastResample': ('groupArrayLast', 'Resample'), 'groupUniqArrayResample': ('groupUniqArray', 'Resample'), 'largestTriangleThreeBucketsResample': ('largestTriangleThreeBuckets', 'Resample'), 'sumResample': ('sum', 'Resample'), 'medianResample': ('median', 'Resample'), 'groupArrayMovingSumResample': ('groupArrayMovingSum', 'Resample'), 'quantilesExactHighResample': ('quantilesExactHigh', 'Resample'), 'covarPopResample': ('covarPop', 'Resample'), 'boundingRatioResample': ('boundingRatio', 'Resample'), 'quantilesGKResample': ('quantilesGK', 'Resample'), 'theilsUResample': ('theilsU', 'Resample'), 'deltaSumTimestampResample': ('deltaSumTimestamp', 'Resample'), 'stochasticLogisticRegressionResample': ('stochasticLogisticRegression', 'Resample'), 'quantilesTDigestResample': ('quantilesTDigest', 'Resample'), 'studentTTestResample': ('studentTTest', 'Resample'), 'maxIntersectionsResample': ('maxIntersections', 'Resample'), 'quantilesBFloat16WeightedResample': ('quantilesBFloat16Weighted', 'Resample'), 'kurtPopResample': ('kurtPop', 'Resample'), 'quantileTimingWeightedResample': ('quantileTimingWeighted', 'Resample'), 'sumMapResample': ('sumMap', 'Resample'), 'anyHeavyResample': ('anyHeavy', 'Resample'), 'groupBitmapXorResample': ('groupBitmapXor', 'Resample'), 'uniqCombinedResample': ('uniqCombined', 'Resample'), 'varPopResample': ('varPop', 'Resample'), 'minResample': ('min', 'Resample'), 'quantilesDeterministicResample': ('quantilesDeterministic', 'Resample'), 'sparkBarResample': ('sparkBar', 'Resample'), 'maxResample': ('max', 'Resample'), 'cramersVBiasCorrectedResample': ('cramersVBiasCorrected', 'Resample'), 'quantileInterpolatedWeightedResample': ('quantileInterpolatedWeighted', 'Resample'), 'groupArraySampleResample': ('groupArraySample', 'Resample'), 'varSampResample': ('varSamp', 'Resample'), 'exponentialMovingAverageResample': ('exponentialMovingAverage', 'Resample'), 'countResample': ('count', 'Resample'), 'intervalLengthSumResample': ('intervalLengthSum', 'Resample'), 'mannWhitneyUTestResample': ('mannWhitneyUTest', 'Resample'), 'quantileDeterministicResample': ('quantileDeterministic', 'Resample'), 'groupBitmapOrResample': ('groupBitmapOr', 'Resample'), 'sumCountResample': ('sumCount', 'Resample'), 'argMinResample': ('argMin', 'Resample'), 'uniqResample': ('uniq', 'Resample'), 'avgWeightedResample': ('avgWeighted', 'Resample'), 'avgResample': ('avg', 'Resample'), 'rankCorrResample': ('rankCorr', 'Resample'), 'groupArrayMovingAvgResample': ('groupArrayMovingAvg', 'Resample'), 'contingencyResample': ('contingency', 'Resample'), 'uniqExactResample': ('uniqExact', 'Resample'), 'stddevPopResample': ('stddevPop', 'Resample'), 'quantileTDigestResample': ('quantileTDigest', 'Resample'), 'quantileTDigestWeightedResample': ('quantileTDigestWeighted', 'Resample'), 'maxMapResample': ('maxMap', 'Resample'), 'welchTTestResample': ('welchTTest', 'Resample'), 'quantilesExactLowResample': ('quantilesExactLow', 'Resample'), 'quantilesTDigestWeightedResample': ('quantilesTDigestWeighted', 'Resample'), 'quantileBFloat16WeightedResample': ('quantileBFloat16Weighted', 'Resample'), 'quantileResample': ('quantile', 'Resample'), 'covarSampResample': ('covarSamp', 'Resample'), 'quantileTimingResample': ('quantileTiming', 'Resample'), 'groupBitXorResample': ('groupBitXor', 'Resample'), 'sumWithOverflowResample': ('sumWithOverflow', 'Resample'), 'quantileBFloat16Resample': ('quantileBFloat16', 'Resample'), 'entropyResample': ('entropy', 'Resample'), 'categoricalInformationValueResample': ('categoricalInformationValue', 'Resample'), 'kolmogorovSmirnovTestResample': ('kolmogorovSmirnovTest', 'Resample'), 'sumKahanResample': ('sumKahan', 'Resample'), 'topKResample': ('topK', 'Resample'), 'groupBitOrResample': ('groupBitOr', 'Resample'), 'anyLastResample': ('anyLast', 'Resample'), 'topKWeightedResample': ('topKWeighted', 'Resample'), 'anyResample': ('any', 'Resample'), 'skewPopResample': ('skewPop', 'Resample'), 'uniqCombined64Resample': ('uniqCombined64', 'Resample'), 'uniqThetaResample': ('uniqTheta', 'Resample'), 'first_valueArgMin': ('first_value', 'ArgMin'), 'groupBitAndArgMin': ('groupBitAnd', 'ArgMin'), 'groupBitmapArgMin': ('groupBitmap', 'ArgMin'), 'groupBitmapAndArgMin': ('groupBitmapAnd', 'ArgMin'), 'quantilesExactArgMin': ('quantilesExact', 'ArgMin'), 'groupArrayInsertAtArgMin': ('groupArrayInsertAt', 'ArgMin'), 'uniqHLL12ArgMin': ('uniqHLL12', 'ArgMin'), 'argMaxArgMin': ('argMax', 'ArgMin'), 'quantileExactWeightedArgMin': ('quantileExactWeighted', 'ArgMin'), 'quantileGKArgMin': ('quantileGK', 'ArgMin'), 'cramersVArgMin': ('cramersV', 'ArgMin'), 'kurtSampArgMin': ('kurtSamp', 'ArgMin'), 'maxIntersectionsPositionArgMin': ('maxIntersectionsPosition', 'ArgMin'), 'quantileExactArgMin': ('quantileExact', 'ArgMin'), 'quantilesArgMin': ('quantiles', 'ArgMin'), 'quantilesTimingArgMin': ('quantilesTiming', 'ArgMin'), 'quantilesTimingWeightedArgMin': ('quantilesTimingWeighted', 'ArgMin'), 'quantilesInterpolatedWeightedArgMin': ('quantilesInterpolatedWeighted', 'ArgMin'), 'deltaSumArgMin': ('deltaSum', 'ArgMin'), 'quantileExactLowArgMin': ('quantileExactLow', 'ArgMin'), 'simpleLinearRegressionArgMin': ('simpleLinearRegression', 'ArgMin'), 'quantileExactHighArgMin': ('quantileExactHigh', 'ArgMin'), 'stochasticLinearRegressionArgMin': ('stochasticLinearRegression', 'ArgMin'), 'quantilesBFloat16ArgMin': ('quantilesBFloat16', 'ArgMin'), 'groupArrayArgMin': ('groupArray', 'ArgMin'), 'corrArgMin': ('corr', 'ArgMin'), 'skewSampArgMin': ('skewSamp', 'ArgMin'), 'quantilesExactWeightedArgMin': ('quantilesExactWeighted', 'ArgMin'), 'last_valueArgMin': ('last_value', 'ArgMin'), 'stddevSampArgMin': ('stddevSamp', 'ArgMin'), 'meanZTestArgMin': ('meanZTest', 'ArgMin'), 'minMapArgMin': ('minMap', 'ArgMin'), 'groupArrayLastArgMin': ('groupArrayLast', 'ArgMin'), 'groupUniqArrayArgMin': ('groupUniqArray', 'ArgMin'), 'largestTriangleThreeBucketsArgMin': ('largestTriangleThreeBuckets', 'ArgMin'), 'sumArgMin': ('sum', 'ArgMin'), 'medianArgMin': ('median', 'ArgMin'), 'groupArrayMovingSumArgMin': ('groupArrayMovingSum', 'ArgMin'), 'quantilesExactHighArgMin': ('quantilesExactHigh', 'ArgMin'), 'covarPopArgMin': ('covarPop', 'ArgMin'), 'boundingRatioArgMin': ('boundingRatio', 'ArgMin'), 'quantilesGKArgMin': ('quantilesGK', 'ArgMin'), 'theilsUArgMin': ('theilsU', 'ArgMin'), 'deltaSumTimestampArgMin': ('deltaSumTimestamp', 'ArgMin'), 'stochasticLogisticRegressionArgMin': ('stochasticLogisticRegression', 'ArgMin'), 'quantilesTDigestArgMin': ('quantilesTDigest', 'ArgMin'), 'studentTTestArgMin': ('studentTTest', 'ArgMin'), 'maxIntersectionsArgMin': ('maxIntersections', 'ArgMin'), 'quantilesBFloat16WeightedArgMin': ('quantilesBFloat16Weighted', 'ArgMin'), 'kurtPopArgMin': ('kurtPop', 'ArgMin'), 'quantileTimingWeightedArgMin': ('quantileTimingWeighted', 'ArgMin'), 'sumMapArgMin': ('sumMap', 'ArgMin'), 'anyHeavyArgMin': ('anyHeavy', 'ArgMin'), 'groupBitmapXorArgMin': ('groupBitmapXor', 'ArgMin'), 'uniqCombinedArgMin': ('uniqCombined', 'ArgMin'), 'varPopArgMin': ('varPop', 'ArgMin'), 'minArgMin': ('min', 'ArgMin'), 'quantilesDeterministicArgMin': ('quantilesDeterministic', 'ArgMin'), 'sparkBarArgMin': ('sparkBar', 'ArgMin'), 'maxArgMin': ('max', 'ArgMin'), 'cramersVBiasCorrectedArgMin': ('cramersVBiasCorrected', 'ArgMin'), 'quantileInterpolatedWeightedArgMin': ('quantileInterpolatedWeighted', 'ArgMin'), 'groupArraySampleArgMin': ('groupArraySample', 'ArgMin'), 'varSampArgMin': ('varSamp', 'ArgMin'), 'exponentialMovingAverageArgMin': ('exponentialMovingAverage', 'ArgMin'), 'countArgMin': ('count', 'ArgMin'), 'intervalLengthSumArgMin': ('intervalLengthSum', 'ArgMin'), 'mannWhitneyUTestArgMin': ('mannWhitneyUTest', 'ArgMin'), 'quantileDeterministicArgMin': ('quantileDeterministic', 'ArgMin'), 'groupBitmapOrArgMin': ('groupBitmapOr', 'ArgMin'), 'sumCountArgMin': ('sumCount', 'ArgMin'), 'argMinArgMin': ('argMin', 'ArgMin'), 'uniqArgMin': ('uniq', 'ArgMin'), 'avgWeightedArgMin': ('avgWeighted', 'ArgMin'), 'avgArgMin': ('avg', 'ArgMin'), 'rankCorrArgMin': ('rankCorr', 'ArgMin'), 'groupArrayMovingAvgArgMin': ('groupArrayMovingAvg', 'ArgMin'), 'contingencyArgMin': ('contingency', 'ArgMin'), 'uniqExactArgMin': ('uniqExact', 'ArgMin'), 'stddevPopArgMin': ('stddevPop', 'ArgMin'), 'quantileTDigestArgMin': ('quantileTDigest', 'ArgMin'), 'quantileTDigestWeightedArgMin': ('quantileTDigestWeighted', 'ArgMin'), 'maxMapArgMin': ('maxMap', 'ArgMin'), 'welchTTestArgMin': ('welchTTest', 'ArgMin'), 'quantilesExactLowArgMin': ('quantilesExactLow', 'ArgMin'), 'quantilesTDigestWeightedArgMin': ('quantilesTDigestWeighted', 'ArgMin'), 'quantileBFloat16WeightedArgMin': ('quantileBFloat16Weighted', 'ArgMin'), 'quantileArgMin': ('quantile', 'ArgMin'), 'covarSampArgMin': ('covarSamp', 'ArgMin'), 'quantileTimingArgMin': ('quantileTiming', 'ArgMin'), 'groupBitXorArgMin': ('groupBitXor', 'ArgMin'), 'sumWithOverflowArgMin': ('sumWithOverflow', 'ArgMin'), 'quantileBFloat16ArgMin': ('quantileBFloat16', 'ArgMin'), 'entropyArgMin': ('entropy', 'ArgMin'), 'categoricalInformationValueArgMin': ('categoricalInformationValue', 'ArgMin'), 'kolmogorovSmirnovTestArgMin': ('kolmogorovSmirnovTest', 'ArgMin'), 'sumKahanArgMin': ('sumKahan', 'ArgMin'), 'topKArgMin': ('topK', 'ArgMin'), 'groupBitOrArgMin': ('groupBitOr', 'ArgMin'), 'anyLastArgMin': ('anyLast', 'ArgMin'), 'topKWeightedArgMin': ('topKWeighted', 'ArgMin'), 'anyArgMin': ('any', 'ArgMin'), 'skewPopArgMin': ('skewPop', 'ArgMin'), 'uniqCombined64ArgMin': ('uniqCombined64', 'ArgMin'), 'uniqThetaArgMin': ('uniqTheta', 'ArgMin'), 'first_valueArgMax': ('first_value', 'ArgMax'), 'groupBitAndArgMax': ('groupBitAnd', 'ArgMax'), 'groupBitmapArgMax': ('groupBitmap', 'ArgMax'), 'groupBitmapAndArgMax': ('groupBitmapAnd', 'ArgMax'), 'quantilesExactArgMax': ('quantilesExact', 'ArgMax'), 'groupArrayInsertAtArgMax': ('groupArrayInsertAt', 'ArgMax'), 'uniqHLL12ArgMax': ('uniqHLL12', 'ArgMax'), 'argMaxArgMax': ('argMax', 'ArgMax'), 'quantileExactWeightedArgMax': ('quantileExactWeighted', 'ArgMax'), 'quantileGKArgMax': ('quantileGK', 'ArgMax'), 'cramersVArgMax': ('cramersV', 'ArgMax'), 'kurtSampArgMax': ('kurtSamp', 'ArgMax'), 'maxIntersectionsPositionArgMax': ('maxIntersectionsPosition', 'ArgMax'), 'quantileExactArgMax': ('quantileExact', 'ArgMax'), 'quantilesArgMax': ('quantiles', 'ArgMax'), 'quantilesTimingArgMax': ('quantilesTiming', 'ArgMax'), 'quantilesTimingWeightedArgMax': ('quantilesTimingWeighted', 'ArgMax'), 'quantilesInterpolatedWeightedArgMax': ('quantilesInterpolatedWeighted', 'ArgMax'), 'deltaSumArgMax': ('deltaSum', 'ArgMax'), 'quantileExactLowArgMax': ('quantileExactLow', 'ArgMax'), 'simpleLinearRegressionArgMax': ('simpleLinearRegression', 'ArgMax'), 'quantileExactHighArgMax': ('quantileExactHigh', 'ArgMax'), 'stochasticLinearRegressionArgMax': ('stochasticLinearRegression', 'ArgMax'), 'quantilesBFloat16ArgMax': ('quantilesBFloat16', 'ArgMax'), 'groupArrayArgMax': ('groupArray', 'ArgMax'), 'corrArgMax': ('corr', 'ArgMax'), 'skewSampArgMax': ('skewSamp', 'ArgMax'), 'quantilesExactWeightedArgMax': ('quantilesExactWeighted', 'ArgMax'), 'last_valueArgMax': ('last_value', 'ArgMax'), 'stddevSampArgMax': ('stddevSamp', 'ArgMax'), 'meanZTestArgMax': ('meanZTest', 'ArgMax'), 'minMapArgMax': ('minMap', 'ArgMax'), 'groupArrayLastArgMax': ('groupArrayLast', 'ArgMax'), 'groupUniqArrayArgMax': ('groupUniqArray', 'ArgMax'), 'largestTriangleThreeBucketsArgMax': ('largestTriangleThreeBuckets', 'ArgMax'), 'sumArgMax': ('sum', 'ArgMax'), 'medianArgMax': ('median', 'ArgMax'), 'groupArrayMovingSumArgMax': ('groupArrayMovingSum', 'ArgMax'), 'quantilesExactHighArgMax': ('quantilesExactHigh', 'ArgMax'), 'covarPopArgMax': ('covarPop', 'ArgMax'), 'boundingRatioArgMax': ('boundingRatio', 'ArgMax'), 'quantilesGKArgMax': ('quantilesGK', 'ArgMax'), 'theilsUArgMax': ('theilsU', 'ArgMax'), 'deltaSumTimestampArgMax': ('deltaSumTimestamp', 'ArgMax'), 'stochasticLogisticRegressionArgMax': ('stochasticLogisticRegression', 'ArgMax'), 'quantilesTDigestArgMax': ('quantilesTDigest', 'ArgMax'), 'studentTTestArgMax': ('studentTTest', 'ArgMax'), 'maxIntersectionsArgMax': ('maxIntersections', 'ArgMax'), 'quantilesBFloat16WeightedArgMax': ('quantilesBFloat16Weighted', 'ArgMax'), 'kurtPopArgMax': ('kurtPop', 'ArgMax'), 'quantileTimingWeightedArgMax': ('quantileTimingWeighted', 'ArgMax'), 'sumMapArgMax': ('sumMap', 'ArgMax'), 'anyHeavyArgMax': ('anyHeavy', 'ArgMax'), 'groupBitmapXorArgMax': ('groupBitmapXor', 'ArgMax'), 'uniqCombinedArgMax': ('uniqCombined', 'ArgMax'), 'varPopArgMax': ('varPop', 'ArgMax'), 'minArgMax': ('min', 'ArgMax'), 'quantilesDeterministicArgMax': ('quantilesDeterministic', 'ArgMax'), 'sparkBarArgMax': ('sparkBar', 'ArgMax'), 'maxArgMax': ('max', 'ArgMax'), 'cramersVBiasCorrectedArgMax': ('cramersVBiasCorrected', 'ArgMax'), 'quantileInterpolatedWeightedArgMax': ('quantileInterpolatedWeighted', 'ArgMax'), 'groupArraySampleArgMax': ('groupArraySample', 'ArgMax'), 'varSampArgMax': ('varSamp', 'ArgMax'), 'exponentialMovingAverageArgMax': ('exponentialMovingAverage', 'ArgMax'), 'countArgMax': ('count', 'ArgMax'), 'intervalLengthSumArgMax': ('intervalLengthSum', 'ArgMax'), 'mannWhitneyUTestArgMax': ('mannWhitneyUTest', 'ArgMax'), 'quantileDeterministicArgMax': ('quantileDeterministic', 'ArgMax'), 'groupBitmapOrArgMax': ('groupBitmapOr', 'ArgMax'), 'sumCountArgMax': ('sumCount', 'ArgMax'), 'argMinArgMax': ('argMin', 'ArgMax'), 'uniqArgMax': ('uniq', 'ArgMax'), 'avgWeightedArgMax': ('avgWeighted', 'ArgMax'), 'avgArgMax': ('avg', 'ArgMax'), 'rankCorrArgMax': ('rankCorr', 'ArgMax'), 'groupArrayMovingAvgArgMax': ('groupArrayMovingAvg', 'ArgMax'), 'contingencyArgMax': ('contingency', 'ArgMax'), 'uniqExactArgMax': ('uniqExact', 'ArgMax'), 'stddevPopArgMax': ('stddevPop', 'ArgMax'), 'quantileTDigestArgMax': ('quantileTDigest', 'ArgMax'), 'quantileTDigestWeightedArgMax': ('quantileTDigestWeighted', 'ArgMax'), 'maxMapArgMax': ('maxMap', 'ArgMax'), 'welchTTestArgMax': ('welchTTest', 'ArgMax'), 'quantilesExactLowArgMax': ('quantilesExactLow', 'ArgMax'), 'quantilesTDigestWeightedArgMax': ('quantilesTDigestWeighted', 'ArgMax'), 'quantileBFloat16WeightedArgMax': ('quantileBFloat16Weighted', 'ArgMax'), 'quantileArgMax': ('quantile', 'ArgMax'), 'covarSampArgMax': ('covarSamp', 'ArgMax'), 'quantileTimingArgMax': ('quantileTiming', 'ArgMax'), 'groupBitXorArgMax': ('groupBitXor', 'ArgMax'), 'sumWithOverflowArgMax': ('sumWithOverflow', 'ArgMax'), 'quantileBFloat16ArgMax': ('quantileBFloat16', 'ArgMax'), 'entropyArgMax': ('entropy', 'ArgMax'), 'categoricalInformationValueArgMax': ('categoricalInformationValue', 'ArgMax'), 'kolmogorovSmirnovTestArgMax': ('kolmogorovSmirnovTest', 'ArgMax'), 'sumKahanArgMax': ('sumKahan', 'ArgMax'), 'topKArgMax': ('topK', 'ArgMax'), 'groupBitOrArgMax': ('groupBitOr', 'ArgMax'), 'anyLastArgMax': ('anyLast', 'ArgMax'), 'topKWeightedArgMax': ('topKWeighted', 'ArgMax'), 'anyArgMax': ('any', 'ArgMax'), 'skewPopArgMax': ('skewPop', 'ArgMax'), 'uniqCombined64ArgMax': ('uniqCombined64', 'ArgMax'), 'uniqThetaArgMax': ('uniqTheta', 'ArgMax'), 'first_value': ('first_value', ''), 'groupBitAnd': ('groupBitAnd', ''), 'groupBitmap': ('groupBitmap', ''), 'groupBitmapAnd': ('groupBitmapAnd', ''), 'quantilesExact': ('quantilesExact', ''), 'groupArrayInsertAt': ('groupArrayInsertAt', ''), 'uniqHLL12': ('uniqHLL12', ''), 'argMax': ('argMax', ''), 'quantileExactWeighted': ('quantileExactWeighted', ''), 'quantileGK': ('quantileGK', ''), 'cramersV': ('cramersV', ''), 'kurtSamp': ('kurtSamp', ''), 'maxIntersectionsPosition': ('maxIntersectionsPosition', ''), 'quantileExact': ('quantileExact', ''), 'quantiles': ('quantiles', ''), 'quantilesTiming': ('quantilesTiming', ''), 'quantilesTimingWeighted': ('quantilesTimingWeighted', ''), 'quantilesInterpolatedWeighted': ('quantilesInterpolatedWeighted', ''), 'deltaSum': ('deltaSum', ''), 'quantileExactLow': ('quantileExactLow', ''), 'simpleLinearRegression': ('simpleLinearRegression', ''), 'quantileExactHigh': ('quantileExactHigh', ''), 'stochasticLinearRegression': ('stochasticLinearRegression', ''), 'quantilesBFloat16': ('quantilesBFloat16', ''), 'groupArray': ('groupArray', ''), 'corr': ('corr', ''), 'skewSamp': ('skewSamp', ''), 'quantilesExactWeighted': ('quantilesExactWeighted', ''), 'last_value': ('last_value', ''), 'stddevSamp': ('stddevSamp', ''), 'meanZTest': ('meanZTest', ''), 'groupArrayLast': ('groupArrayLast', ''), 'groupUniqArray': ('groupUniqArray', ''), 'largestTriangleThreeBuckets': ('largestTriangleThreeBuckets', ''), 'sum': ('sum', ''), 'median': ('median', ''), 'groupArrayMovingSum': ('groupArrayMovingSum', ''), 'quantilesExactHigh': ('quantilesExactHigh', ''), 'covarPop': ('covarPop', ''), 'boundingRatio': ('boundingRatio', ''), 'quantilesGK': ('quantilesGK', ''), 'theilsU': ('theilsU', ''), 'deltaSumTimestamp': ('deltaSumTimestamp', ''), 'stochasticLogisticRegression': ('stochasticLogisticRegression', ''), 'quantilesTDigest': ('quantilesTDigest', ''), 'studentTTest': ('studentTTest', ''), 'maxIntersections': ('maxIntersections', ''), 'quantilesBFloat16Weighted': ('quantilesBFloat16Weighted', ''), 'kurtPop': ('kurtPop', ''), 'quantileTimingWeighted': ('quantileTimingWeighted', ''), 'anyHeavy': ('anyHeavy', ''), 'groupBitmapXor': ('groupBitmapXor', ''), 'uniqCombined': ('uniqCombined', ''), 'varPop': ('varPop', ''), 'min': ('min', ''), 'quantilesDeterministic': ('quantilesDeterministic', ''), 'sparkBar': ('sparkBar', ''), 'max': ('max', ''), 'cramersVBiasCorrected': ('cramersVBiasCorrected', ''), 'quantileInterpolatedWeighted': ('quantileInterpolatedWeighted', ''), 'groupArraySample': ('groupArraySample', ''), 'varSamp': ('varSamp', ''), 'exponentialMovingAverage': ('exponentialMovingAverage', ''), 'count': ('count', ''), 'intervalLengthSum': ('intervalLengthSum', ''), 'mannWhitneyUTest': ('mannWhitneyUTest', ''), 'quantileDeterministic': ('quantileDeterministic', ''), 'groupBitmapOr': ('groupBitmapOr', ''), 'sumCount': ('sumCount', ''), 'argMin': ('argMin', ''), 'uniq': ('uniq', ''), 'avgWeighted': ('avgWeighted', ''), 'avg': ('avg', ''), 'rankCorr': ('rankCorr', ''), 'groupArrayMovingAvg': ('groupArrayMovingAvg', ''), 'contingency': ('contingency', ''), 'uniqExact': ('uniqExact', ''), 'stddevPop': ('stddevPop', ''), 'quantileTDigest': ('quantileTDigest', ''), 'quantileTDigestWeighted': ('quantileTDigestWeighted', ''), 'welchTTest': ('welchTTest', ''), 'quantilesExactLow': ('quantilesExactLow', ''), 'quantilesTDigestWeighted': ('quantilesTDigestWeighted', ''), 'quantileBFloat16Weighted': ('quantileBFloat16Weighted', ''), 'quantile': ('quantile', ''), 'covarSamp': ('covarSamp', ''), 'quantileTiming': ('quantileTiming', ''), 'groupBitXor': ('groupBitXor', ''), 'sumWithOverflow': ('sumWithOverflow', ''), 'quantileBFloat16': ('quantileBFloat16', ''), 'entropy': ('entropy', ''), 'categoricalInformationValue': ('categoricalInformationValue', ''), 'kolmogorovSmirnovTest': ('kolmogorovSmirnovTest', ''), 'sumKahan': ('sumKahan', ''), 'topK': ('topK', ''), 'groupBitOr': ('groupBitOr', ''), 'anyLast': ('anyLast', ''), 'topKWeighted': ('topKWeighted', ''), 'any': ('any', ''), 'skewPop': ('skewPop', ''), 'uniqCombined64': ('uniqCombined64', ''), 'uniqTheta': ('uniqTheta', '')}
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.INNER: 'INNER'>, <TokenType.ASOF: 'ASOF'>, <TokenType.ANTI: 'ANTI'>, <TokenType.ARRAY: 'ARRAY'>, <TokenType.SEMI: 'SEMI'>, <TokenType.CROSS: 'CROSS'>, <TokenType.ANY: 'ANY'>, <TokenType.OUTER: 'OUTER'>}
TABLE_ALIAS_TOKENS =
{<TokenType.PROCEDURE: 'PROCEDURE'>, <TokenType.IPV4: 'IPV4'>, <TokenType.OPERATOR: 'OPERATOR'>, <TokenType.BIGDECIMAL: 'BIGDECIMAL'>, <TokenType.TIMETZ: 'TIMETZ'>, <TokenType.VARBINARY: 'VARBINARY'>, <TokenType.ORDINALITY: 'ORDINALITY'>, <TokenType.AGGREGATEFUNCTION: 'AGGREGATEFUNCTION'>, <TokenType.UNIQUE: 'UNIQUE'>, <TokenType.STORAGE_INTEGRATION: 'STORAGE_INTEGRATION'>, <TokenType.DESC: 'DESC'>, <TokenType.FALSE: 'FALSE'>, <TokenType.MEDIUMBLOB: 'MEDIUMBLOB'>, <TokenType.MEDIUMINT: 'MEDIUMINT'>, <TokenType.LOAD: 'LOAD'>, <TokenType.NESTED: 'NESTED'>, <TokenType.LONGBLOB: 'LONGBLOB'>, <TokenType.TSTZMULTIRANGE: 'TSTZMULTIRANGE'>, <TokenType.IPPREFIX: 'IPPREFIX'>, <TokenType.TIMESTAMP_S: 'TIMESTAMP_S'>, <TokenType.NULL: 'NULL'>, <TokenType.SMALLMONEY: 'SMALLMONEY'>, <TokenType.INT4MULTIRANGE: 'INT4MULTIRANGE'>, <TokenType.SMALLINT: 'SMALLINT'>, <TokenType.JSONB: 'JSONB'>, <TokenType.IPV6: 'IPV6'>, <TokenType.TIMESTAMP: 'TIMESTAMP'>, <TokenType.SIMPLEAGGREGATEFUNCTION: 'SIMPLEAGGREGATEFUNCTION'>, <TokenType.ALL: 'ALL'>, <TokenType.INET: 'INET'>, <TokenType.UNPIVOT: 'UNPIVOT'>, <TokenType.INTERVAL: 'INTERVAL'>, <TokenType.INDEX: 'INDEX'>, <TokenType.FIXEDSTRING: 'FIXEDSTRING'>, <TokenType.DATE: 'DATE'>, <TokenType.END: 'END'>, <TokenType.FUNCTION: 'FUNCTION'>, <TokenType.TEXT: 'TEXT'>, <TokenType.DELETE: 'DELETE'>, <TokenType.MONEY: 'MONEY'>, <TokenType.JSON: 'JSON'>, <TokenType.UUID: 'UUID'>, <TokenType.FLOAT: 'FLOAT'>, <TokenType.AUTO_INCREMENT: 'AUTO_INCREMENT'>, <TokenType.ENUM16: 'ENUM16'>, <TokenType.UTINYINT: 'UTINYINT'>, <TokenType.SCHEMA: 'SCHEMA'>, <TokenType.NUMRANGE: 'NUMRANGE'>, <TokenType.COMMIT: 'COMMIT'>, <TokenType.LOWCARDINALITY: 'LOWCARDINALITY'>, <TokenType.FILTER: 'FILTER'>, <TokenType.SOME: 'SOME'>, <TokenType.INT4RANGE: 'INT4RANGE'>, <TokenType.VARCHAR: 'VARCHAR'>, <TokenType.DATETIME: 'DATETIME'>, <TokenType.RECURSIVE: 'RECURSIVE'>, <TokenType.DATERANGE: 'DATERANGE'>, <TokenType.DOUBLE: 'DOUBLE'>, <TokenType.DATE32: 'DATE32'>, <TokenType.IPADDRESS: 'IPADDRESS'>, <TokenType.BPCHAR: 'BPCHAR'>, <TokenType.SHOW: 'SHOW'>, <TokenType.EXISTS: 'EXISTS'>, <TokenType.SMALLSERIAL: 'SMALLSERIAL'>, <TokenType.UBIGINT: 'UBIGINT'>, <TokenType.STRUCT: 'STRUCT'>, <TokenType.USERDEFINED: 'USERDEFINED'>, <TokenType.PERCENT: 'PERCENT'>, <TokenType.MODEL: 'MODEL'>, <TokenType.NVARCHAR: 'NVARCHAR'>, <TokenType.BIGSERIAL: 'BIGSERIAL'>, <TokenType.NULLABLE: 'NULLABLE'>, <TokenType.UNKNOWN: 'UNKNOWN'>, <TokenType.TINYINT: 'TINYINT'>, <TokenType.NEXT: 'NEXT'>, <TokenType.BIGINT: 'BIGINT'>, <TokenType.ASC: 'ASC'>, <TokenType.DEFAULT: 'DEFAULT'>, <TokenType.TRUE: 'TRUE'>, <TokenType.ISNULL: 'ISNULL'>, <TokenType.TSRANGE: 'TSRANGE'>, <TokenType.USMALLINT: 'USMALLINT'>, <TokenType.IMAGE: 'IMAGE'>, <TokenType.HLLSKETCH: 'HLLSKETCH'>, <TokenType.COLUMN: 'COLUMN'>, <TokenType.MEDIUMTEXT: 'MEDIUMTEXT'>, <TokenType.RANGE: 'RANGE'>, <TokenType.INT8MULTIRANGE: 'INT8MULTIRANGE'>, <TokenType.CURRENT_TIME: 'CURRENT_TIME'>, <TokenType.COMMENT: 'COMMENT'>, <TokenType.REFERENCES: 'REFERENCES'>, <TokenType.CURRENT_USER: 'CURRENT_USER'>, <TokenType.UNIQUEIDENTIFIER: 'UNIQUEIDENTIFIER'>, <TokenType.OBJECT: 'OBJECT'>, <TokenType.TSMULTIRANGE: 'TSMULTIRANGE'>, <TokenType.GEOMETRY: 'GEOMETRY'>, <TokenType.XML: 'XML'>, <TokenType.COLLATE: 'COLLATE'>, <TokenType.OVERLAPS: 'OVERLAPS'>, <TokenType.TINYBLOB: 'TINYBLOB'>, <TokenType.UMEDIUMINT: 'UMEDIUMINT'>, <TokenType.YEAR: 'YEAR'>, <TokenType.DECIMAL: 'DECIMAL'>, <TokenType.DESCRIBE: 'DESCRIBE'>, <TokenType.EXECUTE: 'EXECUTE'>, <TokenType.SERIAL: 'SERIAL'>, <TokenType.MAP: 'MAP'>, <TokenType.TIMESTAMPTZ: 'TIMESTAMPTZ'>, <TokenType.BIT: 'BIT'>, <TokenType.ENUM: 'ENUM'>, <TokenType.DATEMULTIRANGE: 'DATEMULTIRANGE'>, <TokenType.REPLACE: 'REPLACE'>, <TokenType.TABLE: 'TABLE'>, <TokenType.UDECIMAL: 'UDECIMAL'>, <TokenType.IS: 'IS'>, <TokenType.PSEUDO_TYPE: 'PSEUDO_TYPE'>, <TokenType.ROWS: 'ROWS'>, <TokenType.OVERWRITE: 'OVERWRITE'>, <TokenType.ENUM8: 'ENUM8'>, <TokenType.CURRENT_DATE: 'CURRENT_DATE'>, <TokenType.CHAR: 'CHAR'>, <TokenType.BINARY: 'BINARY'>, <TokenType.NCHAR: 'NCHAR'>, <TokenType.SET: 'SET'>, <TokenType.PARTITION: 'PARTITION'>, <TokenType.VARIANT: 'VARIANT'>, <TokenType.ROWVERSION: 'ROWVERSION'>, <TokenType.CURRENT_DATETIME: 'CURRENT_DATETIME'>, <TokenType.UINT: 'UINT'>, <TokenType.HSTORE: 'HSTORE'>, <TokenType.CONSTRAINT: 'CONSTRAINT'>, <TokenType.TEMPORARY: 'TEMPORARY'>, <TokenType.INT256: 'INT256'>, <TokenType.BOOLEAN: 'BOOLEAN'>, <TokenType.INT: 'INT'>, <TokenType.TIME: 'TIME'>, <TokenType.ROW: 'ROW'>, <TokenType.VOLATILE: 'VOLATILE'>, <TokenType.MERGE: 'MERGE'>, <TokenType.PIVOT: 'PIVOT'>, <TokenType.TOP: 'TOP'>, <TokenType.KILL: 'KILL'>, <TokenType.BEGIN: 'BEGIN'>, <TokenType.TSTZRANGE: 'TSTZRANGE'>, <TokenType.CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP'>, <TokenType.PRAGMA: 'PRAGMA'>, <TokenType.CACHE: 'CACHE'>, <TokenType.NUMMULTIRANGE: 'NUMMULTIRANGE'>, <TokenType.REFRESH: 'REFRESH'>, <TokenType.DICTIONARY: 'DICTIONARY'>, <TokenType.CASE: 'CASE'>, <TokenType.UINT128: 'UINT128'>, <TokenType.LONGTEXT: 'LONGTEXT'>, <TokenType.SUPER: 'SUPER'>, <TokenType.ESCAPE: 'ESCAPE'>, <TokenType.TIMESTAMP_NS: 'TIMESTAMP_NS'>, <TokenType.GEOGRAPHY: 'GEOGRAPHY'>, <TokenType.INT8RANGE: 'INT8RANGE'>, <TokenType.DIV: 'DIV'>, <TokenType.UINT256: 'UINT256'>, <TokenType.UPDATE: 'UPDATE'>, <TokenType.DATETIME64: 'DATETIME64'>, <TokenType.TIMESTAMPLTZ: 'TIMESTAMPLTZ'>, <TokenType.DATABASE: 'DATABASE'>, <TokenType.FOREIGN_KEY: 'FOREIGN_KEY'>, <TokenType.COMMAND: 'COMMAND'>, <TokenType.KEEP: 'KEEP'>, <TokenType.VIEW: 'VIEW'>, <TokenType.TINYTEXT: 'TINYTEXT'>, <TokenType.INT128: 'INT128'>, <TokenType.FIRST: 'FIRST'>, <TokenType.TIMESTAMP_MS: 'TIMESTAMP_MS'>, <TokenType.VAR: 'VAR'>, <TokenType.OBJECT_IDENTIFIER: 'OBJECT_IDENTIFIER'>, <TokenType.USE: 'USE'>}
QUERY_MODIFIER_PARSERS =
{<TokenType.MATCH_RECOGNIZE: 'MATCH_RECOGNIZE'>: <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
- PRIMARY_PARSERS
- PLACEHOLDER_PARSERS
- PROPERTY_PARSERS
- CONSTRAINT_PARSERS
- ALTER_PARSERS
- SCHEMA_UNNAMED_CONSTRAINTS
- INVALID_FUNC_NAME_TOKENS
- SET_PARSERS
- SHOW_PARSERS
- TYPE_LITERAL_PARSERS
- MODIFIABLES
- DDL_SELECT_TOKENS
- PRE_VOLATILE_TOKENS
- TRANSACTION_KIND
- TRANSACTION_CHARACTERISTICS
- 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
- error_level
- error_message_context
- max_errors
- dialect
- reset
- parse
- parse_into
- check_errors
- raise_error
- expression
- validate_expression
- errors
- sql
511 class Generator(generator.Generator): 512 QUERY_HINTS = False 513 STRUCT_DELIMITER = ("(", ")") 514 NVL2_SUPPORTED = False 515 TABLESAMPLE_REQUIRES_PARENS = False 516 TABLESAMPLE_SIZE_IS_ROWS = False 517 TABLESAMPLE_KEYWORDS = "SAMPLE" 518 LAST_DAY_SUPPORTS_DATE_PART = False 519 CAN_IMPLEMENT_ARRAY_ANY = True 520 521 STRING_TYPE_MAPPING = { 522 exp.DataType.Type.CHAR: "String", 523 exp.DataType.Type.LONGBLOB: "String", 524 exp.DataType.Type.LONGTEXT: "String", 525 exp.DataType.Type.MEDIUMBLOB: "String", 526 exp.DataType.Type.MEDIUMTEXT: "String", 527 exp.DataType.Type.TINYBLOB: "String", 528 exp.DataType.Type.TINYTEXT: "String", 529 exp.DataType.Type.TEXT: "String", 530 exp.DataType.Type.VARBINARY: "String", 531 exp.DataType.Type.VARCHAR: "String", 532 } 533 534 SUPPORTED_JSON_PATH_PARTS = { 535 exp.JSONPathKey, 536 exp.JSONPathRoot, 537 exp.JSONPathSubscript, 538 } 539 540 TYPE_MAPPING = { 541 **generator.Generator.TYPE_MAPPING, 542 **STRING_TYPE_MAPPING, 543 exp.DataType.Type.ARRAY: "Array", 544 exp.DataType.Type.BIGINT: "Int64", 545 exp.DataType.Type.DATE32: "Date32", 546 exp.DataType.Type.DATETIME64: "DateTime64", 547 exp.DataType.Type.DOUBLE: "Float64", 548 exp.DataType.Type.ENUM: "Enum", 549 exp.DataType.Type.ENUM8: "Enum8", 550 exp.DataType.Type.ENUM16: "Enum16", 551 exp.DataType.Type.FIXEDSTRING: "FixedString", 552 exp.DataType.Type.FLOAT: "Float32", 553 exp.DataType.Type.INT: "Int32", 554 exp.DataType.Type.MEDIUMINT: "Int32", 555 exp.DataType.Type.INT128: "Int128", 556 exp.DataType.Type.INT256: "Int256", 557 exp.DataType.Type.LOWCARDINALITY: "LowCardinality", 558 exp.DataType.Type.MAP: "Map", 559 exp.DataType.Type.NESTED: "Nested", 560 exp.DataType.Type.NULLABLE: "Nullable", 561 exp.DataType.Type.SMALLINT: "Int16", 562 exp.DataType.Type.STRUCT: "Tuple", 563 exp.DataType.Type.TINYINT: "Int8", 564 exp.DataType.Type.UBIGINT: "UInt64", 565 exp.DataType.Type.UINT: "UInt32", 566 exp.DataType.Type.UINT128: "UInt128", 567 exp.DataType.Type.UINT256: "UInt256", 568 exp.DataType.Type.USMALLINT: "UInt16", 569 exp.DataType.Type.UTINYINT: "UInt8", 570 exp.DataType.Type.IPV4: "IPv4", 571 exp.DataType.Type.IPV6: "IPv6", 572 exp.DataType.Type.AGGREGATEFUNCTION: "AggregateFunction", 573 exp.DataType.Type.SIMPLEAGGREGATEFUNCTION: "SimpleAggregateFunction", 574 } 575 576 TRANSFORMS = { 577 **generator.Generator.TRANSFORMS, 578 exp.AnyValue: rename_func("any"), 579 exp.ApproxDistinct: rename_func("uniq"), 580 exp.ArrayFilter: lambda self, e: self.func("arrayFilter", e.expression, e.this), 581 exp.ArraySize: rename_func("LENGTH"), 582 exp.ArraySum: rename_func("arraySum"), 583 exp.ArgMax: arg_max_or_min_no_count("argMax"), 584 exp.ArgMin: arg_max_or_min_no_count("argMin"), 585 exp.Array: inline_array_sql, 586 exp.CastToStrType: rename_func("CAST"), 587 exp.CountIf: rename_func("countIf"), 588 exp.CurrentDate: lambda self, e: self.func("CURRENT_DATE"), 589 exp.DateAdd: date_delta_sql("DATE_ADD"), 590 exp.DateDiff: date_delta_sql("DATE_DIFF"), 591 exp.Explode: rename_func("arrayJoin"), 592 exp.Final: lambda self, e: f"{self.sql(e, 'this')} FINAL", 593 exp.IsNan: rename_func("isNaN"), 594 exp.JSONExtract: json_extract_segments("JSONExtractString", quoted_index=False), 595 exp.JSONExtractScalar: json_extract_segments("JSONExtractString", quoted_index=False), 596 exp.JSONPathKey: json_path_key_only_name, 597 exp.JSONPathRoot: lambda *_: "", 598 exp.Map: lambda self, e: _lower_func(var_map_sql(self, e)), 599 exp.Nullif: rename_func("nullIf"), 600 exp.PartitionedByProperty: lambda self, e: f"PARTITION BY {self.sql(e, 'this')}", 601 exp.Pivot: no_pivot_sql, 602 exp.Quantile: _quantile_sql, 603 exp.RegexpLike: lambda self, e: self.func("match", e.this, e.expression), 604 exp.Rand: rename_func("randCanonical"), 605 exp.Select: transforms.preprocess([transforms.eliminate_qualify]), 606 exp.StartsWith: rename_func("startsWith"), 607 exp.StrPosition: lambda self, e: self.func( 608 "position", e.this, e.args.get("substr"), e.args.get("position") 609 ), 610 exp.VarMap: lambda self, e: _lower_func(var_map_sql(self, e)), 611 exp.Xor: lambda self, e: self.func("xor", e.this, e.expression, *e.expressions), 612 } 613 614 PROPERTIES_LOCATION = { 615 **generator.Generator.PROPERTIES_LOCATION, 616 exp.VolatileProperty: exp.Properties.Location.UNSUPPORTED, 617 exp.PartitionedByProperty: exp.Properties.Location.POST_SCHEMA, 618 exp.OnCluster: exp.Properties.Location.POST_NAME, 619 } 620 621 JOIN_HINTS = False 622 TABLE_HINTS = False 623 EXPLICIT_UNION = True 624 GROUPINGS_SEP = "" 625 626 # there's no list in docs, but it can be found in Clickhouse code 627 # see `ClickHouse/src/Parsers/ParserCreate*.cpp` 628 ON_CLUSTER_TARGETS = { 629 "DATABASE", 630 "TABLE", 631 "VIEW", 632 "DICTIONARY", 633 "INDEX", 634 "FUNCTION", 635 "NAMED COLLECTION", 636 } 637 638 def _jsonpathsubscript_sql(self, expression: exp.JSONPathSubscript) -> str: 639 this = self.json_path_part(expression.this) 640 return str(int(this) + 1) if is_int(this) else this 641 642 def likeproperty_sql(self, expression: exp.LikeProperty) -> str: 643 return f"AS {self.sql(expression, 'this')}" 644 645 def _any_to_has( 646 self, 647 expression: exp.EQ | exp.NEQ, 648 default: t.Callable[[t.Any], str], 649 prefix: str = "", 650 ) -> str: 651 if isinstance(expression.left, exp.Any): 652 arr = expression.left 653 this = expression.right 654 elif isinstance(expression.right, exp.Any): 655 arr = expression.right 656 this = expression.left 657 else: 658 return default(expression) 659 660 return prefix + self.func("has", arr.this.unnest(), this) 661 662 def eq_sql(self, expression: exp.EQ) -> str: 663 return self._any_to_has(expression, super().eq_sql) 664 665 def neq_sql(self, expression: exp.NEQ) -> str: 666 return self._any_to_has(expression, super().neq_sql, "NOT ") 667 668 def regexpilike_sql(self, expression: exp.RegexpILike) -> str: 669 # Manually add a flag to make the search case-insensitive 670 regex = self.func("CONCAT", "'(?i)'", expression.expression) 671 return self.func("match", expression.this, regex) 672 673 def datatype_sql(self, expression: exp.DataType) -> str: 674 # String is the standard ClickHouse type, every other variant is just an alias. 675 # Additionally, any supplied length parameter will be ignored. 676 # 677 # https://clickhouse.com/docs/en/sql-reference/data-types/string 678 if expression.this in self.STRING_TYPE_MAPPING: 679 return "String" 680 681 return super().datatype_sql(expression) 682 683 def cte_sql(self, expression: exp.CTE) -> str: 684 if expression.args.get("scalar"): 685 this = self.sql(expression, "this") 686 alias = self.sql(expression, "alias") 687 return f"{this} AS {alias}" 688 689 return super().cte_sql(expression) 690 691 def after_limit_modifiers(self, expression: exp.Expression) -> t.List[str]: 692 return super().after_limit_modifiers(expression) + [ 693 ( 694 self.seg("SETTINGS ") + self.expressions(expression, key="settings", flat=True) 695 if expression.args.get("settings") 696 else "" 697 ), 698 ( 699 self.seg("FORMAT ") + self.sql(expression, "format") 700 if expression.args.get("format") 701 else "" 702 ), 703 ] 704 705 def parameterizedagg_sql(self, expression: exp.ParameterizedAgg) -> str: 706 params = self.expressions(expression, key="params", flat=True) 707 return self.func(expression.name, *expression.expressions) + f"({params})" 708 709 def anonymousaggfunc_sql(self, expression: exp.AnonymousAggFunc) -> str: 710 return self.func(expression.name, *expression.expressions) 711 712 def combinedaggfunc_sql(self, expression: exp.CombinedAggFunc) -> str: 713 return self.anonymousaggfunc_sql(expression) 714 715 def combinedparameterizedagg_sql(self, expression: exp.CombinedParameterizedAgg) -> str: 716 return self.parameterizedagg_sql(expression) 717 718 def placeholder_sql(self, expression: exp.Placeholder) -> str: 719 return f"{{{expression.name}: {self.sql(expression, 'kind')}}}" 720 721 def oncluster_sql(self, expression: exp.OnCluster) -> str: 722 return f"ON CLUSTER {self.sql(expression, 'this')}" 723 724 def createable_sql(self, expression: exp.Create, locations: t.DefaultDict) -> str: 725 if expression.kind in self.ON_CLUSTER_TARGETS and locations.get( 726 exp.Properties.Location.POST_NAME 727 ): 728 this_name = self.sql(expression.this, "this") 729 this_properties = " ".join( 730 [self.sql(prop) for prop in locations[exp.Properties.Location.POST_NAME]] 731 ) 732 this_schema = self.schema_columns_sql(expression.this) 733 return f"{this_name}{self.sep()}{this_properties}{self.sep()}{this_schema}" 734 735 return super().createable_sql(expression, locations)
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.JSONPathRoot'>, <class 'sqlglot.expressions.JSONPathSubscript'>}
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.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.ExecuteAsProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.ExternalProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.HeapProperty'>: <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.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.VarMap'>: <function ClickHouse.Generator.<lambda>>, <class 'sqlglot.expressions.VolatileProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.WithJournalTableProperty'>: <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.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.HeapProperty'>: <Location.POST_WITH: 'POST_WITH'>, <class 'sqlglot.expressions.InheritsProperty'>: <Location.POST_SCHEMA: 'POST_SCHEMA'>, <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.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.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.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 =
{'DICTIONARY', 'FUNCTION', 'NAMED COLLECTION', 'VIEW', 'TABLE', 'INDEX', 'DATABASE'}
673 def datatype_sql(self, expression: exp.DataType) -> str: 674 # String is the standard ClickHouse type, every other variant is just an alias. 675 # Additionally, any supplied length parameter will be ignored. 676 # 677 # https://clickhouse.com/docs/en/sql-reference/data-types/string 678 if expression.this in self.STRING_TYPE_MAPPING: 679 return "String" 680 681 return super().datatype_sql(expression)
691 def after_limit_modifiers(self, expression: exp.Expression) -> t.List[str]: 692 return super().after_limit_modifiers(expression) + [ 693 ( 694 self.seg("SETTINGS ") + self.expressions(expression, key="settings", flat=True) 695 if expression.args.get("settings") 696 else "" 697 ), 698 ( 699 self.seg("FORMAT ") + self.sql(expression, "format") 700 if expression.args.get("format") 701 else "" 702 ), 703 ]
def
combinedparameterizedagg_sql(self, expression: sqlglot.expressions.CombinedParameterizedAgg) -> str:
724 def createable_sql(self, expression: exp.Create, locations: t.DefaultDict) -> str: 725 if expression.kind in self.ON_CLUSTER_TARGETS and locations.get( 726 exp.Properties.Location.POST_NAME 727 ): 728 this_name = self.sql(expression.this, "this") 729 this_properties = " ".join( 730 [self.sql(prop) for prop in locations[exp.Properties.Location.POST_NAME]] 731 ) 732 this_schema = self.schema_columns_sql(expression.this) 733 return f"{this_name}{self.sep()}{this_properties}{self.sep()}{this_schema}" 734 735 return super().createable_sql(expression, locations)
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
- EXPRESSIONS_WITHOUT_NESTED_CTES
- KEY_VALUE_DEFINITIONS
- 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
- 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
- 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_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
- offset_limit_modifiers
- after_having_modifiers
- select_sql
- schema_sql
- schema_columns_sql
- star_sql
- parameter_sql
- sessionparameter_sql
- subquery_sql
- qualify_sql
- 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
- 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
- or_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
- set_operation
- tag_sql
- token_sql
- userdefinedfunction_sql
- joinhint_sql
- kwarg_sql
- when_sql
- merge_sql
- tochar_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