save_query_result 保存查询结果支持

开启 save_query_result 后,MatrixOne 会保存查询结果。

对保存查询结果有影响的参数有三个:

  • save_query_result:开启/关闭保存查询结果。

  • query_result_timeout:设置保存查询结果的时间。

  • query_result_maxsize:设置单个查询结果最大值。

开启保存查询结果设置

  • 仅对当前会话开启保存查询结果:
  1. -- 默认为 off
  2. set global save_query_result = on
  • 如需全局开启,可在启动 MatrixOne 之前,修改配置文件 cn.toml,插入以下代码并保存:
  1. [cn.frontend]
  2. saveQueryResult = "on" // 默认为 off

设置保存时间

设置保存时间单位为小时。

  • 仅对当前会话开启查询结果保存时间:
  1. -- 默认为 24
  2. set global query_result_timeout = 48
  • 如需全局开启,可在启动 MatrixOne 之前,修改配置文件 cn.toml,插入以下代码并保存:
  1. [cn.frontend]
  2. queryResultTimeout = 48 // 默认为 24

Note: 保存时间如果设置的值比上一次设置的短,不影响之前的保存结果。

设置单个查询结果的最大值

设置单个查询结果的最大值单位为 MB。

  • 仅对当前会话设置查询结果的最大值:
  1. -- 默认为 100
  2. set global query_result_maxsize = 200
  • 如需全局开启,可在启动 MatrixOne 之前,修改配置文件 cn.toml,插入以下代码并保存:
  1. [cn.frontend]
  2. queryResultMaxsize = 200 // 默认为 100

Note: 单个查询结果的最大值如果设置的值比上一次设置的小,不影响之前的保存结果大小。

查询元数据信息

查询元数据信息可以使用下面的 SQL 语句:

  1. select * from meta_scan(query_id) as u;
  2. 当前 account_id
  3. select query_id from meta_scan(query_id) as u;

元数据信息如下:

列名类型备注
query_iduuid查询结果 ID
statementtext执行的 SQL 语句
account_iduint32账户 ID
role_iduint32角色 ID
result_pathtext保存查询结果的路径,默认保存路径为 matrixone 文件夹 mo-data/s3,如需修改默认保存的路径,需修改配置文件中的 data-dir = “mo-data/s3”。如需查阅配置文件参数说明,参见通用参数配置
created_timetimestamp创建时间
result_sizefloat结果大小,单位为 MB。
tablestextSQL 所用到的表
user_iduint32用户 ID
expired_timetimestamp查询结果的超时时间
column_maptext查询如果有同名的列结果名,result scan 会对列名做重映射

保存查询结果

你可以将查询结果保存在你的本地磁盘或 S3 中。

语法结构

  1. MODUMP QUERY_RESULT query_id INTO s3_path
  2. [FIELDS TERMINATED BY 'char']
  3. [ENCLOSED BY 'char']
  4. [LINES TERMINATED BY 'string']
  5. [header 'bool']
  6. [MAX_FILE_SIZE unsigned_number]
  • query_id:是 UUID 的字符串。

  • s3_path:是查询结果文件保存的路径。默认保存路径为 matrixone 文件夹 mo-data/s3,如需修改默认保存路径,需修改配置文件中的 data-dir = "mo-data/s3"。如需查阅配置文件参数说明,参见通用参数配置

  1. root@rootMacBook-Pro 02matrixone % cd matrixone/mo-data
  2. root@rootMacBook-Pro mo-data % ls
  3. dn-data etl local logservice-data s3

Note: 如果你需要导出 csv 文件。路径需要以 etl: 开头。

  • [FIELDS TERMINATED BY ‘char’]:可选参数。字段分割符号,默认为单引号 '

  • [ENCLOSED BY ‘char’]:可选参数。字段包括符号,默认为引双号

  • [LINES TERMINATED BY ‘string’]:可选参数。行结束符号,默认为换行符号 \n

  • [header ‘bool’]:可选参数。bool 类型可以选择 truefalsecsv 文件第一行为各个列名的标题行。

  • [MAX_FILE_SIZE unsigned_number]:可选参数。文件最大文件大小,单位为 KB。默认为 0。

示例

  1. -- 开启保存查询结果
  2. mysql> set global save_query_result = on;
  3. -- 设置保存时间为 24 小时
  4. mysql> set global query_result_timeout = 24;
  5. -- 设置单个查询结果最大值为 100M
  6. mysql> set global query_result_maxsize = 200;
  7. -- 建表并插入数据
  8. mysql> create table t1 (a int);
  9. mysql> insert into t1 values(1);
  10. -- 可以查看一下表结构确认插入数据正确
  11. mysql> select a from t1;
  12. +------+
  13. | a |
  14. +------+
  15. | 1 |
  16. +------+
  17. 1 row in set (0.16 sec)
  18. -- 查询当前会话中最近执行的查询 ID
  19. mysql> select last_query_id();
  20. +--------------------------------------+
  21. | last_query_id() |
  22. +--------------------------------------+
  23. | c187873e-c25d-11ed-aa5a-acde48001122 |
  24. +--------------------------------------+
  25. 1 row in set (0.12 sec)
  26. -- 获取这个查询 ID 的查询结果
  27. mysql> select * from result_scan('c187873e-c25d-11ed-aa5a-acde48001122') as t;
  28. +------+
  29. | a |
  30. +------+
  31. | 1 |
  32. +------+
  33. 1 row in set (0.01 sec)
  34. -- 查看这个查询 ID 的元数据
  35. mysql> select * from meta_scan('c187873e-c25d-11ed-aa5a-acde48001122') as t;
  36. +--------------------------------------+------------------+------------+---------+---------------------------------------------------------------------+---------------------+----------------------+--------+---------+---------------------+-----------+
  37. | query_id | statement | account_id | role_id | result_path | create_time | result_size | tables | user_id | expired_time | ColumnMap |
  38. +--------------------------------------+------------------+------------+---------+---------------------------------------------------------------------+---------------------+----------------------+--------+---------+---------------------+-----------+
  39. | c187873e-c25d-11ed-aa5a-acde48001122 | select a from t1 | 0 | 0 | SHARED:/query_result/sys_c187873e-c25d-11ed-aa5a-acde48001122_1.blk | 2023-03-14 19:45:45 | 0.000003814697265625 | t1 | 1 | 2023-03-15 19:45:45 | t1.a -> a |
  40. +--------------------------------------+------------------+------------+---------+---------------------------------------------------------------------+---------------------+----------------------+--------+---------+---------------------+-----------+
  41. 1 row in set (0.00 sec)
  42. -- 将查询结果保存到本地
  43. MODUMP QUERY_RESULT c187873e-c25d-11ed-aa5a-acde48001122 INTO 'etl:your_local_path';

限制

  • 只支持保存 SELECT 语句和 SHOW 语句的结果。