将带日期的文件加载到 netezza

Posted

技术标签:

【中文标题】将带日期的文件加载到 netezza【英文标题】:loading files with dates into netezza 【发布时间】:2013-08-01 07:05:38 【问题描述】:

我正在尝试将文本文件导入 netezza。作为简化示例,我使用包含一列的文件。

文件

01/04/2011
01/01/2099
01/01/2011

我有桌子

create table test_data
(f date)

我尝试通过

加载数据
insert into test_data
select * from 
EXTERNAL 'C:\\Temp\\dt.txt'
USING
(   
    DATESTYLE 'DMY'
    DATEDELIM '/'
    MAXERRORS 100000000000
    Y2BASE 2000
    ENCODING 'internal'
    REMOTESOURCE 'ODBC'
    delimiter '\t'
    CRINSTRING TRUE
    TRUNCSTRING TRUE
    CTRLCHARS TRUE
    IGNOREZERO TRUE
   -- ESCAPECHAR '\'
)

插入后表中没有数据。你对理性有什么想法吗?

【问题讨论】:

【参考方案1】:

我知道我在回答一个非常陈旧的问题,但 google 把它放在“netezza datestyle”的顶部附近,所以它应该有一个正确的答案。

您的数据文件和测试表 DDL 都很好。 INSERT 语句有很多您不需要的参数。最小的语法是:

insert into test_data
select * from 
EXTERNAL 'C:\\Temp\\dt.txt'
USING
(   
    DATESTYLE 'DMY'
    DATEDELIM '/'
    REMOTESOURCE ODBC -- note that you had this as a quoted string. Either should work
    LOGDIR 'C:\\Temp' -- as someone pointed out, this will give you log files to troubleshoot
);

我刚刚使用您的示例文件测试了此语法,数据加载和排序正确(例如,它知道 2011 年 1 月 4 日是 4 月 1 日而不是 1 月 4 日)有效的日期样式值为 'YMD'、'MDY'、' DMY','星期一'。默认为'YMD'

您的高 maxerrors(没有 LOGDIR)意味着记录会在出错时被静默丢弃。 除非您需要考虑错误的数据记录,否则将 MAXERRORS 设置为尽可能低(例如 1,以考虑可选的标题行)

【讨论】:

这个答案对我帮助很大,我想补充一点,因为这似乎是与这个主题相关的唯一问题之一。如果在指定日期样式后仍然出现错误,可能也是因为您的时间格式。默认为 24​​ 小时格式,如果您的时间戳采用 12 小时格式,它将不起作用(除非您检查日志,否则会给出一个相当无用的错误)。要指定时间格式,请使用“TimeStyle '12Hour'”,当然要删除双引号。有关更多信息,请搜索“Netezza_data_loading_guide”,这非常有帮助。 很高兴它有帮助,德马里尼。感谢您添加有关时间格式的信息。【参考方案2】:

从远程源来看,插入的语法看起来不错。从插入语句生成的 nzlog 应该是可见的。你能粘贴你从日志中收到的错误吗?

【讨论】:

【参考方案3】:

不需要在查询中使用 using 部分

正确的例子是:

insert into table_name select * from external C:\temp\dt.txt

这应该可以毫无问题地加载表中的数据

【讨论】:

以上是关于将带日期的文件加载到 netezza的主要内容,如果未能解决你的问题,请参考以下文章

使用 pyodbc 将带日期的数据上传到 MS Access 数据库

如何将带时区的日期时间插入 SQLite?

将 csv 文件加载到 BIGquery 中并在插入数据时添加日期列

如何将 AVRO 文件中的整数值加载到 bigquery 中的日期列?

使用 strptime 将带偏移量的时间戳转换为 datetime obj

Polybase:将数据从外部表加载到特定日期/时间范围的根 blob 文件夹