2017-05-26 27 views
1

我有以下问题:我的table1有N个正面样本,并且随着时间的推移它会缓慢增长。我想从另一个很大的表中选择10N个负面样本。 因此,这将是这样的:查询之间的定量依赖

WITH positive_samples AS (
    SELECT * FROM table1 
), negative_samples AS (
    SELECT * FROM table2 LIMIT 100 
) 

有与此查询几个问题:它并不能保证我会比positive_samples约10倍以上negative_samples,它不随机选择的阴性样品。

在Hive或Presto中选择这两个集合的正确查询会是什么?

回答

0

一种算法去获得HIVE所需输出是这样的:

R1 =随机负数据集 R2 =指定行号这R1 CP =创建一个包含一个行和含POSTIVIE计数一个列的表行。调用postive_cnt列。 J =取一个R2和CP的笛卡尔乘积。自J FINAL =选择行,其中ROW_NUMBER < =(positive_cnt * 10)

实际查询(在某些数据集测试):

with 
pcount as (select count(*) as positive_cnt from POSITIVE) 
, 
nrandom as(select * from NEGATIVE order by rand()) 
, 
nrandom_row_num as (select *, row_number() over() as row_number from nrandom) 
, 
jnd as (select * from nrandom_row_num, pcount) 
select * from jnd 
where row_number <= (positive_cnt * 10);