当前位置: 首页 > news >正文

高性能实时分析数据库:Apache Druid 查询数据 Query data

文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。

Apache Druid
Druid 是一款高性能实时分析数据库,主要价值在于缩短洞察和行动的时间。Druid 专为需要快速查询和数据采集的工作流而设计。Druid 擅长于支持 UI、运行操作型(即席)查询或处理高并发性。您可以将 Druid 视为适用于各种用例的数据仓库的开源替代方案。

查询数据

Query data

本教程演示如何使用 SQL 查询 Apache Druid 中的数据。

它假设你已经完成 Quickstart 或以下某个教程,因为我们将查询你在跟随其中一个教程时创建的 datasource:

  • Load a file
  • Load stream data from Kafka
  • Load a file using Hadoop

运行 Druid SQL 查询有多种方式:通过 web console、使用命令行工具以及通过 HTTP 提交查询。我们将逐一介绍。

从 web console 查询 SQL

web console 包含一个视图,可帮助你更轻松地构建和测试查询,并查看其结果。

  1. 启动 Druid 集群(如果尚未运行),然后在浏览器中打开 web console。

  2. 点击标题栏中的 Query 以打开 Query 视图:
    在这里插入图片描述
    你可以始终在编辑窗格中直接编写查询,但 Query 视图也提供了帮助你构造 SQL 查询的功能,我们将使用它来生成一个起始查询。

  3. 在左窗格中展开 wikipedia datasource 树。我们将为 page 维度创建查询。

  4. 点击 page,然后从菜单中选择 Show:page
    在这里插入图片描述
    一个 SELECT 查询会出现在查询编辑窗格中并立即运行。然而,在这种情况下,查询未返回数据,因为默认情况下查询过滤最近一天的数据,而我们的数据远早于该时间。让我们移除该过滤条件。

  5. 点击 Run 运行查询。

    你现在应该看到两列数据:页面名称和计数:
    在这里插入图片描述
    注意,结果默认在 console 中限制为大约一百行,这是由于 Smart query limit 功能。这有助于用户避免意外运行返回过多数据的查询,可能使系统不堪重负。

  6. 让我们直接编辑查询,并在编辑器中查看更多查询构建功能。点击查询编辑窗格并进行以下更改:

    1. 在第一列 "page" 后添加一行,开始输入新列名 "countryName"。注意,自动补全菜单会建议列名、函数、关键字等。选择 “countryName”,并将其添加到 GROUP BY 子句中,可以通过名称或通过其位置引用 2

    2. 为了可读性,将 Count 列名替换为 Edits,因为 COUNT() 函数实际返回的是该页面的编辑次数。在 ORDER BY 子句中也做同样的列名更改。

      COUNT() 函数是 Druid SQL 查询中可用的众多函数之一。你可以将鼠标悬停在自动补全菜单中的函数名称上,查看函数的简要描述。此外,你可以在 Druid 文档中找到更多信息;例如,COUNT() 函数记录在 Aggregation functions 中。

    查询现在应为:

    SELECT"page","countryName",COUNT(*) AS "Edits"
    FROM "wikipedia"
    GROUP BY 1, 2
    ORDER BY "Edits" DESC
    

    当你再次运行查询时,注意到我们获得了新的维度 countryName,但对于大多数行,其值为 null。让我们仅显示具有 countryName 值的行。

  7. 点击左窗格中的 countryName 维度,并选择第一个过滤选项。这不是我们想要的,但我们将手动编辑它。新的 WHERE 子句应出现在你的查询中。

  8. 修改 WHERE 子句以排除没有 countryName 值的结果:

    WHERE "countryName" IS NOT NULL
    

    再次运行查询。你现在应该看到按国家排序的顶部编辑:
    在这里插入图片描述

  9. 在底层,每个 Druid SQL 查询在运行前都会被翻译成基于 JSON 的 Druid native query 格式。你可以通过点击 ... 并选择 Explain SQL Query 来查看此查询的 native query。

    虽然你可以将 Druid SQL 用于大多数目的,但熟悉 native query 对于编写复杂查询和排查性能问题非常有用。更多信息请参见 Native queries。
    在这里插入图片描述
    另一种查看解释计划的方法是在查询前添加 EXPLAIN PLAN FOR,如下所示:

EXPLAIN PLAN FOR
SELECT"page","countryName",COUNT(*) AS "Edits"
FROM "wikipedia"
WHERE "countryName" IS NOT NULL
GROUP BY 1, 2
ORDER BY "Edits" DESC

