如果值包含来自 ',则无法解析 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 数据

编辑:

现已合并。