Skip to content

Commit e9b3156

Browse files
authored
Fix(athena): Handle transpilation of FileFormatProperty from dialects that treat it as a variable and not a string literal (#5133)
* Fix(athena): Handle transpilation of FileFormatProperty from dialects that treat it as a variable and not a string literal * PR feedback
1 parent 86ef8a5 commit e9b3156

File tree

5 files changed

+11
-9
lines changed

5 files changed

+11
-9
lines changed

sqlglot/dialects/athena.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,6 @@ class Generator(Trino.Generator):
148148

149149
TRANSFORMS = {
150150
**Trino.Generator.TRANSFORMS,
151-
exp.FileFormatProperty: lambda self, e: f"format={self.sql(e, 'this')}",
152151
exp.PartitionedByProperty: _partitioned_by_property_sql,
153152
exp.LocationProperty: _location_property_sql,
154153
}

sqlglot/dialects/presto.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,8 @@ class Generator(generator.Generator):
461461
exp.DiToDate: lambda self,
462462
e: f"CAST(DATE_PARSE(CAST({self.sql(e, 'this')} AS VARCHAR), {Presto.DATEINT_FORMAT}) AS DATE)",
463463
exp.Encode: lambda self, e: encode_decode_sql(self, e, "TO_UTF8"),
464-
exp.FileFormatProperty: lambda self, e: f"FORMAT='{e.name.upper()}'",
464+
exp.FileFormatProperty: lambda self,
465+
e: f"format={self.sql(exp.Literal.string(e.name))}",
465466
exp.First: _first_last_sql,
466467
exp.FromTimeZone: lambda self,
467468
e: f"WITH_TIMEZONE({self.sql(e, 'this')}, {self.sql(e, 'zone')}) AT TIME ZONE 'UTC'",

tests/dialects/test_hive.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ def test_ddl(self):
161161
"CREATE TABLE test STORED AS parquet TBLPROPERTIES ('x'='1', 'Z'='2') AS SELECT 1",
162162
write={
163163
"duckdb": "CREATE TABLE test AS SELECT 1",
164-
"presto": "CREATE TABLE test WITH (FORMAT='PARQUET', x='1', Z='2') AS SELECT 1",
164+
"presto": "CREATE TABLE test WITH (format='parquet', x='1', Z='2') AS SELECT 1",
165165
"hive": "CREATE TABLE test STORED AS PARQUET TBLPROPERTIES ('x'='1', 'Z'='2') AS SELECT 1",
166166
"spark": "CREATE TABLE test USING PARQUET TBLPROPERTIES ('x'='1', 'Z'='2') AS SELECT 1",
167167
},

tests/dialects/test_presto.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ def test_ddl(self):
465465
"CREATE TABLE test WITH (FORMAT = 'PARQUET') AS SELECT 1",
466466
write={
467467
"duckdb": "CREATE TABLE test AS SELECT 1",
468-
"presto": "CREATE TABLE test WITH (FORMAT='PARQUET') AS SELECT 1",
468+
"presto": "CREATE TABLE test WITH (format='PARQUET') AS SELECT 1",
469469
"hive": "CREATE TABLE test STORED AS PARQUET AS SELECT 1",
470470
"spark": "CREATE TABLE test USING PARQUET AS SELECT 1",
471471
},
@@ -474,7 +474,7 @@ def test_ddl(self):
474474
"CREATE TABLE test STORED AS 'PARQUET' AS SELECT 1",
475475
write={
476476
"duckdb": "CREATE TABLE test AS SELECT 1",
477-
"presto": "CREATE TABLE test WITH (FORMAT='PARQUET') AS SELECT 1",
477+
"presto": "CREATE TABLE test WITH (format='PARQUET') AS SELECT 1",
478478
"hive": "CREATE TABLE test STORED AS PARQUET AS SELECT 1",
479479
"spark": "CREATE TABLE test USING PARQUET AS SELECT 1",
480480
},
@@ -483,7 +483,7 @@ def test_ddl(self):
483483
"CREATE TABLE test WITH (FORMAT = 'PARQUET', X = '1', Z = '2') AS SELECT 1",
484484
write={
485485
"duckdb": "CREATE TABLE test AS SELECT 1",
486-
"presto": "CREATE TABLE test WITH (FORMAT='PARQUET', X='1', Z='2') AS SELECT 1",
486+
"presto": "CREATE TABLE test WITH (format='PARQUET', X='1', Z='2') AS SELECT 1",
487487
"hive": "CREATE TABLE test STORED AS PARQUET TBLPROPERTIES ('X'='1', 'Z'='2') AS SELECT 1",
488488
"spark": "CREATE TABLE test USING PARQUET TBLPROPERTIES ('X'='1', 'Z'='2') AS SELECT 1",
489489
},

tests/dialects/test_spark.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def test_ddl(self):
5656
"CREATE TABLE x USING ICEBERG PARTITIONED BY (MONTHS(y)) LOCATION 's3://z'",
5757
write={
5858
"duckdb": "CREATE TABLE x",
59-
"presto": "CREATE TABLE x WITH (FORMAT='ICEBERG', PARTITIONED_BY=ARRAY['MONTHS(y)'])",
59+
"presto": "CREATE TABLE x WITH (format='ICEBERG', PARTITIONED_BY=ARRAY['MONTHS(y)'])",
6060
"hive": "CREATE TABLE x STORED AS ICEBERG PARTITIONED BY (MONTHS(y)) LOCATION 's3://z'",
6161
"spark": "CREATE TABLE x USING ICEBERG PARTITIONED BY (MONTHS(y)) LOCATION 's3://z'",
6262
},
@@ -65,7 +65,9 @@ def test_ddl(self):
6565
"CREATE TABLE test STORED AS PARQUET AS SELECT 1",
6666
write={
6767
"duckdb": "CREATE TABLE test AS SELECT 1",
68-
"presto": "CREATE TABLE test WITH (FORMAT='PARQUET') AS SELECT 1",
68+
"presto": "CREATE TABLE test WITH (format='PARQUET') AS SELECT 1",
69+
"trino": "CREATE TABLE test WITH (format='PARQUET') AS SELECT 1",
70+
"athena": "CREATE TABLE test WITH (format='PARQUET') AS SELECT 1", # note: lowercase format property is important for Athena
6971
"hive": "CREATE TABLE test STORED AS PARQUET AS SELECT 1",
7072
"spark": "CREATE TABLE test USING PARQUET AS SELECT 1",
7173
},
@@ -83,7 +85,7 @@ def test_ddl(self):
8385
COMMENT 'Test comment: blah'
8486
WITH (
8587
PARTITIONED_BY=ARRAY['date'],
86-
FORMAT='ICEBERG',
88+
format='ICEBERG',
8789
x='1'
8890
)""",
8991
"hive": """CREATE TABLE blah (

0 commit comments

Comments
 (0)