2016-07-31 17 views
4

Ich habe einige Beispiele in der Dokumentation gefunden, in denen Primärschlüssel erstellt werden, indem Parameter an den ENGINE-Abschnitt übergeben werden. Aber ich habe keine Beschreibung über irgendein Argument zu ENGINE gefunden, was es bedeutet und wie ich einen Primärschlüssel erstelle. Vielen Dank im Voraus. Es wäre großartig, diese Informationen zu der Dokumentation hinzuzufügen, in der sie nicht vorhanden ist.So erstellen Sie Primärschlüssel in ClickHouse

Antwort

5

Primärschlüssel wird für MergeTree-Speichermaschinenfamilie unterstützt. https://clickhouse.yandex/reference_en.html#MergeTree

Beachten Sie, dass für die meisten schweren Aufgaben, Sie Motoren der MergeTree Familie verwenden.

Es wird als Parameter für Storage Engine angegeben.

Die Engine akzeptiert Parameter: den Namen einer Datumsspalte, die das Datum enthält, einen Stichprobenausdruck (optional), ein Tupel, das den Primärschlüssel der Tabelle definiert, und die Indexgranularität.

Beispiel ohne Probennahme zu unterstützen:

MergeTree(EventDate, (CounterID, EventDate), 8192) 

Beispiel mit Probenahme-Unterstützung:

MergeTree(EventDate, intHash32(UserID), (CounterID, EventDate, intHash32(UserID)), 8192) 

So (CounterID, EventDate) oder (CounterID, EventDate, intHash32(UserID)) Primärschlüssel ist in diesen Beispielen.

Wenn Sie ReplicatedMergeTree verwenden, gibt es auch zwei zusätzliche Parameter, die Shard und Replikat identifizieren.

https://clickhouse.yandex/reference_en.html#Creating%20replicated%20tables

Primärschlüssel werden auf Tabellenerstellung festgelegt und später nicht mehr geändert werden können.

Trotz des Namens ist Primärschlüssel nicht eindeutig. Es definiert nur die Sortierreihenfolge von Daten, um Bereichsabfragen optimal zu verarbeiten. Sie könnten viele Zeilen mit demselben Primärschlüsselwert in eine Tabelle einfügen.

+0

vielen Dank, das ist jetzt klar –