3

私は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 つのテーブルを結合する有効な方法はありますか?

4

2 に答える 2