web-dev-qa-db-ja.com

CからVerticaにデータをロードする方法は?

私は列指向データベースを調査していて、Verticaに出くわしました。

私の必要性は、CコードからVerticaデータベースにフィードすることです。 Verticaからこの情報を取得できません。「vsql」と「copy」コマンドを使用するように指示されています。私が欲しいのは、VerticaデータベースにINSERTステートメントを発行することだけです。

これはできますか?

たとえば、PostgreSQLでは、Postgres ecpgライブラリをCバイナリにリンクすることで「埋め込みSQL」を実行できます。 Verticaにそのようなものが存在するかどうかはわかりませんし、他の方法もわかりません。

何か案は?

3
SCO

Verticaには、C用のODBCドライバーが含まれています。

「プログラマーズ>ガイドVerticaクライアントライブラリ>プログラミングODBCクライアントアプリケーション」」をお読みください

このセクションでは、Vertica ODBCドライバーを構成するプロセスについて詳しく説明します。また、ODBC APIを使用して、独自のクライアントアプリケーションでVerticaに接続する方法についても説明します。

4
serbaut

実際には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行を超える行を実行している場合は、区切られたファイルを使用した一括読み込みの方がはるかに高速であると考えられます。

お役に立てば幸いです。

4
Rohaq