Можно ли выполнить полное внешнее объединение с 3 различными таблицами в Google BigQuery - PullRequest
0 голосов
/ 06 февраля 2019
SELECT * 
FROM `project.dataset1.table1` t1  
FULL OUTER JOIN `project.dataset2.table2` t2 
USING (Name) 
FULL OUTER JOIN `project.dataset3.table3` t3 
USING (Name) 
WHERE Name LIKE '%John%'

project.dataset1.table1 и project.dataset3.table3 имеют одинаковые имена столбцов.

Я получаю сообщение об ошибке «Повторяющиеся имена столбцов в результате не поддерживаются».

Как правильно комбинировать эти таблицы в BigQuery?

1 Ответ

0 голосов
/ 06 февраля 2019

Позвольте мне сначала объяснить, что здесь происходит

В приведенном ниже примере - нет проблем с дублированием имени столбца, а не Name, но оно решается наличием имени в USING() против ON

#standardSQL 
WITH 
  `project.dataset1.table1` AS (SELECT 'John' Name, 'a' x ),  
  `project.dataset2.table2` AS (SELECT 'John' Name, 'b' y),  
  `project.dataset3.table3` AS (SELECT 'John' Name, 'c' z)
SELECT * 
FROM `project.dataset1.table1` t1  
FULL OUTER JOIN `project.dataset2.table2` t2 USING (Name) 
FULL OUTER JOIN `project.dataset3.table3` t3 USING (Name) 
WHERE Name LIKE '%John%'   

Во втором примере ниже вы видите дополнительное поле dup_col, которое является дубликатом (в таблице 1 и в таблице 2) - таким образом, ошибка - Duplicate column names in the result are not supported

#standardSQL 
WITH 
  `project.dataset1.table1` AS (SELECT 'John' Name, 'a' x, 'qq' dup_col),  
  `project.dataset2.table2` AS (SELECT 'John' Name, 'b' y, 'ww' dup_col),  
  `project.dataset3.table3` AS (SELECT 'John' Name, 'c' z)
SELECT * 
FROM `project.dataset1.table1` t1  
FULL OUTER JOIN `project.dataset2.table2` t2 USING (Name) 
FULL OUTER JOIN `project.dataset3.table3` t3 USING (Name) 
WHERE Name LIKE '%John%'   

НаконецВ приведенном ниже примере вы найдете, как решить эту проблему

#standardSQL 
WITH 
  `project.dataset1.table1` AS (SELECT 'John' Name, 'a' x, 'qq' dup_col),  
  `project.dataset2.table2` AS (SELECT 'John' Name, 'b' y, 'ww' dup_col),  
  `project.dataset3.table3` AS (SELECT 'John' Name, 'c' z)
SELECT * EXCEPT(dup_col), 
  t1.dup_col AS t1_dup_col, 
  t2.dup_col AS t2_dup_col
FROM `project.dataset1.table1` t1  
FULL OUTER JOIN `project.dataset2.table2` t2 USING (Name) 
FULL OUTER JOIN `project.dataset3.table3` t3 USING (Name) 
WHERE Name LIKE '%John%'     

Как вы можете видеть здесь, мы добавили EXCEPT(dup_col), который исключает дубликаты столбцов из вывода, но затем мы явно добавили эти столбцы с различными псевдонимами

Итак, теперь в выводе нет повторяющихся столбцов, как показано ниже

Row Name    x   y   z   t1_dup_col  t2_dup_col   
1   John    a   b   c   qq          ww      

Надеюсь, вы сможете применить это к конкретным дублирующимся столбцам
Если у вас есть большечем только одно имя - просто перечислите их в КРОМЕ, как

EXCEPT(dup_col1, dup_col2, dup_col3)   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...