在Datasette這樣強大的資料探索工具中,如果能夠為任意SQL查詢結果自動標註每一列來自哪個表的哪個欄位,將極大提升使用者體驗。例如,對於查詢select users.name, orders.total from users join orders on orders.user_id = users.id,理想情況下程式應能識別出結果中的name列源自users.name,total列源自orders.total。這聽起來簡單,但實際上需要解析複雜的查詢語法,包括JOIN、子查詢和公共表表示式(CTE)。
Simon Willison在其研究中探索了多種實現方案。他最初嘗試使用Claude Code(Opus 4.8模型,當時Fable已被美國政府停用)來自動生成解決方案。研究發現了三條可行的技術路徑。
第一種方法是利用第三方Python庫apsw。apsw直接封裝了SQLite的C API,其cursor.description_full屬效能夠返回每列對應的表名和原始列名,是最直接的方式。第二種方法不需要額外安裝庫,而是透過Python內建的ctypes模組直接呼叫SQLite的C函式sqlite3_column_table_name()。這個函式在標準庫sqlite3模組中並未暴露,但透過ctypes橋接可以輕鬆獲取。第三種方法則更為巧妙:透過執行EXPLAIN命令並解析其輸出,可以推斷出每列的來源,這種方法完全不依賴SQLite的後設資料API。
不過,這些方法都有一個前提:SQLite在編譯時必須啟用SQLITE_ENABLE_COLUMN_METADATA選項。幸運的是,大多數主流Python發行版(如從python.org下載的版本)中內建的SQLite預設已啟用該選項,因此在實際應用中通常無需額外配置。
這項技術的實現將顯著增強Datasette的功能。例如,在查詢結果頁面中,每列的標題旁邊可以顯示其來源表名,點選即可跳轉到對應的資料表檢視。更進一步,還可以實現列級別的許可權控制,或者自動生成資料血緣圖。雖然目前這項工作仍處於研究階段,但上述多種可行的實現路徑為後續開發奠定了堅實基礎。