{"id":120828,"date":"2025-11-17T16:00:38","date_gmt":"2025-11-17T09:00:38","guid":{"rendered":"https:\/\/tino.vn\/blog\/?p=120828"},"modified":"2025-11-17T16:01:50","modified_gmt":"2025-11-17T09:01:50","slug":"dbt-la-gi","status":"publish","type":"post","link":"https:\/\/tino.vn\/blog\/dbt-la-gi\/","title":{"rendered":"DBT l\u00e0 g\u00ec? Gi\u1ea3i m\u00e3 &#8220;ph\u00f9 th\u1ee7y&#8221; bi\u1ebfn SQL th\u00e0nh data pipeline tin c\u1eady"},"content":{"rendered":"\n<p><strong>Trong k\u1ef7 nguy\u00ean b\u00f9ng n\u1ed5 d\u1eef li\u1ec7u, vi\u1ec7c thu th\u1eadp th\u00f4ng tin v\u00e0 t\u1ea3i ch\u00fang v\u00e0o kho d\u1eef li\u1ec7u \u0111\u00e3 tr\u1edf n\u00ean d\u1ec5 d\u00e0ng h\u01a1n bao gi\u1edd h\u1ebft nh\u1edd c\u00e1c c\u00f4ng c\u1ee5 ELT hi\u1ec7n \u0111\u1ea1i. D\u1eef li\u1ec7u th\u00f4 c\u00f3 th\u1ec3 s\u1edf h\u1eefu h\u00e0ng Terabyte dung l\u01b0\u1ee3ng, nh\u01b0ng n\u1ebfu kh\u00f4ng \u0111\u01b0\u1ee3c l\u00e0m s\u1ea1ch v\u00e0 chu\u1ea9n h\u00f3a, ch\u00fang ch\u1ec9 l\u00e0 m\u1ed9t &#8220;m\u1edb h\u1ed7n \u0111\u1ed9n&#8221; t\u1ed1n t\u00e0i nguy\u00ean l\u01b0u tr\u1eef. \u0110i\u1ec1u g\u00ec s\u1ebd x\u1ea3y ra n\u1ebfu b\u1ea1n c\u00f3 th\u1ec3 \u00e1p d\u1ee5ng c\u00e1c nguy\u00ean t\u1eafc k\u1ef9 thu\u1eadt ph\u1ea7n m\u1ec1m t\u1ed1t nh\u1ea5t tr\u1ef1c ti\u1ebfp v\u00e0o quy tr\u00ecnh chuy\u1ec3n \u0111\u1ed5i d\u1eef li\u1ec7u ch\u1ec9 b\u1eb1ng <a href=\"https:\/\/tino.vn\/blog\/sql-va-nosql-la-gi\/\" target=\"_blank\" data-type=\"post\" data-id=\"109993\" rel=\"noreferrer noopener\">SQL<\/a>? \u0110\u00e2y ch\u00ednh l\u00e0 l\u00fac DBT (Data Build Tool) b\u01b0\u1edbc v\u00e0o v\u00e0 thay \u0111\u1ed5i ho\u00e0n to\u00e0n cu\u1ed9c ch\u01a1i. V\u1eady DBT l\u00e0 g\u00ec?<\/strong><\/p>\n\n\n\n<h2 id=\"T\u1ed5ng_quan_v\u1ec1_DBT\"><a id=\"post-120828-_qmcbwup232uq\"><\/a>T\u1ed5ng quan v\u1ec1 DBT<\/h2>\n\n\n\n<h3 id=\"DBT_l\u00e0_g\u00ec?\"><a id=\"post-120828-_ogeg60qyutx8\"><\/a><strong>DBT l\u00e0 g\u00ec?<\/strong><\/h3>\n\n\n\n<p><a href=\"https:\/\/www.getdbt.com\/\" target=\"_blank\" data-type=\"link\" data-id=\"https:\/\/www.getdbt.com\/\" rel=\"noreferrer noopener nofollow\">DBT <\/a>(vi\u1ebft t\u1eaft c\u1ee7a <strong>Data Build Tool<\/strong>) l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 d\u00f2ng l\u1ec7nh ngu\u1ed3n m\u1edf, \u0111\u00f3ng vai tr\u00f2 then ch\u1ed1t trong vi\u1ec7c chuy\u1ec3n \u0111\u1ed5i d\u1eef li\u1ec7u (ch\u1eef &#8220;T &#8211; Transform&#8221; trong m\u00f4 h\u00ecnh ELT). C\u00f4ng c\u1ee5 n\u00e0y kh\u00f4ng th\u1ef1c hi\u1ec7n vi\u1ec7c tr\u00edch xu\u1ea5t (Extract) hay t\u1ea3i (Load) d\u1eef li\u1ec7u, m\u00e0 n\u00f3 ho\u1ea1t \u0111\u1ed9ng sau khi d\u1eef li\u1ec7u th\u00f4 \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u01b0a v\u00e0o kho d\u1eef li\u1ec7u (Data Warehouse) c\u1ee7a b\u1ea1n, nh\u01b0 BigQuery, Snowflake hay Redshift.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"700\" height=\"375\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-1.png\" alt=\"T\u1ed5ng quan v\u1ec1 DBT\" class=\"wp-image-120829\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-1.png 700w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-1-300x161.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><figcaption class=\"wp-element-caption\"><strong>T\u1ed5ng quan v\u1ec1 DBT<\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n<p>V\u1ec1 c\u01a1 b\u1ea3n, DBT cho ph\u00e9p c\u00e1c nh\u00e0 ph\u00e2n t\u00edch v\u00e0 k\u1ef9 s\u01b0 d\u1eef li\u1ec7u \u00e1p d\u1ee5ng c\u00e1c ph\u01b0\u01a1ng ph\u00e1p th\u1ef1c h\u00e0nh t\u1ed1t nh\u1ea5t c\u1ee7a k\u1ef9 thu\u1eadt ph\u1ea7n m\u1ec1m nh\u01b0 ki\u1ec3m so\u00e1t phi\u00ean b\u1ea3n (version control), ki\u1ec3m th\u1eed (testing) t\u1ef1 \u0111\u1ed9ng, t\u00e0i li\u1ec7u h\u00f3a (documentation) v\u00e0 t\u00ednh m\u00f4-\u0111un (modularity) v\u00e0o quy tr\u00ecnh l\u00e0m vi\u1ec7c v\u1edbi SQL.<\/p>\n\n\n\n<p>B\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng c\u00e1c c\u00e2u l\u1ec7nh SELECT \u0111\u01a1n gi\u1ea3n k\u1ebft h\u1ee3p v\u1edbi ng\u00f4n ng\u1eef t\u1ea1o m\u1eabu Jinja, DBT gi\u00fap bi\u1ebfn d\u1eef li\u1ec7u th\u00f4, l\u1ed9n x\u1ed9n th\u00e0nh c\u00e1c m\u00f4 h\u00ecnh d\u1eef li\u1ec7u tin c\u1eady, \u0111\u00e3 \u0111\u01b0\u1ee3c l\u00e0m s\u1ea1ch v\u00e0 s\u1eb5n s\u00e0ng cho vi\u1ec7c ph\u00e2n t\u00edch.<\/p>\n\n\n\n<h3 id=\"C\u00e1c_kh\u00e1i_ni\u1ec7m_c\u01a1_b\u1ea3n_khi_l\u00e0m_vi\u1ec7c_v\u1edbi_m\u1ed9t_d\u1ef1_\u00e1n_DBT\"><a id=\"post-120828-_740fxaszt893\"><\/a><strong>C\u00e1c kh\u00e1i ni\u1ec7m c\u01a1 b\u1ea3n khi l\u00e0m vi\u1ec7c v\u1edbi m\u1ed9t d\u1ef1 \u00e1n DBT<\/strong><\/h3>\n\n\n\n<h4 id=\"Models_(M\u00f4_h\u00ecnh)\"><a id=\"post-120828-_e2xacix2id99\"><\/a>Models (M\u00f4 h\u00ecnh)<\/h4>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>M\u00f4 t\u1ea3:<\/strong> \u0110\u00e2y l\u00e0 &#8220;linh h\u1ed3n&#8221; c\u1ee7a to\u00e0n b\u1ed9 d\u1ef1 \u00e1n. M\u1ed7i model l\u00e0 m\u1ed9t t\u1ec7p tin .sql duy nh\u1ea5t n\u1eb1m trong th\u01b0 m\u1ee5c models\/.<\/li>\n\n\n\n<li><strong>Ch\u1ee9c n\u0103ng:<\/strong> N\u1ed9i dung c\u1ee7a t\u1ec7p model ch\u1ec9 \u0111\u01a1n gi\u1ea3n l\u00e0 m\u1ed9t c\u00e2u l\u1ec7nh SELECT. Ng\u01b0\u1eddi d\u00f9ng kh\u00f4ng c\u1ea7n t\u1ef1 vi\u1ebft CREATE TABLE hay VIEW; DBT s\u1ebd t\u1ef1 \u0111\u1ed9ng \u0111\u1ea3m nh\u1eadn vi\u1ec7c n\u00e0y d\u1ef1a tr\u00ean c\u00e1c c\u1ea5u h\u00ecnh.<\/li>\n\n\n\n<li><strong>M\u1ee5c \u0111\u00edch:<\/strong> B\u1ea1n s\u1eed d\u1ee5ng h\u00e0m {{ ref(&#8216;ten_model_khac&#8217;) }} \u0111\u1ec3 tham chi\u1ebfu \u0111\u1ebfn c\u00e1c model kh\u00e1c. DBT s\u1ebd t\u1ef1 \u0111\u1ed9ng ph\u00e2n t\u00edch c\u00e1c tham chi\u1ebfu n\u00e0y \u0111\u1ec3 x\u00e2y d\u1ef1ng m\u1ed9t c\u00e2y ph\u1ee5 thu\u1ed9c (DAG), \u0111\u1ea3m b\u1ea3o m\u1ecdi model \u0111\u01b0\u1ee3c th\u1ef1c thi theo \u0111\u00fang th\u1ee9 t\u1ef1.<\/li>\n<\/ul>\n\n\n\n<h4 id=\"Sources_(Ngu\u1ed3n)\"><a id=\"post-120828-_qia2977hvy0l\"><\/a>Sources (Ngu\u1ed3n)<\/h4>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>M\u00f4 t\u1ea3:<\/strong> DBT kh\u00f4ng <em>t\u1ea3i<\/em> d\u1eef li\u1ec7u, m\u00e0 ch\u1ec9 <em>bi\u1ebfn \u0111\u1ed5i<\/em> d\u1eef li\u1ec7u \u0111\u00e3 c\u00f3 s\u1eb5n. Sources l\u00e0 c\u00e1c t\u1ec7p .yml d\u00f9ng \u0111\u1ec3 <em>khai b\u00e1o<\/em> cho DBT bi\u1ebft c\u00e1c b\u1ea3ng d\u1eef li\u1ec7u th\u00f4 (v\u00ed d\u1ee5: raw_users, raw_payments) \u0111ang n\u1eb1m \u1edf \u0111\u00e2u trong kho d\u1eef li\u1ec7u.<\/li>\n\n\n\n<li><strong>Ch\u1ee9c n\u0103ng:<\/strong> Vi\u1ec7c khai b\u00e1o sources cho ph\u00e9p b\u1ea1n tham chi\u1ebfu ch\u00fang m\u1ed9t c\u00e1ch an to\u00e0n b\u1eb1ng h\u00e0m {{ source() }} v\u00e0 quan tr\u1ecdng h\u01a1n l\u00e0 c\u00f3 th\u1ec3 <em>ki\u1ec3m th\u1eed<\/em> (test) d\u1eef li\u1ec7u th\u00f4 ngay t\u1ea1i \u0111\u1ea7u v\u00e0o, tr\u01b0\u1edbc khi b\u1eaft \u0111\u1ea7u bi\u1ebfn \u0111\u1ed5i.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"700\" height=\"375\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-2.png\" alt=\"C\u00e1c kh\u00e1i ni\u1ec7m c\u01a1 b\u1ea3n khi l\u00e0m vi\u1ec7c v\u1edbi m\u1ed9t d\u1ef1 \u00e1n DBT\" class=\"wp-image-120831\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-2.png 700w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-2-300x161.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><figcaption class=\"wp-element-caption\"><strong>C\u00e1c kh\u00e1i ni\u1ec7m c\u01a1 b\u1ea3n khi l\u00e0m vi\u1ec7c v\u1edbi m\u1ed9t d\u1ef1 \u00e1n DBT<\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n<h4 id=\"Tests_(Ki\u1ec3m_th\u1eed)\"><a id=\"post-120828-_td070l1ed1ml\"><\/a>Tests (Ki\u1ec3m th\u1eed)<\/h4>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>M\u00f4 t\u1ea3:<\/strong> \u0110\u00e2y l\u00e0 c\u00e1c quy t\u1eafc \u0111\u01b0\u1ee3c \u0111\u1ecbnh ngh\u0129a \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh to\u00e0n v\u1eb9n v\u00e0 ch\u1ea5t l\u01b0\u1ee3ng c\u1ee7a d\u1eef li\u1ec7u tr\u00ean to\u00e0n b\u1ed9 h\u1ec7 th\u1ed1ng.<\/li>\n\n\n\n<li><strong>Ph\u00e2n lo\u1ea1i:<\/strong> DBT cung c\u1ea5p hai lo\u1ea1i ki\u1ec3m th\u1eed ch\u00ednh:\n<ul class=\"wp-block-list\">\n<li><strong>Generic Tests (Ph\u1ed5 bi\u1ebfn):<\/strong> \u0110\u01b0\u1ee3c khai b\u00e1o nhanh trong t\u1ec7p .yml. V\u00ed d\u1ee5: unique (\u0111\u1ea3m b\u1ea3o c\u1ed9t ID l\u00e0 duy nh\u1ea5t), not_null (kh\u00f4ng \u0111\u01b0\u1ee3c tr\u1ed1ng), accepted_values (ch\u1ec9 ch\u1ea5p nh\u1eadn c\u00e1c gi\u00e1 tr\u1ecb nh\u1ea5t \u0111\u1ecbnh).<\/li>\n\n\n\n<li><strong>Singular Tests (T\u00f9y ch\u1ec9nh):<\/strong> L\u00e0 c\u00e1c t\u1ec7p .sql ri\u00eang bi\u1ec7t trong th\u01b0 m\u1ee5c tests\/. M\u1ed7i t\u1ec7p vi\u1ebft m\u1ed9t c\u00e2u SELECT \u0111\u1ec3 t\u00ecm c\u00e1c h\u00e0ng &#8220;l\u1ed7i&#8221;. N\u1ebfu truy v\u1ea5n tr\u1ea3 v\u1ec1 0 h\u00e0ng, ki\u1ec3m th\u1eed th\u00e0nh c\u00f4ng.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h4 id=\"Seeds_(D\u1eef_li\u1ec7u_h\u1ea1t_gi\u1ed1ng)\"><a id=\"post-120828-_p2jvsi6pneou\"><\/a>Seeds (D\u1eef li\u1ec7u h\u1ea1t gi\u1ed1ng)<\/h4>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>M\u00f4 t\u1ea3:<\/strong> L\u00e0 c\u00e1c t\u1ec7p tin .csv \u0111\u01b0\u1ee3c \u0111\u1eb7t trong th\u01b0 m\u1ee5c seeds\/ (ho\u1eb7c data\/).<\/li>\n\n\n\n<li><strong>Ch\u1ee9c n\u0103ng:<\/strong> D\u00f9ng \u0111\u1ec3 t\u1ea3i c\u00e1c b\u1ea3ng d\u1eef li\u1ec7u nh\u1ecf, t\u0129nh, \u00edt khi thay \u0111\u1ed5i (v\u00ed d\u1ee5: danh s\u00e1ch m\u00e3 qu\u1ed1c gia, \u00e1nh x\u1ea1 tr\u1ea1ng th\u00e1i \u0111\u01a1n h\u00e0ng) l\u00ean kho d\u1eef li\u1ec7u. Khi ng\u01b0\u1eddi d\u00f9ng ch\u1ea1y l\u1ec7nh dbt seed, DBT s\u1ebd \u0111\u1ecdc c\u00e1c t\u1ec7p CSV n\u00e0y v\u00e0 t\u1ea1o th\u00e0nh b\u1ea3ng.<\/li>\n<\/ul>\n\n\n\n<h4 id=\"Macros\"><a id=\"post-120828-_8yjuoru8rb5o\"><\/a>Macros<\/h4>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>M\u00f4 t\u1ea3:<\/strong> Macros l\u00e0 c\u00e1c t\u1ec7p .sql trong th\u01b0 m\u1ee5c macros\/ ch\u1ee9a code Jinja (ng\u00f4n ng\u1eef t\u1ea1o m\u1eabu).<\/li>\n\n\n\n<li><strong>Ch\u1ee9c n\u0103ng:<\/strong> Gi\u00fap ng\u01b0\u1eddi d\u00f9ng tu\u00e2n th\u1ee7 nguy\u00ean t\u1eafc DRY (Don&#8217;t Repeat Yourself &#8211; Kh\u00f4ng l\u1eb7p l\u1ea1i). N\u1ebfu m\u1ed9t logic nghi\u1ec7p v\u1ee5 ph\u1ee9c t\u1ea1p (v\u00ed d\u1ee5: chuy\u1ec3n \u0111\u1ed5i ti\u1ec1n t\u1ec7) c\u1ea7n d\u00f9ng \u1edf nhi\u1ec1u n\u01a1i, b\u1ea1n ch\u1ec9 c\u1ea7n vi\u1ebft logic \u0111\u00f3 m\u1ed9t l\u1ea7n trong macro v\u00e0 g\u1ecdi l\u1ea1i nh\u01b0 m\u1ed9t h\u00e0m (function).<\/li>\n<\/ul>\n\n\n\n<h4 id=\"Snapshots_(\u1ea2nh_ch\u1ee5p_nhanh)\"><a id=\"post-120828-_5i18wxe07h8p\"><\/a>Snapshots (\u1ea2nh ch\u1ee5p nhanh)<\/h4>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>M\u00f4 t\u1ea3:<\/strong> Snapshots l\u00e0 c\u00e1c t\u1ec7p .sql \u0111\u1eb7c bi\u1ec7t, th\u01b0\u1eddng \u0111\u01b0\u1ee3c \u0111\u1eb7t trong th\u01b0 m\u1ee5c snapshots\/.<\/li>\n\n\n\n<li><strong>Ch\u1ee9c n\u0103ng:<\/strong> Chuy\u00ean d\u00f9ng \u0111\u1ec3 theo d\u00f5i s\u1ef1 thay \u0111\u1ed5i c\u1ee7a d\u1eef li\u1ec7u theo th\u1eddi gian (c\u00f2n g\u1ecdi l\u00e0 Slowly Changing Dimensions &#8211; SCD Type 2). V\u00ed d\u1ee5, \u0111\u1ec3 l\u01b0u l\u1ea1i to\u00e0n b\u1ed9 l\u1ecbch s\u1eed m\u1ed7i khi m\u1ed9t kh\u00e1ch h\u00e0ng thay \u0111\u1ed5i \u0111\u1ecba ch\u1ec9, snapshot s\u1ebd t\u1ef1 \u0111\u1ed9ng x\u1eed l\u00fd vi\u1ec7c n\u00e0y.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"Kh\u00e1m_ph\u00e1_c\u00e1c_t\u00ednh_n\u0103ng_c\u1ed1t_l\u00f5i_l\u00e0m_n\u00ean_s\u1ee9c_m\u1ea1nh_c\u1ee7a_DBT\"><a id=\"post-120828-_dqaw07xwfa91\"><\/a>Kh\u00e1m ph\u00e1 c\u00e1c t\u00ednh n\u0103ng c\u1ed1t l\u00f5i l\u00e0m n\u00ean s\u1ee9c m\u1ea1nh c\u1ee7a DBT<\/h2>\n\n\n\n<h3 id=\"Bi\u1ebfn_SQL_t\u0129nh_th\u00e0nh_&#8220;code_\u0111\u1ed9ng&#8221;_v\u1edbi_Jinja_\"><a id=\"post-120828-_fikj1gejjlla\"><\/a><strong>Bi\u1ebfn SQL t\u0129nh th\u00e0nh &#8220;code \u0111\u1ed9ng&#8221; v\u1edbi Jinja <\/strong><\/h3>\n\n\n\n<p>SQL truy\u1ec1n th\u1ed1ng r\u1ea5t m\u1ea1nh nh\u01b0ng c\u1ee9ng nh\u1eafc. B\u1ea1n th\u01b0\u1eddng ph\u1ea3i copy-paste code \u0111\u1ec3 x\u1eed l\u00fd logic t\u01b0\u01a1ng t\u1ef1 cho c\u00e1c n\u0103m ho\u1eb7c khu v\u1ef1c kh\u00e1c nhau.<\/p>\n\n\n\n<p>DBT gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 n\u00e0y b\u1eb1ng c\u00e1ch nh\u00fang <strong>Jinja (ng\u00f4n ng\u1eef t\u1ea1o m\u1eabu)<\/strong> v\u00e0o SQL. C\u00f4ng c\u1ee5 cho ph\u00e9p s\u1eed d\u1ee5ng c\u00e1c c\u1ea5u tr\u00fac l\u1eadp tr\u00ecnh nh\u01b0 v\u00f2ng l\u1eb7p (for loops), c\u00e2u l\u1ec7nh \u0111i\u1ec1u ki\u1ec7n (if\/else) v\u00e0 bi\u1ebfn m\u00f4i tr\u01b0\u1eddng ngay trong SQL. B\u1ea1n c\u00f3 th\u1ec3 vi\u1ebft m\u1ed9t \u0111o\u1ea1n logic duy nh\u1ea5t (DRY &#8211; Don&#8217;t Repeat Yourself) v\u00e0 \u00e1p d\u1ee5ng n\u00f3 cho h\u00e0ng tr\u0103m b\u1ea3ng d\u1eef li\u1ec7u kh\u00e1c nhau m\u1ed9t c\u00e1ch t\u1ef1 \u0111\u1ed9ng.<\/p>\n\n\n\n<h3 id=\"Chi\u1ebfn_l\u01b0\u1ee3c_t\u0103ng_tr\u01b0\u1edfng_\"><a id=\"post-120828-_3dki4ggrwdwa\"><\/a><strong>Chi\u1ebfn l\u01b0\u1ee3c t\u0103ng tr\u01b0\u1edfng <\/strong><\/h3>\n\n\n\n<p>X\u1eed l\u00fd l\u1ea1i to\u00e0n b\u1ed9 d\u1eef li\u1ec7u l\u1ecbch s\u1eed m\u1ed7i ng\u00e0y l\u00e0 m\u1ed9t s\u1ef1 l\u00e3ng ph\u00ed t\u00e0i nguy\u00ean v\u00e0 ti\u1ec1n b\u1ea1c kh\u1ee7ng khi\u1ebfp tr\u00ean Cloud Data Warehouse (BigQuery\/Snowflake). DBT cung c\u1ea5p t\u00ednh n\u0103ng incremental models. T\u00ednh n\u0103ng n\u00e0y th\u00f4ng minh \u0111\u1ebfn m\u1ee9c ch\u1ec9 x\u1eed l\u00fd v\u00e0 n\u1ea1p nh\u1eefng d\u1eef li\u1ec7u <strong>m\u1edbi ph\u00e1t sinh<\/strong> ho\u1eb7c <strong>m\u1edbi thay \u0111\u1ed5i<\/strong> k\u1ec3 t\u1eeb l\u1ea7n ch\u1ea1y g\u1ea7n nh\u1ea5t.<\/p>\n\n\n\n<p>Nh\u1edd \u0111\u00f3, th\u1eddi gian ch\u1ea1y pipeline s\u1ebd \u0111\u01b0\u1ee3c gi\u1ea3m \u0111\u00e1ng k\u1ec3 (t\u1eeb h\u00e0ng gi\u1edd xu\u1ed1ng v\u00e0i ph\u00fat) v\u00e0 ti\u1ebft ki\u1ec7m chi ph\u00ed t\u00ednh to\u00e1n (compute cost) cho doanh nghi\u1ec7p.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"700\" height=\"375\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-3.png\" alt=\"Kh\u00e1m ph\u00e1 c\u00e1c t\u00ednh n\u0103ng c\u1ed1t l\u00f5i l\u00e0m n\u00ean s\u1ee9c m\u1ea1nh c\u1ee7a DBT\" class=\"wp-image-120832\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-3.png 700w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-3-300x161.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><figcaption class=\"wp-element-caption\"><strong>Kh\u00e1m ph\u00e1 c\u00e1c t\u00ednh n\u0103ng c\u1ed1t l\u00f5i l\u00e0m n\u00ean s\u1ee9c m\u1ea1nh c\u1ee7a DBT<\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n<h3 id=\"T\u1ef1_\u0111\u1ed9ng_d\u1ef1ng_bi\u1ec3u_\u0111\u1ed3_ph\u1ee5_thu\u1ed9c_(Automated_Dependency_Graph)_\"><a id=\"post-120828-_x6w09csw9rfb\"><\/a><strong>T\u1ef1 \u0111\u1ed9ng d\u1ef1ng bi\u1ec3u \u0111\u1ed3 ph\u1ee5 thu\u1ed9c (Automated Dependency Graph) <\/strong><\/h3>\n\n\n\n<p>Trong c\u00e1c h\u1ec7 th\u1ed1ng c\u0169, vi\u1ec7c x\u00e1c \u0111\u1ecbnh th\u1ee9 t\u1ef1 ch\u1ea1y c\u00e1c b\u1ea3ng (b\u1ea3ng A ph\u1ea3i c\u00f3 tr\u01b0\u1edbc b\u1ea3ng B) th\u01b0\u1eddng ph\u1ea3i c\u1ea5u h\u00ecnh th\u1ee7 c\u00f4ng r\u1ea5t d\u1ec5 sai s\u00f3t. Th\u00f4ng qua h\u00e0m ref(), DBT t\u1ef1 \u0111\u1ed9ng v\u1ebd ra m\u1ed9t b\u1ea3n \u0111\u1ed3 to\u00e0n di\u1ec7n (DAG &#8211; Directed Acyclic Graph) k\u1ebft n\u1ed1i t\u1ea5t c\u1ea3 c\u00e1c model.<\/p>\n\n\n\n<p>DBT bi\u1ebft ch\u00ednh x\u00e1c th\u1ee9 t\u1ef1 c\u1ea7n th\u1ef1c thi. B\u1ea1n c\u00f3 th\u1ec3 ch\u1ea1y song song (multithreading) c\u00e1c lu\u1ed3ng kh\u00f4ng li\u00ean quan \u0111\u1ebfn nhau \u0111\u1ec3 t\u1ed1i \u0111a h\u00f3a t\u1ed1c \u0111\u1ed9, v\u00e0 n\u1ebfu m\u1ed9t model b\u1ecb l\u1ed7i, DBT s\u1ebd t\u1ef1 \u0111\u1ed9ng b\u1ecf qua c\u00e1c model con ph\u1ee5 thu\u1ed9c v\u00e0o n\u00f3 \u0111\u1ec3 tr\u00e1nh sai s\u1ed1 d\u00e2y chuy\u1ec1n.<\/p>\n\n\n\n<h3 id=\"H\u1ec7_sinh_th\u00e1i_packages_(Th\u01b0_vi\u1ec7n_m\u00e3_ngu\u1ed3n_m\u1edf)_\"><a id=\"post-120828-_1e0elmeaacq6\"><\/a><strong>H\u1ec7 sinh th\u00e1i packages (Th\u01b0 vi\u1ec7n m\u00e3 ngu\u1ed3n m\u1edf) <\/strong><\/h3>\n\n\n\n<p>C\u1ed9ng \u0111\u1ed3ng DBT c\u1ef1c k\u1ef3 l\u1edbn v\u00e0 h\u1ecd \u0111\u00f3ng g\u00f3i c\u00e1c gi\u1ea3i ph\u00e1p ph\u1ed5 bi\u1ebfn th\u00e0nh c\u00e1c packages. \u0110i\u1ec1u n\u00e0y gi\u00fap b\u1ea1n:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>C\u00e0i \u0111\u1eb7t c\u00e1c g\u00f3i nh\u01b0 dbt-utils, dbt-expectations hay c\u00e1c g\u00f3i d\u00e0nh ri\u00eang cho Google Ads, Facebook Ads, Stripe&#8230; ch\u1ec9 v\u1edbi m\u1ed9t d\u00f2ng khai b\u00e1o.<\/li>\n\n\n\n<li>C\u00f3 ngay c\u00e1c h\u00e0m SQL ph\u1ee9c t\u1ea1p (nh\u01b0 t\u00ednh to\u00e1n ng\u00e0y l\u00e0m vi\u1ec7c, pivot b\u1ea3ng, ki\u1ec3m tra \u0111\u1ecbnh d\u1ea1ng email) m\u00e0 kh\u00f4ng c\u1ea7n vi\u1ebft m\u1ed9t d\u00f2ng code n\u00e0o.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"700\" height=\"375\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-4.png\" alt=\"H\u1ec7 sinh th\u00e1i packages (Th\u01b0 vi\u1ec7n m\u00e3 ngu\u1ed3n m\u1edf) \" class=\"wp-image-120833\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-4.png 700w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-4-300x161.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><figcaption class=\"wp-element-caption\"><strong>H\u1ec7 sinh th\u00e1i packages (Th\u01b0 vi\u1ec7n m\u00e3 ngu\u1ed3n m\u1edf) <\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n<h3 id=\"T\u00e0i_li\u1ec7u_s\u1ed1ng_(Living_Documentation)\"><a id=\"post-120828-_bcl2oygeyn82\"><\/a><strong>T\u00e0i li\u1ec7u s\u1ed1ng (Living Documentation)<\/strong><\/h3>\n\n\n\n<p>T\u00e0i li\u1ec7u d\u1eef li\u1ec7u (Data Dictionary) th\u01b0\u1eddng b\u1ecb &#8220;ch\u1ebft&#8221; ngay sau khi vi\u1ebft v\u00ec kh\u00f4ng ai c\u1eadp nh\u1eadt n\u00f3.<\/p>\n\n\n\n<p>DBT \u0111\u1ea3o ng\u01b0\u1ee3c quy tr\u00ecnh n\u00e0y. T\u00e0i li\u1ec7u \u0111\u01b0\u1ee3c sinh ra <em>t\u1eeb code<\/em>. Khi code thay \u0111\u1ed5i, t\u00e0i li\u1ec7u thay \u0111\u1ed5i theo. Trang web n\u1ed9i b\u1ed9 cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng tra c\u1ee9u (searchable), xem ngu\u1ed3n g\u1ed1c d\u1eef li\u1ec7u (lineage) v\u00e0 \u00fd ngh\u0129a t\u1eebng c\u1ed9t. \u0110i\u1ec1u n\u00e0y \u0111\u1ea3m b\u1ea3o Data Analyst v\u00e0 Business User lu\u00f4n nh\u00ecn th\u1ea5y c\u00f9ng m\u1ed9t &#8220;s\u1ef1 th\u1eadt&#8221;, gi\u1ea3m thi\u1ec3u vi\u1ec7c h\u1ecfi \u0111i h\u1ecfi l\u1ea1i v\u1ec1 \u00fd ngh\u0129a c\u1ee7a d\u1eef li\u1ec7u.<\/p>\n\n\n\n<h3 id=\"M\u00f4i_tr\u01b0\u1eddng_ph\u00e2n_t\u00e1ch_(Environment_Separation)_\"><a id=\"post-120828-_a1jh683digdz\"><\/a><strong>M\u00f4i tr\u01b0\u1eddng ph\u00e2n t\u00e1ch (Environment Separation) <\/strong><\/h3>\n\n\n\n<p>DBT qu\u1ea3n l\u00fd c\u00e1c profiles \u0111\u1ec3 t\u00e1ch bi\u1ec7t ho\u00e0n to\u00e0n m\u00f4i tr\u01b0\u1eddng <strong>Development<\/strong> (ph\u00e1t tri\u1ec3n) v\u00e0 <strong>Production<\/strong> (s\u1ea3n xu\u1ea5t). Khi b\u1ea1n ch\u1ea1y th\u1eed tr\u00ean m\u00e1y c\u00e1 nh\u00e2n, DBT s\u1ebd t\u1ea1o b\u1ea3ng trong schema ri\u00eang c\u1ee7a b\u1ea1n (v\u00ed d\u1ee5: dbt_tung_dev). Ch\u1ec9 khi code \u0111\u01b0\u1ee3c merge v\u00e0 deploy, n\u00f3 m\u1edbi ch\u1ea1y v\u00e0o schema ch\u00ednh (analytics_prod).<\/p>\n\n\n\n<h2 id=\"C\u00e1c_phi\u00ean_b\u1ea3n_c\u1ee7a_DBT:_Core_vs._Cloud\"><a id=\"post-120828-_azawx9w4sutq\"><\/a>C\u00e1c phi\u00ean b\u1ea3n c\u1ee7a DBT: Core vs. Cloud<\/h2>\n\n\n\n<p>DBT \u0111\u01b0\u1ee3c ph\u00e2n ph\u1ed1i d\u01b0\u1edbi hai h\u00ecnh th\u1ee9c ch\u00ednh, ph\u1ee5c v\u1ee5 cho c\u00e1c nhu c\u1ea7u kh\u00e1c nhau:<\/p>\n\n\n\n<p><strong>DBT Core (M\u00e3 ngu\u1ed3n m\u1edf &#8211; Mi\u1ec5n ph\u00ed)<\/strong><\/p>\n\n\n\n<p>\u0110\u00e2y l\u00e0 phi\u00ean b\u1ea3n d\u00f2ng l\u1ec7nh (CLI) m\u00e0 b\u1ea1n c\u00e0i \u0111\u1eb7t tr\u00ean m\u00e1y t\u00ednh c\u00e1 nh\u00e2n ho\u1eb7c m\u00e1y ch\u1ee7 ri\u00eang.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Chi ph\u00ed:<\/strong> Ho\u00e0n to\u00e0n mi\u1ec5n ph\u00ed m\u00e3i m\u00e3i.<\/li>\n\n\n\n<li><strong>Ph\u00f9 h\u1ee3p v\u1edbi:<\/strong> C\u00e1 nh\u00e2n, \u0111\u1ed9i nh\u00f3m nh\u1ecf c\u00f3 k\u1ef9 n\u0103ng k\u1ef9 thu\u1eadt t\u1ed1t (bi\u1ebft t\u1ef1 d\u1ef1ng server, t\u1ef1 c\u1ea5u h\u00ecnh Airflow \u0111\u1ec3 l\u00ean l\u1ecbch ch\u1ea1y), ho\u1eb7c c\u00e1c d\u1ef1 \u00e1n mu\u1ed1n ti\u1ebft ki\u1ec7m chi ph\u00ed t\u1ed1i \u0111a.<\/li>\n\n\n\n<li><strong>\u0110\u1eb7c \u0111i\u1ec3m:<\/strong> B\u1ea1n ph\u1ea3i t\u1ef1 lo li\u1ec7u m\u1ecdi th\u1ee9 v\u1ec1 h\u1ea1 t\u1ea7ng, b\u1ea3o m\u1eadt v\u00e0 giao di\u1ec7n ng\u01b0\u1eddi d\u00f9ng.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"700\" height=\"375\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-5.png\" alt=\"C\u00e1c phi\u00ean b\u1ea3n c\u1ee7a DBT: Core vs. Cloud\" class=\"wp-image-120834\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-5.png 700w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-5-300x161.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><figcaption class=\"wp-element-caption\"><strong>C\u00e1c phi\u00ean b\u1ea3n c\u1ee7a DBT: Core vs. Cloud<\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n<p><strong>DBT Cloud (D\u1ecbch v\u1ee5 SaaS &#8211; Tr\u1ea3 ph\u00ed)<\/strong><\/p>\n\n\n\n<p>\u0110\u00e2y l\u00e0 n\u1ec1n t\u1ea3ng web \u0111\u01b0\u1ee3c qu\u1ea3n l\u00fd b\u1edfi dbt Labs. B\u1ea1n ch\u1ec9 c\u1ea7n \u0111\u0103ng nh\u1eadp v\u00e0 s\u1eed d\u1ee5ng.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Chi ph\u00ed:<\/strong> C\u00f3 g\u00f3i mi\u1ec5n ph\u00ed (cho 1 developer) v\u00e0 g\u00f3i tr\u1ea3 ph\u00ed theo ng\u01b0\u1eddi d\u00f9ng (Team\/Enterprise).<\/li>\n\n\n\n<li><strong>Ph\u00f9 h\u1ee3p v\u1edbi:<\/strong> Doanh nghi\u1ec7p, c\u00e1c team l\u1edbn c\u1ea7n c\u1ed9ng t\u00e1c, c\u1ea7n t\u00ednh \u1ed5n \u0111\u1ecbnh v\u00e0 kh\u00f4ng mu\u1ed1n t\u1ed1n nh\u00e2n s\u1ef1 \u0111\u1ec3 b\u1ea3o tr\u00ec h\u1ea1 t\u1ea7ng.<\/li>\n\n\n\n<li><strong>\u0110\u1eb7c \u0111i\u1ec3m:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>IDE tr\u00ean tr\u00ecnh duy\u1ec7t:<\/strong> Vi\u1ebft code, ch\u1ea1y th\u1eed v\u00e0 xem k\u1ebft qu\u1ea3 ngay tr\u00ean web.<\/li>\n\n\n\n<li><strong>Job Scheduler:<\/strong> L\u00ean l\u1ecbch ch\u1ea1y t\u1ef1 \u0111\u1ed9ng d\u1ec5 d\u00e0ng (kh\u00f4ng c\u1ea7n Airflow).<\/li>\n\n\n\n<li><strong>CI\/CD t\u00edch h\u1ee3p:<\/strong> T\u1ef1 \u0111\u1ed9ng ch\u1ea1y test khi c\u00f3 code m\u1edbi \u0111\u01b0\u1ee3c \u0111\u1ea9y l\u00ean.<\/li>\n\n\n\n<li><strong>DBT Semantic Layer:<\/strong> T\u00ednh n\u0103ng cao c\u1ea5p gi\u00fap \u0111\u1ed3ng b\u1ed9 h\u00f3a c\u00e1c ch\u1ec9 s\u1ed1 (metrics) ra c\u00e1c c\u00f4ng c\u1ee5 BI.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 id=\"T\u1ea1i_sao_DBT_l\u1ea1i_tr\u1edf_th\u00e0nh_&#8220;ng\u00f4i_sao&#8221;_trong_ng\u00e0nh_d\u1eef_li\u1ec7u?\"><a id=\"post-120828-_u3r4thywrk92\"><\/a>T\u1ea1i sao DBT l\u1ea1i tr\u1edf th\u00e0nh &#8220;ng\u00f4i sao&#8221; trong ng\u00e0nh d\u1eef li\u1ec7u?<\/h2>\n\n\n\n<p>DBT kh\u00f4ng ch\u1ec9 \u0111\u01a1n thu\u1ea7n l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5; n\u00f3 l\u00e0 m\u1ed9t tri\u1ebft l\u00fd. S\u1ef1 tr\u1ed7i d\u1eady c\u1ee7a n\u00f3 \u0111\u1ebfn t\u1eeb vi\u1ec7c gi\u1ea3i quy\u1ebft m\u1ed9t c\u00e1ch thanh l\u1ecbch m\u1ed9t trong nh\u1eefng v\u1ea5n \u0111\u1ec1 l\u1ed9n x\u1ed9n v\u00e0 b\u1ecb xem nh\u1eb9 nh\u1ea5t trong ng\u00e0nh d\u1eef li\u1ec7u: <strong>s\u1ef1 h\u1ed7n lo\u1ea1n c\u1ee7a logic nghi\u1ec7p v\u1ee5<\/strong>.<\/p>\n\n\n\n<h3 id=\"Mang_t\u01b0_duy_K\u1ef9_thu\u1eadt_Ph\u1ea7n_m\u1ec1m_(Software_Engineering)_v\u00e0o_SQL\"><a id=\"post-120828-_i62mr7xsl4rd\"><\/a><strong>Mang t\u01b0 duy K\u1ef9 thu\u1eadt Ph\u1ea7n m\u1ec1m (Software Engineering) v\u00e0o SQL<\/strong><\/h3>\n\n\n\n<p>Tr\u01b0\u1edbc DBT, c\u00e1c pipeline chuy\u1ec3n \u0111\u1ed5i d\u1eef li\u1ec7u th\u01b0\u1eddng t\u1ed3n t\u1ea1i d\u01b0\u1edbi d\u1ea1ng m\u1ed9t \u201cm\u1edb h\u1ed7n \u0111\u1ed9n\u201d g\u1ed3m c\u00e1c file .sql r\u1eddi r\u1ea1c, \u0111\u01b0\u1ee3c cron job ch\u1ea1y theo l\u1ecbch c\u1ed1 \u0111\u1ecbnh &#8211; kh\u00f4ng ai d\u00e1m ch\u1ec9nh s\u1eeda v\u00ec s\u1ee3 ph\u00e1 v\u1ee1 to\u00e0n b\u1ed9 h\u1ec7 th\u1ed1ng.<\/p>\n\n\n\n<p>DBT \u0111\u00e3 thay \u0111\u1ed5i t\u1ea5t c\u1ea3 khi mang c\u00e1c nguy\u00ean t\u1eafc c\u1ee7a k\u1ef9 thu\u1eadt ph\u1ea7n m\u1ec1m v\u00e0o th\u1ebf gi\u1edbi SQL:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Version Control (Ki\u1ec3m so\u00e1t phi\u00ean b\u1ea3n):<\/strong> M\u1ecdi logic chuy\u1ec3n \u0111\u1ed5i \u0111\u1ec1u l\u00e0 code (SQL) v\u00e0 \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef tr\u00ean Git. M\u1ecdi thay \u0111\u1ed5i \u0111\u1ec1u ph\u1ea3i qua pull request, \u0111\u01b0\u1ee3c review v\u00e0 ghi l\u1ea1i l\u1ecbch s\u1eed.<\/li>\n\n\n\n<li><strong>Testing (Ki\u1ec3m th\u1eed):<\/strong> L\u1ea7n \u0111\u1ea7u ti\u00ean, c\u00e1c nh\u00e0 ph\u00e2n t\u00edch c\u00f3 th\u1ec3 vi\u1ebft c\u00e1c b\u00e0i ki\u1ec3m tra (test) m\u1ed9t c\u00e1ch c\u00f3 h\u1ec7 th\u1ed1ng cho d\u1eef li\u1ec7u c\u1ee7a h\u1ecd\u2014v\u00ed d\u1ee5: \u0111\u1ea3m b\u1ea3o m\u1ed9t c\u1ed9t ID kh\u00f4ng bao gi\u1edd null, ho\u1eb7c t\u1ed5ng doanh thu ph\u1ea3i lu\u00f4n d\u01b0\u01a1ng.<\/li>\n\n\n\n<li><strong>CI\/CD (T\u00edch h\u1ee3p\/Tri\u1ec3n khai li\u00ean t\u1ee5c):<\/strong> B\u1ea1n c\u00f3 th\u1ec3 t\u1ef1 \u0111\u1ed9ng ch\u1ea1y th\u1eed nghi\u1ec7m tr\u00ean m\u1ed9t m\u00f4i tr\u01b0\u1eddng staging tr\u01b0\u1edbc khi tri\u1ec3n khai logic m\u1edbi l\u00ean production.<\/li>\n\n\n\n<li><strong>Modularity (T\u00ednh m\u00f4-\u0111un):<\/strong> Vi\u1ebft code m\u1ed9t l\u1ea7n v\u00e0 t\u00e1i s\u1eed d\u1ee5ng n\u00f3 \u1edf nhi\u1ec1u n\u01a1i b\u1eb1ng c\u00e1c macro, thay v\u00ec copy-paste c\u00e1c \u0111o\u1ea1n SQL ph\u1ee9c t\u1ea1p.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"700\" height=\"375\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-6.png\" alt=\"T\u1ea1i sao DBT l\u1ea1i tr\u1edf th\u00e0nh &quot;ng\u00f4i sao&quot; trong ng\u00e0nh d\u1eef li\u1ec7u?\" class=\"wp-image-120835\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-6.png 700w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-6-300x161.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><figcaption class=\"wp-element-caption\"><strong>T\u1ea1i sao DBT l\u1ea1i tr\u1edf th\u00e0nh &#8220;ng\u00f4i sao&#8221; trong ng\u00e0nh d\u1eef li\u1ec7u?<\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n<h3 id=\"Trao_quy\u1ec1n_cho_Data_Analyst_v\u00e0_t\u1ea1o_ra_vai_tr\u00f2_&#8220;Analytics_Engineer&#8221;\"><a id=\"post-120828-_nx6bya4ok7b8\"><\/a><strong>Trao quy\u1ec1n cho Data Analyst v\u00e0 t\u1ea1o ra vai tr\u00f2 &#8220;Analytics Engineer&#8221;<\/strong><\/h3>\n\n\n\n<p>Tr\u01b0\u1edbc \u0111\u00e2y, c\u00f3 m\u1ed9t &#8220;b\u1ee9c t\u01b0\u1eddng&#8221; l\u1edbn gi\u1eefa Data Engineer (vi\u1ebft <a href=\"https:\/\/tino.vn\/blog\/python-la-gi\/\" target=\"_blank\" data-type=\"post\" data-id=\"16155\" rel=\"noreferrer noopener\">Python<\/a>\/<a href=\"https:\/\/tino.vn\/blog\/scala-la-gi\/\" target=\"_blank\" data-type=\"post\" data-id=\"28371\" rel=\"noreferrer noopener\">Scala<\/a>, x\u00e2y d\u1ef1ng pipeline) v\u00e0 Data Analyst (vi\u1ebft SQL, t\u1ea1o b\u00e1o c\u00e1o). Khi Analyst c\u1ea7n m\u1ed9t c\u1ed9t d\u1eef li\u1ec7u m\u1edbi \u0111\u00e3 \u0111\u01b0\u1ee3c l\u00e0m s\u1ea1ch, h\u1ecd ph\u1ea3i t\u1ea1o &#8220;ticket&#8221; v\u00e0 ch\u1edd Engineer x\u1eed l\u00fd.<\/p>\n\n\n\n<p>DBT \u0111\u00e3 ph\u00e1 v\u1ee1 b\u1ee9c t\u01b0\u1eddng \u0111\u00f3. C\u00f4ng c\u1ee5 cho ph\u00e9p Data Analyst &#8211; nh\u1eefng ng\u01b0\u1eddi hi\u1ec3u r\u00f5 nh\u1ea5t v\u1ec1 logic nghi\u1ec7p v\u1ee5 &#8211; t\u1ef1 m\u00ecnh x\u00e2y d\u1ef1ng c\u00e1c pipeline d\u1eef li\u1ec7u v\u1eefng ch\u1eafc, \u0111\u00e1ng tin c\u1eady ch\u1ec9 b\u1eb1ng ng\u00f4n ng\u1eef m\u00e0 h\u1ecd th\u00e0nh th\u1ea1o nh\u1ea5t: <strong>SQL<\/strong>.<\/p>\n\n\n\n<p>\u0110i\u1ec1u n\u00e0y \u0111\u00e3 khai sinh ra m\u1ed9t vai tr\u00f2 lai (hybrid) v\u00f4 c\u00f9ng gi\u00e1 tr\u1ecb: <strong>Analytics Engineer<\/strong>. H\u1ecd l\u00e0 nh\u1eefng ng\u01b0\u1eddi ng\u1ed3i gi\u1eefa, c\u00f3 k\u1ef9 n\u0103ng SQL c\u1ee7a Analyst nh\u01b0ng l\u1ea1i l\u00e0m vi\u1ec7c v\u1edbi t\u01b0 duy v\u00e0 b\u1ed9 c\u00f4ng c\u1ee5 c\u1ee7a m\u1ed9t Engineer.<\/p>\n\n\n\n<h3 id=\"Gi\u1ea3i_quy\u1ebft_&#8220;n\u00fat_th\u1eaft_c\u1ed5_chai&#8221;_c\u1ee7a_vi\u1ec7c_chuy\u1ec3n_\u0111\u1ed5i\"><a id=\"post-120828-_r8deom20kl93\"><\/a><strong>Gi\u1ea3i quy\u1ebft &#8220;n\u00fat th\u1eaft c\u1ed5 chai&#8221; c\u1ee7a vi\u1ec7c chuy\u1ec3n \u0111\u1ed5i<\/strong><\/h3>\n\n\n\n<p>Trong m\u00f4 h\u00ecnh ELT hi\u1ec7n \u0111\u1ea1i, vi\u1ec7c t\u1ea3i d\u1eef li\u1ec7u th\u00f4 v\u00e0o kho d\u1eef li\u1ec7u g\u1ea7n nh\u01b0 kh\u00f4ng c\u00f2n l\u00e0 v\u1ea5n \u0111\u1ec1. Tuy nhi\u00ean, chuy\u1ec3n \u0111\u1ed5i d\u1eef li\u1ec7u th\u00e0nh c\u00e1c b\u1ea3ng &#8220;s\u1eb5n s\u00e0ng cho ph\u00e2n t\u00edch&#8221; m\u1edbi l\u00e0 \u0111i\u1ec3m ngh\u1ebdn l\u1edbn nh\u1ea5t. DBT t\u1eadp trung 100% v\u00e0o vi\u1ec7c th\u00e1o g\u1ee1 n\u00fat th\u1eaft n\u00e0y b\u1eb1ng m\u1ed9t quy tr\u00ecnh chuy\u1ec3n \u0111\u1ed5i c\u00f3 qu\u1ea3n l\u00fd, c\u00f3 ki\u1ec3m th\u1eed, c\u00f3 phi\u00ean b\u1ea3n v\u00e0 c\u00f3 t\u1ef1 \u0111\u1ed9ng h\u00f3a. Nh\u1edd \u0111\u00f3, d\u1eef li\u1ec7u \u0111i t\u1eeb \u201cth\u00f4\u201d sang \u201cchu\u1ea9n\u201d nhanh h\u01a1n, s\u1ea1ch h\u01a1n v\u00e0 \u1ed5n \u0111\u1ecbnh h\u01a1n &#8211; m\u1edf \u0111\u01b0\u1eddng cho ph\u00e2n t\u00edch v\u00e0 ra quy\u1ebft \u0111\u1ecbnh hi\u1ec7u qu\u1ea3.<\/p>\n\n\n\n<h2 id=\"M\u1ed9t_v\u00e0i_h\u1ea1n_ch\u1ebf_c\u1ee7a_DBT_m\u00e0_b\u1ea1n_c\u1ea7n_bi\u1ebft\"><a id=\"post-120828-_brv2pea4ai3d\"><\/a>M\u1ed9t v\u00e0i h\u1ea1n ch\u1ebf c\u1ee7a DBT m\u00e0 b\u1ea1n c\u1ea7n bi\u1ebft<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ph\u1ee5 thu\u1ed9c ho\u00e0n to\u00e0n v\u00e0o SQL:<\/strong> DBT \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng xoay quanh SQL. N\u1ebfu nh\u00f3m d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n thi\u00ean v\u1ec1 s\u1eed d\u1ee5ng Python, R ho\u1eb7c <a href=\"https:\/\/tino.vn\/blog\/ngon-ngu-java-la-gi\/\" data-type=\"link\" data-id=\"https:\/\/tino.vn\/blog\/ngon-ngu-java-la-gi\/\" target=\"_blank\" rel=\"noreferrer noopener\">Java <\/a>\u0111\u1ec3 x\u1eed l\u00fd d\u1eef li\u1ec7u, DBT c\u00f3 th\u1ec3 kh\u00f4ng ph\u1ea3i l\u00e0 l\u1ef1a ch\u1ecdn t\u1ed1i \u01b0u (d\u00f9 hi\u1ec7n t\u1ea1i DBT \u0111\u00e3 b\u1eaft \u0111\u1ea7u h\u1ed7 tr\u1ee3 Python models, nh\u01b0ng SQL v\u1eabn l\u00e0 c\u1ed1t l\u00f5i).<\/li>\n\n\n\n<li><strong>&#8220;\u0110\u1ea9y&#8221; chi ph\u00ed sang Kho d\u1eef li\u1ec7u (Compute Cost):<\/strong> V\u00ec DBT th\u1ef1c hi\u1ec7n bi\u1ebfn \u0111\u1ed5i ngay trong kho d\u1eef li\u1ec7u (in-warehouse transformation), n\u00ean m\u1ecdi t\u00ednh to\u00e1n n\u1eb7ng nh\u1ecdc \u0111\u1ec1u do kho d\u1eef li\u1ec7u (BigQuery, Snowflake&#8230;) x\u1eed l\u00fd. N\u1ebfu b\u1ea1n vi\u1ebft code SQL kh\u00f4ng t\u1ed1i \u01b0u, chi ph\u00ed \u0111i\u1ec7n to\u00e1n \u0111\u00e1m m\u00e2y c\u00f3 th\u1ec3 t\u0103ng v\u1ecdt.<\/li>\n\n\n\n<li><strong>Kh\u00f4ng ph\u1ea3i c\u00f4ng c\u1ee5 th\u1eddi gian th\u1ef1c (Not Real-time):<\/strong> DBT \u0111\u01b0\u1ee3c thi\u1ebft k\u1ebf ch\u1ee7 y\u1ebfu cho x\u1eed l\u00fd theo l\u00f4 (batch processing). M\u1eb7c d\u00f9 t\u1ea7n su\u1ea5t ch\u1ea1y c\u00f3 th\u1ec3 r\u1ea5t nhanh (v\u00ed d\u1ee5: 5 ph\u00fat\/l\u1ea7n), nh\u01b0ng \u0111\u00e2y kh\u00f4ng ph\u1ea3i l\u00e0 c\u00f4ng c\u1ee5 Streaming (x\u1eed l\u00fd lu\u1ed3ng) nh\u01b0 Apache Kafka hay Flink. C\u00f3 \u0111\u1ed9 tr\u1ec5 nh\u1ea5t \u0111\u1ecbnh t\u1eeb l\u00fac d\u1eef li\u1ec7u th\u00f4 v\u1ec1 \u0111\u1ebfn l\u00fac d\u1eef li\u1ec7u s\u1ea1ch \u0111\u01b0\u1ee3c t\u1ea1o ra.<\/li>\n\n\n\n<li><strong>R\u00e0o c\u1ea3n gia nh\u1eadp v\u1edbi Data Analyst truy\u1ec1n th\u1ed1ng:<\/strong> M\u1eb7c d\u00f9 ch\u1ec9 d\u00f9ng SQL, nh\u01b0ng \u0111\u1ec3 d\u00f9ng DBT hi\u1ec7u qu\u1ea3, Data Analyst ph\u1ea3i h\u1ecdc th\u00eam c\u00e1c k\u1ef9 n\u0103ng c\u1ee7a Developer nh\u01b0: Git (d\u00f2ng l\u1ec7nh), Pull Request, CI\/CD v\u00e0 ng\u00f4n ng\u1eef Jinja. \u0110\u00e2y c\u00f3 th\u1ec3 l\u00e0 m\u1ed9t &#8220;c\u00fa s\u1ed1c v\u0103n h\u00f3a&#8221; v\u1edbi nh\u1eefng ng\u01b0\u1eddi quen d\u00f9ng giao di\u1ec7n k\u00e9o th\u1ea3.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"So_s\u00e1nh_nhanh_DBT_v\u1edbi_c\u00e1c_c\u00f4ng_c\u1ee5_kh\u00e1c\"><a id=\"post-120828-_lfhu5swqn2mu\"><\/a>So s\u00e1nh nhanh DBT v\u1edbi c\u00e1c c\u00f4ng c\u1ee5 kh\u00e1c<\/h2>\n\n\n\n<h3 id=\"DBT_vs._Airflow_(ho\u1eb7c_Prefect,_Dagster)\"><a id=\"post-120828-_a4274287sriz\"><\/a><strong>DBT vs. Airflow (ho\u1eb7c Prefect, Dagster)<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Airflow\/Prefect (\u0110i\u1ec1u ph\u1ed1i):<\/strong> C\u00e1c c\u00f4ng c\u1ee5 n\u00e0y kh\u00f4ng quan t\u00e2m <em>n\u1ed9i dung<\/em> c\u1ee7a t\u00e1c v\u1ee5 l\u00e0 g\u00ec (ch\u1ea1y script Python, g\u1ecdi API hay ch\u1ea1y DBT). Ch\u00fang ch\u1ec9 quan t\u00e2m \u0111\u1ebfn vi\u1ec7c <em>l\u00ean l\u1ecbch<\/em> (schedule), <em>th\u1ef1c thi<\/em> v\u00e0 <em>\u0111\u1ea3m b\u1ea3o<\/em> c\u00e1c t\u00e1c v\u1ee5 ch\u1ea1y \u0111\u00fang th\u1ee9 t\u1ef1, b\u00e1o l\u1ed7i khi th\u1ea5t b\u1ea1i.<\/li>\n\n\n\n<li><strong>DBT (Chuy\u1ec3n \u0111\u1ed5i):<\/strong> T\u1eadp trung 100% v\u00e0o ch\u1eef <strong>&#8220;T&#8221; (Transform)<\/strong>. DBT tr\u1ea3 l\u1eddi c\u00e2u h\u1ecfi: &#8220;Bi\u1ebfn \u0111\u1ed5i d\u1eef li\u1ec7u A th\u00e0nh d\u1eef li\u1ec7u B nh\u01b0 th\u1ebf n\u00e0o?&#8221;<\/li>\n<\/ul>\n\n\n\n<p><strong>\u27a1\ufe0f<\/strong>C\u00e1ch d\u00f9ng ph\u1ed5 bi\u1ebfn nh\u1ea5t l\u00e0 d\u00f9ng Airflow \u0111\u1ec3 l\u00ean l\u1ecbch v\u00e0 th\u1ef1c thi c\u00e1c l\u1ec7nh dbt run v\u00e0 dbt test.<\/p>\n\n\n\n<h3 id=\"DBT_vs._Fivetran\/Airbyte\/Stitch\"><a id=\"post-120828-_istcpqdw3r5d\"><\/a><strong>DBT vs. Fivetran\/Airbyte\/Stitch<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Fivetran\/Airbyte (EL &#8211; T\u1ea3i d\u1eef li\u1ec7u):<\/strong> \u0110\u00e2y l\u00e0 c\u00e1c c\u00f4ng c\u1ee5 <strong>Extract (E)<\/strong> v\u00e0 <strong>Load (L)<\/strong>. Nhi\u1ec7m v\u1ee5 duy nh\u1ea5t c\u1ee7a ch\u00fang l\u00e0 h\u00fat d\u1eef li\u1ec7u th\u00f4 t\u1eeb h\u00e0ng tr\u0103m ngu\u1ed3n (Salesforce, Google Ads, Facebook Ads,&#8230;) v\u00e0 t\u1ea3i v\u00e0o kho d\u1eef li\u1ec7u (BigQuery, Snowflake).<\/li>\n\n\n\n<li><strong>DBT (T &#8211; Bi\u1ebfn \u0111\u1ed5i):<\/strong> B\u1eaft \u0111\u1ea7u c\u00f4ng vi\u1ec7c <em>sau khi<\/em> Fivetran\/Airbyte \u0111\u00e3 l\u00e0m xong. DBT l\u1ea5y d\u1eef li\u1ec7u th\u00f4 \u0111\u00f3 v\u00e0 bi\u1ebfn \u0111\u1ed5i ch\u00fang th\u00e0nh c\u00e1c m\u00f4 h\u00ecnh s\u1ea1ch, s\u1eb5n s\u00e0ng cho ph\u00e2n t\u00edch.<\/li>\n<\/ul>\n\n\n\n<p><strong>\u27a1\ufe0f<\/strong>\u0110\u1ed1i t\u00e1c ho\u00e0n h\u1ea3o. Fivetran\/Airbyte lo &#8220;E&#8221; v\u00e0 &#8220;L&#8221;, DBT lo &#8220;T&#8221;. \u0110\u00e2y ch\u00ednh l\u00e0 &#8220;Ng\u0103n x\u1ebfp d\u1eef li\u1ec7u hi\u1ec7n \u0111\u1ea1i&#8221; (Modern Data Stack) ti\u00eau chu\u1ea9n.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"700\" height=\"375\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-7.png\" alt=\"So s\u00e1nh nhanh DBT v\u1edbi c\u00e1c c\u00f4ng c\u1ee5 kh\u00e1c\" class=\"wp-image-120837\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-7.png 700w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-7-300x161.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><figcaption class=\"wp-element-caption\"><strong>So s\u00e1nh nhanh DBT v\u1edbi c\u00e1c c\u00f4ng c\u1ee5 kh\u00e1c<\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n<h3 id=\"DBT_vs._Informatica\/Talend\"><a id=\"post-120828-_3nq1d79x6b3a\"><\/a><strong>DBT vs. Informatica\/Talend<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Informatica\/Talend (ETL truy\u1ec1n th\u1ed1ng):<\/strong> \u0110\u00e2y l\u00e0 c\u00e1c n\u1ec1n t\u1ea3ng <strong>ETL<\/strong> &#8220;n\u1eb7ng k\u00fd&#8221;, th\u01b0\u1eddng c\u00f3 giao di\u1ec7n \u0111\u1ed3 h\u1ecda k\u00e9o-th\u1ea3 (drag-and-drop). Ch\u00fang th\u1ef1c hi\u1ec7n vi\u1ec7c bi\u1ebfn \u0111\u1ed5i d\u1eef li\u1ec7u (T) tr\u00ean m\u1ed9t m\u00e1y ch\u1ee7 ri\u00eang <em>tr\u01b0\u1edbc khi<\/em> t\u1ea3i (L) v\u00e0o kho d\u1eef li\u1ec7u.<\/li>\n\n\n\n<li><strong>DBT (ELT hi\u1ec7n \u0111\u1ea1i):<\/strong> Ho\u1ea1t \u0111\u1ed9ng theo m\u00f4 h\u00ecnh <strong>ELT<\/strong>. DBT <em>kh\u00f4ng<\/em> t\u1ef1 m\u00ecnh x\u1eed l\u00fd d\u1eef li\u1ec7u; thay v\u00e0o \u0111\u00f3, c\u00f4ng c\u1ee5 s\u1ebd &#8220;ra l\u1ec7nh&#8221; cho kho d\u1eef li\u1ec7u t\u1ef1 bi\u1ebfn \u0111\u1ed5i, t\u1eadn d\u1ee5ng s\u1ee9c m\u1ea1nh t\u00ednh to\u00e1n v\u00f4 h\u1ea1n c\u1ee7a kho d\u1eef li\u1ec7u \u0111\u00e1m m\u00e2y.<\/li>\n<\/ul>\n\n\n\n<p><strong>\u27a1\ufe0f<\/strong>\u0110\u1ed1i th\u1ee7 v\u1ec1 tri\u1ebft l\u00fd<strong>.<\/strong> DBT \u0111\u1ea1i di\u1ec7n cho c\u00e1ch ti\u1ebfp c\u1eadn ELT linh ho\u1ea1t, t\u1eadp trung v\u00e0o SQL, trong khi c\u00e1c c\u00f4ng c\u1ee5 kia \u0111\u1ea1i di\u1ec7n cho ETL truy\u1ec1n th\u1ed1ng.<\/p>\n\n\n\n<h3 id=\"DBT_vs._Spark\/Pandas_(Script_t\u00f9y_ch\u1ec9nh)\"><a id=\"post-120828-_f49hjxc271o\"><\/a><strong>DBT vs. Spark\/Pandas (Script t\u00f9y ch\u1ec9nh)<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Spark\/Pandas (Code):<\/strong> C\u1ef1c k\u1ef3 m\u1ea1nh m\u1ebd v\u00e0 linh ho\u1ea1t, cho ph\u00e9p b\u1ea1n th\u1ef1c hi\u1ec7n c\u00e1c ph\u00e9p bi\u1ebfn \u0111\u1ed5i ph\u1ee9c t\u1ea1p b\u1eb1ng Python\/Scala\/Java. Tuy nhi\u00ean, ch\u00fang \u0111\u00f2i h\u1ecfi k\u1ef9 n\u0103ng l\u1eadp tr\u00ecnh cao, kh\u00f3 b\u1ea3o tr\u00ec, v\u00e0 ph\u1ea3i t\u1ef1 x\u00e2y d\u1ef1ng c\u01a1 ch\u1ebf ki\u1ec3m th\u1eed (testing) v\u00e0 t\u00e0i li\u1ec7u h\u00f3a (documentation).<\/li>\n\n\n\n<li><strong>DBT (SQL + Framework):<\/strong> D\u00e2n ch\u1ee7 h\u00f3a vi\u1ec7c chuy\u1ec3n \u0111\u1ed5i b\u1eb1ng c\u00e1ch s\u1eedS d\u1ee5ng SQL. B\u1ea5t k\u1ef3 ai bi\u1ebft SQL \u0111\u1ec1u c\u00f3 th\u1ec3 x\u00e2y d\u1ef1ng pipeline. S\u1ee9c m\u1ea1nh l\u1edbn nh\u1ea5t l\u00e0 DBT cung c\u1ea5p s\u1eb5n m\u1ed9t <strong>b\u1ed9 khung (framework)<\/strong> ho\u00e0n ch\u1ec9nh cho vi\u1ec7c ki\u1ec3m th\u1eed, t\u00e0i li\u1ec7u h\u00f3a, v\u00e0 qu\u1ea3n l\u00fd ph\u1ee5 thu\u1ed9c m\u00e0 b\u1ea1n kh\u00f4ng c\u1ea7n t\u1ef1 x\u00e2y d\u1ef1ng.<\/li>\n<\/ul>\n\n\n\n<p><strong>\u27a1\ufe0f<\/strong>Gi\u1ea3i quy\u1ebft c\u00e1c v\u1ea5n \u0111\u1ec1 kh\u00e1c nhau. D\u00f9ng Spark\/Pandas cho c\u00e1c t\u00e1c v\u1ee5 khoa h\u1ecdc d\u1eef li\u1ec7u, ML, ho\u1eb7c x\u1eed l\u00fd d\u1eef li\u1ec7u phi c\u1ea5u tr\u00fac c\u1ef1c l\u1edbn. D\u00f9ng DBT cho 90% c\u00e1c nhu c\u1ea7u c\u00f2n l\u1ea1i v\u1ec1 ph\u00e2n t\u00edch nghi\u1ec7p v\u1ee5 v\u00e0 x\u00e2y d\u1ef1ng m\u00f4 h\u00ecnh d\u1eef li\u1ec7u c\u00f3 c\u1ea5u tr\u00fac.<\/p>\n\n\n\n<h2 id=\"Khi_n\u00e0o_doanh_nghi\u1ec7p_n\u00ean_s\u1eed_d\u1ee5ng_DBT?\"><a id=\"post-120828-_yp01bhgvh1nq\"><\/a>Khi n\u00e0o doanh nghi\u1ec7p n\u00ean s\u1eed d\u1ee5ng DBT?<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>B\u1ea1n \u0111ang s\u1eed d\u1ee5ng kho d\u1eef li\u1ec7u \u0111\u00e1m m\u00e2y hi\u1ec7n \u0111\u1ea1i:<\/strong> N\u1ebfu b\u1ea1n \u0111\u00e3 d\u00f9ng Snowflake, BigQuery, Redshift hay Databricks, DBT l\u00e0 m\u1ea3nh gh\u00e9p ho\u00e0n h\u1ea3o. (N\u1ebfu b\u1ea1n v\u1eabn d\u00f9ng MySQL hay SQL Server c\u0169 cho ph\u00e2n t\u00edch, DBT c\u00f3 th\u1ec3 ch\u01b0a ph\u00e1t huy h\u1ebft s\u1ee9c m\u1ea1nh).<\/li>\n\n\n\n<li><strong>Logic nghi\u1ec7p v\u1ee5 b\u1ecb ph\u00e2n t\u00e1n:<\/strong> M\u1ed9t ph\u1ea7n logic n\u1eb1m trong code Python c\u1ee7a Data Engineer, m\u1ed9t ph\u1ea7n n\u1eb1m trong View c\u1ee7a Database, m\u1ed9t ph\u1ea7n l\u1ea1i n\u1eb1m trong c\u00f4ng th\u1ee9c t\u00ednh to\u00e1n c\u1ee7a Tableau\/PowerBI. B\u1ea1n kh\u00f4ng bi\u1ebft \u0111\u00e2u l\u00e0 &#8220;s\u1ef1 th\u1eadt&#8221;. DBT gi\u00fap gom t\u1ea5t c\u1ea3 v\u1ec1 m\u1ed9t ch\u1ed7.<\/li>\n\n\n\n<li><strong>Nh\u00f3m d\u1eef li\u1ec7u \u0111ang m\u1edf r\u1ed9ng:<\/strong> Khi b\u1ea1n c\u00f3 t\u1eeb 2-3 Data Analyst tr\u1edf l\u00ean, vi\u1ec7c gi\u1eabm ch\u00e2n l\u00ean nhau khi s\u1eeda code SQL l\u00e0 kh\u00f4ng tr\u00e1nh kh\u1ecfi. DBT v\u1edbi Git gi\u00fap gi\u1ea3i quy\u1ebft xung \u0111\u1ed9t v\u00e0 l\u00e0m vi\u1ec7c nh\u00f3m hi\u1ec7u qu\u1ea3.<\/li>\n\n\n\n<li><strong>D\u1eef li\u1ec7u hay b\u1ecb l\u1ed7i:<\/strong> S\u1ebfp th\u01b0\u1eddng xuy\u00ean ph\u00e0n n\u00e0n v\u1ec1 b\u00e1o c\u00e1o sai s\u1ed1 li\u1ec7u? T\u00ednh n\u0103ng Testing c\u1ee7a DBT s\u1ebd l\u00e0 &#8220;t\u1ea5m khi\u00ean&#8221; b\u1ea3o v\u1ec7 uy t\u00edn c\u1ee7a team d\u1eef li\u1ec7u.<\/li>\n\n\n\n<li><strong>M\u1ea5t qu\u00e1 nhi\u1ec1u th\u1eddi gian b\u1ea3o tr\u00ec:<\/strong> B\u1ea1n s\u1ee3 s\u1eeda m\u1ed9t b\u1ea3ng v\u00ec kh\u00f4ng bi\u1ebft n\u00f3 \u1ea3nh h\u01b0\u1edfng \u0111\u1ebfn nh\u1eefng b\u00e1o c\u00e1o n\u00e0o? DBT Lineage s\u1ebd cho b\u1ea1n s\u1ef1 t\u1ef1 tin \u0111\u1ec3 thay \u0111\u1ed5i.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"700\" height=\"375\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-8.png\" alt=\"Khi n\u00e0o doanh nghi\u1ec7p n\u00ean s\u1eed d\u1ee5ng DBT?\" class=\"wp-image-120838\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-8.png 700w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-8-300x161.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><figcaption class=\"wp-element-caption\"><strong>Khi n\u00e0o doanh nghi\u1ec7p n\u00ean s\u1eed d\u1ee5ng DBT?<\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n<h2 id=\"DBT_t\u00edch_h\u1ee3p_v\u1edbi_nh\u1eefng_n\u1ec1n_t\u1ea3ng_n\u00e0o?\"><a id=\"post-120828-_tovz1nkew1or\"><\/a>DBT t\u00edch h\u1ee3p v\u1edbi nh\u1eefng n\u1ec1n t\u1ea3ng n\u00e0o?<\/h2>\n\n\n\n<h3 id=\"T\u00edch_h\u1ee3p_v\u1edbi_c\u00e1c_kho_d\u1eef_li\u1ec7u_(Data_Warehouse_\/_Data_Lakehouse)\"><a id=\"post-120828-_bz6c4ou98vae\"><\/a><strong>T\u00edch h\u1ee3p v\u1edbi c\u00e1c kho d\u1eef li\u1ec7u (Data Warehouse \/ Data Lakehouse)<\/strong><\/h3>\n\n\n\n<p>DBT h\u1ed7 tr\u1ee3 tr\u1ef1c ti\u1ebfp c\u00e1c n\u1ec1n t\u1ea3ng d\u1eef li\u1ec7u ph\u1ed5 bi\u1ebfn nh\u1ea5t hi\u1ec7n nay, bao g\u1ed3m:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Snowflake<\/li>\n\n\n\n<li>BigQuery (Google Cloud)<\/li>\n\n\n\n<li>Amazon Redshift<\/li>\n\n\n\n<li>Databricks \/ Lakehouse<\/li>\n\n\n\n<li>PostgreSQL<\/li>\n\n\n\n<li>Amazon Athena<\/li>\n\n\n\n<li>Azure Synapse<\/li>\n\n\n\n<li>Apache Spark<\/li>\n\n\n\n<li>DuckDB<\/li>\n\n\n\n<li>StarRocks<\/li>\n\n\n\n<li>ClickHouse<\/li>\n\n\n\n<li>Trino \/ Presto<\/li>\n\n\n\n<li>Exasol<\/li>\n<\/ul>\n\n\n\n<p>(DBT h\u1ed7 tr\u1ee3 th\u00f4ng qua <em>adapters official<\/em> ho\u1eb7c <em>community-supported adapters<\/em>.)<\/p>\n\n\n\n<h3 id=\"T\u00edch_h\u1ee3p_v\u1edbi_c\u00f4ng_c\u1ee5_orchestration_\/_workflow\"><a id=\"post-120828-_o46m3mutq2k\"><\/a><strong>T\u00edch h\u1ee3p v\u1edbi c\u00f4ng c\u1ee5 orchestration \/ workflow<\/strong><\/h3>\n\n\n\n<p>DBT \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng r\u1ed9ng r\u00e3i trong c\u00e1c h\u1ec7 th\u1ed1ng \u0111i\u1ec1u ph\u1ed1i d\u1eef li\u1ec7u hi\u1ec7n \u0111\u1ea1i:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Airflow<\/li>\n\n\n\n<li>Dagster<\/li>\n\n\n\n<li>Prefect<\/li>\n\n\n\n<li>AWS Step Functions<\/li>\n\n\n\n<li>GitHub Actions<\/li>\n\n\n\n<li>GitLab CI\/CD<\/li>\n\n\n\n<li>Azure DevOps Pipeline<\/li>\n\n\n\n<li>CircleCI<\/li>\n<\/ul>\n\n\n\n<p>C\u00e1c c\u00f4ng c\u1ee5 n\u00e0y d\u00f9ng \u0111\u1ec3 ch\u1ea1y DBT theo l\u1ecbch, t\u1ef1 \u0111\u1ed9ng tri\u1ec3n khai v\u00e0 qu\u1ea3n l\u00fd pipeline.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"700\" height=\"375\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-9.png\" alt=\"DBT t\u00edch h\u1ee3p v\u1edbi nh\u1eefng n\u1ec1n t\u1ea3ng n\u00e0o?\" class=\"wp-image-120836\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-9.png 700w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/dbt-la-gi-9-300x161.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><figcaption class=\"wp-element-caption\"><strong>DBT t\u00edch h\u1ee3p v\u1edbi nh\u1eefng n\u1ec1n t\u1ea3ng n\u00e0o?<\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n<h3 id=\"T\u00edch_h\u1ee3p_v\u1edbi_c\u00f4ng_c\u1ee5_BI_v\u00e0_ph\u00e2n_t\u00edch\"><a id=\"post-120828-_rb1w1mrx7nyu\"><\/a><strong>T\u00edch h\u1ee3p v\u1edbi c\u00f4ng c\u1ee5 BI v\u00e0 ph\u00e2n t\u00edch<\/strong><\/h3>\n\n\n\n<p>DBT gi\u00fap chu\u1ea9n h\u00f3a d\u1eef li\u1ec7u \u0111\u1ea7u v\u00e0o cho c\u00e1c c\u00f4ng c\u1ee5 BI:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Looker (t\u00edch h\u1ee3p metadata m\u1ea1nh m\u1ebd)<\/li>\n\n\n\n<li>Tableau<\/li>\n\n\n\n<li>Power BI<\/li>\n\n\n\n<li>Mode Analytics<\/li>\n\n\n\n<li>Hex<\/li>\n\n\n\n<li>Sigma Computing<\/li>\n<\/ul>\n\n\n\n<p>Nhi\u1ec1u c\u00f4ng c\u1ee5 BI c\u00f3 th\u1ec3 \u0111\u1ecdc tr\u1ef1c ti\u1ebfp catalog v\u00e0 schema do DBT t\u1ea1o ra.<\/p>\n\n\n\n<h3 id=\"T\u00edch_h\u1ee3p_v\u1edbi_h\u1ec7_th\u1ed1ng_ki\u1ec3m_th\u1eed_&amp;_quan_s\u00e1t_d\u1eef_li\u1ec7u_(Data_Quality_\/_Observability)\"><a id=\"post-120828-_hpkoabd3d4is\"><\/a><strong>T\u00edch h\u1ee3p v\u1edbi h\u1ec7 th\u1ed1ng ki\u1ec3m th\u1eed &amp; quan s\u00e1t d\u1eef li\u1ec7u (Data Quality \/ Observability)<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Great Expectations<\/li>\n\n\n\n<li>Monte Carlo<\/li>\n\n\n\n<li>Soda Data<\/li>\n\n\n\n<li>Datafold <br>Lightdash (BI thu\u1ea7n cho DBT)<\/li>\n\n\n\n<li>Elementary Data (observability chuy\u00ean cho DBT)<\/li>\n<\/ul>\n\n\n\n<h3 id=\"T\u00edch_h\u1ee3p_v\u1edbi_h\u1ec7_th\u1ed1ng_qu\u1ea3n_l\u00fd_m\u00e3_ngu\u1ed3n_&amp;_DevOps\"><a id=\"post-120828-_vuqor6c5ayzq\"><\/a><strong>T\u00edch h\u1ee3p v\u1edbi h\u1ec7 th\u1ed1ng qu\u1ea3n l\u00fd m\u00e3 ngu\u1ed3n &amp; DevOps<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GitHub<\/li>\n\n\n\n<li>GitLab<\/li>\n\n\n\n<li>Bitbucket<\/li>\n\n\n\n<li>Terraform (qu\u1ea3n l\u00fd h\u1ea1 t\u1ea7ng DBT Cloud)<\/li>\n<\/ul>\n\n\n\n<h3 id=\"DBT_Cloud_t\u00edch_h\u1ee3p_n\u00e2ng_cao\"><a id=\"post-120828-_2yhit05pu8jh\"><\/a><strong>DBT Cloud t\u00edch h\u1ee3p n\u00e2ng cao<\/strong><\/h3>\n\n\n\n<p>N\u1ebfu d\u00f9ng <strong>DBT Cloud<\/strong>, b\u1ea1n c\u00f3 th\u00eam c\u00e1c t\u00edch h\u1ee3p \u0111\u1eb7c bi\u1ec7t:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>L\u1ecbch ch\u1ea1y (Scheduler) t\u00edch h\u1ee3p s\u1eb5n<\/li>\n\n\n\n<li>GitHub \/ GitLab OAuth<\/li>\n\n\n\n<li>Data lineage tr\u1ef1c quan <br>API real-time<\/li>\n\n\n\n<li>Webhooks<\/li>\n\n\n\n<li>K\u1ebft n\u1ed1i t\u1edbi BigQuery, Snowflake, Redshift, Databricks ch\u1ec9 b\u1eb1ng 1 giao di\u1ec7n<\/li>\n<\/ul>\n\n\n\n<h3 id=\"K\u1ebft_lu\u1eadn\"><a id=\"post-120828-_9wbinazegz5h\"><\/a><strong>K\u1ebft lu\u1eadn<\/strong><\/h3>\n\n\n\n<p>DBT \u0111ang d\u1ea7n tr\u1edf th\u00e0nh ti\u00eau chu\u1ea9n v\u00e0ng cho vi\u1ec7c chuy\u1ec3n \u0111\u1ed5i d\u1eef li\u1ec7u theo m\u00f4 h\u00ecnh ELT t\u1ea1i c\u00e1c doanh nghi\u1ec7p hi\u1ec7n \u0111\u1ea1i. V\u1edbi kh\u1ea3 n\u0103ng \u0111\u01a1n gi\u1ea3n h\u00f3a pipeline, gi\u1ea3m sai s\u00f3t, t\u0103ng t\u00ednh t\u00e1i s\u1eed d\u1ee5ng v\u00e0 h\u1ed7 tr\u1ee3 m\u1ea1nh m\u1ebd cho Data Team, DBT l\u00e0 l\u1ef1a ch\u1ecdn b\u1ea1n kh\u00f4ng n\u00ean b\u1ecf qua khi x\u00e2y d\u1ef1ng h\u1ec7 th\u1ed1ng d\u1eef li\u1ec7u b\u1ec1n v\u1eefng.<\/p>\n\n\n\n<h2 id=\"Nh\u1eefng_c\u00e2u_h\u1ecfi_th\u01b0\u1eddng_g\u1eb7p\"><a id=\"post-120828-_igmeza279no9\"><\/a>Nh\u1eefng c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p<\/h2>\n\n\n\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h2 id=\"DBT_h\u1ed7_tr\u1ee3_nh\u1eefng_c\u01a1_s\u1edf_d\u1eef_li\u1ec7u_(Database)_n\u00e0o?\">DBT h\u1ed7 tr\u1ee3 nh\u1eefng c\u01a1 s\u1edf d\u1eef li\u1ec7u (Database) n\u00e0o?<\/h2>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p>DBT ho\u1ea1t \u0111\u1ed9ng t\u1ed1t nh\u1ea5t tr\u00ean c\u00e1c Kho d\u1eef li\u1ec7u \u0111\u00e1m m\u00e2y (Cloud Data Warehouses) nh\u01b0: Snowflake, Google BigQuery, Amazon Redshift, Databricks v\u00e0 PostgreSQL. Ngo\u00e0i ra, c\u1ed9ng \u0111\u1ed3ng c\u0169ng ph\u00e1t tri\u1ec3n c\u00e1c adapter cho <a href=\"https:\/\/tino.vn\/blog\/mysql-la-gi\/\" target=\"_blank\" data-type=\"post\" data-id=\"322\" rel=\"noreferrer noopener\">MySQL<\/a>, SQL Server, Oracle, Spark, &#8230;, nh\u01b0ng hi\u1ec7u n\u0103ng v\u00e0 t\u00ednh n\u0103ng c\u00f3 th\u1ec3 kh\u00f4ng t\u1ed1i \u01b0u b\u1eb1ng c\u00e1c n\u1ec1n t\u1ea3ng \u0111\u00e1m m\u00e2y native.<\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h2 id=\"DBT_l\u01b0u_tr\u1eef_d\u1eef_li\u1ec7u_c\u1ee7a_t\u00f4i_\u1edf_\u0111\u00e2u?\">DBT l\u01b0u tr\u1eef d\u1eef li\u1ec7u c\u1ee7a t\u00f4i \u1edf \u0111\u00e2u?<\/h2>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p>DBT kh\u00f4ng l\u01b0u tr\u1eef d\u1eef li\u1ec7u. \u0110\u00e2y l\u00e0 m\u1ed9t \u01b0u \u0111i\u1ec3m l\u1edbn v\u1ec1 b\u1ea3o m\u1eadt. DBT ch\u1ec9 \u0111\u1ecdc d\u1eef li\u1ec7u t\u1eeb kho d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n, x\u1eed l\u00fd v\u00e0 ghi l\u1ea1i k\u1ebft qu\u1ea3 v\u00e0o ch\u00ednh kho d\u1eef li\u1ec7u \u0111\u00f3. D\u1eef li\u1ec7u kh\u00f4ng bao gi\u1edd r\u1eddi kh\u1ecfi m\u00f4i tr\u01b0\u1eddng \u0111\u00e1m m\u00e2y c\u1ee7a b\u1ea1n (v\u00ed d\u1ee5: d\u1eef li\u1ec7u n\u1eb1m y\u00ean trong BigQuery ho\u1eb7c Snowflake), gi\u00fap \u0111\u1ea3m b\u1ea3o tu\u00e2n th\u1ee7 c\u00e1c quy \u0111\u1ecbnh b\u1ea3o m\u1eadt kh\u1eaft khe.<\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h2 id=\"T\u00f4i_c\u00f3_c\u1ea7n_bi\u1ebft_Python_\u0111\u1ec3_s\u1eed_d\u1ee5ng_DBT_kh\u00f4ng?\">T\u00f4i c\u00f3 c\u1ea7n bi\u1ebft Python \u0111\u1ec3 s\u1eed d\u1ee5ng DBT kh\u00f4ng?<\/h2>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p>Kh\u00f4ng b\u1eaft bu\u1ed9c. Ng\u00f4n ng\u1eef ch\u00ednh c\u1ee7a DBT l\u00e0 SQL. N\u1ebfu b\u1ea1n r\u00e0nh SQL, b\u1ea1n \u0111\u00e3 n\u1eafm \u0111\u01b0\u1ee3c 90% c\u00f4ng c\u1ee5 n\u00e0y. 10% c\u00f2n l\u1ea1i l\u00e0 Jinja (ng\u00f4n ng\u1eef t\u1ea1o m\u1eabu), r\u1ea5t d\u1ec5 h\u1ecdc v\u00e0 c\u00f3 c\u00fa ph\u00e1p t\u01b0\u01a1ng t\u1ef1 Python c\u01a1 b\u1ea3n. Tuy nhi\u00ean, t\u1eeb phi\u00ean b\u1ea3n 1.3, DBT \u0111\u00e3 b\u1eaft \u0111\u1ea7u h\u1ed7 tr\u1ee3 c\u00e1c model vi\u1ebft b\u1eb1ng Python cho c\u00e1c t\u00e1c v\u1ee5 ph\u1ee9c t\u1ea1p (nh\u01b0 Data Science), nh\u01b0ng \u0111\u00e2y l\u00e0 t\u00f9y ch\u1ecdn n\u00e2ng cao, kh\u00f4ng ph\u1ea3i b\u1eaft bu\u1ed9c.<\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h2 id=\"DBT_c\u00f3_mi\u1ec5n_ph\u00ed_kh\u00f4ng?\">DBT c\u00f3 mi\u1ec5n ph\u00ed kh\u00f4ng?<\/h2>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p><strong>C\u00f3 v\u00e0 kh\u00f4ng.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>DBT Cloud:<\/strong> L\u00e0 gi\u1ea3i ph\u00e1p th\u01b0\u01a1ng m\u1ea1i (SaaS) tr\u1ea3 ph\u00ed, cung c\u1ea5p giao di\u1ec7n web, tr\u00ecnh l\u00ean l\u1ecbch (scheduler), CI\/CD t\u00edch h\u1ee3p v\u00e0 h\u1ed7 tr\u1ee3 k\u1ef9 thu\u1eadt.<\/li>\n\n\n\n<li><strong>DBT Core:<\/strong> L\u00e0 phi\u00ean b\u1ea3n m\u00e3 ngu\u1ed3n m\u1edf v\u00e0 ho\u00e0n to\u00e0n <strong>mi\u1ec5n ph\u00ed<\/strong>. B\u1ea1n c\u00f3 th\u1ec3 t\u1ea3i v\u1ec1, c\u00e0i \u0111\u1eb7t v\u00e0 ch\u1ea1y tr\u00ean m\u00e1y t\u00ednh c\u00e1 nh\u00e2n ho\u1eb7c server ri\u00eang m\u00e0 kh\u00f4ng t\u1ed1n ph\u00ed b\u1ea3n quy\u1ec1n.<\/li>\n<\/ul>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h2 id=\"T\u00f4i_c\u00f3_th\u1ec3_d\u00f9ng_DBT_cho_d\u1eef_li\u1ec7u_Real-time_(th\u1eddi_gian_th\u1ef1c)_kh\u00f4ng?\">T\u00f4i c\u00f3 th\u1ec3 d\u00f9ng DBT cho d\u1eef li\u1ec7u Real-time (th\u1eddi gian th\u1ef1c) kh\u00f4ng?<\/h2>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p>DBT \u0111\u01b0\u1ee3c thi\u1ebft k\u1ebf cho x\u1eed l\u00fd theo l\u00f4 (Batch processing). M\u1eb7c d\u00f9 b\u1ea1n c\u00f3 th\u1ec3 ch\u1ea1y DBT r\u1ea5t th\u01b0\u1eddng xuy\u00ean (v\u00ed d\u1ee5 5-10 ph\u00fat\/l\u1ea7n &#8211; g\u1ecdi l\u00e0 micro-batch), nh\u01b0ng \u0111\u00e2y kh\u00f4ng ph\u1ea3i l\u00e0 c\u00f4ng c\u1ee5 Streaming th\u1ef1c th\u1ee5 nh\u01b0 Kafka hay Spark Streaming. Tuy nhi\u00ean, xu h\u01b0\u1edbng &#8220;Streaming SQL&#8221; (nh\u01b0 Materialize) \u0111ang t\u00edch h\u1ee3p v\u1edbi DBT \u0111\u1ec3 thu h\u1eb9p kho\u1ea3ng c\u00e1ch n\u00e0y.<\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\n<script type=\"application\/ld+json\">\n\t{\n\t\t\"@context\": \"https:\/\/schema.org\",\n\t\t\"@type\": \"FAQPage\",\n\t\t\"mainEntity\": [\n\t\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"DBT h\u1ed7 tr\u1ee3 nh\u1eefng c\u01a1 s\u1edf d\u1eef li\u1ec7u (Database) n\u00e0o?\",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>DBT ho\u1ea1t \u0111\u1ed9ng t\u1ed1t nh\u1ea5t tr\u00ean c\u00e1c Kho d\u1eef li\u1ec7u \u0111\u00e1m m\u00e2y (Cloud Data Warehouses) nh\u01b0: Snowflake, Google BigQuery, Amazon Redshift, Databricks v\u00e0 PostgreSQL. Ngo\u00e0i ra, c\u1ed9ng \u0111\u1ed3ng c\u0169ng ph\u00e1t tri\u1ec3n c\u00e1c adapter cho <a>MySQL<\/a>, SQL Server, Oracle, Spark, ..., nh\u01b0ng hi\u1ec7u n\u0103ng v\u00e0 t\u00ednh n\u0103ng c\u00f3 th\u1ec3 kh\u00f4ng t\u1ed1i \u01b0u b\u1eb1ng c\u00e1c n\u1ec1n t\u1ea3ng \u0111\u00e1m m\u00e2y native.<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t,\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"DBT l\u01b0u tr\u1eef d\u1eef li\u1ec7u c\u1ee7a t\u00f4i \u1edf \u0111\u00e2u?\",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>DBT kh\u00f4ng l\u01b0u tr\u1eef d\u1eef li\u1ec7u. \u0110\u00e2y l\u00e0 m\u1ed9t \u01b0u \u0111i\u1ec3m l\u1edbn v\u1ec1 b\u1ea3o m\u1eadt. DBT ch\u1ec9 \u0111\u1ecdc d\u1eef li\u1ec7u t\u1eeb kho d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n, x\u1eed l\u00fd v\u00e0 ghi l\u1ea1i k\u1ebft qu\u1ea3 v\u00e0o ch\u00ednh kho d\u1eef li\u1ec7u \u0111\u00f3. D\u1eef li\u1ec7u kh\u00f4ng bao gi\u1edd r\u1eddi kh\u1ecfi m\u00f4i tr\u01b0\u1eddng \u0111\u00e1m m\u00e2y c\u1ee7a b\u1ea1n (v\u00ed d\u1ee5: d\u1eef li\u1ec7u n\u1eb1m y\u00ean trong BigQuery ho\u1eb7c Snowflake), gi\u00fap \u0111\u1ea3m b\u1ea3o tu\u00e2n th\u1ee7 c\u00e1c quy \u0111\u1ecbnh b\u1ea3o m\u1eadt kh\u1eaft khe.<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t,\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"T\u00f4i c\u00f3 c\u1ea7n bi\u1ebft Python \u0111\u1ec3 s\u1eed d\u1ee5ng DBT kh\u00f4ng?\",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>Kh\u00f4ng b\u1eaft bu\u1ed9c. Ng\u00f4n ng\u1eef ch\u00ednh c\u1ee7a DBT l\u00e0 SQL. N\u1ebfu b\u1ea1n r\u00e0nh SQL, b\u1ea1n \u0111\u00e3 n\u1eafm \u0111\u01b0\u1ee3c 90% c\u00f4ng c\u1ee5 n\u00e0y. 10% c\u00f2n l\u1ea1i l\u00e0 Jinja (ng\u00f4n ng\u1eef t\u1ea1o m\u1eabu), r\u1ea5t d\u1ec5 h\u1ecdc v\u00e0 c\u00f3 c\u00fa ph\u00e1p t\u01b0\u01a1ng t\u1ef1 Python c\u01a1 b\u1ea3n. Tuy nhi\u00ean, t\u1eeb phi\u00ean b\u1ea3n 1.3, DBT \u0111\u00e3 b\u1eaft \u0111\u1ea7u h\u1ed7 tr\u1ee3 c\u00e1c model vi\u1ebft b\u1eb1ng Python cho c\u00e1c t\u00e1c v\u1ee5 ph\u1ee9c t\u1ea1p (nh\u01b0 Data Science), nh\u01b0ng \u0111\u00e2y l\u00e0 t\u00f9y ch\u1ecdn n\u00e2ng cao, kh\u00f4ng ph\u1ea3i b\u1eaft bu\u1ed9c.<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t,\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"DBT c\u00f3 mi\u1ec5n ph\u00ed kh\u00f4ng?\",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p><strong>C\u00f3 v\u00e0 kh\u00f4ng.<\/strong><\/p><ul><li><strong>DBT Cloud:<\/strong> L\u00e0 gi\u1ea3i ph\u00e1p th\u01b0\u01a1ng m\u1ea1i (SaaS) tr\u1ea3 ph\u00ed, cung c\u1ea5p giao di\u1ec7n web, tr\u00ecnh l\u00ean l\u1ecbch (scheduler), CI\/CD t\u00edch h\u1ee3p v\u00e0 h\u1ed7 tr\u1ee3 k\u1ef9 thu\u1eadt.<\/li><li><strong>DBT Core:<\/strong> L\u00e0 phi\u00ean b\u1ea3n m\u00e3 ngu\u1ed3n m\u1edf v\u00e0 ho\u00e0n to\u00e0n <strong>mi\u1ec5n ph\u00ed<\/strong>. B\u1ea1n c\u00f3 th\u1ec3 t\u1ea3i v\u1ec1, c\u00e0i \u0111\u1eb7t v\u00e0 ch\u1ea1y tr\u00ean m\u00e1y t\u00ednh c\u00e1 nh\u00e2n ho\u1eb7c server ri\u00eang m\u00e0 kh\u00f4ng t\u1ed1n ph\u00ed b\u1ea3n quy\u1ec1n.<\/li><\/ul>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t,\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"T\u00f4i c\u00f3 th\u1ec3 d\u00f9ng DBT cho d\u1eef li\u1ec7u Real-time (th\u1eddi gian th\u1ef1c) kh\u00f4ng?\",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>DBT \u0111\u01b0\u1ee3c thi\u1ebft k\u1ebf cho x\u1eed l\u00fd theo l\u00f4 (Batch processing). M\u1eb7c d\u00f9 b\u1ea1n c\u00f3 th\u1ec3 ch\u1ea1y DBT r\u1ea5t th\u01b0\u1eddng xuy\u00ean (v\u00ed d\u1ee5 5-10 ph\u00fat\/l\u1ea7n - g\u1ecdi l\u00e0 micro-batch), nh\u01b0ng \u0111\u00e2y kh\u00f4ng ph\u1ea3i l\u00e0 c\u00f4ng c\u1ee5 Streaming th\u1ef1c th\u1ee5 nh\u01b0 Kafka hay Spark Streaming. Tuy nhi\u00ean, xu h\u01b0\u1edbng \\\"Streaming SQL\\\" (nh\u01b0 Materialize) \u0111ang t\u00edch h\u1ee3p v\u1edbi DBT \u0111\u1ec3 thu h\u1eb9p kho\u1ea3ng c\u00e1ch n\u00e0y.<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t\t\t\t]\n\t}\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Trong k\u1ef7 nguy\u00ean b\u00f9ng n\u1ed5 d\u1eef li\u1ec7u, vi\u1ec7c thu th\u1eadp th\u00f4ng tin v\u00e0 t\u1ea3i ch\u00fang v\u00e0o kho d\u1eef li\u1ec7u \u0111\u00e3 tr\u1edf n\u00ean d\u1ec5 d\u00e0ng h\u01a1n bao gi\u1edd h\u1ebft nh\u1edd c\u00e1c c\u00f4ng c\u1ee5 ELT hi\u1ec7n \u0111\u1ea1i. D\u1eef li\u1ec7u th\u00f4 c\u00f3 th\u1ec3 s\u1edf h\u1eefu h\u00e0ng Terabyte dung l\u01b0\u1ee3ng, nh\u01b0ng n\u1ebfu kh\u00f4ng \u0111\u01b0\u1ee3c l\u00e0m s\u1ea1ch v\u00e0 chu\u1ea9n h\u00f3a, [&hellip;]<\/p>\n","protected":false},"author":23,"featured_media":120839,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5389],"tags":[7456],"class_list":["post-120828","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kien-thuc-tong-hop","tag-dbt"],"_links":{"self":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/posts\/120828","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/comments?post=120828"}],"version-history":[{"count":4,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/posts\/120828\/revisions"}],"predecessor-version":[{"id":120842,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/posts\/120828\/revisions\/120842"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/media\/120839"}],"wp:attachment":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/media?parent=120828"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/categories?post=120828"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/tags?post=120828"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}