dbt рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдФрд░ рд╕реЗрдЯрдЕрдк
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП рд╣рдо Google Cloud BigQuery рдХреЛ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХрд╛ рдлрд╝реНрд░реА рдЯрд┐рдпрд░ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░реАрди рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЖрдк рдЕрдкрдиреЗ Google Cloud рдЕрдХрд╛рдЙрдВрдЯ рдореЗрдВ BigQuery рд╕рдХреНрд░рд┐рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо Python рдФрд░ pip рдореИрдиреЗрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЛрдХрд▓реА dbt рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВрдЧреЗ, рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдмрдирд╛рдПрдБрдЧреЗ рдФрд░ рд╕реИрдВрдкрд▓ рдореЙрдбрд▓реНрд╕ рд╡ рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред
рдЕрдкрдиреЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:
pip install virtualenv
mkdir dbt
cd dbt
virtualenv dbt_env -p python3.9
source dbt_env/bin/activate
pip install -r requirements.txt
рд╣рдорд╛рд░реЗ requirements.txt рдореЗрдВ рдирд┐рдореНрди рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬрд╝ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:
dbt-core==1.8.6
dbt-bigquery==1.8.2
dbt-extractor==0.5.1
dbt-semantic-interfaces==0.5.1
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд╢реЗрд╖ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдпрд╣ рдХрд░реЗрдВрдЧреЗ:
- Google рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рд░реНрд╡рд┐рд╕ рдЕрдХрд╛рдЙрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ dbt рдХреЛ BigQuery рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВрдЧреЗред
- рдЕрдкрдиреЗ рд╕реИрдВрдкрд▓ рдореЙрдбрд▓реНрд╕ рдмрдирд╛рдПрдБрдЧреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЪрд▓рд╛рдПрдБрдЧреЗред
- рдЕрдкрдиреЗ рдореЙрдбрд▓реЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдЬреЛрдбрд╝реЗрдВрдЧреЗред
- рдбреЙрдХреНрдпреБрдореЗрдВрдЯреЗрд╢рди рдЬрдирд░реЗрдЯ рдХрд░реЗрдВрдЧреЗред
рдЖрдЗрдП, рдЕрдкрдиреЗ dbt рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд┐рд╕ рдЕрдХрд╛рдЙрдВрдЯ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдмрдирд╛рдПрдБ:
- рдЕрдкрдиреЗ Google Cloud IAM рдХрдВрд╕реЛрд▓ рдкрд░ рдЬрд╛рдПрдБ, рдФрд░ тАЬService AccountsтАЭ рд╕реЗрдХреНрд╢рди рдореЗрдВ BigQuery Admin рдкрд░рдорд┐рд╢рдиреНрд╕ рдХреЗ рд╕рд╛рде рдирдпрд╛ рд╕рд░реНрд╡рд┐рд╕ рдЕрдХрд╛рдЙрдВрдЯ рдмрдирд╛рдПрдБ:

Google Cloud рдореЗрдВ BigQuery рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд┐рд╕ рдЕрдХрд╛рдЙрдВрдЯ рдмрдирд╛рдирд╛ред рдЪрд┐рддреНрд░: рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ред
- рд╕рд░реНрд╡рд┐рд╕ рдЕрдХрд╛рдЙрдВрдЯ рдХреЗ рд▓рд┐рдП рдирдпрд╛ JSON рдХреА рдмрдирд╛рдПрдБ рдФрд░ рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдЬрдЧрд╣ рдкрд░ рд░рдЦреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдЧреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрдбрд╝реЗрдЧреА:

рд╕рд░реНрд╡рд┐рд╕ рдЕрдХрд╛рдЙрдВрдЯ рдкреНрд░рд╛рдЗрд╡реЗрдЯ рдХреА рдХреЛ JSON рдлрд╝реЙрд░реНрдореЗрдЯ рдореЗрдВ рд╕реЗрд╡ рдХрд░рдирд╛ред рдЪрд┐рддреНрд░: рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ред
- рдЕрдм, рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ
dbt initрдХрдорд╛рдВрдб рдЪрд▓рд╛рдХрд░ рдЕрдкрдирд╛ dbt рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВред┬а
- рдкреНрд░реЙрдореНрдкреНрдЯреНрд╕ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реБрдП рдЕрдкрдиреЗ dbt рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдФрд░ BigQuery рд╕рд░реНрд╡рд┐рд╕ рдЕрдХрд╛рдЙрдВрдЯ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХрд╛ рдкрд╛рде рджреЗрдВред
рд╕реЗрдЯрдЕрдк рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╕рдВрджреЗрд╢ рджрд┐рдЦреЗрдЧрд╛:┬а
19:18:45 Profile my_dbt written to /Users/mike/.dbt/profiles.yml using target's profile_template.yml and your supplied values. Run 'dbt debug' to validate the connection.
рдФрд░ рдлрд╝реЛрд▓реНрдбрд░ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
.
тФЬтФАтФА my_dbt
тФВ тФЬтФАтФА README.md
тФВ тФЬтФАтФА analyses
тФВ тФЬтФАтФА dbt_project.yml
тФВ тФЬтФАтФА macros
тФВ тФЬтФАтФА models
тФВ тФЬтФАтФА polybox-data-dev.json
тФВ тФЬтФАтФА seeds
тФВ тФЬтФАтФА snapshots
тФВ тФФтФАтФА tests
тФЬтФАтФА dbt_env
тФВ тФЬтФАтФА bin
тФВ тФЬтФАтФА lib
тФВ тФФтФАтФА pyvenv.cfg
тФЬтФАтФА logs
тФВ тФФтФАтФА dbt.log
тФЬтФАтФА readme.md
тФФтФАтФА requirements.txt
рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ profiles.yml рд╣рдорд╛рд░реА рд▓реЛрдХрд▓ рдорд╢реАрди рдХреЗ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рддреЛ рдЖрдЗрдП рдЗрд╕реЗ рд╢рд┐рдлрд╝реНрдЯ рдХрд░рддреЗ рд╣реИрдВред
cd my_dbt
touch profiles.yml
рдЕрдВрдд рдореЗрдВ, profiles.yml рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдирд╛рдо рдФрд░ Google рд╕рд░реНрд╡рд┐рд╕ рдЕрдХрд╛рдЙрдВрдЯ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЗ рдЕрдиреБрд░реВрдк рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВ:
my_dbt:
target: dev
outputs:
dev:
type: bigquery
method: service-account-json
project: dbt_bigquery_dev # replace with your-bigquery-project-name
dataset: source
threads: 4 # Must be a value of 1 or greater
# [OPTIONAL_CONFIG](#optional-configurations): VALUE
# These fields come from the service account json keyfile
keyfile_json:
type: service_account
project_id: your-bigquery-project-name-data-dev
private_key_id: bd709bd92708a38ae33abbff0
private_key: "-----BEGIN PRIVATE KEY-----\nMIIEv...
...
...
...q8hw==\n-----END PRIVATE KEY-----\n"
client_email: some@your-bigquery-project-name-data-dev.iam.gserviceaccount.com
client_id: 1234
auth_uri: https://accounts.google.com/o/oauth2/auth
token_uri: https://oauth2.googleapis.com/token
auth_provider_x509_cert_url: https://www.googleapis.com/oauth2/v1/certs
client_x509_cert_url: https://www.googleapis.com/robot/v1/metadata/x509/educative%40bq-shakhomirov.iam.gserviceaccount.com
рдмрд╕ рдЗрддрдирд╛ рд╣реА! рдЕрдм рд╣рдо рдЕрдкрдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрдореНрдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред┬а
- рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рдпрд╣ рдЪрд▓рд╛рдПрдБ:
export DBT_PROFILES_DIR='.'
dbt compile
рдЖрдЙрдЯрдкреБрдЯ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
(dbt_env) mike@MacBook-Pro my_dbt % dbt compile
19:47:32 Running with dbt=1.8.6
19:47:33 Registered adapter: bigquery=1.8.2
19:47:33 Unable to do partial parsing because saved manifest not found. Starting full parse.
19:47:34 Found 2 models, 4 data tests, 479 macros
19:47:34
19:47:35 Concurrency: 4 threads (target='dev')
рд╣рдорд╛рд░рд╛ рд╢реБрд░реБрдЖрддреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрдЕрдк рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред
dbt рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрдЯреНрд░рдХреНрдЪрд░
рд╣рдо рдЕрдкрдирд╛ dbt рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЗрд╕ рддрд░рд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рд╣реЛ рддрдерд╛ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд░реНрд╢рд╛рдПред
рдореИрдВ рд╕рд▓рд╛рд╣ рджреВрдБрдЧрд╛/рджреВрдБрдЧреА рдХрд┐ рдЖрдк рдЕрдкрдиреЗ dbt рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдФрд░ рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛рдмреЗрд╕ рдирд╛рдореЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ, рддрд╛рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯреНрд╕тАФрдкреНрд░реЛрдбрдХреНрд╢рди, рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдФрд░ рдЯреЗрд╕реНрдЯрд┐рдВрдЧтАФрдХреЛ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рдХрд░ рд╕рдХреЗрдВред┬а
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдВрдЧрдарди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЧрд▓рдд рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдореЗрдВ рдЖрдХрд╕реНрдорд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рдордЧреНрд░ рдбреЗрдЯрд╛ рдкреНрд░рдмрдВрдзрди рдФрд░ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╕реНрдерд┐рд░рддрд╛ рдмрдврд╝рддреА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рд╣рдо рдЗрди рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯреНрд╕ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдореИрдиреЗрдЬ рдФрд░ рдореЗрдВрдЯреЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдбрдХреНрд╢рди рдбреЗрдЯрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣реЗ рдФрд░ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдпрд╛ рдЯреЗрд╕реНрдЯ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдЕрдкреНрд░рднрд╛рд╡рд┐рдд рд░рд╣реЗред┬а
рд╡рд┐рднрд┐рдиреНрди рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯреНрд╕ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдирд╛рдордХрд░рдг рднреА рд╕реБрд╕рдВрдЧрдд рдФрд░ рд╕рдВрд░рдЪрд┐рдд рдврдВрдЧ рд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╕uffixes (_prod, _dev, _test) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯреНрд╕ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд╣рдЪрд╛рдирдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рд╡ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рд╕реБрдЧрдо рд╣реЛрддреЗ рд╣реИрдВред

