dbtå ¥é â 2ä»¶ã®æ³šæãSQLã§éèšããããŒã¿ãç¹æ€ããã
å°ããªæ³šæããŒã¿ãã売äžãžæŽãã
- CSVãseedãšããŠåã蟌ã
- refã§åèš600åãåºã
- not_nullãšuniqueãå®è¡ãã
æåã®ãŽãŒã«ïŒæ³šæ2ä»¶ã600åã«ãŸãšãã
SQLã®SELECTãå°ãç¥ã£ãŠãã人åãã§ããã¯ã©ãŠãã®å¥çŽããããPythonãšDuckDBã§CSV â éèš â ããŒã¿ãã¹ãã詊ããŸãã
dbtã¯ããŒã¿å€æã管çããéå ·ã§ãã転éãå¯èŠåã®ãã¹ãŠãäžã€ã§åŒãåããããã§ã¯ãããŸãããä»åã¯dbt Coreãšã³ãã¥ããã£ã®DuckDBã¢ããã¿ãŒã䜿ããŸãã
ç·Žç¿ãã©ã«ããŒãšæ¥ç¶å ãäœã
Pythonãšpipã䜿ããç°å¢ã§ãæ°ããdbt-shoppingãã©ã«ããŒãžç§»åããŠä»®æ³ç°å¢ãäœããŸãã
python -m venv .venv
Windowsã®PowerShellã§ã¯ã次ãå®è¡ããŸãã
.venv\Scripts\python -m pip install dbt-duckdb
macOSã»Linuxã§ã¯.venv/bin/python -m pip install dbt-duckdbã䜿ããŸãã以éãWindowsã¯.venv\Scripts\dbtãmacOSã»Linuxã¯.venv/bin/dbtãã³ãã³ãã§ããå¥ã®DBãžç§»ãå Žåã¯ã¢ããã¿ãŒãšSQLã®æ¹èšã確èªããŠãã ããã
ãã©ã«ããŒçŽäžã«dbt_project.ymlãäœããŸãã
name: shopping
version: '1.0.0'
config-version: 2
profile: shopping
model-paths: [models]
seed-paths: [seeds]
åãå Žæã«profiles.ymlãäœããŸããä»åã¯--profiles-dir .ã§ãã®æ¥ç¶èšå®ãæå®ããŸãã
shopping:
target: dev
outputs:
dev:
type: duckdb
path: shopping.duckdb
threads: 1
shopping.duckdbã¯èªåã®ç·Žç¿ããŒã¿ãä¿åãããã¡ã€ã«ã§ããå
±æã®æ¬çªDBã«ã¯æ¥ç¶ããŸããã
CSVãšSQLãäžã€ãã€çœ®ã
seedsãã©ã«ããŒãäœããorders.csvãä¿åããŸãã
order_id,amount
1,200
2,400
modelsãã©ã«ããŒã®total_sales.sqlã«ãéèšãæžããšæ¬¡ã®ããã«ãªããŸãã
select sum(amount) as total
from {{ ref('orders') }}
ref('orders')ã¯seedã®ããŒã¿ãåç
§ããŸããåãªãæåå眮æã ãã§ãªããäŸåé¢ä¿ãdbtãžäŒããŸãããã¥ãŒã»ããŒãã«ãªã©ã®äœãæ¹ã¯ãããªã¢ã©ã€ãŒãŒã·ã§ã³ã®èšå®ã§å€ãããŸãã
models/schema.ymlã«ã泚æçªå·ã®æ€æ»ãè¶³ããŸãããã
version: 2
seeds:
- name: orders
columns:
- name: order_id
data_tests:
- not_null
- unique
å®è¡ããŠçµæã確ããã
Windowsã§ã¯ç·Žç¿ãã©ã«ããŒã§æ¬¡ãå®è¡ããŸãã
.venv\Scripts\dbt debug --profiles-dir .
.venv\Scripts\dbt build --profiles-dir .
macOSã»Linuxã§ã¯ã³ãã³ãã®å
é ã.venv/bin/dbtã«å€ããŸããbuildã¯éžãã seedã»ã¢ãã«ã»ãã¹ãã»snapshotãªã©ãäŸåé¢ä¿ã«æ²¿ã£ãŠåŠçããŸãããã®äŸã§ã¯seed1ä»¶ãã¢ãã«1ä»¶ããã¹ã2ä»¶ãæåããã°ç®å°ã§ãã
éèšã®å€ã¯ãåããã©ã«ããŒã§Pythonã䜿ã£ãŠç¢ºèªã§ããŸãã
import duckdb
with duckdb.connect('shopping.duckdb') as db:
print(db.sql('select total from total_sales').fetchall())
çµæã¯[(600,)]ã§ããä»®æ³ç°å¢ã®Pythonã§å®è¡ããŠãã ãããæ¥ç¶ã§ããªãå Žåã¯ãããã¡ã€ã«åshoppingãšçŸåšã®ãã©ã«ããŒããã¢ãã«ãèŠã€ãããªãå Žåã¯ãã¡ã€ã«åãšé
眮ãèŠçŽããŸãã
éè€ãäœéšããããã°ãCSVã®2è¡ç®ã®æ³šæçªå·ã1ã«ããŠããäžåºŠbuildããŸããuniqueã倱æããã¯ãã§ããå
ã®1ã»2ãžæ»ããŠåå®è¡ããŸããããå®åã§å€±æããè¡ã¯ãæ¥åã«ãŒã«ãšåã蟌ã¿å
ã調ã¹ãŠããä¿®æ£ããŸãã
次ã«åŠã¶ãªã
倿ã®éå ·ã«æ £ãããDuckDBå ¥éã§ãã¡ã€ã«ãèªãç·Žç¿ãžãåæçšã®äœæ¥ãšããŒã¿ãéããäœæ¥ã®éãã¯ããŒã¿ãšã³ãžãã¢ãšããŒã¿ãµã€ãšã³ãã£ã¹ãã®æ¯èŒã§ãæŽçã§ããŸãã
åèè³æ
- dbt SQL models â SELECTãšãããªã¢ã©ã€ãŒãŒã·ã§ã³
- dbt ref â åç §ãšäŸåé¢ä¿
- dbt data tests â not_nullã»uniqueãšæ€æ»ã®ç¯å²
- dbt build â äŸåé¢ä¿ã«æ²¿ã£ãåŠç
- dbt-duckdb README â ã€ã³ã¹ããŒã«ãšããŒã«ã«ã®æ¥ç¶èšå®