sql - 如何将查询答案传递给限制函数 Impala

标签 sql hadoop impala

我正尝试在 impala 中抽取一张 table 的 20%。我在某处听说内置的 impala 采样功能有问题。

有没有办法将子查询传递给 impala limit 函数以对整个表进行 n% 的采样。

我有这样的东西:

select 
* from
table_a
order by rand()
limit
(
select 
round( (count(distinct ids)) *.2,0)
from table_a) 
)

子查询给了我所有记录的 20%

最佳答案

我不确定 Impala 是否有特定的采样逻辑(某些数据库有)。但是你可以使用窗口函数:

select a.*
from (select a.*,
             row_number() over (order by rand()) as seqnum,
             count(*) over () as cnt
      from table_a
     ) a
where seqnum <= cnt * 0.2;

关于sql - 如何将查询答案传递给限制函数 Impala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51600420/

相关文章:

sql - 使用子查询更新

mysql - WiFi 信息的数据类型

hadoop - 解压时如何读取压缩文件?

sql - 当我在同一列中具有不同格式的值时,如何获得相同的日期列值

SQL SELECT from 和 EAV 表

MySQL 联合、连接和限制

Hadoop:外部 jar 文件夹引用

hadoop - HDFS 无法使用 Hadoop 3.2 启动 : bash v3. 需要 2+

hadoop - [Simba][ImpalaJDBCDriver](500051) 处理查询/语句时出错

hadoop - 如何比较一个表中的列名与 impala 中另一个表中的值