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 обе содержат детали одного и того же набора данных уникального приводит , единственный способ сопоставить его - использовать три условия.
- table_a.a_lead_id = table_b.lead_id или table_ c .lead_id
- table_a.account_loan_id = table_b .cur_loan_number (находится только в table_b)
- 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