Hive UDF für die Auswahl aller bis auf einige Spalten
Das gängige Muster für die Abfrageerstellung in HiveQL (und in SQL im Allgemeinen) besteht darin, entweder alle Spalten auszuwählen SELECT *
) oder ein explizit angegebener Satz von Spalten SELECT A, B, C
). In SQL ist kein Mechanismus zum Auswählen aller Spalten außer einer bestimmten Gruppe von Spalten integriert.
Es gibt verschiedene Mechanismen zum Ausschließen einiger Spalten, wie in @ beschriebediese SO Frage aber keines trifft natürlich auf HiveQL zu. (Zum Beispiel die Idee, eine temporäre Tabelle mit @ zu erstelleSELECT *
dannALTER TABLE DROP
Einige seiner Spalten würden in einer Big-Data-Umgebung Chaos anrichten.)
In der ideologischen Diskussion darüber, ob es eine gute Idee ist, alle bis auf einige Spalten auszuwählen, geht es in dieser Frage um die möglichen Möglichkeiten, Hive mit dieser Funktion zu erweitern.
Prior to Hive 0.13.0 SELECT kann auf regulären Ausdrücken basierende Spalten enthalten, z. B.property_.*
in einer Zeichenfolge in Anführungszeichen. Die Antwort von @ invoketheshell bezieht sich auf diese Funktion, ist jedoch mit einem Preis verbunden. Wenn diese Funktion aktiviert ist, kann Hive keine Spalten mit Sonderzeichen akzeptieren, z. B.$foo
oderx/y
. Aus diesem Grund haben die Hive-Entwickler dieses Verhalten in Version 0.13.0 standardmäßig deaktiviert. Ich suche nach einer generischen Lösung, die für jeden Spaltennamen funktioniert.
Eine generische tabellengenerierende UDF UDTF) könnte dies sicherlich tun, weil es @ kamanipuliere das Schema. Gibt es eine Möglichkeit, dieses Problem mit einer einfachen zeilenbasierten UDF zu lösen, da keine neuen Zeilen generiert werden?
Dies scheint ein häufiges Problem zu sein, da viele Posts im Web zeigen, wie es für verschiedene Datenbanken gelöst werden kann, aber ich konnte keine Lösung für Hive finden. Gibt es irgendwo Code, der das macht?