U-SQL 行的随机样本

U-SQL random sample of rows

希望大家帮帮我

我想做什么

我正在尝试从大型 Azure 数据库中随机抽取样本,以便在部署到 Azure 云之前可以 运行 本地文件。这些步骤是首先创建一个伪随机数,然后只取前 X 行或前 X% 的行。

我试过的

我已经阅读了几篇文章,包括 stack overflow SQL, stack overflow SQL 2, SQL select, and USQL Order By Fetch,但仍然没有弄清楚语法。

代码:

//ATTEMPT 1
SELECT * FROM @searchlog
FETCH FIRST 3 ROWS ONLY;
//ATTEMPT 2
@outsearchlog =
    SELECT *
    FROM @searchlog
    ORDER BY NEWID() DESC FETCH 10;
//ATTEMPT 3
@outsearchlog =
    SELECT *,
           NEWID() AS newid
    FROM @searchlog;
//ATTEMPT 4
@outsearchlog =
    SELECT *,
           newid() AS newid
    FROM @searchlog;
//ATTEMPT 5
@outsearchlog =
    SELECT *,
           newid() AS newidwoot           
    FROM @searchlog;
//ATTEMPT 6
@outsearchlog =
    SELECT *,
           Random() AS newidwoot           
    FROM @searchlog;

U-SQL 有一个 SAMPLE 运算符,因此只需将其添加到语句的底部即可。例如,这段代码生成一个 10% 的均匀样本:

@outsearchlog =
    SELECT *          
    FROM @searchlog
    SAMPLE UNIFORM (0.1);

示例已记录 here。如果您使用这种方法,则不需要额外的行号。如果您确实觉得需要行号,请使用 ROW_NUMBER().

我会质疑在 2021 年使用 U-SQL,尤其是对于新项目。 ADLS Gen 1 已被弃用(2024 年 2 月停用),如您所知,U-SQL 与 ADLS Gen 2 不兼容。因此您应该努力将您的项目转换为使用 Azure Databricks 或 Azure Synapse Analytics 或其他合适的尽快平台。

https://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-overview

如果您确实考虑切换到 Azure SQL 数据库或 Azure Synapse Analytics,那么它支持 TABLESAMPLE 命令以获得类似效果:

SELECT *
FROM yourTable
TABLESAMPLE( 10 PERCENT );