TGViewer
There will be no singularity There will be no singularity @nosingularity · 1.96K subscribers
Post #582 2K
​Пятничный SQL-WTF
Понедельничный SQL-TIL

Пару недель я занимаюсь описанием грамматики SQL-синтексиса базы snowflake. Это такая cloud-only база, которую пилят 8 лет, 1500 человек сотрудников, вышли месяц назад на IPO с оценкой $70B...

Как-то давно в твитерах молодежь жаловалась на непонятную документацию постгреса:
https://t.me/nosingularity/165

Как же выглядит синтаксис snowflake?
Выглядит он как письмо дяди Федора родителям (олды тут?).


1) Нет нормальной структуры.
Часть команд очевидно где-то есть, но найти их не получается. Например, есть описание ALTER ACCOUNT, а CREATE ACCOUNT нет.
Оно, наверное, логично - аккаунт, это сущность, получаемая в результате регистрации. Но если выполнить "несуществующую" команду
CREATE ACCOUNT user
то получим не syntax error, а SQL access control error: Insufficient privileges to operate on account 'USER'


2) Одни и те же сущности описываются разными ключевыми словами:
SOURCE_COMPRESSION = AUTO_DETECT | GZIP | ... | NONE
COMPRESSION = AUTO | GZIP | ... | NONE
еще:
FILE FORMAT, FILE_FORMAT, STAGE_FILE_FORMAT
и еще:
NETWORK POLICY, NETWORK_POLICY


3) Определения повторяются.
Описание параметров FILE FORMAT занимает несколько страниц и копируется из раздела в раздел, везде, где это свойство используется. Видимо, зарплата привязана к количеству строк :)


4) У команд есть алиасы, но про них ничего не сказано.
Случайно узнаешь об этом из примеров. Есть команда REMOVE, во всех примерах - RM.


5) Содержимое строк является частью синтаксиса.
SCHEDULE = '{num MINUTE | USING CRON expr time_zone }'
или вот:
externalStageParams (for Amazon S3) ::= URL = 's3://_bucket_[/_path_/]' ...
externalStageParams (for Google Cloud Storage) ::= URL = 'gcs://_bucket_[/_path_/]' ...
externalStageParams (for Microsoft Azure) ::= URL = 'azure://_account_.blob.core.windows.net/_container[/_path_/]'
Видимо, есть некоторые сомнения в когнитивных способностях пользователей azure, т.к. одного протокола оказалось недостаточно...


6) В некоторых командах строки можно НЕ БРАТЬ в кавычки.
В документации:
PUT file:///tmp/data/mydata.csv @my_int_stage;
А можно брать. Но узнаешь, только если попробуешь...


7) Ключевые слова иногда можно использовать в кавычках:
... COMPRESSION = AUTO ...
... COMPRESSION = 'AUTO' ...


8) Свойства описаны как обязательные, но на самом деле таковыми не являются.
И даже в примерах об этом ничего не нет. Например, в FILE FORMAT можно пропустить описание type и тогда будет считаться, что за основу взят CSV.


9) Порядок некоторых свойств может быть произвольный.
Узнать какие именно свойства не зависят от порядка можно только императивно. Например, о том, что CLUSTER BY можно воткнуть перед описанием колонок я нашел в примере на гитхабе у какого-то левого чувака:
create or replace TABLE "tablecluster" cluster by LINEAR(DATE, ID)(
DATE TIMESTAMP_NTZ(9),
ID NUMBER(38,0),
...
);


10) Описанный ограничения синтаксиса некоторых свойств в реальности не существуют.
В примере выше CLUSTER BY описан как
CLUSTER BY ( expr1 [ , expr2 ... ] )
То, что параметром может выступать функция, не сказано нигде.


11) Описание аналогичных команд имеет разный формат.
PUT file://_path_to_file_/_filename_ internalStage
GET internalStage file://_path_to_file_/_filename

Видимо, это связанно с возможностью использования свойств в произвольном порядке, но блин!


Опустим подробности, что зарегистрироваться жителям РФ они не дают. Просто "ой, не работает" на этапе регистрации, а в каких-то формах страны просто нет.
Но когда вы прорветесь в админку, можно будет порадоваться - они вернули мне мой 2007. Такая убогая и тормозная админка ставит их на одну ступень со всеми серьезными игроками - гугл и амазон :)
И это не считая того, что там визуально не обозначено и половины тех функций, которые описаны в документации.
  • 👍 1
More from @nosingularity
  1. Sep 19, 2026fixupx.com/KaiLentit/status/2100629518784328013/video/1
  2. Sep 18, 2026fixupx.com/iam_zachi/status/2100679300756435135
  3. Aug 30, 2026photo post
  4. Aug 25, 2026fixupx.com/meganreyno/status/2091918430374957416
  5. Aug 3, 2026Вышла новость, что Andy Pavlo приняли на борт Clickhouse Inc. Энди довольно известная фигу…
  6. Jul 23, 2026fixupx.com/unclebobmartin/status/2080257779395154409
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →