Проект Prela, разрабатываемый в UCLA RePL, опубликовал краткое техническое руководство по основным принципам нового языка запросов. Авторы объясняют их на игрушечной реализации на Python.

В Prela используются только бинарные отношения. Широкая таблица представляется набором двухколоночных отношений, которые связывают номер строки со значением столбца.

Главный оператор языка — композиция отношений. Select сопоставляет второй столбец первого отношения с первым столбцом второго, а цепочки select позволяют проходить через связанные сущности.

Пример из руководства выбирает американские фильмы с именем персонажа в названии и выводит название вместе с псевдонимом каждого актёра. Эквивалентный SQL-запрос занимает более 20 строк.

Проверка утверждений:

  • Проект Prela, разрабатываемый в UCLA RePL, опубликовал краткое техническое руководство, в котором на игрушечной реализации на Python объясняет основные принципы нового языка запросов. (подтверждено первоисточником: доказательство; «Prela is a new query language being developed at UCLA RePL . The language is quite different from SQL, but its key ideas are very simple. In this short tutorial, we will build a toy version of Prela in Python to understand its core principles.»)
  • Пример из руководства выбирает американские фильмы с именем персонажа в названии и выводит название вместе с псевдонимом каждого актёра; эквивалентный SQL-запрос занимает более 20 строк. (подтверждено первоисточником: доказательство; «the query finds every movie produced by an American company and has a character name in its title, and outputs the title along with the alias for each cast member. Note that the equivalent query in SQL spans over 20 lines.»)
  • В Prela используются только бинарные отношения, а широкая таблица представляется набором двухколоночных отношений, каждое из которых связывает номер строки со значением столбца. (подтверждено первоисточником: доказательство; «The first special thing about Prela is that there are only binary relations, i.e., tables with two columns. That may sound very limiting at first, but it’s easy to “binarize” a wide table with multiple columns.»)
  • Авторы мотивируют бинарные отношения тем, что они обобщают функции: одно входное значение может соответствовать нескольким выходным, а отношения при этом можно композиционно соединять. (подтверждено первоисточником: доказательство; «A function maps every input to a unique output, where as a binary relation can map an input to multiple different outputs. In a sense, a binary relation can be viewed as a nondeterministic function, and we can compose them just like how we compose functions.»)
  • Главный оператор Prela — композиция отношений: select сопоставляет второй столбец первого отношения с первым столбцом второго, а цепочки select позволяют проходить через связанные сущности. (подтверждено первоисточником: доказательство; «The composition of two relations r and s is itself a relation, first mapping x with r to get some y , then map y with s for the final “output”.»)
  • При переходе по внешнему ключу Prela автоматически добавляет разрешение идентификатора в строку, поэтому цепочка может читаться как путь по атрибутам — например, от фильма к стране компании. (подтверждено первоисточником: доказательство; «Because joining via a foreign key almost always require “resolving” an ID to a row, Prela automatically inserts that step so one can write the following, 4 which reads just like “a movie’s company’s country”!»)
  • Оператор & объединяет отношения по первому столбцу и позволяет выбирать несколько атрибутов; внутри where тот же оператор одновременно служит логической конъюнкцией условий. (подтверждено первоисточником: доказательство; «How do we have multiple conditions? A happy accident is that, becuase & joins its arguments, it doubles as logical conjunction once nested inside a .where :»)
  • Предикат eq оставляет пары с заданным значением во втором столбце, а where применяет такое отношение-предикат как фильтр к другому отношению. (подтверждено первоисточником: доказательство; «Finally, the restriction operator .where takes a predicate like the one above and filters another relation with it.»)
  • Любое подвыражение Prela само является допустимым запросом, поэтому промежуточный запрос можно вынести в обычную переменную Python, используя её как аналог CTE. (подтверждено первоисточником: доказательство; «Wait, did we just create a CTE with a plain Python variable? Yes! This is possible because Prela queries are made up of operators, and every subexpression is a valid query.»)
  • Помимо показанных операторов Prela поддерживает группировку и агрегацию; полная документация ещё готовится, а подробности пока предлагается искать в статье проекта. (подтверждено первоисточником: доказательство; «Prela also supports grouping and aggregation, and other common operators. We are working a full documentation for the language, so for now you can refer to our paper for more details.»)

Первоисточники:

оценка 60.9 · тип guide · ревизия 1 · истории st-v2u3ai