แ แ แแ แแแชแแแแแแแ แแแแแฃแแ แแแแแแฃแ แ แแแแแชแแแแ แกแแฌแงแแแ?
แคแแแฃแกแแ แแแ แแแแแแกแแก แฆแแ แแแฃแแแแแแ แแ แแแแแแขแแแแแ แฅแแแแแก แแแแแก แแ แแ แกแแแแแแก แจแแแแฎแแแแแจแ. DWH, แ แแแแ แช แแแแแก แแแแแก แแแ แแแ: แแแ แกแแแแแก แแแแแแแแแ แแแ, แแแขแแแแขแฃแ แ แขแแกแขแแ แแแ แแ CI. แแแแฃแแฃแ แ, แแแคแแ แแแแแแแ, แฆแแ แฌแงแแ แ แแ แกแแแแแแแแแแ. แแแแฎแแแ แแแแแกแแแแก แแแกแแฎแแ แฎแแแแแ แแแแฃแแแแขแแชแแ แแ แแแแแแแแแแฃแแแแแก แแแแฃแแแแแแชแแ (Data Lineage).
แแแขแ แแ แงแแแแแคแ แแก แจแแกแแฎแแ แแ DBT-แแก แ แแแแก แจแแกแแฎแแ Big Data & Analytics แแแแกแแกแขแแแแจแ - Welcome to cat.
แแแฃแแแ แฏแแก
แแ แขแแแ แแแแแ แ แแแแจแแ แจแแ. 5 แฌแแแแ แแแขแแ แแแฃแจแแแ แแแแแชแแแแ แกแแฌแงแแแแแแแ, แแแจแแแแ ETL/ELT, แแกแแแ แแแแแชแแแแ แแแแแแขแแแแกแ แแ แแแแฃแแแแแแชแแแก. แแแแแแแ แแแฃแจแแแ
แแแแแ แจแแแแแ แกแ
DBT แฉแแ แฉแ แแ แแก T-แแก แจแแกแแฎแแ ELT (Extract - Transform - Load) แจแแแแแแแแแ.
แแกแแแ แแ แแแฃแฅแขแแฃแแ แแ แแแกแจแขแแแฃแ แ แแแแแแขแแแฃแ แ แแแแแชแแแแ แแแแแแแก แแแกแแแแกแแแ แแ แแแ, แ แแแแ แแชแแ BigQuery, Redshift, Snowflake, แแแ แ แแ แฐแฅแแแแ แแแแแชแแแแ แกแแฌแงแแแแก แแแ แแ แขแ แแแกแคแแ แแแชแแแแแก แแแแแแแแแก.
DBT แแ แฉแแแแขแแแ แแแแก แแแแแชแแแแแก แฌแงแแ แแแแแแแ, แแแแ แแ แแซแแแแ แแแ แจแแกแแซแแแแแแแแแก แแ แแแแแชแแแแแแแ แแฃแจแแแแแกแแแแก, แ แแแแแแแช แฃแแแ แฉแแขแแแ แแฃแแแ แกแแชแแแจแ (แจแแแ แแ แแแ แ แกแแชแแแจแ).
DBT-แแก แแแแแแ แ แแแแแแแ แแแแแก แแฆแแแ, แแแกแ SQL-แจแ แจแแแแแแ, แแ แซแแแแแแแแก แจแแกแ แฃแแแแ แกแแชแแแจแ แกแฌแแ แ แแแแแแแแแแ แแแแ.
DBT แแ แแแฅแขแแก แกแขแ แฃแฅแขแฃแ แ
แแ แแแฅแขแ แจแแแแแแ แแฎแแแแ 2 แขแแแแก แแแ แแฅแขแแ แแแแแกแ แแ แคแแแแแแแกแแแ:
- แแแแแแ (.sql) - แขแ แแแกแคแแ แแแชแแแก แแ แแแฃแแ, แ แแแแแแช แแแแแฎแแขแฃแแแ SELECT แแแแฎแแแแแ
- แแแแคแแแฃแ แแชแแแก แคแแแแ (.yml) - แแแ แแแแขแ แแแ, แแแ แแแแขแ แแแ, แขแแกแขแแแ, แแแแฃแแแแขแแชแแ
แกแแแแแแกแ แแแแแแ, แกแแแฃแจแแ แกแขแ แฃแฅแขแฃแ แแ แแแฃแแแ แจแแแแแแแแแ แแ:
- แแแแฎแแแ แแแแแ แแแแแแแแก แแแแแแแก แแแแก แแแแแกแแแแ แแแกแแฎแแ แฎแแแแ IDE-แจแ
- CLI-แแก แแแแแงแแแแแแ, แแแแแแแแ แแแจแแแแฃแแแ, DBT แแแ แแแแแก แแแแแแแก แแแแก SQL-แจแ
- แจแแแแแแแแ SQL แแแแ แจแแกแ แฃแแแแฃแแแ Storage-แจแ แแแชแแแฃแแ แแแแแแแแแแ แแแแ (แแ แแคแแแ)
แแ, แ แแแแ แจแแแซแแแแ แแแแแแงแฃแ แแแแแแก CLI-แแแ แแแจแแแแ:
แงแแแแแคแแ แ แแ แแก SELECT
แแก แแ แแก Data Build Tool แฉแแ แฉแแก แแแแแแแ แคแฃแแฅแชแแ. แกแฎแแ แกแแขแงแแแแแ แ แแ แแแฅแแแ, DBT แแแกแขแ แแฅแขแแแก แงแแแแ แแแแก, แ แแแแแแช แแแแแแจแแ แแแฃแแแ แแฅแแแแ แแแแฎแแแแแแแก แแแฆแแแแแจแ แแแขแแ แแแแแแแชแแแกแแแ (แแแ แแแชแแแแ CREATE, INSERT, UPDATE, DELETE ALTER, GRANT, ...).
แแแแแกแแแแ แ แแแแแแ แแฃแแแกแฎแแแแก แแ แแ SELECT แจแแแแแฎแแแก แแแฌแแ แแก, แ แแแแแแช แแแแกแแแฆแแ แแแก แแแฆแแแฃแ แแแแแชแแแแแก.
แแ แจแแแแฎแแแแแจแ, แขแ แแแกแคแแ แแแชแแแก แแแแแแ แจแแแซแแแแ แแงแแก แแ แแแแ แแแแแก แแ แแแแแ แแแแแแก แแแแแชแแแแแ แ แแแแแแแแ แกแฎแแ แแแแแแแแแ. แแแแแแแก แแแแแแแแ, แ แแแแแแช แแแจแแแแแก แจแแแแแแแก แแแขแ แแแแก (f_orders):
{% set payment_methods = ['credit_card', 'coupon', 'bank_transfer', 'gift_card'] %}
with orders as (
select * from {{ ref('stg_orders') }}
),
order_payments as (
select * from {{ ref('order_payments') }}
),
final as (
select
orders.order_id,
orders.customer_id,
orders.order_date,
orders.status,
{% for payment_method in payment_methods -%}
order_payments.{{payment_method}}_amount,
{% endfor -%}
order_payments.total_amount as amount
from orders
left join order_payments using (order_id)
)
select * from final
แ แ แกแแแแขแแ แแกแ แ แแ แจแแแซแแแแ แแแแฎแแ แแฅ?
แแแ แแแแ: แแแแแแงแแแแแ CTE (Common Table Expressions) - แแแแแก แแ แแแแแแแแแกแ แแ แแแกแแแแแแ, แ แแแแแแช แจแแแชแแแก แฃแแแ แแ แขแ แแแกแคแแ แแแชแแแก แแ แแแแแแก แแแแแแแก
แแแแ แ: แแแแแแแก แแแแ แแ แแก SQL-แแกแ แแ แแแแก แแแแแแ
แแแแแแแแ แแงแแแแแก แแแ แงแฃแแก แแแแกแแแแก แแแแแกแแฎแฃแแแแแจแ แแแแแแแแฃแแ แแแแแแฃแแ แแแแแฎแแแก แแแแแแแกแแแแก แแแแฎแแก แแแแแ แแ แแแ แแแแแแแแฃแแ. แคแฃแแฅแชแแ แแกแแแ แแแแแแงแแแแแ ref โ แแแแแก แคแแ แแแแแจแ แกแฎแแ แแแแแแแแแก แแแแแแแแแก แจแแกแแซแแแแแแแ:
- แจแแแแแแแก แแ แแก ref แแแแแแฅแชแแแ แกแแแแแแ แแแฉแแแแแแแแ แชแฎแ แแแแ แแ แฎแแแจแ Storage-แจแ
- ref แกแแจแฃแแแแแแก แแแซแแแแ แจแแฅแแแแ แแแแแแแก แแแแแแแแแแฃแแแแแก แแ แแคแแแ
แกแฌแแ แแ
- If / else แแแแชแฎแแแแแแแ - แคแแแแแแแก แแแแชแฎแแแแแแแ
- แแแ แงแฃแแแแแกแแแแก - แชแแแแแแ
- แชแแแแแแแ
- แแแแ แ - แแแแ แแแแแก แจแแฅแแแ
แแแขแแ แแแแแแแชแแ: แชแฎแ แแแ, แฎแแแ, แแแแ แแแแแขแฃแแ
แแแขแแ แแแแแแแชแแแก แกแขแ แแขแแแแ แแ แแก แแแแแแแ, แ แแแแแก แแแฎแแแแแแแช แแแแแแแก แแแแแชแแแแแแก แจแแแแแแ แแแฆแแแฃแแ แแแแ แแแ แแแแฎแแแ Storage-แจแ.
แซแแ แแแแแ แแแแแกแแแ แแกแแ แแก แแ แแก:
- แชแฎแ แแแ - แคแแแแแฃแ แ แชแฎแ แแแ แกแแชแแแจแ
- View - แฎแแแ, แแแ แขแฃแแแฃแ แ แชแฎแ แแแ Storage-แจแ
แแกแแแ แแ แกแแแแแก แฃแคแ แ แ แแฃแแ แแแขแแ แแแแแแแชแแแก แกแขแ แแขแแแแแแ:
- แแแแ แแแแแขแฃแแ - แแแแแขแแแแแ แแแขแแแ แแแ (แแแแ แคแแฅแขแแก แชแฎแ แแแแแแก); แแแแขแแแ แแฎแแแ แฎแแแแแ, แแแแแฎแแแแฃแแแ แจแแชแแแแแ แฎแแแแแ, แฌแแจแแแแ แฎแแแแแ แแฌแแแแแแแ
- แแคแแแแ แฃแแ - แแแแแแ แแ แฎแแแแ แฃแจแฃแแแแ, แแแแ แแ แแแแแฌแแแแแแก แ แแแแ แช CTE แกแฎแแ แแแแแแแแจแ
- แแแแแกแแแแ แ แกแฎแแ แกแขแ แแขแแแแ แจแแแแซแแแแ แแแแแแขแแ แกแแแฃแแแ แแแแก
แแแขแแ แแแแแแแชแแแก แกแขแ แแขแแแแแแแก แแแ แแ, แแ แกแแแแแก แแแแแ แแขแฃแแ แกแแชแแแแก แแแขแแแแแแชแแแก แจแแกแแซแแแแแแแแแ, แแแแแแแแแ:
- แคแแคแฅแแ: แแแ แแแแแแแแ แชแฎแ แแแแแ, แจแแ แฌแงแแแก แฅแชแแแ, แชแฎแ แแแแแแก แแแฏแแฃแคแแแ, แแ แแแขแแแแก แแแแแ แแแ, แฃแกแแคแ แแฎแ แฎแแแแแ
- Redshift: Distkey, Sortkey (แแแแแฎแแแ แแฃแแ, แ แแฃแแ), Late Binding Views
- bigquery: แชแฎแ แแแแแแก แแแงแแคแ แแ แแแฏแแฃแคแแแ, แจแแ แฌแงแแแก แฅแชแแแ, KMS แแแจแแคแแ แ, แแแแแแแแ แแ แขแแแแแ
- แแแแแ แฌแแแแ: แคแแแแแก แคแแ แแแขแ (parquet, csv, json, orc, delta), partition_by, clustered_by, buckets, incremental_strategy
แแแแแแแ แแฎแแ แแแญแแ แแแแ แจแแแแแแ แกแแชแแแแแ:
- แแแกแขแแ แแกแ
- Redshift
- bigquery
- แคแแคแฅแแ
- แแ แแกแขแ (แแแฌแแแแแ แแ)
- แแแแแ แฌแแแแ (แแแฌแแแแแ แแ)
- Microsoft SQL Server (แกแแแแแแแแแแแก แแแแแขแแ แ)
แแแแแ แแแแแฃแแฏแแแแกแแ แฉแแแแ แแแแแแ:
- แแแแแ แแแแฎแแแแ แแแกแ แจแแแกแแแ แแแแ แแแแแขแฃแแ (แแแแ แแแแแขแฃแแ)
- แแแแแ แแแแแแแขแแ แกแแแแแแขแแชแแแกแ แแ แแแฎแแ แแกแฎแแแแก แแแแแแจแแแ Redshift-แแกแแแแก
-- ะะพะฝัะธะณััะฐัะธั ะผะพะดะตะปะธ:
-- ะะฝะบัะตะผะตะฝัะฐะปัะฝะพะต ะฝะฐะฟะพะปะฝะตะฝะธะต, ัะฝะธะบะฐะปัะฝัะน ะบะปัั ะดะปั ะพะฑะฝะพะฒะปะตะฝะธั ะทะฐะฟะธัะตะน (unique_key)
-- ะะปัั ัะตะณะผะตะฝัะฐัะธะธ (dist), ะบะปัั ัะพััะธัะพะฒะบะธ (sort)
{{
config(
materialized='incremental',
unique_key='order_id',
dist="customer_id",
sort="order_date"
)
}}
{% set payment_methods = ['credit_card', 'coupon', 'bank_transfer', 'gift_card'] %}
with orders as (
select * from {{ ref('stg_orders') }}
where 1=1
{% if is_incremental() -%}
-- ะญัะพั ัะธะปััั ะฑัะดะตั ะฟัะธะผะตะฝะตะฝ ัะพะปัะบะพ ะดะปั ะธะฝะบัะตะผะตะฝัะฐะปัะฝะพะณะพ ะทะฐะฟััะบะฐ
and order_date >= (select max(order_date) from {{ this }})
{%- endif %}
),
order_payments as (
select * from {{ ref('order_payments') }}
),
final as (
select
orders.order_id,
orders.customer_id,
orders.order_date,
orders.status,
{% for payment_method in payment_methods -%}
order_payments.{{payment_method}}_amount,
{% endfor -%}
order_payments.total_amount as amount
from orders
left join order_payments using (order_id)
)
select * from final
แแแแแแแก แแแแแแแแแแฃแแแแแก แแ แแคแแแ
แแก แแกแแแ แแแแแแแแแแฃแแแแแก แฎแแ. แแแ แแกแแแ แชแแแแแแแ แ แแแแ แช DAG (แแแแแ แแฃแแ แแชแแแแฃแ แ แแ แแคแแแ).
DBT แแจแแแแแก แแ แแคแแแก แงแแแแ แแ แแแฅแขแแก แแแแแแแก แแแแคแแแฃแ แแชแแแก แกแแคแฃแซแแแแแ, แฃแคแ แ แกแฌแแ แแ, ref() แแแฃแแแแก แแแแแแแแจแ แกแฎแแ แแแแแแแแแแ. แแ แแคแแแแก แแ แกแแแแแ แกแแจแฃแแแแแแก แแแซแแแแ แแแแแแแแ แจแแแแแแ:
- แแแแแแแแแก แแแจแแแแ แกแฌแแ แ แแแแแแแแแแ แแแแ
- แแแขแ แแแแก แคแแ แแแ แแแแก แแแ แแแแแแแแแ
- แแแแแแแแฃแ แ แฅแแแแ แแคแแก แแแจแแแแ
แแ แแคแแแแก แแแแฃแแแแแแชแแแก แแแแแแแแ:
แแ แแคแแก แแแแแแฃแแ แแแแแซแ แแ แแก แแแแแแ; แแ แแคแแก แแแแแแแ แแแแแแแแฃแแแ แแแแแกแแฎแฃแแแแแ ref.
แแแแแชแแแแ แฎแแ แแกแฎแ แแ แแแแฃแแแแขแแชแแ
แแแ แแ แแแแแ แแแแแแแแแก แคแแ แแแ แแแแกแ, DBT แกแแจแฃแแแแแแก แแแซแแแแ แจแแแแแฌแแแ แแแแแ แ แแแ แแแจแแแแแแ (แแแแชแฎแแแแแแแ) แแแฆแแแฃแแ แแแแแชแแแแ แแแแ แแแแก แจแแกแแฎแแ, แ แแแแ แแชแแ:
- แแ แ แแฃแแ
- แฃแแแแแแฃแ แ
- แแแแแแแแแก แแแแแแแแแ - แ แแคแแ แแแชแแแแฃแ แ แแแแแแแแแ (แแแแแแแแแ, customer_id แจแแแแแแแแแก แชแฎแ แแแจแ แจแแแกแแแแแแแ id-แก แแแแแแขแแแแก แชแฎแ แแแจแ)
- แแแกแแฆแแแ แแแแจแแแแแแแแแแก แฉแแแแแแแแแแแก แจแแกแแแแแแกแแแ
แจแแกแแซแแแแแแแ แกแแแฃแแแ แ แขแแกแขแแแแก (แแแ แแแแฃแแ แแแแแชแแแแ แขแแกแขแแแแก) แแแแแขแแแ, แ แแแแ แแชแแ, แแแแแแแแแ, แจแแแแกแแแแแก % แแแแแฎแ แ แแแแแแแขแแ แแแแ แแ แแ แแฆแแก, แแ แแ แแแแ แแก, แแ แแ แแแแก แฌแแ. แแแแแกแแแแ แ แแแจแแแแ, แ แแแแแแช แฉแแแแงแแแแแแแฃแแแ แ แแแแ แช SQL แจแแแแแฎแแ, แจแแแซแแแแ แแแฎแแแก แขแแกแขแ.
แแ แแแแ, แแฅแแแ แจแแแแซแแแแ แแแแญแแ แแ แแ แแกแแกแฃแ แแแแ แแแแแฎแ แแแ แแ แจแแชแแแแแแ แกแแฌแงแแแแก แคแแแฏแ แแแจแ.
แแแแฃแแแแขแแชแแแก แแแแแกแแแ แแกแแ, DBT แฃแแ แฃแแแแแงแแคแก แแแฅแแแแแแแแก แแแขแแแแแแชแแแแแแก แแ แแแแแแขแแ แแแแก แแแแแขแแแแก, แแแ แกแแแแแก แแ แแแแ แชแแแแแแกแแแแก แแแแแแแก แแ แแฃแแแแช แแขแ แแแฃแขแแแแก แแแแแแ.
แแ, แ แแแแ แแแแแแงแฃแ แแแ แขแแกแขแแแแกแ แแ แแแแฃแแแแขแแชแแแก แแแแแขแแแ แแแแคแแแฃแ แแชแแแก แคแแแแแก แแแแแแ:
- name: fct_orders
description: This table has basic information about orders, as well as some derived facts based on payments
columns:
- name: order_id
tests:
- unique # ะฟัะพะฒะตัะบะฐ ะฝะฐ ัะฝะธะบะฐะปัะฝะพััั ะทะฝะฐัะตะฝะธะน
- not_null # ะฟัะพะฒะตัะบะฐ ะฝะฐ ะฝะฐะปะธัะธะต null
description: This is a unique identifier for an order
- name: customer_id
description: Foreign key to the customers table
tests:
- not_null
- relationships: # ะฟัะพะฒะตัะบะฐ ัััะปะพัะฝะพะน ัะตะปะพััะฝะพััะธ
to: ref('dim_customers')
field: customer_id
- name: order_date
description: Date (UTC) that the order was placed
- name: status
description: '{{ doc("orders_status") }}'
tests:
- accepted_values: # ะฟัะพะฒะตัะบะฐ ะฝะฐ ะดะพะฟัััะธะผัะต ะทะฝะฐัะตะฝะธั
values: ['placed', 'shipped', 'completed', 'return_pending', 'returned']
แแ แแ, แ แแแแ แแแแแแงแฃแ แแแ แแก แแแแฃแแแแขแแชแแ แแแแแ แแ แแแฃแ แแแแกแแแขแแ:
แแแแ แแแแ แแ แแแแฃแแแแ
DBT-แแก แแแแแแแ แแ แ แแแแแแแ, แ แแ แแแฎแแแก SQL แกแแ แแแขแแแแก แแแแ แแแ, แแ แแแแ แแแแฌแแแแก แแแแฎแแแ แแแแแแก แแซแแแแ แ แแ แคแฃแแฅแชแแแแแ แแแแแแ แ แกแแจแฃแแแแแแแ แกแแแฃแแแ แ แขแ แแแกแคแแ แแแชแแแแแก แจแแกแแฅแแแแแแ แแ แแ แแแแฃแแแแแก แแแแ แชแแแแแแกแแแแก.
แแแแ แแแแ แแ แแก แแแแกแขแ แฃแฅแชแแแแแกแ แแ แแแแแแแแฅแแแแแแแก แแแแ แแแ, แ แแแแแแแช แจแแแซแแแแ แแฌแแแแก แคแฃแแฅแชแแแแก แแแแแแแแจแ. แแแแ แ แกแแจแฃแแแแแแก แแแซแแแแ แฎแแแแฎแแ แแแแแแงแแแแ SQL แแแแแแแแกแ แแ แแ แแแฅแขแแแก แจแแ แแก DRY (Don't Repeat Yourself) แกแแแแแแแ แ แแ แแแชแแแแก แจแแกแแแแแแกแแ.
แแแแ แ แแแแแแแแ:
{% macro rename_category(column_name) %}
case
when {{ column_name }} ilike '%osx%' then 'osx'
when {{ column_name }} ilike '%android%' then 'android'
when {{ column_name }} ilike '%ios%' then 'ios'
else 'other'
end as renamed_product
{% endmacro %}
แแ แแแกแ แแแแแงแแแแแ:
{% set column_name = 'product' %}
select
product,
{{ rename_category(column_name) }} -- ะฒัะทะพะฒ ะผะฐะบัะพัะฐ
from my_table
DBT-แก แแแแฉแแแ แแแแแขแแก แแแแแฏแแ แ, แ แแแแแแช แแแแฎแแแ แแแแแแก แกแแจแฃแแแแแแก แแซแแแแก แแแแแแฅแแแงแแแ แแ แฎแแแแฎแแ แแแแแแงแแแแ แแแแแแแแฃแแแฃแ แ แแแแฃแแแแ แแ แแแแ แแแแ.
แแก แแแจแแแแก แแแแแแแแแแแแแก แฉแแขแแแ แแแแก แแ แแแแแงแแแแแแก, แ แแแแ แแชแแ:
dbt_utils : แแฃแจแแแแ แแแ แแฆแแแ/แแ แแกแแแ, แกแฃแ แแแแข แแแแแแจแแแแแ, แกแฅแแแแก แขแแกแขแแแแแ, Pivot/Unpivot แแ แกแฎแแ- แแแ แแแขแ แแแแก แจแแแแแแแแ แแกแแแ แกแแ แแแกแแแแกแแแแก, แ แแแแ แแชแแ
แคแแคแฅแแ ะธแแแแแแแ - แแแแแแแแแแแแ แแแแแชแแแแ แแแแแ แแขแฃแแ แแแฆแแแแแแแกแแแแก, แแแ.
Redshift แฎแ โ DBT แแแแ แแชแแแแแก แจแแกแแแแก แแแแฃแแ
แแแแแขแแแแก แกแ แฃแแ แกแแ แจแแแแซแแแแ แแฎแแแแ แแฅ
แแแแแ แฃแคแ แ แแแขแ แคแฃแแฅแชแแแแ
แแฅ แแ แแฆแแฌแแ แ แแแแแแแแ แกแฎแแ แกแแแแขแแ แแกแ แแแฎแแกแแแแแแแแก แแ แแแแฎแแ แชแแแแแแแก, แ แแแแแแกแแช แแ แแ แแฃแแแ แแแงแแแแแ แแแแแชแแแแ แกแแฌแงแแแแก แแกแแจแแแแแแแ.
แกแแแฃแจแแ แแ แแแก แแแ แแแแก แแแแแงแแคแ DEV - TEST - PROD
แแฃแแแแช แแ แแ แแ แแแแแ DWH แแแแกแขแแ แจแ (แกแฎแแแแแกแฎแแ แกแฅแแแแแจแ). แแแแแแแแแ, แจแแแแแแ แแแแแแแแฅแแแแแก แแแแแงแแแแแแ:
with source as (
select * from {{ source('salesforce', 'users') }}
where 1=1
{%- if target.name in ['dev', 'test', 'ci'] -%}
where timestamp >= dateadd(day, -3, current_date)
{%- endif -%}
)
แแก แแแแ แกแแขแงแแแกแแขแงแแแ แแแแแแก: แแแ แแแแแแแกแแแแก dev, แขแแกแขแ, ci แแแแฆแแ แแแแแชแแแแแ แแฎแแแแ แแแแ 3 แแฆแแก แแแแแแแแแแแจแ แแ แแ แ แแแขแ. แแแฃ แแ แแแ แแแแจแ แกแแ แแแแ แแแชแแแแแแ แกแฌแ แแคแ แแฅแแแแ แแ แแแแแแ แ แแกแฃแ แกแก แแแแแฎแแแก. แแแ แแแแแ แแแจแแแแแกแแก แแ แแแแแ แคแแแขแ แแก แแแแแแแ แแแแ แแแแแ แแ แแแฃแแ แแฅแแแแ.
แแแขแแ แแแแแแแชแแ แแแขแแ แแแขแแฃแแ แกแแแขแแก แแแแแ แแแแ
Redshift แแ แแก แกแแแขแแแแแ DBMS, แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แแแแงแแแแ แแแแแชแแแแ แจแแแฃแแจแแแก แแแแแ แแแแแแ แแแแแแฃแแ แชแแแแแฃแแ แกแแแขแแกแแแแก. แแแขแแแแแฃแ แ แแแแแ แแแแแแแก แแ แฉแแแแกแแก แจแแกแแซแแแแแแแ แแแกแแแก แแแแแแแก แจแแแชแแ แแแ 20-50%-แแ.
แแแแ แ
แแแแ แ แฎแแแแแฌแแ แ:
{{ compress_table(schema, table,
drop_backup=False,
comprows=none|Integer,
sort_style=none|compound|interleaved,
sort_keys=none|List<String>,
dist_style=none|all|even,
dist_key=none|String) }}
แแแแแก แแแแแแ แแแแแก
แแฅแแแ แจแแแแซแแแแ แแแแแแแ แแ แแแแแแแ แแแแแแแก แแแแแแฃแ แจแแกแ แฃแแแแแแ, แ แแแแแแช แจแแกแ แฃแแแแแ แแแจแแแแแแแ แแ แแแแแแแก แจแแฅแแแแก แแแกแ แฃแแแแแกแแแแแแ:
pre-hook: "{{ logging.log_model_start_event() }}"
post-hook: "{{ logging.log_model_end_event() }}"
แแแแแก แแแแฃแแ แกแแจแฃแแแแแแก แแแแชแแแ แฉแแฌแแ แแ แงแแแแ แกแแญแแ แ แแแขแแแแแแชแแแแแ แชแแแแ แชแฎแ แแแจแ, แ แแแแแแช แจแแแแแแแจแ แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แจแแแแฌแ แแแแแก แแฃแแแขแแกแ แแ แแแแแแแแกแแแแก.
แแกแ แแแแแแงแฃแ แแแ แกแแแแคแแ แแแชแแ แแแคแ Looker-แจแ แจแแกแแแแก แแแแแชแแแแแแก แกแแคแฃแซแแแแแ:
แกแแชแแแแก แแแแแแก แแแขแแแแขแแแแชแแ
แแฃ แแงแแแแแ แแแแแงแแแแแฃแแ แกแแชแแแแก แคแฃแแฅแชแแแแแแฃแ แแแแก แแแแแแ แ แแแคแแ แแแแแแก, แ แแแแ แแชแแ UDF (แแแแฎแแแ แแแแแก แแแแกแแแฆแแ แฃแแ แคแฃแแฅแชแแแแ), แแแจแแ แแ แคแฃแแฅแชแแแแแก แแแ แกแแแ แแแ, แฌแแแแแแก แแแแขแ แแแ แแ แแฎแแแ แแแแแจแแแแแแแก แแแขแแแแขแแแแ แแแฃแแ แแแจแแแแ แซแแแแแ แแแกแแฎแแ แฎแแแแแแ DBT-แจแ.
แฉแแแ แแแงแแแแแ UDF-แก แแแแแแจแ แฐแแจแแแแก, แแ.แคแแกแขแแก แแแแแแแแแก แแ แแแขแแแกแแแก แแแแแแแ แแแแก แแแแแกแแแแแแแแ.
แแแแ แแก แแแแแแแแ, แ แแแแแแช แฅแแแแก UDF-แก แแแแแกแแแแ แแฆแกแ แฃแแแแแก แแแ แแแแแ (dev, test, prod):
{% macro create_udf() -%}
{% set sql %}
CREATE OR REPLACE FUNCTION {{ target.schema }}.f_sha256(mes "varchar")
RETURNS varchar
LANGUAGE plpythonu
STABLE
AS $$
import hashlib
return hashlib.sha256(mes).hexdigest()
$$
;
{% endset %}
{% set table = run_query(sql) %}
{%- endmacro %}
Wheely-แจแ แฉแแแ แแแงแแแแแ Amazon Redshift-แก, แ แแแแแแช แแแคแฃแซแแแแฃแแแ PostgreSQL-แแ. Redshift-แแกแแแแก แแแแจแแแแแแแแแแ แ แแแฃแแแ แฃแแแ แจแแแแ แแแแ แกแขแแขแแกแขแแแ แชแฎแ แแแแแแ แแ แแแแแแแแกแฃแคแแแ แแแกแแแ แแแแแแ - ANALYZE แแ VACUUM แแ แซแแแแแแแ, แจแแกแแแแแแกแแ.
แแแแกแแแแแก แแ แซแแแแแแแ redshift_maintenance แแแแ แแแแ แงแแแแ แฆแแแ แกแ แฃแแแแแ:
{% macro redshift_maintenance() %}
{% set vacuumable_tables=run_query(vacuumable_tables_sql) %}
{% for row in vacuumable_tables %}
{% set message_prefix=loop.index ~ " of " ~ loop.length %}
{%- set relation_to_vacuum = adapter.get_relation(
database=row['table_database'],
schema=row['table_schema'],
identifier=row['table_name']
) -%}
{% do run_query("commit") %}
{% if relation_to_vacuum %}
{% set start=modules.datetime.datetime.now() %}
{{ dbt_utils.log_info(message_prefix ~ " Vacuuming " ~ relation_to_vacuum) }}
{% do run_query("VACUUM " ~ relation_to_vacuum ~ " BOOST") %}
{{ dbt_utils.log_info(message_prefix ~ " Analyzing " ~ relation_to_vacuum) }}
{% do run_query("ANALYZE " ~ relation_to_vacuum) %}
{% set end=modules.datetime.datetime.now() %}
{% set total_seconds = (end - start).total_seconds() | round(2) %}
{{ dbt_utils.log_info(message_prefix ~ " Finished " ~ relation_to_vacuum ~ " in " ~ total_seconds ~ "s") }}
{% else %}
{{ dbt_utils.log_info(message_prefix ~ ' Skipping relation "' ~ row.values() | join ('"."') ~ '" as it does not exist') }}
{% endif %}
{% endfor %}
{% endmacro %}
DBT แฆแ แฃแแแแ
แจแแกแแซแแแแแแแ DBT แกแแ แแแกแแ แแแแแงแแแแแ (Managed Service). แจแแแแก:
- แแแ IDE แแ แแแฅแขแแแแกแ แแ แแแแแแแแแก แจแแแฃแจแแแแแแกแแแแก
- แกแแแฃแจแแแก แแแแคแแแฃแ แแชแแ แแ แแแแแแแแ
- แแแ แขแแแ แแ แแแกแแฎแแ แฎแแแแแ แฌแแแแแ แแฃแ แแแแแแแ
- แกแแแขแ แแฅแแแแ แแ แแแฅแขแแก แแแแฃแแแแขแแชแแแ
- แแแแแแจแแ แแแ CI (แฃแฌแงแแแขแ แแแขแแแ แแชแแ)
แแแกแแแแ
DWH-แแก แแแแแแแแแ แแ แแแฎแแแ แแแ แแกแแแแแ แกแแกแแแแแแแ แแ แกแแกแแ แแแแแ แฎแแแแ, แ แแแแ แช แกแแฃแแแก แแแแแแ. DBT แจแแแแแแ Jinja, แแแแฎแแแ แแแแแก แแแคแแ แแแแแแแ (แแแแฃแแแแ), แจแแแแแแแแแ, แจแแแกแ แฃแแแแแแ แแ แแแแแขแแก แแแแแฏแแ แ. แแ แแแแแแแขแแแแก แแแแ แแแแแแแแ แแฅแแแ แแแแฆแแแ แกแ แฃแ แกแแแฃแจแแ แแแ แแแแก แแฅแแแแ แแแแแชแแแแ แกแแฌแงแแแแกแแแแก. แแฆแแก DWH-แจแ แขแ แแแกแคแแ แแแชแแแก แแแ แแแแก แฃแแแแแกแ แแแ แแ แแ แกแแแแแก.
แ แฌแแแแ, แ แแแแแกแแช แแแฐแงแแแแแแ DBT-แแก แจแแแฅแแแแแแแ, แฉแแแแงแแแแแแแฃแแแ แจแแแแแแแแแ แแ:
- แแแแ แแ แแ แ GUI, แแ แแก แกแแฃแแแแแกแ แแแกแขแ แแฅแชแแ แ แแฃแแ แแแแแแขแแแฃแ แ แแแแแแแก แแแแแกแแฎแแขแแแแ
- แแแแแชแแแแแแแ แแฃแจแแแแ แฃแแแ แแแแ แแแก แกแแฃแแแแแกแ แแ แแฅแขแแแแก แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแแก แแแแแแแ แแแจแ (แแ แแแ แแแฃแแ แแแแแแแ แแ)
- แแ แแขแแแฃแแ แแแแแชแแแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แ แฃแแแ แแแแขแ แแแแแแแแแก แแแแฎแแแ แแแแแแ แกแแแแแแแแแแแก แแแแ , แ แแแแ แช แฆแแ แแแแแก แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแ
- แแ แ แแฎแแแแ แแแแแแขแแแฃแ แ แฎแแแกแแฌแงแแแแ, แแ แแแแ แแแแแช แกแฃแ แฃแคแ แ แแ แฃแคแ แ แแแฎแแแแ แฆแแ แฌแงแแ แแก แกแแแแแแแแแแแก แกแแแฃแแ แแแ
แแ แซแแ แแแแแแ แ แฌแแแแแ แฌแแ แแแจแแ แแ แแแฃแฅแขแ, แ แแแแแกแแช แแฆแแก 850-แแ แแแขแ แแแแแแแแ แแงแแแแแก แแ แแกแแแ แฅแแแแแ แแแแ แกแแแแขแแ แแกแ แแแคแแ แแแแแแก แกแแคแฃแซแแแแก, แ แแแแแแช แจแแแฅแแแแแ แแแแแแแแจแ.
แแแแแขแแ แแกแแแฃแแแแแแแก แแ แแก แฆแแ แแแแแแแแแแก แแแแแ, แ แแแแแแช แฉแแแแขแแ แ แ แแแแแแแแ แแแแก แฌแแ OTUS-แจแ แฆแแ แแแแแแแแแแก แคแแ แแแแแจแ -
แแแ แแ DBT-แแกแ แแ Data Warehousing-แแกแ, แ แแแแ แช Data Engineer แแฃแ แกแแก แแแฌแแแ OTUS แแแแขแคแแ แแแแ, แแ แแ แฉแแแ แแแแแแแแ แแแกแฌแแแแแ แแแแแแแแแแแก แกแฎแแ แ แแแแแแแขแฃแ แแ แแแแแแแแ แแแ แแแแแแแ:
- แแ แฅแแขแแฅแขแฃแ แฃแแ แแแแชแแคแชแแแแ แแแแ แแแแแชแแแแแแก แแแแแแแชแแแแแกแแแแก
- แแแแ แฏแแจแแ Spark แแ Spark Streaming-แแ
- แแแแแชแแแแ แฌแงแแ แแแแแก แฉแแขแแแ แแแแก แแแแแแแแแกแ แแ แแแกแขแ แฃแแแแขแแแแก แจแแกแฌแแแแ
- แแแแแแขแแแฃแ แ แแแขแ แแแแแแก แแแแแ DWH-แจแ
- NoSQL แชแแแแแแ: HBase, Cassandra, ElasticSearch
- แแแแแขแแ แแแแแกแ แแ แแ แแแกแขแ แแ แแแแก แแ แแแชแแแแแ
- แกแแแแแแ แแ แแแฅแขแ: แงแแแแ แฃแแแ -แฉแแแแแแแก แแแแ แแแแแแแ แแแแขแแ แฃแแ แแฎแแ แแแญแแ แแก แฅแแแจ
แแแฃแแแแ:
DBT แแแแฃแแแแขแแชแแ - แจแแกแแแแแ - แแคแแชแแแแฃแ แ แแแแฃแแแแขแแชแแแแแแแ แแขแฃแแแ แ แ แแ แแก dbt? โ แแแแแฎแแแแ DBT-แแก แแ แ-แแ แแ แแแขแแ แแก แกแขแแขแแแกแแแแแชแแแแ แแจแแแแแแก แแแกแขแ แฃแแแแขแ Amazon Redshift Storage-แแกแแแแก โ YouTube, OTUS แฆแแ แแแแแแแแแแก แฉแแฌแแ แGreenplum-แแก แแแชแแแแ โ แจแแแแแแ แฆแแ แแแแแแแแแ แแ แแก 15 แฌแแแก 2020 แแแแกแแแแแแชแแแแ แแแแแแแ แแแก แแฃแ แกแ - OTUSแแแแฌแแคแแแฃแแ แแแแแแขแแแแก แกแแแฃแจแแ แแแแแแแก แจแแฅแแแ โ แแแแแฎแแแแ แแแแแชแแแแ แแ แแแแแแขแแแแก แแแแแแแแกแแ แแ แฆแแ แแแแแก แแแแแแขแแแแกแแแแก โ แแแแแแขแแแแก แแแแแฃแชแแ แแ แฆแแ แฌแงแแ แแก แแแแแแแแฃแฌแงแแแขแ แแแขแแแ แแชแแ แแ แแแขแแแแขแฃแ แ Build แขแแกแขแแ แแแ dbtCloud-แแ โ CI-แแก แแแแแแก แแ แแแชแแแแแ DBT-แแก แแแแแงแแแแแแDBT แแแแแแแแแแก แแแฌแงแแแ โ แแ แแฅแขแแแ, แแแแแฏ-แแแแแฏ แแแกแขแ แฃแฅแชแแแแ แแแแแฃแแแแแแแแ แแฃแจแแแแแกแแแแกJaffle shop โ Github DBT แแแแแแแแแ โ Github, แกแแแแแแแแแแแแแแ แแ แแแฅแขแแก แแแแ
แฌแงแแ แ: www.habr.com