【问题标题】:Clickhouse Data ImportClickhouse 数据导入
【发布时间】:2016-10-23 13:54:03
【问题描述】:

我在 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

【问题讨论】:

  • 我不熟悉它,但我会研究 FORMAT CSV 用于默认描绘的内容,也许它不是,

标签: database clickhouse


【解决方案1】:

我认为这里的逗号会破坏格式

2010,646,1.00,13

尝试删除所有逗号,然后尝试将其作为 Int 重新插入。

【讨论】:

    【解决方案2】:

    谢谢你uYSIZfoz:

    您的文件有 BOM(EF BB BF 字节开头)。

    在我的例子中是原始文件标题行中的 BOM。我只是不使用 CSVWithNames 格式加载第一行。

    cat /tmp/qv_stock_20160623035104.csv | clickhouse-客户端 --query="INSERT INTO stock FORMAT CSVWithNames";

    【讨论】:

      【解决方案3】:

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

      如果更改表定义,一切正常:

      $ 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...

      【讨论】:

      • 我尝试将类型更改为 Int16 以发送第一篇文章。错误仍然存​​在。文件的编码可能有问题吗?我更正了我的问题,因为错误是一样的。
      • 我添加了一个正在尝试加载的文件
      • $ head -n1 test.csv | xxd 0000000: efbb bf32 3031 302c 3634 362c 312e 3030 ...2010,646,1.00 0000010: 2c31 330d 0a ,13..
      • 您的文件有 BOM(EF BB BF 字节开头)。
      • 感谢您的回答。如果我使用窗户怎么办?当我在 CMD 中运行时,我得到“'cat' 不是内部或外部命令、可运行程序或批处理文件。”
      猜你喜欢
      • 2021-07-22
      • 2019-04-13
      • 2017-01-16
      • 2021-07-22
      • 1970-01-01
      • 2019-04-17
      • 2019-03-04
      • 2018-05-22
      • 1970-01-01
      相关资源
      最近更新 更多