Doris半结构化数据分析(倒排索引使用)快速入门

news2024/11/6 13:34:23

在这里插入图片描述

1. 背景

Apache Doris2.0 基于Apache Doris向量化MPP引擎,增加了倒排索引和半结构化JSON数据支持,更好地满足日志存储、检索、分析需求。与基于ES的日志存储方案相比,有如下优势:

  1. 性价比提升:存储成本降低50%以上,写入速度提升2倍以上
  2. 支持复杂数据分析:支持多种JOIN、复杂子查询、Hive 数据湖外表,支持标准SQL
  3. 数据管理更简单:支持标准SQL DDL schema change,支持按天/小时等周期自动管理partition

2. 安装部署:

  1. 软件下载地址:https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-2.0.0-alpha1-bin-x86_64.tar.xz
  2. 安装过程参照:https://doris.apache.org/zh-CN/docs/get-starting/

3. 快速入门

第一部分:倒排索引创建和数据入库

  1. 建库建表
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE `httplogs` (
  `@timestamp` int(11) NULL COMMENT "",
  `clientip` varchar(20) NULL COMMENT "",
  `request` text NULL COMMENT "",
  `status` int(11) NULL COMMENT "",
  `size` int(11) NULL COMMENT "",
  INDEX size_idx (`size`) USING INVERTED COMMENT '',
  INDEX status_idx (`status`) USING INVERTED COMMENT '',
  INDEX clientip_idx (`clientip`) USING INVERTED(NONE) COMMENT '',
  INDEX request_idx (`request`) USING INVERTED COMMENT '',
    ...
) ENGINE=OLAP
DUPLICATE KEY(`@timestamp`)
COMMENT "OLAP"
PARTITION BY RANGE(`@timestamp`)
(PARTITION p181998 VALUES [("-2147483648"), ("894225602")),
PARTITION p191998 VALUES [("894225602"), ("894830402")),
PARTITION p201998 VALUES [("894830402"), ("895435201")),
PARTITION p211998 VALUES [("895435201"), ("896040001")),
PARTITION p221998 VALUES [("896040001"), ("896644801")),
PARTITION p231998 VALUES [("896644801"), ("897249601")),
PARTITION p241998 VALUES [("897249601"), ("897854300")),
PARTITION p251998 VALUES [("897854300"), ("2147483647")))
DISTRIBUTED BY HASH(`@timestamp`) BUCKETS 12
PROPERTIES (
"in_memory" = "false",
"storage_format" = "V2",
"compression" = "ZSTD"
)

说明:建表语句中的 …是特殊语法,用于声明可以自动感知数据结构的变化。

  1. 执行 vim logfile.json ,并在文件中输入如下数据

{"@timestamp": 893964617, "clientip":"40.135.0.0", "request": "GET /images/hm_bg.jpg HTTP/1.0", "status": 200, "size": 24736}
{"@timestamp": 893964653, "clientip":"232.0.0.0", "request": "GET /images/hm_bg.jpg HTTP/1.0", "status": 200, "size": 24736}
{"@timestamp": 893964672, "clientip":"26.1.0.0", "request": "GET /images/hm_bg.jpg HTTP/1.0", "status": 200, "size": 24736}
{"@timestamp": 893964679, "clientip":"247.37.0.0", "request": "GET /french/splash_inet.html HTTP/1.0", "status": 200, "size": 3781}
  1. 数据导入
curl --location-trusted -u root: -H "format: json" -H "auto_commit:true"   -H "enable_vectorized_engine:true" -H "read_json_by_line:true" -T logfile.json  http://127.0.0.1:8030/api/testdb/httplogs/_stream_load
  1. 数据验证
mysql> select * from httplogs;
+------------+------------+---------------------------------------+--------+-------+
| @timestamp | clientip   | request                               | status | size  |
+------------+------------+---------------------------------------+--------+-------+
|  893964653 | 232.0.0.0  | GET /images/hm_bg.jpg HTTP/1.0        |    200 | 24736 |
|  893964679 | 247.37.0.0 | GET /french/splash_inet.html HTTP/1.0 |    200 |  3781 |
|  893964617 | 40.135.0.0 | GET /images/hm_bg.jpg HTTP/1.0        |    200 | 24736 |
|  893964672 | 26.1.0.0   | GET /images/hm_bg.jpg HTTP/1.0        |    200 | 24736 |
+------------+------------+---------------------------------------+--------+-------+
4 rows in set (0.02 sec)

