Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Преобразовать human search string в SQL запрос  [new]
Игорь Бобак
Member

Откуда:
Сообщений: 424
Всем добрый день.

Стоит задача написать код, который по имеющимся метаданным (информация о таблицах, связях, полях и т.д.) преобразует текст типа
"find all customers with sales bigger than 10K in year 2014"

в запрос
select customername, sum(amount)
from tblSales
where dateofsales between '20140101' and '20141231'
group by customername
having sum(amount) > 10000


ЕСТЕСТВЕННО имея при этом пачку метаинформации где-то о том, что есть поле customername - его синонимы "customer", "client" и тд.., что есть поле amount - оно агрегабельно по сумме, есть дата - dateofsales у которой будут синонимы-трансформеры типа year - который означает год от даты, и т.д.


То есть, на вход поступает human friendly query string, на выходе - SQL.

Кто знает какие-либо готовые наработки на эту тему, движки поиска в БД, или что либо в этом роде - буду очень благодарен.
19 авг 15, 22:37    [18042949]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Игорь Бобак,

Вам нужно гуглить: граматика, язык описания граматики (например, EBNF), AST-дерево. Если только я верно понял топик.
19 авг 15, 23:32    [18043219]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Игорь Бобак,

когда пилили SQL вроде этого и хотели "human search string".
19 авг 15, 23:34    [18043226]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
+ в дополнение либа

Yrony
bison
yacc
19 авг 15, 23:47    [18043267]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
Игорь Бобак
Member

Откуда:
Сообщений: 424
Наверное меня не все поняли.

Здесь есть видео, где показана BI система, которая умеет на основе обычного запроса вытянуть данные из БД. Она запрос пользователя преобразовывает в SQL. Надо сделать то же самое.

Мы не можем и не будем заставлять пользователя писать запрос по какой-то определенной грамматике. Он пишет как себе пишет - на английском. Нам же надо угадать что он хочет, и преобразовать его английский в SQL.
20 авг 15, 10:18    [18044116]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
londinium
Member

Откуда: Киев
Сообщений: 1176
А разве не чем-то подобным занимается Oracle/Cognos BI? Судя о рекламе, там даже писать не надо - достаточно метко попадать мышью
20 авг 15, 10:28    [18044188]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
o-o
Guest
Игорь Бобак
Мы не можем и не будем заставлять пользователя писать запрос по какой-то определенной грамматике. Он пишет как себе пишет - на английском. Нам же надо угадать что он хочет, и преобразовать его английский в SQL.

у вас в тексте одно, а в видео другое.
там не запрос на лету строится, а ищут отчеты,
где упоминаются какие-то ключевые слова.
но я знаю, к кому вам можно обратиться.
недавно тут рекламировался продукт, вычитывающий запрос прямо из головы пользователя,
я думаю, вы найдете общий язык
18035433
20 авг 15, 10:34    [18044239]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
o-o
Guest
londinium
А разве не чем-то подобным занимается Oracle/Cognos BI?

Когнос таким не занимается.
Когнос -- это то же ВО, только в профиль, ну у них еще MDX такой продвинутый.
это же построитель отчетов, а не поисковик
20 авг 15, 10:37    [18044256]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
o-o
Guest
londinium,

или вы в смысле "кубы крутить"?
посмотреть продажи в разрезе того-сего?
ну да, Когнос позволяет, так и Microsoft Analysis Services такой же.
только когда ты разрезаешь всяко куб, ты его уже выбрал, т.е. известно, с чем работаешь.
а ТС-у надо, чтобы еще и сам куб/таблицу угадали.
и тут Когнос не поможет
20 авг 15, 11:08    [18044488]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
londinium
Member

Откуда: Киев
Сообщений: 1176
автор
или вы в смысле "кубы крутить"?

Нет, я в смысле рекламного проспекта - "бизнес-пользователь" (за этот термин вообще к стенке нужно поставить) чего-то там накидывает мышой, а сервер трансофрмирует получившийся логический запрос в физический (что-то подобное пишут в книжке по Oracle BI)
20 авг 15, 11:23    [18044586]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
londinium
автор
или вы в смысле "кубы крутить"?

Нет, я в смысле рекламного проспекта - "бизнес-пользователь" (за этот термин вообще к стенке нужно поставить) чего-то там накидывает мышой, а сервер трансофрмирует получившийся логический запрос в физический (что-то подобное пишут в книжке по Oracle BI)


коли написано тестируйте/покупайте.

реализация преобразовнаия не тривиально. самим такое реализовать будет сложно и будет зависеть, насколько гибко будет формулироваться исходная мысль (а что если я начну разбрасываться разными временами и причастными/деепричастными оборотами?). :)
20 авг 15, 12:01    [18044892]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
+ да еще и с ошипкаме?
20 авг 15, 12:02    [18044901]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
o-o
Guest
londinium
автор
или вы в смысле "кубы крутить"?

