OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

標準出力の結果をテーブルにロードする方法

公開日:
更新日:
データロード
#コマンド

はじめに

catコマンドやgrepコマンドなどの標準出力の結果を、Verticaのテーブルにロードする方法をご紹介します。

用途

この方法は以下の様な場面で役に立ちます。

・一時テーブルや中間テーブル、集計テーブルを作成する場合
・テーブルを再構築したい場合
・他のデータソースからデータを取り込みたい場合

構文と実行例

下記構文の「SELECT文」内に元テーブルを指定し、「テーブル名」に別テーブルを指定します。

<標準出力のコマンド> | vsql -w <パスワード> -c “copy <テーブル名> from STDIN <各種オプション>”

サンプルデータの確認

$ cat test.csv
"1","A","あ"
"2","B","い"
"3","C","う"
"4","D","え"
"5","E","お"

テスト用テーブルの作成

dbadmin=> create table tab1 (col1 varchar(1),col2 varchar(1),col3 varchar(3));
CREATE TABLE

dbadmin=> \d tab1
                                   List of Fields by Tables
 Schema | Table | Column |    Type    | Size | Default | Not Null | Primary Key | Foreign Key
--------+-------+--------+------------+------+---------+----------+-------------+-------------
 public | tab1  | col1   | varchar(1) |    1 |         | f        | f           |
 public | tab1  | col2   | varchar(1) |    1 |         | f        | f           |
 public | tab1  | col3   | varchar(3) |    3 |         | f        | f           |
(3 rows)

標準出力の結果をテーブルにロード

テスト用CSVをcatしてロード
$ cat test.csv |vsql -w ssbm -c "copy tab1 from STDIN delimiter ',' enclosed by '\"' DIRECT"

ロードした結果を検索
$ vsql -w ssbm -c 'select * from tab1'
 col1 | col2 | col3
------+------+------
 1    | A    | あ
 2    | B    | い
 3    | C    | う
 4    | D    | え
 5    | E    | お
(5 rows)

作成したテーブルにテスト用のデータが正常にロードされました。

応用例

このやり方を応用すると、特定列のデータを任意の列にロードすることもできます。

特定列のデータを標準出力させてロード

1列目と3列目のデータを抽出してロード
$ cat test.csv |awk -F, '{print $1","$3}' |vsql -w ssbm -c "copy tab1(col1,col3) from STDIN delimiter ',' enclosed by '\"' DIRECT"

$ vsql -w ssbm -c 'select * from tab1'
 col1 | col2 | col3
------+------+------
 1    |      | あ
 2    |      | い
 3    |      | う
 4    |      | え
 5    |      | お
(5 rows)

1列目のデータと3列目のデータがそれぞれ1列目と3列目に正常にロードされました。

特定行+特定列のデータを標準出力させてロード

「5」のデータを含む行を抽出し、1列目と3列目のデータをロード
$ grep "5" test.csv |awk -F, '{print $1","$3}' |vsql -w ssbm -c "copy tab1(col1,col3) from STDIN delimiter ',' enclosed by '\"' DIRECT"

$ vsql -w ssbm -c 'select * from tab1'
 col1 | col2 | col3
------+------+------
 5    |      | お
(1 rows)

「5」のデータが含まれる行を抽出し、1列目と3列目のデータが正常にロードされました。

補足

今回はCSVファイルの標準出力結果をロードする例でしたが、さらに応用すると、他のノードで稼働している他社製データベースの標準出力の結果をVerticaに取り込むといったことも可能です。

コマンド例<他社データベースからの標準出力の結果> | vsql -h <Vertica稼働ノード> -U <ユーザ名> -w <パスワード> -c “COPY <テーブル名> FROM STDIN <各種オプション>”

ちょっとしたテストなどを行う際にも利用できますので、是非お試しください。

参考情報

データロードに関するTipsはこちらの記事に纏めています。

データロードのまとめ
https://www.ashisuto.co.jp/cm/analytics-database/load-summary.html

検証バージョンについて

この記事の内容はVertica 9.1で確認しています。