Возврат списка таблиц и подсчет в одном запросе
Я знаю о команде описания \d
а также select count(*) from my_schema_1.my_table_1;
, Однако я хотел бы получить аккуратный список всей базы данных, у меня довольно много таблиц. Что-то вроде ниже было бы хорошо.
my_schema_1 | mytable_1 | 12323
my_schema_2 | mytable_2 | 0
Я в основном хотел бы перебрать все таблицы.
1 ответ
Может быть что-то вроде этого (не нужно выполнять COUNT(*)) для каждой таблицы):
РЕДАКТИРОВАТЬ новую версию для рассмотрения таблиц без прогнозов:
SELECT
t.table_schema AS schema,
t.table_name AS table,
ZEROIFNULL(
CASE WHEN p.is_segmented IS TRUE
THEN SUM(ps.row_count) * COUNT(DISTINCT ps.node_name) // COUNT(ps.node_name)
ELSE MAX(ps.row_count)
END
) AS row_count,
CASE WHEN p.is_segmented THEN 'Yes' ELSE 'No' END AS segmented,
COUNT(DISTINCT p.projection_id) AS num_proj
FROM
v_catalog.tables t
LEFT OUTER JOIN v_monitor.projection_storage ps
ON t.table_id = ps.anchor_table_id
LEFT OUTER JOIN v_catalog.projections p
ON t.table_id = p.anchor_table_id
AND p.is_super_projection IS TRUE
GROUP BY
t.table_schema, t.table_name, p.is_segmented
ORDER BY
t.table_schema, t.table_name
;
Образец вывода:
schema | table | row_count | segmented | num_proj
--------+------------------------+-----------+-----------+----------
mauro | city | 5 | Yes | 2
mauro | employees | 1000000 | Yes | 2
mauro | empty | 0 | No | 0
mauro | fnames | 20 | Yes | 2
...
tpch | customer | 0 | Yes | 2
tpch | lineitem | 54010935 | Yes | 2
tpch | nation | 25 | No | 1
tpch | orders | 718277000 | Yes | 2
Я добавил пару столбцов: segmented
(Да / нет) и num_proj
, Вы можете удалить их, если хотите.