mysql> 

第二部分:dynamic table测试

  1. dynamic table验证(变更数据准备,在JSON数据中添加一个log_type字段,该字段之前的表结构没有)

vim logfile-1.json


{"@timestamp": 893964617,"log_type":"error", "clientip":"40.135.0.0", "request": "GET /images/hm_bg.jpg HTTP/1.0", "status": 200, "size": 24736}
  1. 新数据入库
curl --location-trusted -u root: -H "format: json" -H "auto_commit:true"   -H "enable_vectorized_engine:true" -H "read_json_by_line:true" -T logfile-1.json  http://127.0.0.1:8030/api/testdb/httplogs/_stream_load
  1. 数据验证
mysql> select * from httplogs;
+------------+------------+---------------------------------------+--------+-------+----------+
| @timestamp | clientip   | request                               | status | size  | log_type |
+------------+------------+---------------------------------------+--------+-------+----------+
|  893964653 | 232.0.0.0  | GET /images/hm_bg.jpg HTTP/1.0        |    200 | 24736 | NULL     |
|  893964679 | 247.37.0.0 | GET /french/splash_inet.html HTTP/1.0 |    200 |  3781 | NULL     |
|  893964617 | 40.135.0.0 | GET /images/hm_bg.jpg HTTP/1.0        |    200 | 24736 | NULL     |
|  893964617 | 40.135.0.0 | GET /images/hm_bg.jpg HTTP/1.0        |    200 | 24736 | error    |
|  893964672 | 26.1.0.0   | GET /images/hm_bg.jpg HTTP/1.0        |    200 | 24736 | NULL     |
+------------+------------+---------------------------------------+--------+-------+----------+
5 rows in set (0.02 sec)

mysql> 

可以看下新增的log_type字段已经被自动识别。

第三部分:倒排索引查询

  1. MACTH_ALL函数验证:整个词匹配。例如"images"字符串可以在”GET /images/hm_bg.jpg HTTP/1.0“字符串中匹配到,但是”images test “无法在”GET /images/hm_bg.jpg HTTP/1.0“字符串中匹配到。
mysql> select * from httplogs where request MATCH_ALL 'images ';
+------------+------------+--------------------------------+--------+-------+----------+
| @timestamp | clientip   | request                        | status | size  | log_type |
+------------+------------+--------------------------------+--------+-------+----------+
|  893964653 | 232.0.0.0  | GET /images/hm_bg.jpg HTTP/1.0 |    200 | 24736 | NULL     |
|  893964617 | 40.135.0.0 | GET /images/hm_bg.jpg HTTP/1.0 |    200 | 24736 | NULL     |
|  893964617 | 40.135.0.0 | GET /images/hm_bg.jpg HTTP/1.0 |    200 | 24736 | error    |
|  893964672 | 26.1.0.0   | GET /images/hm_bg.jpg HTTP/1.0 |    200 | 24736 | NULL     |
+------------+------------+--------------------------------+--------+-------+----------+
4 rows in set (0.01 sec)

mysql> 
mysql> select * from httplogs where request MATCH_ALL 'images test ';
Empty set (0.01 sec)

mysql> 
  1. MATCH_ANY 函数验证:任意词匹配。例如"images"字符串可以在”GET /images/hm_bg.jpg HTTP/1.0“字符串中匹配到,但是”images test “也可以在”GET /images/hm_bg.jpg HTTP/1.0“字符串中匹配到。
mysql> select * from httplogs where request MATCH_ANY 'images test ';
+------------+------------+--------------------------------+--------+-------+----------+
| @timestamp | clientip   | request                        | status | size  | log_type |
+------------+------------+--------------------------------+--------+-------+----------+
|  893964653 | 232.0.0.0  | GET /images/hm_bg.jpg HTTP/1.0 |    200 | 24736 | NULL     |
|  893964617 | 40.135.0.0 | GET /images/hm_bg.jpg HTTP/1.0 |    200 | 24736 | NULL     |
|  893964617 | 40.135.0.0 | GET /images/hm_bg.jpg HTTP/1.0 |    200 | 24736 | error    |
|  893964672 | 26.1.0.0   | GET /images/hm_bg.jpg HTTP/1.0 |    200 | 24736 | NULL     |
+------------+------------+--------------------------------+--------+-------+----------+
4 rows in set (0.01 sec)

