1. 动态表构功能概述
半结构化数据,是介于结构化和非结构化之间的数据。和普通纯文本相比,半结构化数据具有一定的结构性。和结构化数据相比,其结构变化复杂,我们又不能方便的使用结构化的方式去描述它。
半结构的数据中通常即包括数据本身,也包括数据结构的描述。比如场景的有JSON、XML,他们即包含数据,也包含数据的描述(元数据信息),具体半结构化特征如下:
- 数据结构自描述:结构与数据相融合在一起,一条数据即包括“元数据”也包括“数据”。
- 数据结构复:数据结构难以纳入现有的各种描述框架,实际应用中不易进行清晰的理解与把握。
- 数据结构描述的动态性:数据变化通常会导致结构模式变化,整体上具有动态的结构模式。
相对于结构化数据,半结构化数据的构成更为复杂和不确定,从而也具有更高的灵活性,能够适应更为广泛的应用需求。
2. Doris 半结使用场景
- 使用动态表解决数据结构复杂多变问题
- 动态表可以对实时接入的JSON数据进行解析,并根据数据中的scheme信息对SelectDB表中的表结构进行动态维护。动态Scheme维护有如下原则:
- 导入的数据类型只支持JSON
- 动态Scheme Change支持添加列
- 支持字段自动多层级展开
- 支持严格模式
3. Doris动态表使用实战
- 按照如下表结构创建一个表:
CREATE TABLE `httplogs` (
`@timestamp` int(11) NULL COMMENT "",
`clientip` varchar(20) NULL COMMENT "",
`request` text NULL COMMENT "",
...
) ENGINE=OLAP
DUPLICATE KEY(`@timestamp`,`clientip`)
PARTITION BY RANGE(`@timestamp`)()
DISTRIBUTED BY HASH(`clientip`) BUCKETS 12
- 写入JSON数据
向Doris中写入如下1条数据:
{"@timestamp":1676012713,"clientip":"192.168.1.1","request":"test"}
- 添加uuid 列:
{
"@timestamp":1676012713,
"clientip":"192.168.1.1",
"request":"test",
"uuid":1
}
将上面数据写入Doris,Doris发现JSON数据比之前多了一列uuid,该列的数据类型为为int。此时Doris会自动将一个字段名称为uuid,字段类型为int的列维护到Doris表结构中。因此表结构变为:文章来源:https://www.toymoban.com/news/detail-476478.html
CREATE TABLE `httplogs` (
`@timestamp` int(11) NULL COMMENT "",
`clientip` varchar(20) NULL COMMENT "",
`request` text NULL COMMENT "",
`uuid` int COMMENT ""
) ENGINE=OLAP
DUPLICATE KEY(`@timestamp`,`clientip`)
PARTITION BY RANGE(`@timestamp`)()
DISTRIBUTED BY HASH(`clientip`) BUCKETS 12
- 多层嵌套数据自动展开:加入如下复杂结构数据
{
"@timestamp":1676012713,
"clientip":"192.168.1.1",
"request":"test",
"uuid":"2",
"response":{
"status":0,
"msg":"",
"data":{
"apraise":"0",
"favorite":"0",
"comments":"2",
"pv":202
}
}
}
写入上述数据,SelectDB会自动将response列以及其中的JSON数据进一步展开并进行元数据的维护。修改后的表结构为:文章来源地址https://www.toymoban.com/news/detail-476478.html
CREATE TABLE `httplogs` (
`@timestamp` int(11) NULL,
`clientip` varchar(20) NULL,
`request` text NULL,
`uuid` int(11) NULL COMMENT 'auto change 2023-02-14T15:53:10+08:00[Asia/Shanghai]',
`response.status` int(11) NULL COMMENT 'auto change 2023-02-14T15:56:41+08:00[Asia/Shanghai]',
`response.msg` text NULL COMMENT 'auto change 2023-02-14T15:56:41+08:00[Asia/Shanghai]',
`response.data.apraise` text NULL COMMENT 'auto change 2023-02-14T15:56:41+08:00[Asia/Shanghai]',
`response.data.favorite` text NULL COMMENT 'auto change 2023-02-14T15:56:41+08:00[Asia/Shanghai]',
`response.data.comments` text NULL COMMENT 'auto change 2023-02-14T15:56:41+08:00[Asia/Shanghai]',
`response.data.pv` int(11) NULL COMMENT 'auto change 2023-02-14T15:56:41+08:00[Asia/Shanghai]'
) ENGINE=OLAP
DUPLICATE KEY(`@timestamp`, `clientip`)
COMMENT 'OLAP'
DISTRIBUTED BY HASH(`clientip`) BUCKETS 12
PROPERTIES (
"persistent" = "false"
);
- 数据访问与查询:多级嵌套子JSON访问使用点号(.)隔开,字段上需要加`,例如:
select * from httplogs where `response.data.pv` ="202";
到了这里,关于Doris动态表使用快速入门实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!