>

코스 라에서 BigQuery 코스의 일부인 코드를 이해하려고했습니다. 검색어는 다음과 같습니다

  SELECT 
   CONCAT(fullVisitorId, CAST(visitID AS STRING)) AS unique_session_id,
   sessionQualityDim,
   SUM(productRevenue) AS transactions_revenue
   FROM
   transaction_table
   WHERE sessionQualityDim > 60
   GROUP BY unique_session_id, sessionQualityDim


내 질문은 SQL 문의 순서가 어떻게 실행되는지입니다. 주로 GROUP BY가 unique_session_id (두 열 사이의 CONCAT)에서 수행 될 때 'GROUP BY'는 계산 된 CONCAT 결과 (unique_session_id)를 어떻게 알 수 있습니까? 내 지식으로는 SELECT 문이 마지막에 실행될 것입니다. 그러나이 경우 CONCAT를 사용하여 첫 번째 필드를 계산 한 다음 그룹화를 위해 그룹화하여 그룹화하는 것처럼 보입니다. 누군가 이것에 대해 더 많은 통찰력을 줄 수 있습니까?


  • 답변 # 1

    SQL 표준에 따르면 GROUP BY   SELECT 전에파싱 .

    그러나 이것은 데이터베이스 사이에서 어렵지 않은 규칙이 아닙니다. BigQuery가 수행하는 작업은 SELECT 에서 열 별명을 판별하는 것입니다. . 그런 다음 GROUP BY 에서 이러한 별명을 허용합니다. . Postgres 및 모든 파생 데이터베이스와 같은 다른 데이터베이스도이 작업을 수행합니다.

    그러나 쿼리 구문 분석과 실행을 혼동하지 마십시오. 실행은 매우 복잡한 병렬 지향 비순환 그래프를 통해 이루어집니다. 여기서 일어나는 일은 단순히 BigQuery 파서가 사용자가 GROUP BY 에서 테이블 별칭을 사용할 수 있도록하는 것입니다. .

관련 자료

  • 이전 haskell - 일반 프로그래밍을 사용하여 모든 TypeRep을 가치있게 얻으십시오
  • 다음 eclipse - 프로젝트 패싯 Java 버전 17은 지원되지 않습니다