Skip to content

gaogen123/supon

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 

Repository files navigation

Kudu与Rods表比较工具

这个Python工具用于比较Kudu表和Rods表的结构和数据一致性,帮助用户快速识别两个表之间的差异。

功能特点

  1. 表结构比较:比较两个表的字段名称和字段类型是否一致(不依赖字段顺序)
  2. 数据条数比较:比较两个表的数据记录总数是否一致
  3. 批量比较:支持一次比较多个表对
  4. 可视化展示:使用表格清晰展示比较结果
  5. 性能监控:记录数据查询的执行时间
  6. Excel文件分析:分析Excel文件中每个工作表和列的详细信息

环境要求

  • Python 3.6+
  • 依赖库:
    • impyla (Impala数据库连接)
    • pandas (数据处理)
    • prettytable (表格输出)

安装

pip install impyla pandas prettytable -i https://pypi.tuna.tsinghua.edu.cn/simple

使用方法

方法一:命令行参数指定表名

# 指定单个表对进行比较
python check_kudu_rods表.py --kudu-tables "kudu.example_table" --rods-tables "rods.example_table"

# 指定多个表对进行比较
python check_kudu_rods表.py --kudu-tables "kudu.table1,kudu.table2" --rods-tables "rods.table1,rods.table2"

方法二:交互式输入表名

# 使用交互式模式
python check_kudu_rods表.py --interactive

# 或者不指定参数,默认进入交互式模式
python check_kudu_rods表.py

然后按提示输入表名列表:

请输入kudu表名列表 (用逗号分隔,例如: kudu.table1,kudu.table2): kudu.table1,kudu.table2
请输入rods表名列表 (用逗号分隔,例如: rods.table1,rods.table2): rods.table1,rods.table2
  1. 脚本将自动连接到Impala服务器,执行表结构和数据条数的比较,并显示结果。

方法三:Excel文件分析工具

使用Excel文件分析工具来读取和分析Excel文件的所有工作表和列:

# 使用默认文件路径
python generate_sql.py

# 指定Excel文件路径
python generate_sql.py "D:\路径\文件名.xlsx"

或者直接运行脚本,按照提示输入Excel文件路径:

python generate_sql.py

脚本将分析Excel文件中的所有工作表和列,显示以下信息:

  • 工作表列表
  • 每个工作表的行数和列数
  • 每列的详细信息(列名、数据类型、非空值数量、空值数量、唯一值数量、样例值)
  • 汇总信息

输出示例

表结构比较

正在比较表结构: kudu.example_table vs rods.example_table
字段数量一致: 5个字段
+------+---------------+---------------+---------------+-----------+
| 序号 |    字段名     |  kudu字段类型  |  rods字段类型  | 是否一致  |
+------+---------------+---------------+---------------+-----------+
|  1   |     age       |      int      |      int      |     ✓     |
|  2   |  create_time  |   timestamp   |   timestamp   |     ✓     |
|  3   |      id       |     string    |     string    |     ✓     |
|  4   |     name      |     string    |     string    |     ✓     |
|  5   |    status     |     string    |      int      |     ✗     |
+------+---------------+---------------+---------------+-----------+
结论: 两个表结构存在差异 ✗

数据条数比较

正在比较表数据条数: kudu.example_table vs rods.example_table
+--------------------+---------------+----------------+
|        表名        |    数据条数    | 查询耗时(秒)   |
+--------------------+---------------+----------------+
| kudu.example_table |    10,000     |     5.23       |
| rods.example_table |    10,000     |     4.85       |
+--------------------+---------------+----------------+
结论: 两个表数据条数一致,均为 10,000 条 ✓

批量比较结果总结

批量比较结果总结:
+------+------------------+------------------+----------+----------+
| 序号 |      kudu表      |      rods表      |  表结构  | 数据条数 |
+------+------------------+------------------+----------+----------+
|  1   | kudu.table1      | rods.table1      |  一致 ✓  | 一致 ✓   |
|  2   | kudu.table2      | rods.table2      | 不一致 ✗ | 一致 ✓   |
|  3   | kudu.table3      | rods.table3      |  一致 ✓  | 不一致 ✗ |
+------+------------------+------------------+----------+----------+

Excel文件分析输出示例

Excel文件包含以下工作表:['工作表1', '工作表2']

工作表 '工作表1' 的信息:
行数: 100, 列数: 5

列名: 姓名
  数据类型: object
  非空值数量: 100, 空值数量: 0
  唯一值数量: 95
  样例值: 张三, 李四, 王五

列名: 年龄
  数据类型: int64
  非空值数量: 98, 空值数量: 2
  唯一值数量: 45
  样例值: 25, 30, 28

...

汇总信息:
工作表 '工作表1' 包含 5 列
工作表 '工作表2' 包含 8 列

配置说明

脚本中的Impala连接配置可在代码中修改:

IMPALA_CONFIG = {
    'host': '10.30.250.36',
    'port': 21050,
    'database': 'rods',
    'timeout': 180
}

命令行参数

参数 说明
--kudu-tables kudu表名列表,用逗号分隔
--rods-tables rods表名列表,用逗号分隔
--interactive 交互式输入表名

