Skip to main content

Convert table schema between MySQL, Hive, and string formats

Project description

TableSQLConverter V1.0

TableSQLConverter是为了方便将数据库表的基本元信息 以表格形式如excel的批量转换成Mysql建表或HiveSQL的建表语句。也能够根据SQL的 创表语句,提取出基本字段信息形成表格,或者SQL创表语句向Hive创表语句的转换。

图1 TableSQlConverter V1架构图

pip install tablesqlconverter
from tablesqlconverter import Converter
myCvt=Converter()

示例

tbl数据间隔符号是”\t“,换行符号是"\n"

tbl="""表名   字段名    字段注释   字段类型   长度 约束 默认值
sys_user   user_id    用户主键 ID    bigint -  PK、自增  -
sys_user   username   登录账号(学号 / 工号)  varchar    50 UK、NOT NULL    -
sys_user   password   登录密码(加密存储) varchar    100    NOT NULL   -
sys_user   user_type  用户类型 1 = 管理员 2 = 教师 3 = 学生 tinyint    -  NOT NULL   3
sys_user   real_name  真实姓名   varchar    30 NOT NULL   -
sys_user   phone  联系电话   varchar    20 -  NULL
sys_user   email  邮箱 varchar    50 -  NULL
sys_user   status 状态 0 = 禁用 1 = 正常   tinyint    -  NOT NULL   1
sys_user   create_time    创建时间   datetime   -  NOT NULL   CURRENT_TIMESTAMP
sys_user   update_time    更新时间   datetime   -  NOT NULL   CURRENT_TIMESTAMP ON UPDATE
student    student_id 学生主键 ID    bigint -  PK、自增  -
student    user_id    关联系统用户 ID  bigint -  FK、NOT NULL    -
student    student_no 学号 varchar    30 UK、NOT NULL    -
student    dept_id    所属院系 ID    bigint -  FK、NOT NULL    -
student    class_id   所属班级 ID    bigint -  FK NULL
student    gender 性别 0 = 女 1 = 男 tinyint    -  -  NULL
student    id_card    身份证号   varchar    18 -  NULL
student    address    家庭住址   varchar    200    -  NULL
student    enrollment_date    入学日期   date   -  -  NULL
student    status 状态 1 = 在读 2 = 毕业 3 = 休学    tinyint    -  NOT NULL   1
"""
from tablesqlconverter import Converter
myCvt=Converter()
mysqlschema=myCvt.tblstr2schema(tbl,0,1,3,2,dataNo=1) #第0列是表名,DataNo=1是从第1行开始是主要数据
print(mysqlschema)
#中间数据形式结果是:
"""
{'sys_user': [{'field': 'user_id', 'type': 'bigint', 'comment': '用户主键 ID'}, {'field': 'username', 'type': 'varchar', 'comment': '登录账号(学号 / 工号)'}, {'field': 'password', 'type': 'varchar', 'comment': '登录密码(加密存储)'}, {'field': 'user_type', 'type': 'tinyint', 'comment': '用户类型 1 = 管理员 2 = 教师 3 = 学生'}, {'field': 'real_name', 'type': 'varchar', 'comment': '真实姓名'}, {'field': 'phone', 'type': 'varchar', 'comment': '联系电话'}, {'field': 'email', 'type': 'varchar', 'comment': '邮箱'}, {'field': 'status', 'type': 'tinyint', 'comment': '状态 0 = 禁用 1 = 正常'}, {'field': 'create_time', 'type': 'datetime', 'comment': '创建时间'}, {'field': 'update_time', 'type': 'datetime', 'comment': '更新时间'}], 'student': [{'field': 'student_id', 'type': 'bigint', 'comment': '学生主键 ID'}, {'field': 'user_id', 'type': 'bigint', 'comment': '关联系统用户 ID'}, {'field': 'student_no', 'type': 'varchar', 'comment': '学号'}, {'field': 'dept_id', 'type': 'bigint', 'comment': '所属院系 ID'}, {'field': 'class_id', 'type': 'bigint', 'comment': '所属班级 ID'}, {'field': 'gender', 'type': 'tinyint', 'comment': '性别 0 = 女 1 = 男'}, {'field': 'id_card', 'type': 'varchar', 'comment': '身份证号'}, {'field': 'address', 'type': 'varchar', 'comment': '家庭住址'}, {'field': 'enrollment_date', 'type': 'date', 'comment': '入学日期'}, {'field': 'status', 'type': 'tinyint', 'comment': '状态 1 = 在读 2 = 毕业 3 = 休学'}]}
"""

