私は列指向データベースを調査していて、Verticaに出くわしました。
私の必要性は、CコードからVerticaデータベースにフィードすることです。 Verticaからこの情報を取得できません。「vsql」と「copy」コマンドを使用するように指示されています。私が欲しいのは、VerticaデータベースにINSERT
ステートメントを発行することだけです。
これはできますか?
たとえば、PostgreSQLでは、Postgres ecpg
ライブラリをCバイナリにリンクすることで「埋め込みSQL」を実行できます。 Verticaにそのようなものが存在するかどうかはわかりませんし、他の方法もわかりません。
何か案は?
Verticaには、C用のODBCドライバーが含まれています。
「プログラマーズ>ガイドVerticaクライアントライブラリ>プログラミングODBCクライアントアプリケーション」」をお読みください
このセクションでは、Vertica ODBCドライバーを構成するプロセスについて詳しく説明します。また、ODBC APIを使用して、独自のクライアントアプリケーションでVerticaに接続する方法についても説明します。
実際には2つのオプションがあります。次のように、データを使用して区切りファイルを作成できます。
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履歴に含めず、プログラムの起動時に入力します。データベースのスーパーユーザー権限がない場合でも、ファイルを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行を超える行を実行している場合は、区切られたファイルを使用した一括読み込みの方がはるかに高速であると考えられます。
お役に立てば幸いです。