COPY 命令运行但没有从 Teradata(本地)复制数据

COPY command runs but no data being copied from Teradata (on-prem)

我 运行 遇到一个问题,我设置了一个管道,该管道使用 Lookup activity 从 Teradata 获取表列表,然后将这些项目传递给 ForEach activity 然后并行复制数据并将它们保存为 gzip 文件。要求是基本上归档一些不再使用的表。

对于这个管道,我没有使用任何分区选项,因为大多数表都很小,我保持它的灵活性。

管道

在 ForEach activity 中复制 activity

99% 的表 运行 没有问题,并作为 gz 文件复制到 blob 存储中,但特别是两个表 运行 长时间(大约 4 到 6 小时)没有任何问题正在写入 blob 存储帐户的数据。

请注意,上图显示 "Cancelled",但这是我完成的。在那之前,我有一个 运行 的时间,如上所述,但仍然没有数据被写入。这仅影响 2 个表。

我与我们的 Teradata 团队核实过,这些表没有被任何人使用(因此没有被锁定)。我还查看了 "Teradata Viewpoint"(管理工具)并查看了查询监视器,发现查询在 Teradata 上 运行ning 没有问题。

如有任何见解,我们将不胜感激。

Onlooking issue 提到 table 的数据大小超出了 blob 可以存储的范围(因为您没有使用任何分区选项)

使用分区选项优化性能并保存数据

Link

为了防止其他人遇到这个问题,我解决这个问题的方法是创建一个名为 "TD_Prod_datasetname" 的新数据存储连接。该数据集的目的不是指向特定的 table,而是仅接受 "item().TableName" 值。

此数据源包含两个主要值。第一个是 @dataset().TeradataName

数据集属性

我只是在 Google 中做了一些挖掘之后才想到的。

然后我创建了一个名为 "TeradataTable" 的参数作为字符串。

然后我更新了我的管道。如上所述,主要的两个活动保持不变。我有一个查找,然后是一个 ForEach Activity (其中每个将获得项目值):

但是,在 ForEach activity 内的 COPY 命令中,我更新了源代码。我没有得到 "item().Name",而是通过 @item().TableName:

这使我能够 select "Table" 选项,因为我使用 Table 而不是查询,所以我可以使用 "Hash" 分区。我将其留空,因为根据 Microsoft 文档,它将自动找到将用于此的主键。

我 运行 使用它时遇到的唯一问题是,如果你 运行 进入没有主键的 table 那么这个项目将失败并且需要运行 通过不同的流程或在此工作之外手动完成。

由于此更改,以前挂在那里而未复制的文件现在已成功复制到我们的 blob 存储帐户中。

希望这有助于其他人了解如何使用 Teradata 作为源创建并行副本并传递多个 table 值。