Používání souborových metadat v dotazech bezserverového fondu SQL
Bezserverový fond SQL může adresovat více souborů a složek, jak je popsáno v článku Dotazování složek a více souborů . V tomto článku se dozvíte, jak v dotazech používat informace o metadatech o názvech souborů a složek.
Někdy může být potřeba vědět, který zdroj souboru nebo složky koreluje s konkrétním řádkem v sadě výsledků.
Funkci a filename
můžete použít filepath
k vrácení názvů souborů nebo cesty v sadě výsledků. Nebo je můžete použít k filtrování dat na základě názvu souboru nebo cesty ke složce. Tyto funkce jsou popsány v části syntaxe funkce název_souboru a funkce cesta k souboru. V následujících částech najdete krátké popisy s ukázkami.
Požadavky
Prvním krokem je vytvoření databáze se zdroji dat, který odkazuje na účet úložiště. Potom objekty inicializujete spuštěním instalačního skriptu v této databázi. Tento instalační skript vytvoří zdroje dat, přihlašovací údaje s oborem databáze a formáty externích souborů, které se používají v těchto ukázkách.
Functions
Název_souboru
Tato funkce vrátí název souboru, ze kterého řádek pochází.
Následující ukázka přečte datové soubory NYC Yellow Taxi za poslední tři měsíce roku 2017 a vrátí počet jízd na soubor. Část dotazu OPENROWSET určuje, které soubory se budou číst.
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();
Následující příklad ukazuje, jak lze v klauzuli WHERE použít název_souboru() k filtrování souborů, které se mají číst. Přistupuje k celé složce v části dotazu OPENROWSET a filtruje soubory v klauzuli WHERE.
Výsledky budou stejné jako v předchozím příkladu.
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
Funkce filepath vrátí úplnou nebo částečnou cestu:
- Při volání bez parametru vrátí úplnou cestu k souboru, ze které řádek pochází. Při použití DATA_SOURCE v OPENROWSET vrátí cestu vzhledem k DATA_SOURCE.
- Při volání s parametrem vrátí část cesty, která odpovídá zástupným znakům na pozici zadané v parametru. Například hodnota parametru 1 vrátí část cesty, která odpovídá prvnímu zástupného znaku.
Následující ukázka obsahuje datové soubory NYC Yellow Taxi za poslední tři měsíce roku 2017. Vrátí počet jízd na cestě k souboru. Část dotazu OPENROWSET určuje, které soubory se budou číst.
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;
Následující příklad ukazuje, jak je možné použít filepath() v klauzuli WHERE k filtrování souborů, které se mají číst.
V části dotazu OPENROWSET můžete použít zástupné cardy a filtrovat soubory v klauzuli WHERE. Výsledky budou stejné jako v předchozím příkladu.
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;
Další kroky
V dalším článku se dozvíte, jak dotazovat soubory Parquet.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro