2017-12-30 5 views
1

내 목표는 하나의 행이있는 표준 SQL을 사용하여 Google의 Big Query patents-public-data.patents.publications_201710 테이블에서 테이블을 만드는 것입니다. publication_number의 경우 assignee 및 assignee_harmonized.name 여기서 배부 번호가 여러 개인 레코드에 대해 publication_number가 반복됩니다. | 양수인 | assignee_harmSQL을 이용한 구글의 빅 쿼리 : 배정 된 사람이 여러 명일 경우 배정 된 사람과 조화 된 배정 된 사람 이름을 연결하십시오.

US-6044964-A | 소니 | SONY CORP

US-6044964-A | 디지털 오디오 디스크 공사 | 디지털 오디오 디스크

publication_number : 여기에 내 원하는 출력의 예 CORP

US-8746747-B2 | IPS 공사 - 용접 온 사업부 | IPS CORPORATION 용접 ON 계열

US-8746747-B2 | 널 | 맥퍼슨 테리 R

내가 그러나 this post

#standard SQL 
SELECT 
    p.publication_number, 
    p.assignee, 
    a.name AS assignee_harm 
FROM 
    `patents-public-data.patents.publications_201710` AS p, 
    UNNEST(assignee_harmonized) AS a 
WHERE 
    p.publication_number IN ('US-6044964-A', 
    'US-8746747-B2') 

에있는 UNNEST 제안의 기반으로 다음 쿼리를 시도했습니다, 출력은 다음과 같이 나타납니다

행 | publication_number | 양수인 | assignee_harm

1 | US-6044964-A | 소니 코퍼레이션 | SONY CORP

|| 디지털 오디오 디스크 |

2 | US-6044964-A | 소니 | 디지털 오디오 디스크 CORP

|| 디지털 오디오 디스크 공사 |

3 | US-8746747-B2 | IPS 공사 - 용접 온 사업부 | 맥퍼슨 테리 R

4 | US-8746747-B2 | IPS 공사 - 용접 온 사업부 | IPS CORPORATION 용접 ON 계열

"Sony Corporation"담당자가 행 2의 "DIGITAL AUDIO DISC CORP"조화 이름과 부적절하게 연관되어 있음을 볼 수 있습니다. 행 1과 2에는 각각 2 줄이 있지만 돈 publication_number 식별자를 반복하십시오. 나는 "assignee"의 숫자가 항상 "assignee_harmonized.name"의 수와 같지 않기 때문에 똑같은 순서로 나타나지 않는다. (그렇지 않으면 두 개의 테이블을 만들 수있다. 어떻게 든 그들을 합병). 반면에, "assignee"변수를 "assignee_harmonized.name"의 조화 된 값과 연관시키는 방법이 있어야합니다. 그렇지 않으면, 조화 된 값을 갖는 목적이 손실됩니다. 여러 개의 "지정자"또는 여러 개의 "assignee_harmonized.name"또는 둘 다있을 때 원하는 출력을 생성 할 쿼리 (또는 쿼리 집합)를 제안하십시오.

{ 
    "publication_number": "US-8746747-B2", 
    "assignee": [ 
     "IPS Corporation—Weld-On Division" 
    ], 
    "assignee_harm": [ 
     "MCPHERSON TERRY R", 
     "IPS CORPORATION—WELD ON DIVISION" 
    ] 
    } 

그래서 그 데이터 그리고 당신은 어떻게 든 이들의 조합을 처리하는 방법을 결정해야합니다 ... : 모든 것은 기본적으로 다음과 같습니다 -

답변

2

당신은 문자열과 두 배열에 대해 질의하고 모두 합류하면 :

#standard SQL 
SELECT 
    p.publication_number, 
    assignee, 
    assignee_harmonized.name AS assignee_harm 
FROM 
    `patents-public-data.patents.publications_201710` AS p 
    ,p.assignee assignee 
    ,p.assignee_harmonized AS assignee_harmonized 
WHERE 
    p.publication_number IN ('US-6044964-A','US-8746747-B2') 

.. 관계형 데이터를 제공합니다.또는 두 개의 개별 배열로 두십시오.

#standard SQL 
SELECT 
    p.publication_number, 
    assignee, 
    ARRAY((SELECT name FROM p.assignee_harmonized)) AS assignee_harm 
FROM 
    `patents-public-data.patents.publications_201710` AS p 
WHERE 
    p.publication_number IN ('US-6044964-A','US-8746747-B2') 

이 중첩 결과를 bq의 테이블로 저장할 수도 있습니다.