В каком SQL-диалекте писать мои модели? Или какой SQL-диалект использует dbt?
dbt может казаться магией, но на самом деле это не так. Под капотом он выполняет SQL в вашем собственном хранилище данных — ваши данные не обрабатываются за пределами вашего хранилища.
Таким образом, ваши модели должны использовать SQL-диалект вашей собственной базы данных. Затем, когда dbt оборачивает ваши select
выражения в соответствующие или , он будет использовать правильный DML для вашего хранилища — вся эта логика уже заложена в dbt.
Вы можете найти больше информации о базах данных, платформах и движках запросов, которые поддерживает dbt, в документации Поддерживаемые платформы данных.
Хотите углубиться в то, как это работает? Рассмотрим фрагмент SQL, который работает на каждом хранилище:
select 1 as my_column
Чтобы заменить существующую , вот иллюстративный пример SQL, который dbt выполнит на разных хранилищах (фактический SQL может быть гораздо сложнее этого!)
- Redshift
- BigQuery
- Snowflake
-- на redshift нельзя создать или заменить, поэтому используйте транзакцию для выполнения этого атомарно
begin;
create table "dbt_alice"."test_model__dbt_tmp" as (
select 1 as my_column
);
alter table "dbt_alice"."test_model" rename to "test_model__dbt_backup";
alter table "dbt_alice"."test_model__dbt_tmp" rename to "test_model"
commit;
begin;
drop table if exists "dbt_alice"."test_model__dbt_backup" cascade;
commit;
-- Сделайте API-вызов для создания набора данных (нет интерфейса DDL для этого)!!;
create or replace table `dbt-dev-87681`.`dbt_alice`.`test_model` as (
select 1 as my_column
);
create schema if not exists analytics.dbt_alice;
create or replace table analytics.dbt_alice.test_model as (
select 1 as my_column
);