2014-11-13 7 views
17

Ich würde gerne eine schnelle Bereich Abfrage auf einem Parkett Tisch machen können. Die Menge der zurückzugebenden Daten ist im Vergleich zur Gesamtgröße sehr klein, aber da ein vollständiger Spaltenscan durchgeführt werden muss, ist es für meinen Anwendungsfall zu langsam.Index im Parkett

Mit einem Index würde dieses Problem lösen und ich las, dass dies in Parquet 2.0 hinzugefügt werden sollte. Ich kann jedoch keine weiteren Informationen dazu finden, daher vermute ich, dass dies nicht der Fall war. Ich glaube nicht, dass es grundsätzliche Hindernisse für das Hinzufügen von (mehrspaltigen) Indizes geben würde, wenn die Daten sortiert wären, was in meinem Fall der Fall ist.

Meine Frage ist: wann werden Indizes zu Parkett hinzugefügt, und was wäre das High-Level-Design dafür? Ich denke, ich wäre schon mit einem Index zufrieden, der auf die richtige Partition hinweist.

Mit freundlichen Grüßen,

Sjoerd.

+0

Eine laaaaange Zeit. Es ist geplant für [v2.0] (https://github.com/Parquet/parquet-mr). – user568109

+0

vielleicht interessant für Sie: https://github.com/lightcopy/parquet-index –

Antwort

15

Parquet verwaltet zur Zeit die Min/Max-Statistik für jede Datenseite. Eine Datenseite ist eine Gruppe von ~ 1 MB Werten (nach der Codierung) für eine einzelne Spalte; Mehrere Seiten bilden das Parquet's column chunks.

Diese Min/Max-Werte werden zum Filtern von Spaltenabschnitten und Seiten, aus denen ein Chunk besteht, verwendet. Sie sollten also in der Lage sein, Ihre Abfragezeit zu verbessern, indem Sie die Datensätze nach den Spalten sortieren, nach denen Sie filtern möchten, und dann die Daten in Parquet schreiben. Auf diese Weise holen Sie das Beste aus der Statistikfilterung heraus.

Sie können mit dieser Technik auch eine feinere Filterung erzielen, indem Sie die Seiten- und Zeilengruppengröße verringern, obwohl Sie dann mit Codierungseffizienz und E/A-Effizienz handeln.

+0

+1 Große Antwort. Frage aber. "Sie können mit dieser Technik auch eine feinere Filterung erzielen, indem Sie die Größe der Seiten- und Zeilengruppen verringern" - Beziehen Sie sich auf mapred.max.split.size oder etwas anderes? – Tagar

+1

Ich beziehe mich auf zwei Parquet-Einstellungen: 'Parkett.block.size' (die Größe der Zielzeilengruppe in Bytes, Standard 128MB) und' parket.page.size' (die Zielseitengröße in Bytes vor der Komprimierung, aber nach der Kodierung, Standard 1 MB). – blue

+0

Interessant. Vielen Dank. Dies wird nicht so schnell wie mit Cassandra, was ich jetzt mache, aber sollte eine große Verbesserung sein. Ich werde es ausprobieren, wenn ich dazu komme. –