рдкреНрд░реЛрдбрдХреНрд╢рди рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдореЗрдВ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреА рд╡рд┐рднрд┐рдиреНрди рд▓реЗрдпрд░реЗрдВред рдЪрд┐рддреНрд░: рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдореБрдЦреНрдп рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд▓реЗрдпрд░реНрд╕ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдирд╛рдордХрд░рдг рдХрдиреНрд╡реЗрдВрд╢рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдиреЗрдорд┐рдВрдЧ рдореЗрдВ raw_ рдФрд░ base_ рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
Schema/Dataset Tanle
RAW_DEV SERVER_DB_1 -- mocked data
RAW_DEV SERVER_DB_2 -- mocked data
RAW_DEV EVENTS -- mocked data
RAW_PROD SERVER_DB_1 -- real production data from pipelines
RAW_PROD SERVER_DB_2 -- real production data from pipelines
RAW_PROD EVENTS -- real production data from pipelines
...
BASE_PROD EVENTS -- enriched data
BASE_DEV EVENTS -- enriched data
...
ANALYTICS_PROD REPORTING -- materialized queries and aggregates
ANALYTICS_DEV REPORTING
ANALYTICS_PROD AD_HOC -- ad-hoc queries and views
рдЗрди рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛рдмреЗрд╕ рдирд╛рдореЛрдВ рдХреЛ рдбрд╛рдпрдиреЗрдорд┐рдХ рд░реВрдк рд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ dbt рдореИрдХреНрд░реЛ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдпрд╣ рдХрд╛рдо рд╕реНрд╡рддрдГ рд╕рдВрднрд╛рд▓ рд▓реЗред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реБрдП, рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреБрдХреНрдд рдбреЗрдЯрд╛ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдореЗрдВ рд╕рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдирд╛рдо рдЙрдкрдпреЛрдЧ рд╣реЛрдВ, рдФрд░ рд╣рд░ рдмрд╛рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдореИрдиреНрдпреБрдЕрд▓реА рдПрдбрд┐рдЯ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рди рдкрдбрд╝реЗред┬а
рдЖрдЗрдП рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рджреЗрдЦреЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдореИрдХреНрд░реЛ рд╣реИ рдЬреЛ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдХреАрдорд╛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдореЗрдВ рд╣реИрдВ:
-- cd my_dbt
-- ./macros/generate_schema_name.sql
{% macro generate_schema_name(custom_schema_name, node) -%}
{%- set default_schema = target.schema -%}
{%- if custom_schema_name is none -%}
{{ default_schema }}
{%- else -%}
{{ custom_schema_name | trim }}
{%- endif -%}
{%- endmacro %}
рдЕрдм, рдЬрдм рднреА рд╣рдо рдЕрдкрдиреЗ рдореЙрдбрд▓реНрд╕ рдХреЛ рдХрдореНрдкрд╛рдЗрд▓ рдХрд░реЗрдВрдЧреЗ, dbt рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ рдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрд╡рддрдГ рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛рдмреЗрд╕ рдирд╛рдо рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ред рдпрд╛рдиреА рдХрдореНрдкрд╛рдЗрд▓реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рд╕рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдирд╛рдо рдЗрдВрдЬреЗрдХреНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдореЙрдбрд▓реНрд╕ рдЙрдЪрд┐рдд рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯтАФрдкреНрд░реЛрдбрдХреНрд╢рди, рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдпрд╛ рдЯреЗрд╕реНрдЯрд┐рдВрдЧтАФрдХреЗ рдЕрдиреБрд░реВрдк рд░рд╣реЗрдВрдЧреЗред┬а
рдЗрд╕ рдлрд╝реАрдЪрд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдХреЗ, рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдирд╛рдореЛрдВ рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдФрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдФрд░ рд╕рдЯреАрдХ рдмрдирддрд╛ рд╣реИред┬а
рдпреЗ рдЖрд╡рд╢реНрдпрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣рдо рдЕрдкрдиреЗ рдореЙрдбрд▓реЛрдВ рдХреЗ рд▓рд┐рдП properties.yml рдореЗрдВ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
# my_dbt/models/example/properties.yml
version: 2
models:
- name: table_a
config:
description: "A starter dbt model"
schema: |
{%- if target.name == "dev" -%} raw_dev
{%- elif target.name == "prod" -%} raw_prod
{%- elif target.name == "test" -%} raw_test
{%- else -%} invalid_database
{%- endif -%}
columns:
- name: id
description: "The primary key for this table"
tests:
- unique
- not_null
- name: table_b
config:
description: "A starter dbt model"
schema: |
{%- if target.name == "dev" -%} analytics_dev
{%- elif target.name == "prod" -%} analytics_prod
{%- elif target.name == "test" -%} analytics_test
{%- else -%} invalid_database
{%- endif -%}
columns:
- name: id
description: "The primary key for this table"
tests:
- unique
- not_null
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, dbt рдореЗрдВ Jinja рд╕рдкреЛрд░реНрдЯ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдмреЗрд╕рд┐рдХ рдХрдВрдбреАрд╢рдирд▓ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдЬрд┐рдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рд╣рдо .yml рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ Jinja рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ рдХреЗ рдЬрд╝рд░рд┐рдП рд╕рд╛рдзрд╛рд░рдг рдХрдВрдбреАрд╢рдирд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрдиреНрд╣реЗрдВ рдЙрджреНрдзрд░рдг-рдЪрд┐рдиреНрд╣реЛрдВ рдореЗрдВ рдмрдВрдж рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯрд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдордп рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╣реЛ рд╕рдХреЗред
рдЖрдЗрдП, dbt compile рдХрдорд╛рдВрдб рдЪрд▓рд╛рдХрд░ рджреЗрдЦреЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:
(dbt_env) mike@Mikes-MacBook-Pro my_dbt % dbt compile -s table_b -t prod
18:43:43 Running with dbt=1.8.6
18:43:44 Registered adapter: bigquery=1.8.2
18:43:44 Unable to do partial parsing because config vars, config profile, or config target have changed
18:43:45 Found 2 models, 480 macros
18:43:45
18:43:46 Concurrency: 4 threads (target='prod')
18:43:46
18:43:46 Compiled node 'table_b' is:
-- Use the ref function to select from other models
select *
from dbt_bigquery_dev.raw_prod.table_a
where id = 1
dbt рдореЗрдВ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛
dbt рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдмреЗрд╣рдж рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝реЗрд╢рди рдлрд╝реАрдЪрд░ рд╣реИред рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ SQL рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдФрд░ рдореИрдХреНрд░реЛрдЬрд╝ рджреЛрдиреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрдиреНрд╣реЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдЗрд╕ рддрд░рд╣ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
dbt run -m table_b -t dev --vars '{my_var: my_value}'
рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рдореБрдЦреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ dbt_project.yml рдореЗрдВ рдбрд┐рдХреНрд▓реЗрдпрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╕реНрдирд┐рдкреЗрдЯ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
name: 'my_dbt'
version: '1.0.0'
config-version: 2
...
...
...
# In this example config, we tell dbt to build all models in the example/
# directory as views. These settings can be overridden in the individual model
# files using the {{ config(...) }} macro.
models:
polybox_dbt:
# Config indicated by + and applies to all files under models/example/
example:
# +materialized: view
# schema: |
# {%- if target.name == "dev" -%} analytics_dev_mike
# {%- elif target.name == "prod" -%} analytics_prod
# {%- elif target.name == "test" -%} analytics_test
# {%- else -%} invalid_database
# {%- endif -%}
vars:
my_var: ""
рдЖрдЗрдП рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ dbt рдореЗрдВ рдХрд╕реНрдЯрдо рдЯреЗрдмрд▓ рдирд╛рдо (рдПрд▓рд┐рдпрд╕) рдмрдирд╛рдПрдБред┬а
рдпрджрд┐ рдХреЛрдИ рдПрд▓рд┐рдпрд╕ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдореЙрдбрд▓ рдХрд╛ рдореВрд▓ рдирд╛рдо (рдлрд╝рд╛рдЗрд▓ рдирд╛рдо) рдПрд▓рд┐рдпрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕рд░рд▓ рд▓реЙрдЬрд┐рдХ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕реЗрдЯрдЕрдк рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореЙрдбрд▓ рдпрд╛ рддреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдПрд▓рд┐рдпрд╕ рд╕реЗ рдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╛рдо рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рд╣реЛрдВред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рдиреИрд▓рд┐рдЯреА рдХрд╛ рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди рдиреАрдЪреЗ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯреНрд╕ рдореЗрдВ рдореЙрдбрд▓реНрд╕ рдХреЗ рдирд╛рдордХрд░рдг рдФрд░ рд░реЗрдлрд╝рд░реЗрдВрд╕рд┐рдВрдЧ рдореЗрдВ рд▓рдЪреАрд▓рд╛рдкрди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ:
-- get_custom_alias.sql
{% macro generate_alias_name(custom_alias_name=none, node=none) -%}
{%- if custom_alias_name -%}
{{ custom_alias_name | trim }}
{%- elif node.version -%}
{{ return(node.name ~ "_v" ~ (node.version | replace(".", "_"))) }}
{%- else -%}
{{ node.name }}
{%- endif -%}
{%- endmacro %}
рдЖрдЗрдП рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВред рдпрд╣ рд╕реЗрдЯрдЕрдк рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ (рд╕реНрдЯреЗрдЬрд┐рдВрдЧ) рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдбреЗрдЯрд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдХрд╛рдо рдореЗрдВ рдЯрдХрд░рд╛рд╡ рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдо рд╣реИред┬а
рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЗрдВрдЬреАрдирд┐рдпрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд╕рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрдЬрд╝ (рдЯреЗрдмрд▓реНрд╕, рд╡реНрдпреВрдЬрд╝ рдЖрджрд┐) рдореЗрдВ рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рдирд╛рдо рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПред┬а
рдЖрдЗрдП generate_alias_name.sql рдореИрдХреНрд░реЛ рдмрдирд╛рдПрдБ:
--my_dbt/macros/generate_alias_name.sql
{% macro generate_alias_name(custom_alias_name=none, node=none) -%}
{% set apply_alias_suffix = var('apply_alias_suffix') %}
{%- if custom_alias_name -%}
{{ custom_alias_name }}{{ apply_alias_suffix | trim }}
{%- elif node.version -%}
{{ return(node.name ~ "_v" ~ (node.version | replace(".", "_"))) }}
{%- else -%}
{{ node.name }}{{ apply_alias_suffix | trim }}
{%- endif -%}
{%- endmacro %}
рдЕрдкрдиреЗ рдирдП рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ dbt_project.yml рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВ рдФрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рдпрд╣ рдЪрд▓рд╛рдПрдБ:
$ dbt compile -m table_b -t dev --vars '{apply_alias_suffix: _mike}'
рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рджрд┐рдЦреЗрдЧрд╛:
08:58:06 Running with dbt=1.8.6
08:58:07 Registered adapter: bigquery=1.8.2
08:58:07 Unable to do partial parsing because config vars, config profile, or config target have changed
08:58:07 Unable to do partial parsing because a project config has changed
08:58:08 Found 2 models, 481 macros
08:58:08
08:58:08 Concurrency: 4 threads (target='dev')
08:58:08
08:58:08 Compiled node 'table_b' is:
-- Use the ref function to select from other models
select *
from bigquery-data-dev.raw_dev.table_a_mike
where id = 1
рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рд╡реЗрд░рд┐рдПрдмрд▓ рдЯреЗрдмрд▓ рдирд╛рдо рдореЗрдВ рдЬреБрдбрд╝ рдЧрдпрд╛: table_a_mikeред
рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд▓реЗрдпрд░реЗрдВ
рдпрд╣ рд╕реЗрдХреНрд╢рди рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЛ рдХреИрд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░реЗрдВтАФрдЗрд╕реА рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред dbt рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
.
тФФтФАтФА models
тФФтФАтФА some_data_source
тФЬтФАтФА _data_source_model__docs.md
тФЬтФАтФА _data_source__models.yml
тФЬтФАтФА _sources.yml -- raw data table declarations
тФФтФАтФА base -- base transformations, e.g. JSON to cols
| тФЬтФАтФА base_transactions.sql
| тФФтФАтФА base_orders.sql
тФФтФАтФА analytics -- deeply enriched data prod grade data, QA'ed
тФЬтФАтФА _analytics__models.yml
тФЬтФАтФА some_model.sql
тФФтФАтФА some_other_model.sql
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рд╣рдореЗрд╢рд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрддрд╛/рджреЗрддреА рд╣реВрдБ рдХрд┐ рдмреБрдирд┐рдпрд╛рджреА (base) рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд▓реЗрдпрд░ рдЬрд┐рддрдиреА рд╣реЛ рд╕рдХреЗ рд╕рд╛рдлрд╝ рдФрд░ рд╕реАрдзреА-рд╕рд╛рджреА рд░рд╣реЗ, рдФрд░ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рд╣реА рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рд▓рдЧрд╛рдП рдЬрд╛рдПрдБред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдРрд╕рд╛ base_ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд▓реЗрдпрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рд╡ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЙрд▓рдо рд╕реНрддрд░ рдкрд░ рдиреНрдпреВрдирддрдо рдбреЗрдЯрд╛ рдореИрдирд┐рдкреНрдпреБрд▓реЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реЛред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдереЛрдбрд╝рд╛-рдмрд╣реБрдд рдореИрдирд┐рдкреНрдпреБрд▓реЗрд╢рди рд▓рд╛рднрдХрд╛рд░реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖рдХрд░ рдХреНрд╡реЗрд░реА рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдПред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдмреЗрд╕ рд▓реЗрдпрд░ рдкрд░ рдЫреЛрдЯреЗ рд╕рдорд╛рдпреЛрдЬрди рджрдХреНрд╖рддрд╛ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╕реБрдзрд╛рд░ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВтАФрдЗрд╕рд▓рд┐рдП рд╕рд╛рджрдЧреА рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмреАрдЪ рд╕рдВрддреБрд▓рди рдмрдирд╛рдирд╛ рдЙрдЪрд┐рдд рд╣реИред рдРрд╕реЗ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬреЙрдЗрди рдпрд╛ рдкрд╛рд░реНрдЯрд┐рд╢рдирд┐рдВрдЧ рдлрд╝рд┐рд▓реНрдЯрд░ рдЬреЛрдбрд╝рдирд╛ рдЙрдЪрд┐рдд рдард╣рд░рддрд╛ рд╣реИред
рдбреЗрдЯрд╛ рдореЙрдбрд▓реЛрдВ рдФрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рддрдХрдиреАрдХреЛрдВ рдХреЛ рдЕрдкрдирд╛рдирд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИ:
- рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдЕрдВрддрд┐рдо
biz_рдФрд░mart_рд▓реЗрдпрд░реЛрдВ рдореЗрдВ рдкрд░рд╕рд┐рд╕реНрдЯреЗрдб рдордЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЗрд╕рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдмрд┐рдЬрд╝рдиреЗрд╕ рд▓реЙрдЬрд┐рдХ рдХрд╛ рдХреБрд╢рд▓ рдкреНрд░рдмрдВрдзрди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрддрд╛ рд╣реИред - Google Sheets рдХреЛ рдбреЗрдЯрд╛ рд╕реЛрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рдЗрд╕рдХреА рд╕реАрдорд╛рдПрдБ рдЕрд╕рдВрдЧрддрд┐рдпрд╛рдБ рдФрд░ рдкрд░рдлрд╝реЙрд░реНрдореЗрдВрд╕ рдмрд╛рдзрд╛рдПрдБ рд▓рд╛ рд╕рдХрддреА рд╣реИрдВред
- рдореИрдВ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдФрд░ рдЗрдВрдХреНрд░реАрдореЗрдВрдЯрд▓ рдкреНрд░реЗрдбрд┐рдХреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЗрдВрдХреНрд░реАрдореЗрдВрдЯрд▓ рдЕрдкрдбреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛/рджреЗрддреА рд╣реВрдБред
select *рдЬреИрд╕реЗ рдкреИрдЯрд░реНрди рд╕реЗ рдмрдЪреЗрдВ рдФрд░ рд▓рдВрдмреА рд╡ рдЬрдЯрд┐рд▓ SQL рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдЫреЛрдЯреЗ рдореЙрдбрд▓реЛрдВ рдореЗрдВ рдмрд╛рдБрдЯрдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред- dbt seeds рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХреЗрд╡рд▓ CSV рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЯреЗрдмрд▓реНрд╕ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИрдВред┬а
- рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдХрд╕реНрдЯрдо рдордЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреЗрд╕реНрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреЗрдмрд▓реНрд╕ рдХреЛ рд╕реАрдб рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ SQL рдХреНрд╡реЗрд░реА рдРрд╕рд╛ рдЖрдЙрдЯрдкреБрдЯ рдЬрдирд░реЗрдЯ рдХрд░ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕реЗ рдЕрдиреНрдп рдореЙрдбрд▓реЛрдВ рдореЗрдВ рд░реЗрдлрд╝рд░реЗрдВрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреА рдЯреЗрдмрд▓реНрд╕ рдбреЗрдЯрд╛ рд▓реАрдирд┐рдПрдЬ рдЧреНрд░рд╛рдлрд╝ рдореЗрдВ рдареАрдХ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдВ, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдореЗрдВ рдмреЗрд╣рддрд░ рджреГрд╢реНрдпрддрд╛ рдФрд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рдорд┐рд▓рддреА рд╣реИред
рдиреАрдЪреЗ рджреА рдЧрдИ SQL рдХреНрд╡реЗрд░реА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд╕реНрдЯрдо рдордЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП:
-- my_dbt/macros/operation.sql
{%- materialization operation, default -%}
{%- set identifier = model['alias'] -%}
{%- set target_relation = api.Relation.create(
identifier=identifier, schema=schema, database=database,
type='table') -%}
-- ... setup database ...
-- ... run pre-hooks...
-- build model
{% call statement('main') -%}
{{ run_sql_as_simple_script(target_relation, sql) }}
{%- endcall %}
-- ... run post-hooks ...
-- ... clean up the database...
-- COMMIT happens here
{{ adapter.commit() }}
-- Return the relations created in this materialization
{{ return({'relations': [target_relation]}) }}
{%- endmaterialization -%}
-- my_dbt/macros/operation_helper.sql
{%- macro run_sql_as_simple_script(relation, sql) -%}
{{ log("Creating table " ~ relation) }}
{{ sql }}
{%- endmacro -%}
рдЕрдм, рдпрджрд┐ рд╣рдо рдЗрд╕ рдлрд╝реАрдЪрд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП table_c рдирд╛рдо рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЙрдбрд▓ рдЬреЛрдбрд╝реЗрдВ, рддреЛ рд╣рдо рдиреАрдЪреЗ рджреА рдЧрдИ SQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
-- my_dbt/models/example/table_c.sql
{{ config(
materialized='operation',
tags=["example"]
) }}
create or replace table {{this.database}}.{{this.schema}}.{{this.name}} (
id int64
,comments string
);
insert into {{this.database}}.{{this.schema}}.{{this.name}} (id, comments)
select
1 as id
, 'Some comments' as comments
union all
select
2 as id
, 'Some comments' as comments
;
рдЕрдм, рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рдХрдореНрдкрд╛рдЗрд▓ рдХрд░реЗрдВ, рддреЛ рдпрд╣ рдПрдХ SQL рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:
$ dbt compile -m table_c -t dev
рдЖрдЙрдЯрдкреБрдЯ:
10:45:24 Running with dbt=1.8.6
10:45:25 Registered adapter: bigquery=1.8.2
10:45:25 Found 3 models, 483 macros
10:45:25
10:45:26 Concurrency: 4 threads (target='dev')
10:45:26
10:45:26 Compiled node 'table_c' is:
-- Use the ref function to select from other models
create or replace table bigquery-data-dev.source.table_c (
id int64
,comments string
);
insert into bigquery-data-dev.source.table_c (id, comments)
select
1 as id
, 'Some comments' as comments
union all
select
2 as id
, 'Some comments' as comments
;
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рд╣рдореЗрдВ BigQuery рдЕрдбреИрдкреНрдЯрд░ рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВред рдпрджрд┐ рд╣рдо рдХреЛрдИ рдФрд░ рдЯреЗрдмрд▓ рдпрд╛ рд╡реНрдпреВ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рд░реЗрдлрд╝рд░реЗрдВрд╕ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕рд╛рдзрд╛рд░рдг ref() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдРрд╕рд╛ рдХрд░рдиреЗ рдкрд░, table_c рдЕрдкрдиреЗ рдЖрдк рдбреЗрдЯрд╛ рд▓реАрдирд┐рдПрдЬ рдореЗрдВ рдПрдХ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд╕реЗ рдЯреЗрдмрд▓реНрд╕ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдореЙрдбрд▓реЛрдВ рдХреЗ рдмреАрдЪ рд░рд┐рд╢реНрддреЛрдВ рдХрд╛ рд╕рд╣реА рдбреЙрдХреНрдпреБрдореЗрдВрдЯреЗрд╢рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдпрд╣ рд╡рд┐рдзрд┐ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдореИрдиреЗрдЬрдореЗрдВрдЯ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИ рдФрд░ рдпрд╣ рджрд┐рдЦрд╛рддреА рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рд╡рд┐рднрд┐рдиреНрди рдЪрд░рдгреЛрдВ рд╕реЗ рдХреИрд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░рддрд╛ рд╣реИтАФрдпрд╣рд╛рдБ рддрдХ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЬрдЯрд┐рд▓ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕реНрдЯреЗрдкреНрд╕ рдореЗрдВ рднреАред рдЬрдЯрд┐рд▓ рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдореЗрдВрдЯреЗрди рдХрд░рдиреЗ рдореЗрдВ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИред

