PolyBase의 푸시다운 계산
적용 대상: SQL Server 2016(13.x) 이상 버전
푸시다운 계산은 외부 데이터 원본에 대한 쿼리의 성능을 향상합니다. SQL Server 2016(13.x)부터 Hadoop 외부 데이터 원본에 푸시다운 계산을 사용할 수 있었습니다. SQL Server 2019(15.x)에는 다른 유형의 외부 데이터 원본에 대한 푸시다운 계산이 도입되었습니다.
참고 항목
PolyBase 푸시다운 계산이 쿼리에 도움이 되는지 확인하려면 외부 푸시다운이 발생했는지를 확인하는 방법을 참조하세요.
푸시다운 계산 사용
다음 문서에는 특정 유형의 외부 데이터 원본에 대한 푸시다운 계산을 구성하는 방법에 대한 정보가 포함되어 있습니다.
- Hadoop에서 푸시다운 계산 사용
- Oracle의 외부 데이터에 액세스하도록 PolyBase 구성
- Teradata의 외부 데이터에 액세스하도록 PolyBase 구성
- MongoDB의 외부 데이터에 액세스하도록 PolyBase 구성
- ODBC 제네릭 형식을 사용하여 외부 데이터에 액세스하도록 PolyBase 구성
- SQL Server의 외부 데이터에 액세스하도록 PolyBase 구성
다음 표에는 여러 외부 데이터 원본에 대한 푸시다운 계산 지원 내용이 요약되어 있습니다.
데이터 원본 | 조인 | 프로젝션 | 집계 | 필터 | 통계 |
---|---|---|---|---|---|
일반 ODBC | 예 | 예 | 예 | 예 | 예 |
Oracle | 예+ | 예 | 예 | 예 | 예 |
SQL Server | 예 | 예 | 예 | 예 | 예 |
Teradata | 예 | 예 | 예 | 예 | 예 |
MongoDB* | 아니요 | 예 | 예*** | 예*** | 예 |
Hadoop | 문제 | 예 | 일부** | 일부** | 예 |
Azure Blob Storage | 아니요 | 아니요 | 아니요 | 아니요 | 예 |
* Azure Cosmos DB 푸시다운 지원은 MongoDB용 Azure Cosmos DB API를 통해 사용하도록 설정됩니다.
** 푸시다운 계산 및 Hadoop 공급자를 참조하세요.
*** SQL Server 2019용 MongoDB ODBC 커넥터에 대한 집계 및 필터에 대한 푸시다운 지원은 SQL Server 2019 CU18에서 도입되었습니다.
+ Oracle은 조인에 대한 푸시다운을 지원하지만 푸시다운을 달성하려면 조인 열에 대한 통계를 만들어야 할 수 있습니다.
참고 항목
푸시다운 계산은 일부 T-SQL 구문으로 차단될 수 있습니다. 자세한 내용은 푸시다운을 방지하는 구문을 참조하세요.
푸시다운 계산 및 Hadoop 공급자
PolyBase는 현재 두 개의 Hadoop 공급자 Hortonworks Data Platform(HDP) 및 Cloudera Distributed Hadoop(CDH)을 지원합니다. 푸시다운 계산의 측면에서 두 기능 간에는 차이가 없습니다.
Hadoop에서 계산 푸시다운 기능을 사용하려면 대상 Hadoop 클러스터에 작업 기록 서버를 사용하도록 설정된 HDFS, YARN 및 MapReduce의 핵심 구성 요소가 있어야 합니다. PolyBase는 MapReduce를 통해 푸시다운 쿼리를 제출하고 작업 기록 서버에서 상태 가져옵니다. 두 구성 요소 중 하나가 없으면 쿼리가 실패합니다.
일부 집계는 데이터가 SQL Server에 도달한 후에 이루어져야 합니다. 하지만 집계의 일부는 Hadoop에서 발생합니다. 이 방법은 대규모 병렬 처리 시스템에서 집계를 계산하는 데 사용됩니다.
Hadoop 공급자는 다음과 같은 집계 및 필터를 지원합니다.
집계 | 필터(이진 비교) |
---|---|
Count_Big | NotEqual |
Sum | LessThan |
Avg | LessOrEqual |
Max | GreaterOrEqual |
Min | GreaterThan |
Approx_Count_Distinct | Is |
IsNot |
푸시다운 계산의 주요 이점 시나리오
PolyBase 푸시다운 계산을 사용하면 계산 작업을 외부 데이터 원본에 위임할 수 있습니다. 이를 통해 SQL Server 인스턴스의 워크로드가 줄어들고 성능이 대폭 향상될 수 있습니다.
SQL Server는 조인, 프로젝션, 집계 및 필터를 외부 데이터 원본으로 푸시하여 원격 컴퓨팅을 활용하고 네트워크를 통해 전송되는 데이터를 제한할 수 있습니다.
조인 푸시다운
대부분의 경우 PolyBase는 동일한 외부 데이터 원본에 있는 두 외부 테이블의 조인에 대한 조인 연산자의 푸시다운을 용이하게 할 수 있으므로 성능이 대폭 향상됩니다.
외부 데이터 원본에서 조인을 수행할 수 있으면 데이터 이동의 양이 줄어들고 쿼리 성능이 향상됩니다. 조인 푸시다운을 사용하지 않으면 조인할 테이블의 데이터를 로컬로 tempdb로 가져온 다음 조인해야 합니다.
배포 조인(로컬 테이블을 외부 테이블에 조인)의 경우 조인된 외부 테이블에 필터가 없으면 조인 작업을 수행하기 위해 외부 테이블의 모든 데이터를 tempdb
에 로컬로 가져와야 합니다. 예를 들어, 다음 쿼리에는 외부 테이블 조인 조건에 대한 필터링이 없으므로 외부 테이블의 모든 데이터를 읽을 수 있습니다.
SELECT * FROM LocalTable L
JOIN ExternalTable E on L.id = E.id
조인이 외부 테이블의 E.id
열에 있으므로 해당 열에 필터 조건을 추가하면 필터가 아래로 밀려서 외부 테이블에서 읽는 행 수를 줄일 수 있습니다.
SELECT * FROM LocalTable L
JOIN ExternalTable E on L.id = E.id
WHERE E.id = 20000
행의 하위 집합 선택
조건자 푸시다운을 사용하여 외부 테이블에서 행의 하위 집합을 선택하는 쿼리의 성능을 개선합니다.
이 예시에서는 SQL Server가 맵 축소 작업을 추진하여 Hadoop에서 조건자 customer.account_balance < 200000
과 일치하는 행을 검색합니다. 테이블의 모든 행을 검색하지 않고 쿼리가 성공적으로 완료될 수 있으므로 조건자 조건에 맞는 행만 SQL Server에 복사됩니다. 이렇게 하면 계정 잔액 <= 200,000인 고객 수에 비해 고객 잔액 > 200,000이 적은 경우 상당한 시간을 절약하고 임시 스토리지 공간이 덜 필요합니다.
SELECT * FROM customer WHERE customer.account_balance < 200000;
SELECT * FROM SensorData WHERE Speed > 65;
열의 하위 집합을 선택합니다.
조건자 푸시다운을 사용하여 외부 테이블에서 열의 하위 집합을 선택하는 쿼리의 성능을 개선합니다.
이 쿼리에서 SQL Server는 맵 축소 작업을 추진하여 Hadoop 구분 텍스트 파일을 전처리하여 customer.name 및 customer.zip_code 두 열의 데이터만 SQL Server로 복사합니다.
SELECT customer.name, customer.zip_code
FROM customer
WHERE customer.account_balance < 200000;
기본 식 및 연산자 푸시다운
SQL Server는 조건자 푸시다운에 대해 다음과 같은 기본 식과 연산자를 허용합니다.
- 숫자, 날짜 및 시간 값에 대한 이진 비교 연산자(
<
,>
,=
,!=
,<>
,>=
,<=
) - 산술 연산자(
+
,-
,*
,/
,%
). - 논리 연산자(
AND
,OR
). - 단항 연산자(
NOT
,IS NULL
,IS NOT NULL
)
연산자 BETWEEN
, NOT
, IN
및 LIKE
는 푸시다운될 수 있습니다. 실제 동작은 쿼리 최적화 도구가 연산자 식을 기본 관계형 연산자를 사용하는 일련의 문으로 재작성하는 방식에 따라 달라집니다.
이 예시의 쿼리에는 Hadoop으로 푸시할 수 있는 여러 조건자가 있습니다. SQL Server는 맵 감소 작업을 Hadoop에 푸시하여 customer.account_balance <= 200000
조건자를 수행할 수 있습니다. BETWEEN 92656 AND 92677
식은 Hadoop에 푸시할 수 있는 이진 및 논리 연산으로도 구성됩니다. customer.account_balance AND customer.zipcode
의 논리적 AND는 최종 식입니다.
이러한 조건자의 조합을 고려할 때 map-reduce 작업은 모든 WHERE 절을 수행할 수 있습니다. SELECT
기준을 충족하는 데이터만 SQL Server로 다시 복사됩니다.
SELECT * FROM customer
WHERE customer.account_balance <= 200000
AND customer.zipcode BETWEEN 92656 AND 92677;
푸시다운에 지원되는 함수
SQL Server는 조건자 푸시다운에 대해 다음 함수를 허용합니다.
문자열 함수
CONCAT
DATALENGTH
LEN
LIKE
LOWER
LTRIM
RTRIM
SUBSTRING
UPPER
수학 함수
ABS
ACOS
ASIN
ATAN
CEILING
COS
EXP
FLOOR
POWER
SIGN
SIN
SQRT
TAN
일반 함수
COALESCE
*NULLIF
* COLLATE
를 함께 사용하면 일부 시나리오에서 푸시다운을 방지할 수 있습니다. 자세한 내용은 데이터 정렬 충돌을 참조하세요.
날짜/시간 함수
DATEADD
DATEDIFF
DATEPART
푸시다운을 방지하는 구문
다음 T-SQL 함수 또는 구문은 푸시다운 계산을 방지합니다.
AT TIME ZONE
CONCAT_WS
TRANSLATE
RAND
CHECKSUM
BINARY_CHECKSUM
HASHBYTES
ISJSON
JSON_VALUE
JSON_QUERY
JSON_MODIFY
NEWID
STRING_ESCAPE
COMPRESS
DECOMPRESS
GREATEST
LEAST
PARSE
FORMAT
구문 및 TRIM
구문에 대한 푸시다운 지원은 SQL Server 2019(15.x) CU10에서 도입되었습니다.
변수가 있는 필터 절
필터 절에 변수를 지정할 때 기본적으로 필터 절의 푸시다운을 방지합니다. 예를 들어 다음 쿼리를 실행하면 필터 절이 푸시다운되지 않습니다.
DECLARE @BusinessEntityID INT
SELECT * FROM [Person].[BusinessEntity]
WHERE BusinessEntityID = @BusinessEntityID;
변수의 푸시다운을 달성하려면 쿼리 최적화 프로그램 핫픽스 기능을 사용하도록 설정해야 합니다. 이 작업은 다음 방법 중 하나로 수행할 수 있습니다.
- 인스턴스 수준: 인스턴스에 대한 시작 매개 변수로 추적 플래그 4199 사용
- 데이터베이스 수준: PolyBase 외부 개체가 있는 데이터베이스의 컨텍스트에서
ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = ON
을 실행합니다. - 쿼리 수준: 쿼리 힌트
OPTION (QUERYTRACEON 4199)
또는OPTION (USE HINT ('ENABLE_QUERY_OPTIMIZER_HOTFIXES'))
사용
이 제한은 sp_executesql 실행에 적용됩니다. 필터 절에 있는 일부 함수의 사용에도 제한이 적용됩니다.
변수를 푸시다운하는 기능은 SQL Server 2019 CU5에서 처음 도입되었습니다.
데이터 정렬 충돌
데이터 정렬이 다른 데이터로는 푸시다운이 불가능할 수 있습니다. COLLATE
등의 연산자는 결과를 방해할 수도 있습니다. 같음 데이터 정렬 또는 이진 데이터 정렬이 지원됩니다. 자세한 내용은 푸시다운이 발생했는지를 확인하는 방법을 참조하세요.
parquet 파일에 대한 푸시다운
SQL Server 2022(16.x)부터 PolyBase는 parquet 파일에 대한 지원을 도입했습니다. SQL Server는 parquet을 사용하여 푸시다운을 수행할 때 행과 열 제거를 모두 수행할 수 있습니다. parquet 파일을 사용하면 다음 작업을 푸시다운할 수 있습니다.
- 숫자, 날짜 및 시간 값에 대한 이진 비교 연산자(>, >=, <=, <)
- 비교 연산자(> AND <, >= AND <, > AND <=, <= AND >=)의 조합.
- 목록 필터에서 (col1 = val1 OR col1 = val2 OR vol1 = val3).
- 열에 대해 NULL이 아닙니다.
다음이 있으면 parquet 파일에 대한 푸시다운을 방지할 수 있습니다.
- 가상 열.
- 열 비교.
- 매개 변수 형식 변환.
지원되는 데이터 유형
- bit
- TinyInt
- SmallInt
- BigInt
- 실수
- Float
- VARCHAR(Bin2Collation, CodePageConversion, BinCollation)
- NVARCHAR(Bin2Collation, BinCollation)
- 이진
- DateTime2(기본 및 7자리 전체 자릿수)
- 날짜
- Time(기본값 및 7자리 전체 자릿수)
- *(숫자 키패드)
* 매개 변수 눈금이 열 눈금과 일치하거나 매개 변수가 명시적으로 10진수로 캐스팅되는 경우에 지원됩니다.
parquet 푸시다운을 방지하는 데이터 형식
- Money
- SmallMoney
- DateTime
- SmallDateTime
예시
강제 푸시다운
SELECT * FROM [dbo].[SensorData]
WHERE Speed > 65
OPTION (FORCE EXTERNALPUSHDOWN);
푸시다운 사용 안 함
SELECT * FROM [dbo].[SensorData]
WHERE Speed > 65
OPTION (DISABLE EXTERNALPUSHDOWN);
관련 콘텐츠
- PolyBase에 대한 자세한 내용은 PolyBase를 사용한 데이터 가상화 소개를 참조하세요.
- 외부 푸시다운이 발생했는지 여부를 확인하는 방법