Why Text-to-SQL Fails in Enterprise
Більшість демо-версій Text-to-SQL занадто ідеальні.
Вони використовують прості схеми та очевидні назви таблиць. Вони припускають, що одна або дві таблиці ідеально пов'язані між собою. Це працює для демо-версії, але не працює в реальній компанії.
У корпоративних базах даних найскладнішим є не оператор SELECT. Найскладнішим є шлях об'єднання (join path).
Модель може написати коректний запит для отримання доходу за клієнтом. SQL виконується. Дашборд показує цифри. Але відповідь неправильна.
Чому це стається?
- Таблиця клієнтів не є офіційним головним списком (master list).
- Поле доходу не є версією, затвердженою фінансовим відділом.
- Записи дублюються в різних регіонах.
- Об'єднання створює помилки fanout.
- Фіскальні календарі відрізняються від календарних років.
Синтаксично правильний запит не є надійним запитом.
Реальні робочі системи хаотичні. Ви стикаєтеся з відсутністю зовнішніх ключів, застарілими таблицями та зв'язками «один до багатьох», які завищують показники. Навіть людям потрібно перевіряти старі звіти або запитувати фінансовий відділ, перш ніж довіряти результату об'єднання.
ШІ-модель бачить лише назви та колонки. Вона вгадує. Іноді це вгадування буває небезпечним.
Розглянемо fanout. Якщо ви об'єднуєте замовлення (orders) з позиціями замовлення (order lines), а потім із відвантаженнями (shipments), одне замовлення може бути пораховане кілька разів. SQL-запит правильний. Результат — хибний.
Метадані допомагають, але цього недостатньо. Назви колонок не підкажуть, чи є зв'язок безпечним для фінансової звітності. Зовнішні ключі не пояснюють історичні винятки.
Text-to-SQL потребує інтелекту розуміння зв'язків (relationship intelligence).
Надійна система повинна знати:
- Схвалені шляхи об'єднання для конкретних бізнес-питань.
- Кардинальність зв'язків (cardinality).
- Відомі ризики fanout.
- Які шляхи є застарілими (deprecated).
Замість того, щоб просто писати код, система має міркувати про безпеку. Вона повинна обирати надійний шлях або просити допомоги, якщо шляхи не є зрозумілими.
Прогалина в сучасних системах полягає у стрибку від зіставлення назв до генерації SQL. Потрібно додати шар контексту зв'язків.
Text-to-SQL — це не лише проблема мови. Це проблема контексту.
Поки моделі не розумітимуть, які об'єднання є безпечними, вони працюватимуть у демо-версіях, але підводитимуть у реальній експлуатації.
Source: https://dev.to/arisyndata/why-text-to-sql-breaks-when-the-join-path-is-not-obvious-3bk0
Optional learning community: https://t.me/GyaanSetuAi
