diff --git a/sqlglot/parser.py b/sqlglot/parser.py index e14c727f81..be18cda23e 100644 --- a/sqlglot/parser.py +++ b/sqlglot/parser.py @@ -1136,7 +1136,14 @@ class Parser(metaclass=_Parser): "TRUNCATE": lambda self: self._parse_partitioned_by_bucket_or_truncate(), } - def _parse_partitioned_by_bucket_or_truncate(self) -> exp.Expression: + def _parse_partitioned_by_bucket_or_truncate(self) -> t.Optional[exp.Expression]: + if not self._match(TokenType.L_PAREN, advance=False): + # Partitioning by bucket or truncate follows the syntax: + # PARTITION BY (BUCKET(..) | TRUNCATE(..)) + # If we don't have parenthesis after each keyword, we should instead parse this as an identifier + self._retreat(self._index - 1) + return None + klass = ( exp.PartitionedByBucket if self._prev.text.upper() == "BUCKET" diff --git a/tests/fixtures/identity.sql b/tests/fixtures/identity.sql index eb509010f7..a6e8ac9151 100644 --- a/tests/fixtures/identity.sql +++ b/tests/fixtures/identity.sql @@ -552,6 +552,8 @@ CREATE TABLE a.b AS SELECT a FROM a.c CREATE TABLE IF NOT EXISTS x AS SELECT a FROM d CREATE TABLE z (a INT, b VARCHAR, c VARCHAR(100), d DECIMAL(5, 3)) CREATE TABLE z (end INT) +CREATE TABLE z (bucket INT) +CREATE TABLE z (truncate INT) CREATE TABLE z (a ARRAY, b MAP, c DECIMAL(5, 3)) CREATE TABLE z (a INT, b VARCHAR COMMENT 'z', c VARCHAR(100) COMMENT 'z', d DECIMAL(5, 3)) CREATE TABLE z (a INT(11) DEFAULT UUID())