PolyBase Transact-SQL 참조

적용 대상:SQL Server

이 문서에서는 PolyBase를 사용하여 다양한 외부 데이터 원본에 대해 데이터 가상화라고 하는 외부 데이터를 현재 위치에서 쿼리하는 옵션을 검토합니다.

PolyBase에서 사용되는 T-SQL 구문

PolyBase를 사용하려면 외부 데이터를 참조하는 외부 테이블을 만들어야 합니다. 참조 항목:

참고 항목

PolyBase를 사용하려면 데이터베이스에 대한 sysadmin 또는 CONTROL SERVER 수준 권한이 있어야 합니다.

자습서

쿼리의 예는 PolyBase 쿼리를 참조 하세요.

다양한 외부 데이터 원본에 대한 자세한 자습서는 다음을 검토하세요.

파일 메타데이터 함수

경우에 따라 결과 집합의 특정 행과 상관 관계가 있는 파일 또는 폴더 원본을 알아야 할 수 있습니다.

함수를 filepathfilename 사용하고 결과 집합의 파일 이름 및/또는 경로를 반환할 수 있습니다. 또는 파일 이름 및/또는 폴더 경로를 기반으로 데이터를 필터링하는 데 사용할 수 있습니다. 다음 섹션에서는 샘플에 대한 간단한 설명을 찾을 수 있습니다.

Filename 함수

이 함수는 행이 제공되는 파일 이름을 반환합니다.

반환 데이터 형식은 nvarchar(1024)입니다. 성능을 최적화하려면 항상 filename 함수의 결과를 적절한 데이터 형식으로 캐스팅합니다. 문자 데이터 형식을 사용하는 경우 적절한 길이가 사용되는지 확인합니다.

다음 샘플은 2017년 마지막 3개월 동안 NYC Yellow Taxi 데이터 파일을 읽고 파일당 승차 횟수를 반환합니다. OPENROWSET 쿼리 부분은 읽을 파일을 지정합니다.

SELECT
    nyc.filename() AS [filename]
    ,COUNT_BIG(*) AS [rows]
FROM  
    OPENROWSET(
        BULK 'parquet/taxi/year=2017/month=9/*.parquet',
        DATA_SOURCE = 'SqlOnDemandDemo',
        FORMAT='PARQUET'
    ) nyc
GROUP BY nyc.filename();

다음 예제에서는 절에서 WHERE 읽을 파일을 필터링하는 방법을 filename() 보여줍니다. 쿼리 부분의 전체 폴더에 OPENROWSET 액세스하고 절의 파일을 WHERE 필터링합니다.

결과는 이전 예제와 동일합니다.

SELECT
    r.filename() AS [filename]
    ,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
    BULK 'csv/taxi/yellow_tripdata_2017-*.csv',
        DATA_SOURCE = 'SqlOnDemandDemo',
        FORMAT = 'CSV',
        PARSER_VERSION = '2.0',
        FIRSTROW = 2) 
        WITH (C1 varchar(200) ) AS [r]
WHERE
    r.filename() IN ('yellow_tripdata_2017-10.csv', 'yellow_tripdata_2017-11.csv', 'yellow_tripdata_2017-12.csv')
GROUP BY
    r.filename()
ORDER BY
    [filename];

Filepath 함수

이 함수는 전체 경로 또는 경로의 일부를 반환합니다.

  • 매개 변수 없이 호출되면 행이 시작되는 전체 파일 경로를 반환합니다.
  • 매개 변수를 사용하여 호출되는 경우 매개 변수에 지정된 위치에 대해 wild카드와 일치하는 경로의 일부를 반환합니다. 예를 들어 매개 변수 값 1은 첫 번째 wild카드 일치하는 경로의 일부를 반환합니다.

반환 데이터 형식은 nvarchar(1024)입니다. 최적의 성능을 위해 항상 함수 결과를 filepath 적절한 데이터 형식으로 캐스팅합니다. 문자 데이터 형식을 사용하는 경우 적절한 길이가 사용되는지 확인합니다.

다음 샘플에서는 2017년 마지막 3개월 동안의 NYC Yellow Taxi 데이터 파일을 읽습니다. 파일 경로당 라이드 수를 반환합니다. OPENROWSET 쿼리 부분은 읽을 파일을 지정합니다.

SELECT
    r.filepath() AS filepath
    ,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
        BULK 'csv/taxi/yellow_tripdata_2017-1*.csv',
        DATA_SOURCE = 'SqlOnDemandDemo',
        FORMAT = 'CSV',
        PARSER_VERSION = '2.0',
        FIRSTROW = 2
    )
    WITH (
        vendor_id INT
    ) AS [r]
GROUP BY
    r.filepath()
ORDER BY
    filepath;

다음 예제에서는 절에서 WHERE 읽을 파일을 필터링하는 방법을 filepath() 보여줍니다.

쿼리 부분에서 wild카드s를 OPENROWSET 사용하고 절의 파일을 필터링할 WHERE 수 있습니다. 결과는 이전 예제와 동일합니다.

SELECT
    r.filepath() AS filepath
    ,r.filepath(1) AS [year]
    ,r.filepath(2) AS [month]
    ,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
        BULK 'csv/taxi/yellow_tripdata_*-*.csv',
        DATA_SOURCE = 'SqlOnDemandDemo',
        FORMAT = 'CSV',
        PARSER_VERSION = '2.0',        
        FIRSTROW = 2
    )
WITH (
    vendor_id INT
) AS [r]
WHERE
    r.filepath(1) IN ('2017')
    AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
    r.filepath()
    ,r.filepath(1)
    ,r.filepath(2)
ORDER BY
    filepath;