如果值包含来自 ',则无法解析 csv 文件
Couldn't parse csv file if value contains from '
这是演示 DDL:
CREATE TABLE X (
eventdate Date default toDate(now()),
f1 String,
f2 String,
f3 String
) ENGINE = MergeTree(eventdate, (f1, f2, f3), 8192)
当我尝试导入数据时,clickhous 失败并出现错误:
$echo "US,'Ewa Beach, Test" | clickhouse-client --database default --query "insert into X(f1, f2, f3) format CSV"
Code: 27. DB::Exception: Cannot parse input: expected , at end of
stream.: (at row 1)
这是我的 click house 版本(如果我没记错的话,这是我写的最新版本):
$ clickhouse-client --version
ClickHouse client version 1.1.54385.
问题是字段 f2 的值中的 ' 符号。
拜托,有什么解决方法可以让它工作吗?
也许有一些选项可以强制只使用双引号作为字符串分隔符,并将单引号视为没有特殊含义的普通符号?拜托,欢迎任何解决方案。
我刚刚使用相同的值进行了测试,但作为 tsv,它可以工作。但不幸的是,我现在无法迁移到 tsv。我需要为 csv 找到一些解决方法,以使其在字段值中使用单引号。
P.S.
有趣的是,如果只留下两个字段,它会正确解析 csv。
CREATE TABLE X (
eventdate Date default toDate(now()),
f1 String,
f2 String
) ENGINE = MergeTree(eventdate, (f1, f2), 8192)
以下查询有效:
$echo "US,'Ewa Beach" | clickhouse-client --database default --query "insert into X(f1, f2) format CSV"
这里是 issue 在 GitHub
上的相关内容
您需要为这样的值使用双引号。
echo "US,\"'Ewa Beach\", Test" | clickhouse-client --host ch_srv --query "insert into X(f1, f2, f3) format CSV"
这有效。
:) select * from X format CSV;
SELECT *
FROM X
FORMAT CSV
"2018-06-28","US","'Ewa Beach","Test"
:) select * from X;
SELECT *
FROM X
┌──eventdate─┬─f1─┬─f2──────────┬─f3───┐
│ 2018-06-28 │ US │ \'Ewa Beach │ Test │
└────────────┴────┴─────────────┴──────┘
我刚刚 运行 遇到了同样的问题。我创建了一个 PR https://github.com/yandex/ClickHouse/pull/2574
有了它,您可以指定 format_allow_csv_single_quote=0
来解析带有以 '
开头的字符串字段的 csv 数据
编辑:
现已合并。
这是演示 DDL:
CREATE TABLE X (
eventdate Date default toDate(now()),
f1 String,
f2 String,
f3 String
) ENGINE = MergeTree(eventdate, (f1, f2, f3), 8192)
当我尝试导入数据时,clickhous 失败并出现错误:
$echo "US,'Ewa Beach, Test" | clickhouse-client --database default --query "insert into X(f1, f2, f3) format CSV"
Code: 27. DB::Exception: Cannot parse input: expected , at end of
stream.: (at row 1)
这是我的 click house 版本(如果我没记错的话,这是我写的最新版本):
$ clickhouse-client --version
ClickHouse client version 1.1.54385.
问题是字段 f2 的值中的 ' 符号。 拜托,有什么解决方法可以让它工作吗?
也许有一些选项可以强制只使用双引号作为字符串分隔符,并将单引号视为没有特殊含义的普通符号?拜托,欢迎任何解决方案。
我刚刚使用相同的值进行了测试,但作为 tsv,它可以工作。但不幸的是,我现在无法迁移到 tsv。我需要为 csv 找到一些解决方法,以使其在字段值中使用单引号。
P.S.
有趣的是,如果只留下两个字段,它会正确解析 csv。
CREATE TABLE X (
eventdate Date default toDate(now()),
f1 String,
f2 String
) ENGINE = MergeTree(eventdate, (f1, f2), 8192)
以下查询有效:
$echo "US,'Ewa Beach" | clickhouse-client --database default --query "insert into X(f1, f2) format CSV"
这里是 issue 在 GitHub
上的相关内容您需要为这样的值使用双引号。
echo "US,\"'Ewa Beach\", Test" | clickhouse-client --host ch_srv --query "insert into X(f1, f2, f3) format CSV"
这有效。
:) select * from X format CSV;
SELECT *
FROM X
FORMAT CSV
"2018-06-28","US","'Ewa Beach","Test"
:) select * from X;
SELECT *
FROM X
┌──eventdate─┬─f1─┬─f2──────────┬─f3───┐
│ 2018-06-28 │ US │ \'Ewa Beach │ Test │
└────────────┴────┴─────────────┴──────┘
我刚刚 运行 遇到了同样的问题。我创建了一个 PR https://github.com/yandex/ClickHouse/pull/2574
有了它,您可以指定 format_allow_csv_single_quote=0
来解析带有以 '
编辑:
现已合并。