Агрегирование для всех таблиц в БД - PullRequest
0 голосов
/ 08 января 2020

Все таблицы в моей базе данных содержат один и тот же столбец, назовите его date_marked_invalid. Я хотел бы найти MAX() над этими столбцами для всех таблиц. Есть ли способ получить их без необходимости запускать

SELECT MAX(date_marked_invalid) FROM one_particular_table

отдельно для каждой отдельной таблицы?

Для Postgres подобной хакерской атаки будет достаточно, но насколько я вижу, это не работает на Снежинке.

Ответы [ 2 ]

1 голос
/ 08 января 2020

Значения MIN / MAX всех столбцов хранятся в метаданных для каждой таблицы, но, к сожалению, недоступны, например, в. INFORMATION_SCHEMA.COLUMNS.

Если вы создаете хранимую процедуру, которая выполняет итерации по таблицам в INFORMATION_SCHEMA.COLUMNS, она все еще является операцией «только для метаданных», но должна выполняться вручную.

Snowflake не работает У него нет функций, которые могут запускать Dynami c SQL, например Postgres 'query_to_xml()

Запрос на динамическое создание оператора агрегации будет в строке

SELECT
  'SELECT MAX(MX) FROM ('
   || LISTAGG(CHR(10)||'  SELECT MAX('||COLUMN_NAME||') MX FROM '
   || TABLE_CATALOG||'.'||TABLE_SCHEMA||'.'||TABLE_NAME, ' UNION')
  WITHIN GROUP (ORDER BY NULL)||CHR(10)||')' COL
FROM INFORMATION_SCHEMA.COLUMNS
GROUP BY COLUMN_NAME;
0 голосов
/ 08 января 2020

В прошлом я использовал неопрятный подход, когда в качестве разработчика у меня не было доступа к системным таблицам в традиционном мире РСУБД. Я использовал show tables, чтобы получить список всех таблиц, а затем использовал Excel для генерации max (date_marked_invalid)) с дополнительным столбцом псевдонимов в качестве имени таблицы, а затем применил объединение all для построения результата.

select max(date_marked_invalid) as dt, 'table-1' as table from table-1 union all
select max(date_marked_invalid) as dt, 'table-2' as table from table-2 union all
select max(date_marked_invalid) as dt, 'table-3' as table from table-3 

результат может выглядеть следующим образом:

enter code here
dt        |  table
01-01-2020 table-1
01-02-2020 table-2

Когда у вас есть список таблиц, вы можете отформатировать все свои запросы следующим образом и получить результат. Если это задание на задание и должно выполняться задание, то здесь может помочь какой-нибудь язык сценариев или язык программирования, где вывод таблицы выводится в файл, создайте запрос, подобный этому, и получите результат.

Надеюсь этот неопрятный подход может быть временно полезным.

...