clickhouse数据导入

x7yiwoj4  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(3)|浏览(674)

我在clickhouse中创建了一个表:

  1. CREATE TABLE stock
  2. (
  3. plant Int32,
  4. code Int32,
  5. service_level Float32,
  6. qty Int32
  7. ) ENGINE = Log

有一个数据文件

  1. :~$ head -n 10 /var/rs_mail/IN/qv_stock_20160620035119.csv
  2. 2010,646,1.00,13
  3. 2010,2486,1.00,19
  4. 2010,8178,1.00,10
  5. 2010,15707,1.00,4
  6. 2010,15708,1.00,10
  7. 2010,15718,1.00,4
  8. 2010,16951,1.00,8
  9. 2010,17615,1.00,13
  10. 2010,17616,1.00,4
  11. 2010,17617,1.00,8

我正在尝试加载数据:

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

我犯了个错误

  1. \n2010: 7615,1.00,13ion: Cannot parse input: expected , before: 2010,646,1.00,13
  2. Row 1:
  3. Column 0, name: plant, type: Int32, ERROR: text "2010,64" is not like Int32
  4. : (at row 1)

我做错什么了?
文件:https://yadi.sk/d/ijjlmnbjsjbvc

ygya80vv

ygya80vv1#

谢谢你uysizfoz:
您的文件有bom(ef bb bf bytes at begin)。
在我的例子中,原始文件的标题行中有一个bom表。我只是排除了使用csvwithnames格式加载第一行。
cat/tmp/qv_stock_20160623035104.csv | clickhouse client--query=“插入股票格式csvwithnames”;

oprakyz7

oprakyz72#

int8类型的范围为-128..127。2010(第一个值)超出int8的范围。
如果更改表定义,一切正常:

  1. $ clickhouse-client
  2. ClickHouse client version 0.0.53720.
  3. Connecting to localhost:9000.
  4. Connected to ClickHouse server version 1.1.53981.
  5. :) CREATE TABLE stock
  6. :-] (
  7. :-] plant Int16,
  8. :-] code Int16,
  9. :-] service_level Float32,
  10. :-] qty Int8
  11. :-] ) ENGINE = Log
  12. CREATE TABLE stock
  13. (
  14. plant Int16,
  15. code Int16,
  16. service_level Float32,
  17. qty Int8
  18. ) ENGINE = Log
  19. Ok.
  20. 0 rows in set. Elapsed: 0.002 sec.
  21. :) Bye.
  22. $ mcedit qv_stock_20160620035119.csv
  23. $ cat qv_stock_20160620035119.csv | clickhouse-client --query="INSERT INTO stock FORMAT CSV";
  24. $ clickhouse-client
  25. ClickHouse client version 0.0.53720.
  26. Connecting to localhost:9000.
  27. Connected to ClickHouse server version 1.1.53981.
  28. :) SELECT * FROM stock
  29. SELECT *
  30. FROM stock
  31. ┌─plant─┬──code─┬─service_level─┬─qty─┐
  32. 2010 646 1 13
  33. 2010 2486 1 19
  34. 2010 8178 1 10
  35. 2010 15707 1 4
  36. 2010 15708 1 10
  37. 2010 15718 1 4
  38. 2010 16951 1 8
  39. 2010 17615 1 13
  40. 2010 17616 1 4
  41. 2010 17617 1 8
  42. └───────┴───────┴───────────────┴─────┘

请注意,我指定的int16对于您的数据来说可能还不够。然后指定int32、int64。。。

展开查看全部
eit6fx6z

eit6fx6z3#

我觉得这里面的逗号破坏了格式 2010,646,1.00,13 尝试删除所有逗号,然后尝试将其作为int插入。

相关问题