Скрипт для поиска ячеек с определенными значениями в Redshift - PullRequest
0 голосов
/ 14 января 2020

У меня есть этот запрос:

    select t.table_schema,
       t.table_name,
       c.column_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 like '%column_name%'
      and t.table_schema not in ('information_schema', 'pg_catalog')
      and t.table_type = 'BASE TABLE'
order by t.table_schema;

Есть ли где-нибудь, где я могу найти конкретное значение c и посмотреть, под каким столбцом, таблицей и схемой оно попадает?

Например, я хотел бы найти значение «WINNER» и выяснить, какие столбцы содержат это значение (и, очевидно, также таблицу и схему), и столбец может быть STATUS со значением WINNER и в таблице CUSTOMER и схеме ALL_DATA * 1006. *

Может кто-нибудь помочь, пожалуйста?

1 Ответ

2 голосов
/ 14 января 2020

Нет прямого способа сделать это, насколько я знаю, в любой СУБД нет встроенной функциональности. Один из способов сделать это - создать SQL, который выделит все текстовые столбцы и сгенерирует другой SQL. Вот пример:

select 'select '''||t.table_schema||''' as table_schema, '''||
   t.table_name||''' as table_name, '''||
   c.column_name||''' as column_name,'||
   ' count(*) as occurrences'
   ' from '||t.table_schema||'.'||t.table_name||
   ' where '||c.column_name||' like ''WINNER'''
   ||' union all '
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 like '%column_name%'
      and t.table_schema not in ('information_schema', 'pg_catalog')
      and t.table_type = 'BASE TABLE'
      and c.data_type = 'character varying'
order by t.table_schema;

В соответствии с ограничениями, установленными в запросе, он будет генерировать столько строк, сколько столбцов вы хотите найти. Скопируйте этот блок результатов в свой клиент (удалите 'union all' из последней строки) и выполните. Постарайтесь максимально ограничить количество строк для лучшей производительности. Благодаря столбчатому хранилищу данных Redshift выполнит это довольно эффективно, имейте в виду, что на строковых СУБД производительность при таком подходе будет значительно хуже.

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