Vertica

如何從 C 將數據載入到 Vertica?

  • June 1, 2015

我正在研究面向列的數據庫並遇到了 Vertica。

我需要從 C 程式碼提供 Vertica 數據庫。我沒有成功從 Vertica 獲取此資訊:我被告知使用“vsql”和“copy”命令。我想要的只是INSERT向我的 Vertica 數據庫發出語句。

這可以做到嗎?

例如,在 PostgreSQL 中,您可以通過將 Postgresecpg庫連結到您的 C 二進製文件來執行“嵌入式 SQL”。我不知道 Vertica 是否存在這種情況,我也不知道其他方法。

有任何想法嗎?

Vertica 包括 C 的 ODBC 驅動程序。

閱讀“程序員 > 指南 Vertica 客戶端庫 > 編寫 ODBC 客戶端應用程序”

本節詳細介紹了配置 Vertica ODBC 驅動程序的過程。它還說明瞭如何在您自己的客戶端應用程序中使用 ODBC API 連接到 Vertica。

你真的有兩個選擇:你可以用你的數據創建一個分隔文件,如下所示:

row1col1data,row1col2data,row1col3data,row1col4data
row2col1data,row2col2data,row2col3data,row2col4data
row3col1data,row3col2data,row3col3data,row3col4data

然後,您可以使用 COPY 命令和 vsql 將其載入到 Vertica 中。如果你有數據庫超級使用者權限,你可以直接載入文件,使用:

vsql -U <username> -w <password> YOURDATABASENAME -c "COPY yourtablename (col1name, col2name, col3name, col4name) FROM 'yourdelimitedfile' DELIMITER ','"

如果要輸入密碼,請省略 -w 將密碼保留在 bash 歷史記錄中,並在程序啟動時輸入。如果您沒有數據庫超級使用者權限,您仍然可以將文件 cat 放入 vsql 並從 STDIN 獲取數據 - 這就是為什麼 Vertica 會阻止您從沒有超級使用者權限的文件中載入數據,但會讓任何使用者通過 cat 管道輸入,我不知道,但你可以這樣做:

cat yourdelimitedfile | vsql -U <username> -w <password> YOURDATABASENAME -c "COPY yourtablename (col1name, col2name, col3name, col4name) FROM STDIN DELIMITER ','"

或者,如果您在一個文件中有一堆單獨的插入語句,用分號分隔,您可以通過 vsql 執行該文件,如下所示:

vsql -U <username> -w <password> YOURDATABASENAME -f pathtoyoursqlfile

但是,如果您執行的行數超過 1000 行,則使用分隔文件的批量載入應該會快得多。

希望有幫助!

引用自:https://dba.stackexchange.com/questions/8033