CSV 虛擬表格會讀取 RFC 4180 格式的逗號分隔值,並將內容傳回,就像 SQL 表格中的列和欄一樣。
CSV 虛擬表格對於需要大量載入逗號分隔值內容的應用程式很有用。CSV 虛擬表格也可以作為實作其他虛擬表格的範本來源檔案。
CSV 虛擬表格並未內建在 SQLite 合併中。它以 獨立的來源檔案 形式提供,可以編譯成 可載入的擴充功能。從 命令列殼層 使用 CSV 虛擬表格的典型用法如下
.load ./csv CREATE VIRTUAL TABLE temp.t1 USING csv(filename='thefile.csv'); SELECT * FROM t1;
上述腳本的第一行會讓 命令列殼層 讀取並啟用 CSV 的執行時期可載入擴充功能。對於應用程式而言,等效的 C 語言 API 是 sqlite3_load_extension()。請注意,擴充功能檔名中省略了檔名副檔名(例如:".dll" 或 ".so" 或 ".dylib")。省略檔名副檔名不是必要的,但有助於讓腳本跨平台。SQLite 會自動附加適當的副檔名。
上述第二行建立一個名為「t1」的虛擬表格,它會讀取參數中所指定檔案的內容。欄位的數量和名稱會自動根據內容的第一行來決定。CSV 虛擬表格的其他選項提供了從字串(而非獨立檔案)取得 CSV 內容的功能,並讓程式設計師能更進一步控制欄位的數量和名稱。選項的詳細資訊如下。CSV 虛擬表格通常會建立為 TEMP 表格,因此它只會存在於目前的資料庫連線中,而不會成為資料庫結構的永久部分。請注意,SQLite 中沒有「CREATE TEMP VIRTUAL TABLE」指令。相反地,請在虛擬表格的名稱前面加上「temp.」結構前綴。
範例的第三行顯示了虛擬表格的使用方式,用來讀取 CSV 檔案的所有內容。這可能是使用虛擬表格最簡單的方式。CSV 虛擬表格可以在任何可以使用一般虛擬表格的地方使用。您可以在子查詢或共用表格運算式中使用 CSV 虛擬表格,或視需要加入 WHERE、GROUP BY、HAVING、ORDER BY 和 LIMIT 子句。
上述範例顯示了 CSV 虛擬表格的單一 filename='thefile.csv' 參數。但也可以使用其他參數。
filename=FILENAME
filename= 參數指定要從中讀取 CSV 內容的外部檔案。每個 CSV 虛擬表格都必須有 filename= 參數或 data= 參數,但不能同時存在這兩個參數。
data=TEXT
data= 參數指定 TEXT 是 CSV 檔案的文字內容。
schema=SCHEMA
schema= 參數指定一個 CREATE TABLE 陳述式,CSV 虛擬表格會將其傳遞給 sqlite3_declare_vtab() 介面,以定義虛擬表格中欄位的名稱。
columns=N
columns=N 參數指定 CSV 檔案中的欄位數。如果輸入資料包含超過此數量的欄位,則會忽略多餘的欄位。如果輸入資料包含較少的欄位,則會以 NULL 填滿額外的欄位。如果省略 columns=N 參數,則會讀取 CSV 檔案的第一行來判斷欄位數。
header=BOOLEAN
或僅
header
如果 header 參數為 true,則將 CSV 檔案的第一行視為標頭,而非資料。CSV 檔案的第二行會變成內容的第一行。如果省略 schema= 選項,則 CSV 檔案的第一行會決定欄位名稱。
虛擬表格的欄位名稱主要由 schema= 參數決定。如果省略 schema= 參數,但 header 為 true,則 CSV 檔案第一行中的值會變成欄位名稱。如果省略 schema= 參數,且 header 為 false,則欄位會命名為「c0」、「c1」、「c2」,以此類推。
此頁面最後修改於 2022-01-08 05:02:57 UTC