【问题标题】:Teradata: Keep running the script although there are errorsTeradata:尽管有错误,但继续运行脚本
【发布时间】:2016-09-15 07:43:26
【问题描述】:

我有一个长脚本,其中包含要在 teradata 上运行的 sql 语句。我希望脚本一直运行到最后,并将错误保存在日志文件中,并且它会在每个错误时停止。我该怎么做?

谢谢

【问题讨论】:

  • 这个问题对于 SO 来说太宽泛了,但我建议查看 developer.teradata.com 上的 this article,其中涵盖 Teradata 中的存储过程异常处理以获得一些想法。
  • “一直运行到最后,并将错误保存在日志文件中它会在每个错误时停止”这句话不是自相矛盾吗?无论在记录错误时是否出现任何执行错误,您都希望它一直运行到最后,还是希望它在每个错误时停止?

标签: teradata


【解决方案1】:

假设您使用的是 Teradata SQL 助手:
单击菜单栏中的工具,然后单击选项,然后单击查询。有一个复选框显示“如果发生 SQL 错误,则停止查询执行”

要获取最近的错误,请按 F11。否则,从菜单栏中单击工具,然后显示历史记录。双击其中一个历史记录左侧的行号,它将弹出一个屏幕,其中包含每个语句的结果消息。您还可以直接从 DBC 中的 QryLog 视图之一查询此类信息。

【讨论】:

  • 谢谢,但是我怎样才能一次看到所有错误而不需要一次双击每个错误呢?
【解决方案2】:

错误可以有多种类型,有些可以绕过,有些则不能。例如,使用本机 Teradata 工具和实用程序,您可以让脚本忽略运行时错误,甚至是语法错误,但通常不可能忽略网络连接错误并仍然获得查询的剩余部分执行。

一般在这种情况下,您希望使用 BTEQ 工具来执行可以忽略执行错误的 SQL。 BTEQ是标准的Teradata工具,可以从Teradata网站免费下载,一般用户通过纯SQL查询Teradata时安装。

要创建一个可行的 BTEQ 脚本,只需将所有查询复制粘贴到纯文本文件中,用分号 ; 分隔所有查询,然后在该纯文本文件的最顶部添加如下所述的登录语句

.logon Teradata_IP_Address/your_UserName,your_Password;

示例脚本:

.logon 127.0.0.1/dbc,dbc;

/*Some sample queries. Replace these with your actual queries*/
SELECT Current_Timestamp;

CREATE TABLE My_Table (Dummy INTEGER) PRIMARY INDEX (Dummy);

所以 BTEQ 帮助您解决了执行错误。为避免网络连接问题,理想情况下,您希望在与 Teradata 保持持续连接并安装了 Teradata 工具和实用程序的服务器上执行该操作。这样的服务器可以称为 ETL 服务器、登陆服务器、边缘节点或托管服务器(或其他名称,具体取决于您的环境)。您肯定需要该服务器的登录凭据(如果您还没有访问权限)。执行 bteq 脚本的首选命令是

Windows:bteq < yourscriptname >routine_logfile 2>error_logfile

Linux (bash/ksh):nohup bteq < yourscriptname >routine_logfile 2>error_logfile &

如果您在 Windows 上,请确保不要关闭命令提示符。在 Linux 上,如果您使用推荐的命令,您可以关闭当前窗口甚至终止与 ETL 服务器的网络会话。

如果您在日志末尾看到有关 EOL 行的警告,请忽略它;这是因为为了简单起见,我忽略了一些可选的 BTEQ 语句,这些语句可以确保更清晰的退出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 2020-01-14
    • 2021-09-09
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多