sql - 将数据从 .csv 复制到 Vertica 表

标签 sql vertica

我正在尝试将数据从平面文件复制到 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/

相关文章:

vertica - LONG VARCHAR 如何 “LIKE”?

database - vertica:在列值中设置行号

.Net 核心支持查询 Vertica

sql - 在多行的值之间进行选择

mysql - 在对象数组中搜索具有特定值的特定键

sql - 我可以在创建 PostgreSQL 表后向其添加 UNIQUE 约束吗?

sql - 全文的 Postgresql 前缀通配符

.net - 处理数据库模式中的更改

node.js - 如何从 NodeJS 中的 stdin 响应获取 Vertica 副本?

java - Pentaho Kettle Kitchen 找不到插件