2016-08-15 2 views
0

에서 필드를 반복 결합하는 :BigQuery에 내가 2 개 테이블이 2 개 개의 다른 테이블

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

2 테이블 :

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

간단한 문제 정의를 유지하기를, 여기에 1의 스키마입니다 두 테이블 모두 동일한 수의 행과 동일한 학생 ID를가집니다.

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

어떻게 내가 BigQuery에서이 작업을 수행 할 수 있습니다와 같은 (2 개 별개의 반복 필드를 유지) 뭔가를 : 내가 필요한 것은 하나 개의 마스터 학생 테이블에 모두 반복 기록을 결합하는 것입니다? (나는 많은 접근법을 시도했지만 반복 된 필드에 대해 반복 행을 만드는 것을 끝내었다. stackoverflow에서 bigquery 마스터의 새로운 관점을 얻는 것이 좋을 것이다). 미리 감사드립니다.

답변

2

JOIN 두 데이터 세트를 선택하고 각각에서 관련 칼럼을 선택하십시오. standard SQL을 사용하여 예제를 설정하는 것이 더 쉽지만 ("Show Options"에서 "Use Legacy 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은 같은 것을 사용하는 것이 :

기존 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

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

내 선택은 @ElliottBrossard에서와 같이 Standard SQL 옵션으로 확실하게 갈 것입니다. –

+0

Oops, 나는 레거시 SQL이 비 리프 필드를 선택할 수 없다는 사실을 놓쳤습니다. 내 예를 업데이트했습니다. 하지만 가능하다면 표준 SQL을 사용하는 것보다 +1 할 수 있습니다. –

+0

당신이 이미 본 하나가 나와 있습니다 : o) –