Эта таблица является таблицей без первичного индекса (NOPI). "В таблицах Teradata с 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 "," target ":" Copy data1 "," details ": []}

Что меня смущает, так это то, что когда я проверяю таблицы Teradata, я вижу, что есть первичный индекс. Например, вот что я вижу для одной из таблиц, которая «потерпела неудачу», когда я попытался ее скопировать:

image

Я что-то не правильно настраиваю? Нужно ли мне также создать параметр, который будет захватывать столбцы первичного индекса? Или ошибки связаны с тем, что нет основного столбца, а в таблице есть только индекс?

Спасибо


person Vitali Dedkov    schedule 11.03.2020    source источник


Ответы (2)


Я думаю, что согласно блогу требуется ПК.

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

Вариант раздела: хеш.

Во время выполнения фабрика данных автоматически обнаруживает столбец PK, применяет к нему хеш и копирует данные по разделам.

person HimanshuSinha-msft    schedule 17.03.2020
comment
Привет @ HimanshuSinha-msft, на самом деле я открыл тикет git hub с Microsoft, потому что это не кажется точным. Я провел начальные тесты, и похоже, что вместо того, чтобы искать столбец PK, ADF, похоже, ищет столбец Partition By. Я пробовал это с парой таблиц, и работали только те таблицы, у которых было разделение по. Я попросил Microsoft проверить и у меня есть 2 открытых тикета по ссылке ниже: docs.microsoft.com/en-us/azure/data-factory/connector-teradata - person Vitali Dedkov; 23.03.2020

Итак, просто чтобы сообщить об этом, причина, по которой у меня возникла проблема, заключается в том, что Microsoft применила параметр автоматического разделения только к таблицам Teradata с именем из 30 символов или меньше.

Таблицы, которые я использовал, имели имена таблиц, длина которых превышала 30 символов, и поэтому они не работали из-за ошибки в ADF, которая не могла распознать, как ее автоматически разбивать. Я поднял эту проблему в Microsoft, и они планируют выпустить патч (обновят, как только это будет сделано).

Способ, которым я решил вышеупомянутый вопрос, заключается в том, что мне пришлось выделить конвейер, где, если имя меньше или равно 30 символам, оно было отправлено в действие ForEach с вложенным внутри него действием Copy, которое использовало параметр Auto-Parition.

Остальные таблицы (длина которых превышает 30 символов) были отправлены в другое действие ForEach, где я выбрал столбец load_date, который мы поместили во все наши входящие таблицы в Teradata. Это было не лучшее решение, но, по крайней мере, помогло нам ускорить копирование.

Ниже показано, как выглядит мой конвейер:

введите здесь описание изображения

Надеюсь, это поможет кому-то еще, у кого могла быть эта проблема.

person Vitali Dedkov    schedule 06.04.2020