생각보다 SelectStmt SQL에서 따져야 할 Clause가 많진 않았다.
처음엔 일일히 모든 Case에 대해서 if 를 써 filtering 하는 것이 좀 비효율적으로 보였는데, 막상 따져보니 꼭 그렇지도 않다는 것.
📌 아래는 SelectStmt에 포함된 Clause 목록과 역할입니다.
SELECT | targetList | SELECT 절 (선택된 컬럼 및 집계 함수) |
FROM | fromClause | FROM 절 (테이블 목록 및 JOIN) |
WHERE | whereClause | WHERE 절 (조건 필터링) |
GROUP BY | groupClause | GROUP BY 절 (그룹화 조건) |
HAVING | havingClause | HAVING 절 (그룹화 이후 필터링) |
ORDER BY | sortClause | ORDER BY 절 (정렬 기준) |
LIMIT | limitCount | LIMIT 절 (최대 결과 개수) |
OFFSET | limitOffset | OFFSET 절 (결과 건너뛰기) |
DISTINCT | distinctClause | DISTINCT 절 (중복 제거) |
WINDOW | windowClause | WINDOW 함수 사용 여부 |
WITH | withClause | WITH 절 (CTE - 공통 테이블 표현식) |
FOR UPDATE / FOR SHARE | lockingClause | 레코드 잠금 (동시성 제어) |
VALUES | valuesLists | VALUES 절 (INSERT ... VALUES와 유사) |
UNION, INTERSECT, EXCEPT | op, larg, rarg | UNION, INTERSECT, EXCEPT 같은 집합 연산 |
오히려 귀찮은 건, Aggregation Function처럼 SELECT 절 안에 있는 targetList를 또 한 번씩 걸러내는 것이 귀찮을 뿐이다.
일단은 지금까지 작업한 Code에 Having과 같이 좀 특수한 코드만 좀 더 추가하고
이제 이 MODEL을 LLM에다가 연결시켜서 TEST를 진행한다.
그 전에, TEST를 진행해 볼 것
1. 기존 LLM이 SQL to NL을 잘 못하는 Case 파악 2. 이 때, LLM에 Table Schema + SQL to NL Parsing정보 (내 코드) 를 함께 주면 정확도가 올라가는 것 확인 |
첫 번째로 Ubuntu 환경 PostgreSQL에 Bird Bench Mark에 있는 데이터들 중에서
DB_id California_school에 해당하는 데이터를 Local PSQL에 깔아보기로 한다.
이걸 택한 이유는, 이 테이블이 좀 난이도가 있다고 생각하여서..!
BIRD-bench
BIRD Mini-Dev A Lite version of developtment dataset, which is designed to facilitate efficient and cost-effective development cycles, especially for testing and refining SQL query generation models. For more details, please visit the GitHub repository. Fo
bird-bench.github.io
Train Set은 거의 8~9GB에 육박하는 대용량 데이터이다;; 근데 일단 SQL-NL Gold Pair 말고 Data Set만 구현하면 되니까 아무거나 다운 받는다.
기본적으로 Data 는 SQLlist 기반으로 되어있다. 하지만 요것을 PostgreSQL상으로 가져올 수 있다는 것!
sqlite3 california_schools.sqlite .dump > california_schools.sql
이렇게 Linux 환경에서 sqlite를 sql 파일로 dump를 뜰 수 있다.
그리고, 이 파일을 PostgreSQL에 입히면 되는데 과정에서, 따옴표 제거 등.. 전처리가 좀 필요한데 이건 그냥 GPT돌려서 One by One으로 해결해나갔다. ( GPT 없으면 어떻게 살아남누.. )
나는 Bird라는 database를 만들고, 위 sql 파일을 덧입혔다.
psql -d bird -f california_schools.sql
일단 이것으로, PostgreSQL에서의 Setting은 끝났다.
이제는 이 PostgreSQL 시스템을 Python과 연결하는 일만 남았는데.. 이 놈이 항상 불안허다 ㅠㅠ
역시나 꼬였다..
문제는 WSL로 PSQL 접속중이라 그런 거 같다. 그래서 각종 PSQL의 configure를 바꿔주는 중
-- Default 값 of pg_hba.conf
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
이걸 아래와 같이 바꿔준다. md5 는 굳이 안 바꿔도 무관(md5 : password 무조건 넣게 하는 것)
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all md5
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5
그리고 또 하나! psql에서 postgresql.conf 도 바꿔줘야 한다.
아래 부분과 같이!
드디어 보는 success 라는 문구..ㅠㅠㅠ
내친김에 SQL문도 하나 날려보자..!!!!
일단 여기까진 성공,
다음 난관은. 내가 지금 INFO log로 날리고 있는 그 LOG문을 Python으로 가져올 수 있는지가 관건이다..!
화이팅.. To be continued..
'Data Science > Research & Paper' 카테고리의 다른 글
PostgreSQL SQL2NL(3) (0) | 2025.02.03 |
---|---|
PostgreSQL SQL2NL(2) (0) | 2025.01.14 |
PostgreSQL SQL2NL(1) (0) | 2025.01.08 |
PostgreSQL 실습에 유용한 code (1) | 2025.01.02 |
PostgreSQL 설치 및 특징 (2) | 2024.12.27 |