Sdílet prostřednictvím


Používání souborových metadat v dotazech bezserverového fondu SQL

V tomto článku se dozvíte, jak pomocí metadat dotazovat konkrétní soubory nebo složky. Bezserverový fond SQL může řešit více souborů a složek. Další informace najdete v tématu Dotazování složek a více souborů.

Někdy může být potřeba vědět, který soubor nebo zdroj složky koreluje s konkrétním řádkem v sadě výsledků. Můžete použít funkce filepath a filename vrátit názvy souborů nebo cestu 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 ve funkci názvu souboru a funkci filepath.

Následující části obsahují krátké popisy a ukázky kódu.

Požadavky

Prvním krokem je vytvoření databáze se zdrojem dat, který odkazuje na účet úložiště. Potom inicializovat objekty spuštěním instalačního skriptu v této databázi. Tento instalační skript vytvoří zdroje dat, přihlašovací údaje v oboru databáze a formáty externích souborů, které se používají v těchto ukázkách.

Funkce

Název souboru

Funkce filename vrátí název souboru, ze kterého pochází řádek.

Následující ukázka čte datové soubory NYC Yellow Taxi pro září 2017 a vrátí počet jízd na soubor. Část OPENROWSET dotazu určuje, které soubory se čtou.

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 filename() lze v WHERE klauzuli použít k filtrování souborů, které se mají číst. Přistupuje k celé složce v OPENROWSET části dotazu 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];

Cesta k souboru

Funkce filepath vrátí úplnou nebo částečnou cestu:

  • Při zavolání bez parametru vrátí úplnou cestu k souboru, ze které pochází řádek. Při DATA_SOURCE použití v OPENROWSET, vrátí cestu relativní k DATA_SOURCE.
  • Při zavolá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 čte datové soubory NYC Yellow Taxi za poslední tři měsíce roku 2017. Vrátí počet jízd na cestu k souboru. Část OPENROWSET dotazu určuje, které soubory se čtou.

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 filepath() lze v WHERE klauzuli použít k filtrování souborů, které se mají číst.

Zástupné cardy můžete použít v OPENROWSET části dotazu 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ší krok