Нет, я в смысле рекламного проспекта - "бизнес-пользователь" (за этот термин вообще к стенке нужно поставить) чего-то там накидывает мышой, а сервер трансофрмирует получившийся логический запрос в физический (что-то подобное пишут в книжке по Oracle BI)

ну так я и говорю, BO (Business Objects) из той же оперы.
1 товарищ делает universe(BO) (framework в Когносе), остальные юзеры мышью таскают прямоугольнички.
такое нагенерить можно, сервер встанет.
у нас неадвно BO уложило сервер, все еле шевелилось.
если супер-юзер забывает фильтр кинуть в свой отчет,
это дело спокойно запрашивает миллионы строк из неск. десятков таблиц.
такое ни прочесть, ни распечатать, это надо запрещать делать вообще.
в старом десктопном варианте хоть можно было ограничить число выдаваемых строк насильно глобальным параметром,
в новом WI или нет, или у нас не ограничили, короче, это было нечто.
жалко, оно им на экране не показывает сгенеренное огромными буквами и мигая,
некоторым бы стоило ужаснуться, чего запросили
----
только на видео у ТС не это.
там в строке поиска забили слова, получили результаты.
никто ничего не таскает
20 авг 15, 12:07    [18044920]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
Игорь Бобак
Member

Откуда:
Сообщений: 424
коллеги, что-то вас всех занесло не в ту сторону.

мне не нужен когнос. мне не нужен готовый софт. и мне не нужен сарказм о том, что комп внедряется кому-то в мозги.

мне нужен алгоритм, который по заданому человеческому запросу построит SQL.

пожалуйста, если не знаете ответа - не флудите. большое спасибо за понимание.
20 авг 15, 12:20    [18044988]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
а по запросу "begin nuclear war" подломит сервер пентагона? )

вобще задача интересная, но думается, даже будучи реализованной останется мало используемой, не особо нужной, но очень рекламной фишкой
20 авг 15, 12:20    [18044990]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
o-o
Guest
Игорь Бобак
мне нужен алгоритм, который по заданому человеческому запросу построит SQL.

ну, я это дело вижу без малейшего оптимизма.
вы видели, скольно сюда заходит людей,
к-ые не в состоянии сформулировать, что они вообще хотят?
да, на выходе им нужен запрос.
иногда даже показывают желаемый результат.
бывает, приводят скрипты исходных таблиц.
и полфорума бьется над тем, чтобы понять,
что же товарищ наформулировал, а что ему надо на самом деле.
20 авг 15, 12:42    [18045122]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
Игорь Бобак,

Если вы хотите более полезных ответов, то вам в ветку проектирование бд, а не сюда, где разбирают конкретные вопросы sql.
Если есть проблемы с написанием select то предоставьте всё согласно этому, а то у вас двойные стандарты, сами правила не соблюдаете но флуд при этом почему то не принимаете.
20 авг 15, 12:46    [18045147]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
автор
который по имеющимся метаданным (информация о таблицах, связях, полях и т.д.) преобразует текст типа
"find all customers with sales bigger than 10K in year 2014"


Ага, а по запросу "хочу операционную систему как виндовс только с крулглыми кнопками" быстро-решительно пишет ось, и ставит её вам на комп.

Если отставить в сторону сарказм - то что вы хотите, никоим образом не относится к тематике форума.
20 авг 15, 15:39    [18046565]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
o-o
Guest
churupaha
londinium
пропущено...

Нет, я в смысле рекламного проспекта - "бизнес-пользователь" (за этот термин вообще к стенке нужно поставить) чего-то там накидывает мышой, а сервер трансофрмирует получившийся логический запрос в физический (что-то подобное пишут в книжке по Oracle BI)


коли написано тестируйте/покупайте.

реализация преобразовнаия не тривиально. самим такое реализовать будет сложно и будет зависеть, насколько гибко будет формулироваться исходная мысль (а что если я начну разбрасываться разными временами и причастными/деепричастными оборотами?). :)

to churupaha и тех, кто только описание читал, а сам не видел.
в таких программах нет "свободного написания".
мышью там накидываюрся конкретные объекты-поля конкретных таблиц,
фильтры -- тоже объекты, т.е. это прямо или готовое условие
dt = 2015, скрытое от пользователя рисунком с воронкой и надписью YEAR 2015,
или есть более гибкие объекты типа @Prompt,
там пользователь может сам ввести все тот же год,
но объект-то уже кем-то подготовлен, т.е. все это не на лету программа обрабатывает,
а конструирует запросы только из имеющегося в universe.
в universe его автор закладывает соединения между таблицами,
а не супер-пупер программа сама догадалась по названию поля.
т.е. если я хватаю квадрат col1 от одной таблицы и квадрат col2 от другой, а они не связаны,
то сгенерится
select col1, col2
from t1, t2
по дефолту в таком случае положено вываливать ошибку о cross join и не позволять работать дальше,
но можно и разрешить cross join, тогда наваяют, да
20 авг 15, 15:46    [18046616]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
Maxx_UA
Guest
OFFTOP :
Синочек хочу пару кило огурчиков,где взять ?

