PolyBase의 푸시다운 계산

적용 대상: SQL Server 2016(13.x) 이상 버전

푸시다운 계산은 외부 데이터 원본에 대한 쿼리의 성능을 향상시킵니다. SQL Server 2016(13.x)부터 Hadoop 외부 데이터 원본에 푸시다운 계산을 사용할 수 있었습니다. SQL Server 2019(15.x)는 다른 유형의 외부 데이터 원본에 대한 푸시다운 계산을 도입했습니다.

참고 항목

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에서 도입되었습니다.

참고 항목

푸시다운 계산은 일부 T-SQL 구문으로 차단될 수 있습니다. 자세한 내용은 푸시다운을 방지하는 구문을 참조하세요.

푸시다운 계산 및 Hadoop 공급자

PolyBase는 현재 HDP(Hortonworks Data Platform) 및 CDH(Cloudera Distributed Hadoop)라는 두 개의 Hadoop 공급자를 지원합니다. 푸시다운 계산 측면에서 두 기능 간에는 차이가 없습니다.

Hadoop에서 계산 푸시다운 기능을 사용하려면 대상 Hadoop 클러스터에 HDFS, YARN 및 MapReduce의 핵심 구성 요소가 있어야 하며 작업 기록 서버가 활성화되어 있어야 합니다. PolyBase는 MapReduce를 통해 푸시다운 쿼리를 제출하고 작업 기록 서버에서 상태 가져옵니다. 두 구성 요소 중 하나가 없으면 쿼리가 실패합니다.

데이터가 SQL Server에 도달한 후 일부 집계가 발생해야 합니다. 하지만 집계의 일부는 Hadoop에서 발생합니다. 이 방법은 대규모 병렬 처리 시스템에서 집계를 계산하는 데 사용됩니다.

Hadoop 공급자는 다음과 같은 집계 및 필터를 지원합니다.

집계 필터(이진 비교)
Count_Big NotEqual
Sum LessThan
Avg LessOrEqual
최대 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 와 일치하는 행을 검색하는 map-reduce 작업을 시작합니다. 테이블의 모든 행을 검색하지 않고 쿼리가 성공적으로 완료될 수 있으므로 조건자 조건에 맞는 행만 SQL Server에 복사됩니다. 이렇게 하면 상당한 시간이 절약되고 고객 잔액 수가 200000인 고객 수와 계정 잔액 <>이 200000인 고객 수에 비해 더 적은 임시 스토리지 공간이 필요합니다.

SELECT * FROM customer WHERE customer.account_balance < 200000;
SELECT * FROM SensorData WHERE Speed > 65;  

열의 하위 집합 선택

조건자 푸시다운을 사용하여 외부 테이블에서 열의 하위 집합을 선택하는 쿼리의 성능을 향상시킵니다.

이 쿼리에서 SQL Server는 두 열(customer.name 및 customer.zip_code)에 대한 데이터만 SQL Server에 복사되도록 Hadoop 구분 텍스트 파일을 미리 처리하는 map-reduce 작업을 시작합니다.

SELECT customer.name, customer.zip_code
FROM customer
WHERE customer.account_balance < 200000;

기본 식 및 연산자 푸시다운

SQL Server는 조건자 푸시다운에 대해 다음과 같은 기본 식 및 연산자를 허용합니다.

  • 숫자, 날짜 및 시간 값에 대한 이진 비교 연산자(<, >, =, !=, <>, >=, <=)
  • 산술 연산자(+, , *-, /%).
  • 논리 연산자(AND, OR).
  • 단항 연산자(NOT, IS NULL, IS NOT NULL)

연산BETWEEN자 , NOTINLIKE 푸시다운될 수 있습니다. 실제 동작은 쿼리 최적화 프로그램에서 연산자 식을 기본 관계형 연산자를 사용하는 일련의 문으로 다시 작성하는 방법에 따라 달라집니다.

이 예제의 쿼리에는 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

구문 및 TRIM 구문에 대한 FORMAT 푸시다운 지원은 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자리 전체 자릿수)
  • 날짜
  • 시간(기본값 및 7자리 전체 자릿수)
  • *(숫자 키패드)

* 매개 변수 크기 조정이 열 눈금에 맞춰지거나 매개 변수가 명시적으로 소수 자릿수로 캐스팅되는 경우 지원됩니다.

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);

다음 단계

참고 항목