如何使用 Presto SQL 获得可重复的样本?
How to get repeatable sample using Presto SQL?
我正在尝试从大型 table 中获取数据样本,并希望确保以后可以重复此操作。其他 SQL 允许通过使用 set.seed(整数)或 repeatable(整数)命令设置种子来完成 repeatable 采样。但是,这在 Presto 中对我不起作用。这样的命令还不可用吗?谢谢
一种解决方案是,您可以通过添加具有随机内容(例如 UUID)的列(或创建视图)来模拟采样,然后通过对该列进行过滤来选择行(例如,UUID 以 '1 结尾').您可以调整条件以获得所需的样本量。
根据设计,结果是随机的,并且在多次运行中也是可重复的。
您可以使用选定的 ID 创建一个简单的中间体 table:
CREATE TABLE IF NOT EXISTS <temp1>
AS
SELECT <id_column>
FROM <tablename> TABLESAMPLE SYSTEM (10);
这将仅包含采样 ID,并准备好通过对感兴趣的数据执行 JOIN
以在下游分析中使用它。
如果您使用的是 Presto 0.263 或更高版本,您可以使用 key_sampling_percent
来 可重复地 从 varchar
生成一个介于 0.0 和 1.0 之间的双精度值。
例如,要使用 id
列对 table
中 20% 的记录进行可重复采样:
select
id
from table
where key_sampling_percent(id) < 0.2
如果您使用的是旧版本的 Presto(例如 AWS Athena),您可以使用 source code for key_sampling_percent
:
中的内容
select
id
from table
where (abs(from_ieee754_64(xxhash64(cast(id as varbinary)))) % 100) / 100. < 0.2
我正在尝试从大型 table 中获取数据样本,并希望确保以后可以重复此操作。其他 SQL 允许通过使用 set.seed(整数)或 repeatable(整数)命令设置种子来完成 repeatable 采样。但是,这在 Presto 中对我不起作用。这样的命令还不可用吗?谢谢
一种解决方案是,您可以通过添加具有随机内容(例如 UUID)的列(或创建视图)来模拟采样,然后通过对该列进行过滤来选择行(例如,UUID 以 '1 结尾').您可以调整条件以获得所需的样本量。
根据设计,结果是随机的,并且在多次运行中也是可重复的。
您可以使用选定的 ID 创建一个简单的中间体 table:
CREATE TABLE IF NOT EXISTS <temp1>
AS
SELECT <id_column>
FROM <tablename> TABLESAMPLE SYSTEM (10);
这将仅包含采样 ID,并准备好通过对感兴趣的数据执行 JOIN
以在下游分析中使用它。
如果您使用的是 Presto 0.263 或更高版本,您可以使用 key_sampling_percent
来 可重复地 从 varchar
生成一个介于 0.0 和 1.0 之间的双精度值。
例如,要使用 id
列对 table
中 20% 的记录进行可重复采样:
select
id
from table
where key_sampling_percent(id) < 0.2
如果您使用的是旧版本的 Presto(例如 AWS Athena),您可以使用 source code for key_sampling_percent
:
select
id
from table
where (abs(from_ieee754_64(xxhash64(cast(id as varbinary)))) % 100) / 100. < 0.2