Informations de référence sur Transact-SQL PolyBase

S’applique à :SQL Server

Cet article passe en revue les options d’utilisation de PolyBase pour interroger des données externes sur place, appelées virtualisation des données, pour diverses sources de données externes.

Syntaxe T-SQL utilisée dans PolyBase

Pour utiliser PolyBase, vous devez créer des tables externes destinées à référencer vos données externes. Consultez :

Remarque

Pour pouvoir utiliser PolyBase, vous devez disposer des autorisations de niveau serveur de contrôle ou sysadmin pour la base de données.

Tutoriels

Pour découvrir des exemples de requêtes, consultez Requêtes PolyBase.

Pour plus de tutoriels sur différentes sources de données externes, consultez :

Fonctions de métadonnées de fichier

Parfois, vous devrez peut-être savoir quelle source de fichier ou de dossier met en corrélation avec une ligne spécifique dans le jeu de résultats.

Vous pouvez utiliser des fonctions filepath et filename retourner des noms de fichiers et/ou le chemin d’accès dans le jeu de résultats. Vous pouvez les utiliser pour filtrer des données sur le nom de ou le chemin d’accès du dossier. Dans les sections suivantes, vous trouverez de courtes descriptions ainsi que des exemples.

Fonction filename

Cette fonction retourne le nom du fichier d’où provient la ligne.

Le type de données de retour est nvarchar(1024). Pour des performances optimales, castez toujours le résultat de la fonction filename en un type de données approprié. Si vous utilisez le type de données caractères, assurez-vous que la longueur appropriée est utilisée.

L’exemple suivant lit les fichiers de données NYC Yellow Taxi pour les trois derniers mois de 2017, et retourne le nombre de courses par fichier. La OPENROWSET partie de la requête spécifie les fichiers à lire.

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

L’exemple suivant montre comment filename() utiliser la WHERE clause pour filtrer les fichiers à lire. Il accède à l’intégralité du dossier dans la OPENROWSET partie de la requête et filtre les fichiers de la WHERE clause.

Vos résultats seront les mêmes que dans l’exemple précédent.

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];

Fonction filepath

Cette fonction retourne un chemin complet ou une partie de chemin :

  • En cas d’appel sans paramètre, elle retourne le chemin complet du fichier d’où est issue une ligne.
  • Lorsqu’il est appelé avec un paramètre, retourne une partie du chemin qui correspond au caractère générique carte sur la position spécifiée dans le paramètre. Par exemple, la valeur de paramètre 1 retourne une partie du chemin qui correspond au premier caractère générique.

Le type de données de retour est nvarchar(1024). Pour optimiser les performances, effectuez toujours un cast du résultat de la fonction en type de filepath données approprié. Si vous utilisez le type de données caractères, assurez-vous que la longueur appropriée est utilisée.

L’exemple suivant lit les fichiers de données NYC Yellow Taxi pour les trois derniers mois de 2017. Elle retourne le nombre de courses par chemin d’accès de fichier. La OPENROWSET partie de la requête spécifie les fichiers à lire.

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;

L’exemple suivant montre comment filepath() utiliser la WHERE clause pour filtrer les fichiers à lire.

Vous pouvez utiliser les caractères génériques carte dans la OPENROWSET partie de la requête et filtrer les fichiers dans la WHERE clause. Vos résultats seront les mêmes que dans l’exemple précédent.

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;