使用BTEQ在Windows中安排查询

时间:2014-05-26 18:00:22

标签: windows-7 scheduled-tasks teradata

嗨,我很擅长使用BTEQ,

我希望安排一个使用teradata连接运行的查询,查询结果应该转到带有分隔符的excel或txt(因此可以使用excel格式化)

我需要通过windows进行此操作,所以我猜它应该是使用Windows调度程序安排的* .bat

事情是,我不知道如何打开连接,运行查询并将结果导出到* .xls或* .csv或* .txt

我已经设置了连接到TD的ODBC(我使用TD管理员并且每天手动运行查询)。

有什么想法吗?

1 个答案:

答案 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文件中,该文件在打开时自动运行查询...