mysql> 
mysql> select * from httplogs where request MATCH 'images test ';
+------------+------------+--------------------------------+--------+-------+----------+
| @timestamp | clientip   | request                        | status | size  | log_type |
+------------+------------+--------------------------------+--------+-------+----------+
|  893964617 | 40.135.0.0 | GET /images/hm_bg.jpg HTTP/1.0 |    200 | 24736 | NULL     |
|  893964617 | 40.135.0.0 | GET /images/hm_bg.jpg HTTP/1.0 |    200 | 24736 | error    |
|  893964672 | 26.1.0.0   | GET /images/hm_bg.jpg HTTP/1.0 |    200 | 24736 | NULL     |
|  893964653 | 232.0.0.0  | GET /images/hm_bg.jpg HTTP/1.0 |    200 | 24736 | NULL     |
+------------+------------+--------------------------------+--------+-------+----------+
4 rows in set (0.02 sec)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/625168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

‍☠️stm32Cubemx欠采样原理讲解与实现 采集高频信号

🏴‍☠️STM32Cubemx ADCTIMDMA欠采样采集高频信号 本文主要讲解ADC借助欠采样采集高频信号,比如使用100k左右的采样率去采集1M的信号。 所需工具: 开发板:STM32F103RCT6STM32CubeMXIDE: Keil-MDK 相关文章: STM32HAL ADCTIM…

2核4G轻量服务器阿里云和腾讯云区别对比

阿里云轻量应用服务器2核4G4M带宽297.98元12个月,腾讯云轻量2核4G5M服务器168元一年,628元3年,2核4G轻量应用服务器阿里云和腾讯云怎么选择?哪个性能比较好?阿腾云分享轻量应用服务器2核4G配置阿里云和腾讯云CPU、带宽…

打破互联网思维,我们该如何思考?

在会议上,你是否流程规范讲到一半突然卡逻辑、测分会议疯狂输出周围却一脸问号?提交缺陷时,你又是否被告知看不懂,要求补充信息?受挫时捶胸顿足“表达可太太太重要了,难道我天生脑子转的就比别人慢&#xf…

基于深度学习的高精度红外行人车辆检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度红外行人车辆检测识别系统可用于日常生活中或野外来检测与定位红外行人车辆目标,利用深度学习算法可实现图片、视频、摄像头等方式的红外行人车辆目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系…

围绕中国旅行商问题完成综合性实验报告 旅行商问题

题目:围绕中国旅行商问题完成综合性实验报告 旅行商问题(TSP问题)。 假设有一个旅行商人要拜访全国31个省会城市,它需要选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。…

【裸机驱动LED】使用C代码驱动LED(三)—— C代码编写篇

前面只使用了汇编代码来驱动LED,但是对于后续一些比较复杂的逻辑,使用汇编代码编写驱动的难度太大,因此,这次我们要使用C语言代码来驱动LED。 除了C代码外,依然需要编写汇编代码,在没有OS的情况下&#xf…

基于黄金莱维引导机制的阿基米德优化算法(MSAOA)-附代码

基于黄金莱维引导机制的阿基米德优化算法(MSAOA) 文章目录 基于黄金莱维引导机制的阿基米德优化算法(MSAOA)1.阿基米德优化算法2. 改进阿基米德优化算法2.1 变区间初始化策略2.2 黄金莱维引导机制2.3 自适应波长算子 3.实验结果4.参考文献5.Matlab代码6.Python代码 摘要&#x…

什么是接口测试?怎么做接口测试?Apifox 教你做!

目录 前言: 一、什么是接口测试? 二、接口测试的步骤 三、接口测试工具的选择 四、总结 前言: 随着互联网和移动互联网的发展,企业面对着越来越庞大和复杂的系统和数据接口。在这种情况下,手动测试不再能够满足测…

修复uproject右键菜单完全解决方案办法

