2016-09-09 4 views
1

액세스중인 데이터베이스가 Snowflake에 있습니다. 배후의 저장 세부 사항에 대해서는 확실하지 않습니다.select 문에서 여러 스키마 선택

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

이 쿼리가 매일 실행됩니다 :

나는 즉, 동일한 데이터베이스에서 별도의 스키마에 저장 41 개 데이터 테이블에서 새 뷰를 작성 이런 식으로 뭔가를 보이는 지금 쿼리가 있습니다. 내 문제는 새로운 데이터 테이블을 며칠에 한 번씩 추가하고 별도의 스키마 아래에 저장되어 있으므로 새 테이블을 포함하도록 쿼리를 수동으로 편집해야한다는 것입니다 (그리고 스키마의 명명 스키마도 일관성이 없습니다. 나의 통제 밖의 이유). 새 스키마 + 테이블을 추가 할 때 수동 업데이트가 필요없이 매일 쿼리를 실행할 수있는 하위 쿼리를 사용하여 데이터베이스 내의 모든 스키마를 선택할 수있는 방법이 있습니까?

나는 다소

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 당국은 그것에 좋은 기사를 가지고 where 절에 적절한 DB를 가리 키도록합니다.

+0

sys.tables 시스템 뷰 내에 데이터베이스 이름이 포함되어 있지 않습니다! 특정 데이터베이스에서 연결이 아직 연결되지 않았 으면 DBNAME.sys.tables를 대신 선택하십시오. 또한 그가 shema 's를 어떻게 찾을 수 있는지에 관해서는 그가 자신의 견해를 수정하거나 그의 견해를 사용하여 테이블을 동적으로 선택하는 방법을 언급하지 않는다. – Matt

1

아쉽게도 Snowflake에서는 SQL 문을 동적으로 구성 할 수 없습니다 (아직). 물론 지원되는 언어 (예 : Python, JS) 중 하나를 사용하여 스크립트를 통해 달성하려는 작업을 수행 할 수 있습니다. 먼저 모든 스키마를 찾은 다음 전체 SQL 문을 작성합니다.

희망이 도움이됩니다.

+0

응답 주셔서 감사합니다. : 동적으로 생성 할 수있는 파이썬 스크립트로 쿼리 감싸기 –