如何进行 ETL
本系统ETL是一个比较简化的etl工具,不支持非常复杂的功能。仅可在需求比较简单时使用。
目标数据库
本系统启动时,会同时已 docker 形式启动一个 clickhouse 数据库。
该数据库暴露 9000 和 8123 端口
默认
用户名:root
密码:123456
用户名和密码可通过 /项目目录/docker-compose.yml 文件中设置(compose 文件中有两个地方需要进行配置),
设置完成后需要执行 docker compose up -d 命令。
ETL 工具选择:
一、使用自己的 ETL 工具
实施人员可以采取任意的 etl 方式(如 kettle),将数据灌入 clickhouse 中。
clickhouse 数据库的用户名、密码、端口号在上面指定,数据名为 semanticdb_xxx (xxx 为项目名,一般为项目文件夹名称)
每次数据导入完成后,需要调用一个学习的 API,让我们系统学习一下新导入的数据。
(或者在网页端系统设置中手动点击重新学习所有表)
API 见:https://app.swaggerhub.com/apis-docs/y144/chatbi/1.0.0#/nlq/get_learn
其中,鉴权的 Token 会由实施人员提供。
二、使用内置 ETL 工具
1、配置 /项目文件夹/config.json 文件
①datasources 配置:配置 mysql 数据库用户名、密码、ip 地址、端口号、数据库名称
默认给到 mysql 数据库的配置模板,如果使用其他数据库请联系实施人员提供。
②include_schemas
问答系统中的哪些表会参与 etl(填写表英文名称),默认给到所有的表。
参与的表在执行 etl 的命令时,会删除表中原先的数据。
2、写 etl 的 sql 文件 系统默认会给到每张表的 etl 模板,存储在项目文件夹/etl/tap_sqlalchemy_home/sql
把 etl/tap_sqlalchemy_home 文件夹中的 sql 模板放到 etl/sqlTemplates 文件夹中去(不要修改文件名和 sql 语句拿到的字段数量),
对 sql 文件进行修改(建议 sql 语句先在本地数据库执行测试确定可用后再写入文件中去)
3、执行 docker exec yiask npm run project-etl 命令
该命令执行后会根据 config.json 文件中的 include_schemas 判断哪些表会参与 etl 过程,
会先删除 clickhouse 中这些表里的数据,然后执行 etl/tap_sqlalchemy_home/文件夹中的 sql 文件(include_schemas 数组中标明的表所对应的 sql 文件)
- 各数据库链接字符串:
- mysql:
mysql+pymysql://user:password@hostname:port/database_name - pgsql:
postgresql+psycopg2://user:password@hostname:port/database_name - 达梦:
dm+dmPython://user:password@hostname:port - oracle:
oracle+oracledb://user:password@hostname:port/database_name - mssql:
mssql+pyodbc://user:password@hostname:port/database_name?driver=ODBC+Driver+18+for+SQL+Server&TrustServerCertificate=yes - 人大金仓:
kingbase+ksycopg2://user:password@hostname:port/database_name?sslmode=disable
直接上传csv文件
直接上传csv文件有两种方式,手动上传和自动化上传。
手动上传可以在系统的 所有数据 页面中,点击上传excel。此处也支持csv文件上传。
自动化上传
- 将csv文件按照Schema的ID的作为开头,下划线作为分隔符起名。(如"schemaid_20240801.csv")
- 将csv文件放入到项目文件夹/ingest文件夹中即可(如没有此文件夹则新建一个)。 clickhouse导入完之后,会删除该文件