なぜDuckDBが人気になっているのか?
なぜDuckDBが人気なのか?
DuckDBとは何ですか?
DuckDBは、データ分析とオンライン解析処理のために設計された無料でオープンソースの組み込み型データベース管理システムです。これは次のことを意味します:
- 無料でオープンソースのソフトウェアであるため、誰でもコードを使用および変更できます。
- 組み込み型であり、DBMS(データベース管理システム)が使用するアプリケーションと同じプロセスで実行されます。これにより、高速かつ簡単に使用できます。
- トランザクションデータだけでなく、データ分析とOLAP(オンライン解析処理)に最適化されています。これは、データが行ではなく列で組織化され、集計と分析を最適化することを意味します。
- データに対してクエリ、集計、結合、およびその他のSQL関数を実行できる標準SQLをサポートしています。
- 別のプロセス間の通信のオーバーヘッドをなくすため、アプリケーション自体内でプロセス内で実行されます。
- SQLiteのように、独立したサーバーのインストールは必要ありません。ライブラリをアプリケーションに含めるだけです。
要約すると、DuckDBは高速かつ簡単なデータ分析機能を備えた組み込み型の解析データベースを提供します。フルデータベースサーバーが過剰な場合に、解析処理のニーズを満たします。
DuckDBが人気になっている理由
企業がDuckDBをベースに製品を構築する理由は多岐にわたります。このデータベースは、集計、結合、および大規模データセットでの複雑なクエリなど、高速な解析クエリに最適化されています。さらに:
- インストール、展開、使用が簡単です。設定するサーバーはなく、DuckDBはアプリケーション内に組み込まれて実行されます。これにより、さまざまなプログラミング言語や環境に簡単に統合できます。
- シンプルさにもかかわらず、DuckDBは豊富な機能を備えています。完全なSQL標準、トランザクション、セカンダリインデックスをサポートし、PythonやRなどの人気のあるデータ分析プログラミング言語ともうまく統合されています。
- DuckDBは誰でも無料で使用および変更できるため、開発者やデータアナリストが採用するハードルが低くなります。
- DuckDBはテストが充実しており安定しています。幅広いプラットフォームで継続的に統合およびテストされ、安定性が確保されています。
- DuckDBは専用のOLAPデータベースと同等のパフォーマンスを提供し、展開が容易です。これにより、小規模なVoAGIデータセットから大規模なエンタープライズデータセットまで、解析クエリに適しています。
要するに、DuckDBはSQLiteのシンプルさと使いやすさと、専門の列指向データベースの解析パフォーマンスを組み合わせています。パフォーマンス、シンプルさ、機能、オープンソースライセンスのすべての要素が、DuckDBを開発者やデータアナリストの間で人気が高まっている要因です。
DuckDBのPythonの例
Python APIを使用してDuckDBのいくつかの機能をテストしてみましょう。
Pypiを使用してDuckDBをインストールできます:
pip install duckdb
他のプログラミング言語の場合は、DuckDBのインストールガイドに移動してください。
この例では、Kaggleのデータサイエンスの給与2023 CSVデータセットを使用し、DuckDBのさまざまな機能をテストしてみます。
Relation API
パンダのようにCSVファイルをリレーションにロードすることができます。DuckDBは、ユーザーがクエリ操作をリンクできるリレーショナルAPIを提供しています。クエリは遅延評価されるため、DuckDBはその実行を最適化できます。
データサイエンスの給与データセットをロードし、エイリアスを表示しました。
import duckdb
rel = duckdb.read_csv('ds_salaries.csv')
rel.alias
'ds_salaries.csv'
列の名前を表示するには、パンダと同様に.columns
を使用します。
rel.columns
['work_year',
'experience_level',
'employment_type',
'job_title',
'salary',
'salary_currency',
'salary_in_usd',
'employee_residence',
'remote_ratio',
'company_location',
'company_size']
特定の結果を得るために、関係に複数の関数を適用することができます。今回の場合、”work_year”をフィルタリングし、3つの列のみを表示し、給与に基づいて最下位の5つの職種を表示するために並べ替えて制限しました。
ガイドに従って、Relational APIについてさらに学びましょう。
rel.filter("work_year > 2021").project(
"work_year,job_title,salary_in_usd"
).order("salary_in_usd").limit(5)
┌───────────┬─────────────────┬───────────────┐
│ work_year │ job_title │ salary_in_usd │
│ int64 │ varchar │ int64 │
├───────────┼─────────────────┼───────────────┤
│ 2022 │ NLPエンジニア │ 5132 │
│ 2022 │ データアナリスト │ 5723 │
│ 2022 │ BIデータアナリスト │ 6270 │
│ 2022 │ AI開発者 │ 6304 │
│ 2022 │ データアナリスト │ 6359 │
└───────────┴─────────────────┴───────────────┘
Relational APIを使用して2つのデータセットを結合することもできます。今回の場合、「job_title」の別名を変更して、同じデータセットを結合しています。
rel2 = duckdb.read_csv('ds_salaries.csv')
rel.set_alias('a').join(rel.set_alias('b'), 'job_title').limit(5)
┌───────────┬──────────────────┬─────────────────┬───┬──────────────┬──────────────────┬──────────────┐
│ work_year │ experience_level │ employment_type │ ... │ remote_ratio │ company_location │ company_size │
│ int64 │ varchar │ varchar │ │ int64 │ varchar │ varchar │
├───────────┼──────────────────┼─────────────────┼───┼──────────────┼──────────────────┼──────────────┤
│ 2023 │ SE │ FT │ ... │ 100 │ US │ L │
│ 2023 │ MI │ CT │ ... │ 100 │ US │ S │
│ 2023 │ MI │ CT │ ... │ 100 │ US │ S │
│ 2023 │ SE │ FT │ ... │ 100 │ US │ S │
│ 2023 │ SE │ FT │ ... │ 100 │ US │ S │
├───────────┴──────────────────┴─────────────────┴───┴──────────────┴──────────────────┴──────────────┤
│ 5 行 21 列 (6 列表示) │
└───────────────────────────────────────────────────────────────────────────────────────────────────────┘
直接SQLメソッド
直接のメソッドもあります。データセット上で解析を実行するためにSQLクエリを記述する必要があります。テーブル名の代わりに、CSVファイルの場所と名前を記述します。
duckdb.sql('SELECT * FROM "ds_salaries.csv" LIMIT 5')
┌───────────┬──────────────────┬─────────────────┬───┬──────────────┬──────────────────┬──────────────┐
│ work_year │ experience_level │ employment_type │ ... │ remote_ratio │ company_location │ company_size │
│ int64 │ varchar │ varchar │ │ int64 │ varchar │ varchar │
├───────────┼──────────────────┼─────────────────┼───┼──────────────┼──────────────────┼──────────────┤
│ 2023 │ SE │ FT │ ... │ 100 │ ES │ L │
│ 2023 │ MI │ CT │ ... │ 100 │ US │ S │
│ 2023 │ MI │ CT │ ... │ 100 │ US │ S │
│ 2023 │ SE │ FT │ ... │ 100 │ CA │ M │
│ 2023 │ SE │ FT │ ... │ 100 │ CA │ M │
├───────────┴──────────────────┴─────────────────┴───┴──────────────┴──────────────────┴──────────────┤
│ 5 行 11 列 (6 列表示) │
└───────────────────────────────────────────────────────────────────────────────────────────────────────┘
永続ストレージ
DuckDBはデフォルトでインメモリデータベース上で動作します。これは、作成されたテーブルがメモリに格納され、ディスクには保存されないことを意味します。ただし、.connect()
メソッドを使用することで、ディスク上の永続データベースファイルに接続することができます。このデータベース接続に書き込まれたデータは、同じファイルに再接続した際にディスクファイルに保存され、再読み込みされます。
.connect()
メソッドを使用してデータベースを作成します。- SQLクエリを実行してテーブルを作成します。
- クエリを使用して2つのレコードを追加します。
- 新しく作成されたテストテーブルを表示します。
import duckdb
con = duckdb.connect('kdn.db')
con.sql("CREATE TABLE test_table (i INTEGER, j STRING)")
con.sql("INSERT INTO test_table VALUES (1, 'one'),(9,'nine')")
con.table('test_table').show()
┌───────┬─────────┐
│ i │ j │
│ int32 │ varchar │
├───────┼─────────┤
│ 1 │ one │
│ 9 │ nine │
└───────┴─────────┘
また、データサイエンスの給与CSVファイルを使用して新しいテーブルを作成することもできます。
con.sql('CREATE TABLE ds_salaries AS SELECT * FROM "ds_salaries.csv";')
con.table('ds_salaries').limit(5).show()
┌───────────┬──────────────────┬─────────────────┬───┬──────────────┬──────────────────┬──────────────┐
│ work_year │ experience_level │ employment_type │ ... │ remote_ratio │ company_location │ company_size │
│ int64 │ varchar │ varchar │ │ int64 │ varchar │ varchar │
├───────────┼──────────────────┼─────────────────┼───┼──────────────┼──────────────────┼──────────────┤
│ 2023 │ SE │ FT │ ... │ 100 │ ES │ L │
│ 2023 │ MI │ CT │ ... │ 100 │ US │ S │
│ 2023 │ MI │ CT │ ... │ 100 │ US │ S │
│ 2023 │ SE │ FT │ ... │ 100 │ CA │ M │
│ 2023 │ SE │ FT │ ... │ 100 │ CA │ M │
├───────────┴──────────────────┴─────────────────┴───┴──────────────┴──────────────────┴──────────────┤
│ 5 行 11 列 (6 表示) │
└─────────────────────────────────────────────────────────────────────────────────────────────────────┘
すべてのタスクを実行した後は、データベースへの接続を閉じる必要があります。
con.close()
結論
DuckDBが好きな理由は何ですか?それは高速で学習と管理が簡単です。シンプリシティがデータサイエンスコミュニティで広く使用される理由だと考えています。DuckDBは直感的なSQLインターフェースを提供し、データアナリストや科学者が簡単に使いこなせます。インストールは簡単で、データベースファイルは軽量で管理しやすいです。これらのすべてがDuckDBを使うのを楽しくしています。
機能と使用例の詳細な分析については、以前のDeepnoteの記事「DuckDBを使ったデータサイエンス」をご覧ください。
データの読み込み、管理、分析に強力なツールを備えたDuckDBは、データサイエンスにおける他のデータベースソリューションと比べて魅力的な選択肢を提供しています。データ専門家がその使いやすさを発見するにつれて、DuckDBは今後もユーザーを増やし続けると私は信じています。 Abid Ali Awan (@1abidaliawan) は、機械学習モデルの構築が大好きな認定データサイエンティストです。現在はコンテンツ作成と機械学習、データサイエンス技術に関する技術ブログの執筆に焦点を当てています。Abidはテクノロジーマネジメントの修士号と電気通信工学の学士号を持っています。彼のビジョンは、心の病に苦しむ学生のためにグラフニューラルネットワークを使用したAI製品を開発することです。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles