PolyBase-Transact-SQL-Referenz

Gilt für:SQL Server

In diesem Artikel werden Die Optionen für die Verwendung von PolyBase zum Abfragen externer Daten in situ, die als Datenvirtualisierung bezeichnet werden, für eine Vielzahl externer Datenquellen überprüft.

T-SQL-Syntax, die in PolyBase verwendet wird

Um PolyBase verwenden zu können, müssen Sie externe Tabellen erstellen, um auf Ihre externen Daten zu verweisen. Siehe dazu:

Hinweis

Damit Sie PolyBase verwenden können, müssen Sie über Berechtigungen auf Systemadministrator- oder CONTROL SERVER-Ebene für die Datenbank verfügen.

Lernprogramme

Beispiele für Abfragen finden Sie unter PolyBase Queries(PolyBase-Abfragen).

Weitere Lernprogramme zu verschiedenen externen Datenquellen finden Sie unter:

Datei-Metadatenfunktionen

Manchmal müssen Sie möglicherweise wissen, welche Datei- oder Ordnerquelle mit einer bestimmten Zeile im Resultset korreliert.

Sie können Funktionen filepath verwenden und filename Dateinamen und/oder den Pfad im Resultset zurückgeben. Oder Sie können sie verwenden, um Daten anhand des Dateinamens und/oder des Ordnerpfades zu filtern. In den folgenden Abschnitten finden Sie Kurzbeschreibungen und Beispiele.

filename-Funktion

Diese Funktion gibt den Namen der Datei zurück, aus der die Zeile stammt.

Der Rückgabedatentyp ist nvarchar(1024). Um optimale Leistung zu erzielen, wandeln Sie das Ergebnis der filename-Funktion immer in den entsprechenden Datentyp um. Achten Sie bei Verwendung des Zeichendatentyps unbedingt auf die richtige Länge.

Das folgende Beispiel liest die Datendateien von „NYC Yellow Taxi“ für die letzten drei Monate des Jahres 2017 und gibt die Anzahl der Fahrten pro Datei zurück. Der OPENROWSET Teil der Abfrage gibt an, welche Dateien gelesen werden sollen.

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();

Das folgende Beispiel zeigt, wie filename() in der WHERE Klausel verwendet werden kann, um die zu lesenden Dateien zu filtern. Er greift auf den OPENROWSET gesamten Ordner im Teil der Abfrage zu und filtert Dateien in der WHERE Klausel.

Ihre Ergebnisse werden dieselben sein wie im vorherigen Beispiel.

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-Funktion

Diese Funktion gibt eine vollständigen Pfad oder eine Teil eines Pfads zurück:

  • Beim Aufruf ohne Parameter wird der vollständige Pfad einer Datei zurückgegeben, aus der eine Zeile stammt.
  • Wenn der Parameter aufgerufen wird, wird ein Teil des Pfads zurückgegeben, der dem Platz entspricht Karte an der im Parameter angegebenen Position. Der Parameterwert 1 beispielsweise würde den Teil eines Pfads zurückgeben, der dem ersten Platzhalterzeichen entspricht.

Der Rückgabedatentyp ist nvarchar(1024). Um eine optimale Leistung zu erzielen, wandeln Sie das Ergebnis der filepath Funktion immer in den entsprechenden Datentyp um. Achten Sie bei Verwendung des Zeichendatentyps unbedingt auf die richtige Länge.

Das folgende Beispiel liest die Datendateien von „NYC Yellow Taxi“ für die letzten drei Monate des Jahres 2017. Es gibt die Anzahl der Fahrten pro Dateipfad zurück. Der OPENROWSET Teil der Abfrage gibt an, welche Dateien gelesen werden sollen.

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;

Das folgende Beispiel zeigt, wie filepath() in der WHERE Klausel verwendet werden kann, um die zu lesenden Dateien zu filtern.

Sie können die Wild Karte im OPENROWSET Teil der Abfrage verwenden und die Dateien in der WHERE Klausel filtern. Ihre Ergebnisse werden dieselben sein wie im vorherigen Beispiel.

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;