希望大家能够帮助我。
我正在尝试做什么
我正在尝试从大型 Azure 数据库中获取随机样本,以便在部署到 Azure 云之前可以在本地运行这些文件。步骤是首先创建一个伪随机数,然后只取前 X 行或前 X% 的行。
我尝试过的
我读过几篇文章,包括 stack overflow SQL , stack overflow SQL 2 , SQL select ,和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://learn.microsoft.com/en-us/azure/data-lake-store/data-lake-store-overview
如果您确实考虑切换到 Azure SQL DB 或 Azure Synapse Analytics,那么它支持 TABLESAMPLE
命令以获得类似的效果:
SELECT *
FROM yourTable
TABLESAMPLE( 10 PERCENT );
关于c# - U-SQL 随机行样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66697151/