質問
私は列指向のデータベースを調査しており、Verticaに出会いました。
私の必要性は、cコードからverticaデータベースを送ることです。 Verticaからこの情報を取得することに成功しません。「VSQL」と「コピー」コマンドを使用するように言われています。私が欲しいのは問題だけです INSERT
Verticaデータベースのステートメント。
これはできますか?
たとえば、PostgreSQLでは、ポストグレスをリンクすることで「組み込みSQL」を実行できます ecpg
あなたのcバイナリへのライブラリ。そのようなことがヴェルティカに存在するかどうかはわかりませんが、他の方法はありません。
何か案は?
解決
VerticaにはCのODBCドライバーが含まれています
「プログラマーズ>ガイドVerticaクライアントライブラリ>プログラミングODBCクライアントアプリケーション」を読む
このセクションでは、Vertica ODBCドライバーを構成するプロセスについて詳しく説明します。また、ODBC APIを使用して、自分のクライアントアプリケーションでVerticaに接続する方法についても説明しています。
他のヒント
本当に2つのオプションがあります。次のように、データを使用して区切りファイルを作成できます。
row1col1data,row1col2data,row1col3data,row1col4data
row2col1data,row2col2data,row2col3data,row2col4data
row3col1data,row3col2data,row3col3data,row3col4data
その後、コピーコマンドとVSQLを使用して、それをVerticaにロードできます。データベースのスーパーユーザーの権利がある場合は、以下を使用してファイルを直接読み込むことができます。
vsql -U <username> -w <password> YOURDATABASENAME -c "COPY yourtablename (col1name, col2name, col3name, col4name) FROM 'yourdelimitedfile' DELIMITER ','"
省略-W入力する場合は、パスワードをBASH履歴から締め出し、プログラムの開始時に入力してください。データベースのスーパーユーザーの権利がない場合でも、ファイルを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行以上を行っている場合、区切りファイルを使用したバルクロードは、はるかに高速になるはずです。
それが役立つことを願っています!