注意事项

  1. 确保您有足够的权限访问相关表
  2. 对于大型表,COUNT查询可能需要较长时间
  3. 比较仅包含字段名和类型,不包括其他属性(如注释等)
  4. kudu表名列表和rods表名列表的长度必须相同,且位置对应的表会进行比较
  5. 表结构比较不依赖字段顺序,会根据字段名称进行匹配比较
  6. Excel文件分析工具支持直接指定文件路径或交互式输入文件路径

表字段映射工具

此项目提供了一系列工具,用于处理数据迁移过程中的表字段映射关系。

功能模块

1. 数据迁移SQL生成器 (generate_sql.py)

根据Excel表格中定义的字段映射关系,自动生成数据迁移SQL语句。

使用方法:

python generate_sql.py <Excel文件路径> [输出目录]

2. 合并SQL文件 (create_all_sql.py)

将所有工作表生成的SQL文件合并到一个总的SQL文件中。

使用方法:

python create_all_sql.py

3. 表分组工具 (group_tables.py)

新增功能! 根据老系统表中文和新系统表名进行分组,找出属于相同表的所有字段行。 特别处理:如果某行的新系统表名为空,但老系统表中文与其他行相同,也会被视为同一个表。

使用方法:

python group_tables.py <Excel文件路径> [输出目录]

输出:

  • 每个工作表生成一个Excel文件,包含分组结果
  • 所有工作表的合并分组结果保存在all_table_groups.xlsx文件中

分组规则:

  1. 使用老系统表中文和新系统表名作为分组键
  2. 如果新系统表名为空,但该老系统表中文在其他行有对应的非空新系统表名,则使用该表名进行分组
  3. 如果所有映射都是空的,则仅使用老系统表中文进行分组

Excel文件格式要求

Excel文件应包含以下列(列名可能略有不同):

  • 老系统表名
  • 老系统表中文
  • 新系统表名
  • 老系统字段
  • 新系统字段
  • 字段类型(可选)
  • 默认值(可选)
  • 字段别名(可选)
  • 备注(可选)

安装依赖

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

联系方式

如有任何问题,请联系开发人员。

腾讯文档读取工具

这个工具允许你以编程方式读取腾讯文档中的表格数据,并将其导出为Excel文件或pandas DataFrame格式。

功能特点

  • 支持读取腾讯在线表格(spreadsheet)文档
  • 将腾讯文档表格数据导出为Excel或CSV格式
  • 支持多个工作表(sheet)的读取
  • 支持登录访问权限受限的文档
  • 自动保存和加载Cookies以保持登录状态

安装依赖

pip install pandas requests -i https://pypi.tuna.tsinghua.edu.cn/simple

使用方法

基本用法

# 读取指定URL的腾讯文档
python 读取腾讯文档内容.py https://doc.weixin.qq.com/sheet/你的文档ID

# 读取文档并指定输出文件
python 读取腾讯文档内容.py https://doc.weixin.qq.com/sheet/你的文档ID --output 输出文件.xlsx

# 设置登录Cookie(对于需要登录的文档)
python 读取腾讯文档内容.py --login

在Python代码中使用

from 读取腾讯文档内容 import TencentDocReader

# 创建读取器实例
reader = TencentDocReader()

# 读取文档
doc_url = "https://doc.weixin.qq.com/sheet/你的文档ID"
sheets = reader.read_doc(doc_url)

# 处理读取到的数据
for sheet_name, df in sheets.items():
    print(f"表格 {sheet_name}: {df.shape[0]}行 x {df.shape[1]}列")
    
    # 使用pandas进行数据处理
    # ...
    
    # 保存到CSV
    df.to_csv(f"{sheet_name}.csv", index=False, encoding='utf-8-sig')

登录和权限

腾讯文档有三种访问权限级别:

  1. 公开文档 - 任何人都可以访问,无需登录
  2. 需要登录的文档 - 任何登录用户都可以访问
  3. 权限受限文档 - 只有特定用户可以访问

对于需要登录的文档,你需要首先运行登录命令:

python 读取腾讯文档内容.py --login

程序会指导你如何从浏览器获取并粘贴Cookie。获取Cookie后,程序会保存它们以便后续使用。

测试工具

你可以使用测试脚本来验证工具是否正常工作:

python 测试腾讯文档读取.py

这将尝试读取一个测试文档,并显示结果。

注意事项

  1. 腾讯文档的API是非公开的,本工具通过模拟浏览器行为来读取数据,可能会因为腾讯文档的更新而失效
  2. 请勿频繁、大量地请求腾讯文档,以避免被封禁
  3. Cookie的有效期有限,如果读取失败,可能需要重新执行登录操作
  4. 本工具仅用于个人学习和研究,请勿用于商业目的或违反腾讯文档服务条款的活动

常见问题

1. 收到404错误

这通常意味着文档不存在或URL不正确。检查URL是否有效,确保文档没有被删除。

2. 需要登录提示

运行 python 读取腾讯文档内容.py --login 设置登录Cookie后再尝试。

3. 权限错误

确保你的账号有权限访问该文档。文档所有者需要主动与你共享该文档。

4. 如何获取腾讯文档URL?

在浏览器中打开腾讯文档,URL就是地址栏中显示的链接,通常格式为: https://doc.weixin.qq.com/sheet/e3_文档ID?scode=授权码

许可证

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published