서버리스 SQL 풀 쿼리에 파일 메타데이터 사용
이 문서에서는 메타데이터를 사용하여 특정 파일 또는 폴더를 쿼리하는 방법을 알아봅니다. 서버리스 SQL 풀은 여러 파일 및 폴더를 처리할 수 있습니다. 자세한 내용은 쿼리 폴더 및 여러 파일을 참조하세요.
경우에 따라 결과 집합의 특정 행과 관련된 파일 또는 폴더 원본을 알아야 할 수 있습니다. 함수를 filepath
filename
사용하여 결과 집합의 파일 이름 및/또는 경로를 반환하거나 파일 이름 또는 폴더 경로에 따라 데이터를 필터링하는 데 사용할 수 있습니다. 이러한 함수는 filename 함수 및 filepath 함수에 설명되어 있습니다.
다음 섹션에서는 간단한 설명 및 코드 샘플을 제공합니다.
필수 조건
첫 번째 단계는 스토리지 계정을 참조하는 데이터 원본을 사용하여 데이터베이스 를 만드는 것입니다. 그런 다음 해당 데이터베이스에서 설치 스크립트를 실행하여 개체를 초기화합니다. 이 설치 스크립트는 이러한 샘플에서 사용되는 데이터 원본, 데이터베이스 범위 자격 증명 및 외부 파일 형식을 만듭니다.
함수
Filename
이 함수는 filename
행이 시작되는 파일 이름을 반환합니다.
다음 샘플은 2017년 9월에 대한 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
함수는 filepath
전체 또는 부분 경로를 반환합니다.
- 매개 변수 없이 호출하면 행이 시작되는 전체 파일 경로가 반환됩니다. 에 사용되는 경우
DATA_SOURCE
.에 상대적인 경로를 반환합니다DATA_SOURCE
.OPENROWSET
- 매개 변수를 사용하여 호출하면 매개 변수에 지정된 위치에 있는 와일드카드와 일치하는 경로의 일부를 반환합니다. 예를 들어 매개 변수 값 1 은 첫 번째 와일드카드와 일치하는 경로의 일부를 반환합니다.
다음 샘플은 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;