오지's blog

insert into select 시 특정 컬럼만 제외하고 SELECT하는 방법 - SNOWFLAKE 본문

개발노트/데이터베이스

insert into select 시 특정 컬럼만 제외하고 SELECT하는 방법 - SNOWFLAKE

오지구영ojjy90 2023. 4. 5. 10:26
728x90
반응형

airflow의 배치를 통해 매일 쿼리를 수행하고 있다.

이때 insert into select 쿼리를 이용하여 매일매일 이력을 남기는데, select할때 load_dttm까지 가져오지만 실제적으로 쿼리 수행시간이 아닌 어제 쿼리 수행시간이 load_dttm값으로 insert되어 결과적으로 적재일시로서는 올바르지 않은 값이 들어갔었다.

 

insert_into_select_query = f"""
INSERT INTO {database_name}.{schema_name}.O_{table_name}_HIS
SELECT REPLACE(CURRENT_DATE(), '-') AS BASE_DD, * EXCLUDE LOAD_DTTM, CURRENT_TIMESTAMP()::timestamp_ntz
FROM {database_name}.{schema_name}.O_OCL_{table_name};
"""

- 배치가 돌아가는 파이썬 코드의 일부

 

 INSERT INTO A_WDB.ODS.O_ITEM_M_HIS
 SELECT REPLACE(CURRENT_DATE(), '-') AS BASE_DD, * EXCLUDE LOAD_DTTM, CURRENT_TIMESTAMP()::timestamp_ntz
 FROM A_WDB.ODS.O_ITEM_M;

- 파이썬 코드에 의해 수행되는 snowflake 쿼리

 

다음과 같이 *(스타) exclude 연산을 이용해 특정 컬럼을 제외한 나머지 컬럼을 모두 가져올수 있었고 위 쿼리를 통해 적재일시빼고 select하고 실제적으로 쿼리 수행시간에 맞는 적재일시가 insert된다. 사소한 것이지만 튼튼한 시스템을 위해서 꼼꼼함이 필요하다.

 

 

Comments