Skip to content

Instantly share code, notes, and snippets.

@gudezhi
Last active December 8, 2023 07:51
Show Gist options
  • Save gudezhi/a5ea119894b84730de5da17fbb885670 to your computer and use it in GitHub Desktop.
Save gudezhi/a5ea119894b84730de5da17fbb885670 to your computer and use it in GitHub Desktop.
clickhouse操作相关

当然,您可以使用 docker cp 命令来在 Docker 容器和宿主机之间复制文件,而不需要重启您的 Docker 容器。这是一个简单有效的方法来备份和恢复数据。首先,确保在宿主机和 Docker 容器内都创建了相应的备份目录。

创建备份目录

  1. 在宿主机上创建备份目录

    mkdir -p ~/clickhouse_backup
  2. 在 Docker 容器内创建备份目录

    docker exec $CONTAINER_ID mkdir -p /clickhouse_backup

备份 ClickHouse 数据

  1. 在 Docker 容器内备份数据到容器内的目录

    docker exec $CONTAINER_ID bash -c "clickhouse-client -d data_emailflow_ai --query 'SELECT * FROM eflowdb FORMAT TSV' > /clickhouse_backup/eflowdb_backup_$(date +%Y%m%d_%H%M).tsv"
  2. 在 Docker 容器内备份表结构到容器内的目录

    docker exec $CONTAINER_ID bash -c "clickhouse-client -d data_emailflow_ai --query 'SHOW CREATE TABLE eflowdb' > /clickhouse_backup/eflowdb_structure_$(date +%Y%m%d_%H%M).sql"
  3. 从 Docker 容器复制备份文件到宿主机

    docker cp $CONTAINER_ID:/clickhouse_backup/. ~/clickhouse_backup

恢复 ClickHouse 数据

  1. 从宿主机复制备份文件到 Docker 容器

    docker cp ~/clickhouse_backup/your_backup_filename.tsv $CONTAINER_ID:/clickhouse_backup/
    docker cp ~/clickhouse_backup/your_backup_filename.sql $CONTAINER_ID:/clickhouse_backup/
  2. 在 Docker 容器内恢复数据

    docker exec $CONTAINER_ID bash -c "clickhouse-client -d data_emailflow_ai --query '$(cat /clickhouse_backup/your_backup_filename.sql)'"
    docker exec $CONTAINER_ID bash -c "clickhouse-client -d data_emailflow_ai --query 'INSERT INTO eflowdb FORMAT TSV' < /clickhouse_backup/your_backup_filename.tsv"

替换 your_backup_filename 为您实际的备份文件名。

注意事项

  • 在执行这些操作之前,请确保您具有相应的权限。
  • 在执行恢复操作之前,请确保您完全了解备份文件的内容,以防数据丢失或损坏。
  • 请根据实际情况调整命令中的日期和时间格式,以匹配您的备份文件名。
  • 如果您对 Docker 或 ClickHouse 的操作不熟悉,建议在执行这些操作之前咨询相关专家。

connect to it from a native client

docker exec -it $CONTAINER_ID clickhouse-client -d data_emailflow_ai

show databases;

SHOW TABLES from data_emailflow_ai;

DESCRIBE TABLE data_emailflow_ai.eflowdb;

select count(1) from data_emailflow_ai.eflowdb;

DROP TABLE data_emailflow_ai.eflowdb;

是的,在 ClickHouse 中,你可以一次性添加多列。使用 ALTER TABLE 语句,你可以一次添加多个列,只需在语句中列出所有要添加的列及其数据类型即可。以下是一个示例,展示了如何向名为 eflowdb 的表中添加多个列:

ALTER TABLE data_emailflow_ai.eflowdb 
ADD COLUMN source String,
ADD COLUMN created_at DateTime DEFAULT now(),
ADD COLUMN status String DEFAULT 'new',
ADD COLUMN updated_at DateTime DEFAULT now()
;

ALTER TABLE data_emailflow_ai.eflowdb DROP COLUMN id;

ALTER TABLE eflowdb MODIFY COLUMN State Nullable(String);
ALTER TABLE eflowdb MODIFY COLUMN ZIP Nullable(String);
ALTER TABLE eflowdb MODIFY COLUMN Country Nullable(String);

ALTER TABLE eflowdb MODIFY COLUMN Telephone Nullable(String);

在这个例子中,我们添加了四个列:source(类型为 String),created_atupdated_at(类型为 DateTime,并带有默认值 now()),以及 status(类型为 String,带有默认值 'new')。这种方式使得一次性对表结构进行多项更改变得简单和高效。

更改列属性 20231207

ALTER TABLE eflowdb MODIFY COLUMN Instagram_Followers Nullable(Int32);
ALTER TABLE eflowdb MODIFY COLUMN Instagram_Follows Nullable(Int32);
ALTER TABLE eflowdb MODIFY COLUMN Instagram_TotalPhotos Nullable(Int32);
ALTER TABLE eflowdb MODIFY COLUMN Instagram_Average_Likes Nullable(Int32);
ALTER TABLE eflowdb MODIFY COLUMN Instagram_Average_Comments Nullable(Int32);
ALTER TABLE eflowdb MODIFY COLUMN Instagram_HighlightReel_Count Nullable(Int32);
ALTER TABLE eflowdb MODIFY COLUMN GoogleCount Nullable(Int32);
ALTER TABLE eflowdb MODIFY COLUMN Yelpcount Nullable(Int32);
ALTER TABLE eflowdb MODIFY COLUMN Facebookcount Nullable(Int32);

更改列属性 20231208

RENAME TABLE eflowdb TO eflowdb_pd;
ALTER TABLE eflowdb_pd
ALTER COLUMN source SET DEFAULT 'unknown';
ALTER TABLE eflowdb_pd
ALTER COLUMN status SET DEFAULT 'pending';
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment