eine Abfrage gegeben, select * from ...
(der Teil der CTAS Aussage sein könnte)Wie man eine ganzzahlige ID zum Abfrageergebnis hinzufügt - __efficiently__?
Das Ziel ist, eine zusätzliche Spalte, ID
, wo ID
ist eine eindeutige ganze Zahl hinzuzufügen.
select ... as ID,* from ...
Ps.s.
ID
muss nicht fortlaufend sein (es könnte Lücken)- Die ID könnte beliebig sein
(keine bestimmte Reihenfolge innerhalb der Ergebnismenge darstellen müssen)
row_number löst das Problem logisch -
select row_number() over() as ID,* from ...
Das Problem ist, dass zumindest jetzt global row_number (keine Partition von) mit einem einzigen Reducer (Bienenstock)/Aufgabe (Funken) implementiert wird.
Beginnend mit Hive 2.2 können Sie eine UUID anstelle einer Sequenz generieren - https://issues.apache.org/jira/browse/HIVE-12721 –
Und da die Hive UUID-Funktion einfach 'java.util.UUID 'aufruft. randomUUID(). toString() 'Sie sollten etwas Ähnliches mit' reflect 'in jeder Hive-Version> https://github.com/apache/hive/blob/master/ql/src/java/org/apache tun können /hadoop/hive/ql/udf/UDFUUID.java –
Da war ich schon, fertig :-). UUID ist 36 Bytes Vs. 4 von INT oder 8 von BIGINT. Sie zahlen dafür im Speicher und in jeder anderen Operation - WHERE, GROUP BY, JOIN, ORDER BY usw. –