Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date Teradata:BTEQ导入无效日期问题_Date_Import_Teradata - Fatal编程技术网

Date Teradata:BTEQ导入无效日期问题

Date Teradata:BTEQ导入无效日期问题,date,import,teradata,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 TIMES

我正在尝试通过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 );

以下是我试图加载到表中的两个示例记录:
2007年3月14日12:00:00:000AM 2007年3月15日1:27:00:000PM 2007年3月15日1:41:08:686PM 0 1 | 1 | 26 | 2007073 | 2007年3月14日12:00:00:000AM | 2007年3月15日1:27:00:000PM | 2007年3月15日1:59:40:620PM | 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中尝试了以下操作,但仍然失败:
将日期格式“mmmbddbyyy”转换为日期格式“YYYY-MM-DD”(转换(substr(:reference_dt,1,11))

您的数据是管道分隔的可变长度字符,使用的字符应与输入数据匹配,例如

system_id VARCHAR(11)
referral_dt VARCHAR(26)
VARCHAR将使用默认格式自动转换为目标数据类型。对于您的时间戳,您需要手动强制转换并添加一种格式:

referral_dt (TIMESTAMP(3),FORMAT 'mmmBddByyyyBhh:mi:ss.s(3)T')
但这会失败一个小时,Teradata总是需要两位数

如果您使用的是TD14,则最好使用Oracle TO_DATE/TO_TIMESTAMP UDF,该UDF允许单位时间:

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

您没有数据指示的日期

前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|...

嗨,谢谢你的回复。我不在TD14上,所以第二种选择被排除了。我最初考虑的是推荐专栏。我想知道为什么子字符串函数不能工作,我可以选择日期,因为这是引用所需的?当然,您可以使用子字符串来提取日期部分。对于时间戳,您需要执行一个CASE加子字符串来添加缺少的0。嗨,我考虑将所有数据作为varchar移植到TD上的staging表中,然后在插入target时格式化它。这种方法给了我一个游乐场。谢谢你的投入。感谢:)嗨,多诺思,我过去常常为我的用例打上100%成功的时间戳。要添加的是必须修剪输入字符串。当我试图转换一个只指定时间值(单个小时)的字符串时,我遇到了这个问题。谢谢你在这方面的帮助。