Настройка кавычек в проектах
quoting:
database: true | false
schema: true | false
identifier: true | false
Определение
Вы можете настроить, следует ли dbt заключать в кавычки базы данных, схемы и идентификаторы при:
- создании связей (таблиц/представлений)
- разрешении функции
ref
в прямую ссылку на связь
Обратите внимание, что для конфигурации кавычек в BigQuery здесь следует использовать database
и schema
, хотя эти настройки будут применяться к именам project
и dataset
соответственно.
Значение по умолчанию
Значения по умолчанию зависят от базы данных.
- По умолчанию
- Snowflake
Для большинства адаптеров кавычки по умолчанию установлены в true
.
Почему? Выбор из связей с идентификаторами в кавычках или без них одинаково прост. Кавычки позволяют использовать зарезервированные слова и специальные символы в этих идентификаторах, хотя мы рекомендуем избегать этого, если это возможно.
quoting:
database: true
schema: true
identifier: true
В Snowflake кавычки по умолчанию установлены в false
.
Создание связей с идентификаторами в кавычках делает эти идентификаторы чувствительными к регистру. Выбор из них становится гораздо сложнее. Вы можете повторно включить кавычки для идентификаторов связей, которые чувствительны к регистру, являются зарезервированными словами или содержат специальные символы, но мы рекомендуем избегать этого, насколько это возможно.
quoting:
database: false
schema: false
identifier: false
Примеры
Установите кавычки в false
для проекта:
quoting:
database: false
schema: false
identifier: false
dbt затем создаст связи без кавычек:
create table analytics.dbt_alice.dim_customers
Рекомендации
Snowflake
Установите все конфигурации кавычек в False
. Это означает, что вы не можете использовать зарезервированные слова в качестве идентификаторов, однако обычно лучше избегать этих зарезервированных слов.
Если таблица источника Snowflake использует кавычки для базы данных, схемы или идентификатора таблицы, вы можете настроить это в файле source.yml. Обратитесь к настройке кавычек для получения дополнительной информации.
Объяснение:
В то время как большинство баз данных приводят к нижнему регистру некавыченные идентификаторы, Snowflake приводит к верхнему регистру некавыченные идентификаторы. Если имя модели в нижнем регистре и в кавычках, то к нему нельзя обратиться без кавычек! Ознакомьтесь с примером ниже для получения дополнительной информации.
/*
Вы можете выполнить следующие запросы в своей базе данных,
чтобы понять, как работают кавычки в Snowflake.
*/
-- Это вывод примерной модели `orders.sql` с включенными кавычками
create table "analytics"."orders" as (
select 1 as id
);
/*
Эти запросы НЕ будут работать! Поскольку таблица выше была создана с кавычками,
Snowflake создал таблицу orders с нижним регистром схемы и идентификатора.
Поскольку некавыченные идентификаторы автоматически приводятся к верхнему регистру,
оба следующих запроса эквивалентны, и ни один из них не будет работать правильно.
*/
select * from analytics.orders;
select * from ANALYTICS.ORDERS;
/*
Чтобы выполнить запрос к этой таблице, вам нужно будет заключить в кавычки схему и таблицу. Этот
запрос действительно должен завершиться без ошибки.
*/
select * from "analytics"."orders";
/*
Чтобы избежать этой путаницы с кавычками, вы можете отключить кавычки для схем
и идентификаторов в вашем файле dbt_project.yml. Это означает, что вы
не сможете использовать зарезервированные слова в качестве имен моделей, но вам, вероятно,
не следует этого делать в любом случае! Предполагая, что кавычки для схем и идентификаторов
отключены, следующий запрос действительно будет работать:
*/
select * from analytics.orders;
Другие хранилища
Оставьте значения по умолчанию для вашего хранилища.