ODBC 드라이버를 사용하여 SQL Server에서 Azure CosmosDB 쿼리 실행

 

·       Version : SQL Server, Azure CosmosDB

 

Azure CosmosDB 기존의  SQL Server 같은 클래식 데이터베이스에서 CosmosDB 컬렉션을 조회할  있는 ODBC 드라이버를 제공한다이번 포스트에서는 Transaction-SQL 사용하여 SQL Server에서 CosmosDB 컬렉션을 쿼리하는 방법을 설명한다.

 

SQL Server에서 CosmosDB 쿼리하는 이유는 무엇일까? CosmosDB 문서  기타 비관계형 데이터 유형을 저장  검색하고필터링하고 정렬할  있는 SQL / API 제공한다그러나 경우에 따라 GROUP BY, HAVING, 분석 기능이 있는  복잡한 쿼리를 실행하거나 CosmosDB 비관계형 데이터를  SQL Server 테이블에 저장하는 데이터와 조인해야 하는 경우가 있다 경우 CosmosDB 데이터를 쿼리하기 위해 Transaction-SQL 모든 기능을 활용할  있다.

 

[CosmosDB 설정]

먼저 CosmosDB계정을 생성하고 컬렉션에 실습할 데이터를 추가 한다데이터베이스 WWI  Orders 라는 콜렉션을 생성하고 개의 문서를 추가한다.

 

실습 데이터 등록이 완료 되었으면, SQL API 사용하여 컬렉션에 액세스한다.

 

[드라이버 설정]

SQL Server 설치된 컴퓨터에 CosmosDB ODBC 드라이버를 설치해야한다 드라이버를 설치하면 DSN에서 ODBC 소스를 설정하고 연결을 테스트해야한다.

·       ODBC 드라이버 다운로드 https://aka.ms/cosmos-odbc-64x64

 

 

[CosmosDB 쿼리]

모든 설정 후에 기존 SQL Server에서 OPENROWSET 함수를 사용하여 CosmosDB DSN 지정하여 CosmosDB 데이터를 쿼리   있다.

 

실습 데이터의 결과를 보면 CosmosDB에서 3개의 문서를 나타내는 3개의 행을 얻게 된다누락된 필드는 NULL 반한된다또한 아래 스크립트처럼 필터를 사용할 수도 있다.

SELECT a.*

FROM OPENROWSET('MSDASQL',

'DSN=cosmosdb1',

'select * from Orders where billto_Name = ''John Smith''') as a

 

실습데이터의 JSON 형식을 보면 shipTo 또는 billTo 같이 복잡한 JSON 객체가 모두 동일한 ROW 표시되고 있는 것을   있다모든 필드가 <object name>_ <field name> 형식으로 반환된다는 것이다하위 오프젝트가 있는 것으로 예상되는 경우 사용자는 이를 알고 있어야 한다또한 필자의 경우 태그와 같은 배열 속성이 매핑되거나 반환되지 않는다.

 

[결론]

CosmosDB ODBC 드라이버를 사용하면 CosmosDB 데이터에 대해 Transact-SQL 쿼리를 실행할  있다이는 CosmosDB 저장된 원격 데이터에 대해서 데이터 분석이 필요한 경우 유용햘  있다 경우 결과를 필터링 하고 필요한 필드만 선택한 다음 전체 Transact-SQL 언어를 사용하여 SQL Server에서 다양한 분석을 수행하는 조건자를 사용하여 CosmosDB 보낼  있다.

( 글을 쓰는 시점에는) CosmosDB드라이버는 Azure SQL 설치되어 있지 않으며 자체 드라이버를 추가할  없기 때문에 이는 Azure SQL 데이터베이스가 아닌 SQL Server에서만 가능하다.

 

[참고자료]

https://blogs.msdn.microsoft.com/sqlserverstorageengine/2019/03/11/running-azure-cosmosdb-queries-from-sql-server-using-odbc-driver/

 

2019-09-09 / Sungwook Kang / http://sungwookkang.com

 

Azure CosmosDB, SQL Server에서 Azure CosmosDB 연결하기, CosmosDB ODBC



출처: https://sqlmvp.tistory.com/ [Database Lab]
No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 38111
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 20672
2194 Azure purview - data governance, compliance 솔루션에 대해 file 코난(김대우) 2022.10.16 139
2193 Azure Synapse - COPY INTO로 대용량 데이터 분산 로드 코난(김대우) 2021.10.21 383
2192 Azure SQL Database로 CSV 파일 BULK INSERT - Python 코난(김대우) 2021.09.27 451
2191 Azure Synapse - Spark와 SQL Data warehouse 서비스 file 코난(김대우) 2021.09.16 369
2190 Azure에서 제공하는 데이터베이스 서비스 종류, AWS 및 GCP와 제품 비교 코난(김대우) 2020.12.25 989
2189 SQL Server 트랜잭션 로그 복원시 복원 시간이 오래 걸리는 현상 jevida(강성욱) 2020.02.28 1638
2188 SQL Server 2019 temp table을 사용한 워크로드에서 recompile 감소 jevida(강성욱) 2019.09.24 1851
2187 Azure SQL Managed Instance 및 SQL Server 2016 Later에서 대기 통계 분석 jevida(강성욱) 2019.09.24 1364
2186 SQL Server 2019에서 동기 통계 업데이트시 발생하는 쿼리 Blocking 확인 jevida(강성욱) 2019.09.21 1379
2185 SQL Server 2019 Log Writer Workers jevida(강성욱) 2019.09.21 1545
2184 SQL Server Login Timeout 디버깅 jevida(강성욱) 2019.09.19 2083
2183 SQL Server Worker Thread 기본 계산 jevida(강성욱) 2019.09.18 1507
2182 SQL Linux의 fsync 및 버퍼된 IO (버퍼된 쓰기중 오류가 발생하였을때 파일은 유효할까?) jevida(강성욱) 2019.09.17 1329
2181 SQL Server와 SQL Linux에서 인스턴스 파일 초기화 차이점 jevida(강성욱) 2019.09.14 1367
2180 BCP 실행시 동일 세션에서 여러개의 BULK INSERT 문으로 표시되는 이유 jevida(강성욱) 2019.09.13 1440
2179 삭제된 AD 그룹 계정으로 SQL Server 로그인 사례 (로그인 그룹 삭제 후 조치해야할 사항) jevida(강성욱) 2019.09.12 1243
2178 QPI(Query Performance Insights) 라이브러리를 사용하여 Azure SQL Managed Instance의 로그쓰기 사용량 확인 jevida(강성욱) 2019.09.11 1140
» ODBC 드라이버를 사용하여 SQL Server에서 Azure CosmosDB 쿼리 실행 jevida(강성욱) 2019.09.10 1211
2176 Azure SQL Managed Instance에서 로컬 스토리지 사용량 모니터링 jevida(강성욱) 2019.09.09 1283
2175 SQL Server Enterprise Edition 에서 CPU를 40 Core 이상 사용하지 못하는 현상 jevida(강성욱) 2019.09.04 1364





XE Login