如何在 Snowflake 中基于列进行分层

jay*_*ant 4 sql r snowflake-cloud-data-platform

我正在使用 Snowflake 来编写我的 sql 查询。我们有一个巨大的表,其中包含数十亿条记录,其中包含客户信息。目标是获取随机样本并使用 R 查看分布。不幸的是,我们无法使用 RStudio 到数据库的 JDBC/ODBC 连接。这是一个限制。所以我只能从 Snowflake 中提取提取物并导入到 R 中。

困难在于我们有一个名为CUSTOMER SEGMENT的列,它有近 24 个唯一值。目标是获得代表每个细分市场显着比例的样本。我尝试了以下查询;

SELECT DISTINCT *
FROM test sample(10)
Run Code Online (Sandbox Code Playgroud)

获得随机样本,其中每行被选择的概率为 10%。但我没有从客户群的每个值中获取样本。我是否可以知道任何 sql 命令,可以帮助根据客户细分进行分层。提前致谢。

Gor*_*off 7

对更相等大小的分区进行采样的另一种方法是使用循环采样

select t.*
from (select t.*, 
             row_number() over (partition by segment order by random()) as seqnum,
             count(*) over () as cnt
      from test t
     ) t
where seqnum <= 20;
Run Code Online (Sandbox Code Playgroud)

“20”表示每个段最多 20 行。

这可以针对基于百分比的样本进行修改。目前尚不清楚这是否有必要。