我正在尝试使用DB2 EXPORT实用程序从100多个表的同一特定表分区中选择所有数据。分区名称在我的所有分区表中都是常量,这使得此方法比使用其他一些可能的方法更有优势。
我无法分区,因为它们在生产环境中。
为了将其编写为半自动化脚本,我需要能够运行查询:
SELECT * FROM MYTABLE
WHERE PARTITION_NAME = MYPARTITION;
我无法在传递给EXPORT实用程序的SELECT语句中找到使用此类逻辑的正确语法。
提前致谢。 约翰
答案 0 :(得分:1)
您可以通过首先查找分区数字来执行此类操作:
SELECT SEQNO
FROM SYSCAT.DATAPARTITIONS
WHERE TABNAME = 'YOURTABLE' AND DATAPARTITIONNAME = 'WHATEVER'
然后在查询中使用SEQNO
值:
SELECT * FROM MYTABLE
WHERE DATAPARTITIONNUM(anycolumn) = <SEQNO value>
修改强>:
由于您在DATAPARTITIONNUM()
中引用的列无关紧要,并且由于每个表都保证至少有一列,因此您可以通过加入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>)
但是,在我看来,在您的应用程序中构建对数据库元数据的依赖性并不是非常可靠。您可以简单地指定适当的分区键范围来提取数据,这将是有效的。