2016-10-10 9 views
1

enter code hereは、私は次のような問題している:私はにVerticaデータベースのテーブルの束を持っているSQLクエリは

は言う:

+------------+ 
| Tablenames | 
+------------+ 
| a_1  | 
| a_2  | 
| a_34  | 
| b_1  | 
| b_4  | 
+------------+ 

テーブルがまったく同じではありませんが、持っていますほとんど同じようなエントリ。そして今、a_(a_1 a_2 a_34)で始まるすべてのテーブルに対して1つのクエリを作成したいと思います。

文字列a_のすべてのテーブルを検索して、何らかのリストを出力し、forループまたは生成されたリストとの結合操作を使用する方法はありますか?私はそれらのすべての上に1つのクエリを実行したいと思いますa_で始まるすべてのテーブル名を持つ

私は新しいテーブルが(temp_tableそれを呼び出すことができます)を取得したら、そのようなこと(Matlabの構文):

for ii=1:length(temp_table) 
Data{ii}=SELECT * FROM temp_table(ii) WHERE paste_condition_here 
end 

したがって、Dataは、各繰り返しで新しい行を追加する新しいテーブルにする必要があります。

+0

あなたがここに詳細情報を提供する必要があります。テーブルから動的に選択することはできません。ただし、SQLスクリプトを使用して、後で実行できるSQLを生成できます。いくつかのサンプル出力を表示し、おそらくこれについて光を当てるのを助けようとしています。 – woot

+0

私は質問を並べ替える方法を考えなければなりません。 – valenzio

+0

私には分かりませんか? MetaDataを探しているテーブルのデータですか? –

答えて

0

_から始まるすべてのテーブルを取得するには: -

select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME like 'a_%' 

次にこれをエイリアスと、あなたが好きなように、リストや各テーブルに参加することができます。

+0

これは私にとっては役に立ちません。 "INFORMATION_SCHEMA"が存在しません。 – valenzio

+0

v_catelog.tablesを使用してください: - v_catalog.TABLESのTABLE_NAMEを選択してください。ここで、TABLE_NAMEは 'a_%'に似ています。 –

+0

@ Nirjhar、はい、うまくいきました!しかし、今私は何をするのですか。すべてのテーブルに対してクエリを初期化するにはどうしたらいいですか? – valenzio

2

@Nirjihar - INFORMATION_SCHEMA(あなたがv_catalogが必要)であり、あなたは、MySQLで混乱しています。

select TABLE_NAME from v_catalog.TABLES where TABLE_NAME like 'a_%'; 

これは単なる補足として 'A_%'

の基準にすべてのテーブルを返します! Verticaではループはありません!このためには、UDP(ユーザー定義プロシージャー)を使用する必要があります。これは任意の言語(シェル、Java、R、C++)で記述することができます。 私はあなたのためにここモデルに先に行くと、ポストます:

1 - シェルPROC - 手順フォルダに作成される

#!/bin/bash 
. /home/dbadmin/.profile 
/opt/vertica/bin/vsql -U $username -w $password -t -o /tmp/query.sql -c" 
SELECT 
    ' select * from ' 
    ||TABLE_SCHEMA 
    ||'.' 
    ||TABLE_NAME 
    ||';' 
FROM 
v_catalog.TABLES where TABLE_NAME like '%$1%' 
" 
/opt/vertica/bin/vsql -U $username -w $password -F $'|' -At -o /tmp/query_output.csv -f /tmp/query.sql 

2 - 変更のshファイルPRIVS

chmod 4750 query_table.sh 

3 - それに応じて.profileファイルが設定されていることを確認してください。

. /home/dbadmin/.profile 
#!/bin/bash 

username=dbadmin 
password=secrectpasswd 
export username 
export password 

注:これはテキストでpasswdのを回避することで、テキストのみのpasswdの一点

4持っている - のVerticaカタログでUDPを登録

. /home/dbadmin/.profile 

admintoolsと-t install_procedureを-f/vertica/catalog //プロシージャ/ query_table。SH -d -p $パスワード

5 -Create UDPデータベース

. /home/dbadmin/.profile 
/opt/vertica/bin/vsql -U $username -w $password -c "CREATE PROCEDURE dba.query_table(table_name varchar) AS 'query_table.sh' LANGUAGE 'external' USER 'dbadmin';" 

6内部 -

select dba.query_table('you possible table name here'); 

7 PROCを実行 - 結果

をチェック
  • a - エクスポートされたデータ(csv '|'で区切られたもの)を含むファイル
  • のファイルを取得します。

私はここで同様のポストを持っている: http://www.aodba.com/create-vertica-schema-fly/

+0

これは正常です!それは、指定された文字列を持つすべてのテーブルを持つテーブルを私に与えます。ここからどうすればいいですか? forループまたはjoin opperationを使用しますか? – valenzio

+0

だから、それぞれの質問をしたいですか?またはすべてを組合わせる? –

+0

@ Up_One投稿を編集しました。私は、それぞれの質問のより良いintermsまたはそれらのすべての組合であるか分からない。より速く/簡単に実装することができます。 あなたのUDPのアプローチに関しては、私はそれについての経験はありませんが、私はそれを試してみます。 – valenzio