Как думаете, что делает запрос ниже?
FROM customer
|> LEFT OUTER JOIN orders ON c_custkey = o_custkey
AND o_comment NOT LIKE '%unusual%packages%'
|> AGGREGATE COUNT(o_orderkey) c_count
GROUP BY c_custkey
|> AGGREGATE COUNT(*) AS custdist
GROUP BY c_count
|> ORDER BY custdist DESC, c_count DESC;
А делает он то же, что вот этот:
SELECT c_count, COUNT(*) AS custdist
FROM
( SELECT c_custkey, COUNT(o_orderkey) c_count
FROM customer
LEFT OUTER JOIN orders ON c_custkey = o_custkey
AND o_comment NOT LIKE '%unusual%packages%'
GROUP BY c_custkey
) AS c_orders
GROUP BY c_count
ORDER BY custdist DESC, c_count DESC;
Главное отличие в том, что первая версия кода — это новый
А что не так со старым?
У SQL много плюсов, но давайте честно — это не самый простой язык. Иногда даже опытным экспертам бывает сложно разобраться, как написать или прочитать особенно хитрый запрос.
Но и отказываться от него не хочется: во-первых, мы все-таки его любим, а во-вторых, достойной альтернативы ему просто нет. Поэтому ребята из Google предложили решение — конвейерный синтаксис, который вы и видите выше.
Что такое GoogleSQL?
GoogleSQL — это диалект SQL, разработанный в Google.
К нему прикрутили поддержку «конвейерных» запросов (но обычные и смешанные тоже допускаются). Они отмечаются значком |> и в основном выполняют те же функции, что их «тезки» в стандартном SQL. Хотя есть и несколько экспериментальных, у которых нет аналогов.
🔜 Подробнее можно почитать в публикации от команды Google. Самое интересное начинается с 4 страницы — там про операторы, синтаксис и логику работы.
Если совсем кратко (чтобы влезло в пост в Tg), то главный плюс подхода, предложенного Google, — запросы намного проще писать, читать, редактировать, дебажить, добавлять новые операторы и так далее.
Вот такой апдейт для старого доброго SQL. Что скажете?
❤️ — так действительно удобнее
🌚 — это уже не SQL
