Я работаю с двумя таблицами в BigQuery, которые примерно соответствуют следующему формату:
t1
p1 num1
joe 25
tom 35
tim 20
t2
p1 num2
joe 15
tom 13
.. и мне нужно выполнить левое соединение. Обратите внимание, что имена в t2 не совпадают с именами в t1, и когда я выполняю это левое соединение t2 на t1, я бы хотел, чтобы num2 был нулевым, а не нулевым.
SELECT
t1.p1, t1.num, t2.num
FROM t1
LEFT JOIN t2 ON t1.p1 = t2.pi
Мне известна функция IFNULL
, однако я предпочел бы избежать следующего решения:
SELECT
t1.p1, t1.num, IFNULL(t2.num, 0)
FROM t1
LEFT JOIN t2 ON t1.p1 = t2.p1
Причина этого в том, что у меня очень большой запрос с ~ 5осталось объединений и ~ 50 столбцов, и для всех 50 из этих столбцов нулевые значения должны быть заменены нулями . Я заметил, что BigQuery значительно отстает, когда я заменяю все строки t2.num
в select на IFNULL(t2.num, 0)
.
Я хотел бы избежать решения, которое решает проблему на уровне столбцов (например, 50 столбцов, нуждающихся в IFNULL), и очень предпочел бы решение, которое обращается к нулевым значениям на левом уровне соединения (для 5 таблиц).
Буду очень признателен за любые мысли по этому поводу!
РЕДАКТИРОВАТЬ: Любые мысли о том, почему 50 IFNULL отстают редактор BigQuery, будет принята с благодарностью. Под отставанием редактора я буквально подразумеваю, что когда я пытаюсь ввести текст в редакторе запросов, то, что я печатаю, появляется несколько секунд. IFNULL не изменяют объем данных, обрабатываемых запросом (~ 1 ГБ), поэтому я был удивлен, что они вызвали такое большое отставание. Понимание этой проблемы может помочь мне в будущем написать более качественные запросы.
EDIT2 : Теперь я понимаю, что мой общий пример кода бесполезен. Пожалуйста, дайте мне знать, если более длинный пример кода поможет с проблемой.