# ai-demo **Repository Path**: wangboa/ai-demo ## Basic Information - **Project Name**: ai-demo - **Description**: 利用 AI 完成数据仓库中数据集成的自动化 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-05-09 - **Last Updated**: 2024-05-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 利用 AI 完成数据仓库中数据集成的自动化 ## 1. 设计思路 1. 首先要让 AI 建立面向(医疗)行业的数据仓库知识体系。 2. 然后,要让 AI 本土化。学习到本公司数据仓库建设最佳实现,这是让 AI 学习到交付人员在该公司过往项目的成功实施经验,并且让 AI 模仿这中实施经验。 3. 其次,让 AI 学习本公司数据平台提供的可编程的能力组件,并通过丰富的示例让 AI 逐步学会利用组件来应对新的问题。 4. 最后,给出当前项目清晰的情况信息,以及要解决的问题。 5. 通过 AI 的回答,从文本中抽取实现代码,加载到需要执行的任务中。 ## 2. 项目难点和技术壁垒 1. 需要总结并编写出准确的有行业经验的知识库、最佳实现的方法、行业数据字段和治理规范; 2. 需要将平台的能力抽象为一套有表达力的、简练的、易于AI学习的、文档和示例丰富API文档; 总结就是:将丰富的行业实践喂给 AI,加上一套能力强大的API。使AI面对新的项目问题时,能够清晰的表达出来。 ## 运行演示 在本demo中,我编写了如下知识库并设计了一套简易的、基于DSL流式处理风格的API: [1.如何设计模型](./knowledge/1_model_know_how.txt) [2.API文档和示例](./knowledge/2_api_doc.txt) [3.当前项目情况](./knowledge/3_current_project_information.txt) 在通过 AI 预先载入和学习知识库,AI顺利的回答的当前项目的解决方案。 `可以看到,效果还是不错的。` > python train.py --------------------------------- 回答如下 --------------------------------- 知道了。根据当前项目情况,我们需要为两个数据源端分别设计ODS层的建库、建表,并完成数据抽取、清洗和写入。以下是示例代码: 首先,为ZXYJHYY数据源创建ODS层数据库和表: ```sql create database if not exists ODS_ZXYJHYY_ODD; ``` 对应的JDBC_URL为:`jdbc:mysql://10.50.101.33:3306/ODS_ZXYJHYY_ODD` 创建MDL_QUXK_AKZZ表和ZKA_WOWIJ_KZJA表: ```sql create table ODS_ZXYJHYY_ODD.MDL_QUXK_AKZZ ( ywsj datetime, org_jgmc varchar(255), zxz decimal(16, 2), hbz decimal(16, 2), tbz decimal(16, 2), `这一列是性别` varchar(10), scsj datetime, jlid bigint auto_increment, xfxh varchar(255), primary key (jlid) ); create table ODS_ZXYJHYY_ODD.ZKA_WOWIJ_KZJA ( ywsj datetime, org_jgmc varchar(255), zxz decimal(16, 2), hbz decimal(16, 2), tbz decimal(16, 2), `身份证号码` varchar(18), scsj datetime, jlid bigint auto_increment, xfxh varchar(255), primary key (jlid) ); ``` 接下来,创建MDL_QUXK_AKZZ表的数据抽取任务,使用normalize_sex算子规范化性别字段: ```java source_mysql("jdbc:mysql://10.50.101.33:3306/odd", "MDL_QUXK_AKZZ") .normalize_sex("这一列是性别") .filter_illegal_id("jlid") .sink_mysql("jdbc:mysql://10.50.101.33:3306/ODS_ZXYJHYY_ODD", "MDL_QUXK_AKZZ") ``` 创建ZKA_WOWIJ_KZJA表的数据抽取任务,使用normalize_id_card算子规范化身份证号码字段: ```java source_mysql("jdbc:mysql://10.50.101.33:3306/odd", "ZKA_WOWIJ_KZJA") .normalize_id_card("身份证号码") .filter_illegal_id("jlid") .sink_mysql("jdbc:mysql://10.50.101.33:3306/ODS_ZXYJHYY_ODD", "ZKA_WOWIJ_KZJA") ``` 接着,为WGYY数据源创建ODS层数据库和表: ```sql create database if not exists ODS_WGYY_FU; ``` 对应的JDBC_URL为:`jdbc:mysql://21.202.30.91:3306/ODS_WGYY_FU` 创建QKAJ_SKWIQ表: ```sql create table ODS_WGYY_FU.QKAJ_SKWIQ ( scsj datetime, jlid bigint auto_increment, primary key (jlid) ); ``` 创建QKAJ_SKWIQ表的数据抽取任务,由于没有需要规范化的字段,直接抽取并写入: ```java source_mysql("jdbc:mysql://21.202.30.91:3306/fu", "QKAJ_SKWIQ") .filter_illegal_id("jlid") .sink_mysql("jdbc:mysql://21.202.30.91:3306/ODS_WGYY_FU", "QKAJ_SKWIQ") ``` 以上示例代码展示了如何为两个数据源端设计ODS层建库、建表,并完成数据抽取、清洗和写入的过程。