这个Python工具用于比较Kudu表和Rods表的结构和数据一致性,帮助用户快速识别两个表之间的差异。
- 表结构比较:比较两个表的字段名称和字段类型是否一致(不依赖字段顺序)
- 数据条数比较:比较两个表的数据记录总数是否一致
- 批量比较:支持一次比较多个表对
- 可视化展示:使用表格清晰展示比较结果
- 性能监控:记录数据查询的执行时间
- 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
- 脚本将自动连接到Impala服务器,执行表结构和数据条数的比较,并显示结果。
使用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文件包含以下工作表:['工作表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 |
交互式输入表名 |
- 确保您有足够的权限访问相关表
- 对于大型表,COUNT查询可能需要较长时间
- 比较仅包含字段名和类型,不包括其他属性(如注释等)
- kudu表名列表和rods表名列表的长度必须相同,且位置对应的表会进行比较
- 表结构比较不依赖字段顺序,会根据字段名称进行匹配比较
- Excel文件分析工具支持直接指定文件路径或交互式输入文件路径
此项目提供了一系列工具,用于处理数据迁移过程中的表字段映射关系。
根据Excel表格中定义的字段映射关系,自动生成数据迁移SQL语句。
使用方法:
python generate_sql.py <Excel文件路径> [输出目录]
将所有工作表生成的SQL文件合并到一个总的SQL文件中。
使用方法:
python create_all_sql.py
新增功能! 根据老系统表中文和新系统表名进行分组,找出属于相同表的所有字段行。 特别处理:如果某行的新系统表名为空,但老系统表中文与其他行相同,也会被视为同一个表。
使用方法:
python group_tables.py <Excel文件路径> [输出目录]
输出:
- 每个工作表生成一个Excel文件,包含分组结果
- 所有工作表的合并分组结果保存在all_table_groups.xlsx文件中
分组规则:
- 使用老系统表中文和新系统表名作为分组键
- 如果新系统表名为空,但该老系统表中文在其他行有对应的非空新系统表名,则使用该表名进行分组
- 如果所有映射都是空的,则仅使用老系统表中文进行分组
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
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')
腾讯文档有三种访问权限级别:
- 公开文档 - 任何人都可以访问,无需登录
- 需要登录的文档 - 任何登录用户都可以访问
- 权限受限文档 - 只有特定用户可以访问
对于需要登录的文档,你需要首先运行登录命令:
python 读取腾讯文档内容.py --login
程序会指导你如何从浏览器获取并粘贴Cookie。获取Cookie后,程序会保存它们以便后续使用。
你可以使用测试脚本来验证工具是否正常工作:
python 测试腾讯文档读取.py
这将尝试读取一个测试文档,并显示结果。
- 腾讯文档的API是非公开的,本工具通过模拟浏览器行为来读取数据,可能会因为腾讯文档的更新而失效
- 请勿频繁、大量地请求腾讯文档,以避免被封禁
- Cookie的有效期有限,如果读取失败,可能需要重新执行登录操作
- 本工具仅用于个人学习和研究,请勿用于商业目的或违反腾讯文档服务条款的活动
这通常意味着文档不存在或URL不正确。检查URL是否有效,确保文档没有被删除。
运行 python 读取腾讯文档内容.py --login
设置登录Cookie后再尝试。
确保你的账号有权限访问该文档。文档所有者需要主动与你共享该文档。
在浏览器中打开腾讯文档,URL就是地址栏中显示的链接,通常格式为:
https://doc.weixin.qq.com/sheet/e3_文档ID?scode=授权码
MIT