2015-07-27 4 views
1

Мы используем Amazon Redshift в нашем проекте.Ограничение размера схемы в Amazon Redshift

В нашем проекте мы назначили разные схемы для разных групп людей. Так, например, маркетинг получает отдельную схему, где они могут хранить свои таблицы для анализа, а команда продаж получает отдельную схему.

Что обычно происходит, так это то, что аналитики из одной группы используют большую часть базы данных с таблицами, которые являются более временными по своему характеру и не хотят его выталкивать/чистить. Таким образом, в данных большой взрыв. И другие остаются без места. Тогда, что мы делаем, это большой опыт сбора инвентаря/

Я хотел знать, можем ли мы ограничить размер схемы или размер базы данных определенным набором групп пользователей. Скажем, мы выделяем 100 ГБ для схемы продаж, 50 ГБ для маркетинга и т. Д.

ответ

3

Согласно документам Redshift, Redshift, похоже, не предоставляет функции для ограничения размера каждой схемы/базы данных, но есть обходной путь.

Поскольку вы можете получить размер данных в таблице со следующим запросом, вы можете написать сценарий, который отслеживает их использование и отправляет предупреждение, если оно превышено. Затем просто запускайте скрипт периодически через cron.

  • запрос, чтобы получить размер данных и количество строк в таблице
select 
    trim(pgdb.datname) as database, trim(pgn.nspname) as schema, 
    trim(a.name) as Table, b.mbytes, a.rows 
from 
    (select db_id, id, name, sum(rows) as rows from stv_tbl_perm a group by db_id, id, name) as a 
    join pg_class as pgc on pgc.oid = a.id 
    join pg_namespace as pgn on pgn.oid = pgc.relnamespace 
    join pg_database as pgdb on pgdb.oid = a.db_id 
    join (select tbl, count(*) as mbytes from stv_blocklist group by tbl) b on a.id=b.tbl 
order by 1, 2, 3; 
  • ех) Результат
database |  schema | table | mbytes | rows 
----------+---------------+-------------+--------+----------+ 
test_db | dev_schmea_1 | click_log |  23 |  4653 
prod_db | prod_schema_1 | click_log | 16217 | 2112354 
prod_db | prod_schema_1 | install_log | 5544 | 433538 
  • запрос, чтобы получить размер данных и число строк по схеме
select 
    trim(pgdb.datname) as database, trim(pgn.nspname) as schema, 
    sum(b.mbytes) as mbytes, sum(a.rows) as rows 
from 
    (select db_id, id, name, sum(rows) as rows from stv_tbl_perm a group by db_id, id, name) as a 
    join pg_class as pgc on pgc.oid = a.id 
    join pg_namespace as pgn on pgn.oid = pgc.relnamespace 
    join pg_database as pgdb on pgdb.oid = a.db_id 
    join (select tbl, count(*) as mbytes from stv_blocklist group by tbl) b on a.id=b.tbl 
group by pgdb.datname, pgn.nspname 
order by 1, 2; 
  • запрос, чтобы получить размер данных и количество строк в базе данных
select 
    trim(pgdb.datname) as database, sum(b.mbytes) as mbytes, sum(a.rows) as rows 
from 
    (select db_id, id, name, sum(rows) as rows from stv_tbl_perm a group by db_id, id, name) as a 
    join pg_class as pgc on pgc.oid = a.id 
    join pg_namespace as pgn on pgn.oid = pgc.relnamespace 
    join pg_database as pgdb on pgdb.oid = a.db_id 
    join (select tbl, count(*) as mbytes from stv_blocklist group by tbl) b on a.id=b.tbl 
group by pgdb.datname 
order by 1; 
+0

Спасибо за ответ. Это помогает в обходной путь. – Senthil

Смежные вопросы