如何从 Linux CLI 执行 Clickhouse 中的脚本?

问题描述 投票:0回答:1

这似乎是一个简单的问题,但我没有找到答案,尽管搜索了一段时间并且我的尝试没有成功。

我通过 Docker 运行 Sentry,它使用 Clickhouse。我可以通过

连接到clickhouse所在的容器
docker exec -it $(docker ps -aqf 'name=sentry-self-hosted_clickhouse_1') bash

我可以连接到

clickhouse-client
并在那里执行命令。为了简单起见,我们假设我要运行的命令很简单

SELECT 1 + 2;

我已经测试过它,它正确返回了 3,正如预期的那样,如附图所示:

Sample output resulting in 1+2=3

现在,我想做的是从 Docker 容器外部运行这个脚本,并在终端中输出结果(我的实际目标是为 Sentry 创建一个程序化备份系统,Clickhouse 备份也是其中的一部分,但要求这个太模糊了,我决定转而询问我的主要障碍,即从 clickhouse-client 外部执行脚本)。这就是我从容器外部连接到 Clickhouse 的方法:

当然我也可以直接通过

clickhouse-client
连接到Docker容器,就像

docker exec -it $(docker ps -aqf 'name=sentry-self-hosted_clickhouse_1') clickhouse-client -u <myusername> --password <mypassword>

然后是我的东西。但是,我想要的是这样的东西(当然,命令是不正确的):

docker exec -it $(docker ps -aqf 'name=sentry-self-hosted_clickhouse_1') clickhouse-client -u <myusername> --password <mypassword> -e "SELECT 1 + 2;"

(这个

-e
的灵感来自MySQL如何允许我像这样内联执行命令)

甚至更好:

cat myinput.sql | docker exec $(docker ps -aqf 'name=sentry-self-hosted_clickhouse_1') clickhouse-client -u <myusername> --password <mypassword> > myoutput.sql

我怎样才能实现这个目标? (我已经寻找了可能的解决方案,但运气不佳,要么我遗漏了一些明显的东西,要么没有详细记录)

docker ubuntu clickhouse sentry clickhouse-client
1个回答
0
投票

运行作为参数传递的查询:

$ docker compose exec clickhouse clickhouse-client -q 'select 1 + 2'
   ┌─plus(1, 2)─┐
1. │          3 │
   └────────────┘

运行通过管道输入的查询:

$ echo 'select 1 + 2' | docker compose exec -T clickhouse clickhouse-client
3

这些适用于我的 Docker Compose 设置。要使用普通的 Docker 设置来运行这些,以下内容应该可以工作:

$ docker exec -it $(docker ps -aqf 'name=sentry-self-hosted_clickhouse_1') clickhouse-client -u <myusername> --password <mypassword> -q 'select 1 + 2'

$ echo 'select 1 + 2' | docker exec $(docker ps -aqf 'name=sentry-self-hosted_clickhouse_1') clickhouse-client -u <myusername> --password <mypassword>

(注意我删除了

-it
,这与用
-T
传递
docker compose exec
相同,请参阅 this。)

© www.soinside.com 2019 - 2024. All rights reserved.