dbt Labs atvēra pirmkodu savam Rust dzinējam un izlaida to kā dbt Core versiju 2.0. Pirmais alfa laidiens iznāca 1. jūnijā. Galvenais skaitlis: uz projektiem ar 10 000 un vairāk modeļiem parsēšana notiek līdz 30 reizēm ātrāk nekā vecajā Python dzinējā.
Līdz šim dbt kompilēšanas un parsēšanas kods bija Python. Jaunais Core balstās uz dbt Fusion dzinēju, ko komanda pilnībā pārrakstīja Rust valodā un kurā iestrādāts SDF Labs SQL kompilators — to dbt ieguva, nopērkot pašu SDF. Tas ir lielākais dbt pārbūves solis kopš rīka pirmsākumiem, un pirmoreiz liela daļa Fusion Rust koda ir publiska.
Kas mainās zem pārsega
Fusion neizmanto Python. Izņemot adaptera makro, dbt Core un Fusion nedala nevienu koda rindu. SDF komandā strādāja bijušie Meta un Microsoft inženieri, un viņu darbs bija daudzu dialektu SQL analīzes dzinējs — tas Fusion ļauj saprast pašu SQL, nevis tikai to sagatavot un nosūtīt noliktavai.
No tā izriet lietas, kas vecajā dbt nebija iespējamas. Fusion pārbauda vaicājumus reāllaikā redaktorā un izseko datu izcelsmi līdz atsevišķai kolonnai. Parsēšanas rezultātus tas var izmest kā Parquet failus — ātru alternatīvu lielajiem JSON artefaktiem, tādiem kā manifest.json. Tā kā tie ir Parquet, izcelsmi un modeļu grafu var vaicāt tieši ar DuckDB, nerakstot atsevišķu parsētāju.
Divi izplatījumi, divas licences
dbt 2.0 nāk kā divas binārfailu versijas. dbt-core ir atvērtā koda daļa ar Apache 2.0 licenci — tā domāta komandām, kam vajag OSS licenci vai kas būvē pašas savas integrācijas. Otra ir dbt, Fusion izplatījums: iepriekš sakompilēts Rust binārfails ar daļu slēgta koda, bet bezmaksas lokāli un ražošanā. Fusion versijā ir arī iebūvēts SQL linteris, ko OSS variantā nav.
dbt savā paziņojumā lielākajai daļai lietotāju iesaka tieši Fusion binārfailu. Tas maina ierasto ainu: gadiem dbt Core bija vienīgais pilnais atvērtā koda variants, tagad pilnu ātrumu un linteri dod izplatījums, kas nav Apache 2.0.
Ātrums — un ko tas nenozīmē
Skaitļi ir konkrēti. Parsēšana lielos projektos līdz 30 reizēm ātrāka, pilna projekta kompilācija apmēram divreiz ātrāka. Iebūvētais dbt lint strādā aptuveni 50 reizes ātrāk nekā vienpavediena SQLFluff, jo darbojas paralēli.
Ātruma pieaugums attiecas uz DAG parsēšanu un kompilēšanu, nevis uz vaicājumu izpildi. Cik ilgi modeļi rēķinās Snowflake vai BigQuery pusē, joprojām nosaka tavi dati un SQL.
Fusion saīsina laiku, ko dbt pavada klienta pusē — projekta lasīšanu, atkarību grafa būvēšanu, SQL sagatavošanu. Modeļu faktiskā izrēķināšana notiek datu noliktavā, un tur nekas nemainās. Kas gaida, ka rēķini par Snowflake nokritīs 30 reizes, būs vīlies. Salīdzinājumam — Databricks pētījumā konkurents SQLMesh bija ap 9 reizēm ātrāks tieši izpildē, jo pārrēķina tikai izmainītos modeļus; dbt priekšrocība ir citā vietā.
Kā pāriet
Ceļš uz 2.0 iet caur 1.12. Vispirms jāatjaunina uz to, tad ar komandu dbt parse --use-v2-parser var pārbaudīt, vai projekts parsējas ar jauno dzinēju, vēl nemainot neko citu. dbt piedāvā arī dbt-autofix pakotni un migrācijas skriptu, kas daļu darba izdara automātiski.
Ir arī izmaiņas, kas kaut ko salauzīs. Rust parsētājs ir stingrāks par Python versiju, tāpēc projekti, kas paļāvās uz vaļīgāku uzvedību, var nekompilēties uzreiz. 2.0 pagaidām ir alfa stadijā, tāpēc ražošanas cauruļvadus vēl nav laiks pārcelt — bet pārbaudīt savu projektu ar --use-v2-parser var jau tagad, un uz lieliem repozitorijiem ieguvums ir tūlītējs.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.