library("duckdb")
library("dplyr")
# テストデータ
d <- data.frame(id = c(1, 2, 3), name = c('A', 'B', 'C'))
# dをCSVファイル形式で保存
write.csv(d, 'test_R.csv')
# DB接続/新規作成
# con <- dbConnect(duckdb())
con <- dbConnect(duckdb("test_db_R.duckdb"))
#
# 保存したファイルからデータ読み込み,DBにtestテーブルを新規作成
#
# CSV(comma separated values)
dbSendQuery(con, "DROP TABLE IF EXISTS test_table_R")
dbSendQuery(con, "CREATE TABLE test_table_R AS SELECT * FROM read_csv_auto('test_R.csv')")
# TSV (tab separated values)
# dbExecute(con, "CREATE TABLE test_table_r AS SELECT * FROM read_csv_auto('test.csv', delim='\t')")
# テーブル取得(その1:表全体)
(d <- dbReadTable(con, "test_table_R"))
## column0 id name
## 1 1 1 A
## 2 2 2 B
## 3 3 3 C
# テーブル取得(その2:クエリ経由:抽出条件を付与できる)
res <- dbSendQuery(con, "SELECT * FROM test_table_R")
(d <- dbFetch(res))
## column0 id name
## 1 1 1 A
## 2 2 2 B
## 3 3 3 C
dbClearResult(res) # クエリ結果を消去
# DB終了
dbDisconnect(con, shutdown=T)
Terminalタブを開き,コマンド「pip install duckdb」でduckdbをインストールしておく。
import duckdb
import pandas as pd
# テストデータ
df = pd.DataFrame({'id': [1, 2, 3], 'name': ['A', 'B', 'C']})
# dfをCSVファイル形式で保存
df.to_csv('test_py.csv')
# DB接続/新規作成
# con = duckdb.connect(database=':memory:')
con = duckdb.connect(database='test_db_py.duckdb')
#
# 保存したファイルからデータ読み込み,DBにtestテーブルを新規作成
#
# CSV(comma separated values)
con.sql('DROP TABLE IF EXISTS test_table_py')
con.sql('CREATE TABLE test_table_py AS SELECT * FROM read_csv_auto("test_py.csv")')
# TSV (tab separated values)
# con.sql('CREATE TABLE test_table_py AS SELECT * FROM read_csv_auto("test_py.tsv", delim="\t")')
# testテーブルの表示
con.table('test_table_py').show()
## ┌─────────┬───────┬─────────┐
## │ column0 │ id │ name │
## │ int64 │ int64 │ varchar │
## ├─────────┼───────┼─────────┤
## │ 0 │ 1 │ A │
## │ 1 │ 2 │ B │
## │ 2 │ 3 │ C │
## └─────────┴───────┴─────────┘
# クエリ実行
res = con.execute('SELECT * FROM test_table_py')
# 結果取得
df_res = res.fetchdf()
print(df_res)
## column0 id name
## 0 0 1 A
## 1 1 2 B
## 2 2 3 C
# DB終了
con.close()