SQL-запрос к JSONiq Query
Я хочу преобразовать SQL-запрос в JSONiq Query, есть ли уже реализация для этого, если нет, что мне нужно знать, чтобы создать программу, которая может это сделать?
1 ответ
Я не знаю о реализации, однако, это технически осуществимо и просто. JSONiq имеет 90% своей ДНК, полученной из XQuery, который сам был частично разработан людьми, которые также занимаются SQL.
С точки зрения модели данных, таблица отображается в коллекцию, а каждая строка таблицы отображается в плоский объект JSON, т. Е. Все поля имеют атомарные значения, например:
{
"Name" : "Turing",
"First" : "Alan",
"Job" : "Inventor"
}
Затем сопоставление выполняется путем преобразования запросов SELECT-FROM-WHERE в выражения FLWOR, которые предоставляют расширенный набор функций SQL.
Например:
SELECT Name, First
FROM people
WHERE Job = "Inventor"
Может быть сопоставлен с:
for $person in collection("people")
where $person.job eq "Inventor"
return project($person, ("Name", "First"))
Более сложные запросы также могут быть отображены довольно просто:
SELECT Name, COUNT(*)
FROM people
WHERE Job = "Inventor"
GROUP BY Name
HAVING COUNT(*) >= 2
чтобы:
for $person in collection("people")
where $person.job eq "Inventor"
group by $name := $person.name
where count($person) ge 2
return {
name: $name,
count: count($person)
}
На самом деле, если for
был вызван from
а также return
был вызван select
и если бы эти ключевые слова были написаны в верхнем регистре, синтаксис JSONiq был бы очень похож на синтаксис SQL: это только косметика.