我正在尝试将数据从平面文件复制到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
组合的这种组合,没有任何问题。
我知道可能有其他方法/解决方法可以将其发布到表格中,但是在研究了一段时间之后,我真的很想了解根本原因。
让我知道我是否可以提供其他信息,以更好地帮助交流我的问题。
答案 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^||