├── .gitignore ├── coding-interview.md ├── cost.md ├── misc.txt ├── non-db-sql.md ├── opensource-ast-tools.md ├── opensource-cypher-tools.md ├── opensource-sql-tools.md └── snowflake-vs-pg-ddl.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store -------------------------------------------------------------------------------- /coding-interview.md: -------------------------------------------------------------------------------- 1 | # interview preparation 2 | • cracking the coding interview (https://t.me/techskill/1737 - перевод) 3 | • https://www.interviewcake.com/ 4 | • https://www.pramp.com/ 5 | • https://www.geeksforgeeks.org/ 6 | • https://www.educative.io/ 7 | • https://www.careercup.com/ 8 | • https://github.com/jwasham/coding-interview-university 9 | • https://github.com/MaximAbramchuck/awesome-interview-questions/ 10 | • https://github.com/yangshun/tech-interview-handbook 11 | 12 | # challenges 13 | • https://www.hackerrank.com/ 14 | • https://leetcode.com/ 15 | • https://www.codewars.com/ 16 | • https://www.topcoder.com/ 17 | • https://checkio.org/ 18 | • https://www.codingame.com/ 19 | 20 | # algorithms, templates, etc 21 | • https://refactoring.guru/ 22 | • https://www.algoexpert.io/product 23 | • http://e-maxx.ru/ 24 | • https://informatics.mccme.ru/ 25 | • https://github.com/donnemartin/system-design-primer 26 | • https://github.com/solarrust/hacker-laws 27 | • http://aosabook.org/en/index.html -------------------------------------------------------------------------------- /cost.md: -------------------------------------------------------------------------------- 1 | # MIX 2 | 3 | Free Startup Discount Finder (by Bird Eats Bug) 4 | https://docs.google.com/spreadsheets/d/1os4lnrA8OPj6_fSNvXYvFmIEwOMkV2Q2L2irCnjSjZ8/edit?folder=0AC_m6TS5lFzXUk9PVA#gid=316050986 5 | 6 | https://twiliostartups.typeform.com/to/Kd3JLy 7 | 8 | A collection of services with great free tiers for developers on a budget. 9 | https://github.com/255kb/stack-on-a-budget 10 | 11 | # AWS 12 | 13 | wework + aws: 14 | 15 | - https://www.wework.com/ru-RU/signup?plan_ref=we_membership 16 | - https://store.wework.com/web-presence/aws-activate 17 | 18 | - https://aws.amazon.com/activate/ Кредиты на любые услуги AWS для стартапов до 100 тысяч $ до 1 тысяч $ (иногда можно договориться до 5 тысяч) 19 | - https://aws.amazon.com/ru/activate/founders/ 20 | 21 | Как от AWS получить 1000$ на стартап: 22 | https://aws.amazon.com/blogs/aws/aws-has-launched-the-activate-founders-package-for-startups-%F0%9F%9A%80/ 23 | Регистрируетесь, заполняете форму, указываете свой сайт плюс профиль на LinkedIn и вперёд! 24 | 25 | ⁠Если вы тренируете свою сетку распознавать котиков или у вас есть другие проекты, относящиеся к AI/ML, то тут можно получить от AWS до 10000$ (десять тысяч долларов прописью) на ваши эксперименты: 26 | https://pages.awscloud.com/GLOBAL-other-LN-accelerated-computing-free-trial-2020-interest.html 27 | 28 | https://www.f6s.com/deals/7962/up-to-30k-in-aws-web-hosting Кредиты на любые услуги AWS для стартапов до 30 тысяч $ до 30 тысяч $ 29 | 30 | # MORE CLOUD 31 | 32 | - https://www.digitalocean.com/hatch/ 33 | - https://developer.ibm.com/startups/ 34 | - https://cloud.google.com/developers/startups/ 35 | - https://startups.microsoft.com/en-us/ 36 | - https://www.alibabacloud.com/startup 37 | - https://startup.ovhcloud.com/en-ie/startups/ 38 | 39 | # Open-source alternatives and tools 40 | 41 | - https://opensource.builders/ 42 | - https://free-for.dev 43 | - https://acrossapp.com/blog/how-a-2-person-startup-already-uses-28-other-tools 44 | -------------------------------------------------------------------------------- /misc.txt: -------------------------------------------------------------------------------- 1 | https://github.com/xgenecloud/xgenecloud 2 | https://octoproject.github.io/octo-cli/ 3 | https://www.dbcore.org/ 4 | -------------------------------------------------------------------------------- /non-db-sql.md: -------------------------------------------------------------------------------- 1 | # JSON logs 2 | 3 | - SQL for JSON and CSV streams 4 | https://github.com/avz/jl-sql 5 | 6 | ```sh 7 | cat data.json | jl-sql 'SELECT key, SUM(value) AS sum, COUNT(*) AS count GROUP BY key' 8 | ``` 9 | 10 | # OS details 11 | 12 | - SQL powered operating system instrumentation, monitoring, and analytics. 13 | https://osquery.io/ 14 | 15 | ```sh 16 | osqueryi --json "SELECT * FROM mounts m, disk_encryption d WHERE m.device_alias = d.name AND d.encrypted = 0;" 17 | ``` 18 | 19 | # Images 20 | 21 | - Running sql update commands on images 22 | https://github.com/escherize/img_sql/ 23 | 24 | ```sh 25 | ./img_sql.py -i samples/matrix.jpg -o samples/matrix_out.jpg -s 'update pixels set r = g, b = r, g = b where x > 700' 26 | ``` 27 | 28 | - Everyone writes a Raytracer eventually 29 | https://github.com/chunky/sqlraytracer 30 | 31 | # MongoDB, DynamoDB, Kafka, S3 32 | 33 | - https://rockset.com/solutions/mongodb/ 34 | 35 | # Git 36 | 37 | - Query git repositories with SQL. Generate reports, perform status checks, analyze codebases. 38 | https://github.com/augmentable-dev/gitqlite 39 | 40 | ```sh 41 | gitqlite "SELECT * FROM commits" 42 | ``` 43 | 44 | - Query git repositories with SQL. Generate reports, perform status checks, analyze codebases. 45 | https://github.com/askgitdev/askgit 46 | ```sql 47 | SELECT count(*) FROM commits WHERE author_email = 'user@email.com' 48 | ``` 49 | 50 | # Play Music 51 | 52 | - Generating and sending MIDI messages 53 | https://relational-pipes.globalcode.info/v_0/examples-jack-midi-generating-1.xhtml 54 | 55 | # Cloud 56 | 57 | - Cloudquery transforms your cloud infrastructure into SQL database for easy monitoring, governance and security. 58 | https://cloudquery.io 59 | https://github.com/cloudquery/cloudquery 60 | 61 | ```sql 62 | SELECT * FROM aws_elbv2_load_balancers WHERE scheme = 'internet-facing' 63 | ``` 64 | 65 | - IaSQL codifies cloud APIs into SQL tables. You define cloud Infrastructure as SQL 66 | https://www.iasql.com/ 67 | 68 | - Use SQL to instantly query your cloud services (AWS, Azure, GCP and more). Open source CLI. No DB required. 69 | https://steampipe.io/ 70 | https://github.com/turbot/steampipe 71 | 72 | # k8s 73 | 74 | - Experimental tool to query K8s API using plain SQL 75 | https://github.com/Dentrax/kubesql 76 | 77 | ```sh 78 | $ kubesql -q "SELECT namespace FROM context WHERE pod.status.phase = 'Running'" 79 | ``` 80 | 81 | # Terraform 82 | 83 | - Run SQL queries on your Terraform infrastructure. Query resources and analyze its configuration using a SQL-powered framework. 84 | https://github.com/mazen160/tfquery 85 | 86 | ```sh 87 | tfquery -q 'select count(*) as count from resources;' --tfstate-dir /path/to/terraform-states 88 | ``` 89 | 90 | # Geodata 91 | 92 | - Display your spatial data on a map, no server required. Simply define the SQL query and get a ready-to-use tile endpoint 93 | https://www.vtiler.com/ 94 | 95 | ```sql 96 | SELECT id, name, line AS geom FROM roads WHERE line && bbox; 97 | ``` 98 | 99 | # Blockchain 100 | 101 | - SQL Server for queries various blockchains 102 | http://blockchainsql.io/ 103 | 104 | # Files 105 | 106 | - Find files with SQL-like queries 107 | https://github.com/jhspetersson/fselect 108 | 109 | ```sh 110 | fselect size, path from /home/user where name = '*.cfg' or name = '*.tmp' 111 | ``` 112 | 113 | - Query your CSV and JSON files with SQL. 114 | Flatbase is the data science platform for developers. Upload files, write SQL, visualize results, and share with collaborators. 115 | https://flatbase.io/ 116 | - CLI tool that can execute SQL queries on CSV, LTSV, JSON and TBLN. 117 | https://github.com/noborus/trdsql 118 | 119 | # Games 120 | 121 | - A little gomoku game, implemented in pure SQL/plpgSQL 122 | https://github.com/undergrinder/gomoql 123 | 124 | - A Doom-like game using DuckDB 125 | https://github.com/patricktrainer/duckdb-doom 126 | 127 | # AI 128 | 129 | - GPT in 500 lines of SQL 130 | https://explainextended.com/2023/12/31/happy-new-year-15/ 131 | -------------------------------------------------------------------------------- /opensource-ast-tools.md: -------------------------------------------------------------------------------- 1 | # JS/TS 2 | 3 | - A scanner for antlr4-based lexers. 4 | https://github.com/stevenmiller888/ts-antlr4-scanner 5 | 6 | - Bison in JavaScript 7 | http://jison.org 8 | https://github.com/zaach/jison 9 | 10 | - String parser combinators for TypeScript 11 | https://github.com/gcanti/parser-ts 12 | 13 | - Yet another simple Postgres SQL parser 14 | https://github.com/oguimbal/pgsql-ast-parser 15 | 16 | - This repo is a collection of sample code for some great SQL parsing libraries in a few major languages 17 | https://github.com/multiprocessio/sql-parsers -------------------------------------------------------------------------------- /opensource-cypher-tools.md: -------------------------------------------------------------------------------- 1 | # SCALA 2 | Parsing, AST and semantic analysis for the Cypher Query Language 3 | https://github.com/opencypher/front-end 4 | 5 | 6 | # PYTHON 7 | A python module to parse cypher query string and generate AST 8 | https://github.com/Mizzlr/pycypher 9 | 10 | # C 11 | Cypher Parser Library 12 | https://github.com/cleishm/libcypher-parser 13 | 14 | 15 | # C++ 16 | A Cypher parser/linter addon module for NodeJS 17 | https://github.com/Loupi/node-cypher-parser -------------------------------------------------------------------------------- /opensource-sql-tools.md: -------------------------------------------------------------------------------- 1 | # JS/TS/FLOW 2 | 3 | - Validate SQL queries in JavaScript and TypeScript code against your schema at build time 4 | https://github.com/andywer/postguard 5 | 6 | - A MySQL query analyzer 7 | https://github.com/stevenmiller888/ts-mysql-analyzer 8 | 9 | - A typescript language service plugin that gives superpowers to SQL tagged template literals. 10 | https://github.com/segmentio/ts-mysql-plugin 11 | 12 | - Convert mysql schemas into TypeScript interfaces 13 | https://github.com/stevenmiller888/mysql-schema-ts 14 | 15 | - An autocomplete engine for MySQL queries. 16 | https://github.com/stevenmiller888/ts-mysql-autocomplete 17 | 18 | - Parse simple SQL statements into an abstract syntax tree (AST) with the visited tableList and convert it back to SQL 19 | https://github.com/taozhi8833998/node-sql-parser 20 | 21 | - Generate Typescript types from Postgres 22 | https://github.com/kristiandupont/kanel 23 | 24 | - A postgres -> typescript interface generator 25 | https://github.com/vramework/schemats 26 | 27 | - Yet another simple Postgres SQL parser 28 | https://github.com/oguimbal/pgsql-ast-parser 29 | 30 | - Parse SQL (select) statements into abstract syntax tree (AST) and convert ASTs back to SQL. 31 | https://github.com/godmodelabs/flora-sql-parser 32 | 33 | - A SQL database implemented purely in TypeScript type annotations. 34 | https://github.com/codemix/ts-sql 35 | 36 | - pgTyped - Typesafe SQL in TypeScript 37 | https://github.com/adelsz/pgtyped/ 38 | 39 | - AlaSQL.js - JavaScript SQL database for browser and Node.js. Handles both traditional relational tables and nested JSON data (NoSQL). Export, store, and import data from localStorage, IndexedDB, or Excel. 40 | https://github.com/agershun/alasql 41 | 42 | - An in memory postgres DB instance for your unit tests 43 | https://github.com/oguimbal/pg-mem 44 | 45 | - Statically validate correctness of all your SQL queries. TypeScript, PostgreSQL 46 | https://github.com/MedFlyt/mfsqlchecker 47 | 48 | - SQL(select) parser written with jison. parse SQL into abstract syntax tree(AST) and stringify back to SQL 49 | https://github.com/JavaScriptor/js-sql-parser 50 | 51 | - JavaScript implentation of SQLite 3 query parser 52 | https://github.com/codeschool/sqlite-parser 53 | 54 | - A SQL parser written in pure JS 55 | https://github.com/forward/sql-parser 56 | 57 | - Evidence enables analysts to deliver a polished business intelligence system using SQL and markdown 58 | https://github.com/evidence-dev/evidence 59 | 60 | - (archived) JavaScript implentation of SQLite 3 query parser 61 | https://github.com/codeschool/sqlite-parser 62 | 63 | - An in memory postgres DB instance for your unit tests 64 | https://github.com/oguimbal/pg-mem 65 | 66 | # GO 67 | 68 | - Go fearless SQL. Sqlvet performs static analysis on raw SQL queries in your Go code base. 69 | https://github.com/houqp/sqlvet 70 | 71 | - Model generator for go-pg package 72 | https://github.com/dizzyfool/genna 73 | 74 | - Regression Testing your SQL queries 75 | https://github.com/dimitri/regresql 76 | 77 | - An early PostgreSQL implementation in Go 78 | https://github.com/eatonphil/gosql 79 | https://notes.eatonphil.com/database-basics-expressions-and-where.html 80 | https://twitter.com/phil_eaton 81 | 82 | - (archived) An extensible MySQL server implementation in Go 83 | https://github.com/src-d/go-mysql-server 84 | 85 | - A MySQL-compatible relational database with a storage agnostic query engine. Implemented in pure Go. 86 | https://github.com/dolthub/go-mysql-server 87 | 88 | - Static analysis tool for Golang that protects against SQL injections 89 | https://github.com/stripe/safesql 90 | 91 | - OctoSQL is a query tool that allows you to join, analyse and transform data from multiple databases and file formats using SQL. 92 | https://github.com/cube2222/octosql 93 | 94 | - A MySQL Compatible SQL Parser 95 | https://github.com/pingcap/parser 96 | 97 | - SQL Parser implemented in Go (The backbone of this repo is extracted from vitessio/vitess) 98 | https://github.com/xwb1989/sqlparser 99 | 100 | - A golang expression evaluator & Library to build SQL query engine based functionality 101 | https://github.com/araddon/qlbridge 102 | 103 | - SQL Optimizer And Rewriter 104 | https://github.com/XiaoMi/soar 105 | 106 | - Type safe SQL builder with code generation and automatic query result data mapping (JOOQ for go) 107 | https://github.com/go-jet/jet 108 | 109 | - simply SQL Parser for Go ( powered by vitess and TiDB ) 110 | https://github.com/blastrain/vitess-sqlparser 111 | 112 | - Simplicity-focused, template based SQL query builder 113 | https://github.com/sanggonlee/gosq 114 | 115 | - Generate type safe Go from SQL 116 | https://github.com/kyleconroy/sqlc 117 | 118 | - Idempotent schema management for MySQL, PostgreSQL, and more 119 | https://github.com/k0kubun/sqldef 120 | 121 | # PYTHON 122 | 123 | - Inferring sql queries from plain-text questions about tables 124 | https://github.com/paulfitz/mlsql 125 | https://news.ycombinator.com/item?id=20101381 126 | 127 | - Look for SQL injection attacks in python source code 128 | https://github.com/uber/py-find-injection 129 | 130 | - A non-validating SQL parser module for Python 131 | https://github.com/andialbrecht/sqlparse 132 | 133 | - A small python based sql parser focusing on finding table dependencies within database views. Currently only working with Snowflake ANSI Sql 134 | https://github.com/dondaum/parsesql 135 | 136 | - A SQL linter and auto-formatter for Humans 137 | https://github.com/sqlfluff/sqlfluff 138 | 139 | - Let's make a SQL parser so we can provide a familiar interface to non-sql datastores! 140 | https://github.com/mozilla/moz-sql-parser 141 | 142 | - Compares the PostgreSQL schema between two databases and generates SQL statements that can be run manually against the second database to make their schemas match. 143 | https://github.com/joncrlsn/pgdiff 144 | 145 | - Like diff but for PostgreSQL schemas 146 | https://github.com/djrobstep/migra 147 | 148 | - Making it easy to query APIs via SQL 149 | https://github.com/betodealmeida/shillelagh/ 150 | 151 | - Python SQL Parser and Transpiler 152 | https://github.com/tobymao/sqlglot 153 | 154 | - SQL Lineage Analysis Tool powered by Python 155 | https://github.com/reata/sqllineage 156 | 157 | # RUST 158 | 159 | - The Rust SQL Toolkit. An async, pure Rust SQL crate featuring compile-time checked queries without a DSL. Supports PostgreSQL, MySQL, and SQLite. 160 | https://github.com/launchbadge/sqlx/ 161 | 162 | - Extensible SQL Lexer and Parser for Rust 163 | https://github.com/ballista-compute/sqlparser-rs 164 | 165 | - Postgres' query parser, as a Rust crate! 166 | https://github.com/zombodb/postgres-parser 167 | 168 | - Build Postgres Extensions with Rust! 169 | https://github.com/zombodb/pgx 170 | 171 | - linter for PostgreSQL, focused on migrations 172 | https://github.com/sbdchd/squawk 173 | 174 | - PRQL is a modern language for transforming data — a simple, powerful, pipelined SQL replacement 175 | https://github.com/prql/prql 176 | 177 | # C 178 | 179 | - C library for accessing the PostgreSQL parser outside of the server environment 180 | https://github.com/lfittl/libpg_query 181 | 182 | - pgquarrel compares PostgreSQL database schemas (DDL) 183 | https://github.com/eulerto/pgquarrel 184 | 185 | # C++ 186 | 187 | - Automatically identify anti-patterns in SQL queries 188 | https://github.com/jarulraj/sqlcheck 189 | https://github.com/moeryomenko/sqlcheck 190 | 191 | - SQL Parser for C++. Building C++ object structure from SQL statements. 192 | https://github.com/hyrise/sql-parser 193 | 194 | # C# 195 | 196 | - Configurable linting for TSQL 197 | https://github.com/tsqllint/tsqllint 198 | 199 | - TSQL Static Code Analysis Rules for SQL Server 200 | https://github.com/ashleyglee/TSqlRules 201 | 202 | - TSQL parser with Microsoft SQL Server Transact-SQL ScriptDom 203 | https://github.com/GCer-Hidenori/TSQLScriptDomParser 204 | 205 | - Library Written in C# For Parsing SQL Server T-SQL Scripts in .Net 206 | https://github.com/bruce-dunwiddie/tsql-parser 207 | 208 | - An engine for searching patterns in the source code, based on Unified AST or UST. At present time C#, Java, PHP, PL/SQL, T-SQL, MySql, and JavaScript are supported. Patterns can be described within the code or using a DSL. 209 | https://github.com/PositiveTechnologies/PT.PM 210 | 211 | # JAVA 212 | 213 | - JSqlParser parses an SQL statement and translate it into a hierarchy of Java classes. The generated hierarchy can be navigated using the Visitor Pattern 214 | https://github.com/JSQLParser/JSqlParser 215 | 216 | - jOOQ is the best way to write SQL in Java 217 | https://github.com/jOOQ/jOOQ 218 | 219 | - Coral is a translation, analysis, and query rewrite engine for SQL and other relational languages. 220 | https://github.com/linkedin/coral 221 | 222 | - The official home of the Presto distributed SQL query engine for big data 223 | https://github.com/prestodb/presto 224 | 225 | # PHP 226 | 227 | - A pure PHP SQL (non validating) parser w/ focus on MySQL dialect of SQL 228 | https://github.com/greenlion/PHP-SQL-Parser 229 | 230 | - A validating SQL lexer and parser with a focus on MySQL dialect. 231 | https://github.com/phpmyadmin/sql-parser 232 | 233 | # CLOJURE 234 | 235 | - Turn Clojure data structures into SQL 236 | https://github.com/seancorfield/honeysql 237 | 238 | # ERLANG 239 | 240 | - LALR grammar based SQL Parser 241 | https://github.com/KonnexionsGmbH/sqlparse 242 | 243 | # HASKELL 244 | 245 | - Parsing and analysis of Vertica, Hive, and Presto SQL. 246 | https://github.com/uber/queryparser 247 | 248 | # F# 249 | 250 | - Statically typechecks a common SQL dialect and translates it to various RDBMS backends 251 | https://github.com/rspeele/Rezoom.SQL 252 | 253 | # COQ, LEAN, ... 254 | 255 | - Cosette is an automated SQL solver 256 | https://github.com/uwdb/cosette 257 | 258 | # RUBY 259 | 260 | - Simple SQL linter supporting ANSI and PostgreSQL syntaxes 261 | https://github.com/purcell/sqlint 262 | 263 | # V 264 | 265 | - SQL database written in pure V 266 | https://github.com/elliotchance/vsql 267 | 268 | # MISC 269 | 270 | - Parsing, formatting, modification and analysis 271 | http://sqlparser.com/ 272 | 273 | # Articles 274 | 275 | - Improving on the Command-Line SQL Experience 276 | https://medium.com/swlh/improving-on-the-command-line-sql-experience-48c2b544c71b 277 | -------------------------------------------------------------------------------- /snowflake-vs-pg-ddl.md: -------------------------------------------------------------------------------- 1 | # SNOWFLAKE specialty 2 | - preview features (https://docs.snowflake.com/en/release-notes/preview-features.html) 3 | - CREATE ... CLONE (https://docs.snowflake.com/en/sql-reference/sql/create-clone.html) 4 | - CREATE ... COMMENT 5 | - CREATE ... COPY GRANTS 6 | - CREATE [ OR REPLACE ] ... [ IF NOT EXISTS ] 7 | 8 | # SNOWFLAKE command [params] syntax 9 | - CREATE NETWORK POLICY 10 | - CREATE SHARE 11 | - CREATE WAREHOUSE 12 | - CREATE NOTIFICATION INTEGRATION 13 | - CREATE SECURITY INTEGRATION 14 | - CREATE STORAGE INTEGRATION 15 | - CREATE FILE FORMAT 16 | - CREATE STAGE 17 | 18 | # SNOWFLAKE special syntax 19 | - CREATE RESOURCE MONITOR 20 | - CREATE PIPE 21 | - CREATE STREAM 22 | - CREATE TASK 23 | 24 | # SNOWFLAKE as PG extended syntax 25 | - CREATE EXTERNAL FUNCTION 26 | - CREATE EXTERNAL TABLE 27 | 28 | # SNOWFLAKE ONLY 29 | ## CREATE NETWORK POLICY 30 | https://docs.snowflake.com/en/sql-reference/sql/create-network-policy.html 31 | 32 | ```sql 33 | -- definition 34 | CREATE [ OR REPLACE ] NETWORK POLICY 35 | ALLOWED_IP_LIST = ( '' [ , '' , ... ] ) 36 | [ BLOCKED_IP_LIST = ( '' [ , '' , ... ] ) ] 37 | [ COMMENT = '' ] 38 | 39 | -- example 40 | CREATE NETWORK POLICY mypolicy2 41 | allowed_ip_list = ('192.168.1.0','192.168.1.100') 42 | ; 43 | ``` 44 | 45 | ## CREATE RESOURCE MONITOR 46 | https://docs.snowflake.com/en/sql-reference/sql/create-resource-monitor.html 47 | 48 | ```sql 49 | -- definition 50 | CREATE [ OR REPLACE ] RESOURCE MONITOR 51 | WITH 52 | [ CREDIT_QUOTA = ] 53 | [ FREQUENCY = { MONTHLY | DAILY | WEEKLY | YEARLY | NEVER } ] 54 | [ START_TIMESTAMP = { | IMMEDIATELY } ] 55 | [ END_TIMESTAMP = ] 56 | [ TRIGGERS [ 57 | ON PERCENT DO { SUSPEND | SUSPEND_IMMEDIATE | NOTIFY } 58 | ] ] 59 | 60 | -- example 61 | CREATE OR REPLACE RESOURCE MONITOR limiter 62 | WITH 63 | credit_quota=5000 64 | TRIGGERS 65 | on 75 percent do notify 66 | on 100 percent do suspend 67 | on 110 percent do suspend_immediate; 68 | ``` 69 | 70 | ## CREATE SHARE 71 | https://docs.snowflake.com/en/sql-reference/sql/create-share.html 72 | 73 | ```sql 74 | -- definition 75 | CREATE [ OR REPLACE ] SHARE 76 | [ COMMENT = '' ] 77 | 78 | -- example 79 | CREATE SHARE sales_s; 80 | ``` 81 | 82 | ## CREATE WAREHOUSE 83 | https://docs.snowflake.com/en/sql-reference/sql/create-warehouse.html 84 | 85 | ```sql 86 | -- definition 87 | CREATE [ OR REPLACE ] WAREHOUSE [ IF NOT EXISTS ] 88 | [ [ WITH ] 89 | WAREHOUSE_SIZE = XSMALL | SMALL | MEDIUM | LARGE | XLARGE | XXLARGE | XXXLARGE | X4LARGE 90 | MAX_CLUSTER_COUNT = 91 | MIN_CLUSTER_COUNT = 92 | SCALING_POLICY = STANDARD | ECONOMY 93 | AUTO_SUSPEND = | NULL 94 | AUTO_RESUME = TRUE | FALSE 95 | INITIALLY_SUSPENDED = TRUE | FALSE 96 | RESOURCE_MONITOR = 97 | COMMENT = '' 98 | ] 99 | [ 100 | MAX_CONCURRENCY_LEVEL = 101 | STATEMENT_QUEUED_TIMEOUT_IN_SECONDS = 102 | STATEMENT_TIMEOUT_IN_SECONDS = 103 | ] 104 | 105 | -- example 106 | CREATE OR REPLACE WAREHOUSE my_wh 107 | WAREHOUSE_SIZE = LARGE 108 | INITIALLY_SUSPENDED = TRUE 109 | ; 110 | ``` 111 | 112 | ## CREATE NOTIFICATION INTEGRATION 113 | https://docs.snowflake.com/en/sql-reference/sql/create-notification-integration.html 114 | 115 | ```sql 116 | -- definition 117 | CREATE [ OR REPLACE ] NOTIFICATION INTEGRATION [IF NOT EXISTS] 118 | ENABLED = { TRUE | FALSE } 119 | TYPE = QUEUE 120 | NOTIFICATION_PROVIDER = AZURE_STORAGE_QUEUE 121 | AZURE_STORAGE_QUEUE_PRIMARY_URI = 'https://.queue.core.windows.net/' 122 | AZURE_TENANT_ID = '' 123 | [ COMMENT = '' ] 124 | 125 | -- example 126 | CREATE NOTIFICATION INTEGRATION myint 127 | ENABLED = TRUE 128 | TYPE = QUEUE 129 | NOTIFICATION_PROVIDER = AZURE_STORAGE_QUEUE 130 | AZURE_STORAGE_QUEUE_PRIMARY_URI = 'https://myqueue.queue.core.windows.net/mystoragequeue' 131 | AZURE_TENANT_ID = 'a123bcde-1234-5678-abc1-9abc12345678' 132 | ; 133 | ``` 134 | 135 | ## CREATE SECURITY INTEGRATION 136 | https://docs.snowflake.com/en/sql-reference/sql/create-security-integration.html 137 | 138 | ```sql 139 | -- External OAuth definition 140 | CREATE [ OR REPLACE ] SECURITY INTEGRATION [IF NOT EXISTS] 141 | 142 | TYPE = EXTERNAL_OAUTH 143 | ENABLED = { TRUE | FALSE } 144 | EXTERNAL_OAUTH_TYPE = { OKTA | AZURE | PING_FEDERATE | CUSTOM } 145 | EXTERNAL_OAUTH_ISSUER = '' ] 146 | EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = '' 147 | EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'LOGIN_NAME | EMAIL_ADDRESS' 148 | [ EXTERNAL_OAUTH_JWS_KEYS_URL = '' ] 149 | [ EXTERNAL_OAUTH_RSA_PUBLIC_KEY = ] 150 | [ EXTERNAL_OAUTH_RSA_PUBLIC_KEY_2 = ] 151 | [ EXTERNAL_OAUTH_AUDIENCE_LIST = ('') ] 152 | 153 | -- SAML2 definition 154 | CREATE [ OR REPLACE ] SECURITY INTEGRATION [ IF NOT EXISTS ] 155 | TYPE = SAML2 156 | ENABLED = TRUE | FALSE 157 | SAML2_ISSUER = '' 158 | SAML2_SSO_URL = '' 159 | SAML2_PROVIDER = '' 160 | SAML2_X509_CERT = '' 161 | [ SAML2_SP_INITIATED_LOGIN_PAGE_LABEL = '' ] 162 | [ SAML2_ENABLE_SP_INITIATED = TRUE | FALSE ] 163 | [ SAML2_SNOWFLAKE_X509_CERT = '' ] 164 | [ SAML2_SIGN_REQUEST = TRUE | FALSE ] 165 | 166 | -- Snowflake OAuth for partner applications definition 167 | CREATE [ OR REPLACE ] SECURITY INTEGRATION [IF NOT EXISTS] 168 | 169 | TYPE = OAUTH 170 | ENABLED = { TRUE | FALSE } 171 | OAUTH_CLIENT = 172 | [ OAUTH_ISSUE_REFRESH_TOKENS = TRUE | FALSE ] 173 | [ OAUTH_REFRESH_TOKEN_VALIDITY = ] 174 | [ BLOCKED_ROLES_LIST = ( '' [ , '' , ... ] ) ] 175 | [ COMMENT = '' ] 176 | 177 | -- Snowflake OAuth for custom clients definition 178 | CREATE [ OR REPLACE ] SECURITY INTEGRATION [IF NOT EXISTS] 179 | 180 | TYPE = OAUTH 181 | ENABLED = { TRUE | FALSE } 182 | OAUTH_CLIENT = CUSTOM 183 | OAUTH_CLIENT_TYPE = 'CONFIDENTIAL' | 'PUBLIC' 184 | OAUTH_REDIRECT_URI = '' 185 | [ OAUTH_ALLOW_NON_TLS_REDIRECT_URI = TRUE | FALSE ] 186 | [ OAUTH_ENFORCE_PKCE = TRUE | FALSE ] 187 | [ PRE_AUTHORIZED_ROLES_LIST = ( '' [ , '' , ... ] ) ] 188 | [ BLOCKED_ROLES_LIST = ( '' [ , '' , ... ] ) ] 189 | [ OAUTH_ISSUE_REFRESH_TOKENS = TRUE | FALSE ] 190 | [ OAUTH_REFRESH_TOKEN_VALIDITY = ] 191 | [ NETWORK_POLICY = '' ] 192 | [ OAUTH_CLIENT_RSA_PUBLIC_KEY = ] 193 | [ OAUTH_CLIENT_RSA_PUBLIC_KEY_2 = ] 194 | [ COMMENT = '' ] 195 | 196 | -- example 197 | CREATE SECURITY INTEGRATION ts_oauth_int2 198 | type = oauth 199 | enabled = true 200 | oauth_client = tableau_server 201 | oauth_refresh_token_validity = 86400 202 | blocked_roles_list = ('SYSADMIN'); 203 | ``` 204 | 205 | ## CREATE STORAGE INTEGRATION 206 | https://docs.snowflake.com/en/sql-reference/sql/create-storage-integration.html 207 | 208 | ```sql 209 | -- definition 210 | CREATE [ OR REPLACE ] STORAGE INTEGRATION [IF NOT EXISTS] 211 | TYPE = EXTERNAL_STAGE 212 | { 213 | STORAGE_PROVIDER = S3 214 | STORAGE_AWS_ROLE_ARN = '' 215 | | 216 | STORAGE_PROVIDER = GCS 217 | | 218 | STORAGE_PROVIDER = AZURE 219 | AZURE_TENANT_ID = '' 220 | } 221 | ENABLED = { TRUE | FALSE } 222 | STORAGE_ALLOWED_LOCATIONS = (':////', ':////') 223 | [ STORAGE_BLOCKED_LOCATIONS = (':////', ':////') ] 224 | [ COMMENT = '' ] 225 | 226 | -- example 227 | CREATE STORAGE INTEGRATION azure_int 228 | type = external_stage 229 | storage_provider = azure 230 | enabled = true 231 | azure_tenant_id = 'a123b4c5-1234-123a-a12b-1a23b45678c9' 232 | storage_allowed_locations = ('*') 233 | storage_blocked_locations = ('azure://myaccount.blob.core.windows.net/mycontainer/path3/', 'azure://myaccount.blob.core.windows.net/mycontainer/path4/'); 234 | ``` 235 | 236 | ## CREATE EXTERNAL FUNCTION 237 | https://docs.snowflake.com/en/sql-reference/sql/create-external-function.html 238 | 239 | ```sql 240 | -- definition 241 | CREATE [ OR REPLACE ] [ SECURE ] EXTERNAL FUNCTION ( [ ] [ , ... ] ) 242 | RETURNS 243 | [ [ NOT ] NULL ] 244 | [ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ] 245 | [ VOLATILE | IMMUTABLE ] 246 | [ COMMENT = '' ] 247 | API_INTEGRATION = 248 | [ HEADERS = ( '' = '' [ , '' = '' ... ] ) ] 249 | [ CONTEXT_HEADERS = ( [ , context_function_2> ...] ) ] 250 | [ MAX_BATCH_ROWS = ] 251 | [ COMPRESSION = ] 252 | AS ; 253 | 254 | -- example 255 | CREATE EXTERNAL FUNCTION local_echo (string_col varchar) 256 | RETURNS variant 257 | api_integration = demonstration_external_api_integration_01 258 | as 'https://xyz.execute-api.us-west-2.amazonaws.com/prod/remote_echo' 259 | ; 260 | ``` 261 | 262 | ## CREATE EXTERNAL TABLE 263 | https://docs.snowflake.com/en/sql-reference/sql/create-external-table.html 264 | 265 | ```sql 266 | CREATE [ OR REPLACE ] EXTERNAL TABLE [IF NOT EXISTS] 267 | 268 | ( [ AS | AS ] 269 | [ 270 | [ NOT NULL ] 271 | [ CONSTRAINT ] 272 | { UNIQUE | PRIMARY KEY | { [ FOREIGN KEY ] REFERENCES [ ( ) } } 273 | [ ] 274 | ] 275 | [ , AS | AS ... ] 276 | [ , ... ] ) 277 | [ INTEGRATION = '' ] 278 | [ PARTITION BY ( [, ... ] ) ] 279 | [ WITH ] LOCATION = @[.][/] 280 | [ REFRESH_ON_CREATE = { TRUE | FALSE } ] 281 | [ AUTO_REFRESH = { TRUE | FALSE } ] 282 | [ PATTERN = '' ] 283 | FILE_FORMAT = ( { FORMAT_NAME = '' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET } 284 | [ 285 | -- if FILE_FORMAT = ( TYPE = CSV ... ) 286 | COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE 287 | RECORD_DELIMITER = '' | NONE 288 | FIELD_DELIMITER = '' | NONE 289 | SKIP_HEADER = 290 | SKIP_BLANK_LINES = TRUE | FALSE 291 | DATE_FORMAT = '' | AUTO 292 | TIME_FORMAT = '' | AUTO 293 | TIMESTAMP_FORMAT = '' | AUTO 294 | BINARY_FORMAT = HEX | BASE64 | UTF8 295 | ESCAPE = '' | NONE 296 | ESCAPE_UNENCLOSED_FIELD = '' | NONE 297 | TRIM_SPACE = TRUE | FALSE 298 | FIELD_OPTIONALLY_ENCLOSED_BY = '' | NONE 299 | NULL_IF = ( '' [ , '' ... ] ) 300 | ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE | FALSE 301 | REPLACE_INVALID_CHARACTERS = TRUE | FALSE 302 | VALIDATE_UTF8 = TRUE | FALSE 303 | EMPTY_FIELD_AS_NULL = TRUE | FALSE 304 | SKIP_BYTE_ORDER_MARK = TRUE | FALSE 305 | ENCODING = '' | UTF8 306 | -- if FILE_FORMAT = ( TYPE = JSON ... ) 307 | COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE 308 | DATE_FORMAT = '' | AUTO 309 | TIME_FORMAT = '' | AUTO 310 | TIMESTAMP_FORMAT = '' | AUTO 311 | BINARY_FORMAT = HEX | BASE64 | UTF8 312 | TRIM_SPACE = TRUE | FALSE 313 | NULL_IF = ( '' [ , '' ... ] ) 314 | ENABLE_OCTAL = TRUE | FALSE 315 | ALLOW_DUPLICATE = TRUE | FALSE 316 | STRIP_OUTER_ARRAY = TRUE | FALSE 317 | STRIP_NULL_VALUES = TRUE | FALSE 318 | IGNORE_UTF8_ERRORS = TRUE | FALSE 319 | SKIP_BYTE_ORDER_MARK = TRUE | FALSE 320 | -- if FILE_FORMAT = ( TYPE = AVRO ... ) 321 | COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE 322 | TRIM_SPACE = TRUE | FALSE 323 | NULL_IF = ( '' [ , '' ... ] ) 324 | -- if FILE_FORMAT = ( TYPE = ORC ... ) 325 | TRIM_SPACE = TRUE | FALSE 326 | NULL_IF = ( '' [ , '' ... ] ) 327 | -- if FILE_FORMAT = ( TYPE = PARQUET ... ) 328 | COMPRESSION = AUTO | SNAPPY | NONE 329 | BINARY_AS_TEXT = TRUE | FALSE 330 | TRIM_SPACE = TRUE | FALSE 331 | NULL_IF = ( '' [ , '' ... ] ) 332 | ] } ) 333 | [ AWS_SNS_TOPIC = ] 334 | [ COPY GRANTS ] 335 | [ COMMENT = '' ] 336 | ``` 337 | 338 | 339 | ## CREATE FILE FORMAT , CREATE FILE FORMAT … CLONE 340 | https://docs.snowflake.com/en/sql-reference/sql/create-file-format.html 341 | 342 | ```sql 343 | -- definition 344 | CREATE [ OR REPLACE ] FILE FORMAT [ IF NOT EXISTS ] 345 | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ 346 | -- if TYPE = CSV 347 | COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE 348 | RECORD_DELIMITER = '' | NONE 349 | FIELD_DELIMITER = '' | NONE 350 | FILE_EXTENSION = '' 351 | SKIP_HEADER = 352 | SKIP_BLANK_LINES = TRUE | FALSE 353 | DATE_FORMAT = '' | AUTO 354 | TIME_FORMAT = '' | AUTO 355 | TIMESTAMP_FORMAT = '' | AUTO 356 | BINARY_FORMAT = HEX | BASE64 | UTF8 357 | ESCAPE = '' | NONE 358 | ESCAPE_UNENCLOSED_FIELD = '' | NONE 359 | TRIM_SPACE = TRUE | FALSE 360 | FIELD_OPTIONALLY_ENCLOSED_BY = '' | NONE 361 | NULL_IF = ( '' [ , '' ... ] ) 362 | ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE | FALSE 363 | REPLACE_INVALID_CHARACTERS = TRUE | FALSE 364 | VALIDATE_UTF8 = TRUE | FALSE 365 | EMPTY_FIELD_AS_NULL = TRUE | FALSE 366 | SKIP_BYTE_ORDER_MARK = TRUE | FALSE 367 | ENCODING = '' | UTF8 368 | -- if TYPE = JSON 369 | COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE 370 | DATE_FORMAT = '' | AUTO 371 | TIME_FORMAT = '' | AUTO 372 | TIMESTAMP_FORMAT = '' | AUTO 373 | BINARY_FORMAT = HEX | BASE64 | UTF8 374 | TRIM_SPACE = TRUE | FALSE 375 | NULL_IF = ( '' [ , '' ... ] ) 376 | FILE_EXTENSION = '' 377 | ENABLE_OCTAL = TRUE | FALSE 378 | ALLOW_DUPLICATE = TRUE | FALSE 379 | STRIP_OUTER_ARRAY = TRUE | FALSE 380 | STRIP_NULL_VALUES = TRUE | FALSE 381 | IGNORE_UTF8_ERRORS = TRUE | FALSE 382 | SKIP_BYTE_ORDER_MARK = TRUE | FALSE 383 | -- if TYPE = AVRO 384 | COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE 385 | TRIM_SPACE = TRUE | FALSE 386 | NULL_IF = ( '' [ , '' ... ] ) 387 | -- if TYPE = ORC 388 | TRIM_SPACE = TRUE | FALSE 389 | NULL_IF = ( '' [ , '' ... ] ) 390 | -- if TYPE = PARQUET 391 | COMPRESSION = AUTO | LZO | SNAPPY | NONE 392 | SNAPPY_COMPRESSION = TRUE | FALSE 393 | BINARY_AS_TEXT = TRUE | FALSE 394 | TRIM_SPACE = TRUE | FALSE 395 | NULL_IF = ( '' [ , '' ... ] ) 396 | -- if TYPE = XML 397 | COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE 398 | IGNORE_UTF8_ERRORS = TRUE | FALSE 399 | PRESERVE_SPACE = TRUE | FALSE 400 | STRIP_OUTER_ELEMENT = TRUE | FALSE 401 | DISABLE_SNOWFLAKE_DATA = TRUE | FALSE 402 | DISABLE_AUTO_CONVERT = TRUE | FALSE 403 | SKIP_BYTE_ORDER_MARK = TRUE | FALSE 404 | TRIM_SPACE = TRUE | FALSE 405 | NULL_IF = ( '' [ , '' ... ] ) 406 | ] 407 | [ COMMENT = '' ] 408 | 409 | -- example 410 | CREATE FILE FORMAT my_csv_format 411 | type = csv 412 | field_delimiter = '|' 413 | skip_header = 1 414 | null_if = ('NULL', 'null') 415 | empty_field_as_null = true 416 | compression = gzip 417 | ; 418 | ``` 419 | 420 | ## CREATE STAGE , CREATE STAGE … CLONE 421 | https://docs.snowflake.com/en/sql-reference/sql/create-stage.html 422 | 423 | ```sql 424 | -- Internal stage definition 425 | CREATE [ OR REPLACE ] [ TEMPORARY ] STAGE [ IF NOT EXISTS ] 426 | [ FILE_FORMAT = ( { FORMAT_NAME = '' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ 427 | -- if TYPE = CSV 428 | COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE 429 | RECORD_DELIMITER = '' | NONE 430 | FIELD_DELIMITER = '' | NONE 431 | FILE_EXTENSION = '' 432 | SKIP_HEADER = 433 | SKIP_BLANK_LINES = TRUE | FALSE 434 | DATE_FORMAT = '' | AUTO 435 | TIME_FORMAT = '' | AUTO 436 | TIMESTAMP_FORMAT = '' | AUTO 437 | BINARY_FORMAT = HEX | BASE64 | UTF8 438 | ESCAPE = '' | NONE 439 | ESCAPE_UNENCLOSED_FIELD = '' | NONE 440 | TRIM_SPACE = TRUE | FALSE 441 | FIELD_OPTIONALLY_ENCLOSED_BY = '' | NONE 442 | NULL_IF = ( '' [ , '' ... ] ) 443 | ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE | FALSE 444 | REPLACE_INVALID_CHARACTERS = TRUE | FALSE 445 | VALIDATE_UTF8 = TRUE | FALSE 446 | EMPTY_FIELD_AS_NULL = TRUE | FALSE 447 | SKIP_BYTE_ORDER_MARK = TRUE | FALSE 448 | ENCODING = '' | UTF8 449 | -- if TYPE = JSON 450 | COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE 451 | DATE_FORMAT = '' | AUTO 452 | TIME_FORMAT = '' | AUTO 453 | TIMESTAMP_FORMAT = '' | AUTO 454 | BINARY_FORMAT = HEX | BASE64 | UTF8 455 | TRIM_SPACE = TRUE | FALSE 456 | NULL_IF = ( '' [ , '' ... ] ) 457 | FILE_EXTENSION = '' 458 | ENABLE_OCTAL = TRUE | FALSE 459 | ALLOW_DUPLICATE = TRUE | FALSE 460 | STRIP_OUTER_ARRAY = TRUE | FALSE 461 | STRIP_NULL_VALUES = TRUE | FALSE 462 | IGNORE_UTF8_ERRORS = TRUE | FALSE 463 | SKIP_BYTE_ORDER_MARK = TRUE | FALSE 464 | -- if TYPE = AVRO 465 | COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE 466 | TRIM_SPACE = TRUE | FALSE 467 | NULL_IF = ( '' [ , '' ... ] ) 468 | -- if TYPE = ORC 469 | TRIM_SPACE = TRUE | FALSE 470 | NULL_IF = ( '' [ , '' ... ] ) 471 | -- if TYPE = PARQUET 472 | COMPRESSION = AUTO | LZO | SNAPPY | NONE 473 | SNAPPY_COMPRESSION = TRUE | FALSE 474 | BINARY_AS_TEXT = TRUE | FALSE 475 | TRIM_SPACE = TRUE | FALSE 476 | NULL_IF = ( '' [ , '' ... ] ) 477 | -- if TYPE = XML 478 | COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE 479 | IGNORE_UTF8_ERRORS = TRUE | FALSE 480 | PRESERVE_SPACE = TRUE | FALSE 481 | STRIP_OUTER_ELEMENT = TRUE | FALSE 482 | DISABLE_SNOWFLAKE_DATA = TRUE | FALSE 483 | DISABLE_AUTO_CONVERT = TRUE | FALSE 484 | SKIP_BYTE_ORDER_MARK = TRUE | FALSE 485 | TRIM_SPACE = TRUE | FALSE 486 | NULL_IF = ( '' [ , '' ... ] ) 487 | ] ) } ] 488 | [ COPY_OPTIONS = ( 489 | ON_ERROR = { CONTINUE | SKIP_FILE | SKIP_FILE_ | SKIP_FILE_% | ABORT_STATEMENT } 490 | SIZE_LIMIT = 491 | PURGE = TRUE | FALSE 492 | RETURN_FAILED_ONLY = TRUE | FALSE 493 | MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE 494 | ENFORCE_LENGTH = TRUE | FALSE 495 | TRUNCATECOLUMNS = TRUE | FALSE 496 | FORCE = TRUE | FALSE 497 | ) ] 498 | [ COMMENT = '' ] 499 | 500 | -- External stage definition 501 | CREATE [ OR REPLACE ] [ TEMPORARY ] STAGE [ IF NOT EXISTS ] 502 | { 503 | URL = 's3://[//]' 504 | [ { STORAGE_INTEGRATION = } | { CREDENTIALS = ( { { AWS_KEY_ID = '' AWS_SECRET_KEY = '' [ AWS_TOKEN = '' ] } | AWS_ROLE = '' } ) ) } ] 505 | [ ENCRYPTION = ( [ TYPE = 'AWS_CSE' ] [ MASTER_KEY = '' ] | 506 | [ TYPE = 'AWS_SSE_S3' ] | 507 | [ TYPE = 'AWS_SSE_KMS' [ KMS_KEY_ID = '' ] | 508 | [ TYPE = NONE ] ) 509 | ] 510 | | 511 | URL = 'gcs://[//]' 512 | [ STORAGE_INTEGRATION = ] 513 | [ ENCRYPTION = ( [ TYPE = 'GCS_SSE_KMS' ] [ KMS_KEY_ID = '' ] | [ TYPE = NONE ] ) ] 514 | | 515 | URL = 'azure://.blob.core.windows.net/[//]' 516 | [ { STORAGE_INTEGRATION = } | { CREDENTIALS = ( [ AZURE_SAS_TOKEN = ] ) } ] 517 | [ ENCRYPTION = ( [TYPE = { 'AZURE_CSE' | NONE } ] [ MASTER_KEY = '' ] ) ] 518 | } 519 | [ FILE_FORMAT = ( { FORMAT_NAME = '' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ 520 | -- if TYPE = CSV 521 | COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE 522 | RECORD_DELIMITER = '' | NONE 523 | FIELD_DELIMITER = '' | NONE 524 | FILE_EXTENSION = '' 525 | SKIP_HEADER = 526 | SKIP_BLANK_LINES = TRUE | FALSE 527 | DATE_FORMAT = '' | AUTO 528 | TIME_FORMAT = '' | AUTO 529 | TIMESTAMP_FORMAT = '' | AUTO 530 | BINARY_FORMAT = HEX | BASE64 | UTF8 531 | ESCAPE = '' | NONE 532 | ESCAPE_UNENCLOSED_FIELD = '' | NONE 533 | TRIM_SPACE = TRUE | FALSE 534 | FIELD_OPTIONALLY_ENCLOSED_BY = '' | NONE 535 | NULL_IF = ( '' [ , '' ... ] ) 536 | ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE | FALSE 537 | REPLACE_INVALID_CHARACTERS = TRUE | FALSE 538 | VALIDATE_UTF8 = TRUE | FALSE 539 | EMPTY_FIELD_AS_NULL = TRUE | FALSE 540 | SKIP_BYTE_ORDER_MARK = TRUE | FALSE 541 | ENCODING = '' | UTF8 542 | -- if TYPE = JSON 543 | COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE 544 | DATE_FORMAT = '' | AUTO 545 | TIME_FORMAT = '' | AUTO 546 | TIMESTAMP_FORMAT = '' | AUTO 547 | BINARY_FORMAT = HEX | BASE64 | UTF8 548 | TRIM_SPACE = TRUE | FALSE 549 | NULL_IF = ( '' [ , '' ... ] ) 550 | FILE_EXTENSION = '' 551 | ENABLE_OCTAL = TRUE | FALSE 552 | ALLOW_DUPLICATE = TRUE | FALSE 553 | STRIP_OUTER_ARRAY = TRUE | FALSE 554 | STRIP_NULL_VALUES = TRUE | FALSE 555 | IGNORE_UTF8_ERRORS = TRUE | FALSE 556 | SKIP_BYTE_ORDER_MARK = TRUE | FALSE 557 | -- if TYPE = AVRO 558 | COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE 559 | TRIM_SPACE = TRUE | FALSE 560 | NULL_IF = ( '' [ , '' ... ] ) 561 | -- if TYPE = ORC 562 | TRIM_SPACE = TRUE | FALSE 563 | NULL_IF = ( '' [ , '' ... ] ) 564 | -- if TYPE = PARQUET 565 | COMPRESSION = AUTO | LZO | SNAPPY | NONE 566 | SNAPPY_COMPRESSION = TRUE | FALSE 567 | BINARY_AS_TEXT = TRUE | FALSE 568 | TRIM_SPACE = TRUE | FALSE 569 | NULL_IF = ( '' [ , '' ... ] ) 570 | -- if TYPE = XML 571 | COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE 572 | IGNORE_UTF8_ERRORS = TRUE | FALSE 573 | PRESERVE_SPACE = TRUE | FALSE 574 | STRIP_OUTER_ELEMENT = TRUE | FALSE 575 | DISABLE_SNOWFLAKE_DATA = TRUE | FALSE 576 | DISABLE_AUTO_CONVERT = TRUE | FALSE 577 | SKIP_BYTE_ORDER_MARK = TRUE | FALSE 578 | TRIM_SPACE = TRUE | FALSE 579 | NULL_IF = ( '' [ , '' ... ] ) 580 | ] ) } ] 581 | [ COPY_OPTIONS = ( 582 | ON_ERROR = { CONTINUE | SKIP_FILE | SKIP_FILE_ | SKIP_FILE_% | ABORT_STATEMENT } 583 | SIZE_LIMIT = 584 | PURGE = TRUE | FALSE 585 | RETURN_FAILED_ONLY = TRUE | FALSE 586 | MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE 587 | ENFORCE_LENGTH = TRUE | FALSE 588 | TRUNCATECOLUMNS = TRUE | FALSE 589 | FORCE = TRUE | FALSE 590 | ) ] 591 | [ COMMENT = '' ] 592 | 593 | -- example 594 | CREATE OR REPLACE STAGE mystage 595 | url='azure://myaccount.blob.core.windows.net/mycontainer/files/' 596 | credentials=(azure_sas_token='?sv=2016-05-31&ss=b&srt=sco&sp=rwdl&se=2018-06-27T10:05:50Z&st=2017-06-27T02:05:50Z&spr=https,http&sig=bgqQwoXwxzuD2GJfagRg7VOS8hzNr3QLT7rhS8OFRLQ%3D') 597 | encryption=(type='AZURE_CSE' master_key = 'kPxX0jzYfIamtnJEUTHwq80Au6NbSgPH5r4BDDwOaO8=') 598 | file_format = my_csv_format; 599 | ``` 600 | 601 | ## CREATE PIPE 602 | https://docs.snowflake.com/en/sql-reference/sql/create-pipe.html 603 | 604 | ```sql 605 | -- definition 606 | CREATE [ OR REPLACE ] PIPE [ IF NOT EXISTS ] 607 | [ AUTO_INGEST = [ TRUE | FALSE ] ] 608 | [ AWS_SNS_TOPIC = ] 609 | [ INTEGRATION = '' ] 610 | [ COMMENT = '' ] 611 | AS 612 | 613 | -- example 614 | CREATE PIPE mypipe_s3 615 | auto_ingest = true 616 | aws_sns_topic = 'arn:aws:sns:us-west-2:001234567890:s3_mybucket' 617 | as 618 | copy into snowpipe_db.public.mytable 619 | from @snowpipe_db.public.mystage 620 | file_format = (type = 'JSON'); 621 | ``` 622 | 623 | ## CREATE STREAM , CREATE STREAM … CLONE 624 | https://docs.snowflake.com/en/sql-reference/sql/create-stream.html 625 | 626 | ```sql 627 | -- definition 628 | CREATE [ OR REPLACE ] STREAM [IF NOT EXISTS] 629 | [ COPY GRANTS ] 630 | [ COMMENT = '' ] 631 | ON TABLE 632 | [ APPEND_ONLY = TRUE | FALSE ] 633 | [ { AT | BEFORE } { TIMESTAMP => | OFFSET => | STATEMENT => } ] 634 | 635 | -- example 636 | create stream mystream 637 | on table mytable 638 | before(statement => '8e5d0ca9-005e-44e6-b858-a8f5b37c5726'); 639 | ``` 640 | 641 | ## CREATE TASK , CREATE TASK … CLONE 642 | https://docs.snowflake.com/en/sql-reference/sql/create-task.html 643 | 644 | ```sql 645 | -- definition 646 | CREATE [ OR REPLACE ] TASK [ IF NOT EXISTS ] 647 | WAREHOUSE = 648 | [ SCHEDULE = '{ MINUTE | USING CRON }' ] 649 | [ = [ , = ... ] ] 650 | [ USER_TASK_TIMEOUT_MS = ] 651 | [ COPY GRANTS ] 652 | [ COMMENT = '' ] 653 | [ AFTER ] 654 | [ WHEN ] 655 | AS 656 | 657 | 658 | -- example 659 | CREATE TASK mytask2 660 | WAREHOUSE = mywh 661 | AFTER mytask1 662 | AS 663 | INSERT INTO mytable2(id,name) SELECT id, name FROM mytable1; 664 | ``` 665 | 666 | # SNOWFLAKE and PG 667 | ## CREATE ROLE 668 | https://docs.snowflake.com/en/sql-reference/sql/create-role.html 669 | https://www.postgresql.org/docs/13/sql-createrole.html 670 | 671 | ```sql 672 | sf: 673 | CREATE [ OR REPLACE ] ROLE [ IF NOT EXISTS ] [ COMMENT = '' ] 674 | create role myrole; 675 | pg: 676 | CREATE ROLE name [ [ WITH ] option [ ... ] ] 677 | CREATE ROLE admin WITH CREATEDB CREATEROLE; 678 | ``` 679 | 680 | ## CREATE USER 681 | https://docs.snowflake.com/en/sql-reference/sql/create-user.html 682 | https://www.postgresql.org/docs/13/sql-createuser.html 683 | 684 | ```sql 685 | sf: 686 | CREATE [ OR REPLACE ] USER [ IF NOT EXISTS ] [ objectProperties ] [ objectParams ] [ sessionParams ] 687 | create user user1 password='abc123' default_role = myrole must_change_password = true; 688 | 689 | pg: 690 | CREATE USER name [ [ WITH ] option [ ... ] ] 691 | CREATE USER youruser WITH ENCRYPTED PASSWORD 'yourpass'; 692 | ``` 693 | 694 | ## CREATE DATABASE , CREATE DATABASE … CLONE 695 | https://docs.snowflake.com/en/sql-reference/sql/create-database.html 696 | https://www.postgresql.org/docs/13/sql-createdatabase.html 697 | 698 | ```sql 699 | sf: 700 | -- Standard Database 701 | CREATE [ OR REPLACE ] [ TRANSIENT ] DATABASE [ IF NOT EXISTS ] 702 | [ CLONE 703 | [ { AT | BEFORE } ( { TIMESTAMP => | OFFSET => | STATEMENT => } ) ] ] 704 | [ DATA_RETENTION_TIME_IN_DAYS = ] 705 | [ DEFAULT_DDL_COLLATION = '' ] 706 | [ COMMENT = '' ] 707 | 708 | -- Shared Database (from a Share) 709 | CREATE DATABASE FROM SHARE . 710 | 711 | -- Secondary Database (Database Replication) 712 | CREATE DATABASE 713 | AS REPLICA OF .. 714 | AUTO_REFRESH_MATERIALIZED_VIEWS_ON_SECONDARY = { TRUE | FALSE } 715 | 716 | CREATE DATABASE mydb1 717 | AS REPLICA OF aws_us_west_2.myaccount.mydb1 718 | AUTO_REFRESH_MATERIALIZED_VIEWS_ON_SECONDARY = true 719 | ; 720 | 721 | pg: 722 | CREATE DATABASE name 723 | [ [ WITH ] [ OWNER [=] user_name ] 724 | [ TEMPLATE [=] template ] 725 | [ ENCODING [=] encoding ] 726 | [ LOCALE [=] locale ] 727 | [ LC_COLLATE [=] lc_collate ] 728 | [ LC_CTYPE [=] lc_ctype ] 729 | [ TABLESPACE [=] tablespace_name ] 730 | [ ALLOW_CONNECTIONS [=] allowconn ] 731 | [ CONNECTION LIMIT [=] connlimit ] 732 | [ IS_TEMPLATE [=] istemplate ] ] 733 | 734 | create database mydb1 735 | as replica of aws_us_west_2.myaccount.mydb1 736 | auto_refresh_materialized_views_on_secondary = true; 737 | ``` 738 | 739 | ## CREATE SCHEMA , CREATE SCHEMA … CLONE 740 | https://docs.snowflake.com/en/sql-reference/sql/create-schema.html 741 | https://www.postgresql.org/docs/13/sql-createschema.html 742 | 743 | ```sql 744 | sf: 745 | CREATE [ OR REPLACE ] [ TRANSIENT ] SCHEMA [ IF NOT EXISTS ] 746 | [ CLONE 747 | [ { AT | BEFORE } ( { TIMESTAMP => | OFFSET => | STATEMENT => } ) ] ] 748 | [ WITH MANAGED ACCESS ] 749 | [ DATA_RETENTION_TIME_IN_DAYS = ] 750 | [ DEFAULT_DDL_COLLATION = '' ] 751 | [ COMMENT = '' ] 752 | 753 | create schema mschema with managed access; 754 | 755 | pg: 756 | CREATE SCHEMA schema_name [ AUTHORIZATION role_specification ] [ schema_element [ ... ] ] 757 | CREATE SCHEMA AUTHORIZATION role_specification [ schema_element [ ... ] ] 758 | CREATE SCHEMA IF NOT EXISTS schema_name [ AUTHORIZATION role_specification ] 759 | CREATE SCHEMA IF NOT EXISTS AUTHORIZATION role_specification 760 | 761 | CREATE SCHEMA hollywood 762 | CREATE TABLE films (title text, release date, awards text[]) 763 | CREATE VIEW winners AS 764 | SELECT title, release FROM films WHERE awards IS NOT NULL; 765 | ``` 766 | 767 | ## CREATE TABLE , CREATE TABLE … CLONE 768 | https://docs.snowflake.com/en/sql-reference/sql/create-table.html 769 | https://www.postgresql.org/docs/13/sql-createtable.html 770 | 771 | ```sql 772 | sf: 773 | CREATE [ OR REPLACE ] [ { [ LOCAL | GLOBAL ] TEMP[ORARY] | VOLATILE } | TRANSIENT ] TABLE [ IF NOT EXISTS ] 774 | 775 | ( 776 | [ COLLATE '' ] 777 | /* COLLATE is supported only for text data types (VARCHAR and synonyms) */ 778 | [ { DEFAULT 779 | | { AUTOINCREMENT | IDENTITY } [ ( , ) | START INCREMENT ] } ] 780 | /* AUTOINCREMENT (or IDENTITY) is supported only for numeric data types (NUMBER, INT, FLOAT, etc.) */ 781 | [ NOT NULL ] 782 | [ inlineConstraint ] 783 | [ , [ ... ] ] 784 | [ , outoflineConstraint ] 785 | [ , ... ] ) 786 | [ CLUSTER BY ( [ , , ... ] ) ] 787 | [ STAGE_FILE_FORMAT = ( { FORMAT_NAME = '' 788 | | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ formatTypeOptions ] } ) ] 789 | [ STAGE_COPY_OPTIONS = ( copyOptions ) ] 790 | [ DATA_RETENTION_TIME_IN_DAYS = ] 791 | [ CHANGE_TRACKING = { TRUE | FALSE } ] 792 | [ DEFAULT_DDL_COLLATION = '' ] 793 | [ COPY GRANTS ] 794 | [ COMMENT = '' ] 795 | 796 | pg: 797 | CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] 798 | 799 | ( [{ column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ] 800 | | table_constraint 801 | | LIKE source_table [ like_option ... ] } 802 | [, ... ] 803 | ] ) 804 | [ INHERITS ( parent_table [, ... ] ) ] 805 | [ PARTITION BY { RANGE | LIST | HASH } ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [, ... ] ) ] 806 | [ USING method ] 807 | [ WITH ( storage_parameter [= value] [, ... ] ) | WITHOUT OIDS ] 808 | [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ] 809 | [ TABLESPACE tablespace_name ] 810 | ``` 811 | 812 | ## CREATE VIEW 813 | https://docs.snowflake.com/en/sql-reference/sql/create-view.html 814 | https://www.postgresql.org/docs/13/sql-createview.html 815 | 816 | ```sql 817 | sf: 818 | CREATE [ OR REPLACE ] [ SECURE ] [ RECURSIVE ] VIEW [ IF NOT EXISTS ] 819 | [ ( ) ] 820 | [ COPY GRANTS ] 821 | [ COMMENT = '' ] 822 | AS 823 | 824 | create or replace secure view myview comment='Test secure view' as select col1, col2 from mytable; 825 | 826 | pg: 827 | CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] [ RECURSIVE ] VIEW name 828 | [ ( column_name [, ...] ) ] 829 | [ WITH ( view_option_name [= view_option_value] [, ... ] ) ] 830 | AS query 831 | [ WITH [ CASCADED | LOCAL ] CHECK OPTION ] 832 | 833 | CREATE VIEW pg_comedies AS 834 | SELECT * 835 | FROM comedies 836 | WHERE classification = 'PG' 837 | WITH CASCADED CHECK OPTION; 838 | ``` 839 | 840 | ## CREATE MATERIALIZED VIEW 841 | https://docs.snowflake.com/en/sql-reference/sql/create-materialized-view.html 842 | https://www.postgresql.org/docs/13/sql-creatematerializedview.html 843 | 844 | ```sql 845 | sf: 846 | CREATE [ OR REPLACE ] [ SECURE ] MATERIALIZED VIEW [ IF NOT EXISTS ] 847 | [ COPY GRANTS ] 848 | ( ) 849 | [ COMMENT = '' ] 850 | [ CLUSTER BY ( [, ... ] ) ] 851 | AS 852 | 853 | 854 | pg: 855 | CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] table_name 856 | [ (column_name [, ...] ) ] 857 | [ USING method ] 858 | [ WITH ( storage_parameter [= value] [, ... ] ) ] 859 | [ TABLESPACE tablespace_name ] 860 | AS query 861 | [ WITH [ NO ] DATA ] 862 | ``` 863 | 864 | ## CREATE SEQUENCE , CREATE SEQUENCE … CLONE 865 | https://docs.snowflake.com/en/sql-reference/sql/create-sequence.html 866 | https://www.postgresql.org/docs/13/sql-createsequence.html 867 | 868 | ```sql 869 | sf: 870 | CREATE [ OR REPLACE ] SEQUENCE [ IF NOT EXISTS ] 871 | [ WITH ] 872 | [ START [ WITH ] [ = ] ] 873 | [ INCREMENT [ BY ] [ = ] ] 874 | [ COMMENT = '' ] 875 | 876 | create or replace sequence seq_01 start = 1 increment = 1; 877 | 878 | pg: 879 | CREATE [ TEMPORARY | TEMP ] SEQUENCE [ IF NOT EXISTS ] name 880 | [ AS data_type ] 881 | [ INCREMENT [ BY ] increment ] 882 | [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ] 883 | [ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ] 884 | [ OWNED BY { table_name.column_name | NONE } ] 885 | 886 | CREATE SEQUENCE serial START 101; 887 | ``` 888 | 889 | ## CREATE FUNCTION 890 | https://docs.snowflake.com/en/sql-reference/sql/create-function.html 891 | https://www.postgresql.org/docs/13/sql-createfunction.html 892 | 893 | ```sql 894 | sf: 895 | CREATE [ OR REPLACE ] [ SECURE ] FUNCTION ( [ ] [ , ... ] ) 896 | RETURNS { | TABLE ( [ , ... ] ) } 897 | [ [ NOT ] NULL ] 898 | [ LANGUAGE JAVASCRIPT ] 899 | [ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ] 900 | [ VOLATILE | IMMUTABLE ] 901 | [ COMMENT = '' ] 902 | AS '' 903 | 904 | create or replace function js_factorial(d double) returns double 905 | language javascript 906 | strict 907 | as ' 908 | if (D <= 0) { 909 | return 1; 910 | } else { 911 | var result = 1; 912 | for (var i = 2; i <= D; i++) { 913 | result = result * i; 914 | } 915 | return result; 916 | } 917 | '; 918 | 919 | pg: 920 | CREATE [ OR REPLACE ] FUNCTION name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] ) 921 | [ RETURNS rettype 922 | | RETURNS TABLE ( column_name column_type [, ...] ) ] 923 | { LANGUAGE lang_name 924 | | TRANSFORM { FOR TYPE type_name } [, ... ] 925 | | WINDOW 926 | | IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF 927 | | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT 928 | | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER 929 | | PARALLEL { UNSAFE | RESTRICTED | SAFE } 930 | | COST execution_cost 931 | | ROWS result_rows 932 | | SUPPORT support_function 933 | | SET configuration_parameter { TO value | = value | FROM CURRENT } 934 | | AS 'definition' 935 | | AS 'obj_file', 'link_symbol' 936 | } ... 937 | 938 | CREATE FUNCTION dup(int) RETURNS TABLE(f1 int, f2 text) 939 | AS $$ SELECT $1, CAST($1 AS text) || ' is text' $$ 940 | LANGUAGE SQL; 941 | ``` 942 | 943 | ## CREATE PROCEDURE 944 | https://docs.snowflake.com/en/sql-reference/sql/create-procedure.html 945 | https://www.postgresql.org/docs/13/sql-createprocedure.html 946 | 947 | ```sql 948 | sf: 949 | CREATE [ OR REPLACE ] PROCEDURE ( [ ] [ , ... ] ) 950 | RETURNS [ NOT NULL ] 951 | LANGUAGE JAVASCRIPT 952 | [ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ] 953 | [ VOLATILE | IMMUTABLE ] 954 | [ COMMENT = '' ] 955 | [ EXECUTE AS { CALLER | OWNER } ] 956 | AS '' 957 | 958 | create or replace procedure sp_pi() 959 | returns float not null 960 | language javascript 961 | as 962 | $$ 963 | return 3.1415926; 964 | $$ 965 | ; 966 | 967 | pg: 968 | CREATE [ OR REPLACE ] PROCEDURE name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] ) 969 | { LANGUAGE lang_name 970 | | TRANSFORM { FOR TYPE type_name } [, ... ] 971 | | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER 972 | | SET configuration_parameter { TO value | = value | FROM CURRENT } 973 | | AS 'definition' 974 | | AS 'obj_file', 'link_symbol' 975 | } ... 976 | 977 | CREATE PROCEDURE insert_data(a integer, b integer) 978 | LANGUAGE SQL 979 | AS $$ 980 | INSERT INTO tbl VALUES (a); 981 | INSERT INTO tbl VALUES (b); 982 | $$; 983 | ``` --------------------------------------------------------------------------------