Das allgemeine Abfragebildmuster in HiveQL (und SQL im Allgemeinen) besteht darin, entweder alle Spalten (SELECT *
) oder eine explizit angegebene Gruppe von Spalten (SELECT A, B, C
) auszuwählen. SQL verfügt nicht über einen integrierten Mechanismus zum Auswählen aller außer einer angegebenen Gruppe von Spalten.Hive-UDF zum Auswählen aller außer einigen Spalten
Es gibt verschiedene Mechanismen zum Ausschließen einiger Spalten, wie in this SO question beschrieben, aber keine trifft natürlich auf HiveQL zu. (Zum Beispiel der Idee, eine temporäre Tabelle erstellen mit SELECT *
dann ALTER TABLE DROP
einige ihren Spalten würden Chaos in einer großen Datenumgebung anrichten.)
Ignorieren die ideologische Diskussion darüber, ob es eine gute Idee, alle aber einige Spalten auswählen In dieser Frage geht es um die Möglichkeiten, Hive mit dieser Fähigkeit zu erweitern.
Vor Hive 0.13.0 konnte SELECT regulärausdrucksbasierte Spalten verwenden, z. B. property_.*
innerhalb eines Strings mit umgekehrten Anführungszeichen. Die Antwort von @ invoketheshell bezieht sich auf diese Fähigkeit, aber sie hat ihren Preis: Wenn diese Funktion aktiviert ist, kann Hive keine Spalten mit nicht standardmäßigen Zeichen akzeptieren, z. B. $foo
oder . Aus diesem Grund haben die Hive-Entwickler dieses Verhalten standardmäßig in 0.13.0 deaktiviert. Ich suche nach einer generischen Lösung, die für jeden Spaltennamen funktioniert.
Eine generische Tabelle erzeugende UDF (UDTF) tun könnte dies sicherlich, weil es kann manipulate the schema. Da wir keine neuen Zeilen generieren werden, gibt es eine Möglichkeit, dieses Problem mit einer einfachen zeilenbasierten UDF zu lösen.
Dies scheint ein häufiges Problem mit vielen Posts im Web zu sein, die zeigen, wie man es für verschiedene Datenbanken löst, aber ich konnte keine Lösung für Hive finden. Gibt es irgendwo Code, der das macht?
Dieser ungelöste Fehler kann Probleme verursachen, da es bedeutet, dass Sie keine UDF, z. all_except (*, excluded_column1, excluded_column2) https://issues.apache.org/jira/browse/HIVE-1459 – mattinbits
Danke @mattinbits. Ich habe für das Thema gestimmt und ermutige andere dazu. – Sim