Разбор SQL
dbt использует библиотеку Python sqlparse для разбора SQL. Для больших или сложных запросов может потребоваться настроить группировку токенов в sqlparse, чтобы избежать проблем с производительностью или достижения ограничений при разборе.
Вы можете использовать флаг --sqlparse, чтобы настроить группировку токенов в sqlparse. Этот флаг позволяет задать ограничения группировки, описанные в разделе «Безопасность и производительность» документации sqlparse.
Поддерживаемые ключи:
| Ключ | Назначение |
|---|---|
MAX_GROUPING_DEPTH | Задаёт максимальную глубину вложенности при группировке токенов |
MAX_GROUPING_TOKENS | Задаёт максимальное количество токенов, которые можно сгруппировать за один раз |
Каждый ключ принимает одно значение: целое число или null. Значение по умолчанию для обоих ключей — null, что означает, что dbt не задаёт пользовательское ограничение.
sqlparse применяет встроенные ограничения (MAX_GROUPING_DEPTH = 100 и MAX_GROUPING_TOKENS = 10000), чтобы предотвратить чрезмерное использование ресурсов. Установка значения null полностью отключает соответствующее ограничение.
Например, следующая команда задаёт оба ограничения группировки:
dbt compile --sqlparse '{"MAX_GROUPING_DEPTH": 200, "MAX_GROUPING_TOKENS": 20000}'
Вы можете настроить только один ключ, чтобы задать одно ограничение. Любой неуказанный ключ по умолчанию принимает значение null. В следующем примере только ограничение глубины увеличивается до 500; MAX_GROUPING_TOKENS не задан, поэтому sqlparse не применяет ограничение количества токенов при этом запуске.
dbt compile --sqlparse '{"MAX_GROUPING_DEPTH": 500}'
Если ключи не указаны, оба ограничения остаются незаданными (null), и sqlparse не применяет никаких ограничений группировки.
Вы можете использовать --sqlparse со следующими командами:
dbt compiledbt rundbt builddbt testdbt seeddbt snapshotdbt source freshnessdbt docs generatedbt show