#!/bin/bash # 文件名: ch-query.sh # 用途: 执行ClickHouse SQL查询的便捷脚本 # 连接参数 CH_HOST="localhost" CH_PORT="9000" CH_USER="admin" CH_PASSWORD="your_secure_password" # 基本查询函数 function ch_query() { clickhouse client --host $CH_HOST --port $CH_PORT --user $CH_USER --password $CH_PASSWORD -q "$1" } # 显示帮助信息 function show_help() { echo "ClickHouse 查询工具" echo "用法: $0 [选项] [SQL查询]" echo "" echo "选项:" echo " -t 显示所有表" echo " -d 显示所有数据库" echo " -s <表名> 显示表结构" echo " -p <表名> 显示表样本数据(前10行)" echo " -c <表名> 计算表中的记录数" echo " -h, --help 显示此帮助信息" echo " -q \"SQL查询\" 执行自定义SQL查询" echo " -f <文件名> 执行SQL文件" echo "" echo "示例:" echo " $0 -d # 显示所有数据库" echo " $0 -t # 显示所有表" echo " $0 -s limq.link_events # 显示link_events表结构" echo " $0 -q \"SELECT * FROM limq.link_events LIMIT 5\" # 执行自定义查询" } # 没有参数时显示帮助 if [ $# -eq 0 ]; then show_help exit 0 fi # 处理命令行参数 case "$1" in -t) ch_query "SHOW TABLES" ;; -d) ch_query "SHOW DATABASES" ;; -s) if [ -z "$2" ]; then echo "错误: 需要提供表名" exit 1 fi ch_query "DESCRIBE TABLE $2" ;; -p) if [ -z "$2" ]; then echo "错误: 需要提供表名" exit 1 fi ch_query "SELECT * FROM $2 LIMIT 10" ;; -c) if [ -z "$2" ]; then echo "错误: 需要提供表名" exit 1 fi ch_query "SELECT COUNT(*) FROM $2" ;; -q) if [ -z "$2" ]; then echo "错误: 需要提供SQL查询" exit 1 fi ch_query "$2" ;; -f) if [ -z "$2" ]; then echo "错误: 需要提供SQL文件" exit 1 fi if [ ! -f "$2" ]; then echo "错误: 文件 '$2' 不存在" exit 1 fi SQL=$(cat "$2") ch_query "$SQL" ;; -h|--help) show_help ;; *) echo "未知选项: $1" show_help exit 1 ;; esac exit 0