2016-05-25 11 views
1

Ich versuche, benutzerdefinierte automatisch generierte/inkrementierte Schlüssel in Kudu zu machen, die seinen Wert -aus einem Start-Samen, der standardmäßig Null erhöht.Kudu automatisch generierte Schlüsselspalte

Es ist ziemlich ineffizient, alle Datensätze durchzugehen und einen Zähler zu erhöhen, um eine Zeilenanzahl zu erhalten.

Liefert Kudu die Zeilenanzahl aus der Box? Wenn nicht, was ist der beste Weg, um es zu bekommen?

+0

Welche API sind Sie? –

Antwort

0

Apache Kudu unterstützt derzeit keine AUTO_INCREMENT Spalten. Es gibt eine FAQ entry auf der Kudu-Website, die dies erwähnt.

Kudu ist eine verteilte Speicher-Engine, die sich darauf konzentriert, ein guter analytischer Speicher (OLAP) zu sein und kein guter transaktionaler Speicher (OLTP) zu sein. Dies zeigt sich in den Funktionen, die wir bisher priorisiert haben. Dies ist ein gutes Beispiel dafür.

Da wir nicht versuchen, ein OLTP-Speicher zu sein, implementiert Kudu noch keine Transaktionen mit mehreren Zeilen oder mehreren Knoten. Daher wäre es schwierig, einen einfachen Zähler für Primärschlüssel zu implementieren. zum Beispiel wenn die Tabelle auf dem Primärschlüssel hash-partitioniert ist. Wir benötigen einen zentralen Transaktionskoordinator, der derzeit nicht existiert.

Um Ihre zweite Frage zu beantworten, ist das Abrufen einer Zeilenanzahl in Kudu momentan etwas teuer, da die Indexspalte jedes Tablets gescannt und die Gesamtanzahl addiert wird. Apache Impala/Apache Spark SQL macht dies transparent für Sie, wenn Sie eine SELECT COUNT(*) from kudu_table tun, aber ich würde derzeit nicht darauf zurückgreifen, um eine neue ID zuzuweisen, da Impala derzeit das Scannen von einem etwas altmodischen Kudu-Replikat erlaubt, das möglicherweise ausgeschaltet ist auf die Anzahl der Zeilen.

Das Beste, was Sie jetzt tun können, ist auf einen externen Mechanismus angewiesen, um Zeilen-IDs zuzuweisen.

Quelle: Ich bin ein PMC-Mitglied auf Apache Kudu.

0

Es gibt mehrere Möglichkeiten, dies zu umgehen.

  1. Verwenden Sie die Funktion uuid() von impala, um eine eindeutige ID zu generieren.

  2. wandeln die UUID(), um BIGINT (via Hashing usw.)

  3. unix_timestamp die Nutzung Impala einen BIGINT Wert, der die aktuelle Datum und die Zeit als ein Delta von dem UNIX-Epoche zu erzeugen (dies kann irgendeiner Ursache Kollision, so fügen Sie besser eine andere Spalte, wenn Sie diese verwenden als Primärschlüssel gehst.

+0

Willkommen mit sO. Bitte geben Sie einige weitere Informationen wie URL zu Dokumentation, Code-Beispiele usw. Wie es zu dieser Zeit ist, bietet es keine Lösung, die hier benötigt wird. – inetphantom