2017-01-22 2 views
2

아마존 서평 검토 데이터 세트를 분석하기 위해 google bigQuery를 사용하고 있습니다. 데이터 세트에는 다음과 같은 '유용한'열이 있습니다. 'helpful': [0, 0] 첫 번째 요소는 '예'투표이고 두 번째 요소는 '전체'투표입니다.Google bigQuery 분할 열

데이터 여관 bigQuery를 업로드 할 때 배열 형식을 지원하지 않기 때문에 열을 두 행으로 분할합니다. bigQuery screenshot. '시리즈를 적용'나는이 columns- '도움 투표'에 도움이 열을 분할 할 수 있습니다 파이썬 팬더의 방법 '총 투표'를 사용 : jupyter notebook screenshot

내가 BQ에서 동일한 작업을 수행하기 위해이 쿼리를 작성하는 경우 :

SELECT TA1.reviewerID, TA1.helpful AS yes, TA2.helpful AS total 
FROM table_name as TA1 

LEFT JOIN table_name as TA2 
ON TA1.reviewerID = TA2.reviewerID and TA2.helpful != TA1.helpful 
GROUP BY TA1.reviewerID 

나는 다음과 같은 오류가 발생합니다 : 오류 : (L1 : 27) : 표현 'TA1.helpful이'GROUP BY 목록에 존재하지 않습니다.

동일한 쿼리가 내 sqlite3에서 작동합니다. BQ에서 내가 뭘 잘못하고 있니?

감사합니다,

+0

, 당신이 그것을 공유 할 수있을 것입니다 작동 방법에 대한 자세한 내용을? –

+0

@Felipe [link] (http://jmcauley.ucsd.edu/data/amazon/) – biswajit

+0

고마워요! BigQuery에서 데이터를로드하고 공개 데이터를 공개하면 데이터 세트를 공개적으로 공유 할 수 있습니다. 또한 다음과 같은 질문에 더 쉽게 답할 수 있습니다 :). https://twitter.com/felipehoffa/status/761635507080081408 –

답변

2

다음은 가

당신은

#standardSQL 
WITH table_name AS (
    SELECT 'A' AS reviewerID, [0,0] AS helpful UNION ALL 
    SELECT 'B' AS reviewerID, [0,2] AS helpful 
) 
SELECT 
    reviewerID, 
    helpful[OFFSET(0)] AS helpfulVote, 
    helpful[OFFSET(1)] AS totalVote 
FROM table_name 

이 이상 Accessing Array Elements

에서보기 아래로 더미 데이터로 테스트 할 수 있습니다

#standardSQL 
SELECT 
    reviewerID, 
    helpful[OFFSET(0)] AS helpfulVote, 
    helpful[OFFSET(1)] AS totalVote 
FROM table_name 
BigQuery에 표준 SQL입니다 일부 경우에 대한 경우 마지막으로

#legacydSQL 
SELECT 
    reviewerID, 
    MIN(helpful) WITHIN RECORD AS helpfulVote, 
    MAX(helpful) WITHIN RECORD AS totalVote 
FROM table_name 

The same query works in my sqlite3. What am I doing wrong in BQ?

그리고 이슨 당신은 아직도 당신이 버전 아래에 사용할 수 BigQuery에 기존 SQL을 사용하는 (이 사용하는 기본 버전으로 그동안 표준 SQL에 Migrating from legacy SQL 참조), 당신은 당신의 원래 쿼리를 원하는 경우 일/고정 - 아래 참조 및 GROUP BY이 흥미로운 데이터 세트처럼 보인다

#legacydSQL 
SELECT 
    TA1.reviewerID as reviewerID, 
    MIN(TA1.helpful) AS yes, 
    MAX(TA2.helpful) AS total 
FROM table_name as TA1 
LEFT JOIN table_name as TA2 
ON TA1.reviewerID = TA2.reviewerID -- and TA2.helpful != TA1.helpful 
GROUP BY TA1.reviewerID