2017-05-26 4 views
1

Ich habe das folgende Problem: meine Tabelle1 hat N positive Proben, und es wächst langsam im Laufe der Zeit. Ich möchte 10N negative Samples aus einer anderen riesigen Tabelle auswählen. So wäre es etwa so:Quantitative Abhängigkeit zwischen Abfragen

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

gibt es einige Probleme mit dieser Abfrage: es garantiert nicht, dass ich etwa 10-mal mehr als negative_samples positive_samples haben wird, und es nicht dem Zufall negativen Proben entnehmen, .

Was wäre eine richtige Abfrage in Hive oder Presto, um diese beiden Sets auszuwählen?

Antwort

0

Ein Algorithmus gewünschten Ausgang in HIVE gehen bekommen, ist dies:

R1 = R2 = Assign Zeilennummer dieser R1 CP Negativ-Datensatz randomisieren = eine Tabelle eine Zeile und eine Spalte enthält Anzahl der postivie erstellen enthält Reihen. Rufen Sie die Spalte postive_cnt auf. J = Nehmen Sie ein kartesisches Produkt von R2 und CP. FINAL = Wählen Sie Zeilen aus J, wo row_number < = (positive_cnt * 10)

tatsächliche Abfrage (bei einigen Datensätzen getestet):

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); 
Verwandte Themen