"Exception: No data to insert" 在 Docker 下将数据集导入 Clickhouse

"Exception: No data to insert" while importing dataset into Clickhouse under Docker

我正在尝试使用 this manual. I've set up docker image 来玩 Clickhouse。我还成功创建了 table:

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 用于 运行(开始时不存在)容器。我不确定,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 命令的信息