如何利用表统计总数实现Presto SQL动态抽样?
Presto表抽样查询修正
原查询存在几处语法逻辑问题:
- CTE定义重复使用
WITH关键字,正确写法是仅开头写一次,后续子句用逗号分隔 counts_less_100的定义缺少包裹查询语句的括号TABLESAMPLE BERNOULLI的参数无法直接引用CTE的行结果,需要先将比例计算为标量值
修正后的查询如下:
WITH total_count AS (SELECT COUNT(*) AS total FROM "Table A"), less_100_count AS (SELECT COUNT(*) AS less_count FROM "Table A" WHERE my_total < 100), sample_ratio AS (SELECT (less_count * 100.0 / total) AS ratio FROM less_100_count, total_count) SELECT * FROM "Table A" WHERE my_total > 100 TABLESAMPLE BERNOULLI ((SELECT ratio FROM sample_ratio))
关键说明:
- 先通过
total_count和less_100_count分别计算表A总记录数、my_total<100的记录数 sample_ratio将占比转换为BERNOULLI抽样所需的百分比格式(乘以100.0确保浮点运算精度)- 最后对
my_total>100的数据集执行抽样,通过标量子查询获取动态计算的抽样比例
内容的提问来源于stack exchange,提问作者CodeGeek123
相关产品推荐
相关产品推荐

