SQL/Google Big Query

[빅쿼리 #3] 테이블 생성/삭제, 값 삽입할 때, from절 검색시 오류가 발생해요.

Delants 2023. 1. 18. 15:06

[Today's Agenda]

테이블 생성 및 삭제 시 오류 대처 방법

값 삽입 시 오류 대처 방법

from절 오류 대처 방법

 

[How to solve]

빅쿼리의 구조를 이해합니다. (프로젝트명.데이터셋.테이블)

 


 

아래처럼 테이블까지 모두 만들었습니다.

이제는 테이블 스키마를 정의하고 직접 값을 넣어야 할 때입니다.

https://dtandard.tistory.com/17

 

[빅쿼리 #2] 프로젝트 및 데이터셋과 테이블 만들기

https://dtandard.tistory.com/16 #1. 구글빅쿼리 무료로 시작하기 오늘은 구글 빅쿼리를 무료로 시작하는 방법에 대해 살펴보겠습니다. sql을 사용하다보면 구글 빅쿼리를 한 번쯤 들어보았을 것입니다.

dtandard.tistory.com

 


1. 테이블 만들고, 스키마 정의하기

 

먼저 빈 테이블로 만들면 스키마가 존재하지 않는 상태이므로

일단 임의로 간단한 테이블 스키마를 정의해 보겠습니다.

product_id(상품id)와 product_name(상품이름)은 문자형태(string)

product_price(상품가격)은 숫자형태(integer)로 정의해 보았습니다.

사실 여기서는 일반적으로 많이 사용하는 varchar, varchar2와 같은 가변길이 문자열을 사용해도 에러가 나는데,

이 경우는 오늘의 메인 토픽이 아니므로 다음에 살펴보도록 하겠습니다.

 

하지만 넣으려니 오류가 발생하여 뭔가 잘 되지 않습니다. 왜 그럴까요?

 

위 사진의 아래 오류를 읽어보면 다음과 같습니다.

테이블 'sales'는 테이터셋(dataset.table)로 한정되어야 한다.

 

#2에서 말씀드린것 처럼, 빅쿼리는 프로젝트, 데이터셋, 테이블의 구조를 가진다고 말씀드렸습니다.

빅쿼리는 이 구조를 지켜가야 합니다. 

근데 앞에서는 어떻게 했습니까. 바로 테이블 이름을 명명하였었죠.

이렇게 바로 create table sales (~~~~)를 하게 된다면 빅쿼리상에서는 이렇게 말할 것입니다.

"테이블을 만들라는데 뭐 어디에 만들라는 건지 모르겠네" 라고요.

빅쿼리상에서 바로 테이블을 인식을 못하기 때문입니다.

 

그래서 빅쿼리가 인식해주기 위해서는 프로젝트명.데이터셋.테이블과 같은 형태로 지정해 줘야 합니다.

이렇게 했더니 이름이 sale인 새 테이블이 생성되었다고 나옵니다. 이렇게 하면 이제 스키마까지 지정한 테이블이 생성이 된 것입니다.


2. 테이블 안에 값 넣기

이렇게 되었다면 이제 직접 값도 넣어줘야 겠지요.

insert into 구문을 사용해 값을 넣어보겠습니다.

여기서도 중요한 것은 프로젝트명.데이터셋이름.테이블이름을 지정해 주어야 한다는 것입니다.

테이블에 있는 속성을 보려면, 테이블을 클릭하고, 미리보기 탭에 들어가면 확인할 수 있습니다.


3. 이제 데이터를 검색해 봅시다. 하지만 오류가 발생한다면요?

 

본격적인 분석을 하기 위해 'product_id가 'A001'인 상품의 가격을 알고 싶어서 쿼리를 입력해 보았습니다.

먼저 일반적으로 오라클에서 SQL을 입력하는 방식대로 해 보았습니다.

그랬더니, 역시 위와 같은 오류가 납니다.

FROM절에서 데이터를 검색할 경우에도 위와 같이 프로젝트.데이터셋.데이터의 형태로 지정해 줘야 합니다.

그래서 아래와 같이 from절의 구문을 수정했더니

정상적으로 결과가 출력됨을 알 수 있습니다.

 


이렇게 오늘은 테이블 만들기, 데이터 입력, from절에서 데이터를 검색할 때 오류가 나는 것을 확인해 보았습니다.

매우 기초적인 부분이지만 저도 공부할 때 많이 당황스러웠기에, 다른 분들께도 도움이 되고자 글을 작성해 보았네요.

이제는 오류 없이 간단한 정도의 테이블을 만들고, 데이터를 삽입하고, 값을 검색할 수 있을 것 같습니다.

물론 매번 입력하는것이 적응이 되지 않고 귀찮을 수 있습니다. 이전의 쿼리에서 복사-붙여넣기 등을 한다면 시간을 조금이나마 단축시킬 수 있을 것이라 생각합니다.

 

감사합니다.