这在通过命令行或 HTTP 运行查询时特别有用。

  1. 最后,点击 ... 并选择 Edit context 以查看如何添加控制查询执行的附加参数。在字段中,按 Context flags 所述,以 JSON 键值对形式输入查询上下文选项。

就是这样!我们使用 web console 内置的一些查询构建功能构建了一个简单查询。以下部分提供了更多可尝试的示例查询。

有关如何使用 Druid SQL HTTP API 的示例,请参见 Query SQL over HTTP。

更多 Druid SQL 示例

尝试以下查询以了解更多 Druid SQL 技巧:

Query over time

SELECT FLOOR(__time to HOUR) AS HourTime, SUM(deleted) AS LinesDeleted
FROM wikipedia WHERE TIME_IN_INTERVAL("__time", '2016-06-27/2016-06-28')
GROUP BY 1

在这里插入图片描述

General group by

SELECT channel, page, SUM(added)
FROM wikipedia WHERE TIME_IN_INTERVAL("__time", '2016-06-27/2016-06-28')
GROUP BY channel, page
ORDER BY SUM(added) DESC

在这里插入图片描述

通过 HTTP 查询 SQL

你可以 直接通过 HTTP 向 Druid Broker 提交 native 查询。请求体应为 JSON 对象,其中键 query 的值为查询文本:

{"query": "SELECT page, COUNT(*) AS Edits FROM wikipedia WHERE TIME_IN_INTERVAL(\"__time\", '2016-06-27/2016-06-28') GROUP BY page ORDER BY Edits DESC LIMIT 10"
}

教程包中包含一个示例文件,位于 quickstart/tutorial/wikipedia-top-pages-sql.json,其中包含上述 SQL 查询。让我们将该查询提交给 Druid Broker:

curl -X 'POST' -H 'Content-Type:application/json' -d @quickstart/tutorial/wikipedia-top-pages-sql.json http://localhost:8888/druid/v2/sql

应返回以下结果:

[{"page": "Copa América Centenario","Edits": 29},{"page": "User:Cyde/List of candidates for speedy deletion/Subpage","Edits": 16},{"page": "Wikipedia:Administrators' noticeboard/Incidents","Edits": 16},{"page": "2016 Wimbledon Championships – Men's Singles","Edits": 15},{"page": "Wikipedia:Administrator intervention against vandalism","Edits": 15},{"page": "Wikipedia:Vandalismusmeldung","Edits": 15},{"page": "The Winds of Winter (Game of Thrones)","Edits": 12},{"page": "ولاية الجزائر","Edits": 12},{"page": "Copa América","Edits": 10},{"page": "Lionel Messi","Edits": 10}
]

延伸阅读

有关使用 Druid SQL 查询的更多信息,请参见 Druid SQL documentation。

有关 Druid native 查询的更多信息,请参见 Queries documentation。

风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。

http://www.lryc.cn/news/607884.html

相关文章:

  • RK3399 启动流程 --从复位到系统加载
  • 变频器实习DAY20 测试经验总结
  • .NET 中,Process.Responding 属性用于检查进程的用户界面是否正在响应
  • 【嵌入式汇编基础】-ARM架构基础(三)
  • u-boot启动过程(NXP6ULL)
  • 网络常识-子网掩码
  • 音视频学习(四十四):音频处理流程
  • Oracle 11g RAC集群部署手册(三)
  • PHP面向对象编程与数据库操作完全指南-上
  • Redis 核心概念、命令详解与应用实践:从基础到分布式集成
  • C语言字符函数和字符串函数全解析:从使用到模拟实现
  • 力扣面试150题--回文数
  • 2411. 按位或最大的最小子数组长度
  • 历史数据分析——中青旅
  • OneCode 3.0智能分页拦截器深度解析:从拦截机制到性能优化
  • 仿muduo库实现高并发服务器
  • flink写paimon表的过程解析
  • 华为核心交换机S7700的内存OID
  • Unity_数据持久化_XML基础
  • MATLAB科研数据可视化技术
  • LPVIMO-SAM:基于多传感器紧耦合的高精度鲁棒SLAM系统
  • Noob靶机
  • VueX进阶Pinia
  • VScode对Ubuntu用root账号进行SSH远程连接开发
  • 技巧|SwanLab记录混淆矩阵攻略
  • 解决忘记修改配置密码而无法连接nacos的问题
  • DockerFile文件执行docker bulid自动构建镜像
  • Android 15 限制APK包手动安装但不限制自升级的实现方案
  • 20250802让飞凌OK3576-C开发板在飞凌的Android14下【rk3576_u选项】适配NXP的WIFIBT模块88W8987A的蓝牙
  • 【Android】通知