2016-06-21 66 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。