StarRocks导出ddl

python 复制代码
import pymysql
import pandas as pd

# --- 请在此处填写您的StarRocks连接信息 ---
host = '172.31.0.1'  # StarRocks FE 主机地址
port = 9030                   # StarRocks FE 查询端口,默认为 9030
user = 'xxx'        # StarRocks 用户名
password = 'xxx'    # StarRocks 密码
# --- 连接信息填写完毕 ---

def export_starrocks_ddl_to_excel():
    """
    连接到StarRocks集群,获取所有库和表的DDL,并将其导出到Excel文件。
    """
    connection = None
    try:
        # 1. 连接到StarRocks
        connection = pymysql.connect(
            host=host,
            port=port,
            user=user,
            password=password,
            charset='utf8mb4'
        )
        print("已成功连接到StarRocks。")

        all_tables_ddl = []
        
        with connection.cursor() as cursor:
            # 2. 获取所有数据库
            cursor.execute("SHOW DATABASES")
            databases = [row[0] for row in cursor.fetchall()]

            # 排除系统数据库
            excluded_dbs = {'information_schema', '_statistics_','sr_dump_test','sys'}
            databases_to_scan = [db for db in databases if db not in excluded_dbs]
            print(f"将要扫描的数据库: {databases_to_scan}")

            file = open('show_create_table.sql', 'w',encoding='utf-8') 

            # 3. 遍历数据库和表,获取DDL
            for db_name in databases_to_scan:
                cursor.execute(f"USE `{db_name}`")
                cursor.execute("SHOW TABLES")
                tables = [row[0] for row in cursor.fetchall()]
                
                file.write(f"use {db_name};\n")
                
                for table_name in tables:
                    try:
                        cursor.execute(f"SHOW CREATE TABLE `{db_name}`.`{table_name}`")
                        ddl_result = cursor.fetchone()
                        # 'SHOW CREATE TABLE' 的结果是 (Table, Create Table)
                        if ddl_result and len(ddl_result) > 1:
                            ddl_statement = ddl_result[1]
                            all_tables_ddl.append({
                                '库名': db_name,
                                '表名': table_name,
                                'ddl': ddl_statement
                            })
                            print(f"成功获取 `{db_name}`.`{table_name}` 的DDL。")
                            file.write(ddl_statement+'\n')
                    except Exception as e:
                        print(f"获取 `{db_name}`.`{table_name}` DDL失败: {e}")
            file.close()
        # 4. 将数据转换为DataFrame并导出到Excel
        if all_tables_ddl:
            df = pd.DataFrame(all_tables_ddl)
            output_filename = 'show_create_table.csv'
            df.to_csv(output_filename,  index=False, encoding='utf-8')
            print(f"\n所有DDL已成功导出到 '{output_filename}'。")
        else:
            print("未找到任何用户表,无法生成Excel文件。")

    except pymysql.MySQLError as e:
        print(f"数据库连接或操作失败: {e}")
    except Exception as e:
        print(f"发生未知错误: {e}")
    finally:
        if connection:
            connection.close()
            print("数据库连接已关闭。")

if __name__ == '__main__':
    export_starrocks_ddl_to_excel()
相关推荐
这个DBA有点耶8 分钟前
Redis大key“根治”指南:拆分策略与数据结构选型
数据库·mysql·架构
程序员与背包客_CoderZ16 分钟前
高性能分布式KV存储引擎RocksDB入门与C/C++编码实战
c语言·开发语言·数据库·c++·分布式·分布式数据库·rocksdb
进击的_鹏17 分钟前
从零开始的 Redis 学习
服务器·数据库·c++·redis·缓存
隔窗听雨眠34 分钟前
当KES遇到多租户:金仓数据库多租户架构的隔离实践与部署指南
数据库·架构
JOker_Chu_1 小时前
知识图谱详解:从图结构、关系建模到查询与应用
数据库·知识图谱·database·neo4j
tryCbest1 小时前
搭建企业知识库之Milvus 向量数据库
数据库·milvus
czhc11400756631 小时前
2026-08-24 博客:几个让你少踩坑的概念
数据库
ACP广源盛139246256732 小时前
Qwen3.8‑2.4T 开源落地@ACP#国产 Serdes 长距离视频传输芯片 GSV5800 在私有化 AI 服务中的价值与应用场景
大数据·数据库·人工智能·嵌入式硬件·矩阵·开源·音视频
oradh2 小时前
Oracle RMAN备份脚本、RMAN还原恢复测试、RMAN常用语句
数据库·oracle·rman备份脚本·rman还原恢复测试·rman常用语句
汽车仪器仪表相关领域2 小时前
ZDT‑I伺服电机测试系统:四象限动态加载
大数据·数据库·分布式·功能测试·汽车·压力测试·可用性测试