데이터분석

DuckDB-2(테이블 활용)

DEDS 2025. 4. 9. 00:17
728x90
반응형

 

RDBMS처럼 사용하여 테이블을 만들고, 데이터를 저장하고 관리하는 방법입니다. DuckDB는 내장형이지만 SQL을

사용해서 테이블 생성, INSERT, SELECT 등 대부분의 관계형 DB 작업이 가능합니다.

 

1. DuckDB에 테이블 생성하고 데이터 삽입하기

import duckdb

# DuckDB 연결 (메모리 상에서 작동하거나, 파일 저장 가능)
con = duckdb.connect("myduckdb.db")  # 'myduckdb.db' 파일 생성됨

# 1. 테이블 생성 (SQL 문법 그대로 사용)
con.execute("""
    CREATE TABLE users (
        id INTEGER,
        name TEXT,
        age INTEGER
    );
""")

# 2. 데이터 삽입
con.execute("""
    INSERT INTO users VALUES 
        (1, 'Alice', 30),
        (2, 'Bob', 25),
        (3, 'John', 28),
        (4, 'Charlie', 40);
""")

# 3. 데이터 조회
result = con.execute("SELECT * FROM users").fetchdf()
result

colab 출력 결과

 

2. Pandas Dataframe을 DuckDB 테이블로 저장

import pandas as pd


df = pd.DataFrame({
    'product': ['apple', 'banana', 'carrot'],
    'price': [1000, 800, 1200]
})

# DuckDB 연결
con = duckdb.connect("myduckdb.db")

# 1. DuckDB에 테이블로 등록
con.execute("CREATE TABLE IF NOT EXISTS products AS SELECT * FROM df")

# 2. 조회 확인
print(con.execute("SELECT * FROM products").fetchdf())

출력

  product price

0 apple 1000

1 banana 800

2 carrot 1200

※ Pandas의 DataFrame을 SQL 테이블처럼 즉시 등록해서 쿼리할 수 있습니다.

 

3. CSV 파일 불러와 테이블로 저장

# CSV 파일을 DuckDB 테이블로 불러오기  기존의 iris.csv 파일 생성한 코드 실행 후 수행
con.execute("""
    CREATE TABLE IF NOT EXISTS iris AS
    SELECT * FROM read_csv_auto('iris.csv')
""")

# 확인
con.execute("SELECT COUNT(*) as cnt FROM iris").fetchdf()

 

4.연결 종료

con.close()

 

5.트랜잭션 관리

con.execute("""
    BEGIN TRANSACTION;

    INSERT INTO users VALUES (4, 'David', 50);
    DELETE FROM users WHERE id = 2;

    COMMIT;
""")

 

6.UPDATE/DELETE

import duckdb

con = duckdb.connect("users.db")

# 사용자 테이블 생성
con.execute("""
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER,
        name TEXT,
        age INTEGER
    );
""")

# 초기 데이터 삽입
con.execute("""
    INSERT INTO users VALUES
        (1, 'Alice', 30),
        (2, 'Bob', 25),
        (3, 'Charlie', 40);
""")

# UPDATE: Bob 나이를 35로 변경
con.execute("""
    UPDATE users SET age = 35 WHERE name = 'Bob';
""")

# DELETE: 나이가 30 이하인 사람 삭제
con.execute("""
    DELETE FROM users WHERE age <= 30;
""")

# 결과 확인
df = con.execute("SELECT * FROM users").fetchdf()
print(df)

# 연결 종료
con.close()

출력  

  id name age

0 2 Bob 35

1 3 Charlie 40

 

다음 세번째로는 parquet 사용 및 copy로 output 파일 생성하는 내용에 대해서 정리하도록 하겠습니다.

728x90
반응형

'데이터분석' 카테고리의 다른 글

Colab 한글폰트 문제 해결  (0) 2025.04.10
DuckDB-3 (Parquet 및 Copy)  (0) 2025.04.10
DuckDB-1 (파일SQL)  (0) 2025.04.08
pandas 컬럼명 변경  (0) 2025.04.08
비모수검정  (0) 2025.04.08