在 Aginity Workbench SQL 中选择 1% 的样本

Posted

技术标签:

【中文标题】在 Aginity Workbench SQL 中选择 1% 的样本【英文标题】:Selecting a 1% sample in Aginity Workbench SQL 【发布时间】:2019-03-07 22:56:45 【问题描述】:

我需要从表中随机抽取 1% 的记录样本(行数每秒都在增长)。

我的想法是

SELECT DISTINCT
   random(),
   name,
   age,
   registrationNumber
FROM everGrowingTable
ORDER BY random desc
LIMIT (
    (select count(*) from everGrowingTable) * 0.01
) -- this is attempting to get 1%

编译器抱怨* 运算符。但是,当我对表格大小进行硬编码时,这很好。

我尝试过IBM documentation,但这里讨论的是使用已知值的计算,而不是增长的值(我的表中就是这种情况)

似乎没有执行此操作的 Aginity SQL 函数。我注意到 Aginity Workbench Intellisense 中的 MINUS 函数,但可惜没有乘法等效项。

【问题讨论】:

如果你计算一个特定的字段呢?姓名,例如 没有骰子失败,“期望ALL' or FCONST' or ICONST' or PARAM' or ''-''” 好的,试试这个:select DISTINCT random() ,name ,age ,registrationNumber from everGrowingTable order by random desc limit ((select count(*)*0.01 from everGrowingTable)) @Antonio Veneroso Contreras 工作谢谢!简单有效。周五快乐 【参考方案1】:

您可以在子查询中使用窗口函数为每条记录分配一个随机数并计算总记录数,然后在外部查询中进行过滤:

SELECT name, age, registrationNumber
FROM (
    SELECT 
        name, 
        age, 
        registrationNumber,
        ROW_NUMBER() OVER(ORDER BY random()) rn,
        COUNT(*) OVER() cnt 
    FROM everGrowingTable
) x 
WHERE rn <= cnt / 100
ORDER BY rn

【讨论】:

以上是关于在 Aginity Workbench SQL 中选择 1% 的样本的主要内容,如果未能解决你的问题,请参考以下文章

Aginity Workbench Redshift 服务器连接错误

Aginity Workbench for Redshift - to_timestamp 转换问题

通过 Aginity Workbench for Netezza 导入 excel 文件时出错

有没有办法让 Aginity Workbench 编写 Unix 文件而不是 Windows 文件(仅 LF 而不是 CR\LF)

SQL 在 Aginity 中运行,但在 Tableau 10.1 中作为自定义查询被拒绝

如何从 Aginity 工作台检查在 IBM Netezza SQL 中处理表的数据和时间?