可重复随机抽样SQL
我需要对我的解决方案进行回顾,该解决方案用于从存储在MPP机器上的表中随机抽取100行(目前是Netezza,以后可能是hadoop/etc) 我对使用Netezza的rand()不感兴趣,因为我希望以后能够复制相同的样本,而且我不指望使用setseed() 我现在使用的解决方案是:可重复随机抽样SQL,sql,algorithm,random,data-mining,netezza,Sql,Algorithm,Random,Data Mining,Netezza,我需要对我的解决方案进行回顾,该解决方案用于从存储在MPP机器上的表中随机抽取100行(目前是Netezza,以后可能是hadoop/etc) 我对使用Netezza的rand()不感兴趣,因为我希望以后能够复制相同的样本,而且我不指望使用setseed() 我现在使用的解决方案是: 按ID%371、ID%17、ID%501、ID限制100从我的表格顺序中选择* 其中3个数字是由我自己的RNG生成的素数。 我走对了吗这个“随机”样本足够随机吗? 注意:我不需要它是一个加密强随机样本,我只想确保每
按ID%371、ID%17、ID%501、ID限制100从我的表格顺序中选择*
其中3个数字是由我自己的RNG生成的素数。
我走对了吗这个“随机”样本足够随机吗?
注意:我不需要它是一个加密强随机样本,我只想确保每次都选择不同的样本,并统一采样,如果需要,我希望能够轻松地复制我的样本(通过执行相同的SQL)
谢谢 我不会尝试在SQL中生成随机数,因为很容易得到一些真正的随机数,将它们粘贴到表或存储过程中 转到获取256个十六进制随机位,一次将数字4分组,转换为十进制整数,然后使用前100个数字作为密钥 您将拥有一个可重复的序列,并且您可以根据需要制作任意多个真正的随机序列 如果需要均匀分布的可重复伪随机数,同样的原则也适用。只需使用不同的数字来源。例如,您可以编写一个Python脚本,使用附带的
random
模块生成数字
至于要使用的SQL,如果您正确地构造了DB,那么它是简单的。在本例中,由于我构建了一次随机表,并多次将其用于查询,因此我将构建包含主键的表,而不仅仅是生成的随机数。或者,如果我打算用不同的数字集重复这一点,那么我将构建一个关系表(如ER建模中的关系表),将随机数表链接到我正在采样的表。我不会将所有内容都强制输入SQL,而是生成随机数表,并使用脚本语言构建关系表
在上面给出的示例中,您需要100个样本,因此随机抽样表将包含由外部脚本选择的100个主键。每次运行采样时,都会得到完全相同的记录,直到更改随机采样表为止。要更改表,请转储要采样的表的主键,然后运行脚本,通过在1和主键总数之间生成100个数字来随机选取100个。如果您使用Python之类的工具,您可以获得均匀随机数、伽马分布、高斯分布、对数正态分布、帕累托分布等。您能更明确一些吗?假设我有一张真正的随机数表。我如何在统一发行版中使用它来对我的表格进行采样?我是否将我的表与随机表连接起来?Dillon—我仍然无法理解的事情:比如说我想运行我的系统10次,然后能够重现每一次执行。按照你建议的方法,我必须保留10个随机数表或10个关系表,每个表都有数百万行长。在这个系统中,我建议您只记录10条SQL语句,每条语句都有自己的3个随机素数,复制只是运行正确的SQL。这不是你所描述的方法的一个主要缺点吗?(感谢您的耐心)我已经编辑了答案,希望现在可以清楚地解释它,这样您就可以看到构建一个随机抽样表并使用它进行重复抽样是多么简单。