数据库 table 分区名称可以用作 IBM DB2 9.7 SELECT 语句的 WHERE 子句的一部分吗?
Can a database table partition name be used as a part of WHERE clause for IBM DB2 9.7 SELECT statement?
我正在尝试使用 DB2 EXPORT 实用程序 select 将所有数据从同一特定 table 分区中取出 100 多个 table 秒。分区名称在我所有的分区 table 中都是不变的,这使得这种方法比使用其他一些可能的方法更有优势。
我无法分离分区,因为它们在生产环境中。
为了编写半自动化脚本,我需要能够运行查询:
SELECT * FROM MYTABLE
WHERE PARTITION_NAME = MYPARTITION;
我无法在传递给 EXPORT 实用程序的 SELECT 语句中找到使用此类逻辑的正确语法。
提前致谢。
约翰
您可以通过首先查找分区 number 来执行类似的操作:
SELECT SEQNO
FROM SYSCAT.DATAPARTITIONS
WHERE TABNAME = 'YOURTABLE' AND DATAPARTITIONNAME = 'WHATEVER'
然后在查询中使用 SEQNO
值:
SELECT * FROM MYTABLE
WHERE DATAPARTITIONNUM(anycolumn) = <SEQNO value>
编辑:
因为在DATAPARTITIONNUM()
中引用什么列并不重要,而且每个table保证至少有一个列,你可以通过加入SYSCAT.DATAPARTITIONS
自动生成查询和 SYSCAT.COLUMNS
:
select
'select * from', p.tabname,
'where datapartitionnum(', colname, ') = ', seqno
from syscat.datapartitions p
inner join syscat.columns c
on p.tabschema = c.tabschema and p.tabname = c.tabname
where colno = 1
and datapartitionname = '<your partition name>'
and p.tabname in (<your table list>)
但是,在我看来,将对数据库元数据的依赖构建到您的应用程序中并不是很可靠。您可以简单地指定适当的分区键范围来提取数据,这将同样高效。
我正在尝试使用 DB2 EXPORT 实用程序 select 将所有数据从同一特定 table 分区中取出 100 多个 table 秒。分区名称在我所有的分区 table 中都是不变的,这使得这种方法比使用其他一些可能的方法更有优势。
我无法分离分区,因为它们在生产环境中。
为了编写半自动化脚本,我需要能够运行查询:
SELECT * FROM MYTABLE
WHERE PARTITION_NAME = MYPARTITION;
我无法在传递给 EXPORT 实用程序的 SELECT 语句中找到使用此类逻辑的正确语法。
提前致谢。 约翰
您可以通过首先查找分区 number 来执行类似的操作:
SELECT SEQNO
FROM SYSCAT.DATAPARTITIONS
WHERE TABNAME = 'YOURTABLE' AND DATAPARTITIONNAME = 'WHATEVER'
然后在查询中使用 SEQNO
值:
SELECT * FROM MYTABLE
WHERE DATAPARTITIONNUM(anycolumn) = <SEQNO value>
编辑:
因为在DATAPARTITIONNUM()
中引用什么列并不重要,而且每个table保证至少有一个列,你可以通过加入SYSCAT.DATAPARTITIONS
自动生成查询和 SYSCAT.COLUMNS
:
select
'select * from', p.tabname,
'where datapartitionnum(', colname, ') = ', seqno
from syscat.datapartitions p
inner join syscat.columns c
on p.tabschema = c.tabschema and p.tabname = c.tabname
where colno = 1
and datapartitionname = '<your partition name>'
and p.tabname in (<your table list>)
但是,在我看来,将对数据库元数据的依赖构建到您的应用程序中并不是很可靠。您可以简单地指定适当的分区键范围来提取数据,这将同样高效。