mysql – 数据仓库:我如何查询每日快照?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 数据仓库:我如何查询每日快照?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3373字,纯文字阅读大概需要5分钟。
内容图文
![mysql – 数据仓库:我如何查询每日快照?](/upload/InfoBanner/zyjiaocheng/897/66d9bd04accd470e9d4fceed546f4eb2.jpg)
我有一些非时间序列的数据库快照.例如:
>快照第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 – 数据仓库:我如何查询每日快照?全部内容,希望文章能够帮你解决mysql – 数据仓库:我如何查询每日快照?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。