ืฉื—ืจื•ืจ ืฉืœ DBMS SQLite 3.42 ื•- DuckDB 0.8.0. CG/SQL ืขื ื”ื˜ืžืขืช ืคืจื•ืฆื“ื•ืจื•ืช ืžืื•ื—ืกื ื•ืช ืขื‘ื•ืจ SQLite

ื”ื•ืฆืืช SQLite 3.42, DBMS ืงืœ ืžืฉืงืœ ืฉืชื•ื›ื ืŸ ื›ืกืคืจื™ื™ืช ืคืœืื’ื™ืŸ, ืคื•ืจืกืžื”. ืงื•ื“ SQLite ืžื•ืคืฅ ื‘ืจืฉื•ืช ื”ืฆื™ื‘ื•ืจ, ื›ืœื•ืžืจ. ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ืœืœื ื”ื’ื‘ืœื•ืช ื•ืœืœื ืชืฉืœื•ื ืœื›ืœ ืžื˜ืจื”. ืชืžื™ื›ื” ืคื™ื ื ืกื™ืช ืœืžืคืชื—ื™ SQLite ื ื™ืชื ืช ืขืœ ื™ื“ื™ ืงื•ื ืกื•ืจืฆื™ื•ื ืฉื ื•ืฆืจ ื‘ืžื™ื•ื—ื“, ื”ื›ื•ืœืœ ื—ื‘ืจื•ืช ื›ืžื• ืื“ื•ื‘ื™, ืื•ืจืงืœ, ืžื•ื–ื™ืœื”, ื‘ื ื˜ืœื™ ื•ื‘ืœื•ืžื‘ืจื’.

ืฉื™ื ื•ื™ื™ื ืขื™ืงืจื™ื™ื:

  • ืขื‘ื•ืจ ืื™ื ื“ืงืกื™ื ืฉืœ ื˜ืงืกื˜ ืžืœื ืฉืœ FTS5, ืžื™ื•ืฉืžืช ื”ืคืงื•ื“ื” 'ืžื—ื™ืงื” ืžืื•ื‘ื˜ื—ืช', ืืฉืจ ืžื ืงื” ืœื—ืœื•ื˜ื™ืŸ ืืช ื›ืœ ื”ื ืชื•ื ื™ื ืฉื ื•ืชืจื• ืœืื—ืจ ื”ืžื—ื™ืงื”.
  • ืคื•ื ืงืฆื™ื•ืช ืœืขื™ื‘ื•ื“ ื ืชื•ื ื™ื ื‘ืคื•ืจืžื˜ JSON ืชื•ืžื›ื•ืช ื›ืขืช ื‘ื”ืจื—ื‘ื•ืช JSON5.
  • ืžืชื›ื ืŸ ืฉืื™ืœืชื•ืช ืžืฉื•ืคืจ. ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ืกืคื™ืจืช ืฆืคื™ื•ืช ืžื•ืคืขืœืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ. ื‘ื™ื˜ื•ืœ ื”ื˜ื™ืคื•ืœ ื‘ืขืžื•ื“ื•ืช ืฉืื™ื ืŸ ื‘ืฉื™ืžื•ืฉ ื‘ืฉืื™ืœืชื•ืช ืžืฉื ื”. ื”ื˜ืžืขืช ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืžืฉื•ืคืจืช ื‘ื“ื—ื™ืคื” ืœืžื˜ื”.
  • ื ื•ืกืคื” ืืคืฉืจื•ืช "--unsafe-testing" ืœ-CLI ื›ื“ื™ ืœืืคืฉืจ ืฉื™ืžื•ืฉ ื‘ื›ืžื” ืคืงื•ื“ื•ืช ืžืกื•ื›ื ื•ืช ื›ื’ื•ืŸ ".testctrl" ื‘ื‘ื“ื™ืงื”. ื‘ืžืฆื‘ ื‘ื˜ื•ื— ("--safe"), ื”ืคืงื•ื“ื•ืช ".log on" ื•-".log off" ืžื•ืชืจื•ืช. ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืžืคืจื™ื“ "โ€”", ืขื‘ื•ืจ ืืจื’ื•ืžื ื˜ื™ื ืฉืœืื—ืจื™ื”ื ืขื™ื‘ื•ื“ ื”ืืคืฉืจื•ื™ื•ืช ืžื•ืฉื‘ืช. ื ื•ืกืคื• ืคืจืžื˜ืจื™ื ":inf" ื•-":nan" ื”ืžืฉื•ื™ื›ื™ื ืœืขืจื›ื™ ืื™ื ืกื•ืฃ ื•-NaN.
  • ื”ืฉืžื•ืช ืฉืœ ืคื•ื ืงืฆื™ื•ืช SQL ื”ืžื•ื’ื“ืจื•ืช ื‘ื™ื™ืฉื•ื ืจืฉืื™ื ืœื”ืฆื˜ืœื‘ ืขื ืžื™ืœื•ืช ื”ืžืคืชื— CROSS, FULL, INNER, LEFT, NATURAL, OUTER ื•- RIGHT.
  • ื™ื›ื•ืœื•ืช PRAGMA integrity_check ืžื•ืจื—ื‘ื•ืช. ื ื•ืกืฃ ืกื™ืžื•ืŸ ืœืฆื™ื•ืŸ ืขืจืš NaN ื‘ืขืžื•ื“ื•ืช ืขื ื”ืชื ืื™ NOT NULL. ืชื•ื›ืŸ ืžื™ื“ืข ืžืฉื•ืคืจ ืฉืœ ื”ื•ื“ืขื•ืช ืฉื’ื™ืื”.
  • ืชื•ืกืคืช ื”ืคื’ื™ืฉื” ืžืืคืฉืจืช ื™ื™ืจื•ื˜ ืฉืœ ืฉื™ื ื•ื™ื™ื ืžื˜ื‘ืœืื•ืช ืœืœื ROWIDs.
  • ื”ืžืฉื ื” "subsec" ื ื•ืกืฃ ืœืคื•ื ืงืฆื™ื•ืช ืœืขื‘ื•ื“ื” ืขื ื–ืžืŸ ื•ืชืืจื™ื›ื™ื ื›ื“ื™ ืœื”ืฉืชืžืฉ ื‘ืฉื‘ืจื™ืจื™ ืฉื ื™ื•ืช.
  • ืขื•ืžืง ื”ืจืงื•ืจืกื™ื” ื”ืžื•ืคื—ืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ืขื‘ื•ืจ ืžืขืจื›ื™ื ื•ืื•ื‘ื™ื™ืงื˜ื™ JSON ืž-2000 ืœ-1000.