dbt рдореЗрдВ DAG (рдбрд╛рдпрд░реЗрдХреНрдЯреЗрдб рдПрд╕реАрдХреНрд▓рд┐рдХ рдЧреНрд░рд╛рдлрд╝) table_b рдХреЗ рд▓рд┐рдП рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬрд╝ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЪрд┐рддреНрд░: рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛
рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ table_c рдЬреЛрдбрд╝рдирд╛ рд╣реИ:
-- models/example/table_b.sql
{{ config(
tags=["example"]
) }}
select *
from {{ ref('table_a') }}
where id = 1
union all
select *
from {{ ref('table_c') }}
where id = 2
-- select 1;
рдпрджрд┐ рд╣рдо рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рдирд┐рдореНрди рдЪрд▓рд╛рдПрдБ, рддреЛ рдбреЙрдХреНрдпреБрдореЗрдВрдЯреЗрд╢рди рдЕрдкрдиреЗ рдЖрдк рдЬрдирд░реЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛!
dbt docs generate
dbt docs serve
dbt рдореЗрдВ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрдЬрд┐рдВрдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдЬреИрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдЕрдиреЗрдХ рдбреЗрдЯрд╛ рд╕реЛрд░реНрд╕реЗрдЬрд╝ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдореЙрдбрд▓ рд▓реЗрдпрд░реЛрдВ (stg, base, mrt, biz) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреЛ рдЕрдВрддрддрдГ рдбреЗрдЯрд╛ рдорд╛рд░реНрдЯ рдореЙрдбрд▓ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
тФФтФАтФА models
тФЬтФАтФА int -- only if required and 100% necessary for reusable logic
тФВ тФФтФАтФА finance
тФВ тФЬтФАтФА _int_finance__models.yml
тФВ тФФтФАтФА int_payments_pivoted_to_orders.sql
тФЬтФАтФА marts -- deeply enriched, QAed data with complex transformations
тФВ тФЬтФАтФА finance
тФВ тФВ тФЬтФАтФА _finance__models.yml
тФВ тФВ тФЬтФАтФА orders.sql
тФВ тФВ тФФтФАтФА payments.sql
тФВ тФФтФАтФА marketing
тФВ тФЬтФАтФА _marketing__models.yml
тФВ тФФтФАтФА customers.sql
тФФтФАтФА src (or staging) -- raw data with basic transformations applied
тФЬтФАтФА some_data_source
тФВ тФЬтФАтФА _data_source_model__docs.md
тФВ тФЬтФАтФА _data_source__models.yml
тФВ тФЬтФАтФА _sources.yml
тФВ тФФтФАтФА base
тФВ тФЬтФАтФА base_transactions.sql
тФВ тФФтФАтФА base_orders.sql
тФФтФАтФА another_data_source
тФЬтФАтФА _data_source_model__docs.md
тФЬтФАтФА _data_source__models.yml
тФЬтФАтФА _sources.yml
тФФтФАтФА base
тФЬтФАтФА base_marketing.sql
тФФтФАтФА base_events.sql
рдореЙрдбрд▓ рд▓реЙрдЬрд┐рдХ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ
рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪрд░рдг рд╣реИ, рдЬрд╣рд╛рдБ рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдореЙрдбрд▓реЛрдВ рдХреЗ рдкреАрдЫреЗ рдХреА рд▓реЙрдЬрд┐рдХ рдХреЛ рд╡реИрд▓рд┐рдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕реЗ рдЖрдк рдЕрдкрдиреЗ Python рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рд╡реИрд╕реЗ рд╣реА рдореИрдВ рдбреЗрдЯрд╛ рдореЙрдбрд▓реЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдкрдирд╛рддрд╛/рдЕрдкрдирд╛рддреА рд╣реВрдБред
рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдХрд░ рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╢реБрд░реБрдЖрддреА рдЪрд░рдг рдореЗрдВ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рдФрд░ рд▓реЙрдЬрд┐рдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдкреНрд░реИрдХреНрдЯрд┐рд╕ рдбреЗрдЯрд╛ рдЧреБрдгрд╡рддреНрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИ рдФрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рд╕рд╛рд░ рдХреЛ рд░реЛрдХрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд╣рд▓реВ рдмрдирддреА рд╣реИред
рд╣рдо properties.yml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рдХрд░рдХреЗ рдХрд┐рд╕реА рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
# my_dbt/models/example/properties.yml
version: 2
models:
...
unit_tests: # dbt test --select "table_b,test_type:unit"
- name: test_table_b
description: "Check my table_b logic captures all records from table_a and table_c."
model: table_b
given:
- input: ref('table_a')
rows:
- {id: 1, comments: 'Some comments'}
- {id: 2, comments: 'Some comments'}
- input: ref('table_c')
rows:
- {id: 1, comments: 'Some comments'}
- {id: 2, comments: 'Some comments'}
expect:
rows:
- {id: 1, comments: 'Some comments'}
- {id: 2, comments: 'Some comments'}
рдЕрдм рдпрджрд┐ рд╣рдо рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ dbt test рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ, рддреЛ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
% dbt test --select "table_b,test_type:unit"
рдЖрдЙрдЯрдкреБрдЯ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
11:33:05 Running with dbt=1.8.6
11:33:06 Registered adapter: bigquery=1.8.2
11:33:06 Unable to do partial parsing because config vars, config profile, or config target have changed
11:33:07 Found 3 models, 483 macros, 1 unit test
11:33:07
11:33:07 Concurrency: 4 threads (target='dev')
11:33:07
11:33:07 1 of 1 START unit_test table_b::test_table_b ................................... [RUN]
11:33:12 1 of 1 PASS table_b::test_table_b .............................................. [PASS in 5.12s]
11:33:12
11:33:12 Finished running 1 unit test in 0 hours 0 minutes and 5.77 seconds (5.77s).
11:33:12
11:33:12 Completed successfully
11:33:12
рдЕрдм expect рдореЗрдВ рдХрд┐рд╕реА рд░реЛ рдХрд╛ id 3 рдХрд░ рджреАрдЬрд┐рдП, рддреЛ рд╣рдореЗрдВ рдЙрд╕реА рдЯреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдПрд░рд░ рдорд┐рд▓реЗрдЧрд╛:
11:33:28 Completed with 1 error and 0 warnings:
11:33:28
11:33:28 Failure in unit_test test_table_b (models/example/properties.yml)
11:33:28
actual differs from expected:
@@ ,id,comments
,1 ,Some comments
+++,2 ,Some comments
---,3 ,Some comments
рдбреЗрдЯрд╛ рдЧреБрдгрд╡рддреНрддрд╛ рдкрд░реАрдХреНрд╖рдг
dbt рдбреЗрдЯрд╛ рдЧреБрдгрд╡рддреНрддрд╛ рдЬрд╛рдБрдЪреЛрдВ рдХрд╛ рднреА рд╕рдорд░реНрдерди рджреЗрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯреНрд╕ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЗрд╕ рдкрд░ рд▓рд┐рдЦрд╛ рд╣реИред рд╣рдо рдбреЗрдЯрд╛ рдЧреБрдгрд╡рддреНрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд▓рдЧрднрдЧ рд╣рд░ рдЪреАрдЬрд╝тАФрдбреЗрдЯрд╛ рдХреА рддрд╛рдЬрд╝рдЧреА, рд░реЛ рдХрдВрдбреАрд╢рдВрд╕, рдЧреНрд░реИрдиреНрдпреБрд▓реИрд░рд┐рдЯреА рдЖрджрд┐тАФрдЬрд╛рдБрдЪ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЗрдП рдЕрдкрдиреЗ table_b рдореЙрдбрд▓ рдкрд░ рдмрд╛рд░реАрдХреА рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдХреБрдЫ рдбреЗрдЯрд╛ рдЬрд╛рдБрдЪреЗрдВ рдореМрдЬреВрдж рд╣реИрдВ:
- name: table_b
config:
description: "A starter dbt model"
schema: |
{%- if target.name == "dev" -%} analytics_dev
{%- elif target.name == "prod" -%} analytics_prod
{%- elif target.name == "test" -%} analytics_test
{%- else -%} invalid_database
{%- endif -%}
columns:
- name: id
description: "The primary key for this table"
tests:
- unique
- not_null
рдпрд╣рд╛рдБ, tests рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдВрддрд░реНрдЧрдд, рд╣рдо рдЕрдкрдиреЗ рдордЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб table_b.id рдХреЗ рд▓рд┐рдП unique рдФрд░ not_null рдХрдВрдбреАрд╢рди рдЯреЗрд╕реНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреЗрд╕реНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХрдорд╛рдВрдб рдХрд╛рдо рдХрд░реЗрдЧрд╛:
dbt test -s table_b
рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд╕реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд░реЗрдлрд╝рд░реЗрдВрд╢рд┐рдпрд▓ рдЗрдВрдЯреЗрдЧреНрд░рд┐рдЯреА рдХрд╛ рдкрд░реАрдХреНрд╖рдг рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЬреЙрдЗрдиреНрд╕ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдореЙрдбрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдВрдЯрд┐рдЯреАрдЬрд╝ рдХреЗ рдмреАрдЪ рд░рд┐рд╢реНрддреЗ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдмрдирд╛рдП рд░рдЦреЗрдВред рдпреЗ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдВрдЯрд┐рдЯреАрдЬрд╝тАФрдЬреИрд╕реЗ рдЯреЗрдмрд▓реНрд╕ рдпрд╛ рдХреЙрд▓рдотАФрдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред┬а
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ dbt рдХреЛрдб рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рд░ refunds.refund_id рдХрд┐рд╕реА рд╡реИрдз transactions.id рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдпрд╣ рдореИрдкрд┐рдВрдЧ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рд╕рднреА рд░рд┐рдлрдВрдб рд╡реИрдз рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рдВрд╕ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрдВ, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рдХреА рдЕрдЦрдВрдбрддрд╛ рдмрдиреА рд░рд╣реЗ рдФрд░ рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рдореЙрдбрд▓реЛрдВ рдореЗрдВ рдЕрдирд╛рде рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдпрд╛ рдЕрд╕рдВрдЧрдд рд░рд┐рд╢реНрддреЗ рди рдмрдиреЗрдВ:
- name: refunds
enabled: true
description: An incremental table
columns:
- name: refund_id
tests:
- relationships:
tags: ['relationship']
to: ref('transactions')
field: id
рдбреЗрдЯрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдЕрдХреНрд╕рд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИрдВ рдХрд┐ рдирдпрд╛ рдбреЗрдЯрд╛ рдХрдм рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЕрдкрдбреЗрдЯ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдЕрдиреБрдордд рджреЗрд░реА рдХрд┐рддрдиреА рд╣реЛ рд╕рдХрддреА рд╣реИред рдпреЗ рдЬрд╛рдБрдЪреЗрдВ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИрдВ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ (рдЕрдк-рдЯреВ-рдбреЗрдЯ) рдмрдирд╛ рд░рд╣реЗред┬а
dbt рдореЗрдВ, рдЗрд╕реЗ рдлреНрд░реЗрд╢рдиреИрд╕ рдЯреЗрд╕реНрдЯреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдпрд╣ рдореЙрдирд┐рдЯрд░ рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдирдпрд╛ рдбреЗрдЯрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕рдордпрд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рдкрд╣реБрдБрдЪ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред┬а
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдРрд╕рд╛ рдлреНрд░реЗрд╢рдиреИрд╕ рдЯреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗ рдХрд┐ рдХрд┐рд╕реА рдЯреЗрдмрд▓ рдореЗрдВ рд╕рдмрд╕реЗ рд╣рд╛рд▓ рдХрд╛ рд░рд┐рдХреЙрд░реНрдб рдЖрдкрдХреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлреНрд░реЗрд╢рдиреИрд╕ рдорд╛рдирдХреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЖрдкрдХреА рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕ рд╕рдордп рдкрд░ рдФрд░ рд╕реБрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рджреЗрддреА рд░рд╣реЗрдВрдЧреА, рдФрд░ рд╕рдордп-рд╕рдВрд╡реЗрджреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП рдбреЗрдЯрд╛ рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рд╡ рд╢реБрджреНрдзрддрд╛ рдмрдиреА рд░рд╣реЗрдЧреАред┬а
рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рджреЗрдЦреЗрдВред рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ dbt рдореЗрдВ рдлреНрд░реЗрд╢рдиреИрд╕ рдЯреЗрд╕реНрдЯ рдХреИрд╕реЗ рд╕реЗрдЯрдЕрдк рдХрд░реЗрдВ:
# example model
- name: orders
enabled: true
description: A source table declaration
tests:
- dbt_utils.recency: # https://github.com/dbt-labs/dbt-utils#recency-source
tags: ['freshness']
datepart: day
field: timestamp
interval: 1
рдпреЗ рд╕рднреА dbt рдЯреЗрд╕реНрдЯреНрд╕ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИрдВ рдФрд░ рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЗ рд░реЛрдЬрд╝рдорд░реНрд░рд╛ рдХреЗ рдХрд╛рдо рдореЗрдВ рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд╣реИрдВ! рдпреЗ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдореЗрдВрдЯреЗрди рд░рдЦрдиреЗ рдФрд░ рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕ рдХреЛ рд╕реБрд╕рдВрдЧрдд рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдирд╛ рдПрдХ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдп рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдпреЛрдЬрдирд╛ рдФрд░ рд╕рдВрдЧрдарди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯрд┐рдВрдЧ рдЗрдВрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ dbt, рдЗрд╕реЗ рдПрдХрд░реВрдкрддрд╛ рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ dbt рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдХрдИ рддрдХрдиреАрдХреЛрдВ рдХрд╛ рд╕рд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕реНрдкрд╖реНрдЯрддрд╛ рдФрд░ рд╕рд╣рдпреЛрдЧ рдмрдврд╝реЗред SQL рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рддрд╛рд░реНрдХрд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд░рдЦрдиреЗ рд╕реЗ рд╣рдо рдРрд╕рд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдирдП рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдПрдХреНрд╕рдкреНрд▓реЛрд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛред
DBT рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдФрд░ рднреА рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдореИрдХреНрд░реЛрдЬрд╝, рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдФрд░ рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░реАрдпреВрдЬрд╝реЗрдмрд▓ рдХреЛрдб рдЕрдВрд╢реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░ рдЕрдкрдиреЗ SQL рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рд╕рдореГрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рдЬрдм рдЗрдиреНрд╣реЗрдВ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░-рдПрдЬрд╝-рдХреЛрдб рдкреНрд░реИрдХреНрдЯрд┐рд╕реЗрдЬрд╝ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдлрд╝рдВрдХреНрд╢рдиреИрд▓рд┐рдЯреА рдЙрдЪрд┐рдд CI/CD рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИ рдФрд░ рд╡рд┐рдХрд╛рд╕ рд╡ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдХреЛ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдк рд╕реЗ рддреЗрдЬрд╝ рдХрд░рддреА рд╣реИред
рдпрджрд┐ рдЖрдк dbt рдХреЗ рдЕрдкрдиреЗ рдЬреНрдЮрд╛рди рдХреЛ рдЕрдЧрд▓реЗ рд╕реНрддрд░ рдкрд░ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ DataCamp рдкрд░ Introduction to dbt рдХреЛрд░реНрд╕ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рдВрд╕рд╛рдзрди рд╣реИ рдЬреЛ рдЕрдзрд┐рдХ рд╣реИрдВрдбреНрд╕-рдСрди рдЕрднреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рд╕рдлрд▓рддрд╛ рдкреВрд░реНрд╡рдХ рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛!
FAQs
рдХреНрдпрд╛ рдореИрдВ dbt рдХреЛ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛/рд╕рдХрддреА рд╣реВрдБ?
dbt рдЕрдиреЗрдХ рдХреНрд▓рд╛рдЙрдб рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕тАФрдЬреИрд╕реЗ Snowflake, BigQuery, Redshift рдФрд░ PostgreSQLтАФрдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд░ рд╕рдкреЛрд░реНрдЯреЗрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЕрдкрдирд╛ рдЕрдбреИрдкреНрдЯрд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдЕрд▓рдЧ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
dbt рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдореБрдЭреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реНрдХрд┐рд▓реНрд╕ рдЪрд╛рд╣рд┐рдП?
рдмреЗрд╕рд┐рдХ SQL рдЬреНрдЮрд╛рди рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ dbt рдХрд╛ рдлреЛрдХрд╕ SQL-рдЖрдзрд╛рд░рд┐рдд рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рдВрд╕ рдкрд░ рд╣реИред рдПрдбрд╡рд╛рдВрд╕реНрдб рд╕реНрдХрд┐рд▓реНрд╕, рдЬреИрд╕реЗ Python, dbt рдХреА рдлрд╝рдВрдХреНрд╢рдиреИрд▓рд┐рдЯреА рдмрдврд╝рд╛ рд╕рдХрддреА рд╣реИрдВтАФрдЦрд╝рд╛рд╕рдХрд░ рддрдм рдЬрдм рдЖрдк dbt рдПрдХреНрд╕рдЯреЗрдВрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдСрдЯреЛрдореЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдХреНрдпрд╛ dbt рдХреЗрд╡рд▓ рдХреНрд▓рд╛рдЙрдб-рдЖрдзрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЗ рд▓рд┐рдП рд╣реИ?
рд╣рд╛рд▓рд╛рдБрдХрд┐ dbt рдХрд╛ рд╕рдмрд╕реЗ рдЖрдо рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╛рдЙрдб-рдЖрдзрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдСрди-рдкреНрд░рд┐рдорд╛рдЗрд╕реЗрдЬрд╝ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдХреНрд▓рд╛рдЙрдб рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдЕрдзрд┐рдХ рд╕реНрдХреЗрд▓реЗрдмрд▓ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рд╕рд╛рде dbt рдЕрдЪреНрдЫреА рддрд░рд╣ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
рдХреНрдпрд╛ dbt рдХреЛ CI/CD рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рдЗрдВрдЯреАрдЧреНрд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рд╣рд╛рдБ! dbt рдХреЛ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕ рдХреЗ рднреАрддрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИтАФрдпрд╣ рдСрдЯреЛрдореЗрд╢рди, рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдФрд░ рд╡рд░реНрдЬрд╝рди рдХрдВрдЯреНрд░реЛрд▓ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред GitHub Actions рдпрд╛ Jenkins рдЬреИрд╕реЗ рдЯреВрд▓реНрд╕ dbt рдХреЛ CI/CD рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдореЗрдВ рдЗрдВрдЯреАрдЧреНрд░реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╕реБрджреГрдврд╝ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдФрд░ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдХреНрдпрд╛ dbt рдХреЛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
dbt рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдмреИрдЪ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рди рдХрд┐ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд▓рдЧрднрдЧ рд░рд┐рдпрд▓-рдЯрд╛рдЗрдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрдк рдЗрдВрдХреНрд░реАрдореЗрдВрдЯрд▓ рдореЙрдбрд▓реЛрдВ рдХреЛ рдирд┐рдпрдорд┐рдд рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреА рдлреНрд░реЗрд╢рдиреИрд╕ рдЬрд╝рд░реВрд░рддреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ред
dbt Cloud рдФрд░ dbt Core рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?
dbt Core dbt рдХрд╛ рдлрд╝реНрд░реА, рдУрдкрди-рд╕реЛрд░реНрд╕ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рд▓реЛрдХрд▓реА рдпрд╛ рдЕрдкрдиреЗ рдХреНрд▓рд╛рдЙрдб рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред dbt Cloud рдПрдХ рдореИрдиреЗрдЬреНрдб рд╕рд░реНрд╡рд┐рд╕ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпреВрдЬрд╝рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдЬреЙрдм рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдФрд░ Git рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдЬреИрд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВтАФрдЬреЛ рдЯреАрдо рд╕рд╣рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд▓рд╛рднрдХрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
рдХреНрдпрд╛ dbt рдиреЙрди-SQL рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
dbt рдХрд╛ рдлреЛрдХрд╕ SQL рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рдВрд╕ рдкрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдиреЙрди-SQL рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рдВрд╕ рдиреИрдЯрд┐рд╡ рд░реВрдк рд╕реЗ рд╕рдкреЛрд░реНрдЯреЗрдб рдирд╣реАрдВ рд╣реИрдВред рдлрд┐рд░ рднреА, dbt рдХреА рдореЙрдбреНрдпреБрд▓реИрд░рд┐рдЯреА рдмрд╛рд╣рд░реА рдЯреВрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдФрд░ рдпрджрд┐ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рддреЛ рдЖрдк рдХрд╕реНрдЯрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЬреБрдиреВрдиреА рдФрд░ рдбрд┐рдЬрд┐рдЯрд▓ рд░реВрдк рд╕реЗ рдХреЗрдВрджреНрд░рд┐рдд, рдореИрдВ рдбрд┐рдЬрд┐рдЯрд▓ рдорд╛рд░реНрдХреЗрдЯрд┐рдВрдЧ рдХреА рдЪреБрдиреМрддрд┐рдпреЛрдВ рдореЗрдВ рдЙрддреНрдХреГрд╖реНрдЯрддрд╛ рдкрд╛рддрд╛/рдкрд╛рддреА рд╣реВрдБред
рдпреВрдХреЗ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдмрд┐рдХреНрд░реА, рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдмреИрдВрдХрд┐рдВрдЧ рдЬреЛрдЦрд┐рдо рдФрд░ рдбрд┐рдЬрд┐рдЯрд▓ рдорд╛рд░реНрдХреЗрдЯрд┐рдВрдЧ рдореЗрдВ рджрд╕ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрд╖реЛрдВ рдХрд╛ рдЕрдиреБрднрд╡ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рдЬреЛрдЦрд┐рдо рдкреНрд░рдмрдВрдзрди, рдЧрдгрд┐рддреАрдп рдореЙрдбрд▓рд┐рдВрдЧ, рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рд╡реНрдпрд╡рд╕рд╛рдп рдкреНрд░рд╢рд╛рд╕рди рдФрд░ рдорд╛рд░реНрдХреЗрдЯрд┐рдВрдЧ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреАред
рдиреНрдпреВрдХреИрд╕рд▓ рд╕реЗ рдЕрдкрдирд╛ MBA рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдм рдореИрдВ рдбреЗрдЯрд╛-рдЪрд╛рд▓рд┐рдд рдорд╛рд░реНрдХреЗрдЯрд┐рдВрдЧ, рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдпрд╛ AI рдореЗрдВ рдХрд░рд┐рдпрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдБ, рдФрд░ рдЖрдЧреЗ рдЪрд▓рдХрд░ PhD рдХрд░рдиреЗ рдХреА рднреА рд╕рдВрднрд╛рд╡рдирд╛ рджреЗрдЦрддрд╛/рджреЗрдЦрддреА рд╣реВрдБред рдпреЗ рдХреНрд╖реЗрддреНрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рдирд┐рд░рдВрддрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╡рд┐рдХрд╛рд╕, рдирд╡рд╛рдЪрд╛рд░, рдФрд░ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдЙрджреНрдпреЛрдЧ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдХреБрдЫ рдРрд╕реА рддрдХрдиреАрдХреЛрдВ рдХрд╛ рд╕рд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣рд╛/рд░рд╣реА рд╣реВрдБ рдЬреЛ dbt рд╕реАрдЦрдиреЗ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрдЕрдк рд╡ рдбреЗрдЯрд╛ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЛ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдзрд┐рдХ рдкреНрд░рдмрдВрдзрдиреАрдп рдмрдирддреА рд╣реИред
рд╕рд╛рде рд╣реА, рдореИрдВ рдЕрдкрдиреЗ рджреИрдирд┐рдХ рдХрд╛рдо рдореЗрдВ рдЬрд┐рди рд╡рд┐рд╢рд┐рд╖реНрдЯ dbt рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддрд╛/рдХрд░рддреА рд╣реВрдБ, рдЙрди рдкрд░ рднреА рдЪрд░реНрдЪрд╛ рдХрд░реВрдБрдЧрд╛/рдХрд░реВрдБрдЧреАред рдпреЗ рддрд░реАрдХрд╝реЗ рд╕рдЯреАрдХ, рд╕рд╣рдЬ, рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдЕрдиреБрдХреВрд▓ рдбреЗрдЯрд╛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдФрд░ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдмрдирд╛рдиреЗ рдХреЗ рдореЗрд░реЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдореЗрдВ рдЕрдореВрд▓реНрдп рд╕рд╛рдмрд┐рдд рд╣реБрдП рд╣реИрдВред
рдЗрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЛ рдЕрдкрдирд╛рдиреЗ рд╕реЗ рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рдорд╛рдирдХреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдПрдБ рдХрдо рд╣реЛрддреА рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдбреЗрдЯрд╛-рдЪрд╛рд▓рд┐рдд рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрдзрд┐рдХ рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВред
dbt рдХреНрдпрд╛ рд╣реИ?
dbt (рдбреЗрдЯрд╛ рдмрд┐рд▓реНрдб рдЯреВрд▓) рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдУрдкрди-рд╕реЛрд░реНрд╕ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ SQL рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдФрд░
ref()(рд░реЗрдлрд╝рд░реЗрдВрд╕рд┐рдВрдЧ) рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдмрд▓реНрд╕, рд╡реНрдпреВрдЬрд╝, рд╕реНрдХреАрдорд╛ рдЖрджрд┐ рдЬреИрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрдЬрд╝ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреА рд▓рдЪреАрд▓рд╛рдкрди DRY (Do Not Repeat Yourself) рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реИредdbt рдХреЗ рд╕рд╛рде, рдЖрдк рдПрдХ рдРрд╕рд╛ SQL рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЗрдЯрд╛ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯреНрд╕ рдореЗрдВ рджреЛрдмрд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдПрдХ рдмрд╛рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд┐рдЦ рджреЗрдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ "рдХрдореНрдкрд╛рдЗрд▓" рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ SQL рдХреНрд╡реЗрд░рд┐рдпрд╛рдБ рдЬрдирд░реЗрдЯ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред
dbt рдХрд╛ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рджрдХреНрд╖рддрд╛ рдмрдврд╝рд╛рддрд╛ рд╣реИ рдФрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд░рдгреЛрдВ рдореЗрдВ рдПрдХрд░реВрдкрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рджреЛрд╣рд░рд╛рд╡ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдХрдо рд╣реЛрддреА рд╣реИрдВ рддрдерд╛ рдбреЗрдЯрд╛ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХрд╛ рд░рдЦрд░рдЦрд╛рд╡ рдФрд░ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╕рд░рд▓ рд╣реЛрддрд╛ рд╣реИред
рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдореЗрдВ рдбреЗрдЯрд╛ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗрдВрджреНрд░реАрдп рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддреА рд╣реИ, рдФрд░ dbt рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрддреНрдХреГрд╖реНрдЯ рдЯреВрд▓ рд╣реИред рджрд░рдЕрд╕рд▓, рдореЗрд░рд╛ рдорд╛рдирдирд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рдлрд▓ рдбреЗрдЯрд╛ рдкреНрд░реЛрдлреЗрд╢рдирд▓ рдмрдирдиреЗ рдХреА рдЖрдХрд╛рдВрдХреНрд╖рд╛ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП dbt рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИ!
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП dbt рдЯреЗрдореНрдкрд▓реЗрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рдПрдХ рд╕рд░рд▓ рдЯреЗрдмрд▓ рдбреЗрдлрд┐рдирд┐рд╢рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдпрд╣ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рднреА рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рд╕реНрдХреАрдорд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:
рдорд╛рди рд▓реАрдЬрд┐рдП, рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдКрдкрд░ рдмрдирд╛рдИ рдЧрдИ рдЯреЗрдмрд▓ (
table_a.sql) рд╕реЗ рдирд┐рдХрд▓рд╛ рд╣реБрдЖ рдПрдХ рд╡реНрдпреВ рд╣реИред рддреЛ рд╣рдорд╛рд░реА рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд▓реАрдирд┐рдПрдЬ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧреА:рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд▓реАрдирд┐рдПрдЬ рдХрд╛ рдЙрджрд╛рд╣рд░рдгред рдЪрд┐рддреНрд░: рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ред
рд╣рдо
ref()рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рджреЛ рдЪрд░рдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдФрд░ рд╣рдорд╛рд░реЗ рдХреЗрд╕ рдореЗрдВ,table_b.sqlрдХреЛ рдЗрд╕ рддрд░рд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:ref()рдлрд╝рдВрдХреНрд╢рди рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐table_bрдореЙрдбрд▓,table_aрдХреЗ рдмрд╛рдж (рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо) рдЖрддрд╛ рд╣реИред рдЕрдм рд╣рдо рдкреВрд░реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рдПрдХ рд╣реА dbt рдХрдорд╛рдВрдб рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:dbt run --select tag:exampleредрд░реАрдпреВрдЬрд╝реЗрдмрд▓ рдХреЛрдб рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рд╡рдЬрд╣ рд╕реЗ, dbt рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯреНрд╕ (рдкреНрд░реЛрдбрдХреНрд╢рди, рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ, рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдЖрджрд┐) рдореЗрдВ рдбреЗрдЯрд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрдХреГрд╖реНрдЯ рдЯреВрд▓ рдмрдирд╛рддреА рд╣реИрдВред┬а
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдХреА рдПрдХ рдореБрдЦреНрдп рдХреНрд╖рдорддрд╛ рд╣реИ рд╡реНрдпрд╛рдкрдХ SQL рдбреЙрдХреНрдпреБрдореЗрдВрдЯреЗрд╢рди рдХрд╛ рд╕реНрд╡рддрдГ рдЬрдирд░реЗрд╢рди, рдЬреЛ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдмрдврд╝рд╛рддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╡ рдмрд┐рдЬрд╝рдиреЗрд╕ рд╕реНрдЯреЗрдХрд╣реЛрд▓реНрдбрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред
рдбреЗрдЯрд╛ рдореЙрдбрд▓рд┐рдВрдЧ рдореЗрдВ рдПрдХ рдЪреБрдиреМрддреА рд╣реИтАФрдорд▓реНрдЯреАрд▓рд╛рдпрд░ рдЬрдЯрд┐рд▓ SQL рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕ рдмрдирд╛рдирд╛ рдФрд░ рд╕рд╛рде рд╣реА рдХреЛрдб рдХреЛ рд░реАрдпреВрдЬрд╝реЗрдмрд▓ рд░рдЦрдирд╛ред рдЗрди рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕ рдореЗрдВ рд╕реВрдХреНрд╖реНрдо рдкрд░реАрдХреНрд╖рдг рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрддреА рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдХрд░реЗрдВ рдФрд░ рд╕рдВрдЧрдардирд╛рддреНрдордХ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдмрдиреА рд░рд╣реЗ, рдЬрд┐рд╕рд╕реЗ рд╕рднреА рд▓реЛрдЧ рд▓реЙрдЬрд┐рдХ рд╕рдордЭ рд╕рдХреЗрдВред рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рднреА dbt рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╕рд╛рде рд╣реА, dbt рдбреЗрдЯрд╛ рдЧреБрдгрд╡рддреНрддрд╛ рдкрд░реАрдХреНрд╖рдг рдФрд░ SQL рд▓реЙрдЬрд┐рдХ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рд╕рдВрд░рдЪрд┐рдд рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рддрд░реАрдХрд╝реЗ рд╕реЗ рдЕрдкрдиреА рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рдВрд╕ рдХреА рд╢реБрджреНрдзрддрд╛ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (CI/CD рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝).
рдПрдХ рдФрд░ рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдЬрд╝рд░рд┐рдП рд▓рдЪреАрд▓реА рдСрдЯреЛрдореЗрд╢рди, рдЬреЛ рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рдФрд░ рд░реАрдпреВрдЬрд╝реЗрдмрд▓ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рддреА рд╣реИ, рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛рддреА рд╣реИред┬а
рдпреЗ рд╕рдВрдпреБрдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдПрдБ dbt рдХреЛ рдХрд┐рд╕реА рднреА SQL-рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдп рдФрд░ рдбреЗрдЯрд╛ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рддреА рд╣реИрдВтАФрдбреЗрдЯрд╛ рдЗрдВрдЯреЗрдЧреНрд░рд┐рдЯреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рд╕реЗ рд▓реЗрдХрд░ рджреЛрд╣рд░рд╛рд╡рджрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдСрдЯреЛрдореЗрдЯ рдХрд░рдиреЗ рддрдХтАФрдФрд░ рдпрд╣ рд╕рдм рджрдХреНрд╖рддрд╛ рд╡ рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдПред
рдЖрдЗрдП, рдЕрдм рдкреНрд░реИрдХреНрдЯрд┐рдХрд▓ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ dbt рд╡ BigQuery рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ!