Перевод нескольких sql объединений в pandas dframes - PullRequest
0 голосов
/ 09 марта 2020
select los.account_id, coalesce(lead.lead_id, loan.lead_id, email.lead_id) as lead_id,
            los.account_loan_id as loan_number, los.borrower_email, datet.lead_datetime, los.file_started_date,
            los.ilock, los.iclose
            from table_a los
            left join table_b lead
            on los.account_id=lead.account_id and los.a_lead_id = lead.lead_id
            left join table_b loan
            on los.account_id=loan.account_id and los.account_loan_id=loan.cur_loan_number
            left join table_c email
            on los.account_id=email.account_id and (los.borrower_email = email.email_stated or los.coborrower_email = email.email_stated)
            left join table_b datet
            on datet.lead_id=lead.lead_id or datet.lead_id=loan.lead_id or datet.lead_id=email.lead_id;

У меня есть это объединение в Redshift на основе 3 таблиц, но оно очень медленное, поскольку некоторые таблицы содержат миллионы строк.

Основная идея состоит в том, что table_a - это небольшая таблица, содержащая ссуды , которые должны соответствовать одному указателю c отведения в таблицах b & c, таблицы b & c обе содержат детали одного и того же набора данных уникального приводит , единственный способ сопоставить его - использовать три условия.

  1. table_a.a_lead_id = table_b.lead_id или table_ c .lead_id
  2. table_a.account_loan_id = table_b .cur_loan_number (находится только в table_b)
  3. table_a.borrower_email или table_a.coborrower_email = table_a.email_stated (только в table_ c)

Условия должны соответствовать приоритет, где account_loan_id match имеет приоритет по сравнению с электронной почтой . Как видите, я выполнил это с помощью coalesce () в SQL.

. Чтобы оптимизировать это, я решил использовать pandas Dataframes, но я изо всех сил пытаюсь воссоздать тот же SQL присоединиться. По сути, я бы сделал соединение между двумя фреймами данных.

Фрейм данных 1 = table_a;

Фрейм данных 2 =

SELECT A.account_lead_id,B.cur_loan_number,B.lead_datetime,A.email_stated FROM table_c A LEFT JOIN table_b B
        ON A.account_id=B.account_id AND A.account_lead_id=B.account_lead_id WHERE A.account_id={};

Любые идеи о том, как воссоздать объединение в pandas

...