聚合计算nosql,聚合计算语法转sql

zabbix 可以用nosql来存储数据吗

做过Zabbix的同学都知道,Zabbix通过专用的Agent或者SNMP收集相关的监控数据,然后存储到数据库里面实时在前台展示。Zabbix监控数据主要分为以下两类:

南开网站建设公司创新互联,南开网站设计制作,有大型网站制作公司丰富经验。已为南开近1000家提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的南开做网站的公司定做!

历史数据:history相关表,从history_uint表里面可以查询到设备监控项目的最大,最小和平均值,即存储监控数据的原始数据。

趋势数据:trends相关表,趋势数据是经过Zabbix计算的数据,数据是从history_uint里面汇总的,从trends_uint可以查看到监控数据每小时最大,最小和平均值,即存储监控数据的汇总数据。

Zabbix可以通过两种方式获取历史数据:

1.通过Zabbix前台获取历史数据

通过Zabbix前台查看历史数据非常简单,可以通过Monitoring-Lastest data的方式查看。也可以点击右上角的As plain test按钮保存成文本文件。

2.通过前台获取的数据进行处理和二次查询有很多限制,因此可以通过SQL语句直接从后台DB查询数据。

首先大家应该熟悉SQL语句Select 常用用法:

SELECT [ALL | DISTINCT] Select_List [INTO [New_Table_name]

FROM { Table_name | View_name} [ [,{table2_name | view2_name}

[,…] ]

[ WHERE Serch_conditions ]

[ GROUP BY Group_by_list ]

[ HAVING Serch_conditions ]

[ ORDER BY Order_list [ASC| DEsC] ]

说明:

1)SELECT子句指定要查询的特定表中的列,它可以是*,表达式,列表等。

2)INTO子句指定要生成新的表。

3)FROM子句指定要查询的表或者视图。

4)WHERE子句用来限定查询的范围和条件。

5)GROUP BY子句指定分组查询子句。

6)HAVING子句用于指定分组子句的条件。

7)ORDER BY可以根据一个或者多个列来排序查询结果,在该子句中,既可以使用列名,也可以使用相对列号,ASC表示升序,DESC表示降序。

8)mysql聚合函数:sum(),count(),avg(),max(),avg()等都是聚合函数,当我们在用聚合函数的时候,一般都要用到GROUP BY 先进行分组,然后再进行聚合函数的运算。运算完后就要用到Having子句进行判断了,例如聚合函数的值是否大于某一个值等等。

sql聚合函数有哪些?

聚集函数

和大多数其它关系数据库产品一样,PostgreSQL

支持聚集函数。一个聚集函数从多个输入行中计算出一个结果。比如,我们有在一个行集合上计算

count(数目),

sum(总和),

avg(均值),

max(最大值),

min(最小值)的函数。

比如,我们可以用下面的语句找出所有低温中的最高温度:

SELECT

max(temp_lo)

FROM

weather;

max

-----

46

(1

row)如果我们想知道该读数发生在哪个城市,可能会用:

SELECT

city

FROM

weather

WHERE

temp_lo

=

max(temp_lo);

--

错!不过这个方法不能运转,因为聚集函数

max

不能用于

WHERE

子句中。存在这个限制是因为

WHERE

子句决定哪些行可以进入聚集阶段;因此它必需在聚集函数之前计算。不过,我们可以用其它方法实现这个目的;这里我们使用子查询:

SELECT

city

FROM

weather

WHERE

temp_lo

=

(SELECT

max(temp_lo)

FROM

weather);

city

---------------

San

Francisco

(1

row)这样做是可以的,因为子查询是一次独立的计算,它独立于外层查询计算自己的聚集。

聚集同样也常用于

GROUP

BY

子句。比如,我们可以获取每个城市低温的最高值:

SELECT

city,

max(temp_lo)

FROM

weather

GROUP

BY

city;

city

|

max

---------------+-----

Hayward

|

37

San

Francisco

|

46

(2

rows)这样每个城市一个输出。每个聚集结果都是在匹配该城市的行上面计算的。我们可以用

HAVING

过滤这些分组:

SELECT

city,

max(temp_lo)

FROM

weather

GROUP

BY

city

HAVING

max(temp_lo)

40;

city

|

max

---------+-----

Hayward

|

37

(1

row)这样就只给出那些

temp_lo

值曾经有低于

40

度的城市。最后,如果我们只关心那些名字以"S"开头的城市,我们可以用:

SELECT

city,

max(temp_lo)

FROM

weather

WHERE

city

LIKE

'S%'

GROUP

BY

city

HAVING

max(temp_lo)

40;语句中的

LIKE

执行模式匹配,在节9.7里有解释。

理解聚集和

SQL

WHERE

HAVING

子句之间的关系非常重要。WHERE

HAVING

的基本区别如下:WHERE

在分组和聚集计算之前选取输入行(它控制哪些行进入聚集计算),而

HAVING

在分组和聚集之后选取输出行。因此,WHERE

子句不能包含聚集函数;因为试图用聚集函数判断那些行将要输入给聚集运算是没有意义的。相反,HAVING

子句总是包含聚集函数。当然,你可以写不使用聚集的

HAVING

子句,但这样做没什么好处,因为同样的条件可以更有效地用于

