적용 대상: SQL Server 2016 (13.x) 및 이후 버전
: Azure SQL 데이터베이스,
Azure SQL Managed Instance
,Microsoft Fabric의 SQL 데이터베이스
데이터 가상화를 사용하면 데이터베이스에 로드하지 않고 외부 데이터에 대해 Transact-SQL(T-SQL) 쿼리를 실행할 수 있습니다. 외부 데이터 원본, 선택적 파일 형식 및 외부 테이블을 정의한 다음 다른 테이블과 SELECT 마찬가지로 외부 테이블을 쿼리합니다.
이 가이드는 다음을 도와줍니다.
- SQL 플랫폼 및 버전에 따라 지원되는 PolyBase 기능을 이해합니다.
- 외부 테이블
OPENROWSET과 데이터 쿼리 또는 수집 중에서BULK INSERT선택합니다. - 일반적인 시나리오에 대한 단계별 링크를 따릅니다.
- 프로덕션 워크로드에 대한 성능, 문제 해결 및 모범 사례를 검토합니다.
플랫폼 지원
- PolyBase는 데이터 가상화를 구현하는 Microsoft SQL 데이터베이스 엔진 기능입니다.
- PolyBase는 Windows의 SQL Server 2016 이후 버전과 Linux의 SQL Server 2019 이후 버전에서 지원됩니다.
- PolyBase는 리눅스용 SQL Server 2017에서 지원되지 않습니다.
- PolyBase는 Azure SQL Database에서 지원되지 않지만, Azure SQL Database는 외부 테이블을 통해
OPENROWSET관련 데이터 가상화 기능을 제공합니다. 자세한 내용은 Azure SQL Database를 사용한 데이터 가상화(미리 보기)를 참조하세요. - PolyBase는 이름상 Azure SQL Managed Instance에 포함되어 있지 않지만, Azure SQL Managed Instance에는 비슷하게 작동하는 데이터 가상화 기능이 있습니다. 자세한 내용은 Azure SQL Managed Instance를 사용한 데이터 가상화를 참조하세요.
- PolyBase는 Fabric의 SQL 데이터베이스에서 지원되지 않지만, Fabric의 SQL 데이터베이스는 OneLake 내 데이터에 대한 자체 데이터 가상화 기능을 제공합니다. 자세한 내용은 Fabric의 SQL 데이터베이스 내 데이터 가상화를 참조하세요.
- PolyBase는 Fabric Data Warehouse에서 기능으로 간주되지 않습니다. Fabric Data Warehouse에서 데이터 가상화를 원한다면 OneLake 단축Fabric 고려해 보세요. Fabric Data Warehouse의 데이터 로딩 관련 기사는 T-SQL을 이용한 데이터 인제스tion 및 차원 모델링: 로드 테이블을 참조하세요.
일반적인 사용 사례
다음 표에서는 가능한 사용 시나리오에 대해 설명합니다.
| 시나리오 | 사용하세요 |
|---|---|
| 임시 파일 탐색 | OPENROWSET(BULK ...) |
| BI나 보고용 재사용 파일 쿼리 | 파일 기반 외부 테이블 |
| 데이터베이스 간 쿼리 (SQL Server, Oracle, Teradata, MongoDB, ODBC) | 외부 테이블이 있는 PolyBase 커넥터 |
| 쿼리 결과를 파일로 내보내기 |
CREATE EXTERNAL TABLE AS SELECT(CETAS) |
| 테이블로의 대량 데이터 적재 |
BULK INSERT 또는 OPENROWSET(BULK ...)INSERT ... SELECT |
- 임시 파일 탐색을 위해 재사용 가능한 테이블을 만들지 않고 파일을 검사하는 데 사용
OPENROWSET(BULK ...)하세요. - BI나 보고 시나리오에서 재사용 가능한 파일 쿼리를 위해, 파일 위에 외부 테이블을 사용하여 스키마를 영지화하고 쿼리 간에 결과를 공유합니다.
- 데이터베이스 간 쿼리를 위해서는 외부 테이블이 있는 PolyBase 커넥터를 사용하여 SQL Server, Oracle, Teradata, MongoDB, 또는 ODBC 소스에 접근하세요.
- 쿼리 결과를 파일로 내보내려면 (CETAS)를 사용
CREATE EXTERNAL TABLE AS SELECT해 Parquet 또는 CSV 출력을 데이터베이스 외부에 작성하세요. - 테이블에 대량 인제스팅을 할 때는
BULK INSERT파일 데이터를 데이터베이스 테이블에 로드하는 데 사용하거나OPENROWSET(BULK ...)함INSERT ... SELECT께하세요.
사용할 수 있는 기능은 어디인가요?
다음 표는 SQL Server 2019부터 각 SQL 플랫폼에서 제공되는 핵심 PolyBase 및 데이터 가상화 기능을 보여줍니다. Windows SQL Server 2016 및 SQL Server 2017의 기능 가용성에 대해서는 PolyBase 기능 및 제한 사항을 참조하세요. 자세한 가이드를 사용하기 전에 이 표를 사용하여 플랫폼에서 수행할 수 있는 작업을 결정합니다.
| 특징 | SQL Server 2019 | SQL Server 2022년 | SQL Server 2025년 | Azure SQL 데이터베이스 | Azure SQL Managed Instance(애저 SQL 매니지드 인스턴스) | Microsoft Fabric의 SQL 데이터베이스 |
|---|---|---|---|---|---|---|
| 외부 테이블 | 예 | 예 | 예 | 예 | 예 | 예 |
| OPENROWSET(BULK) | 예 1 | 예 | 예 | 예 | 예 | 예 |
| CETAS (내보내기) | No | 예 | 예 | No | 예 | No |
| CSV/구분된 파일 | 예 2 | 예 | 예 | 예 | 예 | 예 |
| Parquet 파일 | No | 예 | 예 | 예 | 예 | 예 |
| Delta Lake 테이블 | No | 예 | 예 | No | No | No |
| 다른 SQL Server에 연결 | 예 | 예 | 예 | No | No | No |
| Azure SQL Database 또는 Azure SQL Managed Instance에 연결 | 예 3 | 예 3 | 예 3 | No | No | No |
| Oracle / Teradata / MongoDB에 연결 | 예 | 예 | 예 | No | No | No |
| Azure Blob Storage에 연결 | 예 | 예 | 예 | 예 | 예 | No |
| ADLS Gen2에 연결 | 예 5 | 예 | 예 | 예 | 예 | No |
| S3 호환 스토리지에 연결 | No | 예 | 예 | No | No | No |
| 패브릭(OneLake)으로 연결 | No | No | No | No | No | 예 |
| 푸시다운 계산 | 예 | 예 | 예 | No | No | No |
| 관리 ID 인증 | No | No | 예 4 | 예 | 예 | No |
1 SQL Server 2019(15.x)는 로컬 및 네트워크 파일 경로를 지원 OPENROWSET(BULK...) 합니다. SQL Server 2022(16.x) 및 이후 버전에서는 OPENROWSET(BULK...)가 FORMAT = 'PARQUET', FORMAT = DELTA, 및 FORMAT = 'CSV'와 함께 클라우드 스토리지에서 데이터 읽기를 지원합니다.
SQL Server 2019(15.x)의 CSV 지원에 Hadoop이 필요했습니다. SQL Server 2022(16.x) 이상 버전에서 CSV는 Hadoop 없이 기본적으로 지원됩니다.
3 SQL Server 커넥터(sqlserver://)를 사용합니다. 데이터베이스 범위 인증 정보는 SQL 엔드포인트를 대상으로 합니다. 다른 SQL Server 인스턴스에 연결할 때와 같은 단계를 사용하세요.
4 관리 ID 인증은 ABS(Azure Blob Storage) 및 ADLS Gen2에 연결하는 데 지원됩니다. 온-프레미스 SQL Server용 Azure VM에서 Azure Arc 지원 SQL Server 또는 SQL Server가 필요합니다. Azure SQL Database 및 Azure SQL Managed Instance에서 기본적으로 사용할 수 있습니다.
5 SQL Server 2019 CU11 및 이후 버전은 또는 abfss 접두사가 있는 abfs Azure Data Lake Storage Gen2를 지원합니다. SQL Server 2022 및 이후 버전에서는 접두사를 사용하세요.adls
- 외부 테이블은 SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance, Microsoft Fabric의 SQL 데이터베이스에서 지원됩니다.
-
OPENROWSET (BULK)SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance, Microsoft Fabric의 SQL 데이터베이스에서 지원됩니다. SQL Server 2019는 로컬 및 네트워크 파일 경로를 지원하며, SQL Server 2022 및 이후 버전은 ,FORMAT = DELTA,FORMAT = 'CSV', 로 클라우드 저장소FORMAT = 'PARQUET'읽기도 지원합니다. - CETAS 내보내기는 SQL Server 2019, Azure SQL Database, Microsoft Fabric의 SQL 데이터베이스에서 지원되지 않습니다. CETAS 내보내기는 SQL Server 2022, SQL Server 2025, Azure SQL Managed Instance에서 지원됩니다.
- CSV 및 구분된 파일은 SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance, Microsoft Fabric의 SQL 데이터베이스에서 지원됩니다. SQL Server 2019는 CSV 지원을 위해 Hadoop이 필요하며, SQL Server 2022 및 이후 버전은 Hadoop 없이 CSV를 네이티브로 지원합니다.
- Parquet 파일은 SQL Server 2019에서 지원되지 않습니다. Parquet 파일은 SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance, Microsoft Fabric의 SQL 데이터베이스에서 지원됩니다.
- Delta Lake 테이블은 SQL Server 2019, Azure SQL Database, Azure SQL Managed Instance, Microsoft Fabric의 SQL 데이터베이스에서 지원되지 않습니다. 델타 레이크 테이블은 SQL Server 2022와 SQL Server 2025에서 지원됩니다.
- 다른 SQL Server 인스턴스와의 연결은 SQL Server 2019, SQL Server 2022, SQL Server 2025에서 지원됩니다. Azure SQL Database, Azure SQL Managed Instance, Microsoft Fabric의 SQL 데이터베이스에서는 다른 SQL Server 인스턴스에 연결하는 것이 지원되지 않습니다.
- Azure SQL Database 또는 Azure SQL Managed Instance 연결은 2019년 SQL Server, 2022 SQL Server, 2025년 SQL Server부터 SQL Server 커넥터를 사용하여 지원됩니다. 데이터베이스 범위 인증 정보는 Azure SQL Database 또는 Azure SQL Managed Instance 엔드포인트를 대상으로 하며, 구성 단계는 다른 SQL Server 인스턴스에 연결할 때와 동일합니다. 이러한 연결은 Azure SQL Database, Azure SQL Managed Instance, 또는 Microsoft Fabric의 SQL 데이터베이스에서 지원되지 않습니다.
- Oracle, Teradata, MongoDB에 대한 연결은 SQL Server 2019, SQL Server 2022, SQL Server 2025에서 지원됩니다. 이러한 연결은 Azure SQL Database, Azure SQL Managed Instance, 또는 Microsoft Fabric의 SQL 데이터베이스에서 지원되지 않습니다.
- Azure Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance에서 Azure Blob Storage 연결이 지원됩니다. Microsoft Fabric의 SQL 데이터베이스에서는 Azure Blob Storage에 연결하는 것이 지원되지 않습니다.
- SQL Server 2019 버전(CU11 이전)이나 Microsoft Fabric의 SQL 데이터베이스에서는 ADLS Gen2 연결이 지원되지 않습니다. SQL Server 2019 CU11부터 ADLS Gen2 연결이 지원되며, SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance에서도 지원됩니다.
- SQL Server 2019, Azure SQL Database, Azure SQL Managed Instance, Microsoft Fabric의 SQL 데이터베이스에서는 S3 호환 스토리지에 대한 연결이 지원되지 않습니다. S3 호환 스토리지에 대한 연결은 SQL Server 2022와 SQL Server 2025에서 지원됩니다.
- OneLake 연결은 Microsoft Fabric의 SQL 데이터베이스에서 지원됩니다. OneLake 접속은 SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance에서 지원되지 않습니다.
- 푸시다운 계산은 SQL Server 2019, SQL Server 2022, SQL Server 2025에서 지원됩니다. 푸시다운 계산은 Azure SQL Database, Azure SQL Managed Instance, Microsoft Fabric의 SQL 데이터베이스에서 지원되지 않습니다.
- 관리형 신원 인증은 SQL Server 2019나 SQL Server 2022에서 지원되지 않습니다. 관리 신원 인증은 SQL Server 2025에서 Azure Blob Storage와 ADLS Gen2 연결에 지원되며, Azure Arc 지원 SQL Server 또는 Azure 가상 머신 위의 SQL Server가 필요합니다. 관리 신원 인증은 Azure SQL Database와 Azure SQL Managed Instance에서도 지원되지만, Microsoft Fabric의 SQL 데이터베이스에서는 지원되지 않습니다.
메모
SQL Server 2025(17.x)부터 Azure Blob Storage, ADLS Gen2 또는 S3 호환 스토리지에서 데이터 파일(CSV, Parquet 및 Delta)을 쿼리하는 것은 네이티브 엔진 기능이며 더 이상 PolyBase 서비스를 설치하거나 실행할 필요가 없습니다. RDBMS 커넥터(SQL Server, Oracle, Teradata, MongoDB, ODBC)는 PolyBase 서비스를 설치하고 실행해야 합니다. 또한 SQL Server 2025(17.x)는 이전에 Windows에서만 사용할 수 있었던 이러한 커넥터에 대한 Linux 지원을 추가합니다.
외부 데이터 쿼리
특정 시나리오를 선택하기 전에 외부 데이터를 쿼리하는 세 가지 방법을 이해합니다.
| 접근법 | 문법 | 사용 시기 | 인증 | 폴리베이스 설치 필요 |
|---|---|---|---|---|
| OLE DB 임시 쿼리 | OPENROWSET(provider, connection, query) |
영구 개체 없이 빠른 일회성 쿼리를 원하거나 Microsoft Entra ID 인증이 필요합니다. | SQL 인증, Windows 인증, Microsoft Entra ID(MSOLEDBSQL) | No |
| 파일에 대한 임시 쿼리 | OPENROWSET(BULK ...) |
테이블을 만들기 전에 파일 데이터를 빠르게 탐색하거나 스키마를 테스트하려고 합니다. | SAS 토큰, 액세스 키, 관리 ID, Microsoft Entra ID | SQL Server 2022: 예 1 SQL Server 2025 및 이후 버전: 아니오 Azure SQL Database, Azure SQL Managed Instance, 그리고 Fabric의 SQL 데이터베이스: 내장 |
| 영구 데이터 커넥터 |
CREATE EXTERNAL TABLE와 , sqlserver://oracle://, teradata://등 |
프로덕션에 대한 반복 액세스, 거버넌스, 통계 및 푸시다운 계산이 필요합니다. | SQL 인증 전용 | 예 |
1 SQL Server 2022 (16.x)에서 클라우드 파일 접근을 위해서는 PolyBase 기능을 설치해야 하지만, Azure Blob Storage, ADLS Gen2, S3 호환 스토리지 커넥터는 PolyBase 서비스에 의존하지 않습니다. SQL Server 2025(17.x) 이후 버전은 PolyBase 서비스를 설치하거나 실행하지 않고도 CSV, Parquet, Delta를 네이티브로 지원합니다.
- OLE DB 애드혹 쿼리는 영구 객체를 생성하지 않고 원격 데이터 소스에 일회성 빠르게 접근할 수 있도록 사용됩니다
OPENROWSET(provider, connection, query). SQL 인증, Windows 인증 또는 MSOLEDBSQL을 Microsoft Entra ID 사용할 수 있습니다. 이 시나리오는 PolyBase 설치가 필요하지 않습니다. - 파일에 대한 임시 쿼리는 파일 데이터를 빠르게 탐색하거나 테이블을 만들기 전에 스키마를 테스트하는 데 사용됩니다
OPENROWSET(BULK ...). SAS 토큰, 접근 키, 관리 신원, Microsoft Entra ID 등을 사용할 수 있습니다. SQL Server 2022는 클라우드 파일에 대해 PolyBase 기능 설치를 요구하지만, PolyBase 서비스는 필요하지 않습니다. SQL Server 2025 이후 버전은 클라우드 파일에 폴리베이스가 필요하지 않습니다. 파일 애드혹 쿼리는 Azure SQL Database, Azure SQL Managed Instance, Fabric의 SQL 데이터베이스에 내장되어 있습니다. - 영구 데이터 커넥터는 , ,
oracle://teradata://, 와 유사한 위치를 사용하여CREATE EXTERNAL TABLEsqlserver://생산 작업 중 반복 접근, 거버넌스, 통계 및 푸시다운 계산을 수행합니다. SQL 인증과 PolyBase 서비스가 필요합니다.
의사 결정 가이드
| 시나리오 | 권장 사항 |
|---|---|
| 원격 SQL을 위해 Microsoft Entra ID 인증이 필요하거나 PolyBase 서비스를 피하고 싶을 수도 있습니다. | (임시로 사용 OPENROWSET(MSOLEDBSQL, ...) 하며, 영구 객체 없음). |
| 영구 테이블, 통계, 또는 원격 데이터베이스로 푸시다운 계산이 필요합니다. | PolyBase 커넥터(CREATE EXTERNAL TABLE, sqlserver://, oracle://, teradata://, mongodb://, odbc://)와 함께 사용하십시오.
OPENROWSET 커넥터를 지원하지 않습니다. |
| 새 파일을 탐색하거나 스키마를 테스트하는 거죠. | 빠른 OPENROWSET(BULK ...) 반복, 영속 객체 사용 금지. |
| 파일 데이터를 변환이 포함된 테이블에 인징하는 거죠. |
INSERT ... SELECT에서 OPENROWSET(BULK ...)을(를) 사용하십시오. |
| 많은 사용자나 애플리케이션에 대해 거버넌스나 공유 접근이 필요합니다. | 권한을 사용 CREATE EXTERNAL TABLE 해 메타데이터와 메타데이터를 중앙집중화하세요. |
| Fabric에서 SQL 데이터베이스를 다루고 계시죠. | 임시 OneLake 쿼리나 재사용 가능한 외부 테이블에 사용 OPENROWSET(BULK ...) ; 외부 저장 공간으로는 OneLake 바로가기를 사용하세요. |
- 원격 SQL을 위해 Microsoft Entra ID 인증이 필요하거나 PolyBase 서비스를 피하고 싶다면, 영구 객체 없이 임시 원격 쿼리에 사용
OPENROWSET(MSOLEDBSQL, ...)하세요. - 영구 테이블, 통계, 또는 원격 데이터베이스로 푸시다운 계산이 필요하다면, PolyBase 커넥터와 함께 ,
oracle://mongodb://teradata://odbc://.sqlserver://CREATE EXTERNAL TABLEOPENROWSET이 커넥터들을 지원하지 않습니다. - 새 파일을 탐색하거나 스키마를 테스트할 때는 빠른 반복과 영구 객체 사용 금지를 위해 사용
OPENROWSET(BULK ...)하세요. - 변환이 있는 테이블에 파일 데이터를 인제스트할 때는
INSERT ... SELECTOPENROWSET(BULK ...). - 많은 사용자나 애플리케이션에 대한 거버넌스나 공유 접근이 필요하다면, SO를 권한
CREATE EXTERNAL TABLE과 메타데이터를 중앙집중화하세요. - Fabric에서 SQL 데이터베이스를 다룰 경우, 애드혹 OneLake 쿼리나 재사용 가능한 외부 테이블을 사용
OPENROWSET(BULK ...)하고, 외부 저장소에는 OneLake 바로가기를 사용하세요.
시나리오 선택
이제 세 가지 방법을 이해했으므로 다음 가이드 중 하나를 사용하여 특정 사용 사례를 구현합니다.
쿼리 파일(Parquet, CSV 또는 Delta)
데이터가 Azure Blob Storage, ADLS Gen2, S3 호환 스토리지 또는 OneLake의 Parquet, CSV 또는 델타 파일에 있는 경우 다음 가이드 중 하나를 따르세요.
| 시나리오 | 권장 가이드 | 플랫폼 |
|---|---|---|
| Parquet 또는 CSV 파일에 대한 빠른 임시 쿼리 |
OPENROWSET을 사용합니다. 외부 테이블이 필요하지 않음 |
SQL Server 2022(16.x) 이상 버전, Azure SQL Database, Azure SQL Managed Instance, Fabric의 SQL 데이터베이스 |
| 영구 스키마가 있는 Parquet 파일에 대한 반복 쿼리 | Parquet 파일을 기반으로 외부 테이블 생성하기 | SQL Server 2022(16.x) 이상 버전, Azure SQL Database, Azure SQL Managed Instance, Fabric의 SQL 데이터베이스 |
| 외부 테이블을 사용하여 CSV 파일 쿼리 | 구분된 텍스트의 파일 형식으로 외부 테이블 만들기 | SQL Server 2019(15.x) 이상 버전, Azure SQL Database, Azure SQL Managed Instance, Fabric의 SQL 데이터베이스 |
| Delta Lake 테이블 쿼리 | 를 사용하여 외부 테이블 만들기 FILE_FORMAT = DeltaLakeFileFormat |
SQL Server 2022(16.x) 이상 버전 |
| Parquet 또는 CSV 파일로 쿼리 결과 내보내기(CETAS) |
CREATE EXTERNAL TABLE AS SELECT 사용 |
SQL Server 2022(16.x) 이상 버전, Azure SQL Managed Instance |
- Parquet이나 CSV 파일에 대한 빠른 임시 쿼리를 원한다면
OPENROWSET. 이 방법은 외부 테이블이 필요하지 않습니다. SQL Server 2022 (16.x) 이후 버전, Azure SQL Database, Azure SQL Managed Instance, Fabric 내 SQL 데이터베이스가 이 패턴을 지원합니다. - 영구 스키마가 있는 Parquet 파일에 반복 쿼리를 할 때는 Parquet 대신 외부 테이블을 사용하세요. SQL Server 2022 (16.x) 이후 버전, Azure SQL Database, Azure SQL Managed Instance, Fabric 내 SQL 데이터베이스가 이 패턴을 지원합니다.
- CSV 파일에 대한 쿼리는 구분된 텍스트를 위한 파일 형식의 외부 테이블을 사용하세요. SQL Server 2019 (15.x) 이후 버전, Azure SQL Database, Azure SQL Managed Instance, Fabric의 SQL 데이터베이스가 이 패턴을 지원합니다.
- 델타 호수 테이블에 대한 쿼리는 .을 가진
FILE_FORMAT = DeltaLakeFileFormat외부 테이블을 사용하세요. SQL Server 2022 (16.x) 및 이후 버전은 이 패턴을 지원합니다. - 쿼리 결과를 Parquet이나 CSV 파일
CREATE EXTERNAL TABLE AS SELECT로 내보내려면 . SQL Server 2022 (16.x) 이후 버전과 Azure SQL Managed Instance는 이 패턴을 지원합니다.
다음 단계별 자습서 중 하나를 따를 수도 있습니다.
| 자습서 | 설명 |
|---|---|
| SQL Server 2022에서 PolyBase 시작 | Parquet 및 CSV, 외부 테이블 및 폴더 탐색과 함께 OPENROWSET을(를) 다룹니다. |
| PolyBase를 사용하여 S3 호환 개체 스토리지에서 parquet 파일 가상화 | SQL Server 2022(16.x) 이상 버전에 대한 자습서입니다. |
| PolyBase를 사용하여 CSV 파일 가상화 | SQL Server 2022(16.x) 이상 버전에 대한 자습서입니다. |
| PolyBase를 사용하여 델타 테이블 가상화 | SQL Server 2022(16.x) 이상 버전에 대한 자습서입니다. |
| Azure SQL Database를 사용하여 데이터 가상화(미리 보기) | Parquet 및 CSV에 대한 Azure SQL Database 가이드입니다. |
| Azure SQL Managed Instance를 사용한 데이터 가상화 | Parquet, CSV 및 CETAS에 대한 Azure SQL Managed Instance 가이드입니다. |
| 패브릭 내 SQL 데이터베이스에서의 데이터 가상화 | OneLake 파일에 대한 패브릭의 SQL 데이터베이스 가이드입니다. |
다른 SQL Server 인스턴스, Azure SQL Database 또는 SQL Managed Instance에 연결
SQL Server 2019(15.x) 이상 버전에서 PolyBase는 연결된 서버를 사용하지 않고 다른 SQL Server 인스턴스, Azure SQL Database 또는 Azure SQL Managed Instance의 테이블을 쿼리할 수 있습니다.
중요합니다
커넥터는 sqlserver:// Fabric의 SQL 데이터베이스에서 지원되지 않습니다. PolyBase RDBMS 커넥터는 CREATE DATABASE SCOPED CREDENTIAL을 통해 SQL 인증을 사용하며, Microsoft Entra ID, 관리 ID 또는 서비스 주체 인증은 지원하지 않습니다. 패브릭의 SQL 데이터베이스에는 Microsoft Entra 인증이 필요하므로 PolyBase를 사용하여 연결할 수 없습니다.
| Step | 무엇을 해야 할지 |
|---|---|
| 1. PolyBase 설치 | Windows에 PolyBase 설치 또는 Linux에 PolyBase 설치 |
| 2. 자격 증명 만들기 |
CREATE DATABASE SCOPED CREDENTIAL 대상 로그인으로 |
| 3. 외부 데이터 원본 만들기 | CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>') |
| 4. 외부 테이블 만들기 | CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>') |
| 5. 쿼리 | SELECT * FROM <external_table> |
-
- Windows 또는 Linux에 PolyBase를 설치하려면 Windows에 PolyBase를 설치하거나 Linux 위에 PolyBase를 설치한 후 외부 SQL 데이터 접근을 설정하세요.
-
- 대상 로그인
CREATE DATABASE SCOPED CREDENTIAL으로 데이터베이스 범위가 지정된 자격 증명을 생성하여 엔진이 원격 서버에 인증할 수 있도록 하세요.
- 대상 로그인
-
- 원격 SQL Server용 외부 데이터 소스를 생성하려면
CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>').
- 원격 SQL Server용 외부 데이터 소스를 생성하려면
-
- 원격 테이블을 표현하는 데 사용
CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>')해 외부 테이블을 만드세요.
- 원격 테이블을 표현하는 데 사용
-
- 외부 테이블을 쿼리하려면
SELECT * FROM <external_table>.
- 외부 테이블을 쿼리하려면
팁 (조언)
SQL Server 커넥터()는sqlserver:// Azure SQL Database 및 Azure SQL Managed Instance에서도 작동합니다. 같은 단계를 사용하고, LOCATION Azure SQL Database 또는 Azure SQL Managed Instance 엔드포인트(예: sqlserver://myserver.database.windows.net).
자세한 가이드는 SQL Server의 외부 데이터에 액세스하도록 PolyBase 구성을 참조하세요.
Oracle, Teradata 또는 MongoDB에 연결
SQL Server 2019(15.x) 이상 버전은 PolyBase ODBC 커넥터를 통해 Oracle, Teradata, MongoDB 및 Cosmos DB를 쿼리할 수 있습니다.
| 데이터 원본 | 가이드 | 요구 사항 |
|---|---|---|
| Oracle | Oracle의 외부 데이터에 액세스하도록 PolyBase 구성 | SQL Server 2019(15.x) 이상 버전, Oracle 클라이언트 드라이버 |
| Teradata | Teradata의 외부 데이터에 액세스하도록 PolyBase 구성 | SQL Server 2019(15.x) 이상 버전, Teradata ODBC 드라이버 |
| 몽고DB / 코스모스 DB | MongoDB의 외부 데이터에 액세스하도록 PolyBase 구성 | SQL Server 2019(15.x) 이상 버전, MongoDB ODBC 드라이버 |
| 모든 ODBC 원본 | ODBC 제네릭 형식을 사용하여 외부 데이터에 액세스하도록 PolyBase 구성 | SQL Server 2019(15.x) 이상 버전(Windows) (SQL Server 2025(17.x)부터 Linux) |
- Oracle 데이터 소스는 Oracle 가이드의 외부 데이터를 접근하기 위해 Configure PolyBase를 사용하며, SQL Server 2019 (15.x) 및 이후 버전과 Oracle 클라이언트 드라이버가 필요합니다.
- Teradata 데이터 소스는 Configure PolyBase를 사용하여 Teradata 가이드에서 외부 데이터를 접근하며, SQL Server 2019 (15.x) 및 이후 버전과 Teradata ODBC 드라이버가 필요합니다.
- MongoDB 또는 Cosmos DB 데이터 소스는 MongoDB 가이드에서 외부 데이터를 접근하기 위해 PolyBase 구성을 사용하며, SQL Server 2019 (15.x) 및 이후 버전과 MongoDB ODBC 드라이버가 필요합니다.
- 모든 ODBC 소스는 Configure PolyBase를 사용하여 ODBC 일반 타입 가이드와 함께 외부 데이터를 접근할 수 있으며, Windows에서는 SQL Server 2019(15.x) 이후 버전, Linux에서는 SQL Server 2025(17.x) 및 이후 버전이 필요합니다.
Azure Blob Storage 또는 ADLS Gen2에 연결
| SQL 플랫폼 | 인증 옵션 | 가이드 |
|---|---|---|
| SQL Server 2022(16.x) 이상 버전 | SAS 토큰, 액세스 키, 관리 ID(SQL Server 2025(17.x)부터) | Azure Blob Storage의 외부 데이터에 액세스하도록 PolyBase 구성 |
| SQL Server 2019(15.x) | 액세스 키(Hadoop 커넥터를 통해) | Azure Blob Storage의 외부 데이터에 액세스하도록 PolyBase 구성 |
| Azure SQL 데이터베이스 | SAS 토큰, 관리 ID, Microsoft Entra 통과 | Azure SQL Database를 사용하여 데이터 가상화(미리 보기) |
| Azure SQL Managed Instance(애저 SQL 매니지드 인스턴스) | SAS 토큰, 관리 ID | Azure SQL Managed Instance를 사용한 데이터 가상화 |
- 2022 SQL Server 이후 버전은 2025년 SQL Server(17.x)부터 SAS 토큰, 접근 키 또는 관리 신원(Managed Identity)을 사용하여 Azure Blob Storage 또는 ADLS Gen2 인증을 지원합니다. 자세한 내용은 Azure Blob Storage의 외부 데이터에 액세스하도록 PolyBase 구성을 참조하세요.
- SQL Server 2019는 Hadoop 커넥터를 통해 접근 키를 사용하여 Azure Blob Storage 또는 ADLS Gen2를 지원합니다. 자세한 내용은 Azure Blob Storage의 외부 데이터에 액세스하도록 PolyBase 구성을 참조하세요.
- Azure SQL Database는 SAS 토큰, 관리 신원, Microsoft Entra 패스스루 인증을 사용하여 Azure Blob Storage 또는 ADLS Gen2를 지원합니다. 자세한 내용은 Azure SQL Database를 사용한 데이터 가상화(미리 보기)를 참조하세요.
- Azure SQL Managed Instance는 SAS 토큰이나 관리 신원을 사용하여 Azure Blob Storage 또는 ADLS Gen2를 지원합니다. 자세한 내용은 Azure SQL Managed Instance를 사용한 데이터 가상화를 참조하세요.
SQL Server 2022(16.x)에서 URI 접두사는 변경되었습니다. SQL Server 2019(15.x) 또는 이전 버전에서 마이그레이션하는 경우:
-
Azure Blob Storage:
wasb[s]://를abs://로 변경 -
ADLS Gen2:
abfs[s]://를adls://로 변경
자세한 내용은 Azure Blob Storage의 외부 데이터에 액세스하도록 PolyBase 구성을 참조하세요.
S3 호환 개체 스토리지에 연결
SQL Server 2022(16.x) 이상 버전은 Amazon S3, MinIO 및 Ceph와 같은 S3 호환 스토리지를 지원합니다.
자세한 내용은 S3 호환 개체 스토리지의 외부 데이터에 액세스하도록 PolyBase 구성을 참조하세요.
(CETAS)를 사용하여 CREATE EXTERNAL TABLE AS SELECT 데이터 내보내기
CETAS는 쿼리 결과를 Azure Blob Storage, ADLS Gen2 또는 S3 호환 스토리지의 외부 파일(Parquet 또는 CSV)으로 내보냅니다.
| SQL 플랫폼 | 지원됨 | 내보내기 형식 | Notes |
|---|---|---|---|
| SQL Server 2022 (16.x) 및 이후 버전. CETAS를 사용해 ADLS Gen2로 내보내려면 SQL Server 2022 CU5 이상 버전이 필요합니다. | 예 | 파켓, CSV | 서버 구성 필요: 폴리베이스 내보내기 허용. |
| Azure SQL Managed Instance(애저 SQL 매니지드 인스턴스) | 예 | 파켓, CSV | 기본적으로 사용하지 않도록 설정 |
| Azure SQL 데이터베이스 | No | 없음 | 사용할 수 없음 |
| 패브릭의 SQL 데이터베이스 | No | 없음 | 사용할 수 없음 |
- SQL Server 2022 이후 버전은 CETAS를 지원하며 Parquet 및 CSV 파일을 내보낼 수 있습니다. 서버 설정: polybase 내보내기 허용 설정이 필요합니다. CETAS를 ADLS Gen2로 내보내는 기능은 CU5 이전 SQL Server 2022 릴리스에서 제공되지 않습니다.
- Azure SQL Managed Instance는 CETAS를 지원하며 Parquet와 CSV 파일을 내보냅니다. 기본 비활성화 지침은 기본 상태를 설명합니다.
- Azure SQL Database는 CETAS를 지원하지 않습니다.
- Fabric의 SQL 데이터베이스는 CETAS를 지원하지 않습니다.
Transact-SQL 참조는 (CETAS)를 참조CREATE EXTERNAL TABLE AS SELECT하세요.
빠른 시작 예제
예제 1: Parquet 파일의 임시 쿼리(OPENROWSET)
외부 테이블이 필요하지 않습니다. SQL Server 2022(16.x) 이상 버전, Azure SQL Database, Azure SQL Managed Instance 및 Fabric의 SQL 데이터베이스에서 작동합니다.
SELECT TOP 10 *
FROM OPENROWSET (
BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
FORMAT = 'PARQUET'
) AS [result];
Azure Blob Storage에 저장된 CSV 파일을 활용한 외부 테이블 예제 2
이 예시는 CSV 파일을 통해 외부 테이블을 지원하는 모든 SQL 플랫폼에서 작동합니다.
1단계: DMK(데이터베이스 마스터 키)를 만듭니다. 자격 증명이 SAS 토큰 비밀을 저장하기 때문에 이 단계가 필요합니다. 하지만 관리 신원(Managed Identity)이나 Microsoft Entra 인증을 사용하면 이 단계를 건너뛸 수 있습니다.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';2단계: SAS 토큰을 사용하여 자격 증명을 만듭니다. 선행
?을 생략합니다.CREATE DATABASE SCOPED CREDENTIAL MyStorageCred WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '<your_SAS_token>'; -- omit the leading '?'3단계: 외부 데이터 원본을 만듭니다.
CREATE EXTERNAL DATA SOURCE MyAzureStorage WITH ( LOCATION = 'abs://mycontainer@mystorageaccount.blob.core.windows.net', CREDENTIAL = MyStorageCred );4단계: CSV에 대한 파일 형식을 만듭니다.
CREATE EXTERNAL FILE FORMAT CsvFormat WITH ( FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS ( FIELD_TERMINATOR = ',', STRING_DELIMITER = '"', FIRST_ROW = 2 ) );5단계: 외부 테이블을 만듭니다.
CREATE EXTERNAL TABLE dbo.SalesExternal ( OrderId INT, OrderDate DATE, Amount DECIMAL (18, 2), Customer NVARCHAR (100) ) WITH ( DATA_SOURCE = MyAzureStorage, LOCATION = '/data/sales/', FILE_FORMAT = CsvFormat );6단계: 외부 테이블을 쿼리합니다.
SELECT * FROM dbo.SalesExternal WHERE OrderDate >= '2025-01-01';
예제 3: 다른 SQL Server에서 테이블 쿼리
이 예제는 SQL Server 2019(15.x) 이상 버전에서 작동합니다.
1단계: 데이터베이스 마스터 키를 만듭니다(자격 증명이 암호를 저장하기 때문에 필요).
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';2단계: 원격 SQL Server 인스턴스에 대한 자격 증명을 만듭니다.
CREATE DATABASE SCOPED CREDENTIAL RemoteSqlCred WITH IDENTITY = 'remote_user', SECRET = '<password>';3단계: 외부 데이터 원본을 만듭니다.
CREATE EXTERNAL DATA SOURCE RemoteSqlServer WITH ( LOCATION = 'sqlserver://remote-server.contoso.com', PUSHDOWN = ON, CREDENTIAL = RemoteSqlCred );4단계: 외부 테이블(세 부분으로 구성된 이름)을
LOCATION만듭니다.CREATE EXTERNAL TABLE dbo.RemoteCustomers ( CustomerId INT, CustomerName NVARCHAR (200) COLLATE SQL_Latin1_General_CP1_CI_AS ) WITH ( DATA_SOURCE = RemoteSqlServer, LOCATION = 'SalesDB.dbo.Customers' );5단계: 서버 간 쿼리
SELECT c.CustomerName, s.Amount FROM dbo.RemoteCustomers AS c INNER JOIN dbo.LocalSales AS s ON c.CustomerId = s.CustomerId;
예제 4: CETAS를 사용하여 Parquet에 결과 내보내기
SQL Server 2022(16.x) 이상 버전인 Azure SQL Managed Instance에서 작동합니다.
1단계: CETAS를 사용하도록 설정합니다(SQL Server에만 해당).
EXECUTE sp_configure 'allow polybase export', 1; RECONFIGURE;2단계: 자격 증명 및 데이터 원본을 만듭니다(이전 예제에서 다시 사용).
3단계: Parquet 내보내기를 위한 파일 형식을 만듭니다.
CREATE EXTERNAL FILE FORMAT ParquetFormat WITH ( FORMAT_TYPE = PARQUET );4단계: 쿼리 결과 내보내기
CREATE EXTERNAL TABLE dbo.Sales2025Export WITH ( DATA_SOURCE = MyAzureStorage, LOCATION = '/exports/sales_2025.parquet', FILE_FORMAT = ParquetFormat ) AS SELECT * FROM Sales.Orders WHERE OrderDate >= '2025-01-01';
PolyBase에 대한 T-SQL 구성 요소
시나리오를 구현하기 전에 PolyBase에서 사용하는 핵심 T-SQL 개체와 이러한 개체가 어떻게 결합되는지 이해합니다.
인증(데이터베이스 마스터 키, 자격 증명)에서 데이터 원본 및 파일 형식, 쿼리 메서드(외부 테이블, OPENROWSET, BULK INSERTCETAS)에 이르는 PolyBase T-SQL 개체 및 해당 관계를 보여 주는 다이어그램.
- 외부 데이터 소스 문법에 대해서는 .CREATE EXTERNAL DATA SOURCE
- 외부 파일 형식 문법에 대해서는 .CREATE EXTERNAL FILE FORMAT
- 외부 테이블 문법에 대해서는 .CREATE EXTERNAL TABLE
- 애드혹 데이터 접근 구문에 대해서는 OPENROWSET을 참조하세요.
- CETAS 문법에 대해서는 (CETAS)를 참조하세요CREATE EXTERNAL TABLE AS SELECT.
모든 개체에 대한 전체 Transact-SQL 참조는 PolyBase Transact-SQL 참조를 참조하세요.
중요합니다
외부 파일 형식에 대한 데이터 형식 매핑을 확인합니다. 외부 파일 형식을 만들거나 파일을 OPENROWSET쿼리하는 경우 PolyBase는 원본 데이터 형식(Parquet, CSV, Delta, Oracle, Teradata, MongoDB)을 SQL Server 데이터 형식에 자동으로 매핑합니다. 형식이 일치하지 않으면 무음 자름, 정밀도 손실 또는 쿼리 오류가 발생할 수 있습니다. 예를 들어 Parquet DECIMAL(38,18)는 DECIMAL(18,0)로 매핑합니다. 외부 테이블 열 또는 WITH 절을 정의하기 전에 매핑 테이블을 검토합니다. 전체 참조는 PolyBase를 사용한 형식 매핑을 참조하세요.
언제 필요 CREATE MASTER KEY해?
DMK(데이터베이스 마스터 키)는 구문을 사용하여 CREATE MASTER KEY 만들어집니다. DMK는 데이터베이스 범위 자격 증명 내에 저장된 비밀을 암호화합니다. 자격 증명에 암호 값, 즉 암호, 토큰 또는 액세스 키를 저장하는 경우에만 필요합니다.
DMK가 필요합니다 (자격 증명은 비밀을 저장합니다.)
인증 유형 IDENTITY값비밀이 있습니다. Dmk SAS 토큰 'SHARED ACCESS SIGNATURE'예 필수 S3 액세스 키 'S3 ACCESS KEY'예 필수 SQL 로그인/기본 인증 '<username>'예 필수 스토리지 계정 액세스 키 '<storage_account_name>'예 필수 - SAS 토큰 자격 증명은 비밀 값을 사용하고
IDENTITY = 'SHARED ACCESS SIGNATURE'저장하므로 데이터베이스 마스터 키가 필요합니다. - S3 접근 키 자격 증명은 비밀 값을 사용하고
IDENTITY = 'S3 ACCESS KEY'저장하므로 데이터베이스 마스터 키가 필요합니다.- SQL 로그인이나 기본 인증 자격 증명은 비밀 값을 사용하고
IDENTITY = '<username>'저장하므로 데이터베이스 마스터 키가 필요합니다.
- SQL 로그인이나 기본 인증 자격 증명은 비밀 값을 사용하고
- 스토리지 계정 접근 키 자격 증명은 비밀 값을 사용하고
IDENTITY = '<storage_account_name>'저장하므로 데이터베이스 마스터 키가 필요합니다.
- SAS 토큰 자격 증명은 비밀 값을 사용하고
DMK는 필요하지 않습니다 (비밀이 저장되지 않음).
인증 유형 IDENTITY값비밀이 있습니다. Dmk 관리되는 식별 'Managed Identity'No 필요하지 않음 Microsoft Entra ID (마이크로소프트 엔트라 ID) 'User Identity'또는'Managed Identity'No 필요하지 않음 - 관리 신원 자격 증명은 비밀을 사용하지
IDENTITY = 'Managed Identity'않고 저장하므로 데이터베이스 마스터키가 필요하지 않습니다. - Microsoft Entra ID 자격 증명은 비밀을 사용하지
IDENTITY = 'User Identity'IDENTITY = 'Managed Identity'않거나 저장하지 않으므로 데이터베이스 마스터 키가 필요하지 않습니다.
- 관리 신원 자격 증명은 비밀을 사용하지
팁 (조언)
만약 진 CREATE DATABASE SCOPED CREDENTIAL 술서에 비밀이 포함되어 있지 않다면, DMK가 필요하지 않습니다. 관리 ID 및 Microsoft Entra ID 인증은 플랫폼에 트러스트를 위임합니다. 데이터베이스는 암호 또는 토큰을 저장하지 않습니다.
예시들:
이 예제 쿼리에서는 DMK가 필요합니다(자격 증명은 SAS 토큰을 저장).
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL SasCred
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<your_SAS_token>';
이 예제 쿼리에서는 DMK가 필요하지 않습니다(관리 ID, 비밀 없음).
CREATE DATABASE SCOPED CREDENTIAL ManagedIdentityCred
WITH IDENTITY = 'Managed Identity';
이 예제 쿼리에서는 DMK가 필요하지 않습니다(Microsoft Entra 통과, 비밀 없음).
CREATE DATABASE SCOPED CREDENTIAL EntraIdCred
WITH IDENTITY = 'User Identity';
OPENROWSET 및 외부 테이블을 사용하여 원격 데이터 액세스
SQL Server는 원격 데이터를 쿼리하는 세 가지 고유한 방법을 제공합니다. 구문, 인증 및 아키텍처의 차이점을 이해할 때 올바른 방법을 선택할 수 있습니다.
| 접근법 | 문법 | 다음에 연결 | 인증 | PolyBase 서비스 | 플랫폼 |
|---|---|---|---|---|---|
| OLE DB 쿼리 | OPENROWSET(provider, connection, query) |
MSOLEDBSQL, SQLOLEDB 또는 기타 공급자를 통한 모든 OLE DB 원본 | SQL 인증, Windows 인증, Microsoft Entra ID(MSOLEDBSQL) | No | SQL Server(지원되는 모든 버전) |
| SQL Server 2022 (16.x) 및 SQL Server 2019 (15.x)에서의 파일 쿼리 | OPENROWSET(BULK ...) |
로컬 디스크, 네트워크 또는 클라우드의 파일(Azure Blob, ADLS, S3, OneLake) | SAS 토큰, 액세스 키, 관리 ID, Microsoft Entra ID | 클라우드 1은 예; 로컬 1은 아니오 | SQL Server 2022 (16.x) 및 SQL Server 2019 (15.x) |
| SQL Server 2025 (17.x) 및 이후 버전의 파일 쿼리 | OPENROWSET(BULK ...) |
로컬 디스크, 네트워크 또는 클라우드의 파일(Azure Blob, ADLS, S3, OneLake) | SAS 토큰, 액세스 키, 관리 ID, Microsoft Entra ID | No | SQL Server 2022(16.x) 이상 버전, Azure SQL Database, Azure SQL Managed Instance, Fabric의 SQL 데이터베이스 |
| PolyBase 커넥터 |
CREATE EXTERNAL TABLE 및 CREATE EXTERNAL DATA SOURCE, sqlserver://, oracle://, teradata://, mongodb://, odbc://를 사용하여 |
원격 SQL Server 소스, Oracle 소스, Teradata 소스, MongoDB 소스, ODBC 소스 | SQL 인증 전용 | 예 | SQL Server 2019(15.x) 이상 버전(Windows); SQL Server 2025(17.x) 이상 버전(Linux) |
1 SQL Server 2022 (16.x)에서 클라우드 파일 접근을 위해서는 PolyBase 기능이 설치되어야 합니다.
- OLE DB 쿼리
OPENROWSET(provider, connection, query)는 지원되는 모든 SQL Server 버전에서 MSOLEDBSQL, SQLOLEDB 또는 다른 제공자를 통해 어떤 OLE DB 소스에도 연결됩니다. MSOLEDBSQL으로 SQL 인증, Windows 인증, Microsoft Entra ID을 지원하며, PolyBase 서비스 설치가 필요하지 않습니다. - 파일 쿼리는 SAS 토큰, 접근 키, 관리 신원, Microsoft Entra ID를 사용하여 로컬 디스크, 네트워크 공유, 또는 Azure Blob Storage, ADLS, S3, OneLake와 같은 클라우드 저장소의 파일을 읽기 위해 사용됩니다
OPENROWSET(BULK ...). SQL Server 2005 이후 버전에서는 로컬 및 네트워크 파일, SQL Server 2022(16.x) 이후 버전에서는 클라우드 파일, Azure SQL Database, Azure SQL Managed Instance, Fabric의 SQL 데이터베이스에서 지원됩니다. SQL Server 2022(16.x) 이후 버전에서는 로컬 파일이나 클라우드 파일에 대해 파일 쿼리가 PolyBase 서비스가 필요하지 않습니다. - PolyBase 커넥터는 ,
sqlserver://oracle://,mongodb://teradata://또는odbc://장소를CREATE EXTERNAL DATA SOURCE사용하여CREATE EXTERNAL TABLE원격 SQL Server, Oracle, Teradata, MongoDB, 또는 ODBC 소스에 연결됩니다. SQL Server 2019(15.x) 및 이후 버전에서는 Windows, SQL Server 2025(17.x) 및 이후 버전에서는 SQL 인증과 PolyBase 서비스가 필요합니다. 자세한 내용은 (Transact-SQL)를 참조하세요CREATE EXTERNAL DATA SOURCE.
각 방법을 사용하는 경우
다음을 위해 OLE DB OPENROWSET 을 사용합니다.
- 영구 객체를 생성하지 않고도 빠르고 일회성 쿼리를 할 수 있도록 OLE DB
OPENROWSET를 사용하세요. - Microsoft Entra ID 또는 MSOLEDBSQL을 통한 관리 신원 인증에는 OLE DB
OPENROWSET를 사용하세요. - PolyBase 서비스 의존성을 피하려면 OLE DB
OPENROWSET를 사용하세요. - OLE DB
OPENROWSET를 사용해 OLE DB 제공자가 있는 데이터 소스에 연결하세요.
다음을 위해 File OPENROWSET(BULK)을 사용합니다.
- 파일을 임
OPENROWSET(BULK ...)시 파일 탐색과 스키마 발견에 사용하세요. - 테이블 정의에 커밋하기 전에 빠른 변환과 미리보기를 위해 파일을
OPENROWSET(BULK ...)사용하세요. - 캐스팅, 필터링, 계산된 컬럼과 같은 유연한 인라인 컬럼 변환을 위해 파일을
OPENROWSET(BULK ...)사용하세요. - 자주 바뀌지 않고 영구 메타데이터가 필요 없는 데이터는 파일을 사용
OPENROWSET(BULK ...)하세요.
다음 용도: CREATE EXTERNAL TABLE와 함께 PolyBase 커넥터 사용
- PolyBase 커넥터
CREATE EXTERNAL TABLE를 사용하여 여러 사용자나 애플리케이션이 접근할 수 있는 영구적이고 재사용 가능한 테이블 정의를 제공합니다. - 통계와 쿼리 계획 최적화가 필요한 생산 작업에는 PolyBase 커넥터
CREATE EXTERNAL TABLE를 사용하세요. - Oracle이나 SQL Server 같은 원격 소스로 푸시다운 계산을 할 때 PolyBase 커넥터
CREATE EXTERNAL TABLE를 사용하세요. - 공유 거버넌스 및 보안을 위해 PolyBase 커넥터
CREATE EXTERNAL TABLE를 사용하세요; 테이블이 생성되면 사용자는 권한만SELECT필요합니다. - 원격 소스에 SQL 인증이 가능할 때는
CREATE EXTERNAL TABLEPolyBase 커넥터를 사용하세요.
OPENROWSET(OLE DB) - 임시 원격 쿼리(PolyBase 서비스가 필요하지 않음)
OLE DB 형식 OPENROWSET 은 OLE DB 공급자를 통해 원격 데이터 원본에 연결하고, 통과 쿼리를 실행하고, 결과를 행 집합으로 반환합니다. 연결된 서버에 대한 일회성 임시 대안입니다. 영구 메타데이터가 만들어지지 않습니다. 이 구문은 PolyBase 서비스가 필요하지 않으며 클라우드 파일 또는 외부 데이터 원본을 지원하지 않습니다.
이 예제 쿼리는 PolyBase가 아닌 OLE DB를 통해 원격 SQL Server에 연결합니다.
SELECT *
FROM OPENROWSET (
'MSOLEDBSQL',
'Server=remote-server;Database=AdventureWorks;Trusted_Connection=yes;',
'SELECT TOP 10 * FROM AdventureWorks.Sales.SalesOrderHeader'
);
OPENROWSET(BULK) - 파일 기반 쿼리(PolyBase)
파일에서 직접 데이터를 읽는 BULK 형식 OPENROWSET 입니다. SQL Server 2019(15.x) 및 이전 버전에서는 로컬 또는 UNC 파일 경로에서 읽고 서식 파일이 필요합니다. SQL Server 2022(16.x) 이상 버전에서는 및 DATA_SOURCE 매개 변수를 사용하여 FORMAT에서 읽을 수 있습니다. 이 방법은 데이터 가상화에 사용되는 PolyBase 통합 버전입니다.
PolyBase 및 데이터 가상화의 맥락에서, 이 가이드가 OPENROWSET를 참조할 때, 외부 파일을 쿼리하기 위한 OPENROWSET(BULK ...) 절이 포함된 FORMAT 구문을 의미합니다.
예시들:
이 예제 쿼리는 Azure Blob Storage(SQL Server 2022 이상 버전)에서 Parquet 파일을 읽습니다.
SELECT TOP 10 *
FROM OPENROWSET (
BULK 'data/sales/*.parquet',
DATA_SOURCE = 'MyAzureStorage',
FORMAT = 'PARQUET'
) AS [result];
이 예제 쿼리는 인라인 경로(Azure SQL Database, Azure SQL Managed Instance)를 사용하여 Parquet 파일을 읽습니다.
SELECT TOP 10 *
FROM OPENROWSET (
BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
FORMAT = 'PARQUET'
) AS [result];
OPENROWSET 및 외부 테이블을 사용하는 경우
OPENROWSET(BULK ...)과 외부 테이블을 모두 사용하면 T-SQL로 외부 데이터를 쿼리할 수 있지만, 각각은 서로 다른 사용 사례를 위해 설계되었습니다. 다음 표에는 시나리오에 적합한 방법을 결정하는 데 도움이 되는 주요 차이점이 요약되어 있습니다.
| 역량 | OPENROWSET(BULK ...) |
외부 테이블 |
|---|---|---|
| Purpose | 임시 탐색 및 일회성 쿼리 | 지속적이고 재사용 가능한 테이블 정의 |
| 데이터베이스에 저장된 메타데이터 | 아니요. 쿼리가 실행된 후에는 아무것도 저장되지 않습니다. | 예. 테이블 정의, 데이터 원본 및 파일 형식은 데이터베이스 개체로 저장됩니다. |
| 스키마 정의 | 파일(파케)에서 자동으로 유추되거나 WITH 절을 사용하여 인라인으로 지정됩니다. |
문에 CREATE EXTERNAL TABLE 명시적으로 정의됨 |
| 권한 | 필요 ADMINISTER BULK OPERATIONS 또는 ADMINISTER DATABASE BULK OPERATIONS |
만든 테이블에 대한 표준 SELECT 권한으로 충분합니다. |
| 계산 열 | 예. 목록에 식 및 계산 열을 추가합니다 SELECT . 메타데이터 함수는 filename()filepath() 여기에서만 사용할 수 있습니다. |
아니요. 고정 열 목록; 뷰나 외부 테이블을 읽는 쿼리에서 변환 수행 |
| 통계 | Azure SQL Managed Instance: sys.sp_create_openrowset_statistics를 통한 수동 단일 열 통계.
OPENROWSET 수동 통계를 참조하세요. SQL Server 2022 (16.x) 및 이후 버전, Azure SQL Database, Fabric의 SQL 데이터베이스: 술어에 대한 자동 통계 생성. SQL Server에서는 수동 통계 입력이 OPENROWSET 지원되지 않습니다. |
모든 플랫폼에서 전폭 CREATE STATISTICS 적인 지원을 제공하고 SQL Server 2022(16.x) 이상 버전에서 자동 생성합니다.
외부 테이블 수동 통계 만들기를 참조하세요. |
| 푸시다운 | 제한된 지원. 엔진이 필터를 파일 검색으로 푸시할 수 있지만 원격 RDBMS 원본에 대한 푸시다운은 없습니다. | 예. RDBMS 커넥터에 대한 푸시다운 계산 지원(SQL Server, Oracle, Teradata, MongoDB) |
| 최적입니다 | 데이터 탐색, 스키마 검색, 프로토타입 쿼리, 일회성 데이터 로드, 유연한 변환 | 프로덕션 워크로드, 반복 쿼리, 사용자, 대시보드 및 보고 간 공유 액세스 |
-
OPENROWSET(BULK ...)임시 탐색과 일회성 쿼리에 가장 적합하며, 외부 테이블은 영구적이고 재사용 가능한 테이블 정의에 더 적합합니다. -
OPENROWSET(BULK ...)쿼리가 실행된 후 데이터베이스에 메타데이터를 저장하지 않으며, 외부 테이블은 테이블 정의, 데이터 소스, 파일 형식을 데이터베이스 객체로 저장합니다. -
OPENROWSET(BULK ...)파켓 파일에서 스키마를 자동으로 추론하거나 절로WITH스키마를 인라인으로 정의하는 반면, 외부 테이블은 명시적으로 명시적으로 스키마를 정의합니다.CREATE EXTERNAL TABLE -
OPENROWSET(BULK ...)또는 가 필요ADMINISTER BULK OPERATIONSADMINISTER DATABASE BULK OPERATIONS하며, 테이블이 존재하면 표준SELECT권한만 있으면 외부 테이블을 조회할 수 있습니다. -
OPENROWSET(BULK ...)쿼리 함수와 메타데이터 함수filename()filepath()에서 계산된 열을 지원하며, 외부 테이블은 고정된 열 목록을 가지며 뷰나 외부 테이블을 읽는 쿼리에서 변환이 필요합니다. -
OPENROWSET(BULK ...)통계 지원이 제한적임: Azure SQL Managed Instance는 단일 열 통계에 사용할sys.sp_create_openrowset_statistics수 있지만, SQL Server 2022 (16.x) 이후 버전, Azure SQL Database, Fabric의 SQL 데이터베이스는 술어에 대한 통계를 자동으로 생성합니다. SQL Server, Azure SQL Database, Fabric의 SQL 데이터베이스에서는 수동OPENROWSET통계가 지원되지 않습니다. 외부 테이블은 모든 플랫폼에서 완전한CREATE STATISTICS기능을 지원하며, SQL Server 2022(16.x) 및 이후 버전, Azure SQL Database, Fabric의 SQL 데이터베이스에서 자동 통계 기능을 지원합니다. OPENROWSET 매뉴얼 통계와 Create external table manual statistics를 참조하세요. -
OPENROWSET(BULK ...)원격 RDBMS 소스로는 푸시다운이 제한적이고 푸시다운이 없으며, RDBMS 커넥터에 대한 푸시다운 계산은 외부 테이블을 지원합니다. -
OPENROWSET(BULK ...)데이터 탐색, 스키마 발견, 프로토타이핑, 일회성 로드, 유연한 변환에 가장 적합하며, 외부 테이블은 운영 작업, 반복 쿼리, 공유 접근, 대시보드, 보고에 적합합니다.
유연성이 필요한 경우 OPENROWSET 사용
영구 개체를 만들지 않고 파일을 탐색하거나, 다른 스키마를 테스트하거나, 계산 열 및 변환을 추가하는 데 사용합니다 OPENROWSET . 예를 들어 파일 경로를 열로 추출하거나, 데이터 형식을 인라인으로 캐스팅하거나, 단일 쿼리에서 계산된 식을 필터링할 수 있습니다.
이 예제 쿼리에는 계산 열 및 변환이 포함됩니다.
SELECT result.filename() AS [FileName],
result.filepath(1) AS [Year],
result.filepath(2) AS [Month],
CAST (OrderDate AS DATE) AS OrderDate,
Amount,
OrderDate
FROM OPENROWSET (
BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*/*/*/*.parquet',
FORMAT = 'PARQUET'
) AS result
WHERE result.filepath(1) = '2025';
팁 (조언)
및 filepath() 함수는 filename() Azure SQL Database, Azure SQL Managed Instance 및 SQL Server 2022(16.x) 이상 버전에서 사용할 수 있습니다. 이를 통해 파일 경로의 일부(파티션 제거)를 필터링하고 원본 파일 이름을 열로 노출할 수 있으며, 외부 테이블에서는 직접 사용할 수 없습니다.
지속성 및 거버넌스가 필요한 경우 외부 테이블 사용
여러 사용자 또는 애플리케이션이 동일한 외부 데이터를 반복적으로 쿼리해야 하는 경우 외부 테이블을 사용합니다. 스키마, 데이터 원본 및 자격 증명을 한 번 정의하고 데이터베이스에 저장합니다. 소비자는 SELECT 테이블에 대한 권한만 필요합니다.
외부 테이블은 쿼리 최적화 프로그램에서 더 나은 실행 계획을 빌드하는 데 사용하는 통계도 지원 합니다. 통계를 수동으로 만들거나 엔진이 자동으로 만들도록 할 수 있습니다(SQL Server 2022(16.x) 이상 버전).
이 예제 쿼리는 더 나은 쿼리 계획을 위해 외부 테이블에 대한 통계를 만듭니다.
CREATE STATISTICS Stats_OrderDate
ON dbo.SalesExternal(OrderDate)
WITH FULLSCAN;
두 방법 모두에 대한 통계에 대한 자세한 내용은 PolyBase 성능 고려 사항 - 통계를 참조하세요.
BULK INSERT VS. OPENROWSET(BULK): 어떤 것을 사용해야 하나요?
BULK INSERT 및 OPENROWSET(BULK ...)는 동일한 기본 대량 로드 엔진을 사용하여 파일에서 SQL Server로 데이터를 가져옵니다. 그러나 구문, 유연성 및 결과로 수행할 수 있는 작업은 다릅니다. 다음 표에는 주요 차이점이 요약되어 있습니다.
메모
독립 실행형 BULK INSERT 문은 Fabric의 SQL 데이터베이스에서 지원되지 않습니다. 데이터를 인징하려면 OneLake에 대해 사용 INSERT ... SELECTOPENROWSET(BULK ...) 하세요.
| 역량 | BULK INSERT |
OPENROWSET(BULK ...) |
|---|---|---|
| 기본 목적 | 파일의 데이터를 대상 테이블에 직접 로드합니다. |
행 집합을 SELECT 또는 INSERT ... SELECT 문에서 사용하고, 해당 행 집합을 반환합니다. |
| 사용 패턴 | 독립 실행형 문: BULK INSERT <table> FROM '<file>' |
쿼리 SELECT * FROM OPENROWSET(BULK ...) 내에서 사용해야 합니다. 또는 INSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...) |
| 대상 테이블이 필요하세요? | 예. 항상 테이블에 직접 씁니다. | 아니요. 어디에도 삽입하지 않고 사용할 수 있으며, 테이블이나 임시 테이블에 삽입할 수도 있습니다. |
| 로드 중 열 변환 | 제한된 지원. 파일에서 테이블로의 데이터 흐름은 있는 그대로입니다 (형식 파일 또는 열 순서에 의해 매핑이 제어됨). | 전폭적인 지원. 주변에 식, 필터, CASTWHEREJOIN 기타 테이블 및 계산 열을 추가할 수 있습니다.SELECT |
| 표 힌트 | 절에는 WITH, BATCHSIZE, CHECK_CONSTRAINTS, FIRE_TRIGGERS, KEEPIDENTITY, KEEPNULLS 등에 대한 TABLOCK 지원이 포함됩니다. |
테이블 힌트를 INSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...) 구문을 통해 지원합니다. |
| LOB(큰 개체) 단일 값 가져오기 | 지원되지 않음 | 예. 을 지원합니다 SINGLE_BLOBSINGLE_CLOBSINGLE_NCLOB. 전체 파일을 하나의 varbinary(max), varchar(max) 또는 nvarchar(max) 값으로 가져옵니다. |
| 파일 서식 지정 | 예. (XML 및 비 XML)을 통해 지원됨 | 예. 지원됨(XML 및 비 XML) |
| 클라우드 파일 접근 |
DATA_SOURCESQL Server 2017 (14.x) 및 이후 버전, Azure SQL Database, Azure SQL Managed Instance에서 Azure Blob Storage를 지원합니다. SQL Server 2019 CU11 및 이후 업데이트는 ADLS Gen2도 지원합니다. S3 호환 스토리지는 지원되지 않습니다. |
DATA_SOURCESQL Server 2017(14.x) 이후 버전에서 Azure Blob Storage를 지원하며, SQL Server 2019 CU11 이후 버전에서 ADLS Gen2를 지원하며, SQL Server 2022(16.x) 및 이후 버전에서 S3 호환 스토리지를 지원합니다. Azure SQL Database 및 Azure SQL Managed Instance는 Azure Blob Storage와 ADLS Gen2를 지원합니다. Fabric의 SQL 데이터베이스는 OneLake와 OneLake 단축키를 통한 외부 저장소를 지원합니다. |
| Parquet 또는 Delta 파일 | 지원되지 않습니다. CSV/구분된 텍스트만 | 예. SQL Server 2022 (16.x) 및 이후 버전, Azure SQL Managed Instance 및 Azure SQL Database 지원 FORMAT = 'PARQUET' 과 FORMAT = 'DELTA'; Fabric의 SQL 데이터베이스 지원 FORMAT = 'PARQUET' 은 하지만 .DELTA 자세한 내용은 OPENROWSET BULK(Transact-SQL)을 참조하세요. |
| 필요한 권한 |
ADMINISTER BULK OPERATIONS 또는 ADMINISTER DATABASE BULK OPERATIONS, 그리고 대상 테이블에서 INSERT |
ADMINISTER BULK OPERATIONS 또는 ADMINISTER DATABASE BULK OPERATIONS |
| 최소 로깅 | 예. 단순 복구 모델 또는 대량 로그 복구 모델에서 TABLOCK를 지원함 |
예. 다음과 함께 INSERT ... SELECT 사용할 때 지원됨 TABLOCK |
-
BULK INSERT파일을 타겟 테이블로 직접 로드하고,OPENROWSET(BULK ...)orINSERT ... SELECT문에서SELECT사용할 수 있는 행 집합을 반환합니다. -
BULK INSERT는 독립적인 문장이며,OPENROWSET(BULK ...)또는 와 같은SELECT * FROM OPENROWSET(BULK ...)INSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...)쿼리 안에서 반드시 사용해야 합니다. -
BULK INSERT항상 타겟 테이블에 직접 쓰지만,OPENROWSET(BULK ...)SELECT파일 자체에서 어디에도 삽입하거나 테이블이나 임시 테이블에 삽입하지 않습니다. -
BULK INSERT데이터가 파일에서 테이블 as-is으로 흐르기 때문에 열 변환 지원이 제한적이며, 매핑은 형식 파일 또는 열 순서로 제어됩니다.OPENROWSET(BULK ...)표현식,CAST, 필터WHERE,JOINs, 그리고 주변SELECT의 계산된 열을 지원합니다. -
BULK INSERT,CHECK_CONSTRAINTS,FIRE_TRIGGERS,KEEPNULLSKEEPIDENTITYTABLOCK그리고 기타 힌트에 대해BATCHSIZE절을WITH사용합니다.OPENROWSET(BULK ...)지지 테이블 힌트를 통해INSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...). -
BULK INSERT큰 객체 단일 값 가져오기를 지원하지 않습니다.OPENROWSET(BULK ...), ,SINGLE_CLOB를SINGLE_NCLOB지원SINGLE_BLOB하여 전체 파일을 각각 하나의 varbinary(max),varchar(max),nvarchar(max) 값으로 가져오는 데 사용됩니다. - 두 파일 모두
BULK INSERTOPENROWSET(BULK ...)XML 및 비XML 형식 파일을 지원합니다. - 클라우드 파일 접근
BULK INSERT을 위해 이 매개변수는DATA_SOURCESQL Server 2017 (14.x) 및 이후 버전인 Azure SQL Database와 Azure SQL Managed Instance에서 Azure Blob Storage를 지원합니다. SQL Server 2019 CU11 및 이후 업데이트도 ADLS Gen2를 지원하지만BULK INSERT, S3 호환 스토리지는 지원하지 않습니다. 에 대해서는OPENROWSET(BULK ...)DATA_SOURCESQL Server 2017(14.x) 이후 버전에서 Azure Blob Storage를 지원하며, SQL Server 2019 CU11 이후 버전에서 ADLS Gen2를 지원하며, SQL Server 2022(16.x) 이후 버전에서는 S3 호환 저장소를 지원합니다. Azure SQL Database 및 Azure SQL Managed Instance는 Azure Blob Storage와 ADLS Gen2를 지원합니다. Fabric의 SQL 데이터베이스는 OneLake와 OneLake 단축키를 통한 외부 저장소를 지원합니다. -
BULK INSERTParquet이나 Delta 파일을 지원하지 않고 CSV 또는 구분된 텍스트만 지원합니다.OPENROWSET(BULK ...)SQL Server 2022 (16.x) 및 이후 버전에서는 Azure SQL Database와 Azure SQL Managed Instance를 지원합니다FORMAT = 'PARQUET'FORMAT = 'DELTA'. Fabric의 SQL 데이터베이스는 지원FORMAT = 'PARQUET'하지만FORMAT = 'DELTA'. 자세한 내용은 OPENROWSET BULK(Transact-SQL)을 참조하세요. -
BULK INSERT또는 또는 대상 테이블에 허가를 더하면ADMINISTER BULK OPERATIONSADMINISTER DATABASE BULK OPERATIONSINSERT필요하며,OPENROWSET(BULK ...)또는 를 요구ADMINISTER BULK OPERATIONSADMINISTER DATABASE BULK OPERATIONS한다. -
BULK INSERT단순 또는 벌크 로그 복구 모델TABLOCK에서 최소 로깅을 지원합니다.OPENROWSET(BULK ...)그리고TABLOCK사용할 때INSERT ... SELECT최소한의 로깅을 지원합니다.
선택 시기 BULK INSERT
간단한 파일-테이블 로드가 있고 가져오는 동안 데이터를 변환, 필터링 또는 조인할 필요가 없는 경우에 사용합니다 BULK INSERT . CSV 또는 기타 구분된 파일에 더 간단한 구문을 사용합니다.
이 예제 쿼리는 Azure Blob Storage에서 테이블에 직접 CSV 파일을 로드합니다.
BULK INSERT Sales.Invoices
FROM 'invoices/inv-2025-01.csv'
WITH (
DATA_SOURCE = 'MyAzureBlobStorage',
FORMAT = 'CSV',
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
이 예제 쿼리는 열 매핑을 위해 서식 파일이 있는 로컬 파일을 로드합니다.
BULK INSERT dbo.Products
FROM 'C:\Data\products.csv'
WITH (
FORMATFILE = 'C:\Data\products.fmt',
FIRSTROW = 2,
TABLOCK
);
OPENROWSET(BULK)을 언제 선택해야 하는지
다음 조건 중 하나 이상이 필요한 경우 사용합니다 OPENROWSET(BULK ...) .
- 테이블을 먼저 만들지 않고 파일 데이터를 쿼리하거나 미리보기하는 데 사용
OPENROWSET(BULK ...)하세요. - 가져오기 중에 데이터를 변환, 필터링 또는 결합하는 데 사용
OPENROWSET(BULK ...)하세요. -
OPENROWSET(BULK ...)Parquet나 Delta 파일을BULK INSERT불러오는 데 사용하세요. 이 포맷들은 지원하지 않습니다. -
OPENROWSET(BULK ...)전체 파일을 하나의 LOB 값으로 가져오기 위해 , ,SINGLE_CLOB, 또는SINGLE_NCLOB를 사용하세요SINGLE_BLOB.
이 예제 쿼리는 데이터를 어디에나 삽입하지 않고 Azure Blob Storage에서 CSV 파일을 미리 봅니다.
SELECT TOP 10 *
FROM OPENROWSET (
BULK 'invoices/inv-2025-01.csv',
DATA_SOURCE = 'MyAzureBlobStorage',
FORMAT = 'CSV',
FIRSTROW = 2,
FIELDTERMINATOR = ','
) AS src;
이 예제 쿼리는 변환 및 필터링을 사용하여 데이터를 삽입합니다.
INSERT INTO Sales.Invoices (InvoiceDate, Amount, Customer)
SELECT CAST (InvoiceDate AS DATE),
Amount * 1.1, -- Apply a 10% markup
UPPER(Customer)
FROM OPENROWSET (
BULK 'invoices/inv-2025-01.csv',
DATA_SOURCE = 'MyAzureBlobStorage',
FORMAT = 'CSV',
FIRSTROW = 2
) WITH (
InvoiceDate VARCHAR (10),
Amount DECIMAL (18, 2),
Customer VARCHAR (100)
) AS src
WHERE Amount IS NOT NULL;
이 예제 쿼리는 Parquet 파일을 로드합니다(BULK INSERT에서는 이것이 불가능합니다).
INSERT INTO Sales.Invoices
SELECT *
FROM OPENROWSET (
BULK 'data/invoices/*.parquet',
DATA_SOURCE = 'MyAzureStorage',
FORMAT = 'PARQUET') AS src;
이 예제 쿼리는 전체 XML 파일을 단일 varbinary(max) 값으로 가져옵니다.
INSERT INTO dbo.XmlDocuments (DocContent)
SELECT BulkColumn
FROM OPENROWSET (
BULK 'C:\Data\catalog.xml',
SINGLE_BLOB
) AS x;
팁 (조언)
한 가지 방법은 OPENROWSET(BULK ...)SELECT 안에서 파일 데이터를 탐색하고 유효성을 검사한 다음, 변환이 필요하지 않은 경우 최종 프로덕션 로드를 위해 BULK INSERT로 전환하는 것입니다. Parquet 또는 Delta 지원 또는 인라인 필터링이 필요한 경우 OPENROWSET에 머무르세요.
자세한 내용은 다음 관련 가이드를 참조하세요.
- SQL Server로 데이터를 가져오기 위한 OPENROWSETBULK INSERT(BULK...) 문서 중 보안 고려사항을 포함한 상세한 나란 가이드를 제공합니다.
-
Bulk Import and Export of Data(SQL Server) 문서에서는 bcp,
BULK INSERT, , 를OPENROWSET포함한 모든 대량 데이터 이동 방법에 대한 개요를 제공합니다. -
(Transact-SQL) 문서는BULK INSERT 에 대한
BULK INSERT완전한 T-SQL 참조를 제공합니다. -
OPENROWSET BULK (Transact-SQL) 문서에서는 에 대한
OPENROWSET(BULK ...)완전한 T-SQL 참고 자료를 제공합니다. - Azure Blob Storage에서 데이터 대량 접근 예시라는 글에서는 Azure Storage와 두 방법을 모두 사용하는 예시를 나란히 제공합니다.
-
OPENROWSET Bulk Rowset Provider(SQL Server)로 대규모 객체 데이터를 가져오는 기사에서는 , ,
SINGLE_CLOB그리고SINGLE_NCLOB예시를 제공합니다SINGLE_BLOB. - '포맷 파일 사용해 데이터를 대량 가져오기(SQL Server)' 기사에서는 두 가지 방법 모두에 대한 포맷 파일 사용법을 설명합니다.
- 벌크 임포트 중 null 보존이나 기본값 적용에 관한 지침은 '대량 가져오기 시 null 또는 기본값 유지(Keep nulls or default value)'(SQL Server)를 참조하세요.
- 대량 가져오기 중 식별자 값 보존에 관한 지침은 '대량 데이터 가져오기 시 식별자 값 유지(SQL Server)'를 참조하세요.
유용한 메타데이터 함수
외부 테이블을 사용하여 OPENROWSET 외부 파일을 조회할 때는 내장 함수와 절차를 사용하여 파일 메타데이터를 검사하고, 스키마를 발견하며, 파티션 인식 쿼리를 구현하세요.
filepath() 및 filename()
및 filepath() 함수는 filename() 결과 집합의 각 행에 대한 파일 경로 또는 파일 이름의 일부를 반환합니다. 특히 다음과 같은 경우에 유용합니다.
파티션 제거: 폴더 세그먼트(예: 연도/월/일 파티션)를 필터링하여 엔진이 모든 항목을 스캔하는 대신 일치하는 파일만 읽도록 합니다.
원본 메타데이터 노출: 원래 파일 이름 또는 경로를 쿼리 결과에 열로 포함하면 감사 또는 디버깅에 유용합니다.
| 기능 | Returns | 예시 |
|---|---|---|
filename() |
각 행에 대한 원본 파일의 파일 이름(확장명 포함) | sales_2025_01.parquet |
filepath(N) |
경로에 있는 와일드카드()*의 BULK번째 폴더 세그먼트입니다. 여기서 N은 1에서 시작됩니다. |
경로sales/2025/01/*.parquet에 대해, filepath(1)는 2025를 반환하고, filepath(2)는 01를 반환합니다. |
적용 대상: Azure SQL Database, Azure SQL Managed Instance, SQL Server 2022(16.x) 이상 버전, 패브릭의 SQL 데이터베이스.
이 예제 쿼리는 파티션 제거 및 filepath() 원본 파일을 식별하는 데 사용합니다filename(). 폴더 아래의 /2025/ 파일만 읽고 하위 폴더 아래의 /06/ 파일만 읽습니다.
SELECT result.filename() AS SourceFile,
result.filepath(1) AS [Year],
result.filepath(2) AS [Month],
*
FROM OPENROWSET (
BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*/*/*.parquet',
FORMAT = 'PARQUET'
) AS result
WHERE result.filepath(1) = '2025'
AND result.filepath(2) = '06';
팁 (조언)
filepath() 필터를 하위 쿼리나 CTE가 아닌 WHERE 절에 배치하세요. 필터가 절에 있는 WHERE 경우 엔진은 파일 검색 수준에서 파티션 제거를 수행할 수 있으므로 I/O가 크게 줄어듭니다.
sp_describe_first_result_set - OPENROWSET 열 형식 검색
Parquet 파일과 함께 사용하는 OPENROWSET 경우 엔진은 열 데이터 형식을 자동으로 유추합니다(스키마 유추). 유추된 형식이 필요 이상으로 클 수 있습니다. 예를 들어 Parquet 메타데이터에 최대 길이가 포함되지 않으므로 문자 열은 종종 varchar(8000) 로 유추됩니다. 이 선택은 성능을 저하시키고 더 많은 메모리를 사용할 수 있습니다.
쿼리를 완료sp_describe_first_result_set 유추된 스키마를 검사하는 데 사용합니다. 유추된 형식을 본 후, 성능을 향상시키기 위해 WITH 절에서 더 좁은 형식을 지정하세요.
1단계: 유추된 스키마를 검사합니다.
EXECUTE sp_describe_first_result_set N' SELECT * FROM OPENROWSET( BULK ''abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet'', FORMAT = ''PARQUET'' ) AS result';출력에는 각 열의 이름, 유추된 데이터 형식, 최대 길이, 정밀도 및 소수 자릿수가 표시됩니다. varchar(8000)가 보이는데 varchar(100)로 충분하면, 이를 덮어쓰세요.
2단계: 성능 향상을 위해 명시적 형식을 사용합니다.
SELECT TOP 100 * FROM OPENROWSET ( BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet', FORMAT = 'PARQUET' ) WITH ( OrderId INT, OrderDate DATE, Amount DECIMAL (18, 2), Customer VARCHAR (100) -- much narrower than the inferred varchar(8000) ) AS result;
스키마 유추는 Parquet 파일에서만 작동합니다. CSV 파일의 경우 항상 열 정의를 WITH을 위한 OPENROWSET 절 또는 CREATE EXTERNAL TABLE 문에서 지정하세요.
sp_describe_first_result_set일반 SQL Server, Azure SQL Database, Azure SQL Managed Instance, Fabric 절차에서 SQL 데이터베이스를 포함하지만, 특히 쿼리에 유용합니다OPENROWSET. 자세한 내용은 sp_describe_first_result_set를 참조하세요.
성능, 문제 해결 및 모범 사례
데이터 가상화를 구현한 후 다음 가이드를 사용하여 성능을 최적화하고, 문제를 진단하고, 프로덕션 준비 상태를 확인합니다.
| 영역 | 문서 | 세부 정보 |
|---|---|---|
| PolyBase 성능 | SQL Server용 PolyBase의 성능 고려 사항 | 통계, 푸시다운, 병렬 처리 및 메모리 관리 |
| 푸시다운 계산 | PolyBase의 푸시다운 계산 | 원격 원본에 푸시하는 작업을 지정합니다. |
| 푸시다운이 발생했는지를 알 수 있는 방법 | 외부 푸시다운이 발생했는지 여부를 확인하는 방법 | 쿼리 계획 및 DMV |
| Troubleshooting | PolyBase 모니터링 및 문제 해결 | 일반적인 오류 및 해결 방법 |
| Kerberos 연결 | PolyBase Kerberos 연결 문제 해결 | |
| 자주 묻는 질문(FAQ) | PolyBase 질문과 대답 | |
| 오류 및 해결 방법 | PolyBase 오류 및 가능한 해결 방법 |