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 亿条记录中的一个随机子集吗? 还有什么datatypeuserID 字段? 用更多信息更新了描述。 【参考方案1】:

在 where 条件下的简单随机样本怎么样?这在计划中解决了,所以它应该可以顺利运行,到目前为止 rand() 分布均匀:

SELECT * FROM BIGTABLE WHERE RAND()< SAMPLE_SIZE/BIGTABLE_TOTAL;

【讨论】:

以上是关于Netezza/大型数据库的采样数据技术的主要内容,如果未能解决你的问题,请参考以下文章

对于大型数据库,从 Impala 采样的最佳查询是啥?

从大型数据集重新采样的 Diff-in-diff 估计

为本地开发采样一个大型 CouchDB 数据库,避免长视图构建

Netezza 的 Aginity 工作台不会为大型查询提供语法错误

如何对大型数据库进行采样并在 R 中实现 K-means 和 K-nn?

在 BigQuery 中订购大型时间序列数据集以进行导出