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 del servizio, il file potrebbe essere memorizzato in Archiviazione BLOB di Azure, Azure Data Lake storage, disco on-local, condivisioni di rete e altro ancora. Puoi leggere vari formati di file come testo/CSV, Parquet o linee JSON.
Puoi fare riferimento alla OPENROWSET funzione nella FROM clausola di una query come se fosse un nome di tabella. Usalo per leggere i dati in un'istruzione SELECT , o per aggiornare i dati target nelle UPDATEistruzioni , INSERT, DELETE, MERGE, CTAS, o CETAS istruzioni.
- Da usare
OPENROWSET(BULK)per leggere dati da file di dati esterni. - Usa
OPENROWSETsenzaBULKper leggere da un altro motore di database. Per altre informazioni, vedere OPENROWSET (Transact-SQL).
Tip
Questo articolo e la OPENROWSET(BULK) sintassi differiscono tra le diverse piattaforme del SQL motore di database.
Per Microsoft Fabric Data Warehouse sintassi, seleziona Fabric Data Warehouse nell'elenco a tendina delle versioni.
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, database SQL di Azure, database SQL in Fabric e Istanza gestita di SQL di Azure:
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
Alcune OPENROWSET opzioni sono specifiche del formato, mentre altre sono universali. Ad esempio, i delimitatori di riga e di campo sono significativi solo per il testo delimitato (CSV/TSV), mentre le opzioni come DATA_SOURCE e MAXERRORS si applicano a tutti i formati. La tabella seguente riassume quali opzioni sono supportate per i formati più comuni.
| Options | CSV (1.0) | CSV(2.0) | PARQUET | JSONL |
|---|---|---|---|---|
| DATA_SOURCE, ROWS_PER_BATCH, MAXERRORS | Supported | Supported | Supported | Supported |
| ERRORFILE, ERRORFILE_DATA_SOURCE, FORMATFILE, FORMATFILE_DATA_SOURCE | Supported | Supported | Non supportato | Supported |
| CODEPAGE, DATAFILETYPE | Supported | Supported | Non supportato | Supported |
| PRIMA FILA | Supported | Supported | Non supportato | Supported |
| ROWTERMINATOR, FIELDTERMINATOR, FIELDQUOTE, ESCAPE CHAR | Supported | Supported | Non supportato | Non supportato |
| VERSIONE_PARSER | Supported | Supported | Non supportato | Non supportato |
| ULTIMA FILA | Supported | Non supportato | Non supportato | Non supportato |
| HEADER_ROW | Non supportato | Supported | Non supportato | Non supportato |
| SINGLE_BLOB, SINGLE_CLOB, SINGLE_NCLOB | Non supportato | Non supportato | Non supportato | Non supportato |
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 sui permessi richiesti dall'opzione BULK , consulta la sezione Permessi 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
Il percorso o l'URI dei file dati che OPENROWSET legge e restituisce 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 pattern URI disponibili in Microsoft Fabric Data Warehouse, seleziona Fabric Data Warehouse nell'elenco a tendina delle versioni.
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
Quando accedi ai dati memorizzati in Azure Data Lake Storage Gen2, usa i abfss://<container>@<storage>.dfs.core.windows.net/<file path> formati URI di or https://<storage>.dfs.core.windows.net/<container>/<file path> invece dell'endpoint blob. Entrambi forniscono pieno supporto per il namespace gerarchico (HNS), che consente la semantica delle directory, operazioni ottimizzate nei file e liste di controllo accessi (ACL) in stile POSIX.
Al contrario, l'endpoint blob non espone le caratteristiche gerarchiche dello spazio dei nomi e tratta tutti i percorsi come chiavi oggetto piatte. Ciò può portare a prestazioni ridotte, comportamento limitato delle directory e incompatibilità con motori che prevedono la semantica del file system Azure Data Lake Storage Gen2.
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 per corrispondere a qualsiasi sequenza di caratteri, quindi OPENROWSET può fare patternmatching con l'URI. Inoltre, l'URI può terminare con /** per abilitare il percorrere ricorsivamente 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'
);
La tabella seguente mostra i tipi di memoria a cui l'URI può fare riferimento:
| 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 |
| Pool SQL serverless in Azure Synapse Analytics | NO | Yes | Yes | NO | NO |
| Microsoft Fabric Warehouse in Microsoft Fabric e endpoint di analisi SQL in Microsoft Fabric | 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 usare OPENROWSET(BULK) la lettura dei dati direttamente dai file memorizzati nel OneLake in Microsoft Fabric, in particolare dalla cartella Files di un Fabric Lakehouse. Questa capacità elimina la necessità di account staging esterni (come ADLS Gen2 o gestione rete virtuale di Azure) e consente l'ingestione SaaS-native governata dall'area di lavoro utilizzando i permessi Fabric. 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 i limiti che si applicano sia COPY INTO a che OPENROWSET(BULK)a .
DATA_SOURCE
DATA_SOURCE definisce il percorso radice del percorso del file di dati. Ti permette di usare i percorsi relativi nel BULK percorso. Crea la fonte dati con CREATE EXTERNAL DATA SOURCE.
Oltre alla posizione radice, può definire una credenziale personalizzata per accedere ai file in quella posizione.
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 una specifica pagina del codice:
| 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. |
| Integer | 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) dovrebbe leggere il contenuto di file a byte singolo (ASCII, UTF8) o multibyte (UTF16). I valori validi sono char e widechar:
DATAFILETYPE Valore |
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 |
| Pool SQL serverless in Azure Synapse Analytics | Yes | Yes | Yes | NO |
| Microsoft Fabric Warehouse in Microsoft Fabric e endpoint di analisi SQL in Microsoft Fabric | 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 linea deve essere usato come separatore tra i documenti JSON e non può essere posizionato nel mezzo di un documento JSON.
Non è necessario specificare l'opzione FORMAT 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 nel seguente esempio:
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'
)
Serve un file di formato per definire i tipi di colonne nel set di risultati. L'unica eccezione è quando specifichi SINGLE_CLOB, SINGLE_BLOB, o SINGLE_NCLOB; in questo caso, non hai bisogno di un file format.
Per maggiori informazioni sui file di format, vedi Usa un file di formattazione per importare dati in massa (SQL Server).
A partire da SQL Server 2017 (14.x), possono format_file_path essere 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. Utilizzando questa fonte di dati, puoi utilizzare i 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'
);
Crea la fonte dati del file di formattazione con CREATE EXTERNAL DATA SOURCE. Oltre alla posizione radice, può definire una credenziale personalizzata per accedere ai file in quella posizione.
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:
CITAZIONE SUL CAMPO
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 = '"'
);
VERSIONE_PARSER
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 2.0 del parser CSV è l'implementazione predefinita ottimizzata per le prestazioni, ma non supporta tutte le opzioni e codifiche legacy disponibili nella versione 1.0. Quando si utilizza OPENROWSET, Fabric Data Warehouse torna automaticamente alla versione 1.0 se si utilizzano le opzioni supportate solo in quella versione, anche quando la versione non è esplicitamente specificata. In alcuni casi, potrebbe essere necessario specificare esplicitamente la versione 1.0 per risolvere errori causati da funzionalità non supportate segnalate dalla versione 2.0 del parser.
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.
- DATEFORMAT SET L'opzione 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
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
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
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. Inoltre, viene creato un file di controllo che contiene l'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
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
Specifica il numero della prima riga da caricare. Il valore predefinito è 1. Questo valore indica la prima riga nel file dati specificato. I numeri di riga sono determinati dal conteggio dei caratteri di terminazione.
FIRSTROW è basato su 1.
ULTIMA FILA
Specifica il numero dell'ultima riga da caricare. Il valore predefinito è 0. Questo valore indica l'ultima riga nel file dati specificato.
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 dati non sono ordinate secondo l'ordine specificato, o se specifichi l'hint UNIQUE e sono presenti chiavi duplicate, viene restituito un errore.
Gli alias a colonna sono richiesti quando si usa ORDER. La lista degli alias della colonna deve fare riferimento alla tabella derivata a cui la BULK clausola accede. I nomi delle colonne che specifichi nella ORDER clausola si riferiscono a questa lista di alias. Non puoi specificare colonne di tipo di grande valore (varchar(max),nvarchar(max), varbinary(max) e xml) e di tipo di oggetto grande (LOB) (testo, ntext e immagine).
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
Importa dati XML solo usando l'opzioneSINGLE_BLOB, invece che SINGLE_CLOB e SINGLE_NCLOB, perché supporta solo SINGLE_BLOB tutte le conversioni di codifica di Windows.
SINGLE_CLOB
Si legge data_file come ASCII e restituisce il contenuto come un set di righe singole e colonna singola di tipo varchar(max), utilizzando la collazione del database corrente.
SINGLE_NCLOB
Legge data_file come Unicode e restituisce il contenuto come un set di righe singole e colonna singola di tipo nvarchar(max), utilizzando la collation 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 colonne per ogni colonna che OPENROWSET restituisce e delinea le regole di mappatura che legano le colonne del file sottostante 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 o Parquet o a una proprietà JSONL con un nome fisico diverso. - La
casescolonna fa riferimento alla terza colonna del file. - La
fatal_casescolonna fa riferimento a una proprietà Parquet annidata o a un sotto-oggetto 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>
Il nome della colonna che OPENROWSET restituisce nel set di righe del risultato.
OPENROWSET legge i dati di questa colonna dalla colonna del file sottostante con lo stesso nome, a meno che non si sovrascriva usando <column_path> o <column_ordinal>. Il nome della colonna deve seguire le regole per gli identificatori del nome delle colonne.
<column_type>
Tipo T-SQL della colonna nel set di risultati.
OPENROWSET converte i valori dal file sottostante a questo tipo quando 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>
Un numero che rappresenta l'indice fisico della colonna che si mappa alla colonna della WITH clausola.
Permissions
Per utilizzare OPENROWSET con fonti di dati esterne, sono necessari i seguenti permessi:
-
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 target è privato, devi anche assegnare l'appartenenza al ruolo di Storage Blob Data Reader (o superiore) al principale a livello di container o account storage.
Remarks
Una
FROMclausola che usi conSELECTpuò chiamareOPENROWSET(BULK...)invece di un nome di tabella, con pienaSELECTfunzionalità.OPENROWSETcon l'opzioneBULKrichiede un nome di correlazione, noto anche come alias o variabile di intervallo, nella clausolaFROM. Se non aggiungi ilAS <table_alias>, ricevi il messaggio di errore 491: "Un nome di correlazione deve essere specificato per il set di righe in blocco nella clausola from."Puoi specificare gli alias delle colonne. Se non specifichi una lista di alias di colonne, il file di formato deve avere nomi di colonne. La specificazione degli alias delle colonne sovrascrive i nomi delle colonne nel file di format. Per 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 può elencare gli alias a colonne bloccate utilizzando un file di formato per specificare nomi di colonne e tipi di
SELECT...FROM OPENROWSET(BULK...)dati.
- Usando
OPENROWSET(BULK...)come tabella sorgente in un'istruzioneINSERToMERGE, importi in massa dati da un file dati in una tabella. Per altre informazioni, vedere Usare BULK INSERT o OPENROWSET(BULK...) per importare dati in SQL Server. - Quando usi l'opzione
OPENROWSET BULKcon un'istruzioneINSERT, laBULKclausola supporta suggerimenti per la 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 su quando le operazioni di inserimento righe effettuate da un'importazione in blocco vengono registrate nel registro delle transazioni, vedi Prerequisiti per un logging minimo nell'importazione in massa. - Quando si usano
OPENROWSET (BULK ...)per importare dati con il modello di recupero completo, non si ottimizza la registrazione.
Note
Quando si usa OPENROWSET, è importante comprendere come SQL Server gestisce la rappresentazione. Per informazioni sulle considerazioni di sicurezza, vedi Usa BULK INSERT o OPENROWSET(BULK...) per importare dati su SQL Server.
In Microsoft Fabric Data Warehouse, la seguente tabella riassume le funzionalità supportate:
| Feature | Supported | Non disponibile |
|---|---|---|
| Formati di file | Parquet, CSV, JSONL | Delta, Azure Cosmos DB, JSON, database relazionali |
| Authentication | Entra ID/SPN passthrough, archiviazione pubblica | SAS/SAK, SPN, Accesso gestito |
| Storage | Archiviazione BLOB di Azure, 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 specifichi altrimenti, la lunghezza massima di SQLCHAR, SQLNCHAR, o SQLBINARY i dati non superi gli 8.000 byte. Se importi dati in un campo dati LOB che contiene oggetti varchar(max), nvarchar(max) o varbinary(max) che superano gli 8.000 byte, devi usare un file in formato XML che definisce la lunghezza massima del campo dati. Per specificare la lunghezza massima, modifica il file di formato e dichiara 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 i nomi dei file e il percorso nel set dei risultati. Oppure puoi usarli per filtrare i dati in base al nome del file e al percorso della cartella. Nelle sezioni successive trovi brevi descrizioni insieme a esempi.
Funzione nome file
Questa funzione restituisce il nome del file per la riga.
Il tipo di dato di ritorno è nvarchar(1024). Per prestazioni ottimali, si convola sempre il risultato della funzione nome file su un tipo di dato appropriato. Se usi un tipo di dato di carattere, assicurati di usare una 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 leggere.
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 utilizzare filename() la 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 tuoi risultati sono 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 di un cammino:
- Quando chiami la
filepathfunzione senza un parametro, restituisce il percorso completo del file da cui proviene una riga. - Quando chiami la
filepathfunzione con un parametro, essa restituisce la parte del percorso che corrisponde al jolly nella posizione specificata nel parametro. Ad esempio, un valore di parametro pari a 1 restituisce la parte del percorso che corrisponde al primo jolly.
Il tipo di dato di ritorno della filepath funzione è nvarchar(1024). Per prestazioni ottimali, si convola sempre il risultato della filepath funzione al tipo di dato appropriato. Se usi un tipo di dato di carattere, assicurati di usare una 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 leggere.
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 utilizzare filepath() la WHERE clausola per filtrare i file da leggere.
Puoi usare le comodità 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. Usa OPENROWSET per BULK INSERT archiviare i dati 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. Esiste un 32-bit Microsoft Text Driver (*.txt, *.csv) che non funziona 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 mostra come usare il OPENROWSET comando per caricare dati da un file CSV in una posizione di archiviazione Azure Blob dove hai creato la chiave SAS. Configuri la posizione di archiviazione Azure Blob come sorgente dati esterna. Questo processo richiede una credenziale con ambito di database che utilizza una firma di accesso condiviso (SAS) criptata tramite una chiave principale 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
Il seguente esempio crea una credenziale utilizzando un'identità gestita, crea una sorgente esterna e poi carica i dati da un CSV ospitato sulla sorgente 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.
Il seguente esempio accede a diversi file Parquet da diverse località, tutti memorizzati su oggetti compatibili 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
Nel seguente esempio puoi vedere come leggere righe da un file CSV con una riga di header e caratteri terminator esplicitamente specificati 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
Nel seguente esempio, specifichi lo schema della riga che la OPENROWSET funzione restituisce:
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
Nel seguente esempio, usi la filepath() funzione per leggere le parti dell'URI dal percorso 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, si legge OPENROWSET un file CSV su una Fabric Lakehouse. Il file è nominato customer.csv e memorizzato nella Files/Contoso/ cartella. Poiché non fornisci una fonte di dati o credenziali con scopo di database, il database Fabric SQL utilizza il contesto Entra ID per autenticarsi.
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 un file da un Fabric Lakehouse e inserire dati in una nuova tabella
In questo esempio, si leggono OPENROWSET dati da un file Parquet chiamato store.parquet. Poi, si aggiungono INSERT i dati in una nuova tabella chiamata Store. Il file Parquet si trova in una casa Fabric Lakehouse. Poiché non fornisci una fonte di dati o credenziali con scopo di database, il database SQL in Fabric utilizza il contesto Entra ID per autenticarsi.
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)