嗨,我很擅长使用BTEQ,
我希望安排一个使用teradata连接运行的查询,查询结果应该转到带有分隔符的excel或txt(因此可以使用excel格式化)
我需要通过windows进行此操作,所以我猜它应该是使用Windows调度程序安排的* .bat
事情是,我不知道如何打开连接,运行查询并将结果导出到* .xls或* .csv或* .txt
我已经设置了连接到TD的ODBC(我使用TD管理员并且每天手动运行查询)。
有什么想法吗?
答案 0 :(得分:1)
BTEQ不使用ODBC而是使用CLI连接。
你可以简单地创建一个这样的脚本:
.logon TDPID/username,password;
.OS if exist bla.txt del bla.txt; -- remove the file if it exists (otherwise BTEQ appends)
.export report file = bla.txt;
SELECT
TRIM(DataBaseName) || ',' ||
TRIM(TableName) || ',' ||
TRIM(Version) || ',' ||
TRIM(TableKind) || ',' ||
TRIM(ParentCount) (TITLE '')
FROM dbc.TablesV
SAMPLE 10
;
.export reset;
.EXIT;
TDPID
是您的TD系统(或IP地址)的名称。
您需要使用TRIM
和||
手动格式化SELECT中的csv,如上所示,您必须使用COALESCE(TRIM(col), '')
处理可能的NULL。
您也可以尝试古老的DIF格式,无需关心NULL等等。
.export DIF file = bla.dif;
SELECT
DataBaseName
,TableName
,Version
,TableKind
,ParentCount
FROM dbc.TablesV
SAMPLE 10
;
在TD14中有一个名为CSV的表UDF,它负责处理NULL并引用字符串而不是TRIM
/ COALESCE
/ ||
。你的语法也有点冗长:
WITH cte
(
DataBaseName
,TableName
,Version
,TableKind
,ParentCount
)
AS
(
SELECT
DataBaseName
,TableName
,Version
,TableKind
,ParentCount
FROM dbc.TablesV
SAMPLE 10
)
SELECT *
FROM TABLE(CSV(NEW VARIANT_TYPE
(
cte.DataBaseName
,cte.TableName
,cte.Version
,cte.TableKind
,cte.ParentCount
), ',', '"')
RETURNS (op VARCHAR(32000) CHARACTER SET UNICODE)) AS t1;
最后你运行BTEQ并重定向文件(你可以把它作为一个BAT文件):
BTEQ < myscript.txt
也可能有其他选择,例如TPT / FastExport脚本或将SQL放在Excel文件中,该文件在打开时自动运行查询...