Teradata:BTEQ导入无效日期问题

时间:2014-03-29 12:25:13

标签: date import teradata

我正在尝试通过BTEQ将数据从平面文件移植到TD。 表格定义为:

CREATE MULTISET TABLE _module_execution_log 
 (
  system_id INTEGER,
  process_id INTEGER,
  module_id INTEGER,
  julian_dt INTEGER,
  referral_dt DATE FORMAT 'YYYY-MM-DD',
  start_dt_tm TIMESTAMP(6),
  end_dt_tm TIMESTAMP(6),
  ref_s_cnt INTEGER,
  ref_d_cnt INTEGER)
  PRIMARY INDEX ( module_id );

以下是我要在表格中加载的2个样本记录:
1|1|30|2007073|Mar 14 2007 12:00:00:000AM|Mar 15 2007 1:27:00:000PM|Mar 15 2007 1:41:08:686PM|0|0 1|1|26|2007073|Mar 14 2007 12:00:00:000AM|Mar 15 2007 1:27:00:000PM|Mar 15 2007 1:59:40:620PM|0|0
我的BTEQ脚本的片段

USING 
(   system_id INTEGER
    ,process_id INTEGER
    ,module_id INTEGER
    ,julian_dt INTEGER
    ,referral_dt DATE FORMAT 'YYYY-MM-DD'
    ,start_dt_tm TIMESTAMP
    ,end_dt_tm TIMESTAMP
    ,ref_s_cnt INTEGER
    ,ref_d_cnt INTEGER
)        

INSERT INTO _module_execution_log
(   system_id
    ,process_id
    ,module_id
    ,julian_dt
    ,referral_dt
    ,start_dt_tm
    ,end_dt_tm
    ,ref_s_cnt
    ,ref_d_cnt
)
VALUES ( 
    :system_id
    ,:process_id
    ,:module_id
    ,:julian_dt
    ,:referral_dt
    ,:start_dt_tm
    ,:end_dt_tm
    ,:ref_s_cnt
    ,:ref_d_cnt);


导入过程中出现以下错误:

*** Failure 2665 Invalid date.
           Statement# 1, Info =5


*** Failure 2665 Invalid date.
           Statement# 1, Info =5


问题肯定在于第5栏中的出口日期。我无法修改导出查询。
我在bteq中尝试了以下操作但仍然失败:
cast(cast(substr(:referral_dt,1,11) as date format 'MMMBDDBYYYY') as date format 'YYYY-MM-DD')

2 个答案:

答案 0 :(得分:1)

您的数据是以竖线分隔的可变长度字符,USING应与输入数据匹配,例如

system_id VARCHAR(11)
referral_dt VARCHAR(26)

VarChars将使用默认格式自动转换为目标数据类型。对于您的时间戳,您需要手动添加格式:

referral_dt (TIMESTAMP(3),FORMAT 'mmmBddByyyyBhh:mi:ss.s(3)T')

但是这会在一个小时内失败,Teradata总是想要两位数。

如果您使用的是TD14,则最好使用允许一位数小时的Oracle TO_DATE / TO_TIMESTAMP UDF:

TO_TIMESTAMP(referral_dt,'MON DD YYYY HH:MI:SS:FF3AM')

答案 1 :(得分:0)

您的数据没有指明日期。

预期的前4个值是整数,然后是日期,然后是时间戳:

system_id INTEGER,
process_id INTEGER,
module_id INTEGER,
julian_dt INTEGER,
**referral_dt DATE FORMAT 'YYYY-MM-DD'**,
start_dt_tm TIMESTAMP(6), ...

您的数据不匹配:

1|1|30|2007073|Mar 14 2007 12:00:00:000AM|Mar 15 2007  1:27:00:000PM|Mar 15 2007  1:41:08:686PM|0|0

你错过了日期:

1|1|30|2007073|**????-??-??**| Mar 14 2007 12:00:00:000AM|...