对于庞大的数据库,从Impala进行抽样的最佳查询是什么?

问题描述:

我在Impala中有一个巨大的表(超过10亿行)。我需要抽取几次约100,000行。什么是最好的查询呢?对于庞大的数据库,从Impala进行抽样的最佳查询是什么?

正如Jeff所提到的,你所要求的确实是不可能的,但我们确实有一个内部集合函数,它需要200,000个样本(使用油藏采样)并返回样本,逗号分隔为一行。没有办法改变样本的数量。如果行数少于20万,则全部将被返回。如果您对如何运作感兴趣,请参阅implementation of the aggregate function and reservoir sampling structures

有没有办法'拆分'或爆炸的结果呢,所以我不知道这将是多么有帮助。

例如,从表8行平凡采样:

> select sample(id) from functional.alltypestiny 
+------------------------+ 
| sample(id)    | 
+------------------------+ 
| 0, 1, 2, 3, 4, 5, 6, 7 | 
+------------------------+ 
Fetched 1 row(s) in 4.05s 

(对于背景:这是在过去的版本中增加支持在计划,而不幸的是还没有准备好直方图统计。 )

不幸的是,Impala目前不支持TABLESAMPLE。请参阅https://issues.cloudera.org/browse/IMPALA-1924以遵循其发展。

回想起来,知道TABLESAMPLE不可用,可以为每条记录添加一个字段“RVAL”(例如随机的32位整数),并通过添加“where RVAL> x和RVAL < y “,适当的x和y的值。非重叠区间[x1,y1],[x2,y2],...将是独立的。您还可以选择使用“其中RVAL%10000 = 1,= 2,...等,为独立的独立子群体。”