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