2016-03-24 5 views
1

Wir haben Kundendaten, die mit einer Firmen-ID versehen sind. Das heißt, dass sich Daten von Unternehmen niemals mit Daten anderer Unternehmen mischen würden, daher wurde dies als distkey ausgewählt.Redshift: Sollte der Sortierschlüssel den Distkey enthalten?

Sollte die Firmen-ID die erste Spalte im Sortierschlüssel sein, wenn ein Knoten mehrere tausend Firmen enthält? Oder beschränkt der distkey die Daten bereits auf ein bestimmtes Unternehmen, bevor es mit dem Scannen beginnt?

+0

sollte der distkey eine Leistungswahl sein. Verschiedene Splitter anzulegen, bringt nichts. Es ist transparent. Es ist nicht wie Firma X kann nur zu Shard Y verbinden und schauen Sie sich ihre Daten an. –

+0

Ich verstehe das, aber es beantwortet die Frage nicht so oder so. Wenn ich die Abfrage ausführe: 'SELECT COUNT (*) FROM Verkauf WHERE company_id = 123 'wird es wissen, welcher Knoten die Abfrage ausführen soll, aber * dann * muss es den gesamten Knoten scannen, um die Datensätze zu finden (so sollte es sein im Sortierschlüssel), oder sind die Daten, die auf dem Knoten segmentiert sind, in einzelne company_id's (sortkey wird nicht benötigt)? –

Antwort

0

Dist-Key hat keinen Einfluss auf die Reihenfolge, in der Zeilen in jedem Knoten/Slice/Block gespeichert werden. Sortierschlüssel (oder natürliche Reihenfolge ohne diese) defines the order.

Wenn Sie häufige Abfragen mit company_id erwarten und maximale Leistung erzielen möchten, machen Sie company_id zum Hauptsortierschlüssel (COMPOUND oder Standard, nicht nur INTERLEAVED).

Ich würde auch empfehlen, sich mit der SVL_QUERY_REPORT view vertraut zu machen. Es kann Ihnen sagen, ob Full-Scan verwendet wurde (oder Bereich eingeschränkt, wenn optimale Sortierschlüssel verwendet werden), für welche Slices und wie viele Zeilen tatsächlich gescannt wurden. Probieren Sie verschiedene Tabellenlayouts für die gleichen Daten aus und sehen Sie sich nicht nur die Abfragezeiten an, sondern bestätigen Sie auch, dass Redshift das tut, was Sie erwarten.