AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 127609
Accepted
Federico Ponzi
Federico Ponzi
Asked: 2016-01-29 06:46:39 +0800 CST2016-01-29 06:46:39 +0800 CST 2016-01-29 06:46:39 +0800 CST

数据仓库:如何查询每日快照?

  • 772

我有一些不是时间序列的数据库快照。例如:

  • 第一天快照:

    +----+---------------+------------+------------+        
    | 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; 

对于一个极端的解决方案,我正在考虑实施一种元语言来让未来的用户(例如营销人员)进行这样的查询。

你认为有没有一种方法可以在没有元语言的情况下在 Drill 中实现这一点?我会使用递归 UDF 来执行此操作,但它们无法返回查询。

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

有适合 Apache Drill 的解决方案吗?或者这个问题有其他解决方案吗?

此外,任何有关此问题的元语言或论文都值得赞赏。

编辑: 我们没有交易数据。我们有随时间变化的数据,可以添加或删除;因此,我们需要每天的快照。此外,我们事先不知道将要执行的查询,因此我们无法知道要进行哪种类型的聚合。此外,每行大约有 100 列,每个快照(Mysql 表)有 250GB。我们还需要在每一天、每一行对这些数据进行全文搜索。

搜索的一个例子可以是“有多少帖子是关于某个主题的?” 所以它必须在所有帖子中搜索 sometopic 关键字。每个快照可能有也可能没有相同的行。两个快照也可以有相同的帖子,但稍作修改。

mysql database-design
  • 2 2 个回答
  • 1955 Views

2 个回答

  • Voted
  1. Rick James
    2016-02-05T15:32:04+08:002016-02-05T15:32:04+08:00

    让我们开箱即用。让我们有一个“日志”,而不是一个“快照”。您当前拥有的是事物的“当前”状态;添加“日志”将提供“历史”,从中可以得出“丢失”的信息。

    实现日志的一种方法是使用表的TRIGGERonINSERT或UPDATE表,并让触发器写入日志文件。这个日志对于临时查询来说是不愉快的,所以有一个夜间工作(或者可能是每小时)来总结一天的变化——帖子数量的净收益(或损失)等。“day2”信息和然后可以很快地从这个汇总表中得出“上个月”的信息。或者也许是第二级总结,宣布每天的状态。我怀疑是否UNION需要。不会涉及“快照”。

    • 2
  2. Best Answer
    Federico Ponzi
    2016-06-16T07:59:59+08:002016-06-16T07:59:59+08:00

    所以我一直在寻找的是一种与数据仓库相关的新型系统:数据湖系统。

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

    数据湖是一种在系统中存储数据的方法,它有助于以不同的模式和结构形式(通常是对象 blob 或文件)托管数据。Hadoop 和 AWS S3 平台可用于构建数据湖存储库。

    • 2

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve