DuckDB 0.6.0 が公開、分析クエリ用の SQLite オプション

DuckDB 0.6.0 DBMS のリリースが利用可能になり、コンパクトさ、組み込みライブラリの形式で接続する機能、データベースを XNUMX つのファイルに保存する機能、便利な CLI インターフェイス、および実行のためのツールと最適化機能などの SQLite の特性が組み合わされています。保存されたデータの重要な部分をカバーする分析クエリ。たとえば、テーブルの内容全体を集計したり、複数の大きなテーブルを結合したりします。 プロジェクト コードは MIT ライセンスに基づいて配布されます。 ストレージ形式がまだ安定しておらず、バージョンごとに異なるため、開発はまだ実験的リリースを形成している段階にあります。

DuckDB は、非常に複雑で時間のかかるクエリを処理するための追加機能を含む高度な SQL 言語を提供します。 複合型 (配列、構造体、共用体) の使用と、任意のネストされた相関サブクエリを実行する機能がサポートされています。 複数のクエリの同時実行、CSV および Parquet ファイルからの直接クエリの実行をサポートしています。 PostgreSQL DBMSからインポートすることが可能です。

SQLite のシェル コードに加えて、プロジェクトでは、別のライブラリにある PostgreSQL のパーサー、MonetDB の Date Math コンポーネント、独自のウィンドウ関数の実装 (セグメント ツリー集約アルゴリズムに基づく)、正規表現プロセッサを使用しています。 RE2 ライブラリ、独自のクエリ オプティマイザー、タスクの同時実行 (マルチバージョン同時実行制御) の MVCC 制御メカニズム、および大量の値のセットを許可するハイパー パイプライン クエリ実行アルゴリズムに基づくベクトル化されたクエリ実行エンジンXNUMX回の操作で一度に処理されます。

新しいリリースの変更点には次のようなものがあります。

  • 保存形式を改善する作業が続けられました。 オプティミスティック ディスク書き込みモードが実装されました。このモードでは、XNUMX つのトランザクションで大量のデータ セットをロードするときに、COMMIT コマンドでトランザクションが確認されるのを待たずに、データが圧縮され、ストリーミング モードでデータベースからファイルに書き込まれます。 。 COMMIT コマンドを受信したとき、データはすでにディスクに書き込まれており、ROLLBACK が実行されるとデータは破棄されます。 以前は、データは最初に完全にメモリに保存され、コミットされるとディスクに保存されました。
  • 個別のテーブルへのデータの並列ロードのサポートが追加されました。これにより、マルチコア システムでのロード速度が大幅に向上します。 たとえば、以前のリリースでは、150 コア CPU 上で 10 億 91 万行のデータベースをロードするのに 17 秒かかりましたが、新しいバージョンでは、この操作は XNUMX 秒で完了します。 レコードの順序を保持する場合と順序を保持しない場合の XNUMX つの並列ロード モードがあります。
  • データ圧縮には、FSST (Fast Static Symbol Table) アルゴリズムが使用されます。これにより、一般的な一致の共通辞書を使用して文字列内にデータを詰め込むことができます。 新しいアルゴリズムの使用により、テスト データベースのサイズを 761MB から 251MB に削減することができました。
  • Chimp アルゴリズムと Patas アルゴリズムは、浮動小数点数 (DOUBLE および FLOAT) を圧縮するために提案されています。 以前の Gorillas アルゴリズムと比較して、Chimp はより高いレベルの圧縮とより高速な解凍を実現します。 Patas アルゴリズムは、圧縮率では Chimp に遅れていますが、解凍速度ははるかに速く、非圧縮データの読み取りとほとんど変わりません。
  • CSV ファイルから複数の並列ストリームにデータをロードする実験的な機能 (SET Experimental_Parallel_csv=true) が追加されました。これにより、大きな CSV ファイルのロードにかかる時間が大幅に短縮されます。 たとえば、このオプションを有効にすると、720 MB の CSV ファイルのダウンロード時間が 3.5 秒から 0.6 秒に短縮されました。
  • インデックスの作成と管理操作を並行して実行できる機能が実装されました。 たとえば、16 万レコードの列に対する CREATE INDEX 操作は、5.92 秒から 1.38 秒に短縮されました。
  • 式「COUNT(DISTINCT col)」を含むクエリでの集計操作の並列化が有効になりました。
  • SQL では、UNION 型のサポートが追加されました。これにより、複数の型を XNUMX つの要素にバインドできるようになります (たとえば、「UNION(num INT, error VARCHAR))」)。
  • SQL には、「SELECT」の代わりに「FROM」という単語で始まるクエリを作成する機能があります。 この場合、クエリは「SELECT *」で始まると想定されます。
  • SQL に COLUMNS 式のサポートが追加されました。これにより、式を複製せずに複数の列に対して操作を実行できるようになります。 たとえば、「SELECT MIN(COLUMNS(*)) from obs;」 これにより、OBS テーブルの各列に対して MIN 関数が実行され、「SELECT COLUMNS('val[0-9]+') from obs;」となります。 「val」と数字で構成される名前を持つ列の場合。
  • 「SELECT [x + 1 for x in [1, 2, 3]] AS l;」などのリストに対する操作のサポートが追加されました。
  • メモリ消費量が最適化されました。 デフォルトでは、Linux プラットフォームはメモリ管理に jemalloc ライブラリを使用します。 メモリが制限されている場合のハッシュ マージ操作のパフォーマンスが大幅に向上しました。
  • コマンド ライン インターフェイスに「.mode duckbox」出力モードを追加しました。これは、ターミナル ウィンドウの幅を考慮して中央の列を破棄します (「SELECT *」など、多数の列を含むクエリの結果を視覚的に迅速に評価するのに適しています) FROM tbl」、通常モードでは複数の行にまたがります)。 「.maxrows X」パラメータを使用すると、表示される行数をさらに制限できます。
  • CLI は、コンテキストを考慮した入力のオートコンプリートを提供します (キーワード、テーブル名、関数、列名、ファイル名の入力が完了します)。
  • CLI では、クエリ進行状況インジケーターがデフォルトで有効になっています。

出所: オープンネット.ru

コメントを追加します