У меня есть две разные таблицы Google:
Один с 4 столбцами
+------+------+------+------+
| Col1 | Col2 | Col5 | Col6 |
+------+------+------+------+
| ID1 | A | B | C |
| ID2 | D | E | F |
+------+------+------+------+
Один с 4 столбцами предыдущего файла и еще 2 столбца
+------+------+------+------+------+------+
| Col1 | Col2 | Col3 | Col4 | Col5 | Col6 |
+------+------+------+------+------+------+
| ID3 | G | H | J | K | L |
| ID4 | M | N | O | P | Q |
+------+------+------+------+------+------+
Я настроил их как федеративный источник в Google BigQuery, теперь мне нужно создать представление, которое объединит данные обеих таблиц.
Обе таблицы имеют Col1
столбец, который содержит идентификатор, этот идентификатор уникален для всех таблиц, не содержит реплицированных данных.
В результате я ищу следующую таблицу:
+------+------+------+------+------+------+
| Col1 | Col2 | Col3 | Col4 | Col5 | Col6 |
+------+------+------+------+------+------+
| ID1 | A | NULL | NULL | B | C |
| ID2 | D | NULL | NULL | E | F |
| ID3 | G | H | J | K | L |
| ID4 | M | N | O | P | Q |
+------+------+------+------+------+------+
Для столбцов, которых нет в первом файле, я ожидаю значение NULL
.
Я использую стандартный SQL, вот оператор, который вы можете использовать для генерации образца данных:
#standardsQL
WITH table1 AS (
SELECT "A" as Col1, "B" as Col2, "C" AS Col3
UNION ALL
SELECT "D" as Col1, "E" as Col2, "F" AS Col3
),
table2 AS (
SELECT "G" as Col1, "H" as Col2, "J" AS Col3, "K" AS Col4, "L" AS Col5
UNION ALL
SELECT "M" as Col1, "N" as Col2, "O" AS Col3, "P" AS Col4, "Q" AS Col5
)
Простой UNION ALL
не работает, потому что в таблицах разные столбцы
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
Error: Queries in UNION ALL have mismatched column count; query 1 has 3 columns, query 2 has 5 columns at [17:1]
И оператор с подстановочными знаками не подходит, потому что федеративные источники не поддерживают это.
SELECT * FROM `table*`
Error: External tables cannot be queried through prefix
Конечно, это образец данных, всего 3-5 столбцов, в реальных таблицах 20-40 столбцов. Итак, пример, в котором мне нужно явно SELECT
поле за полем, это несущественный способ.
Есть ли рабочий способ объединить эти две таблицы?