在你电脑中找到UnrealVersionSelector通常和epiclauncher是同一个根目录 epiclauncher路径是:D:\MyEpic\Epic Games\Launcher\Portal\Binaries\Win32\EpicGamesLauncher.exe UnrealVersionSelector.exe的路径是:D:\\MyEpic\\Epic Games\\Launcher\\Engine\\Binaries\\Win64\\Un…

探索新科技:3DVR电子楼书引领视觉体验革命

导语: 近年来,科技的迅猛发展引领着我们进入一个全新的数字化时代。在这个时代,虚拟现实和电子书成为了许多领域的热门话题。 接下来,让我们一起探索一个引人注目的技术创新,将虚拟现实和电子书完美结合的3DVR电子楼书…

python基本语法知识(二)

杂项 如果一个制表符/t不能对齐,可以多加几个; 只有将字典转换为字符串的时候才会保留字典的value,转成集合、列表、元组、都会丢失value 函数 例子1: str1 "hello world" # 函数定义 def my_len(data):count 0f…

基于 Ray 的大规模离线推理

本文整理自字节跳动基础架构资深研发工程师王万兴在火山引擎开发者社区 Meetup 中的分享。大模型离线推理,是指在具有数十亿或数千亿参数的大规模模型上进行分布式推理的过程。相较于常规模型推理,在模型切分、数据处理和数据流、提升 GPU 利用率方面面临…

ROCK PI S音频开发(一)系统准备

1、连接WIFI sudo nmcli r wifi on sudo nmcli dev wifi sudo nmcli dev wifi connect "SSID" password "PASSWORD" 2、更新源 sudo apt-get update sudo apt-get install git wget export DISTROfocal-stable wget -O - apt.radxa.com/$DISTRO/publ…

PHP快速实战20-PHP7中的垃圾回收机制与原理讲解

文章目录 前言PHP垃圾回收实现的原理垃圾回收机制引用计数循环垃圾收集 实现原理 总结 前言 本文已收录于PHP全栈系列专栏:PHP快速入门与实战 在计算机程序中,垃圾回收指的是一种自动管理内存的技术。在程序执行过程中,分配给它的内存会随着…

2023年软件测试趋势?测试人的发展前景?“我“到底该如何走...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 现在开始学习软件…

NetSuite 中国财务常用报表功能包

目录 1.致谢 2.功能说明 2.1 概述 2.2 报表说明 3.安装 4.操作指南 4.1 CLR_资产负债表 4.2 CLR_资产负债表(期初/发生/结余) 4.3 CLR_利润表 4.4 CLR_利润表季报 4.5 CLR_现金流量表 4.6 CLR_现金流量表季报 4.7 CLR_总账 4.8 CLR_序时账…

《消息队列高手课》课程学习笔记(八)

如何实现高性能的异步网络传输? **异步与同步模型最大的区别是,同步模型会阻塞线程等待资源,而异步模型不会阻塞线程,它是等资源准备好后,再通知业务代码来完成后续的资源处理逻辑。**这种异步设计的方法,…

深入理解深度学习——注意力机制(Attention Mechanism):注意力评分函数(Attention Scoring Function)

分类目录:《深入理解深度学习》总目录 《深入理解深度学习——注意力机制(Attention Mechanism):注意力汇聚与Nadaraya-Watson 核回归》中使用了高斯核来对查询和键之间的关系建模。式中的高斯核指数部分可以视为注意力评分函数&a…

Spark笔记

DBeaver数据库连接器 Download | DBeaver Community shell命令 bin/spark-submit –class cn.edu.ncut.sparkcore.wordcount.Test03_WordCount_cluster –deploy-mode cluster –master yarn ./sparkcore-1.0-SNAPSHOT.jar 10 血缘关系查看 toDebugString()&#xff1a…

深入篇【Linux】学习必备:【文本编辑器】vim的基本介绍及使用

深入篇【Linux】学习必备:【文本编辑器】vim的基本介绍及使用 Ⅰ.vim基本简介Ⅱ.vim的基本操作⏰【命令模式下】1.移动光标2.复制删除粘贴3.替换更改4.撤销指令 ⏰【底行模式下】1.查找字符2.保存退出3.查看所有模式 Ⅲ.简单vim配置1.配置文件位置2.使用插件 Ⅰ.vim…