Skip to main content

如何进行 ETL

danger

本系统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 文件)

  1. 各数据库链接字符串:
  • 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文件上传。

自动化上传

  1. 将csv文件按照Schema的ID的作为开头,下划线作为分隔符起名。(如"schemaid_20240801.csv")
  2. 将csv文件放入到项目文件夹/ingest文件夹中即可(如没有此文件夹则新建一个)。 clickhouse导入完之后,会删除该文件