2015-09-06 5 views
3

У нас нет доступа к нашей Teradata PROD, и мы разрабатываем скрипты и тестируем в SIT, UAT. Когда повышенно до PROD, иногда следующие ошибки происходят:Teradata - Имя столбца, в котором произошла ошибка

Invalid Date/Timestamp
Числового переполнения произошло
непереводимы символы
....

Почему Teradata не показывает точную имя столбца, в котором произошла ошибка?

Нам нужно пройти через скрипт, в котором около 20 столбцов отбрасываются из varchar на дату/временную метку и около 10 столбцов подвержены переполнению Numeric. Нам нужно индивидуально пройти через каждый столбец, ожидая, что это может быть виновником. Будет больше сброшено, если ошибка отобразит имя столбца.

Я уверен, что, поскольку он не был реализован до сих пор, предположим, что это должно было быть более сложным из-за ошибок времени выполнения. Однако теги ET_, UV_ ошибки фиксируют некоторые из этих ошибок, я думаю (может быть, не все).

Не могли бы вы объяснить, когда это возможно на таблицах ET_, UV_, почему это невозможно для обычного SQL-запроса, чтобы показать, на каком столбце произошла ошибка?

+1

Как вы выполняете эти запросы? – Andrew

ответ

0

Эти ошибки времени выполнения связаны с операцией над некоторым значением, не обязательно с конкретным столбцом, - это также может быть результатом выражения.

Я полагаю, что объединение всех ошибочных выражений в запросе с соответствующими частями исходного SQL может привести к определенным накладным расходам. Это определенно потребует нетривиального объема работы по развитию. Вы можете попросить своего представителя Teradata об этом.

The ET/UV tables are maintained by TPT, который обрабатывает внешние данные и, скорее всего, столкнется с неожиданными значениями.

Если это распространенная ситуация, возможно, вам необходимо очистить данные. Там, как правило, способ, чтобы найти строки, которые вызывают перечисленные ошибки с помощью встроенных функций SQL или UDF, например:

  • Invalid Date/Timestamp - isdate() UDF or SQL
  • Numeric overflow occurred - сравнение, возможно, после того, как cast(... as BIGINT)
  • Untranslatable character - TRANSLATE_CHK()

(Там не кажется, обычный способ check if a CAST will succeed.)