【问题标题】:Return list of tables and count in single query在单个查询中返回表列表和计数
【发布时间】:2017-08-11 10:08:32
【问题描述】:

我知道描述命令\dselect count(*) from my_schema_1.my_table_1;。但是,我想获得整个数据库的整洁列表,我有很多表。像下面这样的东西会很好。

my_schema_1   | mytable_1   | 12323
my_schema_2   | mytable_2   | 0

我基本上想遍历所有表格。

【问题讨论】:

    标签: sql vertica vsql


    【解决方案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。如果需要,您可以删除它们。

    【讨论】:

    • 这看起来正朝着正确的方向发展。我知道ps 代表projection_storage 表。 p 呢?
    • 我试过这个脚本,它成功了一半。问题是,我的一些表还没有投影。我有 62 张桌子,不幸的是 projection_storage 只显示了 62 张桌子中的 43 张。这是您所做的另一种方式:select anchor_table_schema, anchor_table_name, row_count from projection_storage order by anchor_table_schema asc, anchor_table_name asc;.
    • 嗯.. 好的,今晚晚些时候将处理它(没有投影的表格)。您的“替代”方法不适用于具有分段表的多节点系统...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 2021-10-01
    • 1970-01-01
    • 2021-12-09
    • 2017-05-21
    相关资源
    最近更新 更多