[입 개발] Spark SQL Query to Snowflake Query

Data Engineering 을 하다보면, 여러가지 툴을 사용하게 되는데, 그러게 되면서 생기는 필수적인 상황이, 툴에 따른 쿼리의 변환입니다. Hive Query를 사용했다면야, Spark으로 바꿀때는 바로 전환이 되니, 아무런 걱정이 없지만, Redshift라든지, SQL만 해도 Mysql과 다른 RDBMS의 쿼리들이 많이 다릅니다. 특히 요새 가장 인기가 있는 Data Engineer Tool이라면, Databricks나 Snowflake가 있을듯 합니다.(현재는 서로 영역이 좀 다르지만, 곧, 피터지는 싸움이 일어날 것으로 보입니다.)

그런데 Spark SQL을 Snowflake SQL로 바꾸거나, 반대로 바꿀려면 하면 쿼리가 조금 다릅니다. 그런데 이럴 때 리서치를 하다보니 신기한 툴이 있었습니다. phdata(https://www.phdata.io) 를 보면 SQLMorph(https://www.phdata.io/blog/sqlmorph-free-sql-translator-to-snowflake/) 라는 툴을 통해서 이렇게 Query Translation을 시켜준다고 합니다. 바로 사용해보니 뭔가 되는 거 같은… 심지어 Web UI와 Python Tool 까지 제공해 줍니다.(Python Tool은 Snowflake와 몇 개의 DBMS를 사용할 수 없는데, 간단한 잡시도로 사용할 수 있긴 합니다.)

그런데 다 되는지 알고 좋아했는데, 실제로 Spark SQL을 Snowflake로 바꾸면, 제대로 바뀌지 않습니다. 예를 들어 Spark SQL에 Structured Type 을 다 flatten 해주는 explode라는 함수가 있는데, 이런 건 변화를 해주지 않습니다. 특히 snowflake 의 flatten 은 사용하는 문법도 달라서 흑흑흑…

그래서 간단히 바뀌는 문법들만 공유하려고 합니다. 여기서 explode 와 get_json_object 형태가 조금 다르지만 아마도 금방 수정할 수 있을 꺼라고 생각합니다.

Spark SQLSnowflake
ARRAYARRAY_CONSTRUCT
explodeflatten
get_json_objectparse_json
date interval dateadd
regexp_extractregexp_substr
collect_setarray_agg