2016-08-15 55 views
0

我有2個表:BIGQUERY合併重複的場2頁不同的表

爲了使問題定義簡單,這裏是第一個模式:

student_id int 
phones repeated 
- phones.number string 
- phones.type string 

第二個表:

student_id int 
courses repeated 
- courses.id int 
- courses.name string 

兩個表都具有相同的行數和相同的學生ID。所有我需要的是既重複記錄合併成一個碩士生表:(2個保持不同的重複字段) 類似:

student_id int 
phones repeated 
- phones.number string 
- phones.type string 
courses repeated 
- courses.id int 
- courses.name string 

我怎樣才能做到這一點的BigQuery? (我嘗試了一堆方法,但是最後都是爲重複的字段創建重複行,最好從stackoverflow上的bigquery master獲得新的視角)。提前致謝。

回答

2

你會想JOIN兩個數據集,並從每個數據集中選擇相關的列。使用standard SQL(取消選中「顯示選項」下的「使用傳統SQL」)設置示例更容易,但類似的想法適用於傳統SQL。

WITH Students AS (
    SELECT 
    1 AS student_id, 
    ARRAY<STRUCT<number STRING, type STRING>>[ 
     STRUCT("(555) 555-5555", "cell")] AS phones 
    UNION ALL SELECT 
    5 AS student_id, 
    ARRAY<STRUCT<number STRING, type STRING>>[ 
     STRUCT("(555) 555-1234", "home"), 
     STRUCT("(555) 555-4321", "cell")] AS phones 
), 
Courses AS (
    SELECT 
    5 AS student_id, 
    ARRAY<STRUCT<id INT64, name STRING>>[ 
     STRUCT(10, "Data Analysis")] AS courses 
    UNION ALL SELECT 
    1 AS student_id, 
    ARRAY<STRUCT<id INT64, name STRING>>[ 
     STRUCT(10, "Data Analysis"), 
     STRUCT(101, "Algorithms")] AS courses 
) 
SELECT 
    student_id, 
    phones, 
    courses 
FROM Students 
JOIN Courses 
USING (student_id); 

傳統的SQL會使用這樣的:

SELECT 
    s.student_id AS student_id, 
    s.phones.number, 
    s.phones.type, 
    c.courses.id, 
    c.courses.name 
FROM Students s 
JOIN Courses c 
ON s.student_id = c.student_id; 
0

對於傳統的SQL

SELECT 
    s.student_id AS student_id, 
    phones.number, 
    phones.type, 
    courses.id, 
    courses.name 
FROM Students s 
JOIN Courses c 
ON s.student_id = c.student_id 

注:你將需要檢查Allow Large Results複選框,並取消Flatten Results複選框以保存結果到表保留模式

+0

我的選擇肯定會使用標準SQL選項,如@ElliottBrossard回答 –

+0

糟糕,我錯過了遺留SQL不允許選擇非葉字段的事實;我更新了我的例子。但是,是的,如果可以的話,+1使用標準SQL。 –

+0

你看到的那個已經是我的了:o) –