ื‘ื ื•ืกืฃ, ื ื•ืฆืจื” ื”ืžื”ื“ื•ืจื” ืฉืœ DuckDB 0.8.0 DBMS, ืืฉืจ ืžืคืชื—ืช ืืช ื’ืจืกืช SQLite, ืžืฉื•ืคืจืช ืขื ืชื›ื•ื ื•ืช ื•ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ืœื‘ื™ืฆื•ืข ืฉืื™ืœืชื•ืช ืื ืœื™ื˜ื™ื•ืช ื”ืžื›ืกื•ืช ื—ืœืง ื ื™ื›ืจ ืžื”ื ืชื•ื ื™ื ื”ืžืื•ื—ืกื ื™ื, ืœืžืฉืœ, ืฆื‘ื™ืจื” ืฉืœ ื›ืœ ื”ืชื•ื›ืŸ ืฉืœ ื˜ื‘ืœืื•ืช ืื• ืžื™ื–ื•ื’ ืฉืœ ื›ืžื” ืฉื•ืœื—ื ื•ืช ื’ื“ื•ืœื™ื. ื ื™ืชืŸ ื“ื™ืืœืงื˜ ืžื•ืจื—ื‘ ืฉืœ ืฉืคืช SQL, ื›ื•ืœืœ ื™ื›ื•ืœื•ืช ื ื•ืกืคื•ืช ืœื˜ื™ืคื•ืœ ื‘ืฉืื™ืœืชื•ืช ืžื•ืจื›ื‘ื•ืช ื•ืืจื•ื›ื•ืช ื˜ื•ื•ื—, ื•ื›ืŸ ืชืžื™ื›ื” ื‘ืกื•ื’ื™ื ืžื•ืจื›ื‘ื™ื (ืžืขืจื›ื™ื, ืžื‘ื ื™ื, ืื™ื’ื•ื“ื™ื), ื‘ื™ืฆื•ืข ืกื™ืžื•ืœื˜ื ื™ ืฉืœ ืžืกืคืจ ืฉืื™ืœืชื•ืช ื•ื‘ื™ืฆื•ืข ืฉืื™ืœืชื•ืช ื™ืฉื™ืจื•ืช ืž ืงื‘ืฆื™ื ื‘ืคื•ืจืžื˜ CSV, JSON ื•ืคืจืงื˜. ืืคืฉืจ ืœื™ื™ื‘ื ืž-PostgreSQL DBMS.

ื‘ื ื•ืกืฃ ืœืงื•ื“ ื”ืžืขื˜ืคืช ืž-SQLite, ื”ืคืจื•ื™ืงื˜ ืžืฉืชืžืฉ ื‘ืžื ืชื— ืž-PostgreSQL, ื”ื•ืขื‘ืจ ืœืกืคืจื™ื™ื” ื ืคืจื“ืช, ื‘ืจื›ื™ื‘ Date Math ืž-MonetDB, ื‘ื™ื™ืฉื•ื ืžืฉืœื• ืฉืœ ืคื•ื ืงืฆื™ื•ืช ื—ืœื•ืŸ (ืžื‘ื•ืกืก ืขืœ ืืœื’ื•ืจื™ืชื Segment Tree Aggregation), ืžืขื‘ื“ ื‘ื™ื˜ื•ื™ ืจื’ื•ืœืจื™ ืžื‘ื•ืกืก ืขืœ ืกืคืจื™ื™ืช RE2, ืื•ืคื˜ื™ืžื™ื–ืฆื™ื™ืช ืฉืื™ืœืชื•ืช ืžืฉืœื”, ืžื ื’ื ื•ืŸ ื‘ืงืจื” ืฉืœ MVCC ื‘ื™ืฆื•ืข ืกื™ืžื•ืœื˜ื ื™ ืฉืœ ืžืฉื™ืžื•ืช (Multi-Version Concurrency Control), ื•ื›ืŸ ืžื ื•ืข ื‘ื™ืฆื•ืข ืฉืื™ืœืชื•ืช ื•ืงื˜ื•ืจ ื”ืžื‘ื•ืกืก ืขืœ ืืœื’ื•ืจื™ืชื Hyper-Pipelining Query Execution, ื”ืžืืคืฉืจ ืขื™ื‘ื•ื“ ืกื˜ื™ื ื’ื“ื•ืœื™ื ืฉืœ ืขืจื›ื™ื ื‘ื‘ืช ืื—ืช ื‘ืคืขื•ืœื” ืื—ืช. ืงื•ื“ ื”ืคืจื•ื™ืงื˜ ืžื•ืคืฅ ืชื—ืช ืจื™ืฉื™ื•ืŸ MIT.

ื‘ื’ืจืกื” ื”ื—ื“ืฉื” ืฉืœ DuckDB:

  • ื ื•ืกืคื• ื‘ื™ื˜ื•ื™ื™ื ื—ื“ืฉื™ื "PIVOT" ื•-"UNPIVOT" ื›ื“ื™ ืœื”ืคื•ืš ืฉื•ืจื•ืช ืœืขืžื•ื“ื•ืช ื•ืœื”ื™ืคืš.
  • ืžืงื‘ื™ืœื” ืžืฉื•ืคืจืช ื‘ืขืช ื™ื™ื‘ื•ื โ€‹โ€‹ื•ื™ื™ืฆื•ื ื ืชื•ื ื™ื. ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืงืจื™ืื” ืžืงื‘ืฆื™ื ื‘ืคื•ืจืžื˜ CSV ืœื–ืจืžื™ื ืžืจื•ื‘ื™ื ื•ื›ืชื™ื‘ื” ืžืจื•ื‘ื” ื”ืœื™ื›ื™ ืžื™ื•ืฉืžื•ืช ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ืคื•ืจืžื˜ื™ื ืฉืœ Parquet, CSV ื•-JSON.
  • ื”ืชื•ื•ืกืฃ ืื•ืคืจื˜ื•ืจ "**" ืœื—ื–ืจื” ืจืงื•ืจืกื™ื‘ื™ืช ืขืœ ืกืคืจื™ื•ืช ื‘ืขืช ื”ื’ื“ืจืช ื ืชื™ื‘ื™ ืงื‘ืฆื™ื (ืœืžืฉืœ ืž-"'data/glob/crawl/stackoverflow/**/*.csv';").
  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืคืขื•ืœื•ืช ืžื™ื–ื•ื’ (JOIN) ืœื ืชื•ื ื™ื ื‘ืฆื•ืจื” ืฉืœ ืกื“ืจืช ื–ืžืŸ (ื—ืชื™ื›ื•ืช ืฉืœ ืขืจื›ื™ ืคืจืžื˜ืจื™ื ื‘ืžืจื•ื•ื—ื™ ื–ืžืŸ ืžื•ื’ื“ืจื™ื), ืฉื‘ื” ื”ืงืจื™ื˜ืจื™ื•ืŸ ืœืžื™ื–ื•ื’ ืจืฉื•ืžื•ืช ืื™ื ื• ืžื“ื•ื™ืง ืืœื ื”ืชืืžื” ืžืฉื•ืขืจืช ืฉืœ ืขืจื›ื™ื ื‘ืฉื“ื” ืขื ื–ืžืŸ (ืœื“ื•ื’ืžื”, ืืชื” ื™ื›ื•ืœ ืœืฉืœื‘ ืจืฉื•ืžื•ืช, ื–ืžืŸ ื”ื‘ื“ืœ ืฉืœ ืœื ื™ื•ืชืจ ืžื“ืงื” ืื—ืช).
  • ื”ื˜ืขื™ื ื” ื”ื ื“ื—ื™ืช ืฉืœ ืžื˜ื ื ืชื•ื ื™ื ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ื”ื•ื˜ืžืขื”, ืžื” ืฉืืคืฉืจ ืœื–ืจื– ืืช ื”ืฉืงืช ื”-DBMS ื‘ืขืฉืจื•ืช ืžื•ื ื™ื.
  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ื—ื™ื‘ื•ืจ ืคื•ื ืงืฆื™ื•ืช ืžื•ืชืืžื•ืช ืื™ืฉื™ืช ื‘-Python.
  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืžืžืฉืง ื”-API ืฉืœ ADBC โ€‹โ€‹(Arrow Database Connectivity) ืœื”ืขื‘ืจืช ื ืชื•ื ื™ื ื‘ืืžืฆืขื•ืช Apache Arrow.
  • ื™ื™ืฉื•ื ื›ืจื™ื›ื” ืœืื™ื ื˜ื’ืจืฆื™ื” ืขื ืงื•ื“ Swift.
  • ืฉื™ื ื” ืืช ื”ื”ืชื ื”ื’ื•ืช ืฉืœ ืื•ืคืจื˜ื•ืจ ื”ื—ืœื•ืงื” ("/"), ืฉืžื‘ืฆืข ื›ืขืช ื—ื™ืฉื•ื‘ื™ ื ืงื•ื“ื” ืฆืคื” ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื‘ืžืงื•ื ืคืขื•ืœื•ืช ืฉืœืžื™ื. ืื•ืคืจื˜ื•ืจ ื—ื“ืฉ "//" ื”ื•ืฆืข ืœื—ืœื•ืงืช ืžืกืคืจื™ื ืฉืœืžื™ื. ื ื™ืชืŸ ืœื”ื—ื–ื™ืจ ืืช ื”ื”ืชื ื”ื’ื•ืช ื”ื™ืฉื ื” ืขืœ ื™ื“ื™ ื”ื’ื“ืจืช "SET integer_division=true;".
  • ืฉื™ื˜ืช ื”ื—ืฉื‘ื•ื ืื•ืช ืฉืœ ืจืฉื•ืžื•ืช ืืคืก ื‘ืขืช ื”ืžื™ื•ืŸ ืฉื•ื ืชื” ืž"NULLS FIRST" ืœ"NULLS LAST", ื›ืœื•ืžืจ. ืขืจื›ื™ NULL ื™ื•ืฆื’ื• ื›ืขืช ื‘ืกื•ืฃ ื‘ืžืงื•ื ื‘ืชื—ื™ืœืช ื”ืจืฉื™ืžื”. ื ื™ืชืŸ ืœืฉื—ื–ืจ ืืช ื”ื”ืชื ื”ื’ื•ืช ื”ื™ืฉื ื” ืขืœ ื™ื“ื™ ื”ื’ื“ืจืช "SET default_null_order='nulls_first';".

