TL;DR

  • InverSQL은 사용자가 선택한 CSV 셀을 기준으로 SQL을 생성하는 대화형 도구임.
  • 사용자가 CSV를 업로드하고 SQL 결과에 포함할 셀을 선택하면 해당 선택이 입력 조건으로 사용됨.
  • 데이터에 scikit-learn 이진 결정 트리(Binary Decision Tree)를 과적합한 뒤 트리를 불리언 논리로 변환함.
  • 불리언 논리를 sympy로 단순화하고 조인과 조건을 각각 JOINWHERE SQL 구문으로 변환함.
  • SQL 후보마다 결정 트리를 다시 학습해야 하지만 결정 트리 적합 속도가 빨라 UI에는 가장 짧은 쿼리가 표시됨.

작동 방식

  • SQL을 직접 작성하지 않으려는 사용자가 InverSQL Streamlit 앱에 CSV를 업로드함.
  • 사용자가 셀을 선택하면 해당 셀이 SQL 쿼리에서 선택될 데이터로 지정됨.
  • 업로드된 데이터에 scikit-learn 이진 결정 트리를 과적합함.
  • 결정 트리를 분해하고 불리언 논리(Boolean Logic)로 변환해 설명 가능한 인공지능(Explainable AI) 표현을 구성함.
  • sympy로 불리언 논리를 단순화함.
  • 앞선 단계의 결과를 SQL로 생성하며, 조인은 JOIN, 불리언 조건은 WHERE로 변환함.
  • 생성된 SQL을 사용자에게 표시함.

성능

  • 개별 SQL 쿼리 후보마다 새로운 결정 트리를 다시 학습해야 함.
  • UI에는 후보 중 가장 짧은 SQL 쿼리가 표시됨.
  • 결정 트리 적합은 빠른 편이므로 성능을 크게 우려할 필요 없음.

기여

  • 기여를 환영함.
  • 기여 방법은 CONTRIBUTING.md를, 행동 규범은 CODE_OF_CONDUCT.md를 참고함.

영감

  • regexgen의 처리 방식에서 영감을 얻음.
  • 정규 표현식 대신 SQL을 생성하고, 텍스트 선택 대신 레코드 선택을 사용함.
  • 결정 트리 자체가 핵심적인 영감임.