clickhouse:在启动时创建实体化视图 (docker)
clickhouse: create materialized view on startup (docker)
我正在尝试建立本地开发 docker,在启动时使用物化视图。所以有了这个 Dockerfile:
FROM yandex/clickhouse-server:20.6.4.44
COPY default /var/lib/clickhouse/metadata/default
在 default
中我们有这两个定义:
a_table.sql
:
CREATE TABLE default.a_table (
`startTimestamp` DateTime,
`fieldNumber` UInt32,
`clientCountry` UInt16,
`packets` UInt64,
`bytes` UInt64
)
ENGINE = SummingMergeTree()
PARTITION BY toYYYYMM(startTimestamp)
ORDER BY (startTimestamp, clientCountry)
SETTINGS index_granularity = 8192
和视图,v_by_country_15m.sql
::
CREATE MATERIALIZED VIEW v_by_country_15m
ENGINE = SummingMergeTree()
PARTITION BY toYYYYMM(startTimestamp)
PRIMARY KEY (startTimestamp, clientCountry)
ORDER BY (startTimestamp, clientCountry)
AS (
SELECT startTimestamp,
clientCountry,
sum(bytes) as bytes
FROM a_table
GROUP BY startTimestamp, clientCountry
)
如果我只在 default
文件夹中包含 a_table.sql
文件,容器会正常启动,但如果我在 default
文件夹中包含 v_by_country_15m.sql
文件,它无法启动。如果我只从 table 开始,然后是 exec
和 clickhouse-client
并只创建物化视图,它就可以工作,所以我认为问题不是物化视图本身。
我们可以在启动时有物化视图吗?
需要将sql-脚本复制到/docker-entrypoint-initdb.d/-文件夹:
FROM yandex/clickhouse-server:20.6.4.44
COPY default/* /docker-entrypoint-initdb.d/
检查一下:
docker build -t test_ch:latest .
docker run test_ch
docker exec -it {container-id} bash
> clickhouse client
> USE default
> SHOW TABLES
> ┌─name────────────────────┐
> │ .inner.v_by_country_15m │
> │ a_table │
> │ v_by_country_15m │
> └─────────────────────────┘
我正在尝试建立本地开发 docker,在启动时使用物化视图。所以有了这个 Dockerfile:
FROM yandex/clickhouse-server:20.6.4.44
COPY default /var/lib/clickhouse/metadata/default
在 default
中我们有这两个定义:
a_table.sql
:
CREATE TABLE default.a_table (
`startTimestamp` DateTime,
`fieldNumber` UInt32,
`clientCountry` UInt16,
`packets` UInt64,
`bytes` UInt64
)
ENGINE = SummingMergeTree()
PARTITION BY toYYYYMM(startTimestamp)
ORDER BY (startTimestamp, clientCountry)
SETTINGS index_granularity = 8192
和视图,v_by_country_15m.sql
::
CREATE MATERIALIZED VIEW v_by_country_15m
ENGINE = SummingMergeTree()
PARTITION BY toYYYYMM(startTimestamp)
PRIMARY KEY (startTimestamp, clientCountry)
ORDER BY (startTimestamp, clientCountry)
AS (
SELECT startTimestamp,
clientCountry,
sum(bytes) as bytes
FROM a_table
GROUP BY startTimestamp, clientCountry
)
如果我只在 default
文件夹中包含 a_table.sql
文件,容器会正常启动,但如果我在 default
文件夹中包含 v_by_country_15m.sql
文件,它无法启动。如果我只从 table 开始,然后是 exec
和 clickhouse-client
并只创建物化视图,它就可以工作,所以我认为问题不是物化视图本身。
我们可以在启动时有物化视图吗?
需要将sql-脚本复制到/docker-entrypoint-initdb.d/-文件夹:
FROM yandex/clickhouse-server:20.6.4.44
COPY default/* /docker-entrypoint-initdb.d/
检查一下:
docker build -t test_ch:latest .
docker run test_ch
docker exec -it {container-id} bash
> clickhouse client
> USE default
> SHOW TABLES
> ┌─name────────────────────┐
> │ .inner.v_by_country_15m │
> │ a_table │
> │ v_by_country_15m │
> └─────────────────────────┘