Получение определенных данных столбца из всех таблиц в больших наборах данных запроса

#sql #google-bigquery

#sql #google-bigquery

Вопрос:

Я хочу получить последнюю созданную дату из каждой таблицы в большом наборе данных запросов. Предполагая, что у меня есть наборы данных с именем myDataset и имеющие 10 таблиц: table_a, table_b, table_c и т.д… (и допустим, в каждой таблице есть столбец created_date) Я знаю, что могу сделать это для каждой таблицы, используя:

 SELECT MAX(created_date) 
FROM `myDataset.myTable`
  

Но могу ли я сделать это в одном запросе для всей таблицы в myDataset?
Мне просто нужно вывести что-то вроде этого и вставить его в новую таблицу:

 | table_name | created_date                   |
|------------|--------------------------------|
| table_a    | 2020-09-20 17:50:22.321449 UTC |
| table_b    | 2020-09-20 17:50:22.321449 UTC |
| table_c    | 2020-09-20 17:50:22.321449 UTC |
  

Уже пробовал:

 mydataset.__TABLES__ 
  

и INFORMATION_SCHEMA

но я думаю, что предоставленные creation_time и last_modified_time не те, которые я ищу.

Найден способ получить список всех таблиц или столбцов в наборах данных с помощью

 SELECT DISTINCT table_name
FROM `project_id`.myDataset.INFORMATION_SCHEMA.COLUMNS
ORDER BY table_name'
  

Все еще не уверен, как объединить / объединить это без указания каждой таблицы.

Редактировать: в итоге пришлось перебирать каждую таблицу в python, чтобы получить MAX (created_date), не знаю, возможно ли это, используя только SQL

Комментарии:

1. Я повторяю, чтобы получить MAX (created_date), используя язык программирования, не уверен, смогу ли я сделать это, используя только SQL

Ответ №1:

Если ваши таблицы имеют одинаковые столбцы (домен), вы можете использовать Union .

Комментарии:

1. Хорошо, у меня есть значение для столбца created_date, но как получить значение table_name? которые ссылаются на каждое имя таблицы в наборах данных

Ответ №2:

Вы можете использовать union all следующим образом:

 SELECT '`table_a`' as table_name, MAX(created_date) 
FROM `table_a`
UNION ALL
SELECT '`table_b`' as table_name, MAX(created_date) 
FROM `table_b`
UNION ALL
SELECT '`table_c`' as table_name, MAX(created_date) 
FROM `table_c`
  

Комментарии:

1. Я действительно ценю ваш ответ, спасибо, но есть ли другой метод без указания каждой таблицы? поскольку я получил более 300 таблиц в одном наборе данных. (уже обновил мой вопрос выше)