schema 结构

{"<tbname>":[{"colname":"","type":"","comment":""},]}

schema转mysql

mysqlstr=myCvt.schema2mysql(mysqlschema)
print(mysqlstr)
#输出结果:
"""
CREATE TABLE IF NOT EXISTS sys_user(`user_id` bigint comment '用户主键 ID',`username` varchar comment '登录账号(学号 / 工号)',`password` varchar comment '登录密码(加密存储)',`user_type` tinyint comment '用户类型 1 = 管理员 2 = 教师 3 = 学生',`real_name` varchar comment '真实姓名',`phone` varchar comment '联系电话',`email` varchar comment '邮箱',`status` tinyint comment '状态 0 = 禁用 1 = 正常',`create_time` datetime comment '创建时间',`update_time` datetime comment '更新时间')
CREATE TABLE IF NOT EXISTS student(`student_id` bigint comment '学生主键 ID',`user_id` bigint comment '关联系统用户 ID',`student_no` varchar comment '学号',`dept_id` bigint comment '所属院系 ID',`class_id` bigint comment '所属班级 ID',`gender` tinyint comment '性别 0 = 女 1 = 男',`id_card` varchar comment '身份证号',`address` varchar comment '家庭住址',`enrollment_date` date comment '入学日期',`status` tinyint comment '状态 1 = 在读 2 = 毕业 3 = 休学')
"""

schema转hiveschema ,然后转成hivesql

hiveschema=myCvt.mysqlSchema2hiveSchema(schema=mysqlschema)# 只做了类型转换
print(hiveschema)
"""
{'sys_user': [{'field': 'user_id', 'type': 'bigint', 'comment': '用户主键 ID'}, {'field': 'username', 'type': 'varchar', 'comment': '登录账号(学号 / 工号)'}, {'field': 'password', 'type': 'varchar', 'comment': '登录密码(加密存储)'}, {'field': 'user_type', 'type': 'tinyint', 'comment': '用户类型 1 = 管理员 2 = 教师 3 = 学生'}, {'field': 'real_name', 'type': 'varchar', 'comment': '真实姓名'}, {'field': 'phone', 'type': 'varchar', 'comment': '联系电话'}, {'field': 'email', 'type': 'varchar', 'comment': '邮箱'}, {'field': 'status', 'type': 'tinyint', 'comment': '状态 0 = 禁用 1 = 正常'}, {'field': 'create_time', 'type': 'datetime', 'comment': '创建时间'}, {'field': 'update_time', 'type': 'datetime', 'comment': '更新时间'}], 'student': [{'field': 'student_id', 'type': 'bigint', 'comment': '学生主键 ID'}, {'field': 'user_id', 'type': 'bigint', 'comment': '关联系统用户 ID'}, {'field': 'student_no', 'type': 'varchar', 'comment': '学号'}, {'field': 'dept_id', 'type': 'bigint', 'comment': '所属院系 ID'}, {'field': 'class_id', 'type': 'bigint', 'comment': '所属班级 ID'}, {'field': 'gender', 'type': 'tinyint', 'comment': '性别 0 = 女 1 = 男'}, {'field': 'id_card', 'type': 'varchar', 'comment': '身份证号'}, {'field': 'address', 'type': 'varchar', 'comment': '家庭住址'}, {'field': 'enrollment_date', 'type': 'date', 'comment': '入学日期'}, {'field': 'status', 'type': 'tinyint', 'comment': '状态 1 = 在读 2 = 毕业 3 = 休学'}]}
"""
hivesqlsr=myCvt.hiveSchema2HiveSql(hiveschema)
print(hivesqlsr)
"""
CREATE EXTERNAL TABLE IF NOT EXISTS sys_user(`user_id` bigint comment '用户主键 ID',`username` varchar comment '登录账号(学号 / 工号)',`password` varchar comment '登录密码(加密存储)',`user_type` tinyint comment '用户类型 1 = 管理员 2 = 教师 3 = 学生',`real_name` varchar comment '真实姓名',`phone` varchar comment '联系电话',`email` varchar comment '邮箱',`status` tinyint comment '状态 0 = 禁用 1 = 正常',`create_time` datetime comment '创建时间',`update_time` datetime comment '更新时间')
CREATE EXTERNAL TABLE IF NOT EXISTS student(`student_id` bigint comment '学生主键 ID',`user_id` bigint comment '关联系统用户 ID',`student_no` varchar comment '学号',`dept_id` bigint comment '所属院系 ID',`class_id` bigint comment '所属班级 ID',`gender` tinyint comment '性别 0 = 女 1 = 男',`id_card` varchar comment '身份证号',`address` varchar comment '家庭住址',`enrollment_date` date comment '入学日期',`status` tinyint comment '状态 1 = 在读 2 = 毕业 3 = 休学')
"""

