AWS 노트

Redshift에 쿼리 던질 때 'Invalid operation: syntax error at or near "첫행 이름" Position: 3x;'에러가 나는 이유

Jonchann 2020. 5. 12. 17:52

먼저, Redshift는 Postresql을 기반으로 하기 때문에 psql문법으로 쿼리를 던진다.

 

mysql과 psql의 커맨드 비교해 놓은 블로그가 있으니 링크를 올려둬야지.

혹시 나 이외에 이 글을 보는 사람이 있다면 일본어 몰라도 mysql문법을 알고 있다면 바로 무슨 소리인지 알아들을 수 있을테니 가 보는 것을 주저하지 않길 바란다.

https://qiita.com/aosho235/items/c657e2fcd15fa0647471

 

Glue에서 작업 플로우를 생성하기 위해 로컬에서 sql쿼리와 여타 코드를 함께 구현해 디플로이를 하면 로컬에서 작성한 예를 들어 아래와 같이 테이블을 작성하는 sql이 정상 작동할 것이다.


CREATE TABLE IF NOT EXISTS some_table (  
  user_id varchar(16),
  data_date date,  
  last_access_utc timestamp,  
  organization_id int
) SORTKEY (data_date);

(굳이 Glue가 아니더라도 Postico를 사용하면 DDL에서 테이블 작성시 던진 쿼리를 확인할 수 있다)

CREATE TABLE some_table (
    user_id character varying(16),
    note character varying(256)
);

다른 클러스터의 Redshift 등에 dump든 copy든 해야 한다면 처음에 사용했던 쿼리를 가져가서 실행해야 할 것 아닌가.

하지만 이대로 복사 Redshift 쿼리 편집기(DS2는 안된다. RA3로 바꾸자) 혹은 psql 커맨드에 붙여넣은 들 'Invalid operation: syntax error at or near "user_id" Position: 3x;' 에러가 뜨면서 테이블 작성에 실패한다.

이럴 땐 아래와 같이 indent를 다 지워야 한다.


CREATE TABLE IF NOT EXISTS some_table (  
user_id varchar(16),
data_date date,  
last_access_utc timestamp,  
organization_id int
) SORTKEY (data_date);
CREATE TABLE some_table (
user_id character varying(16),
note character varying(256)
);