2017-12-18 1 views
0

내 직업은 여러 배열의 값을 요약하여 처리해야하며 지식이 부족합니다. 이 그룹의 통찰력과 도움은 크게 감사하겠습니다.열의 배열 값 요약

도전 :

I 단일 컬럼의 BigQuery 테이블 내의 각 행 TLD의 도메인의 배열을 갖는다. 각 TLD별로 그룹화하고 각 TLD의 총 수를 새 테이블로 반환하고 싶습니다. 도움에 미리

["biz","us","international","eu","com","co","world","us","international","eu","co","biz"] 
["com","co","world"]   

응답

**TLD_Name** 
biz 2 
us 2 
international 2 
eu 2 
com 2 
co 3 
world 1 

감사합니다. 배열 열이 tlds라는 것을 가정하면

답변

2

, 당신은 다음과 같은 표준 SQL 쿼리를 실행할 수 있습니다

SELECT 
    tld AS TLD_Name, 
    COUNT(*) AS count 
FROM YourTable 
CROSS JOIN UNNEST(tlds) AS tld 
GROUP BY tld; 

이 "병합"배열하고 각 TLD와 관련된 수를 얻을 수있는 효과가있다.

+0

매우 유용합니다. "flattening"에 대한 설명에 감사드립니다. 이것은 제가 놓친 상황입니다. –

1

각 행의 tld 값이 매우 반복적이며 많은 수의 행이있는 경우 아래에 각 행 내부에 tld 수를 먼저 결합/집계 한 다음 전체 테이블 수준에서 요약하여 약간의 최적화를 제공 할 수 있습니다 (BigQuery 표준 SQL)

#standardSQL 
WITH `yourproject.yourdataset.yourtable` AS (
    SELECT ["biz","us","international","eu","com","co","world","us","international","eu","co","biz"] tlds UNION ALL 
    SELECT ["com","co","world","biz"] 
) 
SELECT 
    tld_count.tld AS tld, 
    SUM(tld_count.cnt) AS cnt 
FROM `yourproject.yourdataset.yourtable`, 
UNNEST(ARRAY(SELECT AS STRUCT tld, COUNT(*) AS cnt FROM UNNEST(tlds) AS tld GROUP BY tld)) AS tld_count 
GROUP BY tld 
+0

감사합니다. 이는 우리의 데이터가 반복성이 높기 때문에 효율성을 극대화하고 최대화 할 때 유용합니다. –

+0

도움이된다면 투표하십시오 - o) –