schema 转dataxJsonlist

fieldlst=myCvt.schema2dataxjson(hiveschema,'field','type') 
#datax hdfswriter的json结构有column页就是选择,值得注意的是field要替换为name
print(fieldlst)
"""
{'sys_user': [{'field': 'user_id', 'type': 'bigint'}, {'field': 'username', 'type': 'varchar'}, {'field': 'password', 'type': 'varchar'}, {'field': 'user_type', 'type': 'tinyint'}, {'field': 'real_name', 'type': 'varchar'}, {'field': 'phone', 'type': 'varchar'}, {'field': 'email', 'type': 'varchar'}, {'field': 'status', 'type': 'tinyint'}, {'field': 'create_time', 'type': 'datetime'}, {'field': 'update_time', 'type': 'datetime'}], 'student': [{'field': 'student_id', 'type': 'bigint'}, {'field': 'user_id', 'type': 'bigint'}, {'field': 'student_no', 'type': 'varchar'}, {'field': 'dept_id', 'type': 'bigint'}, {'field': 'class_id', 'type': 'bigint'}, {'field': 'gender', 'type': 'tinyint'}, {'field': 'id_card', 'type': 'varchar'}, {'field': 'address', 'type': 'varchar'}, {'field': 'enrollment_date', 'type': 'date'}, {'field': 'status', 'type': 'tinyint'}]}
"""
sqlfields=myCvt.schema2SingleList(mysqlschema,'field')
#mysqlreader配置json时,column需要list列
print(sqlfields)
"""
{'sys_user': ['user_id', 'username', 'password', 'user_type', 'real_name', 'phone', 'email', 'status', 'create_time', 'update_time'], 'student': ['student_id', 'user_id', 'student_no', 'dept_id', 'class_id', 'gender', 'id_card', 'address', 'enrollment_date', 'status']}
"""

sql创提取到schema

