mysql数据仓库输出日志_mysql – 数据仓库:我如何查询每日快照?

本文讨论如何在MySQL数据仓库中查询每日快照,以计算不同时间段内的帖子平均数量。通过将每日快照合并并计算权重,可以得到特定时间段内的平均帖子数。同时,文章也提出了在没有元语言的情况下实现此类查询的挑战,以及对大规模数据进行全文搜索的需求,并引出了数据湖系统作为可能的解决方案。
摘要由CSDN通过智能技术生成

我有一些非时间序列的数据库快照.例如:

>快照第1天:

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

| ID | Title | Category | Date |

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

| 1 | My First Post | helloworld | 2015-01-01 |

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

>快照第2天(今天增加了一个新帖子):

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

| ID | Title | Category | Date |

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

| 1 | My first post | helloworld | 2015-01-01 |

| 2 | My second post | other | 2015-01-02 |

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

>第3天快照(今天发布的帖子2):

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

| ID | Title | Category | Date |

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

| 1 | My First Post | helloworld | 2015-01-01 |

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

因此,在几天之间,表格的一行可能与否可能是不变的.现在,我需要能够使用这样的查询:

SELECT category, COUNT(*) from day1.My_table group by category

这是一天一桌.如果我们想在一个月内按类别计算帖子的每日平均值,我们应该执行以下操作:

SELECT category, SUM(cnt) / 30

from (

SELECT category, COUNT(*) as cnt

from day1.My_table

group by category

UNION ALL SELECT category, COUNT(*) as cnt

from day2.My_table

group by category

UNION ALL ...

UNION ALL SELECT category, COUNT(*) as cnt

from day30.My_table

group by category

) group by category

另一个例子,一个月内发布的帖子数量:

SELECT COUNT(distinct id)

from (

SELECT id

from day1.My_table

UNION ALL ...

UNION ALL SELECT id

from day30.My_table

)

基本上我们需要考虑一个重量.如果我们有day1.My_table和day5.My_table,那么第1天而不是第5天的每个帖子都会被计算在第2,3,4天.第1天和第5天的每个帖子都会计算在每月的每一天(=直到下一个快照).

因此,如果我想考虑每天的平均帖子数> = 6个月,我只有1个快照,我会为该快照分配30的权重.

因此,在一个月内发布的> = 6个月前的平均帖子是:

SELECT category, SUM(cnt) / 30

from (

SELECT category, COUNT(*)*30 as cnt

from day1.My_table

group by category --- Note: I'm not considering the range defined from the user in this example.

) group by category;

正如评论所述,我需要进行如下查询:

Select category, AVG(*)

from [fromRange-toRange].MyTable;

对于一个极端的解决方案,我正在考虑实现一个元语言的想法,让未来的用户(例如marketng people)做这样的查询.

你觉得有没有办法在没有元语言的Drill中实现这个目的?我会使用递归UDF执行此操作但它们无法返回查询.

每个快照都是250GB大,我希望能够将这些数据集与其他外部数据进行比较(事先我不知道这些数据集的方案).

有适合Apache Drill的解决方案吗?或者是否有另一种解决方案?

此外,任何有关此问题的元语言或论文都表示赞赏.

编辑:

我们没有交易数据.我们的数据随时间变化,可以添加或删除;因此我们需要每天快照.此外,我们事先不知道将要执行的查询,因此我们无法知道要执行的聚合类型.

每行还有大约100列,每个快照有250GB(Mysql表).

我们还需要在每一天的每一行都对这些数据进行全文搜索.

搜索的一个例子可能是“关于sometopic的帖子有多少?”所以它必须在所有帖子中搜索sometopic关键字.每个快照可能有或没有相同的行.另外两个快照可能有相同的帖子,但略有修改.

解决方法:

所以我一直在寻找的是一种与Datawarehousing相关的新型系统:Data Lake System.

您可以在Wikipedia了解更多信息:

A data lake is a method of storing data within a system that

facilitates the colocation of data in variant schemas and structural

forms, usually object blobs or files. Hadoop and the AWS S3 platform

can be used to build data lake repositories.

标签:mysql,database-design

来源: https://codeday.me/bug/20190805/1589670.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值