Netezza/大型数据库的采样数据技术
Posted
技术标签:
【中文标题】Netezza/大型数据库的采样数据技术【英文标题】:Sampling data techniques for Netezza/large databases 【发布时间】:2014-02-07 10:29:17 【问题描述】:我们正在使用 IBM 的 Netezza。我们有一张表,每天需要处理近 100 亿条记录。该表的其中一个字段通过 38 个字符的数字字符串标识用户,我们称之为 UserID。我们将此表分布在 UserID 上。我正在寻找一种最佳的采样技术。目前,我们使用 mod(UserID,SamplingRate) = 0 进行采样,但由于该表是分布在 UserID 上的,我认为肯定有更好的方法。
在 Hive 中,我们有桶的概念,我们可以在其中将表划分为一些桶,然后完全获取其中一个桶,从而提供良好的性能。
更新: 通过采样数据,我的意思是随机获得 5 亿条均匀分布的记录。我想获取的记录数可以根据我的采样率来确定。 UserID 的数据类型是 numeric(38)。 (Java:BigDecimal)
【问题讨论】:
抽样是什么意思?您只想要 100 亿条记录中的一个随机子集吗? 还有什么datatype
是userID
字段?
用更多信息更新了描述。
【参考方案1】:
在 where 条件下的简单随机样本怎么样?这在计划中解决了,所以它应该可以顺利运行,到目前为止 rand() 分布均匀:
SELECT * FROM BIGTABLE WHERE RAND()< SAMPLE_SIZE/BIGTABLE_TOTAL;
【讨论】:
以上是关于Netezza/大型数据库的采样数据技术的主要内容,如果未能解决你的问题,请参考以下文章
为本地开发采样一个大型 CouchDB 数据库,避免长视图构建
Netezza 的 Aginity 工作台不会为大型查询提供语法错误