Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di
AzureIstanza gestita di SQL di
AzureEndpoint di analisi SQL in Microsoft Fabric
Warehouse in Microsoft Fabric
Database SQL in Microsoft Fabric
La OPENROWSET funzione legge i dati da uno o più file e restituisce il contenuto come set di righe. A seconda di un servizio, il file potrebbe essere archiviato in Archiviazione BLOB di Azure, Archiviazione Azure Data Lake, disco locale, condivisioni di rete e così via. È possibile leggere vari formati di file, ad esempio testo/CSV, Parquet o righe JSON.
È OPENROWSET possibile fare riferimento alla FROM funzione nella clausola di una query come se fosse un nome di tabella. Può essere usato per leggere i dati nell'istruzione o per aggiornare i dati di destinazione nelle istruzioni , SELECTUPDATE, INSERT, DELETE, o MERGE .CTASCETAS
-
OPENROWSET(BULK)è progettato per leggere i dati da file di dati esterni. -
OPENROWSETsenzaBULKè progettato per la lettura da un altro motore di database. Per altre informazioni, vedere OPENROWSET (Transact-SQL).
Questo articolo e l'argomento impostati in OPENROWSET(BULK) variano tra le piattaforme.
- Per la sintassi di Microsoft Fabric selezionare Infrastruttura nell'elenco a discesa versione.
- Per SQL Server, il database SQL di Azure e la sintassi di Istanza gestita di SQL di Azure, selezionare la piattaforma nell'elenco a discesa versione.
Dettagli e collegamenti a esempi simili su altre piattaforme:
- Per altre informazioni sul
OPENROWSETdatabase SQL di Azure, vedere Virtualizzazione dei dati con il database SQL di Azure. - Per altre informazioni su
OPENROWSETin Istanza gestita di SQL di Azure, vedere Virtualizzazione dei dati con Istanza gestita di SQL di Azure. - Per informazioni ed esempi con pool SQL serverless in Azure Synapse, vedere Come usare OPENROWSET usando il pool SQL serverless in Azure Synapse Analytics.
- I pool SQL dedicati in Azure Synapse non supportano la
OPENROWSETfunzione.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
Per SQL Server, Azure SQL Database, database SQL in Fabric e Azure SQL Managed Instance:
OPENROWSET( BULK 'data_file_path',
<bulk_option> ( , <bulk_option> )*
)
[
WITH ( ( <column_name> <sql_datatype> [ '<column_path>' | <column_ordinal> ] )+ )
]
<bulk_option> ::=
DATA_SOURCE = 'data_source_name' |
-- file format options
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } |
DATAFILETYPE = { 'char' | 'widechar' } |
FORMAT = <file_format> |
FORMATFILE = 'format_file_path' |
FORMATFILE_DATA_SOURCE = 'data_source_name' |
SINGLE_BLOB |
SINGLE_CLOB |
SINGLE_NCLOB |
-- Text/CSV options
ROWTERMINATOR = 'row_terminator' |
FIELDTERMINATOR = 'field_terminator' |
FIELDQUOTE = 'quote_character' |
-- Error handling options
MAXERRORS = maximum_errors |
ERRORFILE = 'file_name' |
ERRORFILE_DATA_SOURCE = 'data_source_name' |
-- Execution options
FIRSTROW = first_row |
LASTROW = last_row |
ORDER ( { column [ ASC | DESC ] } [ , ...n ] ) [ UNIQUE ] ] |
ROWS_PER_BATCH = rows_per_batch
Sintassi per Fabric Data Warehouse
OPENROWSET( BULK 'data_file_path',
<bulk_option> ( , <bulk_option> )*
)
[
WITH ( ( <column_name> <sql_datatype> [ '<column_path>' | <column_ordinal> ] )+ )
]
<bulk_option> ::=
DATA_SOURCE = 'data_source_name' |
-- file format options
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } |
DATAFILETYPE = { 'char' | 'widechar' } |
FORMAT = <file_format> |
-- Text/CSV options
ROWTERMINATOR = 'row_terminator' |
FIELDTERMINATOR = 'field_terminator' |
FIELDQUOTE = 'quote_character' |
ESCAPECHAR = 'escape_char' |
HEADER_ROW = [true|false] |
PARSER_VERSION = 'parser_version' |
-- Error handling options
MAXERRORS = maximum_errors |
ERRORFILE = 'file_name' |
-- Execution options
FIRSTROW = first_row |
LASTROW = last_row |
ROWS_PER_BATCH = rows_per_batch
Arguments
Gli argomenti dell'opzione BULK consentono un controllo significativo sulla posizione in cui iniziare e terminare i dati di lettura, su come gestire gli errori e sul modo in cui i dati vengono interpretati. Ad esempio, è possibile specificare che il file di dati viene letto come set di righe a riga singola, a colonna singola di tipo varbinary, varchar o nvarchar. Il comportamento predefinito viene illustrato nelle descrizioni degli argomenti seguenti.
Per informazioni su come usare l'opzione BULK , vedere la sezione Osservazioni più avanti in questo articolo. Per informazioni sulle autorizzazioni richieste dall'opzione BULK , vedere la sezione Autorizzazioni più avanti in questo articolo.
Per informazioni sulla preparazione dei dati per l'importazione bulk, vedere Preparare i dati per l'esportazione o l'importazione bulk.
BULK 'data_file_path'
Percorso o URI dei file di dati i cui dati devono essere letti e restituiti come set di righe.
L'URI può fare riferimento ad Archiviazione Azure Data Lake o ad Archiviazione BLOB di Azure. URI dei file di dati i cui dati devono essere letti e restituiti come set di righe.
I formati di percorso supportati sono:
-
<drive letter>:\<file path>per accedere ai file sul disco locale -
\\<network-share\<file path>per accedere ai file nelle condivisioni di rete -
adls://<container>@<storage>.dfs.core.windows.net/<file path>per accedere ad Azure Data Lake Storage -
abs://<storage>.blob.core.windows.net/<container>/<file path>per accedere ad Archiviazione BLOB di Azure -
s3://<ip-address>:<port>/<file path>per accedere all'archiviazione compatibile con s3
Note
Questo articolo e i modelli di URI supportati differiscono per piattaforme diverse. Per i modelli URI disponibili in Microsoft Fabric Data Warehouse, selezionare Infrastruttura nell'elenco a discesa versione.
A partire da SQL Server 2017 (14.x), il data_file può trovarsi in Archiviazione BLOB di Azure. Per esempi, vedere Esempi di accesso in blocco ai dati in Archiviazione BLOB di Azure.
-
https://<storage>.blob.core.windows.net/<container>/<file path>per accedere ad Archiviazione BLOB di Azure o Azure Data Lake Storage -
https://<storage>.dfs.core.windows.net/<container>/<file path>per accedere ad Azure Data Lake Storage -
abfss://<container>@<storage>.dfs.core.windows.net/<file path>per accedere ad Azure Data Lake Storage -
https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/<file path>- per accedere a OneLake in Microsoft Fabric
Note
Questo articolo e i modelli di URI supportati differiscono per piattaforme diverse. Per i modelli URI disponibili in SQL Server, database SQL di Azure e Istanza gestita di SQL di Azure , selezionare il prodotto nell'elenco a discesa versione.
L'URI può includere il * carattere in modo che corrisponda a qualsiasi sequenza di caratteri, consentendo OPENROWSET la corrispondenza tra criteri e URI. Inoltre, può terminare con /** per abilitare l'attraversamento ricorsivo attraverso tutte le sottocartelle. In SQL Server questo comportamento è disponibile a partire da SQL Server 2022 (16.x).
Per esempio:
SELECT TOP 10 *
FROM OPENROWSET(
BULK '<scheme:>//pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/*.parquet'
);
I tipi di archiviazione a cui è possibile fare riferimento dall'URI sono illustrati nella tabella seguente:
| Versione | On-premises | Archiviazione di Azure | OneLake in tessuto | S3 | Google Cloud (GCS) |
|---|---|---|---|---|---|
| SQL Server 2017 (14.x), SQL Server 2019 (15.x) | Yes | Yes | NO | NO | NO |
| SQL Server 2022 (16.x) | Yes | Yes | NO | Yes | NO |
| Database SQL di Microsoft Azure | NO | Yes | NO | NO | NO |
| Istanza SQL gestita di Azure | NO | Yes | NO | NO | NO |
| Serverless SQL pool in Azure Synapse Analytics | NO | Yes | Yes | NO | NO |
| Endpoint di analisi DI Microsoft Fabric Warehouse e SQL | NO | Yes | Yes | Sì, usando le scorciatoie OneLake in Fabric | Sì, usando le scorciatoie OneLake in Fabric |
| Database SQL su Microsoft Fabric | NO | Sì, usando le scorciatoie OneLake in Fabric | Yes | Sì, usando le scorciatoie OneLake in Fabric | Sì, usando le scorciatoie OneLake in Fabric |
Puoi usarli OPENROWSET(BULK) per leggere i dati direttamente dai file memorizzati nel OneLake in Microsoft Fabric, in particolare dalla cartella Files di una casa Fabric Lakehouse. In questo modo si elimina la necessità di account di staging esterni, ad esempio ADLS Gen2 o Archiviazione BLOB, e consente l'inserimento nativo dell'area di lavoro gestito dall'area di lavoro usando le autorizzazioni di Infrastruttura. Questa funzionalità supporta:
- Lettura da
Filescartelle in Lakehouses - Carichi da area di lavoro a magazzino all'interno dello stesso tenant
- Imposizione dell'identità nativa con Microsoft Entra ID
Vedere le limitazioni applicabili sia a che COPY INTOa OPENROWSET(BULK) .
DATA_SOURCE
DATA_SOURCE definisce il percorso radice del percorso del file di dati. Consente di usare percorsi relativi nel percorso BULK. L'origine dati viene creata con CREATE EXTERNAL DATA SOURCE.
Oltre al percorso radice, può definire credenziali personalizzate che possono essere usate per accedere ai file in tale percorso.
Per esempio:
CREATE EXTERNAL DATA SOURCE root
WITH (LOCATION = '<scheme:>//pandemicdatalake.blob.core.windows.net/public')
GO
SELECT *
FROM OPENROWSET(
BULK '/curated/covid-19/bing_covid-19_data/latest/*.parquet',
DATA_SOURCE = 'root'
);
Opzioni di formato file
CODEPAGE
Specifica la pagina di codice dei dati nel file di dati.
CODEPAGE è rilevante solo se i dati contengono colonne char, varchar o text con valori di carattere superiori a 127 o minori di 32. I valori validi sono 'ACP', 'OEM', 'RAW' o 'code_page':
| Valore CODEPAGE | Description |
|---|---|
ACP |
Converte le colonne di tipo char, varchar o text dalla tabella codici ANSI/Microsoft Windows (ISO 1252) alla tabella codici di SQL Server. |
OEM (impostazione predefinita) |
Converte le colonne di tipo di dati char, varchar o text dalla tabella codici OEM di sistema alla tabella codici di SQL Server. |
RAW |
Non vengono eseguite conversioni tra tabelle codici. Si tratta dell'opzione più rapida. |
code_page |
Indica la tabella codici di origine in cui vengono codificati i dati di tipo carattere del file di dati, ad esempio 850. |
Important
Le versioni precedenti a SQL Server 2016 (13.x) non supportano la tabella codici 65001 (codifica UTF-8).
CODEPAGE non è un'opzione supportata in Linux.
Note
È consigliabile specificare un nome di regole di confronto per ogni colonna in un file di formato tranne quando si vuole assegnare all'opzione 65001 la priorità sulla specifica delle regole di confronto o della tabella codici.
DATAFILETYPE
Specifica che OPENROWSET(BULK) deve leggere il contenuto del file a byte singolo (ASCII, UTF8) o multi byte (UTF16). I valori validi sono char e widechar:
| Valore DATAFILETYPE | Rappresentazione di tutti i dati |
|---|---|
| char (impostazione predefinita) | Formato carattere. Per altre informazioni, vedere Usare il formato carattere per importare o esportare dati. |
| widechar | Caratteri Unicode. Per altre informazioni, vedere Usare il formato carattere Unicode per importare o esportare dati. |
FORMATO
Specifica il formato del file a cui si fa riferimento, ad esempio:
SELECT *
FROM OPENROWSET(BULK N'<data-file-path>',
FORMAT='CSV') AS cars;
I valori validi sono 'CSV' (file di valori delimitati da virgole conformi allo standard RFC 4180 ), 'PARQUET', 'DELTA' (versione 1.0) e 'JSONL', a seconda della versione:
| Versione | CSV | PARQUET | DELTA | JSONL |
|---|---|---|---|---|
| SQL Server 2017 (14.x), SQL Server 2019 (15.x) | Yes | NO | NO | NO |
| SQL Server 2022 (16.x) e versioni successive | Yes | Yes | Yes | NO |
| Database SQL di Microsoft Azure | Yes | Yes | Yes | NO |
| Istanza SQL gestita di Azure | Yes | Yes | Yes | NO |
| Serverless SQL pool in Azure Synapse Analytics | Yes | Yes | Yes | NO |
| Endpoint di analisi DI Microsoft Fabric Warehouse e SQL | Yes | Yes | NO | Yes |
| Database SQL su Microsoft Fabric | Yes | Yes | NO | NO |
Important
La OPENROWSET funzione può leggere solo il formato JSON delimitato da newline .
Il carattere di nuova riga deve essere usato come separatore tra documenti JSON e non può essere inserito al centro di un documento JSON.
Non FORMAT è necessario specificare l'opzione se l'estensione del file nel percorso termina con .csv, .tsv.parquet.parq.jsonl, .ldjson, o ..ndjson Ad esempio, la OPENROWSET(BULK) funzione sa che il formato è parquet basato sull'estensione nell'esempio seguente:
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'
);
Se il percorso del file non termina con una di queste estensioni, è necessario specificare , FORMATad esempio:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'abfss://nyctlc@azureopendatastorage.blob.core.windows.net/yellow/**',
FORMAT='PARQUET'
)
FORMATFILE
Specifica il percorso completo di un file di formato. SQL Server supporta due tipi di file di formato, ovvero XML e non XML.
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'D:\XChange\test-csv.csv',
FORMATFILE= 'D:\XChange\test-format-file.xml'
)
Un file di formato è necessario per definire i tipi di colonna nel set di risultati. L'unica eccezione è quando SINGLE_CLOB, SINGLE_BLOBo SINGLE_NCLOB è specificato. In tal caso, il file di formato non è obbligatorio.
Per informazioni sui file di formato, vedere Usare un file di formato per l'importazione bulk di dati (SQL Server).For information about format files, see Use a format file to bulk import data (SQL Server).
A partire da SQL Server 2017 (14.x), il format_file_path può trovarsi in Archiviazione BLOB di Azure. Per esempi, vedere Esempi di accesso in blocco ai dati in Archiviazione BLOB di Azure.
FORMATFILE_DATA_SOURCE
FORMATFILE_DATA_SOURCE definisce il percorso radice del percorso del file di formato. Consente di usare percorsi relativi nell'opzione FORMATFILE.
CREATE EXTERNAL DATA SOURCE root
WITH (LOCATION = '//pandemicdatalake/public/curated')
GO
SELECT *
FROM OPENROWSET(
BULK '//pandemicdatalake/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
FORMATFILE = 'covid-19/bing_covid-19_data/latest/bing_covid-19_data.fmt',
FORMATFILE_DATA_SOURCE = 'root'
);
L'origine dati del file di formato viene creata con CREATE EXTERNAL DATA SOURCE. Oltre al percorso radice, può definire credenziali personalizzate che possono essere usate per accedere ai file in tale percorso.
Opzioni testo/CSV
ROWTERMINATOR
Specifica il carattere di terminazione di riga da usare per i file di dati char e widechar , ad esempio:
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ROWTERMINATOR = '\n'
);
Il carattere di terminazione della riga predefinito è \r\n (carattere di nuova riga). Per altre informazioni, vedere Specificare caratteri di terminazione dei campi e delle righe.
FIELDTERMINATOR
Specifica il carattere di terminazione del campo da usare per i file di dati char e widechar , ad esempio:
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
FIELDTERMINATOR = '\t'
);
Il carattere di terminazione del campo predefinito è , (virgola). Per altre informazioni, vedere Specificare caratteri di terminazione dei campi e delle righe. Ad esempio, per leggere dati delimitati da tabulazioni da un file:
FIELDQUOTE = 'field_quote'
A partire da SQL Server 2017 (14.x), questo argomento specifica un carattere usato come carattere virgolette nel file CSV, come nell'esempio di New York seguente:
Empire State Building,40.748817,-73.985428,"20 W 34th St, New York, NY 10118","\icons\sol.png"
Statue of Liberty,40.689247,-74.044502,"Liberty Island, New York, NY 10004","\icons\sol.png"
È possibile specificare un solo carattere come valore per questa opzione. Se non specificato, il carattere virgolette (") viene usato come carattere di virgolette come definito nello standard RFC 4180 . Il FIELDTERMINATOR carattere (ad esempio, una virgola) può essere inserito all'interno delle virgolette di campo e verrà considerato come un carattere normale nella cella di cui è stato eseguito il wrapping con i FIELDQUOTE caratteri.
Ad esempio, per leggere il set di dati CSV di esempio di New York precedente, usare FIELDQUOTE = '"'. I valori del campo dell'indirizzo verranno conservati come valore singolo, non suddivisi in più valori in base alle virgole all'interno dei " caratteri (virgolette).
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
FIELDQUOTE = '"'
);
PARSER_VERSION = 'parser_version'
Si applica a: Solo Fabric Data Warehouse
Specifica la versione del parser da usare per la lettura dei file. Le versioni del parser attualmente supportate CSV sono 1.0 e 2.0:
- PARSER_VERSION = '1,0'
- PARSER_VERSION = '2.0'
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'abfss://nyctlc@azureopendatastorage.blob.core.windows.net/yellow/**',
FORMAT='CSV',
PARSER_VERSION = '2.0'
)
La versione 1.0 del parser CSV è l'impostazione predefinita ed è completa di tutte le funzionalità, La versione 2.0 è progettata per le prestazioni e non supporta tutte le opzioni e le codifiche.
Specifiche del parser CSV versione 1.0:
- Le opzioni seguenti non sono supportate: HEADER_ROW.
- I caratteri di terminazione predefiniti sono
\r\ne\n\r. - Se si specifica
\n(nuova riga) come carattere di terminazione della riga, viene automaticamente preceduto da un\rcarattere (ritorno a capo), che genera un terminatore di riga di\r\n.
Specifiche del parser CSV versione 2.0:
- Non sono supportati tutti i tipi di dati.
- La lunghezza massima della colonna di caratteri è 8000.
- Il limite massimo delle dimensioni di riga è 8 MB.
- Le opzioni seguenti non sono supportate:
DATA_COMPRESSION. - La stringa vuota racchiusa tra virgolette ("") viene interpretata come stringa vuota.
- L'opzione DATEFORMAT SET non viene rispettata.
- Formato supportato per il tipo di dati date :
YYYY-MM-DD - Formato supportato per il tipo di dati time :
HH:MM:SS[.fractional seconds] - Formato supportato per il tipo di dati datetime2 :
YYYY-MM-DD HH:MM:SS[.fractional seconds] - I caratteri di terminazione predefiniti sono
\r\ne\n.
ESCAPE_CHAR = 'char'
Specifica il carattere nel file utilizzato per eseguire l'escape e tutti i valori delimitatori nel file, ad esempio:
Place,Address,Icon
Empire State Building,20 W 34th St\, New York\, NY 10118,\\icons\\sol.png
Statue of Liberty,Liberty Island\, New York\, NY 10004,\\icons\\sol.png
Se seguito da un valore diverso da se stesso o da uno qualsiasi dei valori dei delimitatori, il carattere di escape viene eliminato durante la lettura del valore.
Il ESCAPECHAR parametro viene applicato indipendentemente dal fatto che FIELDQUOTE sia o non sia abilitato. Non verrà usato per l'escape del carattere virgolette singole. Il carattere di virgolette deve essere impostato come escape con un altro carattere di virgolette. Il carattere di virgolette può essere visualizzato all'interno del valore della colonna solo se il valore è incapsulato con caratteri tra virgolette.
Nell'esempio seguente, la virgola (,) e la barra rovesciata (\) vengono precedute da un carattere di escape e rappresentate come \, e \\:
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ESCAPECHAR = '\'
);
HEADER_ROW = { TRUE | FALSO }
Specifica se un file CSV contiene una riga di intestazione che non deve essere restituita con altre righe di dati. Un esempio di file CSV con un'intestazione è illustrato nell'esempio seguente:
Place,Latitude,Longitude,Address,Area,State,Zipcode
Empire State Building,40.748817,-73.985428,20 W 34th St,New York,NY,10118
Statue of Liberty,40.689247,-74.044502,Liberty Island,New York,NY,10004
Il valore predefinito è FALSE. Supportato in PARSER_VERSION='2.0' Fabric Data Warehouse. Se TRUE, i nomi delle colonne verranno letti dalla prima riga in base all'argomento FIRSTROW . Se TRUE e lo schema viene specificato usando WITH, l'associazione dei nomi di colonna verrà eseguita in base al nome della colonna, non alle posizioni ordinali.
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
HEADER_ROW = TRUE
);
Opzioni di gestione degli errori
ERRORFILE = 'file_name'
Specifica il file usato per raccogliere le righe che contengono errori di formattazione e non possono essere convertite in un set di righe OLE DB. Tali righe vengono copiate nel file degli errori dal file di dati così come sono.
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ERRORFILE = '<error-file-path>'
);
Il file di errori viene creato all'inizio dell'esecuzione del comando. Se il file esiste già, viene generato un errore. Viene inoltre creato un file di controllo con estensione ERROR.txt. Questo file contiene un riferimento a ogni riga nel file degli errori e fornisce informazioni di diagnostica. Dopo aver corretto gli errori, è possibile caricare i dati.
A partire da SQL Server 2017 (14.x), può error_file_path essere in Archiviazione BLOB di Azure.
ERRORFILE_DATA_SOURCE
A partire da SQL Server 2017 (14.x), questo argomento è un'origine dati esterna denominata che punta al percorso del file di errore che conterrà errori rilevati durante l'importazione.
CREATE EXTERNAL DATA SOURCE root
WITH (LOCATION = '<root-error-file-path>')
GO
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ERRORFILE = '<relative-error-file-path>',
ERRORFILE_DATA_SOURCE = 'root'
);
Per altre informazioni, vedere CREATE EXTERNAL DATA SOURCE (Transact-SQL).
MAXERRORS = maximum_errors
Specifica il numero massimo di errori di sintassi o righe non conformi, come definito nel file di formato, che può verificarsi prima OPENROWSET di generare un'eccezione. Finché MAXERRORS non viene raggiunto, OPENROWSET ignora ogni riga non valida, non la carica e conta la riga non valida come un errore.
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
MAXERRORS = 0
);
Il valore predefinito per maximum_errors è 10.
Note
MAX_ERRORS non si applica ai CHECK vincoli o alla conversione di tipi di dati money e Bigint .
Opzioni di elaborazione dati
PRIMA FILA = first_row
Specifica il numero della prima riga da caricare. Il valore predefinito è 1. Questo valore indica la prima riga nel file di dati specificato. I numeri di riga sono determinati dal conteggio dei caratteri di terminazione.
FIRSTROW è basato su 1.
ULTIMA FILA = last_row
Specifica il numero dell'ultima riga da caricare. Il valore predefinito è 0. Questo valore indica l'ultima riga nel file di dati specificato.
ROWS_PER_BATCH = rows_per_batch
Specifica il numero approssimativo di righe di dati nel file di dati. Questo valore è una stima e deve essere un'approssimazione (entro un ordine di grandezza) del numero effettivo di righe. Per impostazione predefinita, ROWS_PER_BATCH viene stimata in base alle caratteristiche dei file (numero di file, dimensioni dei file, dimensioni dei tipi di dati restituiti). Specificare ROWS_PER_BATCH = 0 equivale a omettere ROWS_PER_BATCH. Per esempio:
SELECT TOP 10 *
FROM OPENROWSET(
BULK '<data-file-path>',
ROWS_PER_BATCH = 100000
);
ORDER ( { colonna [ ASC | DESC ] } [ ,... n ] [ UNICO ] )
Hint facoltativo che specifica il modo in cui vengono ordinati i dati nel file di dati. Per impostazione predefinita, per l'operazione bulk si presume che il file di dati non sia ordinato. Le prestazioni possono migliorare se Query Optimizer può sfruttare l'ordine per generare un piano di query più efficiente. L'elenco seguente fornisce esempi per quando si specifica un ordinamento può essere utile:
- Inserimento di righe in una tabella con un indice cluster, in cui i dati del set di righe sono ordinati in base alla chiave dell'indice cluster.
- Unione del set di righe con un'altra tabella, in cui le colonne di ordinamento e di join corrispondono.
- Aggregazione dei dati del set di righe tramite le colonne dell'ordinamento.
- Utilizzo del set di righe come tabella di origine nella
FROMclausola di una query, in cui le colonne di ordinamento e join corrispondono.
UNIQUE
Specifica che il file di dati non contiene voci duplicate.
Se le righe effettive nel file di dati non vengono ordinate in base all'ordine specificato o se l'hint UNIQUE è specificato e le chiavi duplicate sono presenti, viene restituito un errore.
Quando si utilizzano gli alias di colonna, sono necessari ORDER alias di colonna. L'elenco di alias di colonna deve fare riferimento alla tabella derivata a cui si accede dalla BULK clausola . I nomi di colonna specificati nella ORDER clausola fanno riferimento a questo elenco di alias di colonna. Non è possibile specificare tipi valore di grandi dimensioni (varchar(max), nvarchar(max), varbinary(max)e xml) e tipi loB (large object) (text, ntext e image).
Opzioni contenuto
SINGLE_BLOB
Restituisce il contenuto di data_file come set di righe a riga singola a colonna singola di tipo varbinary(max).
Important
È consigliabile importare dati XML solo usando l'opzione SINGLE_BLOB , anziché SINGLE_CLOB e SINGLE_NCLOB, perché supporta solo SINGLE_BLOB tutte le conversioni di codifica di Windows.
SINGLE_CLOB
Leggendo data_file come ASCII, restituisce il contenuto come set di righe a riga singola e a colonna singola di tipo varchar(max), usando le regole di confronto del database corrente.
SINGLE_NCLOB
Leggendo data_file come Unicode, restituisce il contenuto come set di righe a riga singola a colonna singola di tipo nvarchar(max), usando le regole di confronto del database corrente.
SELECT * FROM OPENROWSET(
BULK N'C:\Text1.txt',
SINGLE_NCLOB
) AS Document;
CON Schema
Lo schema WITH specifica le colonne che definiscono il set di risultati della funzione OPENROWSET. Include definizioni di colonna per ogni colonna che verrà restituita di conseguenza e delinea le regole di mapping che associano le colonne di file sottostanti alle colonne del set di risultati.
Nell'esempio seguente:
- La
country_regioncolonna ha il tipo varchar(50) e fa riferimento alla colonna sottostante con lo stesso nome - La
datecolonna fa riferimento a una colonna CSV/Parquet o a una proprietà JSONL con un nome fisico diverso - La
casescolonna fa riferimento alla terza colonna nel file - La
fatal_casescolonna fa riferimento a una proprietà Parquet annidata o a un oggetto secondario JSONL
SELECT *
FROM OPENROWSET(<...>)
WITH (
country_region varchar(50), --> country_region column has varchar(50) type and referencing the underlying column with the same name
[date] DATE '$.updated', --> date is referencing a CSV/Parquet column or JSONL property with a different physical name
cases INT 3, --> cases is referencing third column in the file
fatal_cases INT '$.statistics.deaths' --> fatal_cases is referencing a nested Parquet property or JSONL sub-object
);
<column_name>
Nome della colonna che verrà restituita nel set di righe dei risultati. I dati per questa colonna vengono letti dalla colonna di file sottostante con lo stesso nome, a meno che non venga sottoposto a override da <column_path> o <column_ordinal>. Il nome della colonna deve seguire le regole per gli identificatori dei nomi di colonna.
<column_type>
Tipo T-SQL della colonna nel set di risultati. I valori del file sottostante vengono convertiti in questo tipo quando OPENROWSET restituisce i risultati. Per altre informazioni, vedere Tipi di dati in Fabric Warehouse.
<column_path>
Percorso delimitato da punti (ad esempio $.description.___location.lat) usato per fare riferimento a campi annidati in tipi complessi come Parquet.
<column_ordinal>
Numero che rappresenta l'indice fisico della colonna di cui verrà eseguito il mapping alla colonna nella clausola WITH.
Permissions
OPENROWSET con origini dati esterne, richiede le autorizzazioni seguenti:
-
ADMINISTER DATABASE BULK OPERATIONSoppure ADMINISTER BULK OPERATIONS
L'esempio T-SQL seguente concede ADMINISTER DATABASE BULK OPERATIONS a un'entità di sicurezza.
GRANT ADMINISTER DATABASE BULK OPERATIONS TO [<principal_name>];
Se l'account di archiviazione di destinazione è privato, l'entità deve avere anche il ruolo lettore dati BLOB di archiviazione (o superiore) assegnato a livello di contenitore o account di archiviazione.
Remarks
Una clausola
FROMusata conSELECTpuò chiamareOPENROWSET(BULK...)anziché un nome di tabella. In questo modo, sono disponibili tutte le funzionalità diSELECT.OPENROWSETcon l'opzioneBULKrichiede un nome di correlazione, noto anche come alias o variabile di intervallo, nella clausolaFROM. Errore durante l'aggiunta deiAS <table_alias>risultati nell'errore Msg 491: "È necessario specificare un nome di correlazione per il set di righe bulk nella clausola from".È possibile specificare alias di colonne. Se non viene specificato un elenco di alias di colonna, il file di formato deve avere nomi di colonna. Se si specificano gli alias di colonna, i nomi di colonna nel file di formato vengono sostituiti, ad esempio:
FROM OPENROWSET(BULK...) AS table_aliasFROM OPENROWSET(BULK...) AS table_alias(column_alias,...n)
Un'istruzione
SELECT...FROM OPENROWSET(BULK...)consente di eseguire query direttamente sui dati in un file, senza importare i dati in una tabella.Un'istruzione
SELECT...FROM OPENROWSET(BULK...)può elencare alias di colonna bulk usando un file di formato per specificare i nomi di colonna e anche i tipi di dati.
- L'uso
OPENROWSET(BULK...)di come tabella di origine in un'istruzioneINSERToMERGEimporta i dati da un file di dati in una tabella. Per altre informazioni, vedere Usare BULK INSERT o OPENROWSET(BULK...) per importare dati in SQL Server. - Quando l'opzione
OPENROWSET BULKviene usata con un'istruzioneINSERT, laBULKclausola supporta hint di tabella. Oltre agli hint di tabella normali, ad esempioTABLOCK, la clausolaBULKpuò accettare gli hint di tabella specializzati seguenti:IGNORE_CONSTRAINTS(ignora solo i vincoliCHECKeFOREIGN KEY),IGNORE_TRIGGERS,KEEPDEFAULTSeKEEPIDENTITY. Per ulteriori informazioni, vedere Hint di tabella (Transact-SQL). - Per informazioni su come usare le istruzioni
INSERT...SELECT * FROM OPENROWSET(BULK...), vedere Importazione ed esportazione bulk di dati (SQL Server). Per informazioni sui casi in cui le operazioni di inserimento di righe eseguite durante l'importazione in blocco vengono registrate nel log delle transazioni, vedere Prerequisiti per la registrazione minima nell'importazione in blocco. - Se usato per importare dati con il modello di recupero con registrazione completa,
OPENROWSET (BULK ...)non ottimizza la registrazione.
Note
Quando si usa OPENROWSET, è importante comprendere come SQL Server gestisce la rappresentazione. Per informazioni sulle considerazioni sulla sicurezza, vedere Usare BULK INSERT o OPENROWSET(BULK...) per importare dati in SQL Server.
In Microsoft Fabric Data Warehouse, le funzionalità supportate sono riassunte nella tabella:
| Feature | Supported | Non disponibile |
|---|---|---|
| Formati di file | Parquet, CSV, JSONL | Delta, Azure Cosmos DB, JSON, database relazionali |
| Authentication | Passthrough EntraID/SPN, archiviazione pubblica | SAS/SAK, SPN, Accesso gestito |
| Storage | Azure Blob Storage, Azure Data Lake Storage, OneLake in Microsoft Fabric | |
| Options | Solo URI completo/assoluto in OPENROWSET |
Percorso URI relativo in OPENROWSET, DATA_SOURCE |
| Partitioning | È possibile usare la funzione filepath() in una query. |
Importazione bulk di dati SQLCHAR, SQLNCHAR o SQLBINARY
OPENROWSET(BULK...) presuppone che, se non specificato, la lunghezza massima di SQLCHAR, SQLNCHARo SQLBINARY i dati non superino 8.000 byte. Se i dati importati si trovano in un campo dati LOB contenente qualsiasi oggetto varchar(max), nvarchar(max)o varbinary(max) che supera 8.000 byte, è necessario utilizzare un file di formato XML che definisce la lunghezza massima per il campo dati. Per specificare la lunghezza massima, modificare il file di formato dichiarando l'attributo MAX_LENGTH.
Note
Un file di formato generato automaticamente non specifica la lunghezza o la lunghezza massima per un campo LOB. Tuttavia, è possibile modificare un file di formato e specificare la lunghezza o la lunghezza massima manualmente.
Esportazione o importazione in massa di documenti SQLXML
Per l'esportazione o l'importazione bulk di dati SQLXML, utilizzare uno dei tipi di dati seguenti nel file di formato.
| Tipo di dati | Effect |
|---|---|
SQLCHAR o SQLVARYCHAR |
I dati vengono inviati nella tabella codici client o nella tabella codici implicita dalle regole di confronto. |
SQLNCHAR o SQLNVARCHAR |
I dati vengono inviati in formato Unicode. |
SQLBINARY o SQLVARYBIN |
I dati vengono inviati senza conversione. |
Funzioni per i metadati dei file
A volte, potresti aver bisogno di sapere quale sorgente di file o cartelle corrisponde a una riga specifica nel set di risultati.
Puoi usare funzioni filepath e filename restituire nomi di file e/o il percorso nel set di risultati. Oppure puoi usarli per filtrare i dati in base al nome del file e/o al percorso della cartella. Nelle sezioni successive troverai brevi descrizioni insieme agli esempi.
Funzione nome file
Questa funzione restituisce il nome del file da cui proviene la riga.
Il tipo di dato di ritorno è nvarchar(1024). Per prestazioni ottimali, si convola sempre il risultato della funzione nome file al tipo di dato appropriato. Se usi il tipo di dato del carattere, assicurati che venga usata la lunghezza appropriata.
Il seguente esempio legge i file dati del taxi giallo di New York per gli ultimi tre mesi del 2017 e restituisce il numero di corse per file. La OPENROWSET parte della query specifica quali file 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();
Il seguente esempio mostra come filename() può essere usato nella WHERE clausola per filtrare i file da leggere. Accede all'intera cartella nella OPENROWSET parte della query e filtra i file nella WHERE clausola.
I risultati saranno gli stessi 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',
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 del percorso file
Questa funzione restituisce un percorso completo o una parte del cammino:
- Quando chiamato senza parametro, restituisce il percorso completo del file da cui una riga proviene da lui.
- Quando chiamato con parametro, restituisce una parte del percorso che corrisponde al jolly sulla posizione specificata nel parametro. Ad esempio, il valore del parametro 1 restituirebbe una parte del percorso che corrisponde al primo jolly.
Il tipo di dato di ritorno è nvarchar(1024). Per prestazioni ottimali, invia sempre il risultato della filepath funzione al tipo di dato appropriato. Se usi il tipo di dato del carattere, assicurati che venga usata la lunghezza appropriata.
Il seguente esempio legge i file dati del taxi giallo di New York per gli ultimi tre mesi del 2017. Restituisce il numero di corse per percorso di file. La OPENROWSET parte della query specifica quali file 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',
FIRSTROW = 2
)
WITH (
vendor_id INT
) AS [r]
GROUP BY
r.filepath()
ORDER BY
filepath;
Il seguente esempio mostra come filepath() può essere usato nella WHERE clausola per filtrare i file da leggere.
Puoi usare i jolly nella OPENROWSET parte della query e filtrare i file nella WHERE clausola. I risultati saranno gli stessi 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',
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;
Examples
In questa sezione vengono forniti esempi generali per illustrare come usare OPENROWSET BULK la sintassi.
A. Usare OPENROWSET per ESEGUIRE BULK INSERT i dati dei file in una colonna varbinary(max)
Si applica a: Solo SQL Server.
Nell'esempio seguente viene creata una tabella di piccole dimensioni a scopo dimostrativo e vengono inseriti dati di file da un file denominato Text1.txt nella C: directory radice in una colonna varbinary(max).
CREATE TABLE myTable (
FileName NVARCHAR(60),
FileType NVARCHAR(60),
Document VARBINARY(MAX)
);
GO
INSERT INTO myTable (
FileName,
FileType,
Document
)
SELECT 'Text1.txt' AS FileName,
'.txt' AS FileType,
*
FROM OPENROWSET(
BULK N'C:\Text1.txt',
SINGLE_BLOB
) AS Document;
GO
B. Usare il provider OPENROWSET BULK con un file di formato per recuperare righe da un file di testo
Si applica a: Solo SQL Server.
Nell'esempio seguente viene utilizzato un file di formato per recuperare le righe da un file di testo delimitato da tabulazioni, values.txt contenente i dati seguenti:
1 Data Item 1
2 Data Item 2
3 Data Item 3
Il file di formato, values.fmt, descrive le colonne in values.txt:
9.0
2
1 SQLCHAR 0 10 "\t" 1 ID SQL_Latin1_General_Cp437_BIN
2 SQLCHAR 0 40 "\r\n" 2 Description SQL_Latin1_General_Cp437_BIN
Questa query recupera i dati:
SELECT a.* FROM OPENROWSET(
BULK 'C:\test\values.txt',
FORMATFILE = 'C:\test\values.fmt'
) AS a;
C. Specificare un file di formato e una tabella codici
Si applica a: Solo SQL Server.
Nell'esempio seguente viene illustrato come usare contemporaneamente le opzioni del file di formato e della tabella codici.
INSERT INTO MyTable
SELECT a.* FROM OPENROWSET (
BULK N'D:\data.csv',
FORMATFILE = 'D:\format_no_collation.txt',
CODEPAGE = '65001'
) AS a;
D. Accedere ai dati da un file CSV con un file di formato
Si applica a: SOLO SQL Server 2017 (14.x) e versioni successive.
SELECT * FROM OPENROWSET(
BULK N'D:\XChange\test-csv.csv',
FORMATFILE = N'D:\XChange\test-csv.fmt',
FIRSTROW = 2,
FORMAT = 'CSV'
) AS cars;
E. Accedere ai dati da un file CSV senza un file di formato
Si applica a: Solo SQL Server.
SELECT * FROM OPENROWSET(
BULK 'C:\Program Files\Microsoft SQL Server\MSSQL14\MSSQL\DATA\inv-2017-01-19.csv',
SINGLE_CLOB
) AS DATA;
SELECT *
FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Access Text Driver (*.txt, *.csv)}',
'SELECT * FROM E:\Tlog\TerritoryData.csv'
);
Important
Il driver ODBC deve essere a 64 bit. Aprire la scheda Driver dell'applicazione Connetti a un'origine dati ODBC (Importazione/Esportazione guidata SQL Server) in Windows per verificarlo. È disponibile a 32 bit Microsoft Text Driver (*.txt, *.csv) che non funzionerà con una versione a 64 bit di sqlservr.exe.
F. Accedere ai dati da un file archiviato in Archiviazione BLOB di Azure
Si applica a: SOLO SQL Server 2017 (14.x) e versioni successive.
In SQL Server 2017 (14.x) e versioni successive, nell'esempio seguente viene usata un'origine dati esterna che punta a un contenitore in un account di archiviazione di Azure e a credenziali con ambito database create per una firma di accesso condiviso.
SELECT * FROM OPENROWSET(
BULK 'inv-2017-01-19.csv',
DATA_SOURCE = 'MyAzureInvoices',
SINGLE_CLOB
) AS DataFile;
Per esempi completiOPENROWSET, inclusa la configurazione delle credenziali e dell'origine dati esterna, vedere Esempi di accesso in blocco ai dati in Archiviazione BLOB di Azure.
G. Importare in una tabella da un file archiviato in Archiviazione BLOB di Azure
L'esempio seguente illustra come usare il OPENROWSET comando per caricare dati da un file CSV in un percorso di archiviazione BLOB di Azure in cui è stata creata la chiave di firma di accesso condiviso. La posizione di Archiviazione BLOB di Azure è configurata come origine dati esterna. Questa operazione richiede credenziali con ambito database che usano una firma di accesso condiviso crittografata con una chiave master nel database utente.
-- Optional: a MASTER KEY is not required if a DATABASE SCOPED CREDENTIAL is not required because the blob is configured for public (anonymous) access!
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO
-- Optional: a DATABASE SCOPED CREDENTIAL is not required because the blob is configured for public (anonymous) access!
CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************';
-- Make sure that you don't have a leading ? in the SAS token, and that you
-- have at least read permission on the object that should be loaded srt=o&sp=r,
-- and that expiration period is valid (all dates are in UTC time)
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://****************.blob.core.windows.net/curriculum',
-- CREDENTIAL is not required if a blob is configured for public (anonymous) access!
CREDENTIAL = MyAzureBlobStorageCredential
);
INSERT INTO achievements
WITH (TABLOCK) (
id,
description
)
SELECT * FROM OPENROWSET(
BULK 'csv/achievements.csv',
DATA_SOURCE = 'MyAzureBlobStorage',
FORMAT = 'CSV',
FORMATFILE = 'csv/achievements-c.xml',
FORMATFILE_DATA_SOURCE = 'MyAzureBlobStorage'
) AS DataFile;
H. Usare un'identità gestita per un'origine esterna
Si applica a: Istanza gestita di SQL di Azure e database SQL di Azure
L'esempio seguente crea una credenziale usando un'identità gestita, crea un'origine esterna e quindi carica i dati da un file CSV ospitato nell'origine esterna.
Creare prima di tutto le credenziali e specificare l'archiviazione BLOB come origine esterna:
CREATE DATABASE SCOPED CREDENTIAL sampletestcred
WITH IDENTITY = 'MANAGED IDENTITY';
CREATE EXTERNAL DATA SOURCE SampleSource
WITH (
LOCATION = 'abs://****************.blob.core.windows.net/curriculum',
CREDENTIAL = sampletestcred
);
Caricare quindi i dati dal file CSV ospitato nell'archivio BLOB:
SELECT * FROM OPENROWSET(
BULK 'Test - Copy.csv',
DATA_SOURCE = 'SampleSource',
SINGLE_CLOB
) as test;
I. Usare OPENROWSET per accedere a diversi file Parquet usando l'archiviazione oggetti compatibile con S3
Si applica a: SQL Server 2022 (16.x) e versioni successive.
L'esempio seguente usa l'accesso a diversi file Parquet da un percorso diverso, tutti archiviati nell'archivio oggetti compatibile con S3:
CREATE DATABASE SCOPED CREDENTIAL s3_dsc
WITH IDENTITY = 'S3 Access Key',
SECRET = 'contosoadmin:contosopwd';
GO
CREATE EXTERNAL DATA SOURCE s3_eds
WITH
(
LOCATION = 's3://10.199.40.235:9000/movies',
CREDENTIAL = s3_dsc
);
GO
SELECT * FROM OPENROWSET(
BULK (
'/decades/1950s/*.parquet',
'/decades/1960s/*.parquet',
'/decades/1970s/*.parquet'
),
FORMAT = 'PARQUET',
DATA_SOURCE = 's3_eds'
) AS data;
J. Usare OPENROWSET per accedere a diverse tabelle Delta da Azure Data Lake Gen2
Si applica a: SQL Server 2022 (16.x) e versioni successive.
In questo esempio il contenitore della tabella dati è denominato Contosoe si trova in un account di archiviazione di Azure Data Lake Gen2.
CREATE DATABASE SCOPED CREDENTIAL delta_storage_dsc
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<SAS Token>';
CREATE EXTERNAL DATA SOURCE Delta_ED
WITH (
LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
CREDENTIAL = delta_storage_dsc
);
SELECT *
FROM OPENROWSET(
BULK '/Contoso',
FORMAT = 'DELTA',
DATA_SOURCE = 'Delta_ED'
) AS result;
K. Usare OPENROWSET per eseguire query su un set di dati pubblico-anonimo
L'esempio seguente usa il set di dati aperto disponibile pubblicamente per le corse dei taxi gialli di New York.
Creare prima l'origine dati:
CREATE EXTERNAL DATA SOURCE NYCTaxiExternalDataSource
WITH (LOCATION = 'abs://nyctlc@azureopendatastorage.blob.core.windows.net');
Eseguire una query su tutti i file con .parquet estensione nelle cartelle che corrispondono al modello di nome:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
) AS filerows;
A. Leggere un file parquet da Archiviazione BLOB di Azure
Nell'esempio seguente è possibile vedere come leggere 100 righe da un file Parquet:
SELECT TOP 100 *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'
);
B. Leggere un file CSV personalizzato
Nell'esempio seguente è possibile vedere come leggere le righe da un file CSV con una riga di intestazione e i caratteri di terminazione specificati in modo esplicito che separano righe e campi:
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv',
HEADER_ROW = TRUE,
ROW_TERMINATOR = '\n',
FIELD_TERMINATOR = ',');
C. Specificare lo schema della colonna di file durante la lettura di un file
Nell'esempio seguente è possibile vedere come specificare in modo esplicito lo schema di riga che verrà restituito come risultato della OPENROWSET funzione:
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet')
WITH (
updated DATE
,confirmed INT
,deaths INT
,iso2 VARCHAR(8000)
,iso3 VARCHAR(8000)
);
D. Leggere set di dati partizionati
Nell'esempio seguente è possibile vedere come usare la funzione filepath() per leggere le parti dell'URI dal percorso del file corrispondente:
SELECT TOP 10
files.filepath(2) AS area
, files.*
FROM OPENROWSET(
BULK 'https://<storage account>.blob.core.windows.net/public/NYC_Property_Sales_Dataset/*_*.csv',
HEADER_ROW = TRUE)
AS files
WHERE files.filepath(1) = '2009';
E. Specificare lo schema della colonna di file durante la lettura di un file JSONL
Nell'esempio seguente è possibile vedere come specificare in modo esplicito lo schema di riga che verrà restituito come risultato della OPENROWSET funzione:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.dfs.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.jsonl')
WITH (
country_region varchar(50),
date DATE '$.updated',
cases INT '$.confirmed',
fatal_cases INT '$.deaths'
);
Se un nome di colonna non corrisponde al nome fisico di una colonna nelle proprietà se il file JSONL, è possibile specificare il nome fisico nel percorso JSON dopo la definizione del tipo. È possibile usare più proprietà. Ad esempio, $.___location.latitude per fare riferimento alle proprietà annidate in tipi complessi parquet o oggetti secondari JSON.
Altri esempi
A. Usa OPENROWSET per leggere un file CSV da un Fabric Lakehouse
In questo esempio, OPENROWSET verrà utilizzato per leggere un file CSV disponibile su Fabric Lakehouse, chiamato customer.csv, memorizzato sotto la Files/Contoso/ cartella. Poiché non vengono fornite credenziali Data Source e Database Scoped, il database SQL Fabric si autentica con il contesto Entra ID dell'utente.
SELECT * FROM OPENROWSET
( BULK ' abfss://<workspace id>@<tenant>.dfs.fabric.microsoft.com/<lakehouseid>/Files/Contoso/customer.csv'
, FORMAT = 'CSV'
, FIRST_ROW = 2
) WITH
(
CustomerKey INT,
GeoAreaKey INT,
StartDT DATETIME2,
EndDT DATETIME2,
Continent NVARCHAR(50),
Gender NVARCHAR(10),
Title NVARCHAR(10),
GivenName NVARCHAR(100),
MiddleInitial VARCHAR(2),
Surname NVARCHAR(100),
StreetAddress NVARCHAR(200),
City NVARCHAR(100),
State NVARCHAR(100),
StateFull NVARCHAR(100),
ZipCode NVARCHAR(20),
Country_Region NCHAR(2),
CountryFull NVARCHAR(100),
Birthday DATETIME2,
Age INT,
Occupation NVARCHAR(100),
Company NVARCHAR(100),
Vehicle NVARCHAR(100),
Latitude DECIMAL(10,6),
Longitude DECIMAL(10,6) ) AS DATA
B. Usa OPENROWSET per leggere il file da Fabric Lakehouse e inserirlo in una nuova tabella
In questo esempio, OPENROWSET verrà prima usato per leggere dati da un file parquetstore.parquet denominato. Successivamente, INSERT i dati vengono trasformati in una nuova tabella chiamata Store. Il file parquet si trova in Fabric Lakehouse, poiché non sono forniti DATA_SOURCE e credenziali con ambito di database, il database SQL in Fabric si autentica con il contesto Entra ID dell'utente.
SELECT *
FROM OPENROWSET
(BULK 'abfss://<workspace id>@<tenant>.dfs.fabric.microsoft.com/<lakehouseid>/Files/Contoso/store.parquet'
, FORMAT = 'parquet' )
AS dataset;
-- insert into new table
SELECT *
INTO Store
FROM OPENROWSET
(BULK 'abfss://<workspace id>@<tenant>.dfs.fabric.microsoft.com/<lakehouseid>/Files/Contoso/store.parquet'
, FORMAT = 'parquet' )
AS STORE;
Altri esempi
Per altri esempi che illustrano l'uso OPENROWSET(BULK...)di , vedere gli articoli seguenti:
- Importazione ed Esportazione Massiva di Dati (SQL Server)
- Esempi di importazione ed esportazione in blocco di documenti XML (SQL Server)
- Mantenere i valori Identity durante l'importazione in blocco dei dati (SQL Server)
- Mantenere i valori Null o i valori predefiniti durante un'importazione in blocco (SQL Server)
- Usare un file di formato per l'importazione in blocco dei dati (SQL Server)
- Usare il formato carattere per importare o esportare dati (SQL Server)
- Usare un file di formato per ignorare una colonna di una tabella (SQL Server)
- Usare un file di formato per escludere un campo dati (SQL Server)
- Usare un file di formato per eseguire il mapping tra le colonne di tabella e i campi del file di dati (SQL Server)
- Eseguire query sulle origini dati usando OPENROWSET in Istanza gestita di SQL di Azure
- Specificare i caratteri di terminazione dei campi e delle righe (SQL Server)