1

我在 Teradata 的 Unix 机器上安装了客户端/TTU。

如果我执行以下操作,它会起作用。其中“...”是 Teradata BTEQ 正常输出,一旦完成以下操作,我就会回到提示符处。

$ bteq
...
...

. logon dbname/dbuser,dbpassword
SELECT DATE, TIME;
.LOGOFF;
.QUIT;

..
...
$

现在,假设我将以下几行放在一个名为“ testtd.bteq ”的文件中

. logon dbname/dbuser,$dbpassword
SELECT DATE, TIME;
.LOGOFF;
.QUIT;

我现在想要的是......我怎样才能在 Unix $ 提示符下运行这个脚本(.bteq)???

到目前为止,我尝试了以下方法,但它们没有奏效,可能是我遗漏了什么:
1. bteq < /path/to/testtd.bteq > testtd.log

2. bteq < .run /path/to/testtd。 bteq
HereDocEndsHere

有任何想法吗?如果我使用 HereDocument 方式,我是否必须首先提供“.logon dbname/dbuser,dbpassword”?

在 $ 提示符下运行 bteq 命令甚至没有给我任何我可以使用的帮助/选项,就像其他命令一样。

即 cmd -u 用户 -p 密码 -f 文件等...

4

2 回答 2

2

The best practice I'm aware of is

  1. store your teradata credentials in a ~/.tdlogon file
  2. create a script that contains your bteq call with all the stuff it needs.

E.g., create a file bteqScript.sh with

/* define helper variables, e.g.... */
export ARCHIVEDIR=~/data
export DATAFILE=dataOutput1.txt
bteq <<EOF
.run file=$HOME/.tdlogon
.export data file=${ARCHIVEDIR}|${DATAFILE} 
/* sql code on next line(s) */
select 
    'foo' as "bar"
; 
.export reset
EOF

Note that .run file=... executes the .logon command with your credentials, stored elsewhere.

Kudos to Alex Hasha for the bteq script.

于 2014-09-23T00:07:49.550 回答
0

PS - 它通过方法 1 工作 - 当我在 LOGON 命令的脚本文件中硬编码密码时。

我想通过导出一个名为“dbpassword”的变量来做同样的事情

IE

$ 导出 dbpassword=xyxyxyxyx

然后,在脚本文件中,我可以在 LOGON 命令中使用“$dbpassword”...。不知何故,导出不会在 .bteq 登录命令中导出 var。

于 2013-05-08T21:25:24.257 回答