Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Den här artikeln granskar alternativ för att använda PolyBase för att fråga externa data på plats, som kallas datavirtualisering, för en mängd olika externa datakällor.
T-SQL-syntax som används i PolyBase
Om du vill använda PolyBase måste du skapa externa tabeller för att referera till dina externa data. Läs mer:
- SKAPA DATABASRELATERADE REFERENSER (Transact-SQL)
- SKAPA EXTERN DATAKÄLLA (Transact-SQL)
- SKAPA EXTERNT FILFORMAT (Transact-SQL)
- SKAPA EXTERN TABELL (Transact-SQL)
- SKAPA STATISTIK (Transact-SQL)
Anmärkning
För att kunna använda PolyBase måste du ha behörigheter på sysadmin- eller CONTROL SERVER-nivå för databasen.
Handledningar
Exempel på frågor finns i PolyBase-frågor.
Fler självstudier om olika externa datakällor finns i:
- Hadoop
- Azure Blob Storage
- SQL Server
- Oracle
- Teradata
- MongoDB
- ALLMÄNNA ODBC-typer
- S3-kompatibel objektlagring
- CSV
- Deltatabell
Filmetadata funktioner
Ibland kan du behöva veta vilken fil- eller mappkälla som motsvarar en specifik rad i resultatuppsättningen.
Du kan använda funktioner filepath och filename returnera filnamn och/eller sökvägen i resultatuppsättningen. Eller så kan du använda dem för att filtrera data baserat på filnamn och/eller mappväg. I följande avsnitt hittar du korta beskrivningar tillsammans med exempel.
Filnamnsfunktion
Denna funktion returnerar filnamnet som raden kommer ifrån.
Returdatatypen är nvarchar(1024). För optimal prestanda, kasta alltid resultatet av filnamnsfunktionen till lämplig datatyp. Om du använder teckendatatyp, se till att lämplig längd används.
Följande exempel läser NYC Yellow Taxi-datafilerna för de sista tre månaderna av 2017 och återger antalet resor per fil. Den OPENROWSET del av frågan specificerar vilka filer som ska läsas.
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();
Följande exempel visar hur filename() kan användas i klausulen WHERE för att filtrera filerna som ska läsas. Den får tillgång till hela mappen i delen OPENROWSET av frågan och filtrerar filer i klausulen WHERE .
Dina resultat kommer att vara desamma som i det tidigare exemplet.
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];
Filvägsfunktion
Denna funktion returnerar en fullständig väg eller en del av vägen:
- När den anropas utan parameter, returnerar den hela filvägen som en rad kommer ifrån.
- När den anropas med parameter, returnerar den en del av vägen som matchar jokern på positionen som anges i parametern. Till exempel skulle parametervärde 1 returnera en del av vägen som matchar det första jokerkortet.
Returdatatypen är nvarchar(1024). För optimal prestanda, kasta alltid resultatet av filepath funktionen till lämplig datatyp. Om du använder teckendatatyp, se till att lämplig längd används.
Följande exempel visar NYC Yellow Taxi-datafiler för de sista tre månaderna av 2017. Den returnerar antalet turer per filväg. Den OPENROWSET del av frågan specificerar vilka filer som ska läsas.
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;
Följande exempel visar hur filepath() kan användas i klausulen WHERE för att filtrera filerna som ska läsas.
Du kan använda jokrarna i den OPENROWSET del av frågan och filtrera filerna i klausulen WHERE . Dina resultat kommer att vara desamma som i det tidigare exemplet.
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;