快速加载到时态表

时间:2014-09-02 00:56:28

标签: teradata

有一个包含3个字段的cvs文件

1,cat,2012-06-16,2013-06-16 
1,cat,2013-06-16,

我正在尝试使用fastload脚本将其加载到具有valid_dt PERIOD(DATE)的临时表

nonsequenced validtime    
INSERT INTO financial.test1 (id,name,valid_dt) values
(:id,:name,period( cast(:start_dt as date FORMAT 'YYYY-MM-DD'),cast(:end_dt as date FORMAT  'YYYY-MM-DD'))
);

我得到的错误是RDBMS错误3618:快速加载中不允许表达式               插入,列INTERNALPERIODDATETYPE。

在手册中找不到任何内容,他们只表示可以快速加载。

三江源。

1 个答案:

答案 0 :(得分:1)

FastLoad不允许ANSI样式CAST,必须是旧的Teradata样式:

:start_dt (date, FORMAT 'YYYY-MM-DD')

但是没有旧式的PERIOD演员,而且FastLoad也不允许任何形式的演绎和PERIOD(...) 表达。

因此,您只能加载可以自动转换为PEROD的数据,如:

1;cat;(2012-06-16, 2013-06-16) 
1;cat;(2013-06-16, 9999-12-31)

包括parens,逗号后的空白和不同的分隔符......

我建议只使用FastLoad或MultiLoad将数据作为DATE(或CHAR)加载到临时表中,然后再加载

nonsequenced validtime    
INSERT INTO financial.test1 (id,name,valid_dt) values
select id, name, period(start_dt,COALESCE(end_dt, date '9999-12-31'))
from stagingtable