{% 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
راځئ چې د 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 په ماډل او حتی د ځانګړتیاوو په کچه د میټاډاټا او تبصرو اضافه کولو، نسخه کولو، او ویشلو میکانیزم چمتو کوي.
دلته هغه څه دي چې د ازموینې او اسنادو اضافه کول د تنظیم کولو فایل کچې په څیر ښکاري:
- 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 سکریپټونو سیټ شي ، مګر کاروونکو ته د دوی د خپلو بدلونونو رامینځته کولو او د دې ماډلونو توزیع کولو لپاره قوي او بډایه وسیله چمتو کول دي.
میکرو د ساختمانونو او بیانونو مجموعه ده چې په ماډلونو کې د فنکشن په توګه ویل کیدی شي. میکرو تاسو ته اجازه درکوي چې د DRY (خپل ځان تکرار نه کړئ) د انجینرۍ اصولو سره سم د ماډلونو او پروژو ترمینځ SQL بیا وکاروئ.
د میکرو بېلګه:
{% 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
دلته به زه یو څو نور په زړه پورې ځانګړتیاوې او تطبیقونه بیان کړم چې ټیم او زه یې د ډیټا ګودام جوړولو لپاره کاروم ویلې.
د چلولو وخت چاپیریال جلا کول 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، test، ci یوازې د تیرو 3 ورځو لپاره ډاټا واخلئ او نور نه. دا دی، په دې چاپیریال کې چلول به خورا ګړندي وي او لږو سرچینو ته اړتیا ولري. کله چې په چاپیریال کې روان وي پروډ د فلټر حالت به له پامه غورځول شي.
د بدیل کالم کوډ کولو سره مواد کول
Redshift یو کالم DBMS دی چې تاسو ته اجازه درکوي د هر انفرادي کالم لپاره د ډیټا کمپریشن الګوریتم تنظیم کړئ. د غوره الګوریتم غوره کول کولی شي د ډیسک ځای 20-50٪ کم کړي.
میکرو redshift.compress_table د تحلیل کمپریشن کمانډ به اجرا کړي ، د وړاندیز شوي کالم کوډ کولو الګوریتمونو سره یو نوی جدول رامینځته کړي ، د ځانګړي قطع کولو کیلي (dist_key) او ترتیب کولو کیلي (sort_key) ، دې ته ډیټا لیږدوي ، او که اړتیا وي ، زاړه کاپي حذف کړئ.