2017-08-11 59 views
-1

我知道描述命令\dselect count(*) from my_schema_1.my_table_1;。不過,我希望獲得整個數據庫的清單,我有很多表格。像下面的東西會很好。返回單個查詢表和計數列表

my_schema_1 | mytable_1 | 12323 
my_schema_2 | mytable_2 | 0 

我基本上想循環所有的表。

回答

2

也許這樣的事情(不需要執行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。如果你願意,你可以刪除它們。

+0

這看起來好像進入了正確的方向。我明白'ps'代表'projection_storage'表。但是'p'怎麼樣? –

+0

我試過這個腳本,它的一半工作。事情是,我的一些桌子還沒有投影。我有62個表,不幸的是''projection_storage'只顯示62個表中的43個。這是做你所做的另一種方式:'通過anchor_table_schema asc,anchor_table_name asc選擇anchor_table_schema,anchor_table_name,row_count from projection_storage order;'。 –

+0

嗯,好吧,今天晚上晚些時候會用它(沒有預測的桌子)。您的「替代」方法不適用於具有分段表的多節點系統... – mauro