#sql #database #amazon-web-services #presto #amazon-athena
#sql #База данных #amazon-web-services #presto #amazon-athena
Вопрос:
Есть ли способ в athena / presto получить имена столбцов на основе условия и использовать его в group by?
SHOW COLUMNS FROM {table_name}
Этот запрос дает мне сведения о столбце. Но я хочу использовать только имена столбцов в каком-то другом запросе. Структура таблицы выглядит следующим образом
name_of_service | cost | usage_date | user_123 | user_212 | user_342 | user_5832 | ...
И так далее. Существует около 500 столбцов
Рассматриваемый мной вариант использования выглядит примерно так —
SELECT SUM(cost), {column_names_which_start_with_user}
FROM {db}
GROUP BY cost, {column_names_which_start_with_user}
Я не контролирую заполнение базы данных, и есть 100 столбцов, имена которых меняются каждый месяц. Есть ли способ сделать это?
Комментарии:
1.
there are 100s of columns whose names change every month
… это, в сочетании с тем, что в ваших таблицах изначально 100 столбцов, заставляет меня думать, что, возможно, у вас не оптимальный дизайн базы данных. Возможно, вы захотите добавить некоторое описание того, как появились эти таблицы.
Ответ №1:
Существует виртуальная база information_schema
данных, к которой можно запрашивать метаданные о таблицах и столбцах:
SELECT column_name
FROM information_schema.columns
WHERE table_name = 'my_table'
AND column_name LIKE 'user_%'
К сожалению, вы не можете использовать это для создания списка столбцов запроса, потому что запросы не могут быть такими динамическими. Однако вы можете использовать его в своем клиентском коде для генерации нужного вам запроса.
Комментарии:
1. Для меня это было бы более полезно без указанного table_name. Похоже, что он не работает только с column_name сам по себе, но можно добавить: (table_catalog = ‘OurCatalog’) И (table_schema = ‘OurSchema’)