diff --git a/docs/MatrixOne/Develop/Ecological-Tools/BI-Connection/FineBI-connection.md b/docs/MatrixOne/Develop/Ecological-Tools/BI-Connection/FineBI-connection.md new file mode 100644 index 0000000000..f8f0c56ca5 --- /dev/null +++ b/docs/MatrixOne/Develop/Ecological-Tools/BI-Connection/FineBI-connection.md @@ -0,0 +1,272 @@ +# 通过 FineBI 实现 MatrixOne 的可视化报表 + +## 概述 + +FineBI 是新一代大数据分析工具,它有助于企业的业务人员深入了解和充分利用他们的数据。在 FineBI 中,用户可以轻松地制作多样化的数据可视化信息,自由分析和探索数据。FineBI 具有多种数据连接功能,可用于创建各种复杂的报表,构建数据决策分析系统,广泛应用于公司经营管理、生产管理、财务智能核算、销售运营等领域。 + +MatrixOne 支持连接到数据可视化工具 FineBI。本文将指导您如何通过 FineBI 连接到单机版 MatrixOne,并创建各种可视化数据报表,将它们组装成仪表板,以便进行数据分析和探索。 + +## 前期准备 + +- 已完成[安装和启动 MatrixOne](../../../Get-Started/install-standalone-matrixone.md)。 + +- 已完成[安装 FineBI](https://help.fanruan.com/finebi/doc-view-260.html?source=5) 和 [FineBI 初始化设置](https://help.fanruan.com/finebi/doc-view-262.html)。 + +!!! note + 本篇文档所展示的操作示例中使用的 FineBI 版本为 Linux 6.0 版本,你可以选择安装包 Linux_unix_FineBI6_0-CN.sh。 + +## 通过 FineBI 连接 MatrixOne 服务 + +1. 登录 FineBI 后,选择**管理系统 > 数据连接 > 数据连接管理 > 新建数据连接**,如下图所示,选择 **MySQL**: + + ![image-20230808174909411](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/finebi/select-mysql.png) + +2. 填写 MatrixOne 连接配置,包括数据库名称、主机、端口、用户名、密码,其他参数可以按默认设置。您可以点击**测试连接**按钮来验证连接是否可用,然后点击**保存**进行连接保存: + + ![image-20230808182330603](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/finebi/testing.png) + +## 利用 MatrixOne 数据制作可视化报表 + +1. 创建 Demo 数据: + + 首先,登录到 MatrixOne 数据库,然后执行以下 SQL 语句来创建演示所需的数据表和视图: + + ```sql + create database orders; + use orders; + CREATE TABLE `category` (`product_category_name` VARCHAR(255) DEFAULT NULL, + `product_category_name_english` VARCHAR(255) DEFAULT NULL ); + CREATE TABLE `item` (`order_id` VARCHAR(255) NOT NULL, `order_item_id` INT DEFAULT null, + `product_id` VARCHAR(255) DEFAULT null, + `seller_id` VARCHAR(255) DEFAULT null, `shipping_limit_date` DATETIME DEFAULT null, + `price` DECIMAL(10,2) DEFAULT null, + `freight_value` DECIMAL(10,2) DEFAULT null + ); + CREATE TABLE `review` ( + `review_id` VARCHAR(255) NOT NULL, + `order_id` VARCHAR(255) DEFAULT null, + `review_score` TINYINT DEFAULT null, + `review_comment_title` VARCHAR(255) DEFAULT null, + `review_comment_message` TEXT DEFAULT null, + `review_creation_date` DATETIME DEFAULT null, + `review_answer_timestamp` DATETIME DEFAULT null, + PRIMARY KEY (`review_id`) + ); + CREATE TABLE `order_time` ( + `order_id` VARCHAR(255) NOT NULL, + `customer_id` VARCHAR(255) DEFAULT null, + `y` INT DEFAULT null, + `q` INT DEFAULT null, + `m` INT DEFAULT null, + `d` DATE DEFAULT null, + `h` INT DEFAULT null, + `order_purchase_timestamp` DATETIME DEFAULT null + ); + CREATE TABLE `orders` ( + `order_id` VARCHAR(255) NOT NULL, + `customer_id` VARCHAR(255) DEFAULT null, + `order_status` VARCHAR(255) DEFAULT null, + `order_purchase_timestamp` DATETIME DEFAULT null, + `order_approved_at` DATETIME DEFAULT null, + `order_delivered_carrier_date` DATETIME DEFAULT null, + `order_delivered_customer_date` DATETIME DEFAULT null, + `order_estimated_delivery_date` DATETIME DEFAULT null, + PRIMARY KEY (`order_id`) + ); + CREATE TABLE `product` ( + `product_id` VARCHAR(255) NOT NULL, + `product_category_name` VARCHAR(255) DEFAULT null, + `product_name_lenght` INT DEFAULT null, + `product_description_lenght` INT DEFAULT null, + `product_photos_qty` INT DEFAULT null, + `product_weight_g` INT DEFAULT null, + `product_length_cm` INT DEFAULT null, + `product_height_cm` INT DEFAULT null, + `product_width_cm` INT DEFAULT null, + PRIMARY KEY (`product_id`) + ); + CREATE TABLE `rfm` ( + `customer_id` VARCHAR(255) DEFAULT null, + `user_type` VARCHAR(255) DEFAULT null, + `shijian` DATE DEFAULT null + ); + + CREATE view total_order_value as select t.order_id,product_id,seller_id,(price*total)+(freight_value*total) as order_value from (select order_id,count(*) as total from item group by order_id) t join item on t.order_id=item.order_id; + + CREATE view order_detail as select a.order_id,product_id,seller_id, customer_id,round(order_value,2) as order_value, y,q,m,d,h,order_purchase_timestamp from total_order_value a inner join order_time b on a.order_id=b.order_id; + ``` + + 接下来,使用以下 SQL 导入语句,将预先准备的 Demo 数据导入到 MatrixOne 数据库的相应表中。 + + !!! note + 请注意,路径 `/root/data/table_name.csv` 是各表数据文件的路径,您可以参考此过程自行生成数据。 + + ```sql + use orders; + load data local infile '/root/data/category.csv' into table category FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY "\r\n"; + load data local infile '/root/data/review.csv' into table review FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY "\r\n"; + load data local infile '/root/data/product.csv' into table product FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY "\r\n"; + load data local infile '/root/data/item.csv' into table item FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY "\r\n"; + load data local infile '/root/data/order_time.csv' into table order_time FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY "\r\n"; + load data local infile '/root/data/orders.csv' into table orders FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY "\r\n"; + load data local infile '/root/data/rfm.csv' into table rfm FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY "\r\n"; + ``` + +2. 添加数据集: + + 在 FineBI 中,点击**公共数据**,然后点击**新建文件夹**,创建并选择一个文件夹,然后点击**新建数据集**,选择 **SQL 数据集**,将 SQL 查询添加到选定的文件夹中。输入数据集名称并填写 SQL 查询,如下所示: + + ```sql + select d, + count(order_id) as order_num, + count(DISTINCT customer_id) + from orders.order_detail + group by d + order by d + ``` + + 您可以点击**预览**按钮查看 SQL 查询的结果,然后点击**确定**进行保存: + + ![image-20230809091306270](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/finebi/preview.png) + + 下面是本示例中使用的所有查询 SQL 的示例: + + ```sql + -- 日活用户数及订单数 + select d, + count(order_id) as order_num, + count(DISTINCT customer_id) + from orders.order_detail + group by d + order by d + + -- 月活用户数及订单数 + select count(DISTINCT customer_id), + count(order_id), + concat(y, '-', m) + from orders.order_detail + group by y,m + order by y,m + + -- 各时段活跃用户数及订单数 + select h, + count(DISTINCT customer_id), + count(order_id) order_num + from orders.order_detail + group by h + order by h + + -- 各类型用户数量 + SELECT count(*), + user_type + from orders.rfm + GROUP BY user_type + + -- 月GMV + select y,m, + sum(order_value), + concat(y, "-", m) month + from orders.order_detail + group by y,m + order by y,m + + -- 季度GMV + select y,q, + sum(order_value) gmv, + concat(y, "季度", q) as quator + from orders.order_detail + group by y,q + order by concat(y, "季度", q) asc + + -- 季度ARPU + select y,q, + round((sum(order_value)/count(DISTINCT customer_id)),2) arpu, + concat(y, "季度", q) as quator + from orders.order_detail + group by y,q + order by y,q + + -- 月度ARPU + select y,m, + round((sum(order_value)/count(DISTINCT customer_id)),2) arpu, + concat(y, "-", m) as month + from orders.order_detail + group by y,m + order by y,m + + -- 重要挽留用户热门指数 + SELECT e.product_category_name_english good_type, + SUM(a.order_value) ordder_total_value, + ROUND(AVG(c.review_score), 2) good_review_score, + (0.7*SUM(a.order_value)+ + + 0.3*10000*ROUND(AVG(c.review_score), 7)) + top_rank_rate + FROM orders.order_detail a + INNER JOIN + (SELECT customer_id + from orders.rfm + WHERE user_type='重要挽留用户' ) as b ON a.customer_id=b.customer_id + LEFT JOIN orders.review c ON a.order_id=c.order_id + LEFT JOIN orders.product d ON a.product_id=d.product_id + LEFT JOIN orders.category e ON d.product_category_name=e.product_category_name + where e.product_category_name_english is not NULL + GROUP BY e.product_category_name_english limit 50 + + -- 一般挽留用户热门指数 + SELECT e.product_category_name_english good_type, + SUM(a.order_value) ordder_total_value, + ROUND(AVG(c.review_score), 2) good_review_score, + (0.7*SUM(a.order_value)+0.3*10000*ROUND(AVG(c.review_score), 7)) + top_rank_rate + FROM orders.order_detail a + INNER JOIN + (SELECT customer_id from orders.rfm + WHERE user_type='一般挽留用户' ) as b ON a.customer_id=b.customer_id + LEFT JOIN orders.review c ON a.order_id=c.order_id + LEFT JOIN orders.product d ON a.product_id=d.product_id + LEFT JOIN orders.category e ON d.product_category_name=e.product_category_name + where e.product_category_name_english is not NULL + GROUP BY e.product_category_name_english limit 50 + ``` + +3. 更新数据: + + 保存数据集后,您需要点击**更新数据**按钮,等待数据更新完成后才能进行分析: + + ![image-20230809091814920](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/finebi/update-data.png) + +4. 创建分析主题: + + 本示例的分析主题用于可视化展示电商平台的一般挽留用户、重要挽留用户、月 ARPU、季度 ARPU、不同时段活跃用户、日活跃用户、月活跃用户数及订单数等数据,以辅助决策和提升业务。创建分析主题的具体步骤如下: + + - 点击**我的分析**,然后点击**新建文件夹**,创建并选择一个文件夹。 + - 点击**新建分析主题**,选择上一步创建的数据集,然后点击**确定**。 + + ![image-20230809092959252](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/finebi/create-analytic.png) + + __Note:__ 您可以使用**批量选择**功能来选择多个数据集进行主题分析。 + + ![image-20230809092959252](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/finebi/batch-select.png) + + 点击**添加组件**按钮,选择图表类型,将左侧的字段按需要拖动到右侧,双击修改字段可视化名称,在下方修改组件名称,组件名称即该组件所分析的报表内容: + + ![image-20230809092959252](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/finebi/add-compon-1.png) + + ![image-20230809092959252](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/finebi/add-compon-2.png) + +5. 组装仪表板: + + 点击**添加仪表板**,将刚刚创建的组件添加到仪表板中。您可以自由拖动和缩放组件的大小和位置,并在下方修改组件名称,以描述该组件所分析的报表内容。 + + ![image-20230810123913230](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/finebi/add-dashboard.png) + +6. 发布仪表板: + + 组装完成后,点击**申请发布**,设置发布名称、发布节点和展示平台。然后点击**确认**,您的仪表板将成功发布。 + + ![image-20230810123913230](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/finebi/publish.png) + + 现在,您可以在**首页导航**下找到刚刚发布的仪表板,并查看其展示效果。 + + ![image-20230810131752645](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/finebi/published.png) diff --git a/docs/MatrixOne/Develop/Ecological-Tools/BI-Connection/Superset-connection.md b/docs/MatrixOne/Develop/Ecological-Tools/BI-Connection/Superset-connection.md new file mode 100644 index 0000000000..553a02cb19 --- /dev/null +++ b/docs/MatrixOne/Develop/Ecological-Tools/BI-Connection/Superset-connection.md @@ -0,0 +1,215 @@ +# 通过 Superset 实现 MatrixOne 的可视化监控 + +## 概述 + +Superset 是一个开源的、现代的、轻量级 BI 分析工具,能够连接多种数据源、提供丰富的可视化图表,支持自定义仪表盘,帮助用户轻松探索和呈现数据。 + +MatrixOne 1.0 版本现在支持与数据可视化工具 Superset 集成。本指南将引导您快速部署 MatrixOne 和 Superset 环境,通过将 MatrixOne 与 Superset 的可视化功能相结合,创建一个简单的监控面板,用于监测 MatrixOne 数据库,使用其中的 'system_metric' 数据。 + +如果您希望进一步扩展功能,您还可以探索其他配置选项,以监控整个 MatrixOne 数据库的各个方面。 + +## 前期准备 + +### 硬件环境 + +本次实践对于机器的硬件要求不高,2C 4G 的小型虚拟机即可完成这个流程的功能体验。 + +- 推荐硬件资源为:8C 32G 虚拟机。 + +### 软件环境 + +本次实践需要安装部署以下软件环境: + +- Docker,版本要求为 23.0.1 及以上。 +- MatrixOne +- Superset,推荐版本为 2.1.0。 + +你可以参照下面的章节进行安装。 + +#### 安装 Docker + +本次实践所有软件环境的安装都是基于 Docker 进行,你可以参照 [Docker 官方文档](https://docs.docker.com/get-docker/)进行安装并启动 Docker。 + +#### 安装 MatrixOne + +你可以参照 [macOS 环境下使用 Docker 部署 MatirxOne](../../../Get-Started/install-on-macos/install-on-macos-method3.md) 或 [Linux 环境下使用 Docker 部署 MatirxOne](../../../Get-Started/install-on-linux/install-on-linux-method3.md) 进行安装并启动 MatirxOne. + +#### 安装 Superset + +使用 Docker 部署单节点的 Superset 步骤如下: + +1. 完成安装并启动 Docker 以后,使用以下命令从 Docker Hub 中拉取 Superset 的镜像: + + ``` + docker pull amancevice/superset + ``` + +2. 启动 Superset 镜像: + + ``` + docker run -e "SUPERSET_SECRET_KEY=your_secret_key_here" --name superset -u 0 -d -p 8088:8088 amancevice/superset + ``` + + !!! note + 安全密钥可通过 `openssl rand -base64 $num` 来生成,例如生成密钥 `openssl rand -base64 49`。 + 参数可参考官网说明:Your App secret key will be used for securely signing the session cookie and encrypting sensitive information on the database. Make sure you are changing this key for your deployment with a strong key. You can generate a strong key using `openssl rand -base64 42`. Alternatively you can set it with `SUPERSET_SECRET_KEY` environment variable. + +3. 使用以下命令初始化 Superset 数据库: + + ``` + docker exec -it superset superset db upgrade + ``` + +4. 使用以下命令创建 Superset 管理员用户,根据提示输入相关注册信息: + + ``` + docker exec -it superset superset fab create-admin + ``` + +5. 使用以下命令创建默认账户: + + ``` + docker exec -it superset superset init + ``` + +6. 使用以下命令启动服务,同时开启线程、自动重新加载和调试模式: + + ``` + docker exec -it superset superset run --with-threads --reload --debugger + ``` + +## 通过 Superset 连接 MatrixOne + +1. 访问 Superset 的登录页面,通常是 `http://ip:8080`,然后输入您的用户名和密码,登录 Superset。 + + ![Superset登录页面](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/superset/superset-login.png) + + __Note:__ Superset 的端口可能是 8080 或 8088,具体取决于您的配置;用户名和密码是您在部署 Superset 时设置的。 + + 登录后,您将看到 Superset 的主界面。 + + ![Superset主界面](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/superset/superset-dashboard.png) + +2. 创建数据库连接: + + 在 Superset 中,首先需要创建与 MatrixOne 的数据库连接。在右上角点击 **Settings**,然后选择 **Database Connections**。 + + 在 Database Connections 页面,点击 **+ DATABASE** 按钮,并选择 **MySQL** 作为数据库类型。 + + 填写 MatrixOne 数据库的连接信息,包括主机、端口、用户名和密码。 + + ![创建数据库连接](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/superset/superset-create-db-connection.png) + + 填写完毕后,点击 **CONNECT** 按钮,然后再点击 **FINISH**。 + + ![创建查询](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/superset/superset-create-query.png) + +## 创建可视化监控仪表板 + +现在,您可以使用 MatrixOne 数据库创建一个监控仪表板。 + +1. 点击页面上的 **SQL > SQL Lab**,选择刚刚创建的 MatrixOne 数据库连接,并编写 SQL 查询以选择要监控的数据表。 + + ![image-20230807201143069](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/superset/sql-lab.png) + + 您可以编写多个查询来监控不同的指标。以下是示例查询的 SQL 语句: + + - CPU 利用率: + + ```sql + SELECT metric_name, collecttime, value + FROM metric + WHERE metric_name = 'sys_cpu_combined_percent' or metric_name = 'sys_cpu_seconds_total' + ORDER BY collecttime DESC; + ``` + + - 存储使用情况: + + ```sql + SELECT metric_name, value, collecttime + FROM metric + WHERE metric_name = 'server_storage_usage' + ORDER BY collecttime DESC; + ``` + + - 连接数: + + ```sql + SELECT metric_name, value, collecttime + FROM metric + WHERE metric_name = 'server_connections' + ORDER BY collecttime DESC; + ``` + + - 磁盘读写: + + ```sql + SELECT metric_name, value, collecttime + FROM metric + WHERE metric_name = 'sys_disk_read_bytes' OR metric_name = 'sys_disk_write_bytes' + ORDER BY collecttime DESC; + ``` + + - 网络接收与发送: + + ```sql + SELECT metric_name, value, collecttime + FROM metric + WHERE metric_name = 'sys_net_sent_bytes' OR metric_name = 'sys_net_recv_bytes' + ORDER BY collecttime DESC; + ``` + + - 内存使用情况: + + ```sql + SELECT metric_name, value, collecttime + FROM metric + WHERE metric_name = 'sys_memory_available' OR metric_name = 'sys_memory_used' + ORDER BY collecttime DESC; + ``` + + - 事务错误总数: + + ```sql + SELECT metric_name, value, collecttime + FROM metric + WHERE metric_name = 'sql_transaction_errors' OR metric_name = 'sql_transaction_total' + ORDER BY collecttime DESC; + ``` + + - SQL 错误总数: + + ```sql + SELECT metric_name, value, collecttime + FROM metric + WHERE metric_name = 'sql_statement_errors' OR metric_name = 'sql_statement_total' + ORDER BY collecttime DESC; + ``` + +2. 点击 **SAVE > Save dataset > SAVE & EXPLORE** 保存上面的每个查询并将其用作后续图表的数据源。 + +3. 编辑图表: + + 这里我们用其中一个查询为例,来演示如何编辑一个可视化的图表。首先,我们选择 `disk_read_write` 的查询作为图表的制作数据源,在 SQL Lab 中对应查询的下面点击 **CREATE CHART** 或者在上一步保存完 Query 之后,页面将跳转至编辑 Chart 页面: + + ![创建仪表板](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/superset/superset-create-dashboard.png) + +4. 进入到图表编辑的页面,依次选择图表类型、时间字段、查询的指标列、查询的分组列等选项,配置完成后,选择**运行**: + + ![查看仪表板](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/superset/superset-view-dashboard.png) + +5. 点击 **UPDATE CHART > SAVE**,将编辑好的 Chart 保存。 + +## 组织仪表板 + +1. 创建了多个图表后,您可以在 Superset 中组装它们以创建一个监控仪表板: + + 点击 **Dashboards**,然后点击 **+ DASHBOARD** 来创建新的仪表板,或者编辑现有的仪表板。 + + ![image-20230808101636134](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/superset/superset-add-dashboard.png) + +2. 在仪表板编辑页面,你可以从右侧的 CHARTS 列表中拖拽已创建的图表到仪表板上进行组装。你也可以自由调整图表的位置,添加标题等。 + + ![image-20230808102033250](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/superset/superset-edit-dashboard.png) + +您已经成功地连接了 MatrixOne 数据库与 Superset,创建了一个简单的监控仪表板,以可视化展示 MatrixOne 数据库的重要指标。 diff --git a/docs/MatrixOne/Develop/Ecological-Tools/BI-Connection/yonghong-connection.md b/docs/MatrixOne/Develop/Ecological-Tools/BI-Connection/yonghong-connection.md new file mode 100644 index 0000000000..a754a39357 --- /dev/null +++ b/docs/MatrixOne/Develop/Ecological-Tools/BI-Connection/yonghong-connection.md @@ -0,0 +1,50 @@ +# 通过永洪 BI 实现 MatrixOne 的可视化报表 + +## 概述 + +永洪 BI 是一款全面的大数据平台,它整合了自服务数据准备、探索性自助分析、深度分析、企业级管理和高性能计算功能,提供了一站式的大数据解决方案。永洪 BI 的目标是为各种规模的企业提供灵活易用的全业务链大数据分析工具,使用户能够轻松发掘大数据的价值并获得深刻的洞察力。 + +MatrixOne 支持连接到智能数据分析工具永洪 BI。本文将指导您如何通过永洪 BI 连接到单机版 MatrixOne,并创建各种可视化数据报表。 + +## 开始前准备 + +- 已完成[安装和启动 MatrixOne](../../../Get-Started/install-standalone-matrixone.md)。 +- 已完成[安装永洪 BI](https://www.yonghongtech.com/cp/desktop/)。永洪 BI 是一款免费智能数据分析工具,基于本机安装,省去繁琐的部署环节,即装即用。 + +## 通过永洪 BI 连接 MatrixOne 服务 + +### 添加数据源 + +打开永洪 BI,选择左侧的**添加数据源 > +(新建数据源)**,在弹出的数据库选项中选择 **MySQL**。 + +![添加数据源](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/yonghong/yonghong_add_connect.png) + +填写完成 MatrixOne 数据库相关的连接信息后,您可以选择右上角的**测试连接**按钮,以确保连接成功。 + +连接成功后,点击**保存**以保存我们刚刚填写的数据源信息。 + +![连接到 MatrixOne](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/yonghong/yonghong_connect.png) + +### 创建数据集 + +在永洪 BI 中,选择左侧的**创建数据集**菜单,然后选择刚刚添加的数据源。您将看到 MatrixOne 数据库中的表格和视图信息。根据您的业务需求,添加**自定义 SQL**,然后点击**刷新数据**。查询结果将显示在右侧,确认查询结果是否符合预期后,点击**保存**以保存数据集。 + +![创建数据集](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/yonghong/yonghong_dataset.png) + +### 制作报告 + +首先,在永洪 BI 中选择左侧的**制作报告**菜单,然后从右侧选择合适的**图表组件**并拖动到左侧。 + +![制作报告](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/yonghong/yonghong_panel_add.png) + +选择刚刚创建的数据集,将时间维度设置为 X 轴,将日订单数和活跃用户数设置为 Y 轴。您可以将度量和维度**字段根据需要拖动到相应的位置**。编辑完成后,点击**保存**以保存刚刚制作的报告。 + +![制作报告](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/yonghong/yonghong_report.png) + +### 查看报告 + +最后,在永洪 BI 中选择**查看报告**,然后点击左侧的树状菜单中我们刚刚创建的报告名称,您将能够查看我们上面制作的报告效果。 + +![查看报告](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/bi-connection/yonghong/yonghong_result.png) + +您已经成功地使用永洪 BI 连接到 MatrixOne 数据库,并创建了一个简单的报告,用于可视化展示 MatrixOne 数据。 diff --git a/docs/MatrixOne/Develop/Ecological-Tools/Computing-Engine/DataX-write.md b/docs/MatrixOne/Develop/Ecological-Tools/Computing-Engine/DataX-write.md new file mode 100644 index 0000000000..d87aa2d1e1 --- /dev/null +++ b/docs/MatrixOne/Develop/Ecological-Tools/Computing-Engine/DataX-write.md @@ -0,0 +1,213 @@ +# 使用 DataX 将数据写入 MatrixOne + +## 概述 + +本文介绍如何使用 DataX 工具将数据离线写入 MatrixOne 数据库。 + +DataX 是一款由阿里开源的异构数据源离线同步工具,提供了稳定和高效的数据同步功能,旨在实现各种异构数据源之间的高效数据同步。 + +DataX 将不同数据源的同步分为两个主要组件:**Reader(读取数据源) +**和 **Writer(写入目标数据源)**。DataX 框架理论上支持任何数据源类型的数据同步工作。 + +MatrixOne 与 MySQL 8.0 高度兼容,但由于 DataX 自带的 MySQL Writer 插件适配的是 MySQL 5.1 的 JDBC 驱动,为了提升兼容性,社区单独改造了基于 MySQL 8.0 驱动的 MatrixOneWriter 插件。MatrixOneWriter 插件实现了将数据写入 MatrixOne 数据库目标表的功能。在底层实现中,MatrixOneWriter 通过 JDBC 连接到远程 MatrixOne 数据库,并执行相应的 `insert into ...` SQL 语句将数据写入 MatrixOne,同时支持批量提交。 + +MatrixOneWriter 利用 DataX 框架从 Reader 获取生成的协议数据,并根据您配置的 `writeMode` 生成相应的 `insert into...` 语句。在遇到主键或唯一性索引冲突时,会排除冲突的行并继续写入。出于性能优化的考虑,我们采用了 `PreparedStatement + Batch` 的方式,并设置了 `rewriteBatchedStatements=true` 选项,以将数据缓冲到线程上下文的缓冲区中。只有当缓冲区的数据量达到预定的阈值时,才会触发写入请求。 + +![DataX](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/Computing-Engine/datax-write/datax.png) + +!!! note + 执行整个任务至少需要拥有 `insert into ...` 的权限,是否需要其他权限取决于你在任务配置中的 `preSql` 和 `postSql`。 + +MatrixOneWriter 主要面向 ETL 开发工程师,他们使用 MatrixOneWriter 将数据从数据仓库导入到 MatrixOne。同时,MatrixOneWriter 也可以作为数据迁移工具为 DBA 等用户提供服务。 + +## 开始前准备 + +在开始使用 DataX 将数据写入 MatrixOne 之前,需要完成安装以下软件: + +- 安装 [JDK 8+ version](https://www.oracle.com/sg/java/technologies/javase/javase8-archive-downloads.html)。 +- 安装 [Python 3.8(or plus)](https://www.python.org/downloads/)。 +- 下载 [DataX](https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202210/datax.tar.gz) 安装包,并解压。 +- 下载 [matrixonewriter.zip](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/Computing-Engine/datax-write/matrixonewriter.zip),解压至 DataX 项目根目录的 `plugin/writer/` 目录下。 +- 安装 MySQL Client。 +- [安装和启动 MatrixOne](../../../Get-Started/install-standalone-matrixone.md)。 + +## 操作步骤 + +### 创建 MatrixOne 测试表 + +使用 Mysql Client 连接 MatrixOne,在 MatrixOne 中创建一个测试表: + +```sql +CREATE DATABASE mo_demo; +USE mo_demo; +CREATE TABLE m_user( + M_ID INT NOT NULL, + M_NAME CHAR(25) NOT NULL +); +``` + +### 配置数据源 + +本例中,我们使用**内存**中生成的数据作为数据源: + +```json +"reader": { + "name": "streamreader", + "parameter": { + "column" : [ #可以写多个列 + { + "value": 20210106, #表示该列的值 + "type": "long" #表示该列的类型 + }, + { + "value": "matrixone", + "type": "string" + } + ], + "sliceRecordCount": 1000 #表示要打印多少次 + } +} +``` + +### 编写作业配置文件 + +使用以下命令查看配置模板: + +``` +python datax.py -r {YOUR_READER} -w matrixonewriter +``` + +编写作业的配置文件 `stream2matrixone.json`: + +```json +{ + "job": { + "setting": { + "speed": { + "channel": 1 + } + }, + "content": [ + { + "reader": { + "name": "streamreader", + "parameter": { + "column" : [ + { + "value": 20210106, + "type": "long" + }, + { + "value": "matrixone", + "type": "string" + } + ], + "sliceRecordCount": 1000 + } + }, + "writer": { + "name": "matrixonewriter", + "parameter": { + "writeMode": "insert", + "username": "root", + "password": "111", + "column": [ + "M_ID", + "M_NAME" + ], + "preSql": [ + "delete from m_user" + ], + "connection": [ + { + "jdbcUrl": "jdbc:mysql://127.0.0.1:6001/mo_demo", + "table": [ + "m_user" + ] + } + ] + } + } + } + ] + } +} +``` + +### 启动 DataX + +执行以下命令启动 DataX: + +```shell +$ cd {YOUR_DATAX_DIR_BIN} +$ python datax.py stream2matrixone.json +``` + +### 查看运行结果 + +使用 Mysql Client 连接 MatrixOne,使用 `select` 查询插入的结果。内存中的 1000 条数据已成功写入 MatrixOne。 + +```sql +mysql> select * from m_user limit 5; ++----------+-----------+ +| m_id | m_name | ++----------+-----------+ +| 20210106 | matrixone | +| 20210106 | matrixone | +| 20210106 | matrixone | +| 20210106 | matrixone | +| 20210106 | matrixone | ++----------+-----------+ +5 rows in set (0.01 sec) + +mysql> select count(*) from m_user limit 5; ++----------+ +| count(*) | ++----------+ +| 1000 | ++----------+ +1 row in set (0.00 sec) +``` + +## 参数说明 + +以下是 MatrixOneWriter 的一些常用参数说明: + +|参数名称|参数描述|是否必选|默认值| +|---|---|---|---| +|**jdbcUrl** |目标数据库的 JDBC 连接信息。DataX 在运行时会在提供的 `jdbcUrl` 后面追加一些属性,例如:`yearIsDateType=false&zeroDateTimeBehavior=CONVERT_TO_NULL&rewriteBatchedStatements=true&tinyInt1isBit=false&serverTimezone=Asia/Shanghai`。 |是 |无 | +|**username** | 目标数据库的用户名。|是 |无 | +|**password** |目标数据库的密码。 |是 |无 | +|**table** |目标表的名称。支持写入一个或多个表,如果配置多张表,必须确保它们的结构保持一致。 |是 |无 | +|**column** | 目标表中需要写入数据的字段,字段之间用英文逗号分隔。例如:`"column": ["id","name","age"]`。如果要写入所有列,可以使用 `*` 表示,例如:`"column": ["*"]`。|是 |无 | +|**preSql** |写入数据到目标表之前,会执行这里配置的标准 SQL 语句。 |否 |无 | +|**postSql** |写入数据到目标表之后,会执行这里配置的标准 SQL 语句。 |否 |无 | +|**writeMode** |控制写入数据到目标表时使用的 SQL 语句,可以选择 `insert` 或 `update`。 | `insert` 或 `update`| `insert`| +|**batchSize** |一次性批量提交的记录数大小,可以显著减少 DataX 与 MatrixOne 的网络交互次数,提高整体吞吐量。但是设置过大可能导致 DataX 运行进程内存溢出 | 否 | 1024 | + +## 类型转换 + +MatrixOneWriter 支持大多数 MatrixOne 数据类型,但也有少数类型尚未支持,需要特别注意你的数据类型。 + +以下是 MatrixOneWriter 针对 MatrixOne 数据类型的转换列表: + +| DataX 内部类型 | MatrixOne 数据类型 | +| --------------- | ------------------ | +| Long | int, tinyint, smallint, bigint | +| Double | float, double, decimal | +| String | varchar, char, text | +| Date | date, datetime, timestamp, time | +| Boolean | bool | +| Bytes | blob | + +## 参考其他说明 + +- MatrixOne 兼容 MySQL 协议,MatrixOneWriter 实际上是对 MySQL Writer 进行了一些 JDBC 驱动版本上的调整后的改造版本,你仍然可以使用 MySQL Writer 来写入 MatrixOne。 + +- 在 DataX 中添加 MatrixOne Writer,那么你需要下载 [matrixonewriter.zip](https://community-shared-data-1308875761.cos.ap-beijing.myqcloud.com/artwork/docs/develop/Computing-Engine/datax-write/matrixonewriter.zip),然后将其解压缩到 DataX 项目根目录的 `plugin/writer/` 目录下,即可开始使用。 + +## 常见问题 + +**Q: 在运行时,我遇到了 “配置信息错误,您提供的配置文件/{YOUR_MATRIXONE_WRITER_PATH}/plugin.json 不存在” 的问题该怎么处理?** + +A: DataX 在启动时会尝试查找相似的文件夹以寻找 plugin.json 文件。如果 matrixonewriter.zip 文件也存在于相同的目录下,DataX 将尝试从 `.../datax/plugin/writer/matrixonewriter.zip/plugin.json` 中查找。在 MacOS 环境下,DataX 还会尝试从 `.../datax/plugin/writer/.DS_Store/plugin.json` 中查找。此时,您需要删除这些多余的文件或文件夹。 diff --git a/docs/MatrixOne/Develop/Ecological-Tools/Computing-Engine/seatunnel-write.md b/docs/MatrixOne/Develop/Ecological-Tools/Computing-Engine/seatunnel-write.md new file mode 100644 index 0000000000..7e8feed17b --- /dev/null +++ b/docs/MatrixOne/Develop/Ecological-Tools/Computing-Engine/seatunnel-write.md @@ -0,0 +1,131 @@ +# 使用 SeaTunnel 将数据写入 MatrixOne + +## 概述 + +[SeaTunnel](https://seatunnel.apache.org/) 是一个分布式、高性能、易扩展的数据集成平台,专注于海量数据(包括离线和实时数据)同步和转化。MatrixOne 支持使用 SeaTunnel 从其他数据库同步数据,可以稳定高效地处理数百亿条数据。 + +本文档将介绍如何使用 SeaTunnel 向 MatrixOne 中写入数据。 + +## 开始前准备 + +在使用 SeaTunnel 向 MatrixOne 写入数据之前,请确保完成以下准备工作: + +- 已完成[安装和启动 MatrixOne](../../../Get-Started/install-standalone-matrixone.md)。 + +- 已完成[安装 SeaTunnel Version 2.3.3](https://www.apache.org/dyn/closer.lua/seatunnel/2.3.3/apache-seatunnel-2.3.3-bin.tar.gz)。安装完成后,可以通过 shell 命令行定义 SeaTunnel 的安装路径: + +```shell +export SEATNUNNEL_HOME="/root/seatunnel" +``` + +## 操作步骤 + +### 创建测试数据 + +1. 创建名为 `test1` 的 MySQL 数据库,并在其中创建名为 `test_table` 的表,存储在 root 下的 `mysql.sql` 中。以下是 MySQL 的 DDL 语句: + + ```sql + create database test1; + use test1; + CREATE TABLE `test_table` ( + `name` varchar(255) DEFAULT NULL, + `age` int(11) DEFAULT NULL + ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + ``` + +2. 使用 [mo_ctl](https://docs.matrixorigin.cn/1.0.0-rc1/MatrixOne/Maintain/mo_ctl/) 工具将 MySQL 的 DDL 语句直接导入至 MatrixOne。执行以下命令: + + ```shell + mo_ctl sql /root/mysql.sql + ``` + +### 安装 Connectors 插件 + +本篇文档中将介绍如何使用 SeaTunnel 的 `connector-jdbc` 连接插件连接 MatrixOne。 + +1. 在 SeaTunnel 的 `${SEATNUNNEL_HOME}/config/plugin_config` 文件中,添加以下内容: + + ```shell + --connectors-v2-- + connector-jdbc + --end-- + ``` + +2. 版本 2.3.3 的 SeaTunnel 二进制包默认不提供连接器依赖项,你需要在首次使用 SeaTunnel 时,执行以下命令来安装连接器: + + ```shell + sh bin/install-plugin.sh 2.3.3 + ``` + + __Note:__ 本篇文档中使用 SeaTunnel 引擎将数据写入 MatrixOne,无需依赖 Flink 或 Spark。 + +## 定义任务配置文件 + +在本篇文档中,我们使用 MySQL 数据库的 `test_table` 表作为数据源,不进行数据处理,直接将数据写入 MatrixOne 数据库的 `test_table` 表中。 + +那么,由于数据兼容性的问题,需要配置任务配置文件 `${SEATNUNNEL_HOME}/config/v2.batch.config.template`,它定义了 SeaTunnel 启动后的数据输入、处理和输出方式和逻辑。 + +按照以下内容编辑配置文件: + +```shell +env { + execution.parallelism = 2 + job.mode = "BATCH" +} + +source { + Jdbc { + url = "jdbc:mysql://192.168.110.40:3306/test" + driver = "com.mysql.cj.jdbc.Driver" + connection_check_timeout_sec = 100 + user = "root" + password = "123456" + query = "select * from test_table" + } +} + +transform { + +} + +sink { + jdbc { + url = "jdbc:mysql://192.168.110.248:6001/test" + driver = "com.mysql.cj.jdbc.Driver" + user = "root" + password = "111" + query = "insert into test_table(name,age) values(?,?)" + } +} +``` + +### 安装数据库依赖项 + +下载 [mysql-connector-java-8.0.33.jar](https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-j-8.0.33.zip),并将文件复制到 `${SEATNUNNEL_HOME}/plugins/jdbc/lib/` 目录下。 + +### 运行 SeaTunnel 应用 + +执行以下命令启动 SeaTunnel 应用: + +```shell +./bin/seatunnel.sh --config ./config/v2.batch.config.template -e local +``` + +### 查看运行结果 + +SeaTunnel 运行结束后,将显示类似以下的统计结果,汇总了本次写入的用时、总读取数据数量、总写入数量以及总写入失败数量: + +```shell +*********************************************** + Job Statistic Information +*********************************************** +Start Time : 2023-08-07 16:45:02 +End Time : 2023-08-07 16:45:05 +Total Time(s) : 3 +Total Read Count : 5000000 +Total Write Count : 5000000 +Total Failed Count : 0 +*********************************************** +``` + +你已经成功将数据从 MySQL 数据库同步写入到 MatrixOne 数据库中。 diff --git a/docs/MatrixOne/Develop/Transactions/matrixone-transaction-overview/how-to-use.md b/docs/MatrixOne/Develop/Transactions/matrixone-transaction-overview/how-to-use.md index 0f38e58987..cbc740ea93 100644 --- a/docs/MatrixOne/Develop/Transactions/matrixone-transaction-overview/how-to-use.md +++ b/docs/MatrixOne/Develop/Transactions/matrixone-transaction-overview/how-to-use.md @@ -80,4 +80,4 @@ __Note:__ 如果你只添加事务模式参数 `mode = "optimistic"`,但未添 重启 MatrixOne,便能使切换后的事务模式生效。 -更多关于配置参数信息,参见[分布式版通用参数配置](../../Reference/System-Parameters/distributed-configuration-settings.md)。 +更多关于配置参数信息,参见[分布式版通用参数配置](../../../Reference/System-Parameters/distributed-configuration-settings.md)。 diff --git a/mkdocs.yml b/mkdocs.yml index 47a63ff65a..9d53863565 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -145,6 +145,14 @@ nav: - SQLAlchemy 基础示例: MatrixOne/Tutorial/sqlalchemy-python-crud-demo.md - Golang 基础示例: MatrixOne/Tutorial/develop-golang-crud-demo.md - Gorm 基础示例: MatrixOne/Tutorial/gorm-golang-crud-demo.md + - 生态工具: + - BI 工具: + - 通过 FineBI 实现 MatrixOne 的可视化报表: MatrixOne/Develop/Ecological-Tools/BI-Connection/FineBI-connection.md + - 通过永洪 BI 实现 MatrixOne 的可视化报表: MatrixOne/Develop/Ecological-Tools/BI-Connection/yonghong-connection.md + - 通过 Superset 实现 MatrixOne 可视化监控: MatrixOne/Develop/Ecological-Tools/BI-Connection/Superset-connection.md + - ETL 工具: + - 使用 SeaTunnel 将数据写入 MatrixOne: MatrixOne/Develop/Ecological-Tools/Computing-Engine/seatunnel-write.md + - 使用 DataX 将数据写入 MatrixOne: MatrixOne/Develop/Ecological-Tools/Computing-Engine/DataX-write.md - 部署指南: - 集群拓扑规划: - 集群拓扑规划概述: MatrixOne/Deploy/deployment-topology/topology-overview.md