从Teradata BTEQ文件

时间:2017-09-11 01:07:45

标签: shell csv teradata export-to-csv ksh

我有一个BTEQ脚本,我从shell(Ksh)运行。 目标是将导出 Teradata表的内容转换为.csv文件。 问题在导出数据时,列之间引入的空格太多。我试过了  1.修剪单个列
 2.使用Cast转换Char中的每个列数据类型 但这似乎都没有帮助 BTEQ代码看起来像这样(我已经使用了REPORT文件,因为我需要文件头。

.EXPORT REPORT FILE = exportfilepath.csv;
.SET SEPARATOR ",";
.SET TITLEDASHES OFF;
.set RECORDMODE OFF;
.set width 65531;
.SET ERRORLEVEL 3807 SEVERITY 0

select 
  trim('"' || trim(cast(col1 as char(256))) || '"') AS col1,
  trim('"' || trim(cast(col2 as char(256))) || '"') AS col2,
  trim(cast(col3 as INTEGER)) AS col3,
  trim(cast(col4 as char(6))) AS  col4,
  trim(col5) AS col5,
  trim(cast(col6 as decimal(18,2)) AS col6,
  trim(date) AS date
from table A;

Col1和Col2之间有很多空格。对于如何删除这些空白区域有任何帮助。在这种情况下我还能做些什么?我不能减少字符大小,因为这些是可变大小的名称。

我添加了'"'这里因为col1和col2是名称之间的逗号。由于导出的.csv文件需要表达格式不正确。

1 个答案:

答案 0 :(得分:1)

REPORT格式用于打印,即固定宽度加分隔符。

要生成逗号分隔的数据而不添加分隔符,并引用更好用CSV,如下所示:

WITH CTE AS
 ( SELECT col1,col2,col3,col4.col5,col6,current_date as dt
   FROM table A
 )
SELECT str (title '')
FROM TABLE
  (CSV(NEW VARIANT_TYPE(cte.col1,cte.col2,cte.col3
                       ,cte.col4.cte.col5,cte.col6
                       ,cte.dt), ',', '"'
      ) RETURNS (str varchar(32000) CHARACTER SET UNICODE)
  ) AS t1;

或切换到TPT& DELIMITED格式。