다양한 SQL 방언을 위한 LLM 기반 세분화 파싱
SQLFlex는 전통적인 문법 파서와 대형 언어 모델(LLM)을 결합해, 클라우스‑레벨과 표현식‑레벨 세분화 전략으로 방언‑특화 구문을 자동으로 분할·파싱한다. 실험 결과, 8개 방언에서 91.55%~100%의 파싱 성공률을 보이며, SQLLint와 테스트 케이스 축소 작업에서 기존 도구들을 크게 능가한다.
저자: Junwen An, Kabilan Mahathevan, Manuel Rigger
본 논문은 SQL 방언의 다양성으로 인해 기존 문법 기반 파서가 겪는 문제점을 상세히 분석하고, 이를 해결하기 위한 새로운 파싱 프레임워크인 SQLFlex를 제안한다. SQL은 표준(SQL‑92) 외에도 각 DBMS가 자체적으로 확장한 방언을 가지고 있어, 특정 방언에 특화된 구문(예: TSQL의 TOP, OPTION, 특수 연산자 등)이 표준 문법에 포함되지 않는다. 이러한 방언‑특화 구문은 기존 파서가 파싱을 중단하게 만들며, 특히 SQLFluff, SQLGlot 같은 다중 방언 파서도 새로운 방언을 지원하려면 수천 줄의 코드와 수백 개의 규칙을 추가해야 하는 높은 유지보수 비용이 발생한다.
LLM은 최근 SQL 이해 및 Text‑to‑SQL 작업에서 뛰어난 성능을 보였지만, 자동으로 AST를 생성하는 데는 계층적 구조 처리와 hallucination 문제 때문에 한계가 있다. 저자들은 이러한 두 접근법의 장단점을 결합해 “계층적 파싱을 순차적 세분화 작업으로 전환”한다는 핵심 아이디어를 도출한다. 구체적으로, SQLFlex는 다음과 같은 흐름으로 동작한다.
1. **초기 문법 파싱**: 입력 쿼리를 기존 문법 파서에 전달한다. 파싱이 성공하면 바로 AST를 반환한다.
2. **실패 감지 및 세분화 트리거**: 파싱이 실패하면, 실패 원인이 방언‑특화 토큰임을 감지하고 LLM 기반 세분화 모듈을 호출한다.
3. **클라우스‑레벨 세분화**: SELECT, FROM, WHERE, OPTION 등 비교적 평탄한 클라우스를 독립적인 세그먼트로 분리한다. 이때 LLM은 “SELECT … FROM …”, “WHERE …”와 같이 각 클라우스의 경계와 포함 토큰을 예측한다.
4. **표현식‑레벨 세분화**: WHERE 절 내부의 복잡한 연산식, 서브쿼리, 사용자 정의 연산자 등을 더 작은 표현식 단위로 나눈다. 재귀적 구조를 가진 표현식은 LLM이 마스크 토큰(예: )을 삽입해 파서가 일시적으로 인식하도록 만든다.
5. **재파싱 및 검증**: 각 세그먼트를 문법 파서에 다시 입력한다. 파싱 성공 여부와 입력‑출력 일관성(예: 토큰 수, 연산자 위치) 등을 검증한다. 검증에 실패하면 추가 세분화 혹은 LLM 재프롬프트를 수행한다.
6. **AST 통합**: 모든 세그먼트가 성공적으로 파싱되면, 파서가 생성한 부분 AST들을 연결해 최종 AST를 만든다.
이 과정에서 저자들은 “마스크”와 “앵커” 기법을 도입해 LLM이 생성한 임시 토큰을 파서가 이해하도록 하였으며, 파싱 후 LLM이 원본 토큰을 복원하도록 설계했다. 또한, 세분화 단계마다 입력‑출력 속성 검증(예: 연산자 순서, 괄호 짝)과 상호 배타성 검증을 수행해 hallucination을 최소화한다.
실험은 두 가지 실제 사용 사례와 독립적인 스탠드얼론 평가로 구성된다. 첫 번째 사용 사례는 SQL linting이다. ANSI 모드에서 SQLFlex는 기존 SQLFluff 대비 F1 점수가 63.68% 상승했으며, 방언‑특화 모드에서는 98.14%의 정확도로 SQLFluff(98.24%)과 거의 동등한 성능을 보였다. 두 번째 사용 사례는 테스트 케이스 축소이다. SQLFlex는 기존 테스트 케이스 축소 도구인 SQLess보다 최대 10배 높은 단순화율을 달성했다. 스탠드얼론 평가에서는 PostgreSQL‑전용 파서와 다중 방언 파서인 SQLGlot을 포함한 6개 베이스라인 파서를 대상으로 8개 방언(예: TSQL, MySQL, PostgreSQL, DuckDB, Oracle, Snowflake, Hive, SparkSQL)에서 10,000여 개의 쿼리를 테스트했다. 결과는 방언별 파싱 성공률이 91.55%에서 100% 사이였으며, 가장 어려운 방언에서는 기존 파서 대비 179.46%·138.04%의 향상을 기록했다.
논문은 또한 한계와 향후 연구 방향을 제시한다. 현재 SQLFlex는 “베스트‑에포트” 방식으로 LLM을 활용하므로, 정밀성이 요구되는 쿼리 최적화와 같은 분야에는 직접 적용하기 어렵다. 향후에는 쿼리 동등성 검증 도구와 결합해 파싱 결과의 논리적 정확성을 보장하거나, LLM의 출력에 형식 검증을 추가해 hallucination을 더욱 억제할 수 있다.
결론적으로, SQLFlex는 문법 파서의 정확성과 LLM의 유연성을 효과적으로 결합한 최초의 방언‑중립 파싱 프레임워크이며, 다양한 SQL 기반 애플리케이션(리닝, 테스트, 자동 변환 등)에서 수작업 없이 방언을 지원할 수 있는 실용적인 기반을 제공한다.
원본 논문
고화질 논문을 불러오는 중입니다...
댓글 및 학술 토론
Loading comments...
의견 남기기