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배 이상일 때의 코발트 예측가격과 텅스텐 예측가격을 알려줘

댓글남기기