私は2つの異なるGoogleスプレッドシートを持っています:
4 列の 1 つ
+------+------+------+------+
| Col1 | Col2 | Col5 | Col6 |
+------+------+------+------+
| ID1 | A | B | C |
| ID2 | D | E | F |
+------+------+------+------+
前のファイルの 4 列とさらに 2 列の 1 つ
+------+------+------+------+------+------+
| Col1 | Col2 | Col3 | Col4 | Col5 | Col6 |
+------+------+------+------+------+------+
| ID3 | G | H | J | K | L |
| ID4 | M | N | O | P | Q |
+------+------+------+------+------+------+
それらを Google BigQuery で Federated ソースとして構成したので、両方のテーブルのデータを結合するビューを作成する必要があります。
両方のテーブルCol1
には ID を含む列があり、この ID はテーブル全体で一意であり、複製されたデータは含まれません。
私が探している結果のテーブルは次のとおりです。
+------+------+------+------+------+------+
| 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]
Federated ソースはワイルドカード演算子をサポートしていないため、ワイルドカード演算子は適切な方法ではありません
SELECT * FROM `table*`
Error: External tables cannot be queried through prefix
もちろん、これはサンプル データで、3 ~ 5 列しかありません。実際のテーブルには 20 ~ 40 列あります。したがって、フィールドごとに明示的にSELECT
フィールドする必要がある例は、かなりの方法ではありません。
この 2 つのテーブルを結合する有効な方法はありますか?