我有两个数据集,baskets(11m行)和事务(23m行),我用它来创建数据集事务的样本。
数据集代表客户在商店购物,交易是客户购买的商品(因此,如果客户购买多件商品,一次访问可能会有多行),篮子是交易摘要,所以只有一行每次访问。
数据集由basket_id加入。篮子是交易的摘要,因此数据集是一致的
当我使用子查询创建交易样本时(例如下面的例子),它返回的篮子比预期的多(只有两倍)
SET seed TO.25;
SELECT
COUNT(DISTINCT transactions.basket_id)
FROM
transactions
WHERE
basket_id IN (
SELECT
basket_id
FROM
baskets
WHERE
RANDOM() < 0.01
);
当我将其拆分为两个步骤时,它按预期工作:
SET seed TO.25;
CREATE TABLE sample_baskets
AS
SELECT
basket_id
FROM
baskets
WHERE
RANDOM() < 0.01;
SELECT
COUNT(DISTINCT transactions.basket_id)
FROM
transactions
INNER JOIN
sample_baskets
ON
transactions.basket_id = sample_baskets.basket_id;