将数据从.csv复制到Vertica表中

时间:2018-07-26 22:29:55

标签: sql vertica

我正在尝试将数据从平面文件复制到Vertica表中。我的数据是ENCLOSED BY '^',并且正在使用DELIMITER '|'。万一降价使这个有趣的话,按数据用克拉括起来,并用竖管定界。

以下是用于创建表的CREATE TABLE表语句:

CREATE TABLE SCHEMA.TEST_TABLE ( UNIQUE_ID float , TEST_DT_TM timestamptz , TEST2_DT_TM timestamptz ) UNSEGMENTED ALL NODES;

这是我正在使用的复制语句:

COPY SCHEMA.TEST_TABLE ( UNIQUE_ID , TEST_DT_TM , TEST2_DT_TM ) from local 'file_name.csv' ENCLOSED BY '^' DELIMITER '|' SKIP 1 ABORT ON ERROR TRAILING NULLCOLS;

我遇到以下错误:

错误:COPY:输入记录5754已被拒绝(第4列(TEST2_DT_TM)的时间戳格式无效。时间戳的输入语法无效:“”)

原始格式的记录5754看起来像这样...

123|^04/09/17 12:23:33^|^^|

在数据库中,此平面文件是从中提取的,TEST2_DT_TM(写为^^的字段)为null。但是,由于某些原因,Vertica不想在我在上面的timestamptz语句中为TEST2_DT_TM定义的create table字段中接受此内容。我相当确定这是问题所在,因为一旦我手动从文件中删除了两个插入符号,就可以读取它了。|| ..然后记录被接受。

我还尝试在复制语句中添加NULL AS ''NULL AS ' '的组合,以防该字段被转换为空字符串而不是真正的null,但这似乎没有也可以工作。

有人对此行为有任何解释吗?之前几次将.csv复制到表中时,我都使用过enclosed by + delimiter组合的这种组合,没有任何问题。

我知道可能有其他方法/解决方法可以将其发布到表格中,但是在研究了一段时间之后,我真的很想了解根本原因。

让我知道我是否可以提供其他信息,以更好地帮助交流我的问题。

1 个答案:

答案 0 :(得分:0)

您正陷入不断重复的讨论中:空字符串(在示例中使用尖号作为字符串定界符的^^)不是NULL值。而且时间戳记不是字符串,因此空字符串确实是时间戳记的错误文字。

尝试完全不使用null,并通过在COPY命令中添加NULL选项来指定NULL文字。

复制命令:

COPY test_table (
  UNIQUE_ID
, TEST_DT_TM
, TEST2_DT_TM
)
FROM LOCAL 'copyemptytz.csv' 
ENCLOSED BY '^' 
DELIMITER '|' 
NULL '' 
SKIP 1 
ABORT ON ERROR 
TRAILING NULLCOLS;

测试数据:(最后一行是您的问题行)

unique_id|test_dt_tm|test2_dt_tm|
123|^04/09/17 12:23:33^|^04/09/17 12:23:33^|
123|^04/09/17 12:23:33^|^04/09/17 12:23:33^|
123|^04/09/17 12:23:33^|^04/09/17 12:23:33^|
123|^04/09/17 12:23:33^|^04/09/17 12:23:33^|
123|^04/09/17 12:23:33^|^04/09/17 12:23:33^|
123|^04/09/17 12:23:33^|^04/09/17 12:23:33^|
123|^04/09/17 12:23:33^|^04/09/17 12:23:33^|
123|^04/09/17 12:23:33^||