ื‘ื ื•ืกืฃ, ื ื™ืชืŸ ืœืฆื™ื™ืŸ ืืช ืคืจื•ื™ืงื˜ CG/SQL ืฉืคื•ืชื— ืขืœ ื™ื“ื™ ืคื™ื™ืกื‘ื•ืง, ื”ืžืกืคืง ืžื—ื•ืœืœ ืงื•ื“ ืœืฉื™ืžื•ืฉ ื‘ืคืจื•ืฆื“ื•ืจื•ืช ืžืื•ื—ืกื ื•ืช ืขื SQLite. CG/SQL ืžืืคืฉืจ ืœืš ืœืขืฆื‘ ืคืจื•ืฆื“ื•ืจื•ืช ืžืื•ื—ืกื ื•ืช ื‘ื ื™ื‘ ืžื™ื•ื—ื“ ืฉืœ T-SQL (Transact-SQL), ื”ืžืืคืฉืจ ืœืš ืœืงืจื•ื ืœืคื•ื ืงืฆื™ื•ืช ืฉืœ ืกืคืจื™ื™ืช C ื”ืกื˜ื ื“ืจื˜ื™ืช ื•ืœื’ืฉืช ืœื ืชื•ื ื™ื ื‘-SQLite. ื”ื”ืœื™ื›ื™ื ื”ืžืื•ื—ืกื ื™ื ืฉื ื•ืฆืจื• ืžื•ืจื›ื‘ื™ื ืœืงื•ื“ C ื”ืžืฉืชืžืฉ ื‘-SQLite C API ื›ื“ื™ ืœื‘ืฆืข ืคืขื•ืœื•ืช ืฉืฆื•ื™ื ื• ื•ืœืขื‘ื“ ืฉืื™ืœืชื•ืช ืžื•ืจื›ื‘ื•ืช. ื ื™ืชืŸ ืœืงืฉืจ ืคืจื•ืฆื“ื•ืจื•ืช ืžืื•ื—ืกื ื•ืช ืžื”ื™ื“ื•ืจ ืœืชื•ื›ื ื™ื•ืช C, Java ื•-Objective-C. ืงื•ื“ ื”ืคืจื•ื™ืงื˜ ื›ืชื•ื‘ ื‘-C ื•ืžื•ืคืฅ ืชื—ืช ืจื™ืฉื™ื•ืŸ MIT.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”