我正在尝试将数据从平面文件复制到 Vertica 表中。我的数据是 ENCLOSED BY '^'
并使用 DELIMITER '|'
。如果 markdown 翻译的很有趣,数据用克拉括起来,并用竖线分隔。
这是用于创建表的 CREATE TABLE
表语句:
创建表 SCHEMA.TEST_TABLE
(
UNIQUE_ID float
, TEST_DT_TM 时间戳tz
, TEST2_DT_TM 时间戳
)
未分段的所有节点;
这是我正在使用的复制语句:
复制 SCHEMA.TEST_TABLE
(
唯一身份
, 测试_DT_TM
, TEST2_DT_TM
)
来自本地“file_name.csv”,由“^”分隔符“|”包围SKIP 1 ABORT ON ERROR TRAILING NULLCOLS;
我收到以下错误:
错误:复制:输入记录 5754 已被拒绝(第 4 列 (TEST2_DT_TM) 的 timestamptz 格式“无效”。timestamptz 的输入语法无效:“”)
原始格式的记录 5754 看起来像这样......
123|^04/09/17 12:23:33^|^^|
在从中提取此平面文件的数据库中,TEST2_DT_TM
(写为 ^^
的字段)为空。但是,出于某种原因,Vertica 不想将其接受到我在上面的 create table
语句中为 TEST2_DT_TM
定义的 timestamptz
字段中.我相当确定这是问题所在,因为一旦我从文件中手动删除了两个插入符,它就会读取.. ||
.. 然后记录被接受。
如果字段被翻译成空字符串,我还尝试在我的复制语句中添加 NULL AS ''
或 NULL AS ' '
的组合而不是真正的 null,但这似乎也不起作用。
有人对这种行为有任何解释吗?之前多次将 .csv 复制到表中时,我使用了 enclosed by + delimiter
组合,没有任何问题。
我知道可能有替代方案/解决方法可以将其纳入表格,但在研究了一段时间之后,我真的很想了解根本原因。
如果我可以提供任何其他信息以更好地帮助交流我的问题,请告诉我。
最佳答案
您陷入了不断重复的讨论:空字符串(^^
在您的示例中使用脱字符作为字符串定界符)不是 NULL 值。并且时间戳不是字符串,因此空字符串确实是时间戳z 的错误文字。
通过向 COPY 命令添加 NULL 选项,尝试不为 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^||
关于sql - 将数据从 .csv 复制到 Vertica 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51548343/