Skip to content

Commit

Permalink
refactor: change file type logic for create table (#7477)
Browse files Browse the repository at this point in the history
* refactor: change file type logic for create table

* style: run rust fmt
  • Loading branch information
tshauck authored Sep 6, 2023
1 parent 18aef7c commit dfad0af
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 5 deletions.
7 changes: 4 additions & 3 deletions datafusion/sql/src/statement.rs
Original file line number Diff line number Diff line change
Expand Up @@ -681,11 +681,12 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
options,
} = statement;

if file_type != "CSV"
&& file_type != "JSON"
if (file_type == "PARQUET" || file_type == "AVRO" || file_type == "ARROW")
&& file_compression_type != CompressionTypeVariant::UNCOMPRESSED
{
plan_err!("File compression type can be specified for CSV/JSON files.")?;
plan_err!(
"File compression type cannot be set for PARQUET, AVRO, or ARROW files."
)?;
}

let schema = self.build_schema(columns)?;
Expand Down
5 changes: 4 additions & 1 deletion datafusion/sql/tests/sql_integration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1850,6 +1850,7 @@ fn create_external_table_with_compression_type() {
"CREATE EXTERNAL TABLE t(c1 int) STORED AS CSV COMPRESSION TYPE BZIP2 LOCATION 'foo.csv.bz2'",
"CREATE EXTERNAL TABLE t(c1 int) STORED AS JSON COMPRESSION TYPE GZIP LOCATION 'foo.json.gz'",
"CREATE EXTERNAL TABLE t(c1 int) STORED AS JSON COMPRESSION TYPE BZIP2 LOCATION 'foo.json.bz2'",
"CREATE EXTERNAL TABLE t(c1 int) STORED AS NONSTANDARD COMPRESSION TYPE GZIP LOCATION 'foo.unk'",
];
for sql in sqls {
let expected = "CreateExternalTable: Bare { table: \"t\" }";
Expand All @@ -1862,11 +1863,13 @@ fn create_external_table_with_compression_type() {
"CREATE EXTERNAL TABLE t STORED AS AVRO COMPRESSION TYPE BZIP2 LOCATION 'foo.avro'",
"CREATE EXTERNAL TABLE t STORED AS PARQUET COMPRESSION TYPE GZIP LOCATION 'foo.parquet'",
"CREATE EXTERNAL TABLE t STORED AS PARQUET COMPRESSION TYPE BZIP2 LOCATION 'foo.parquet'",
"CREATE EXTERNAL TABLE t STORED AS ARROW COMPRESSION TYPE GZIP LOCATION 'foo.arrow'",
"CREATE EXTERNAL TABLE t STORED AS ARROW COMPRESSION TYPE BZIP2 LOCATION 'foo.arrow'",
];
for sql in sqls {
let err = logical_plan(sql).expect_err("query should have failed");
assert_eq!(
"Plan(\"File compression type can be specified for CSV/JSON files.\")",
"Plan(\"File compression type cannot be set for PARQUET, AVRO, or ARROW files.\")",
format!("{err:?}")
);
}
Expand Down
2 changes: 1 addition & 1 deletion docs/source/user-guide/sql/ddl.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ LOCATION <literal>

`file_type` is one of `CSV`, `PARQUET`, `AVRO` or `JSON`

`LOCATION <literal>` specfies the location to find the data. It can be
`LOCATION <literal>` specifies the location to find the data. It can be
a path to a file or directory of partitioned files locally or on an
object store.

Expand Down

0 comments on commit dfad0af

Please sign in to comment.