#Basic #NYCDB
간단하게 DUCKDB 에서 paruet 파일 읽어서 SQL 하나 날려본다.
https://duckdb.org/docs/data/parquet/overview
읽는 방법은 여기서 확인하고,
import duckdb
conn = duckdb.connect()
file_path = './nyc_data/*.parquet'
result = con.execute(f"""
SELECT
passenger_count,
total_amount,
RANK() OVER (PARTITION BY passenger_count ORDER BY total_amount DESC) AS rank
FROM read_parquet('{file_path}')
WHERE passenger_count IS NOT NULL
""").fetch_arrow_table()
# polars 로 데이터 확인
print(pl.from_arrow(result))
** 복잡하게 os.walk 로 디렉토리에 있는 parquet 파일만 찾아서 파일 이름을 List 에 넣는 그런...
일은 하지 않아도 된다.
5초 정도...
이걸 똑같이 polars 로 옮겨보면
import polars as pl
# file_path 는 위와 동일하게 사용
df = pl.scan_parquet(file_path)
df = df.with_columns(
pl.col('total_amount').rank("dense").over('passenger_count').alias('rank')
).filter(
pl.col('passenger_count').is_not_null()
).select([
pl.col('passenger_count'), pl.col('total_amount'), pl.col('rank')
]).collect()
print(df)
scan_parquet 은 이전에도 포스팅에 언급했는데 쓰면 빠르다...
1.29초 정도...
SQL 의 장점만 가져가야 하는 걸까?