Sagen wir eine Tabelle haben partitioniert wie: -Ist die Hive-Partitionierung hierarchisch?
CREATE EXTERNAL TABLE MyTable (
col1 string,
col2 string,
col3 string
)
PARTITIONED BY(year INT, month INT, day INT, hour INT, combination_id BIGINT);
Jetzt offensichtlich Jahr zum Speichern Jahr Wert (zB 2016) geht, wird der Monat Monat va.ue speichern (zB 7) wird der Tag Tage speichern (zB 18) und Stunde speichert den Stundenwert im 24 Stunden Format (zB 13). Und combination_id wird eine Kombination aus gepolsterten (wenn ein einstelliger Wert pad es mit 0 auf der linken Seite) Werte für alle diese sein. Also in diesem Fall zum Beispiel die Kombination ID ist 2016071813.
So feuern wir query (nennen wir es Abfrage A): -
select * from mytable where combination_id = 2016071813
Jetzt Hive wissen nicht, dass combination_id ist eigentlich Kombination aus Jahr, Monat, Tag und Stunde. Wird diese Abfrage die Partitionierung nicht richtig ausnutzen?
Mit anderen Worten, wenn ich eine andere Frage haben, rufen Sie es Abfrage B, wird dies optimalere als Abfrage A oder es gibt keinen Unterschied: -
select * from mytable where year=2016 and month=7 and day=18 and hour=13
Wenn Schema Hive Partitionierung ist wirklich hierarchisch in der Natur dann Abfrage B sollte besser sein, aus Sicht der Leistung ist, was ich denke. Eigentlich möchte ich entscheiden, ob ich combination_id überhaupt vom Partitionierungsschema loswerde, wenn es überhaupt nicht zu einer besseren Performance beiträgt.
Der einzige wirkliche Vorteil für Kombinations-ID mit in der Lage seine ZWISCHEN Operator in ausgewählten zu verwenden: -
select * from mytable where combination_id between 2016071813 and 2016071823
Aber wenn dieser Vorteil geht zu nehmen ist nicht von Partitionierungsschema, es wird zu behindern die Leistung.
Run 'erklären gehen ....'für beide Abfragen und überprüfen Sie den Ausführungsplan. Das sollte Ihnen einige Hinweise darüber geben, wie der Hive-Optimizer "Partition-Beschneidung" durchführt. –