MariaDB 기반 SQLGate를 사용하여 최상 난이도 쿼리와 자연어를 매칭하는 작업을 하였다. [ manage_physical_table ]에는 NL2SQL 프로젝트에서 사용하는 모든 테이블에 대한 정보가 저장되어 있었으며, [ manage_physical_column ]에는 컬럼에 대한 정보가 들어 있었다.
[ manage_physical_table ] 의 join_table_id는 어떤 테이블에 join이 되어있는지를 나타내고 있었으며, join_table_column_id는 join의 기준 컬럼 id에 대한 내용이 담겨있었다. join_table_column_id에 해당하는 컬럼은 [ manage_physical_column ]에서 확인할 수 있다.
[ manage_physical_table ], [ manage_physical_column ]에 각각 한글명과 영문명이 나와있어서 자연어를 만들때 보고 참고하면 될 것 같다. 아래는 이에대한 간단한 예시이다.
[manage_physical_table]
id | … | logical_table_english | … | join_table_id | join_column_id | join_table_column_id |
---|---|---|---|---|---|---|
1 | … | TABLE_1 | … | (null) | (null) | (null) |
2 | … | TABLE_2 | … | 1 | 1 | 99 |
… | … | … | … | … | … | … |
[manage_physical_column]
id | data_physical_id | logical_column_korean | logical_column_english | … |
---|---|---|---|---|
96 | 1 | 년도 | year_1 | … |
97 | 1 | 가격 | price_1 | … |
98 | 1 | 단위 | unit_1 | … |
99 | 2 | 년도 | year_2 | … |
100 | 2 | 가격 | price_2 | … |
101 | 2 | 단위 | unit_2 | … |
… | … | … | … | … |
우선은 특정 테이블을 지정받아 다양한 쿼리를 만드는 연습을 하였다. 가령 1번과 2번 테이블을 지정받았다면, 다음과 같은 형식이 기본 틀이 되어 SELECT 2~3개 WHERE 조건 2개를 맞춰주면 되는 형식이다.
SELECT *
FROM TABLE1 AS T1
JOIN TABLE2 AS T2
ON T1.year1 = T2.year2
;
다음은 실제로 작성해본 최상 쿼리와 이에 매칭되는 자연어이다.
SELECT T1.co_estimated_price, T2.tun_estimated_price
FROM KOMIR_COBALT_PRICE_PREDICTION_DATA AS T1
JOIN KOMIR_TUNGSTEN_PRICE_PREDICTION_DATA AS T2
ON T1.co_prospect_period = T2.tun_prospect_period
WHERE T1.co_estimated_price >= 20
AND T2.tun_estimated_price / T1.co_estimated_price >= 10
;
코발트의 가격이 20 이상이면서 텅스텐 가격이 코발트 가격의 10배 이상일 때의 코발트 예측가격과 텅스텐 예측가격을 알려줘
댓글남기기