Netezza 中数据库中所有表的行数

Posted

技术标签:

【中文标题】Netezza 中数据库中所有表的行数【英文标题】:Rowcounts of all tables in a database in Netezza 【发布时间】:2014-05-16 06:08:49 【问题描述】:

我正在将数据从 MS SQL 迁移到 Netezza,因此我需要查找数据库(在 Netezza 中)中所有表的 行计数。任何相同的查询都会对我有很大的帮助,因为我对此完全陌生。提前致谢。

【问题讨论】:

一些 SQL 客户端工具可以为您做到这一点。你用的是什么工具? 你能用存储过程吗,如果是的话,问题就简单了。只需从 _v_table 表中迭代所需的表名并从中获取 row_count 。如果需要,我可以在存储过程的帮助下为您提供完整的工作代码。 【参考方案1】:

此查询直接从 _v_table 执行:

SELECT TABLENAME, RELTUPLES FROM _V_TABLE where objtype = 'TABLE' ORDER BY RELTUPLES

【讨论】:

【参考方案2】:

这样的事情应该可以工作:

select 'select '||chr(39)||tablename||chr(39)||' as entity, count(1) from '||tablename||' union all' 
from _v_table 
where object_type ='TABLE';

复制/粘贴结果,删除最后一个“union all”。

【讨论】:

应该是 objtype 而不是 object_type【参考方案3】:

我从来没有使用过 Netezza,但用 Google 搜索发现:

http://www.folkstalk.com/2009/12/netezza-count-analytic-functions.html

SELECT dept_id,
       salary,
       COUNT(1) OVER() total_cnt
FROM Employees

如果您不知道存在哪些表:

http://www.folkstalk.com/2009/11/netezza-system-catalog-views.html

select * from _v_table;

【讨论】:

只返回单个表的行数,而不是数据库中的所有表。 正确,您必须遍历表以获取每个表的计数。我不确定 OP 是想要所有表的计数总和还是所有表的单个计数。【参考方案4】:

获取表行计数的另一种方法(如果您有权访问操作系统级别)是使用 Netezza nz_get_table_rowcount 命令。您可以输入“nz_get_table_rowcount -h”来获取该命令的所有帮助文本,但格式为:

用法:nz_get_table_rowcount [数据库]

目的:执行“SELECT COUNT(*) FROM ;”得到它的真实行数。 因此,此脚本会导致执行全表扫描。

输入:数据库名称是可选的。如果未指定,则 $NZ_DATABASE 将被使用。

      The table name is required.  If only one argument is specified, it 
      will be taken as the table name.

      If two arguments are specified, the first will be taken as the 
      database name and the second will be taken as the table name.

输出:返回表格行数。

在 shell 脚本中使用此命令可循环浏览数据库中的所有表。使用 nz_get_table_names 获取数据库中的表列表。

【讨论】:

以上是关于Netezza 中数据库中所有表的行数的主要内容,如果未能解决你的问题,请参考以下文章

sql 获取数据库中所有表的行数。

选择数据库中所有表的行数

mysql查看数据库中所有表的行数,并进行排序

如何获取 SQL SERVER 数据库中所有表的行数 [重复]

如何用SQL语句求oracle 数据库所有表的行数?

MS SQL 如何查看一个数据库中所有表的行数