Azure SQL 데이터베이스 Elastic 쿼리 개요(미리 보기)
적용 대상:Azure SQL Database
탄력적 쿼리 기능(미리 보기)을 사용하면 Azure SQL Database의 여러 데이터베이스에 걸쳐 있는 T-SQL(Transact-SQL) 쿼리를 실행할 수 있습니다. 교차 데이터베이스 쿼리를 수행하여 원격 테이블에 액세스하고, Microsoft 및 타사 도구(Excel, Power BI, Tableau 등)를 연결하여 여러 데이터베이스가 있는 데이터 계층에서 쿼리할 수 있습니다. 이 기능을 사용하여 큰 데이터 계층에 대한 쿼리를 스케일 아웃할 수 있으며 BI(비즈니스 인텔리전스) 보고서의 결과를 시각화할 수 있습니다.
탄력적 쿼리를 사용하는 이유
Azure SQL Database
T-SQL에서 Azure SQL 데이터베이스의 데이터베이스를 완전히 쿼리합니다. 이를 통해 원격 데이터베이스에 대한 읽기 전용 쿼리가 가능하며, 현재 SQL Server 고객이 3~4개의 이름을 사용하는 애플리케이션 또는 연결된 서버를 SQL 데이터베이스로 마이그레이션할 수 있는 옵션을 제공합니다.
모든 서비스 계층에서 사용 가능
탄력적 쿼리는 Azure SQL Database의 모든 서비스 계층에서 지원됩니다. 낮은 서비스 계층에 대한 성능 제한 사항은 아래 미리 보기 제한 사항에 대한 섹션을 참조하세요.
원격 데이터베이스에 매개 변수 푸시
탄력적 쿼리는 이제 실행을 위해 원격 데이터베이스에 SQL 매개 변수를 푸시할 수 있습니다.
저장 프로시저 실행
sp_execute _remote를 사용하여 원격 저장된 프로시저 호출 또는 원격 함수를 실행합니다.
유연성
탄력적 쿼리가 있는 외부 테이블은 다른 스키마 또는 테이블 이름을 가진 원격 테이블을 참조할 수 있습니다.
탄력적 쿼리 시나리오
목표는 여러 데이터베이스가 행을 단일 전체 결과에 기여하는 쿼리 시나리오를 용이하게 하는 것입니다. 쿼리는 사용자 또는 애플리케이션에서 직접 구성하거나 데이터베이스에 연결된 도구를 통해 간접적으로 구성할 수 있습니다. 이는 보고서를 만들 때, 상용 BI 또는 데이터 통합 도구 또는 변경할 수 없는 애플리케이션을 사용할 때 특히 유용합니다. 탄력적 쿼리를 사용하여 Excel, PowerBI, Tableau 또는 Cognos 같은 도구에서 친숙한 SQL 서버 연결 환경을 사용하여 여러 데이터베이스를 쿼리할 수 있습니다. 탄력적 쿼리는 또한 SQL Server Management Studio 또는 Visual Studio에서 발급하는 쿼리를 통해 전체 데이터베이스 컬렉션에 쉽게 액세스할 수 있으며, Entity Framework 또는 기타 ORM 환경에서 데이터 베이스 간 쿼리를 수월하게 해줍니다. 그림 1은 기존 클라우드 애플리케이션(탄력적 데이터베이스 클라이언트 라이브러리 사용)이 확장된 데이터 계층에 빌드되고 탄력적 쿼리가 데이터베이스 간 보고에 사용되는 시나리오를 보여 줍니다.
그림 1 스케일 아웃 데이터 계층에서 사용하는 탄력적 쿼리
탄력적 쿼리에 대한 고객 시나리오는 다음 토폴로지로 특정됩니다.
수직 분할 - 데이터베이스 간 쿼리(토폴로지 1): 데이터는 데이터 계층의 여러 데이터베이스 간에 세로로 분할됩니다. 일반적으로 여러 테이블 집합이 서로 다른 데이터베이스에 상주합니다. 즉 스키마가 데이터베이스마다 서로 다릅니다. 예를 들어 인벤토리의 모든 테이블은 하나의 데이터베이스에 있고 모든 계정 관련 테이블은 두 번째 데이터베이스에 있습니다. 이 토폴로지의 일반적인 사용 사례에서는 여러 데이터베이스의 테이블에서 보고서를 쿼리하거나 컴파일해야 합니다.
수평 분할 - 분할 (토폴로지 2): 데이터가 수평으로 분할되어 확장된 데이터 계층에 행을 분산합니다. 이 방법에서는 스키마가 모든 분할 데이터베이스에서 동일합니다. 이 방법을 분할라고도 합니다. 분할은 (1) 탄력적 데이터베이스 도구 라이브러리 또는 (2) 자체 분할을 사용하여 수행하고 관리할 수 있습니다. 탄력적 쿼리는 여러 분할된 데이터베이스에서 보고서를 쿼리하거나 컴파일하는 데 사용됩니다. 분할된 데이터베이스는 일반적으로 탄력적 풀 내의 데이터베이스입니다. 데이터베이스가 공통 스키마를 공유하는 한 탄력적 쿼리를 탄력적 풀의 모든 데이터베이스를 한 번에 쿼리하는 효율적인 방법으로 생각할 수 있습니다.
참고 항목
탄력적 쿼리는 대부분의 처리(필터링, 집계)를 외부 원본 쪽에서 수행할 수 있는 보고 시나리오에 가장 적합합니다. 많은 양의 데이터가 원격 데이터베이스에서 전송되는 ETL 작업에는 적합하지 않습니다. 쿼리가 보다 복잡한 과도한 보고 작업 부하 또는 데이터 웨어하우징 시나리오의 경우, Azure Synapse Analytics사용을 고려합니다.
수직 분할 - 교차 데이터베이스 쿼리
코딩을 시작하려면 교차 데이터베이스 쿼리 시작(수직 분할)을 참조하세요.
탄력적 쿼리를 사용하여 SQL Database의 데이터베이스에 있는 데이터를 다른 SQL Database의 데이터베이스에서 사용하도록 할 수 있습니다. 이렇게 하면 한 데이터베이스의 쿼리가 SQL Database의 다른 원격 데이터베이스에 있는 테이블을 참조할 수 있습니다. 첫 번째 단계는 각 원격 데이터베이스에 대한 외부 데이터 원본을 정의하는 것입니다. 외부 데이터 원본은 원격 데이터베이스에 있는 테이블에 액세스하려는 로컬 데이터베이스에 정의됩니다. 원격 데이터베이스 변경은 필요하지 않습니다. 서로 다른 데이터베이스에 서로 다른 스키마가 있는 일반적인 수직 분할 시나리오의 경우 탄력적 쿼리를 사용하여 참조 데이터에 대한 액세스 및 데이터베이스 간 쿼리와 같은 일반적인 사용 사례를 구현할 수 있습니다.
Important
ALTER ANY EXTERNAL DATA SOURCE
권한을 소유해야 합니다. 이 권한은 ALTER DATABASE
권한에 포함됩니다. 기본 데이터 원본을 참조하려면 ALTER ANY EXTERNAL DATA SOURCE
권한이 필요합니다.
참조 데이터: 토폴로지는 참조 데이터 관리에 사용됩니다. 다음 그림에서는 참조 데이터가 있는 두 테이블(T1 및 T2)이 전용 데이터베이스에 유지됩니다. 탄력적 쿼리를 사용하면 그림과 같이 다른 데이터베이스에서 원격으로 T1 및 T2 테이블에 액세스할 수 있습니다. 참조 테이블이 작거나 참조 테이블에 대한 원격 쿼리에 선택적 조건자가 있는 경우 토폴로지 1을 사용합니다.
그림 2 수직 분할 - 탄력적 쿼리를 사용하여 참조 데이터 쿼리
데이터베이스 간 쿼리: 탄력적 쿼리를 사용하면 SQL Database에서 여러 데이터베이스 간 쿼리가 필요한 사용 사례를 구현할 수 있습니다. 그림 3에서는 CRM, 인벤토리, HR 및 제품의 네 가지 데이터베이스를 보여 줍니다. 또한 데이터베이스 중 하나에서 수행되는 쿼리는 하나 또는 모든 다른 데이터베이스에 액세스해야 합니다. 탄력적 쿼리를 사용하여 4개의 데이터베이스 각각에 대해 몇 가지 간단한 DDL 문을 실행하여 이 경우에 데이터베이스를 구성할 수 있습니다. 이 일회성 구성 후에 원격 테이블에 대한 액세스는 T-SQL 쿼리 또는 BI 도구에서 로컬 테이블을 참조하는 것만큼 간단합니다. 원격 쿼리가 큰 결과를 반환하지 않는 경우 이 방법을 사용하는 것이 좋습니다.
그림 3 수직 분할 - 탄력적 쿼리를 사용하여 여러 데이터베이스 쿼리
다음 단계에서는 동일한 스키마를 사용하여 SQL Database의 원격 데이터베이스에 있는 테이블에 액세스해야 하는 수직 분할 시나리오에 대한 탄력적 데이터베이스 쿼리를 구성합니다.
마스터 키 만들기
mymasterkey
데이터베이스 범위 자격 증명
mycredential
만들기형식
의 외부 데이터 원본 만들기 CREATE EXTERNAL TABLE
mytable
DDL 문을 실행한 후 로컬 테이블인 것처럼 원격 테이블 mytable
액세스할 수 있습니다. Azure SQL 데이터베이스는 테이블이 물리적으로 저장된 원격 데이터베이스에 대해 여러 병렬 연결을 자동으로 열고, 원격 데이터베이스에서 요청을 처리하며, 결과를 반환합니다.
행 분할 - 분할
탄력적 쿼리를 사용하여 분할된 데이터베이스를 통해 보고 작업을 수행합니다. 즉, 수평 분할된 데이터 계층에는 데이터 계층의 데이터베이스를 나타내는 탄력적 분할된 데이터베이스 맵이 필요합니다. 일반적으로 이 시나리오에서는 단일 분할된 데이터베이스 맵만 사용되고 탄력적 쿼리 기능(헤드 노드)이 있는 전용 데이터베이스는 쿼리를 보고하기 위한 진입점 역할을 합니다. 이 전용 데이터베이스만 분할된 데이터베이스 맵에 액세스해야 합니다. 그림 4에서는 탄력적 쿼리 데이터베이스 및 분할된 데이터베이스 맵을 사용하여 이 토폴로지 및 해당 구성을 보여 줍니다. 탄력적 데이터베이스 클라이언트 라이브러리 및 분할된 데이터베이스 맵 만들기에 대한 자세한 내용은 분할된 데이터베이스 맵 관리를 참조하세요.
그림 4 행 분할 - 탄력적 쿼리를 사용하여 분할된 데이터 계층에 대해 보고
참고 항목
탄력적 쿼리 데이터베이스(헤드 노드)는 별도 데이터베이스이거나 분할 맵을 호스팅하는 동일한 데이터베이스일 수 있습니다. 어떤 구성을 선택하든, 해당 데이터베이스의 서비스 계층 및 컴퓨팅 크기가 예상되는 로그인/쿼리 요청 수를 처리할 만큼 충분히 높은지 확인합니다.
다음 단계에서는 (일반적으로) SQL Database의 여러 원격 데이터베이스에 있는 테이블 집합에 액세스해야 하는 수평 분할 시나리오에 대한 탄력적 데이터베이스 쿼리를 구성합니다.
마스터 키 만들기
mymasterkey
데이터베이스 범위 자격 증명
mycredential
을 만듭니다.탄력적 데이터베이스 클라이언트 라이브러리를 사용하여 분할된 맵을 만듭니다.
타입의 CREATE EXTERNAL DATA SOURCE
mydatasource
SHARD_MAP_MANAGER
.CREATE EXTERNAL TABLE
mytable
이러한 단계를 수행한 후에는 로컬 테이블인 것처럼 수평 분할된 테이블 mytable
액세스할 수 있습니다. Azure SQL Database는 테이블이 물리적으로 저장된 원격 데이터베이스에 대해 여러 병렬 연결을 자동으로 열고, 원격 데이터베이스에서 요청을 처리하며, 결과를 반환합니다.
수평 분할 시나리오에 필요한 단계에 대한 자세한 내용은 수평 분할에 대한 탄력적 쿼리에서 제공합니다.
코딩을 시작하려면 행 분할(분할)을 위한 탄력적 데이터베이스 쿼리 시작하기를 참조하세요.
Important
큰 데이터베이스 세트에 대한 탄력적 쿼리의 실행 성공 여부는 쿼리를 실행하는 동안 각 데이터베이스의 가용성에 크게 좌우됩니다. 데이터베이스 중 하나를 사용할 수 없는 경우 전체 쿼리가 실패합니다. 수백 또는 수천 개의 데이터베이스를 한 번에 쿼리하려는 경우 클라이언트 애플리케이션에 재시도 논리가 포함되어 있는지 확인하거나 탄력적 작업을 활용하고 더 작은 데이터베이스 하위 집합을 쿼리하여 각 쿼리의 결과를 단일 대상으로 통합하는 것이 좋습니다.
T-SQL 쿼리
외부 데이터 원본과 외부 테이블을 정의한 후에는 일반 SQL Server 연결 문자열을 사용하여 외부 테이블을 정의한 데이터베이스에 연결할 수 있습니다. 그런 다음, 이 문서의 뒷부분에 설명된 제한 사항과 함께 해당 연결의 외부 테이블에 대해 T-SQL 문을 실행할 수 있습니다. 수평 분할 및 수직 분할
도구에 대한 연결
일반 SQL Server 연결 문자열을 사용하여 애플리케이션과 BI 또는 데이터 통합 도구를 외부 테이블이 있는 데이터베이스에 연결할 수 있습니다. SQL Server 도구에 대한 데이터 소스로 지원 되는지 확인 합니다. 연결되면, 도구로 연결하는 다른 SQL Server 데이터베이스와 마찬가지로 해당 데이터베이스의 탄력적 쿼리 데이터베이스와 외부 테이블을 참조하세요.
Important
탄력적 쿼리는 SQL Server 인증과 연결할 때만 지원됩니다.
비용
탄력적 쿼리는 Azure SQL 데이터베이스 비용에 포함됩니다. 원격 데이터베이스가 탄력적 쿼리 엔드포인트와 다른 데이터 센터에 있는 토폴로지는 지원되지만, 원격 데이터베이스의 데이터 전송은 정기적으로 Azure 요금()에 따라 청구됩니다.
미리 보기 제한 사항
더 작은 리소스와 표준 및 범용 서비스 계층에서 첫 번째 탄력적 쿼리를 실행하는 데 최대 몇 분이 걸릴 수 있습니다. 이번에는 탄력적 쿼리 기능을 로드해야 합니다. 로드 성능은 더 높은 서비스 계층 및 컴퓨팅 크기로 향상됩니다.
SSMS 또는 SSDT에서 외부 데이터 원본 또는 외부 테이블의 스크립팅은 아직 지원되지 않습니다.
SQL Database용 Import/Export는 외부 데이터 원본 및 외부 테이블을 아직 지원하지 않습니다. 내보내기/가져오기를 사용해야 하는 경우 내보내기 전에 이러한 개체를 삭제한 다음 가져온 후 다시 만듭니다.
탄력적 쿼리는 현재 외부 테이블에 대한 읽기 전용 액세스만 지원합니다. 그러나 외부 테이블이 정의된 데이터베이스에서 전체 Transact-SQL 기능을 사용할 수 있습니다. 예를 들어
SELECT <column_list> INTO <local_table>
사용하여 임시 결과를 유지하거나 외부 테이블을 참조하는 탄력적 쿼리 데이터베이스에 저장 프로시저를 정의하는 데 유용할 수 있습니다.nvarchar(max)
제외하고 LOB 형식(공간 형식 포함)은 외부 테이블 정의에서 지원되지 않습니다. 해결 방법으로, 원격 데이터베이스에서 LOB 형식을 nvarchar(max)로 캐스팅하는 뷰를 생성하고, 그런 다음 기본 테이블 대신 해당 뷰를 기준으로 외부 테이블을 정의한 후, 쿼리에서 원래의 LOB 형식으로 다시 캐스팅할 수 있습니다. 결과 집합의 nvarchar(max) 데이터 형식의 열은 탄력적 쿼리 구현에 사용되는 고급 일괄 처리 기법을 비활성화하여 쿼리 성능에 영향을 미칠 수 있으며, 대량의 비집계 데이터를 전송하는 비정형 사용 사례에서는 성능이 한 차원에서 많게는 두 차원까지 저하될 수 있습니다.
외부 테이블에 대한 열 통계는 현재 지원되지 않습니다. 테이블 통계는 지원되지만 수동으로 만들어야 합니다.
Azure SQL Database의 외부 테이블에는 커서가 지원되지 않습니다.
탄력적 쿼리는 Azure SQL 데이터베이스에서만 작동합니다. SQL Server 인스턴스를 쿼리하는 데 사용할 수 없습니다.
프라이빗 링크는 현재 외부 데이터 원본의 대상인 데이터베이스에 대한 탄력적 쿼리에서는 지원되지 않습니다.
관련 콘텐츠
- 크로스 데이터베이스 쿼리 시작하기(수직 분할) (프리뷰)
- 다른 스키마(미리 보기) 사용하여 클라우드 데이터베이스에서 쿼리를
- 확장된 클라우드 데이터베이스(미리 보기)
보고서 - 확장된 클라우드 데이터베이스(미리 보기)
보고 - sp_execute_remote(Azure SQL 데이터베이스)