Hive UDF для выбора всех, кроме некоторых столбцов
Общий шаблон построения запросов в HiveQL (и SQL в целом) состоит в том, чтобы выбрать все столбцы (SELECT *
) или явно указанный набор столбцов (SELECT A, B, C
). В SQL нет встроенного механизма выбора всех столбцов, кроме указанного.
Существуют различные механизмы исключения некоторых столбцов, как описано вэтот ТАК вопрос но никто не относится к HiveQL естественным образом. (Например, идея создать временную таблицу сSELECT *
затемALTER TABLE DROP
некоторые из его столбцов могут привести к хаосу в среде больших данных.)
Игнорируя идеологическую дискуссию о том, стоит ли выбирать все столбцы, кроме нескольких, этот вопрос касается возможных путей расширения Hive с помощью этой возможности.
До Hive 0.13.0 SELECT мог принимать столбцы на основе регулярных выражений, например,property_.*
внутри строки с обратными кавычками. Ответ @ invoketheshell ниже относится к этой возможности, но она обходится дорого, то есть, когда эта возможность включена, Hive не может принимать столбцы с нестандартными символами в них, например,$foo
или жеx/y
, Вот почему разработчики Hive отключили это поведение по умолчанию в 0.13.0. Я ищу универсальное решение, которое работает для любого имени столбца.
Универсальная генерирующая таблицу UDF (UDTF), конечно, мог бы сделать это, потому что это можетманипулировать схемой, Поскольку мы не собираемся генерировать новые строки, есть ли способ решить эту проблему, используя простой UDF на основе строк?
Это похоже на распространенную проблему со многими сообщениями в Интернете, показывающими, как решить эту проблему для различных баз данных, но я не смог найти решение для Hive. Есть ли где-нибудь код, который делает это?