fork download
  1. from sys import stdin
  2.  
  3.  
  4. def read_odps_ddl():
  5. rows = []
  6. table_name = 'demo_table'
  7. table_comment = 'demo_table'
  8. for i in stdin.readlines():
  9. i = i.strip().strip(',')
  10. if 'CREATE TABLE' in i:
  11. table_name = i.split()[-1]
  12. continue
  13. if i.startswith('COMMENT'):
  14. table_comment = i.split()[-1].strip("'")
  15. continue
  16. if 'PARTITIONED' in i or 'LIFECYCLE' in i:
  17. continue
  18. row_info = i.split()
  19. if len(row_info) != 2 and len(row_info) != 4:
  20. continue
  21. key = row_info[0].strip('`')
  22. odps_type = row_info[1]
  23. comment = '无' if len(row_info) <= 3 else row_info[3].strip("'")
  24. rows.append({
  25. 'key': key,
  26. 'odps_type': odps_type,
  27. 'comment': comment
  28. })
  29. return {
  30. 'rows': rows,
  31. 'table_name': table_name,
  32. 'table_comment': table_comment
  33. }
  34.  
  35.  
  36. ddl = read_odps_ddl()
  37. # print(ddl)
  38.  
  39. print(f'''
  40. create table `{ddl['table_name']}` (
  41. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  42. `gmt_create` datetime NOT NULL COMMENT '创建时间',
  43. `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  44. '''.strip())
  45.  
  46. for i in ddl['rows']:
  47. (key, odps_type, comment) = i['key'], i['odps_type'], i['comment']
  48. if key in ('id', 'gmt_create', 'gmt_modified'):
  49. continue
  50. if odps_type == 'STRING':
  51. mysql_type = 'varchar(64)'
  52. elif odps_type == 'BIGINT':
  53. mysql_type = 'bigint(20)'
  54. elif odps_type == 'DOUBLE':
  55. mysql_type = 'decimal(18,6)'
  56. elif odps_type == 'DATETIME':
  57. mysql_type = 'datetime'
  58. else:
  59. mysql_type = '???'
  60. curr = f'''`{key}` {mysql_type} DEFAULT NULL COMMENT '{comment}','''
  61. print(curr)
  62.  
  63. print(f"""PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='{ddl['table_comment']}' """)
  64.  
Success #stdin #stdout 0.1s 14144KB
stdin
CREATE TABLE IF NOT EXISTS smart_dw_metric_v2_dwd_change_request(
	id BIGINT COMMENT 'ID',
	 gmt_create STRING COMMENT '创建时间',
	 gmt_modified STRING COMMENT '修改时间',
	 work_no STRING COMMENT '创建人工号',
	 work_name STRING COMMENT '创建人姓名',
	 modifier STRING COMMENT '修改人工号',
	 modifier_name STRING COMMENT '修改人姓名',
	 description STRING COMMENT '变更原因',
	 app_id BIGINT COMMENT '应用ID',
	 app_name STRING COMMENT '应用名',
	 release_date STRING COMMENT '发布时间',
	 work_item_ids STRING COMMENT '关联工作项目IDS',
	 content STRING COMMENT '变更内容',
	 branch STRING COMMENT '分支',
	 repo_path STRING COMMENT '代码库'
) 
PARTITIONED BY (ds STRING COMMENT '分区字段') 
STORED AS ALIORC  
TBLPROPERTIES ('comment'='变更',
	 'storagestrategy'='normal') 
LIFECYCLE 3;
stdout
create table `smart_dw_metric_v2_dwd_change_request(` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`gmt_create` datetime NOT NULL COMMENT '创建时间',
`gmt_modified` datetime NOT NULL COMMENT '修改时间',
`work_no` varchar(64) DEFAULT NULL COMMENT '创建人工号',
`work_name` varchar(64) DEFAULT NULL COMMENT '创建人姓名',
`modifier` varchar(64) DEFAULT NULL COMMENT '修改人工号',
`modifier_name` varchar(64) DEFAULT NULL COMMENT '修改人姓名',
`description` varchar(64) DEFAULT NULL COMMENT '变更原因',
`app_id` bigint(20) DEFAULT NULL COMMENT '应用ID',
`app_name` varchar(64) DEFAULT NULL COMMENT '应用名',
`release_date` varchar(64) DEFAULT NULL COMMENT '发布时间',
`work_item_ids` varchar(64) DEFAULT NULL COMMENT '关联工作项目IDS',
`content` varchar(64) DEFAULT NULL COMMENT '变更内容',
`branch` varchar(64) DEFAULT NULL COMMENT '分支',
`repo_path` varchar(64) DEFAULT NULL COMMENT '代码库',
`TBLPROPERTIES` ??? DEFAULT NULL COMMENT '无',
PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='demo_table'