perf(maintenance): skip sqlparse on oversized virtual-dataset SQL
sqlparse raises SQLParseError above MAX_GROUPING_TOKENS=10000 tokens (~25KB of typical SQL). The try/except fallback already handled it, but paid ~1s per oversized SQL for a parse doomed to fail. Add _SQLPARSE_SKIP_THRESHOLD (30k chars) to bypass sqlparse for oversized text (~15x faster, 1.2s->0.08s for a 212KB SQL) while keeping literal filtering for SQL under the threshold. Tests: oversized-SQL skip-threshold behavior.
This commit is contained in:
@@ -132,6 +132,13 @@ Superset отклоняет его HTTP 400. Для `is_not_null` значени
|
||||
`schema.table`. Это best-effort сопоставление (допускает возможные false positives из
|
||||
строковых литералов) вместо жёсткого отказа всего скана.
|
||||
|
||||
**Оптимизация:** для SQL длиннее `_SQLPARSE_SKIP_THRESHOLD = 30_000` символов
|
||||
sqlparse пропускается сразу — замеры показывают, что после ~25КБ типичного SQL
|
||||
10000 токенов превышаются гарантированно, а неудачная попытка `sqlparse.parse`
|
||||
стоит ~1с на датасет. Пропуск экономит это время (для 212КБ датасета падение
|
||||
времени извлечения с ~1.2с до ~0.08с), не меняя результат (regex-fallback всё равно
|
||||
используется). На SQL до порога литеральное фильтрование сохраняется.
|
||||
|
||||
### Отклонённая альтернатива
|
||||
|
||||
Поднимать `MAX_GROUPING_TOKENS` в `sqlparse` (монакий-патч или правка константы) —
|
||||
|
||||
Reference in New Issue
Block a user