通过 PRESTO 连接器选择随机数据样本

Posted

技术标签:

【中文标题】通过 PRESTO 连接器选择随机数据样本【英文标题】:SELECT random sample of data via PRESTO connector 【发布时间】:2020-12-22 21:11:05 【问题描述】:

我目前正在寻找如何从表中获取随机数据样本的最佳方法(例如在 HIVE 中)。我知道 PRESTO 提供了 RANDOM() 函数或 TABLESAMPLE BERNOULLI/SYSTEM。问题是查询记录数较多的表时,耗时较长,不适合与JayDeBeApi合作,可能会关闭连接,等待响应时间过长。

我更喜欢使用 TABLESAMPLE BERNOULLI/SYSTEM,它将要获取的记录的百分比作为参数。与ORACLE、SAP或MSSQL数据库相比,可以通过精确的百分比,即0.003123412%,PRESTO不允许你,尽管功能非常相似,一切都在1-100%的范围内转换。

有人知道如何解决这个问题吗?我宁愿避免与 TABLESAMPLE BERNOULLI/SYSTEM 合作的 limit 子句,这可能无法按预期工作。

【问题讨论】:

【参考方案1】:

使用 Presto 341(即将发布),您只需

 ... FROM my_table TABLESAMPLE BERNOULLI (0.01)

正如@michal.kyjovsky 指出的那样,旧版本有一个错误,需要使用科学记数法来获得低于百分比的采样率

 ... FROM my_table TABLESAMPLE BERNOULLI (0.01e0)

【讨论】:

【参考方案2】:

这可以通过以科学计数法传递数字来获得。

【讨论】:

这是TABLESAMPLE BERNOULLI (0.1) 今天无法正常工作的解决方法。当我正在修复时,请在 github.com/prestosql/presto/issues/new 提交一个新问题。

以上是关于通过 PRESTO 连接器选择随机数据样本的主要内容,如果未能解决你的问题,请参考以下文章

随机森林算法OOB_SCORE最佳特征选择

如何从Matlab中的数据集中选择随机样本[重复]

学习曲线:训练集大小应该逐步增加还是随机选择?

随机森林和Adaboost的对比

Python中的加权随机样本问题,怎么解决

随机森林与Adaboost