2016-06-21 631 views
3

我创建了Clickhouse表:Clickhouse数据导入

CREATE TABLE stock 
(
    plant Int32, 
    code Int32, 
    service_level Float32, 
    qty Int32 
) ENGINE = Log 

有一个数据文件

:~$ head -n 10 /var/rs_mail/IN/qv_stock_20160620035119.csv 
2010,646,1.00,13 
2010,2486,1.00,19 
2010,8178,1.00,10 
2010,15707,1.00,4 
2010,15708,1.00,10 
2010,15718,1.00,4 
2010,16951,1.00,8 
2010,17615,1.00,13 
2010,17616,1.00,4 
2010,17617,1.00,8 

我试图加载数据:

:~$ cat /var/rs_mail/IN/qv_stock_20160620035119.csv | clickhouse-client --query="INSERT INTO stock FORMAT CSV"; 

,我得到一个错误

\n2010: 7615,1.00,13ion: Cannot parse input: expected , before: 2010,646,1.00,13 

Row 1: 
Column 0, name: plant,   type: Int32, ERROR: text "2010,64" is not like Int32 

: (at row 1) 

我做错了什么?

文件:https://yadi.sk/d/ijJlmnBjsjBVc

+0

我不熟悉它,但我会研究格式CSV用于默认描述的内容,也许它不是',' –

回答

1

谢谢uYSIZfoz:

你的文件有BOM(EF BB BF字节的开始)。

在我的情况是在原始文件的标题行中的BOM。我只是使用CSVWithNames格式排除加载第一行。

cat /tmp/qv_stock_20160623035104.csv | clickhouse-client --query =“INSERT INTO stock FORMAT CSVWithNames”;

3

INT8类型具有范围-128..127。 2010(第一个值)超出Int8的范围。

如果更改表的定义,一切都OK了:

$ clickhouse-client 
ClickHouse client version 0.0.53720. 
Connecting to localhost:9000. 
Connected to ClickHouse server version 1.1.53981. 

:) CREATE TABLE stock 
:-] (
:-]  plant Int16, 
:-]  code Int16, 
:-]  service_level Float32, 
:-]  qty Int8 
:-]) ENGINE = Log 

CREATE TABLE stock 
(
    plant Int16, 
    code Int16, 
    service_level Float32, 
    qty Int8 
) ENGINE = Log 

Ok. 

0 rows in set. Elapsed: 0.002 sec. 

:) Bye. 
$ mcedit qv_stock_20160620035119.csv 

$ cat qv_stock_20160620035119.csv | clickhouse-client --query="INSERT INTO stock FORMAT CSV"; 
$ clickhouse-client 
ClickHouse client version 0.0.53720. 
Connecting to localhost:9000. 
Connected to ClickHouse server version 1.1.53981. 

:) SELECT * FROM stock 

SELECT * 
FROM stock 

┌─plant─┬──code─┬─service_level─┬─qty─┐ 
│ 2010 │ 646 │    1 │ 13 │ 
│ 2010 │ 2486 │    1 │ 19 │ 
│ 2010 │ 8178 │    1 │ 10 │ 
│ 2010 │ 15707 │    1 │ 4 │ 
│ 2010 │ 15708 │    1 │ 10 │ 
│ 2010 │ 15718 │    1 │ 4 │ 
│ 2010 │ 16951 │    1 │ 8 │ 
│ 2010 │ 17615 │    1 │ 13 │ 
│ 2010 │ 17616 │    1 │ 4 │ 
│ 2010 │ 17617 │    1 │ 8 │ 
└───────┴───────┴───────────────┴─────┘ 

请注意,Int16的,这是我指定的,可能是还没有足够的数据。然后指定的Int32,Int64的...

+0

我试图将类型更改为Int16以发送第一篇文章。错误仍然存​​在。文件编码可能有问题吗?我纠正了我的问题,因为错误是一样的。 – dtmp

+0

我添加了一个试图加载的文件 – dtmp

+0

$ head -n1 test.csv | xxd 0000000:efbb bf32 3031 302c 3634 362c 312e 3030 ... 2010,646,1.00 0000010:2c31 330d 0a,13 .. – uYSIZfoz

0

我想在这个逗号破坏格式

2010,646,1.00,13

尝试删除所有的逗号,然后尝试将其插回作为一个int。