400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
YMatrix 文档
关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
工具指南
数据类型
存储引擎
执行引擎
系统配置参数
SQL 参考
常见问题(FAQ)
新架构 FAQ
集群部署 FAQ
SQL 查询 FAQ
MatrixGate FAQ
运维 FAQ
监控告警 FAQ
PXF FAQ
PLPython FAQ
性能 FAQ
本文档单独并详细地介绍了 MatrixBench 的部分基本功能,包含以下内容:
注意!
目前 mxbench 已开源,欢迎你的审阅与贡献,请点击此处阅读 README。
注意!
因时序场景的特殊性,mxbench 规定数据表第一列必须为时间戳列,第二列必须为设备标识列,从第三列开始才为可写入用户数据的指标列。目前多数据类型和特征功能仅支持指标列,即从第三列开始的列。
int4
, int8
,float4
,float8
这四种之外,还支持 text
和 varchar
等类型。int4
,int8
,float4
,float8
这四种还可以指定取值范围等数据特征。varchar
类型还提供了特殊的类型 plate_template
、vin_template
,以更好的适应车联网场景的需求。plate_template
类型用于生成车牌号类型特征的 varchar
列,如:粤BDM7709
。 vin_template
用于生成车架号类型特征的 varchar
列,如:1G1JC124627237595
。timestamp
或 timestamptz
。text
,varchar
,int8
中的其中一种。在 mxbench 中实现大量指标,多种数据类型,多个数据取值范围等的配置方式有以下两种。
DDL 文件中,创建表之后,通过为列添加注释:COMMENT ON COLUMN
来表达该列的用途。
CREATE EXTENSION IF NOT EXISTS matrixts;
ALTER EXTENSION matrixts UPDATE;
CREATE SCHEMA IF NOT EXISTS "public";
CREATE TABLE "public"."table1" (
tsss timestamp
, vinnn bigint
, lltt varchar(32)
, c_arb float8
, exttt json
)
USING mars2 WITH ( compress_threshold='1000', chunk_size='32' )
DISTRIBUTED BY (vinnn)
PARTITION BY RANGE(tsss) (
START ('2022-04-18 09:00:00')
END ('2022-04-19 09:00:06')
EVERY ('10800 second'),
DEFAULT PARTITION default_prt
);
CREATE INDEX IF NOT EXISTS "idx_table1" ON "public"."table1"
USING mars2_btree(
vinnn
, tsss);
COMMENT ON COLUMN table1.lltt is '{"name": "plate_template"}';
COMMENT ON COLUMN table1.c_arb is '{"min": 3.5, "max": 5}';
COMMENT ON COLUMN table1.exttt is '{"is-ext": true, "columns-descriptions": [{"type": "float8", "count": 1, "comment": {"min": 3, "max": 4}},{"type": "float4", "count": 3, "comment": {"min": 2, "max": 3}}]}';
示例配置如上,COMMENT
全部为 JSON
格式字符串,说明:
lltt
列是 varchar
类型。示例中我们用 COMMENT
标出:name=license_template
,则会为 lltt
生成车牌号类型的数据。c_arb
列是 float8
类型,根据 COMMENT
,会生成 3.5 ~ 5 范围的随机数据。table1.exttt
列是 JSON
类型,其 COMMENT
为:is-ext=true
, 意为它被标注成了扩展指标列,其中可能包含多个简单指标。查看简单指标有两种方式:columns-descriptions
,则读取 Global
类别中的 total-metrics-count
和 metrics-type
两个参数。total-metrics-count
的配置需大于等于 简单指标列总数 + 3
,即扩展列至少含 3
个指标,否则会产生报错信息。columns-descriptions
, 且为合法 json array
字符串,则 Global
类别中的 total-metrics-count
和 metrics-type
两个参数会失效。你需要通过 columns-descriptions
参数了解指标数量。示例如下:[
{"type": "float8", "count": 1, "comment": {"min": 3, "max": 4}},
{"type": "float4", "count": 3, "comment": {"min": 2, "max": 3}},
]
因此,这个扩展列中有 1 个 float8
类型的指标以及 3 个 float4
类型的指标。同时,也有取值范围的限制。
在此部分,你可以复用上述的扩展列的 columns-description
语法,使 Global 模块下的 metrics-descriptions
接受一个字符串类型的参数。示例如下:
[global]
table-name = "table1"
metrics-descriptions = """[
{"type": "float8", "count": 1000, "comment": {"min": 3, "max": 4}},
{"type": "float4", "count": 3, "comment": {"min": 2, "max": 3}}
]"""
此参数的描述意为除固定列(第一列、第二列)不计入指标计算外,表 table1
中还包含 1000 个 float8
类型的指标,3 个 float4
类型的指标,总指标 1003 个,共 1005 列,超过了数据表的列数量上限(1000 列)。
因此按照 YMatrix 逻辑,便会有 6 个指标被安排在 JSON
类型的扩展列中。这样就只有 997 个简单指标 和 2 个固定列,以及 1 个扩展列(包含多个指标的列),刚好共计 1000 列,又重新回到数据表的支持范围之内。
注意!
你也可以不指定--metrics-descriptions
参数,以Global
类别中的--total-metrics-count
和--metrics-type
参数为替代使用。
直接输入定制化查询语句无法根据本次生成数据的特征来设置 SELECT、WHERE 语句中的某些数值,因此查询测试的效果有限。利用组合式查询语句则可以解决这一问题。
{
// 该条查询语句的名称
"name": "QUERY_NAME",
// SELECT 后的语句
"projections": {"use-raw-expression": true, "expression": "*"},
// SELECT FROM 后的表达式
"from": {"use-relation-identifier": true, "relation-identifier": "sub-relation-identifier"},
// 设备标识列相关 WHERE 语句中的表达式
"device-predicate": {"count": 2, "is-random": ture},
// 时间戳列相关 WHERE 语句中的表达式
"ts-predicate": {"start": "2022-05-05 01:04:10", "end": "2022-05-05 01:04:10"},
// 用户指标相关 WHERE 语句中的表达式
"metrics-predicate": {"use-raw-expression": true, "expression": "m1>=37.5"},
// GROUP BY 语句相关表达式
"group-by": {"use-raw-expression": true, "expression": "device_column_name,ts"},
// ORDER BY 语句相关表达式
"order-by": {"user-raw-expression": true, "": "s desc"},
// LIMIT 语句相关表达式
"limit": 3
},
SELECT
后面的表达式,可以是对所有字段的查询 “*”
,也可以是投影查询其中的部分字段。JSON
类型的配置。raw-expression
:{"use-raw-expression": true, "expression": "*"}
FROM
后面的表达式。Global
类别里面配置的 table-name
,等价于:{
"use-relation-identifier": true,
"relation-identifier": "table-name-in-global-config",
}
直接使用数据表的名字:
{
"use-relation-identifier": true,
"relation-identifier": "device_signal_mars2",
}
使用另一个数据表阐述:
{
"relation-statement":
{
"projections": {"use-raw-expression": true, "expression": "device_column_name,max(m1) as mp, min(m2), count(m1), avg(m3)"},
"device-predicate": {"count": 17, "is-random": true},
"ts-predicate": {"start": "2022-05-05 00:00:00", "end": "2022-05-06 00:00:00"},
"group-by": {"use-raw-expression": true, "expression": "device_column_name"}
}
}
JSON
类型的配置。WHERE <device_column_name> IN (<random_device_id1>, <random_device_id2>)
。{
"count": 2,
"is-random": false
}
若 n = 1,则会解释为等值查询,以下配置生成:WHERE <device_column_name>=<random_device_id>
。
{
"count": 1,
"is-random": false
}
使用 raw-expression
: "expression" 后的字符串直接出现在 WHERE
后。和其他 predicates 是 "AND" 的关系。
{
"use-raw-expression": true,
"expression": "device_column_name IN (1234, 4321)"
}
JSON
类型的配置。{
"is-random": true,
"duration": 3600
}
设置起止时间:假设时间戳字段名为 ts
,则会生成 WHERE ts >= '2022-07-15 18:07:00' AND ts <= '2022-07-15 18:31:17'
的表达式。
{
"start": "2022-07-15 18:07:00",
"end": "2022-07-15 18:31:17",
}
等值查询:WHERE ts = '2022-07-15 18:07:00'
。
{
"start": "2022-07-15 18:07:00",
"end": "2022-07-15 18:07:00",
}
开区间查询:WHERE ts >= '2022-07-15 18:07:00' AND ts < '2022-07-15 18:31:17'
。
{
"start": "2022-07-15 18:07:00",
"end": "2022-07-15 18:07:00",
"end-exclusive": true
}
为时间戳字段设置 alias:WHERE tttt >= '2022-07-15 18:07:00' AND tttt < '2022-07-15 18:31:17'
。
{
"has-alias": true,
"alias": "tttt",
"start": "2022-07-15 18:07:00",
"end": "2022-07-15 18:07:00",
"end-exclusive": true
}
使用 raw-expression
:"expression" 后的字符串直接出现在 WHERE
后。和其 predicates 是 "AND" 的关系。
{
"use-raw-expression": true,
"expression": "ts='2022-07-16 10:31:17'"
}
JSON
类型的配置。raw-expression
:"expression" 后的字符串直接出现在 WHERE
后。和其他 predicates 是 "AND" 的关系。{
"use-raw-expression": true,
"expression": "m1>=37.5"
}
GROUP BY
语句,接受一个 JSON
类型的配置。GROUP BY
语句。raw-expression
:{
"use-raw-expression": true,
"expression": "device_column_name,ts"
}
ORDER BY
语句,接受一个 JSON
类型的配置。ORDER BY
语句。raw-expression
:{
"user-raw-expression": true,
"expression": "s desc"
}
注意!
MatrixBench 完整的命令行参数信息请见 MatrixBench 命令行参数;MatrixBench 进度信息与统计报告详解请见 MatrixBench 理解进度信息与统计报告。