Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
In dit artikel worden opties besproken voor het gebruik van PolyBase om externe gegevens in-place te doorzoeken, ook wel gegevensvirtualisatie genoemd, voor verschillende externe gegevensbronnen.
T-SQL-syntaxis die wordt gebruikt in PolyBase
Als u PolyBase wilt gebruiken, moet u externe tabellen maken om te verwijzen naar uw externe gegevens. Raadpleeg:
- nl-NL: CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL DATA SOURCE (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREËER EXTERNE TABEL (Transact-SQL)
- STATISTIEKEN maken (Transact-SQL)
Opmerking
Als u PolyBase wilt gebruiken, moet u machtigingen op sysadmin- of CONTROL SERVER-niveau hebben voor de database.
Tutorials
Zie PolyBase-query's voor voorbeelden van query's.
Voor meer tutorials over verschillende externe gegevensbronnen, bekijk:
- Hadoop
- Azure Blob-opslagruimte
- SQL Server
- Oracle
- Teradata
- MongoDB
- Algemene ODBC-typen
- S3-compatibele objectopslag
- CSV
- Delta-tabel
Bestandsmetagegevensfuncties
Soms moet je weten welke bestands- of mapbron correleert met een specifieke rij in de resultaatset.
Je kunt de functies filepath en filename gebruiken om bestandsnamen en/of het pad in de resultaatset op te halen. Of je kunt ze gebruiken om data te filteren op basis van de bestandsnaam en/of het mappad. In de volgende secties vind je korte beschrijvingen naast voorbeelden.
Bestandsnaamfunctie
Deze functie geeft de bestandsnaam terug waar de rij vandaan komt.
Het type retourgegevens is nvarchar(1024). Voor optimale prestaties wordt het resultaat van de bestandsnaamfunctie altijd gecast naar het juiste datatype. Als je het type character data gebruikt, zorg er dan voor dat de juiste lengte wordt gebruikt.
Het volgende voorbeeld leest de NYC Yellow Taxi-gegevensbestanden van de laatste drie maanden van 2017 en geeft het aantal ritten per bestand terug. Het OPENROWSET deel van de query specificeert welke bestanden gelezen zullen worden.
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();
Het volgende voorbeeld laat zien hoe filename() in de WHERE clausule gebruikt kan worden om de te lezen bestanden te filteren. Het benadert de hele map in het OPENROWSET deel van de query en filtert bestanden in de WHERE clausule.
Je resultaten zullen hetzelfde zijn als in het vorige voorbeeld.
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];
Bestandspad-functie
Deze functie geeft een volledig pad of een deel van het pad terug:
- Wanneer het zonder parameter wordt aangeroepen, geeft het het volledige bestandspad terug waaruit een rij komt.
- Wanneer er met een parameter wordt aangeroepen, geeft het een deel van het pad terug dat overeenkomt met de wildcard op de positie die in de parameter is gespecificeerd. Bijvoorbeeld, parameterwaarde 1 zou een deel van het pad teruggeven dat overeenkomt met de eerste joker.
Het type retourdata is nvarchar(1024). Voor optimale prestaties wordt het resultaat van de filepath functie altijd naar het juiste datatype gecast. Als je het type character data gebruikt, zorg er dan voor dat de juiste lengte wordt gebruikt.
Het volgende voorbeeld bevat de NYC Yellow Taxi-gegevensbestanden van de laatste drie maanden van 2017. Het geeft het aantal ritten per bestandspad terug. Het OPENROWSET deel van de query specificeert welke bestanden gelezen zullen worden.
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;
Het volgende voorbeeld laat zien hoe filepath() in de WHERE clausule gebruikt kan worden om de te lezen bestanden te filteren.
Je kunt de jokers gebruiken in het OPENROWSET deel van de query en de bestanden in de WHERE clausule filteren. Je resultaten zullen hetzelfde zijn als in het vorige voorbeeld.
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;