关于 azure 数据工厂:此表是无主索引 (NOPI) 表。\\” 在带有 PI 的 Teradata 表上

This table is a No Primary Index(NOPI) table." on Teradata tables with a PI

我目前正在测试使用"哈希"分区选项从本地数据库中提取的管道。我已经设置了一个管道,将表列表传递给 ForEach 活动,然后并行运行提取:

image

在 ForEach 活动中,我为源选项卡添加了以下内容:

image

当我运行管道时,我在很多 Teradata 表上遇到以下错误:

{
"errorCode": "2200",
"message": "ErrorCode=TeradataNoPrimaryIndexTable,\\'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=此表是无主索引(NOPI) 表。请在复制活动中指定分区列名称。 ,Source=Microsoft.DataTransfer.Runtime.GenericOdbcConnectors,\\'",
"failureType": "UserError",
"目标": "复制数据1",
"细节": []
}

让我感到困惑的是,当我检查 Teradata 表时,我可以看到有一个主索引。例如,这是我在尝试复制时看到的"失败"表之一:

image

我没有设置正确的东西吗?我是否还需要创建一个参数来捕获主索引列?还是因为没有主列而表只有索引而导致错误?

谢谢


所以只是为了对此进行更新,我遇到问题的原因是 Microsoft 仅将自动分区选项应用于名称不超过 30 个字符的 Teradata 表。

我使用的表的表名超过 30 个字符,因此由于 ADF 中的错误无法识别如何对其进行自动分区而失败。我已经向 Microsoft 提出了这个问题,他们正计划发布一个补丁(一旦完成就会更新)。

我解决上述问题的方法是,我必须分离出管道,如果名称小于或等于 30 个字符,它将被发送到 ForEach 活动,其中嵌套了一个使用 Auto-Parition 的 Copy 活动选项。

其余表(超过 30 个字符)被发送到不同的 ForEach 活动,在该活动中,我选择了一个"load_date"列,我们将其放在 Teradata 中的所有传入表中。这不是最好的解决方案,但它至少有助于加快我们的复制速度。

下面是我的管道的外观图片:

enter image description here

希望这对可能遇到此问题的其他人有所帮助。


我认为根据博客 PK 是必需的。

https://docs.microsoft.com/en-us/azure/data-factory/connector-teradata#parallel-copy-from-teradata

分区选项:哈希。

在执行期间,数据工厂会自动检测 PK 列,对其应用哈希,并按分区复制数据。