Ich muss eine Hive-Tabelle aus Spark SQL erstellen, die im PARQUET-Format und in der SNAPPY-Komprimierung vorliegt. Der folgende Code erstellt Tabelle in PARKETT-Format, aber mit GZIP-Komprimierung:Spark SQL ignoriert die in TBLPROPERTIES angegebene parquet.compression-Eigenschaft
hiveContext.sql("create table NEW_TABLE stored as parquet tblproperties ('parquet.compression'='SNAPPY') as select * from OLD_TABLE")
Aber in dem Farbton "Metastore Tables" -> TABLE -> "Eigenschaften" es zeigt immer noch:
| Parameter | Value |
| ================================ |
| parquet.compression | SNAPPY |
Wenn Ich ändere SNAPPY zu irgendeiner anderen Schnur zB ABCDE der Code funktioniert immer noch gut mit Ausnahme, dass die Kompression noch GZIP ist:
hiveContext.sql("create table NEW_TABLE stored as parquet tblproperties ('parquet.compression'='ABCDE') as select * from OLD_TABLE")
und Farbton "Metastore Tables" -> TABLE -> "Eigenschaften" zeigt:
| Parameter | Value |
| ================================ |
| parquet.compression | ABCDE |
Diese mich denken dass TBLPROPERTIES nur von Spark SQL ignoriert werden.
Hinweis: Ich habe versucht, die gleiche Abfrage direkt von Hive und im Falle, wenn die Eigenschaft gleich SNAPPY Tabelle wurde erfolgreich erstellt mit der richtigen Komprimierung (d. H. SNAPPY nicht GZIP).
create table NEW_TABLE stored as parquet tblproperties ('parquet.compression'='ABCDE') as select * from OLD_TABLE
Im Fall, wenn die Eigenschaft ABCDE die Abfrage nicht versagt hat, aber Tabelle noch nicht erstellt wurde.
Frage ist was ist das Problem?
Ah, und Funken eindeutig nicht die Werte von "TblProperties" gepusht zum Metastore überprüft - aber die Metastore * nicht * überprüfen. Es sieht so aus, als gäbe es eine Ausnahme, die nicht korrekt abgefangen wird. Daher erstellt der Metastore nicht die Tabellendefinition ... aber Spark erstellt die Dateien im erwarteten Verzeichnis trotzdem. –