目次
はじめに
catコマンドやgrepコマンドなどの標準出力の結果を、Verticaのテーブルにロードする方法をご紹介します。用途
この方法は以下の様な場面で役に立ちます。・一時テーブルや中間テーブル、集計テーブルを作成する場合
・テーブルを再構築したい場合
・他のデータソースからデータを取り込みたい場合
・テーブルを再構築したい場合
・他のデータソースからデータを取り込みたい場合
構文と実行例
下記構文の「SELECT文」内に元テーブルを指定し、「テーブル名」に別テーブルを指定します。<標準出力のコマンド> | vsql -w <パスワード> -c “copy <テーブル名> from STDIN <各種オプション>”
サンプルデータの確認
1 2 3 4 5 6 |
$ cat test.csv "1","A","あ" "2","B","い" "3","C","う" "4","D","え" "5","E","お" |
テスト用テーブルの作成
1 2 3 4 5 6 7 8 9 10 11 |
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) |
標準出力の結果をテーブルにロード
1 2 3 4 5 6 7 8 9 10 11 12 13 |
テスト用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 2 3 4 5 6 7 8 9 10 11 12 |
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列目に正常にロードされました。
特定行+特定列のデータを標準出力させてロード
1 2 3 4 5 6 7 8 |
「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はこちらの記事に纏めています。データロードのまとめ
http://vertica-tech.ashisuto.co.jp/load-summary/