다음을 통해 공유


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 함수

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

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

반환 데이터 형식은 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;

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

쿼리의 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;