通过Shell 脚本向CK集群群分发SQL指令
Posted 不埋雷的探长
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过Shell 脚本向CK集群群分发SQL指令相关的知识,希望对你有一定的参考价值。
参考链接:ClickHouse官方文档
存在节点目录:CK集群某个节点下的 比如:/user/test_user/ 目录
使用方式说明:sycn_ck.sh是一个可执行脚本文件,只执行此脚本且在脚本后面添加上SQL即可;
特色功能说明:
- 支持同样的SQL在CK所有节点同步执行;无法单独在指定的节点上执行;
- 支持节点执行分行显示;采用颜色高亮分割;
- 支持在CK集群显示执行完成进度,以1/6方式显示;
脚本示例:
#节点调用脚本,即每个节点都执行同样的指令
#!/bin/bash
pcount=$#
if((pcount==0));then
tput setaf 1
tput bold
echo no args;
tput setaf 7
exit;
fi
params=$@
curr_job=1
total_jobs=6
for ip in host_ip1 host_ip2 host_ip3 host_ip4 host_ip5 host_ip6
do
echo $(tput setaf 3)"--------[ 在此节点 $ip 开始执行 ]--------"$(tput sgr0)
clickhouse client -m -n -h $ip --port 9000 -u user_name --password pass_word --query "$params"
echo $(tput setaf 2; tput bold)"--------[ 在此节点 $ip 完成执行, 完成进度 $curr_job/$total_jobs ]--------"$(tput sgr0)
curr_job=$[$curr_job+1]
done
2、分发工具运行示例
提示:如果想要查询效果好一点,建议在SQL尾部添加上 format Pretty
-- 查询库
./sycn_ck.sh "show databases;"
-- 查询有哪些表
./sycn_ck.sh "use musicad_superset; show tables;"
-- 查询表
./sycn_ck.sh "use music_ad_income; select fdate, s_date, sum(total_income) as total_income from dws_datatalk_splash_ad_res_site_all where fdate = 20211208 and s_date = 20211208 group by fdate, s_date limit 1"
-- 创建local表
./sycn_ck.sh "use musicad_superset; CREATE TABLE city_local (fdate Int64,city_code Int32,city_name String,total_cnt Int64) ENGINE = ReplicatedMergeTree('/clickhouse/tables/shard/city_local', 'replica')
PARTITION BY fdate ORDER BY (fdate, city_code, city_name) SETTINGS index_granularity = 8192, storage_policy = 'ssd_to_hdd'"
-- 创建all表
./sycn_ck.sh "use musicad_superset; CREATE TABLE IF NOT EXISTS city_all AS city_local ENGINE = Distributed(musicad_ck_cluster, musicad_superset, city_local, rand());"
-- 查询all表数据
./sycn_ck.sh "use musicad_superset; select * from city_all;"
-- 向all表插入数据
./sycn_ck.sh "use musicad_superset; insert into city_all (fdate, city_code, city_name, total_cnt) values (20211208, 100, 'guangzhou', 1000);"
-- 查询all表数据
./sycn_ck.sh "use musicad_superset; select * from city_all;"
-- 删除表
./sycn_ck.sh "use musicad_superset; drop table city_all;"
./sycn_ck.sh "use musicad_superset; drop table city_local;"
tput 命令行使用说明
什么是 tput?
tput 命令将通过 terminfo 数据库对您的终端会话进行初始化和操作。通过使用 tput,您可以更改几项终端功能,如移动或更改光标、更改文本属性,以及清除终端屏幕的特定区域。
什么是 terminfo 数据库?
UNIX 系统上的 terminfo 数据库用于定义终端和打印机的属性及功能,包括各设备(例如,终端和打印机)的行数和列数以及要发送至该设备的文本的属性。UNIX 中的几个常用程序都依赖 terminfo 数据库提供这些属性以及许多其他内容,其中包括 vi 和 emacs 编辑器以及 curses 和 man 程序。
命令行使用说明:
1.文本属性
tput Color Capabilities:
tput setab [0-7] – Set a background color using ANSI escape
tput setb [0-7] – Set a background color
tput setaf [0-7] – Set a foreground color using ANSI escape
tput setf [0-7] – Set a foreground color
Color Code for tput:
0 – Black
1 – Red
2 – Green
3 – Yellow
4 – Blue
5 – Magenta
6 – Cyan
7 – White
tput Text Mode Capabilities:
tput bold – Set bold mode
tput dim – turn on half-bright mode
tput smul – begin underline mode
tput rmul – exit underline mode
tput rev – Turn on reverse mode
tput smso – Enter standout mode (bold on rxvt)
tput rmso – Exit standout mode
tput sgr0 – Turn off all attributes
例子:使输出的字符串有颜色,底色,加粗
#!/bin/bash
printf $(tput setaf 2; tput bold)'color show\\n\\n'$(tput sgr0)
for((i=0; i<=7; i++)); do
echo $(tput setaf $i)"show me the money"$(tput sgr0)
done
printf '\\n'$(tput setaf 2; tput setab 0; tput bold)'background color show'$(tput sgr0)'\\n\\n'
for((i=0,j=7; i<=7; i++,j--)); do
echo $(tput setaf $i; tput setab $j; tput bold)"show me the money"$(tput sgr0)
done
exit 0
运行效果截图:
以上是关于通过Shell 脚本向CK集群群分发SQL指令的主要内容,如果未能解决你的问题,请参考以下文章