Эта таблица является таблицей без первичного индекса (NOPI). "В таблицах Teradata с PI - PullRequest
0 голосов
/ 11 марта 2020

В настоящее время я тестирую конвейер, в котором я использую опцию "Ha sh" для извлечения из локальной базы данных. Я настроил конвейер, который передает список таблиц в действие ForEach, а затем параллельно запускаю извлечение:

image

Внутри действия ForEach Для вкладки источника я поместил следующее:

image

Когда я запускаю конвейер, я получаю следующие ошибки во многих таблицах Teradata:

{"errorCode": "2200", "message": "ErrorCode = TeradataNoPrimaryIndexTable, 'Type = Microsoft.DataTransfer.Common.Shared.HybridDeliveryException, Message = Эта таблица является таблицей без первичного индекса (NOPI) Укажите имя столбца раздела в операции копирования., Source = Microsoft.DataTransfer.Runtime.GenericOdbcConnectors, '"," faultType ":" UserError "," target ":" Copy data1 "," details ": []}

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

image

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

Спасибо

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

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

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

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

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

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

enter image description here

Надеюсь, это поможет кому-то еще, возможно, с этой проблемой.

0 голосов
/ 17 марта 2020

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

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

Параметр раздела: Ha sh .

Во время выполнения Data Factory автоматически обнаруживает столбец PK, применяет к нему га sh и копирует данные по разделам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...