Redshift: запрос всех таблиц с общим столбцом - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь создать представление в Redshift, чтобы мы могли видеть последние данные в каждой таблице. У нас есть наборы данных, которые обновляют различные расписания, и у каждой таблицы есть столбец «обновлено», который содержит метку даты последнего обновления строк.

То, что я хочу достичь, - это представление внизу (из этих двух таблиц примера ):

other.bigtable
+-----+--------+------------------+
| id  |  stat  |     updated      |
+-----+--------+------------------+
| A2  | rgerhg | 03/05/2020 05:00 |
| F5  | bdfb   | 03/05/2020 05:00 |
| GF5 | bb     | 03/05/2020 05:00 |
+-----+--------+------------------+
default.test
+----+------+------------------+
| id | name |     updated      |
+----+------+------------------+
|  1 | A    | 02/02/2008 00:00 |
|  2 | B    | 02/02/2008 00:00 |
|  3 | C    | 02/02/2008 00:00 |
|  4 | F    | 02/02/2008 00:00 |
|  5 | T    | 02/02/2010 00:00 |
+----+------+------------------+
default.view_updates
+---------+------------+------------------+
| schema  | table_name |    max_update    |
+---------+------------+------------------+
| default | test       | 02/02/2010 00:00 |
| other   | big_table  | 03/05/2020 05:00 |
+---------+------------+------------------+

Пока я получаю таблицы и схемы, но понятия не имею, с чего начать с дат. Redshift кажется немного более ограниченным.

EDIT:

Использование некоторого кода, украденного из Интернета, я надеялся использовать это для создания таблицы для дополнительного столбца:

    select t.table_schema,
        t.table_name
    from information_schema.tables t
    inner join information_schema.columns c 
        on c.table_name = t.table_name 
        and c.table_schema = t.table_schema
    where c.column_name = 'updated'
        and t.table_schema not in ('information_schema', 'pg_catalog')
        and t.table_type = 'BASE TABLE'
    order by t.table_schema;

[Источник: https://dataedo.com/kb/query/amazon-redshift/find-tables-with-specific-column-name]

1 Ответ

1 голос
/ 22 апреля 2020

вы можете выбрать самую последнюю дату из каждой таблицы и объединить их вместе (и, если хотите, добавить их в представление).

Выбрать * из (выбрать топ 1 «тест», обновленный в порядке тестирования по обновленному des c) union all Выберите * из (выберите верхнюю 1 'big_table', обновленную из порядка big_table путем обновления des c);

Вы можете иметь длинный список "union all" вплоть до какой-то предел. Это жестко кодирует таблицы в представлении - я полагаю, это то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...