这是demo 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的一些解决方法,使其与字段值中的signle引用一起使用。
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"
以下是GitHub上的issue
答案 0 :(得分:2)
我只是遇到了同样的问题。我已经创建了PR https://github.com/yandex/ClickHouse/pull/2574
您可以指定RewriteEngine On RewriteRule ^/connect/([0-9]+)$ connect.php?id=$1 [L].
来解析以format_allow_csv_single_quote=0
开头的字符串字段的csv数据
编辑:
现在已合并。
答案 1 :(得分:0)
您需要对这样的值使用双引号。
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 │
└────────────┴────┴─────────────┴──────┘