WHERE

阶段。

在前面的例子里,我们可以在

WHERE

里应用城市名称限制,因为它不需要聚集。这样比在

HAVING

里增加限制更加高效,因为我们避免了为那些未通过

WHERE

检查的行进行分组和聚集计算。

sql聚合函数的应用

聚合函数对一组值执行计算,并返回单个值。除了

COUNT

以外,聚合函数都会忽略空值。聚合函数经常与

SELECT

语句的

GROUP

BY

子句一起使用。

所有聚合函数均为确定性函数。也就是说,只要使用一组特定输入值调用聚合函数,该函数总是返回相同的值。有关函数确定性的详细信息,请参阅确定性函数和不确定性函数。

聚合函数只能在以下位置作为表达式使用:

SELECT

语句的选择列表(子查询或外部查询)。

COMPUTE

COMPUTE

BY

子句。

HAVING

子句。

Transact-SQL

提供下列聚合函数:

AVG

MIN

CHECKSUM

SUM

CHECKSUM_AGG

STDEV

COUNT

STDEVP

COUNT_BIG

VAR

GROUPING

VARP

sql中常用的聚合函数有哪些

聚合函数是对一组值执行计算并返回单一的值的函数,它经常与SELECT语句的GROUP BY子句一同使用,SQL SERVER 中具体有哪些聚合函数呢?我们来一一看一下:

1. AVG 返回指定组中的平均值,空值被忽略。

例:select prd_no,avg(qty) from sales group by prd_no

2. COUNT 返回指定组中项目的数量。

例:select count(prd_no) from sales

3. MAX 返回指定数据的最大值。

例:select prd_no,max(qty) from sales group by prd_no

4. MIN 返回指定数据的最小值。

例:select prd_no,min(qty) from sales group by prd_no

5. SUM 返回指定数据的和,只能用于数字列,空值被忽略。

例:select prd_no,sum(qty) from sales group by prd_no

6. COUNT_BIG 返回指定组中的项目数量,与COUNT函数不同的是COUNT_BIG返回bigint值,而COUNT返回的是int值。

例:select count_big(prd_no) from sales

7. GROUPING 产生一个附加的列,当用CUBE或ROLLUP运算符添加行时,输出值为1.当所添加的行不是由CUBE或ROLLUP产生时,输出值为0.

例:select prd_no,sum(qty),grouping(prd_no) from sales group by prd_no with rollup

8. BINARY_CHECKSUM 返回对表中的行或表达式列表计算的二进制校验值,用于检测表中行的更改。

例:select prd_no,binary_checksum(qty) from sales group by prd_no

9. CHECKSUM_AGG 返回指定数据的校验值,空值被忽略。

例:select prd_no,checksum_agg(binary_checksum(*)) from sales group by prd_no

10. CHECKSUM 返回在表的行上或在表达式列表上计算的校验值,用于生成哈希索引。

11. STDEV 返回给定表达式中所有值的统计标准偏差。

例:select stdev(prd_no) from sales

12. STDEVP 返回给定表达式中的所有值的填充统计标准偏差。

例:select stdevp(prd_no) from sales

13. VAR 返回给定表达式中所有值的统计方差。

例:select var(prd_no) from sales

14. VARP 返回给定表达式中所有值的填充的统计方差。

例:select varp(prd_no) from sales

elasticsearch可以代替NoSQL吗

我们使用Elasticsearch存储的文档数量接近50亿(算上1份复制,接近100亿文档),总共10个数据节点和2个元数据节点(48GB内存,8核心CPU,ES使用内存达到70%),每天的文档增量大概是3000W条(速度持续增加中)。目前来看,单个文档的查询效率基本处于实时状态;对于1到2周的数据的聚合统计操作也可以在10秒之内返回结果。

但是,还有提升的空间:

1. 对于查询单条数据的应用场景来说,我们可以使用ES的路由机制,将同一索引内的具有相同特征(比如具有相同的userid)的文档全部存储于一个节点上,这样我们之后的查询都可以直接定位到这个节点上,而不用将查询广播道所有的节点上;

2. 随着数据节点的增加,适当增加分片数量,提升系统的分布水平,也可以通过分而治之的方式优化查询性能;

个人以为Elasticsearch作为内部存储来说还是不错的,效率也基本能够满足,在某些方面替代传统DB也是可以的,前提是你的业务不对操作的事性务有特殊要求;而权限管理也不用那么细,因为ES的权限这块还不完善。由于我们对ES的应用场景仅仅是在于对某段时间内的数据聚合操作,没有大量的单文档请求(比如通过userid来找到一个用户的文档,类似于NoSQL的应用场景),所以能否替代NoSQL还需要各位自己的测试。如果让我选择的话,我会尝试使用ES来替代传统的NoSQL,因为它的横向扩展机制太方便了。

在我的工作过程中,我深切体会到:经验固然是一个很重要的东西,因为它能够帮助我们少走很多弯路,但同时也应该看到经验的另一面——它会变成一个笼子,将我们闭塞其中,使我们错过一些可能更好的解决方案,关键是我们要学会尝试,接触新的世界。


当前标题:聚合计算nosql,聚合计算语法转sql
网站路径:http://hbruida.cn/article/hohjoc.html