select t.place
from Places t
  iner join Products c on t.product_ID =c.product_ID
where c.name like N'%cucumber%'
  or  c.name like N'%огурец%'
  and t.QTY >= 2.0


)
А если еще добавлять языковую поддержку...то ой
20 авг 15, 15:53    [18046654]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Игорь Бобак
мне нужен алгоритм, который по заданому человеческому запросу построит SQL.


Этот алгоритм не будет в 2 строчки. Этот алгоритм будет опираться КАК МИНИМУМ (хочется вам или нет) на вот эту теорию:

18043226
18043267

Вот пример преобразования не такого уж и сложного google like запросов в full text search предикаты

Google Search to FTS

А теперь представьте, что в вашем случае вы хотите преобразовывать человеком написанные строки. Щас вам на блюдце кто-нибудь скопипастит.

автор
коллеги, что-то вас всех занесло не в ту сторону.
пожалуйста, если не знаете ответа - не флудите. большое спасибо за понимание.


жесть.
20 авг 15, 15:54    [18046659]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
o-o
churupaha
пропущено...


коли написано тестируйте/покупайте.

реализация преобразовнаия не тривиально. самим такое реализовать будет сложно и будет зависеть, насколько гибко будет формулироваться исходная мысль (а что если я начну разбрасываться разными временами и причастными/деепричастными оборотами?). :)

to churupaha и тех, кто только описание читал, а сам не видел.
в таких программах нет "свободного написания".
мышью там накидываюрся конкретные объекты-поля конкретных таблиц,
фильтры -- тоже объекты, т.е. это прямо или готовое условие
dt = 2015, скрытое от пользователя рисунком с воронкой и надписью YEAR 2015,
или есть более гибкие объекты типа @Prompt,
там пользователь может сам ввести все тот же год,
но объект-то уже кем-то подготовлен, т.е. все это не на лету программа обрабатывает,
а конструирует запросы только из имеющегося в universe.
в universe его автор закладывает соединения между таблицами,
а не супер-пупер программа сама догадалась по названию поля.
т.е. если я хватаю квадрат col1 от одной таблицы и квадрат col2 от другой, а они не связаны,
то сгенерится
select col1, col2
from t1, t2
по дефолту в таком случае положено вываливать ошибку о cross join и не позволять работать дальше,
но можно и разрешить cross join, тогда наваяют, да


сам не видел. но понятно, что - метер еду, сто неси.
20 авг 15, 15:56    [18046664]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
автор
мне нужен алгоритм, который по заданому человеческому запросу построит SQL.

Ну раз алгоритм, то ...

1 - разместить вакансию SQL программиста на соответсвующем сайте
2 - нанять SQL программиста
3 - дать программисту задачу "преобразовать хуман серч запрос в SQL код"

Задача решена!
20 авг 15, 16:03    [18046717]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
автор
мне нужен алгоритм, который по заданому человеческому запросу построит SQL.


+ в довесочек (вам же нужен алгоритм)

том 1

том 2


еще книжка

и еще замечу вот в этом почти тривиальном примере

Google search to FTS

используется AST-tree (в библиотеке Irony (ссылка есть в первых постах) оно реализовано)

не знаю, насколько вам удастся формализовать этот "human string" и формализуем ли он. а еще упретесь в поиск оптимального генерируемого запроса. успехов желаю (сарказм).
20 авг 15, 16:10    [18046772]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать human search string в SQL запрос  [new]
o-o
Guest
churupaha
сам не видел. но понятно, что - метер еду, сто неси.

о, да я покажу в наглядном виде, сразу ясно станет.
и топик оживим, а то картинок нет совсем

universe:
выбираем таблицы/представления из нужной базы,
устанавливаем ручками связи (оно не видит ФК и вообще ему фиолетово, все на совести дизайнера)
все поля папками появляются слева,
можно поля переименобвать и повыкидывать ненужное
Картинка с другого сайта.


отчет: таскать можно только то, что предусмотрено.
в нижнюю панель идут фильтры, на картинке кака раз типа @Prompt
Картинка с другого сайта.
----
какая же попа, когда надо заставить его сгенерить сложное.
с кучей поздапросов.
это ж за минуту руками пишется, но нет, надо заставить ЕГО сгенерить...

еще хорошо быть тупым юзером и не понимать, чего накидал.

а когда это на сервер приходит, я уже по одному виду скажу, когда автор ВО.
тут я типа им не занимаюсь и доступа к нему нет, но такое не забудешь и ни с чем не перепутаешь...
20 авг 15, 16:11    [18046789]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить