[질문] SQL Intelligent Automation Generator 가능할까요?

오호라의 이미지

SQL 지능형 자동 생성기( SQL Intelligent Automation Generator ) 가 가능할까요?

어느 정도 형식화된 SQL은 shell, perl, python ...등으로 쉽게 만들수 있을 것 같은데,

지능형이란 말처럼 표준( SQL-92, SQL-99 ... SQL/MM )을 두루 아울룰수 있을까요?

구글님의 힘을 빌려도 답이 안나오네요.

혹시라도 고수님들이 알고 계신 방법이 있는지요?

만약에 여러분이 만들어 본다면 어떻게 하실건가요?

혹시 알티베이스, 티맥스같은 회사에서는 가지고 계실까요?

정말 없다면 오픈 소프트웨어로 개발해볼까도 고민중입니다. ^^;

M.W.Park의 이미지

한국어 형태소 분석과 정보검색이라는 책에 관련 부분이 조금 나옵니다.
형태소분석을 활용하여 가격 정보 관련 query 생성하기라든지... 머 그런 종류.

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

오호라의 이미지

서평도 좋고, 강승식교수님이란 분이 유명하시다고 해서 보긴 본것도 같은데 한권 장만해야겠네요.

감사합니다.

이 기회에 만들어보는 것도 나쁘지 않을 듯 싶네요. ^^

Hello World.

김성진의 이미지

개발하시면 저희 회사에 파시죠..^^

SQL이 BNF로 되어있기 때문에 이 BNF를 읽어서 내부 트리로 유지한 이후에,

모든 경우의 수에 대해서 생성하면 될 것 같다고 예전에 고민만 조금 했습니다.

근데, 대상 Table의 schema나 갯수, join 혹은 기타 연산에 대해서

고려한 정교한 SQL이 생성되려면 아무래도 지능이 필요하고

이것을 어떻게 표현해야 하나 하는 고민도 했었구요...

오픈소스로 하시면 많은 반향이 있을 듯...

-----------------------------------------------------------
고도의 추상화, 극도의 구체화, 에디슨을 그리워하다.

고도의 추상화, 극도의 구체화, 에디슨을 그리워하다.

오호라의 이미지

SQL-92 -> bison ( yacc ) -> y.output -> Abstract Syntax Graph -> depth-first search -> SQL
SQL-99                                                        -> Breadth-first search
SQL/MM                                                        -> weight based ...
 
                                      -> y.vcg -> Abstract Syntax Tree -> depth-first search -> SQL
                                                                       -> Breadth-first search
                                                                       -> weight based ...
----------------------------------------------------------------------------
                                      -> y.tab.c -> SQL

제가 생각하는 방법도 비슷합니다.

"SQL BNF 100% 커버리지"을 만족하기 위해서는 가장 이상적인 방법은 역시나

컴파일러툴 ( lex, flex, yacc, bison, ANTLR 류 ) 을 이용하는 것입니다.

일단 직접 yacc 에 하드코딩하는 방법도 있고, 아니면 메타파일( .vcg, .output ) 등을 이용하는 방법도 있을 것같습니다.

일단 생각하고 있는 방법은 메타파일을 이용하는 방법입니다.

graphviz 소스를 조금 활용하면 될듯 싶습니다.

AST, ASG..등 만들어지면 문제는 검색(순회)인데, 이것도 어느정도 만족할 수준까지 될듯싶습니다.

커버리지 100%도 사실 문제는 없을듯 싶은데, 진짜 문제는 얼마나 유용한(?) SQL을 만들어 내냐가 문제인 듯싶습니다.

이럴 때 뉴럴네트웍을 쓰는지 모르겠습니다. ^^;

근데 의외로 문제는 데이터셋을 구성하는 일수 있을 것같습니다.

그리고, 잘 만들어서 공개하면 의외로 SQL injection 기법에 활용되지 않을까도 생각해봤습니다. ^^;

SQL BNF
http://savage.net.au/SQL/sql-92.bnf

------------------------------------------------------------------------------------------

>man bison
...
-g
       Output  a VCG definition of the LALR(1) grammar automaton com-
       puted by Bison.  If the grammar file is foo.y , the VCG output
       file will be foo.vcg.
...
-v
--verbose
       Write an extra output file containing verbose descriptions  of
       the parser states and what is done for each type of look-ahead
       token in that state.
 
       This  file  also  describes  all  the  conflicts,  both  those
       resolved by operator precedence and the unresolved ones.
 
       The  file’s  name  is  made  by removing .tab.c or .c from the
       parser output file name, and adding .output instead.
 
       Therefore, if the input file is foo.y, then the parser file is
       called  foo.tab.c  by  default.  As a consequence, the verbose
       output file is called foo.output.
...

참고로 .vcg 파일은 graphviz로 볼수 없습니다. 지원되는 툴이 별로 없는 실정입니다.

dot 파일로 convert 해서 graphviz로 보던지,

www.aisee.com 에서 평가판을 다운받으셔서 보시면 그래픽한 노드들을 볼수 있습니다.

aisee에서 보시면 edge가 파란색이면 reduce, 녹색이 shift 일겁니다. 아니면 반대입니다.

Hello World.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.