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: это только косметика.

Другие вопросы по тегам