将数据集导入 Docker 下的 Clickhouse 时出现“异常:没有要插入的数据”

Posted

技术标签:

【中文标题】将数据集导入 Docker 下的 Clickhouse 时出现“异常:没有要插入的数据”【英文标题】:"Exception: No data to insert" while importing dataset into Clickhouse under Docker 【发布时间】:2019-01-21 14:19:40 【问题描述】:

我正在尝试使用 this manual 来玩 Clickhouse。我已经设置了docker image。我还成功创建了一个表:

CREATE TABLE tax_bills_nyc
(
    bbl Int64,
    owner_name String,
    address String,
    tax_class String,
    tax_rate String,
    emv Float64,
    tbea Float64,
    bav Float64,
    tba String,
    property_tax String,
    condonumber String,
    condo String,
    insertion_date DateTime MATERIALIZED now()
)
ENGINE = MergeTree
PARTITION BY tax_class
ORDER BY owner_name

Ok.

我退出 Clickhouse 客户端并检查 Docker 容器是否已启动:

CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS                          NAMES
55991995335b        yandex/clickhouse-server   "/entrypoint.sh"    About an hour ago   Up About an hour    8123/tcp, 9000/tcp, 9009/tcp   some-clickhouse-server

我尝试使用以下命令导入示例数据集:

curl -X GET 'http://taxbills.nyc/tax_bills_june15_bbls.csv' | docker run --rm --link some-clickhouse-server:clickhouse-server yandex/clickhouse-client --host clickhouse-server --input_format_allow_errors_num=10 --query="INSERT INTO test_database.tax_bills_nyc FORMAT CSV"

我收到以下错误:

 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0  176M    0  2641    0     0   7494      0  6:50:28 --:--:--  6:50:28  7481Code: 108. DB::Exception: No data to insert

  0  176M    0 94321    0     0  35245      0  1:27:16  0:00:02  1:27:14 35233
curl: (23) Failed writing body (0 != 16384)

可能是什么原因以及如何解决?

【问题讨论】:

问题是 docker run 缺少 -i 参数。这个命令对我有用: curl -X GET 'taxbills.nyc/tax_bills_june15_bbls.csv' | docker run -i --rm --link some-clickhouse-server:clickhouse-server yandex/clickhouse-client --host clickhouse-server --input_format_allow_errors_num=10 --query="INSERT INTO test_database.tax_bills_nyc FORMAT CSV"跨度> 【参考方案1】:

我有点困惑,因为docker run 用于运行(启动不存在)容器。我不确定,docker run 是您在成功检查容器正在运行后应该做的事情。

你应该使用 docker run 而不是

docker exec -i <container-id-or-name>

所以,你的行应该是:

curl -X GET 'http://taxbills.nyc/tax_bills_june15_bbls.csv' | docker exec -i some-clickhouse-server --query="INSERT INTO test_database.tax_bills_nyc FORMAT CSV"

您总是可以在official documentation 中找到有关 docker 命令的信息

【讨论】:

以上是关于将数据集导入 Docker 下的 Clickhouse 时出现“异常:没有要插入的数据”的主要内容,如果未能解决你的问题,请参考以下文章

怎样将Docker容器中的文件导入到主机

Docker 镜像在离线环境下的导出导入

cad如何导入arcgis,详细步骤

mongodb怎么将知网数据库导入

Pysyft学习笔记四:MINIST数据集下的联邦学习(并行训练与非并行训练)

Pysyft学习笔记四:MINIST数据集下的联邦学习(并行训练与非并行训练)