raw_sqlstr="""CREATE external TABLE IF NOT EXISTS db_business.t_abnormal_enterprises(`id` int comment '自增id',`id_num` varchar(255) comment '备"(用"\'),字段',`area` varchar(255) comment '生产经营地址',`certificates_type` varchar(255) comment '证件种类',`judge_area` varchar(255) comment '认定单位的地址',`judge_date` varchar(255) comment '认定日期',`judge_department` varchar(255) comment '认定单位',`row_update_time` TIMESTAMP comment '数据库行更新时间',`date` date)
comment "abc(er),.()!";CREATE  TABLE IF NOT EXISTS db_business.t_creditimportexport_data(`id` bigint comment '自增id',`ename` varchar(255) comment '企业名称',`url` varchar(255) comment '数据源链接',`credit_no` varchar(50) comment '统一社会信用代码',`customs_num` varchar(100) comment '海关注册编码',`customs_reg` varchar(100) comment '注册海关',`business_category` varchar(100) comment '经营类别',`org_code` varchar(100) comment '组织机构代码',`reg_date` varchar(50) comment '注册日期',`reg_area` varchar(255) comment '工商注册地址',`administrative_divisions` varchar(100) comment '行政区划',`economic_regions` varchar(100) comment '经济区划',`industry_type` varchar(100) comment '行业种类')"""
newschema=myCvt.mysql2schema(raw_sqlstr)
print(newschema)
"""
{'db_business.t_abnormal_enterprises': [{'field': 'id', 'type': 'int', 'comment': '自增id'}, {'field': 'id_num', 'type': 'varchar(255)', 'comment': '备"(用"\'),字段'}, {'field': 'area', 'type': 'varchar(255)', 'comment': '生产经营地址'}, {'field': 'certificates_type', 'type': 'varchar(255)', 'comment': '证件种类'}, {'field': 'judge_area', 'type': 'varchar(255)', 'comment': '认定单位的地址'}, {'field': 'judge_date', 'type': 'varchar(255)', 'comment': '认定日期'}, {'field': 'judge_department', 'type': 'varchar(255)', 'comment': '认定单位'}, {'field': 'row_update_time', 'type': 'TIMESTAMP', 'comment': '数据库行更新时间'}, {'field': 'date', 'type': 'date', 'comment': ''}], 'db_business.t_creditimportexport_data': [{'field': 'id', 'type': 'bigint', 'comment': '自增id'}, {'field': 'ename', 'type': 'varchar(255)', 'comment': '企业名称'}, {'field': 'url', 'type': 'varchar(255)', 'comment': '数据源链接'}, {'field': 'credit_no', 'type': 'varchar(50)', 'comment': '统一社会信用代码'}, {'field': 'customs_num', 'type': 'varchar(100)', 'comment': '海关注册编码'}, {'field': 'customs_reg', 'type': 'varchar(100)', 'comment': '注册海关'}, {'field': 'business_category', 'type': 'varchar(100)', 'comment': '经营类别'}, {'field': 'org_code', 'type': 'varchar(100)', 'comment': '组织机构代码'}, {'field': 'reg_date', 'type': 'varchar(50)', 'comment': '注册日期'}, {'field': 'reg_area', 'type': 'varchar(255)', 'comment': '工商注册地址'}, {'field': 'administrative_divisions', 'type': 'varchar(100)', 'comment': '行政区划'}, {'field': 'economic_regions', 'type': 'varchar(100)', 'comment': '经济区划'}, {'field': 'industry_type', 'type': 'varchar(100)', 'comment': '行业种类'}]}
"""

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tablesqlconverter-1.0.1.tar.gz (10.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tablesqlconverter-1.0.1-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file tablesqlconverter-1.0.1.tar.gz.

File metadata

  • Download URL: tablesqlconverter-1.0.1.tar.gz
  • Upload date:
  • Size: 10.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for tablesqlconverter-1.0.1.tar.gz
Algorithm Hash digest
SHA256 297507016122197886cb695ee11910c1fb573a7b20e19f5a86212bc3343f25fa
MD5 dcf294491b703efab13c37b4b2c365f3
BLAKE2b-256 8eb3f3c5e3cb3f6cd64dda40aed6057e82b06b71752f1253da36c86592c46a6f

See more details on using hashes here.

File details

Details for the file tablesqlconverter-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for tablesqlconverter-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e6e18f5b19ab76d1310fed0a4a12fa53b93c48b6dac371bbe43edbb2587ba65f
MD5 bbfac28000ee9866c23f4b302fd0b86f
BLAKE2b-256 fc3baf890abeff4f7e24d3cab45ed4847e2a911cc3273330f208399375854b31

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page