[BigQuery] 쿼리짜다 에러가 났다면 feat. 에러 메세지

y1nlog·2025년 1월 14일
0
post-thumbnail

오류(Error)

위키피디아 설명에 따르면, 오류(error)란 "방황핟, 길을 잃다"라는 뜻의 라틴어에서 유래했다.
즉, 부정확하거나 잘못된 행동을 의미함.

  • 오류메세지가 알려주고자 하는 것
    : 현재 작성한 방식으로 하면 답을 얻을 수 없다!
    이 부분에 문제가 된다고 알려주는 "길잡이 / 문제 진단 역할"

바라보는 관점

오류 메세지를 통해 더 좋은 방향으로 나아가면 되는 것!

SyntaxError, IndexError든 어떤 오류를 마주치더라도 좀 긍정적으로 바라보자는 것..ㅎㅎ

BigQuery Error

대표적인 오류 카테고리

  • SyntaxError
    : 잘못된 문법을 사용했을 때를 의미함.

Error message를 읽고 해석하여 -> 해결 방안을 찾으면 된다.

오류 메세지 검색
-> 구글 / 공식문서 / Generative AI 등

에러 메세지 해독하기 #1

Syntax error : SELECT list must not be empty at [10:1]

컬럼이 나와야 하는데 비어있다!
10번째 줄의 1번째에서 감지된다는 의미.

(cf.) ChatGPT 활용하기

  • 데이터 예시나 쿼리를 제공하고, 오류 발생 내용을 공유
  • 또 다른 시도 후에 오류 발생에 대해 공유하여 답변을 얻자.

에러 메세지 해독하기 #2

Number of arguments does not match for aggregate function COUNT 

해석 : 집계함수 COUNT의 인자 수가 일치하지 않는다.

SELECT
	COUNT(id, kor_name)
FROM basic.pokemon

이런 쿼리를 입력했을 때 발생할 수 있는 에러 메세지인데,
COUNT안의 인자로 여러 개를 줄 수 없기 때문에...

COUNT(1개의 인자)임을 알고 적용해주면 해결 가능하다.

에러 메세지 해독하기 #3

SELECT list expression reference column type1 which is neither grouped nor aggregated at [2:3]

해석 : SELECT 목록 식은 다음에서 그룹화되거나 집계되지 않은 열을 참조한다.

GROUP BY에 적절한 컬럼을 명시하지 않았을 때 발생하는 오류로, 아래와 같은 코드에서 이런 에러를 발견할 수 있다.

SELECT
	type1,
    COUNT(id) AS cnt
FROM basic.pokemon

FROM 하단에 GROUP BY type1만 추가해주면 해결.
COUNT 집계함수 앞에 type1이 있는데, GROUP BY가 없기 때문에 오류가 발생했다. 그룹화가 안 되어 있어서 해당 에러 메세지를 표출한 것.

에러 메세지 해독하기 #4

Syntax error : Expected end of input but got keyword SELECT at [8:1]

해석 : 입력이 끝날 것으로 예상되었지만 SELECT 키워드가 입력되었다.

[8,1]이라 함은 8번째 줄, 1번째 칸을 의미한다. 아래 코드를 보면 8번째 줄에 다시 SELECT를 선언하였는데, 앞단에 실행한 쿼리 밑에 바로 SELECT를 다시 작성하였기 때문에 발생하였다.

SELECT
	type1,
    COUNT(id) AS cnt
FROM basic.pokemon
GROUP BY
	type1

SELECT
	*
FROM basic.trainer

위는 오류 코드, 아래는 정상 작동하는 코드.

SELECT
	type1,
    COUNT(id) AS cnt
FROM basic.pokemon
GROUP BY
	type1;

SELECT
	*
FROM basic.trainer

다른 점은 단 하나 ; 세미콜론만 앞단 쿼리의 마지막에 찍어주면 되겠다.
복수개의 쿼리를 한 번에 실행하려고 한다면, 이런 식으로 쿼리를 구분해주면 정상 작동하게 된다.

에러 메세지 해독하기 #5

Syntax error : Expected end of input but got keyword WHERE at [5:1]

해석 : 입력이 끝날 것으로 예상되었지만 5번째 줄의 1번째, 키워드 WHERE이 있다.

SELECT
	*
FROM basic.trainer LIMIT 10
WHERE
	id = 3

LIMIT 메소드는 제일 마지막에 선언되어야 하는데, 5번째 줄에 입력이 되었다고 해당 에러 메세지를 반환했다.

SELECT
	*
FROM basic.trainer
WHERE
	id = 3
LIMIT 10

위와 같이 LIMIT을 아래로 옮겨주거나, 아예 삭제해도 되겠다.

에러 메세지 해독하기 #6

Syntax error : Expected ")" but got end of script at [8:1]

해석 : ")"가 예상되지만, 스크립트가 끝났다.
-> 괄호가 작성되지 않은 경우!

이런 오류가 발생한 코드는

SELECT
	name,
FROM (
	SELECT
    	*
    FROM basic.trainer
    WHERE
    	id =3

괄호만 넣어주면 해결이 되겠다!

오류 메세지 해결의 핵심

  • 오류를 직면하게 된다면, 오류 메세지를 번역해서 해석해라!
  • 해결 방법은 구글/공식문서/AI/커뮤니티 등을 활용해 찾아낼 수 있음.
초보자를 위한 BigQuery(SQL) 입문
3-4 오류를 디버깅하는 방법
profile
FrontEnd Developer

0개의 댓글