2016-06-21 9 views
3

私はClickhouseでテーブルを作成しました:Clickhouseデータインポート

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

をし、私が取得:データファイル

:~$ 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 

がある

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

私は、データをロードしようとしていますエラー

\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

私はそれに精通していませんが、FORMAT CSVがデフォルトの描写に使用するものを調べます。おそらく '、 'ではない –

答えて

1

はuYSIZfozありがとう:

あなたのファイルはBOMを持っている(EF BB BFが始まりでバイト)。

私の場合、元のファイルのヘッダー行にBOMがありました。 CSVWithNamesという書式を使って最初の行をロードすることを単に除外しました。

cat /tmp/qv_stock_20160623035104.csv | clickhouse-client --query = "INSERT INTO在庫書式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としてでそれを挿入しようと、その後、すべてのカンマを削除するようにしてくださいと思います。

関連する問題