如何动态使用 Arcmain 或仅部分复制 Teradata 中的表?

How to dynamically use Arcmain or just partionly copy tables in Teradata?

我需要将 tables 从一台 teradata 服务器复制到另一台几乎 tables。为了解决这个问题,有人建议我使用arcmain。所以table可以这样转:

logon ZZZZ/YYYY,XXXX;

COPY DATA TABLES

(DATABASENAME.TABLENAME11) (FROM(DATABASENAME.TABLENAME1)),
(DATABASENAME.TABLENAME12) (FROM(DATABASENAME.TABLENAME2)),
(DATABASENAME.TABLENAME13) (FROM(DATABASENAME.TABLENAME3)),

RELEASE LOCK,

FILE=NVDSID1;

但是我有一些table在不同的数据库中同名,此外这个table只需要传输它们的结构和一些行(让它成为WHERE service_quality ='epic')。是否有解决方案如何仅部分复制 tables?

最初,我已经想出了完全不同的方法:

1) 我将所有这些 table 的结构复制到临时数据库

2) 只向其中插入需要的行

3) 将这些 table 复制到另一个 table

上所需的数据库

但是,再一次,table同名运行这个解决方案,它们只是不能简单地粘贴到同一个数据库。是否可以循环执行这 3 个步骤,再添加一个步骤 - drop table 以避免冲突?

创建 100 个临时数据库非常糟糕的解决方案,并且已经有 table 个名称长度为 30 个符号。

有什么想法吗?

我们在我们的环境中所做的是构建一组数据库,我们在其中填充 tables,其中包含发往另一个环境的数据片段。这与您的方法非常相似,只是我们使用多个数据库并且没有冗余的对象名称。然后我们使用 ARCMAIN 来 ARCHIVE 这些 tables 并将它们复制到目标环境。

如果您有多个 table 在数据库中共享相同的名称,我建议您创建多个数据库来播种数据切片,除非 table 结构相同并且意图是合并目标环境中的切片。然后您可以合并这些种子 table 中的数据以用于您的存档过程。

其他解决方案包括使用 FastExport 和 FastLoad 或 Teradata 的 Data Mover。如果您尚未使用后​​者,则可能需要 Teradata 的额外许可。前者是脚本驱动的,可以比 ARCMAIN 更灵活,以适应您特定环境的需要。