Come caricare i dati in Vertica da C?
-
16-10-2019 - |
Domanda
Sto indagando i database delle colonne orientata e mi sono imbattuto Vertica.
La mia necessità è quella di alimentare il database di Vertica dal codice C. Non riesco a catturare queste informazioni da Vertica: Mi è stato detto di utilizzare il comando "copia" "VSQL" e. Tutto quello che voglio è un problema dichiarazioni INSERT
al mio database di Vertica.
Può questo essere fatto?
Per esempio, in PostgreSQL si può fare "SQL embedded" collegando la biblioteca ecpg
Postgres al C binario. Non ho idea se esiste tale cosa per Vertica, e non conosco nessun altro modo.
Tutte le idee?
Soluzione
Vertica include un driver ODBC per C.
Leggi "Programmatore di> Guida Vertica client Biblioteche> Programmazione Applicazioni ODBC client"
Questa sezione illustra la procedura per la configurazione del ODBC Vertica conducente. Spiega inoltre come utilizzare l'API ODBC per connettersi a Vertica nelle proprie applicazioni client.
Altri suggerimenti
Sono disponibili due opzioni veramente: È possibile creare un file delimitato con i vostri dati, come il seguente:
row1col1data,row1col2data,row1col3data,row1col4data
row2col1data,row2col2data,row2col3data,row2col4data
row3col1data,row3col2data,row3col3data,row3col4data
E 'possibile quindi caricare che in Vertica utilizzando il comando COPY e VSQL. Se si dispone dei diritti di superutente del database, è possibile caricare il file direttamente, utilizzando:
vsql -U <username> -w <password> YOURDATABASENAME -c "COPY yourtablename (col1name, col2name, col3name, col4name) FROM 'yourdelimitedfile' DELIMITER ','"
Omettere -w se si vuole entrare conservare la password fuori della vostra storia bash e inseriscilo all'avvio del programma. Se non si dispone di diritti di database di superutente, è ancora possibile gatto il file in VSQL e ottenere i dati da STDIN - abbastanza perché Vertica impedisce il caricamento dei dati da un file senza privilegi di supervisore, ma vi permetterà di qualsiasi tubo utente è in via di gatto , non ho idea, ma lo si può fare nel seguente modo:
cat yourdelimitedfile | vsql -U <username> -w <password> YOURDATABASENAME -c "COPY yourtablename (col1name, col2name, col3name, col4name) FROM STDIN DELIMITER ','"
In alternativa, se si dispone di un gruppo di istruzioni di inserimento individuali in un file, separate da un punto e virgola, si può semplicemente eseguire il file tramite VSQL, come segue:
vsql -U <username> -w <password> YOURDATABASENAME -f pathtoyoursqlfile
Ma se si sta facendo più di 1000 righe, si suppone che il caricamento di massa utilizzando un file delimitato ad essere molto più veloce.
Speranza che aiuta!