Informazioni di riferimento su Transact-SQL per PolyBase
Si applica a: SQL Server
Questo articolo esamina le opzioni per l'uso di PolyBase per eseguire query sui dati esterni sul posto, detti virtualizzazione dei dati, per un'ampia gamma di origini dati esterne.
Sintassi T-SQL usata in PolyBase
Per usare PolyBase, è necessario creare tabelle esterne per fare riferimento ai dati esterni. Fare riferimento a:
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL DATA SOURCE (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- CREATE STATISTICS (Transact-SQL)
Nota
Per usare PolyBase, sono necessarie le autorizzazioni a livello di CONTROLLO SERVER o sysadmin per il database.
Esercitazioni
Per esempi di query, vedere l'argomento relativo alle query PolyBase.
Per altre esercitazioni su varie origini dati esterne, vedere:
- Hadoop
- Archiviazione BLOB di Azure
- SQL Server
- Oracle
- Teradata
- MongoDB
- Tipi generici ODBC
- Risorsa di archiviazione di oggetti compatibile con S3
- CSV
- Tabella Delta
Funzioni per i metadati dei file
In alcuni casi, potrebbe essere necessario individuare l'origine del file o della cartella correlata a una riga specifica nel set di risultati.
È possibile usare le funzioni filepath
e filename
per restituire i nomi file e/o il percorso nel set di risultati. In alternativa, è possibile usarli per filtrare i dati in base al nome file e/o al percorso della cartella. Nelle sezioni seguenti, sono disponibili brevi descrizioni accanto agli esempi.
Funzione filename
Questa funzione restituisce il nome del file da cui ha origine la riga.
Il tipo di dati restituito è nvarchar (1024). Per ottenere prestazioni ottimali, è sempre possibile eseguire il cast del risultato della funzione filename al tipo di dati appropriato. Se si usa il tipo di dati Char, assicurarsi che venga usata la lunghezza appropriata.
L'esempio seguente legge i file di dati dei taxi di New York per gli ultimi tre mesi del 2017 e restituisce il numero di corse per ogni file. La parte OPENROWSET
della query specifica i file che verranno letti.
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'esempio seguente mostra come usare filename()
nella clausola WHERE
per filtrare i file da leggere. Accede all'intera cartella nella parte OPENROWSET
della query e filtra i file nella clausola WHERE
.
I risultati saranno identici a quelli dell'esempio precedente.
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];
Funzione filepath
Questa funzione restituisce un percorso completo o parziale:
- Se viene chiamata senza il parametro, restituisce il percorso completo del file da cui ha origine una riga.
- Se viene chiamata con il parametro, viene restituita una parte del percorso che corrisponde al carattere jolly nella posizione specificata nel parametro. Ad esempio, il valore del parametro 1 restituisce la parte del percorso che corrisponde al primo carattere jolly.
Il tipo di dati restituito è nvarchar (1024). Per ottenere prestazioni ottimali, è sempre possibile eseguire il cast del risultato della funzione filepath
al tipo di dati appropriato. Se si usa il tipo di dati Char, assicurarsi che venga usata la lunghezza appropriata.
L'esempio seguente legge i file di dati dei taxi di New York per gli ultimi tre mesi del 2017. Restituisce il numero di corse per ogni percorso file. La parte OPENROWSET
della query specifica i file che verranno letti.
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'esempio seguente mostra come usare filepath()
nella clausola WHERE
per filtrare i file da leggere.
È possibile usare i caratteri jolly nella parte OPENROWSET
della query e filtrare i file nella clausola WHERE
. I risultati saranno identici a quelli dell'esempio precedente.
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;