如何获取大数据的值频率

Posted

技术标签:

【中文标题】如何获取大数据的值频率【英文标题】:How to get value frequencies for large data 【发布时间】:2018-10-05 22:42:34 【问题描述】:

我有一个包含数百万行和 940 列的表。我真的希望有一种方法可以总结这些数据。我想查看每一列的每个值的频率。我将此代码用于一些列,但在处理太大之前我将无法获得更多列。

SELECT 
f19_24
,f25_34
,f35_44
,f45_49
,f50_54
,f55_59
,f60_64
,count(1) AS Frequency
    FROM            
        (SELECT a.account, ntile(3) over (order by sum(a.seconds) desc) as ntile
,f19_24
,f25_34
,f35_44
,f45_49
,f50_54
,f55_59
,f60_64
        FROM demo as c
        JOIN aggregates a on c.customer_account = a.account
        WHERE a.month IN ('201804', '201805', '201806')
        GROUP BY a.account
,f19_24
,f25_34
,f35_44
,f45_49
,f50_54
,f55_59
,f60_64
        )       
    WHERE ntile = 1
    GROUP BY 
f19_24
,f25_34
,f35_44
,f45_49
,f50_54
,f55_59
,f60_64

问题是GROUP BY 太麻烦了。有没有别的办法???能够在如此大的数据集中查看高频的位置将非常有帮助。

【问题讨论】:

用您正在使用的数据库标记您的问题。您的问题还提到了一张表,但您的代码引用了两张。此外,您在查询中过滤了不在问题中的查询。 【参考方案1】:

使用索引可以帮助您在此类查询中获得更快的结果。最好的做法取决于该表具有哪些其他字段以及针对该表运行的其他查询。没有更多详细信息,非集群月指数,包括 f19_24,f25_34,f35_44,f45_49,f50_54,f55_59,f60_64 在聚合或演示或客户上(因为我不知道哪个表包含这些字段)例如这个索引:

CREATE NONCLUSTERED INDEX IX_fasterquery
ON aggregates(month,accoun)
INCLUDE (f19_24,f25_34,f35_44,f45_49,f50_54,f55_59,f60_64);

那是因为如果你有那个索引,那么 SQL 在运行查询时根本不会访问实际的表,因为它可以在索引中找到所有具有给定“月份、账户、创建日期”的行,并且它会能够非常快地做到这一点,因为索引允许在使用定义键的字段时精确地进行快速访问,并且它还将具有每行的“f19_24,f25_34,f35_44,f45_49,f50_54,f55_59,f60_64”值和在您的情况下,通过将此查询作为 proc 进行查询,您可能会得到 bether 结果以及我建议这样做的原因是here。

【讨论】:

感谢您的回答。我会试试这个,看看会发生什么。 欢迎您告诉我测试后的结果。

以上是关于如何获取大数据的值频率的主要内容,如果未能解决你的问题,请参考以下文章

MySQL如何获取分钟级数据,数据频率为15秒

如何在熊猫数据框列中获取 NaN 观察的频率 [重复]

如何使用 java 从 pcm 字节数组 .wav 文件中获取频率和音高?

如何使用 EZAudio 在 Swift 中获取 FFT 数据?

如何设置 Spark 流式接收器频率?

如何获取列中最频繁值的数量?