2016-09-09 4 views
1

アクセスされているデータベースがSnowflakeにあります。舞台裏でのストレージの詳細は不明です。selectステートメントで複数のスキーマを選択する

私は、同じデータベースの下に別のスキーマに保存されている41個のデータテーブルから新しいビューを作成し、次のようになり、今のクエリを持っている:

CREATE VIEW all_data AS 
SELECT * FROM db.schema1.data UNION ALL 
SELECT * FROM db.schema2.data UNION ALL 
SELECT * FROM db.schema3.data 

このクエリは、毎日実行されます。私の問題は、数日おきに新しいデータテーブルが追加され、別のスキーマの下に格納されているので、これらの新しいテーブルを含めるようにクエリを手動で編集する必要があることです(スキーマの命名スキームも私のコントロール外の理由)。新しいスキーマ+テーブルが追加されたときに手動更新を必要とせずにクエリを毎日実行できるサブクエリを持つデータベース内のすべてのスキーマを選択できる方法はありますか?

は私がやや

CREATE VIEW all_data as 
SELECT * FROM [SELECT schemas from db].data 

ではなく、それがどのように動作するか確認してください、そしてどのように正しく組合結果のデータをするような構造を持つように結果のクエリをしたいと思います。

+0

RDBMSにこのタグを必ず付ける必要があります。 SQLサーバー?オラクル? mysql?....また、SQL Serverのための答えは、自動的にその方法で動的に識別されたスキーマを選択するビューを作成することはできません。ただし、動的SQLを使用してストアド・プロシージャを作成したり、ストアド・プロシージャを作成して既存のスキーマに基づいてビューを変更および再作成し、ビューでクエリを実行する前に実行することができます。 – Matt

+0

これは、実際にはバックエンドが何であるかわからない、スノーフレークで動作しています。 –

+0

大丈夫私は正しいものにタグを付けたが、それをチェックすると思う。申し訳ありませんが、私はその特定のプラットフォームを使用していないので、私は支援することができません。 – Matt

答えて

0

利用可能なテーブルとスキーマのリストを確実にクエリできます。データベース名を追加する必要がありますけれども

SELECT '['+SCHEMA_NAME(schema_id)+'].['+name+']' 
AS SchemaTable 
FROM sys.tables 

:クエリは、テーブルとスキーマのリストを引っ張って、これらの線に沿っている巻き取る要するに http://blog.sqlauthority.com/2009/06/17/sql-server-list-schema-name-and-table-name-for-database/

:SQL当局はそれに良い記事があります適切なDBを指すようにwhere句に追加します。

+0

sys.tablesシステムビュー内にデータベース名が含まれていません。特定のデータベースから接続がまだ接続されていない場合は、代わりにDBNAME.sys.tablesから選択します。また、シーマの発見方法については説明していますが、テーブルを動的に変更するためにビューを変更する方法やビューを動的に使用する方法については言及していません。 – Matt

1

残念ながら、Snowflakeでは、(まだ)SQL文を動的に構築することはできません。もちろん、サポートされている言語(Python、JSなど)のスクリプトを使用して、すべてのスキーマを見つけて完全なSQL文を作成することで、達成したいことを達成できます。

これが役に立ちます。

+0

返信いただきありがとうございます。 :それを動的に生成できるPythonスクリプトでクエリをラップする –

関連する問題