我们无法访问我们的Teradata PROD,我们在SIT,UAT中开发脚本和测试。升级到PROD时,偶尔会出现以下错误:
无效的日期/时间戳
发生数字溢出 不可翻译的字符
....
为什么Teradata没有显示发生错误的确切列名?
我们需要查看脚本,其中大约有20列从varchar转换为日期/时间戳,大约10列容易发生数字溢出。我们需要单独浏览每一栏,希望这可能是罪魁祸首。当错误显示列名称时,将更加放心。
我确信,因为直到现在还没有实现,所以假设由于运行时错误,这应该更加复杂。 但是,ET_,UV_错误表名确实捕获了一些错误,我想(可能不是全部)。
你能否解释一下ET_,UV_表何时可能,为什么不能实现正常的SQL查询来显示错误发生在哪一列?
答案 0 :(得分: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的常用方式。)