Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Een OPENROWSET
T-SQL-opdracht bevat alle verbindingsgegevens die vereist zijn voor toegang tot externe gegevens vanuit een externe gegevensbron.
OPENROWSET
biedt ook ondersteuning voor bulkbewerkingen via een ingebouwde BULK
provider waarmee gegevens uit een bestand kunnen worden gelezen en geretourneerd als een rijenset.
OPENROWSET BULK
is bedoeld voor het lezen van externe gegevensbestanden, OPENROWSET
zonder bulksgewijs te lezen vanuit een andere database-engine.
De functie OPENROWSET
kan worden verwezen in de FROM
component van een query alsof deze een tabelnaam is. Er OPENROWSET
kan ook naar de functie worden verwezen als het doel van een INSERT
, UPDATE
of DELETE
instructie, afhankelijk van de mogelijkheden van de gegevensprovider. Hoewel de query meerdere resultatensets kan retourneren, retourneert OPENROWSET
slechts de eerste.
OPENROWSET
zonder dat de BULK
operator alleen beschikbaar is op SQL Server, raadpleegt u OPENROWSET (Transact-SQL).
Details en koppelingen naar vergelijkbare voorbeelden op andere platforms:
- Voor de syntaxis van Microsoft Fabric Data Warehouse selecteert u Fabric in de vervolgkeuzelijst versie.
- Zie
OPENROWSET
voor meer informatie over azure SQL Database. - Zie
OPENROWSET
voor meer informatie over azure SQL Managed Instance. - Zie OpenROWSET gebruiken met behulp van een serverloze SQL-pool in Azure Synapse Analyticsvoor informatie en voorbeelden van serverloze SQL-pools in Azure Synapse Analytics.
- Toegewezen SQL-pools in Azure Synapse bieden geen ondersteuning voor de
OPENROWSET
-functie.
Transact-SQL syntaxis-conventies
Syntax
OPENROWSET(BULK)
syntaxis wordt gebruikt om externe bestanden te lezen:
OPENROWSET( BULK 'data_file' ,
{ FORMATFILE = 'format_file_path' [ <bulk_options> ]
| SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB }
)
<bulk_options> ::=
[ , DATA_SOURCE = 'data_source_name' ]
-- bulk_options related to input file format
[ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]
[ , FORMAT = { 'CSV' | 'PARQUET' | 'DELTA' } ]
[ , FIELDQUOTE = 'quote_character' ]
[ , FORMATFILE = 'format_file_path' ]
[ , FORMATFILE_DATA_SOURCE = 'data_source_name' ]
[ , FIRSTROW = first_row ]
[ , LASTROW = last_row ]
[ , MAXERRORS = maximum_errors ]
[ , ERRORFILE = 'file_name' ]
[ , ERRORFILE_DATA_SOURCE = 'data_source_name' ]
[ , ROWS_PER_BATCH = rows_per_batch ]
[ , ORDER ( { column [ ASC | DESC ] } [ , ...n ] ) [ UNIQUE ] ]
Arguments
BULK arguments
Gebruikt de BULK
rijensetprovider voor OPENROWSET
om gegevens uit een bestand te lezen. In SQL Server kunt OPENROWSET
lezen uit een gegevensbestand zonder de gegevens in een doeltabel te laden. Hiermee kunt u OPENROWSET
gebruiken met een eenvoudige SELECT
instructie.
Met de argumenten van de optie BULK
kunt u bepalen waar gegevens moeten worden gestart en beëindigd, hoe fouten moeten worden verwerkt en hoe gegevens worden geïnterpreteerd. U kunt bijvoorbeeld opgeven dat het gegevensbestand wordt gelezen als een rij met één rij, een rijset met één kolom van het type varbinary, varchar of nvarchar. Het standaardgedrag wordt beschreven in de argumentbeschrijvingen die volgen.
Zie de sectie BULK
verderop in dit artikel voor meer informatie over het gebruik van de optie. Zie de sectie BULK
verderop in dit artikel voor meer informatie over de machtigingen die voor de optie zijn vereist.
Note
Wanneer u gegevens importeert met het volledige herstelmodel, optimaliseert OPENROWSET (BULK ...)
logboekregistratie niet.
Zie Gegevens voorbereiden voor bulkexport of importvoor informatie over het voorbereiden van gegevens voor bulkimport.
BULK 'data_file'
Het volledige pad van het gegevensbestand waarvan de gegevens moeten worden gekopieerd naar de doeltabel.
SELECT * FROM OPENROWSET(
BULK 'C:\DATA\inv-2017-01-19.csv',
SINGLE_CLOB
) AS DATA;
Vanaf SQL Server 2017 (14.x) kan de data_file zich in Azure Blob Storage bevinden. Zie Voorbeelden van bulktoegang tot gegevens in Azure Blob Storagevoor voorbeelden.
Opties voor BULK-foutafhandeling
ERRORFILE = 'file_name'
Hiermee geeft u het bestand op dat wordt gebruikt voor het verzamelen van rijen met opmaakfouten en die niet kunnen worden geconverteerd naar een OLE DB-rijenset. Deze rijen worden naar dit foutbestand gekopieerd uit het gegevensbestand 'zoals is'.
Het foutbestand wordt gemaakt aan het begin van de opdrachtuitvoering. Er treedt een fout op als het bestand al bestaat. Daarnaast wordt een besturingselementbestand met de extensie .ERROR.txt gemaakt. Dit bestand verwijst naar elke rij in het foutenbestand en biedt foutdiagnose. Nadat de fouten zijn gecorrigeerd, kunnen de gegevens worden geladen.
Vanaf SQL Server 2017 (14.x) kan de error_file_path
zich in Azure Blob Storage bevinden.
ERRORFILE_DATA_SOURCE_NAME
Vanaf SQL Server 2017 (14.x) is dit argument een benoemde externe gegevensbron die verwijst naar de Azure Blob-opslaglocatie van het foutenbestand dat fouten bevat die zijn gevonden tijdens het importeren. De externe gegevensbron moet worden gemaakt met behulp van de TYPE = BLOB_STORAGE
. Zie CREATE EXTERNAL DATA SOURCE (Transact-SQL)voor meer informatie.
MAXERRORS = maximum_errors
Hiermee geeft u het maximum aantal syntaxisfouten of niet-conforme rijen op, zoals gedefinieerd in het indelingsbestand, dat kan optreden voordat OPENROWSET
een uitzondering genereert. Totdat MAXERRORS
is bereikt, negeert OPENROWSET
elke ongeldige rij, laadt deze niet en telt de slechte rij als één fout.
De standaardwaarde voor maximum_errors is 10.
Note
MAX_ERRORS
geldt niet voor CHECK
beperkingen of voor het converteren van geld - en bigint-gegevenstypen .
Opties voor BULKgegevensverwerking
DATA_SOURCE
DATA_SOURCE
is de externe locatie die is gemaakt met CREATE EXTERNAL DATA SOURCE.
FIRSTROW = first_row
Hiermee geeft u het nummer op van de eerste rij die moet worden geladen. De standaardwaarde is 1. Dit geeft de eerste rij in het opgegeven gegevensbestand aan. De rijnummers worden bepaald door de rijeindtekens te tellen.
FIRSTROW
is gebaseerd op 1.
LASTROW = last_row
Hiermee geeft u het nummer op van de laatste rij die moet worden geladen. De standaardwaarde is 0. Dit geeft de laatste rij in het opgegeven gegevensbestand aan.
ROWS_PER_BATCH = rows_per_batch
Hiermee geeft u het geschatte aantal rijen met gegevens in het gegevensbestand. Deze waarde moet dezelfde volgorde hebben als het werkelijke aantal rijen.
OPENROWSET
importeert altijd een gegevensbestand als één batch. Als u echter rows_per_batch met een waarde > 0 opgeeft, gebruikt de queryprocessor de waarde van rows_per_batch als hint voor het toewijzen van resources in het queryplan.
Standaard is ROWS_PER_BATCH
onbekend. Het opgeven van ROWS_PER_BATCH = 0
is hetzelfde als het weglaten van ROWS_PER_BATCH
.
ORDER ( { kolom [ ASC | DESC ] } [ ,... n ] [ UNIEK ] )
Een optionele hint die aangeeft hoe de gegevens in het gegevensbestand worden gesorteerd. Standaard wordt bij de bulkbewerking ervan uitgegaan dat het gegevensbestand niet is gerangschikt. De prestaties kunnen worden verbeterd als de queryoptimalisatie de volgorde kan benutten om een efficiënter queryplan te genereren. De volgende lijst bevat voorbeelden voor wanneer u een sorteerbewerking opgeeft, kan nuttig zijn:
- Rijen invoegen in een tabel met een geclusterde index, waarbij de rijensetgegevens worden gesorteerd op de geclusterde indexsleutel.
- De rijenset samenvoegen met een andere tabel, waarbij de kolommen sorteren en samenvoegen overeenkomen.
- De rijensetgegevens samenvoegen op basis van de sorteerkolommen.
- Gebruik de rijenset als een brontabel in de
FROM
component van een query, waarbij de kolommen sorteren en samenvoegen overeenkomen.
UNIQUE
Hiermee geeft u op dat het gegevensbestand geen dubbele vermeldingen bevat.
Als de werkelijke rijen in het gegevensbestand niet worden gesorteerd op basis van de opgegeven volgorde of als de UNIQUE
hint is opgegeven en er dubbele sleutels aanwezig zijn, wordt een fout geretourneerd.
Kolomaliassen zijn vereist wanneer ORDER
wordt gebruikt. De lijst met kolomaliassen moet verwijzen naar de afgeleide tabel die wordt geopend door de BULK
-component. De kolomnamen die zijn opgegeven in de ORDER
component verwijzen naar deze kolomaliaslijst. Grote waardetypen (varchar(max), nvarchar(max), varbinary(max), en XML- en LOB-typen (large object) (tekst, ntext en afbeelding) kunnen niet worden opgegeven.
SINGLE_BLOB
Retourneert de inhoud van data_file als een rijset met één rij van het type varbinary(max).
Important
U wordt aangeraden alleen XML-gegevens te importeren met behulp van de optie SINGLE_BLOB
, in plaats van SINGLE_CLOB
en SINGLE_NCLOB
, omdat alleen SINGLE_BLOB
alle Windows-coderingsconversies ondersteunt.
SINGLE_CLOB
Als u data_file als ASCII leest, wordt de inhoud geretourneerd als een rijset met één rij, één kolom van het type varchar(max), met behulp van de sortering van de huidige database.
SINGLE_NCLOB
Als u data_file als Unicode leest, wordt de inhoud geretourneerd als een rijset met één rij met één kolom van het type nvarchar(max), met behulp van de sortering van de huidige database.
SELECT * FROM OPENROWSET(
BULK N'C:\Text1.txt',
SINGLE_NCLOB
) AS Document;
Opties voor BULK-invoerbestandsindeling
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' }
Hiermee geeft u de codepagina van de gegevens in het gegevensbestand.
CODEPAGE
is alleen relevant als de gegevens teken-, varchar- of tekstkolommen met tekenwaarden meer dan 127 of minder dan 32 bevatten.
Important
CODEPAGE
is geen ondersteunde optie in Linux.
Note
U wordt aangeraden een sorteringsnaam op te geven voor elke kolom in een indelingsbestand, behalve wanneer u wilt dat de optie 65001 prioriteit heeft ten opzichte van de specificatie van de sortering/codepagina.
CODEPAGE value | Description |
---|---|
ACP |
Converteert kolommen met teken-, varchar- of tekstgegevenstype van de ANSI-/Microsoft Windows-codepagina (ISO 1252) naar de SQL Server-codepagina. |
OEM (standaard) |
Converteert kolommen met teken-, varchar- of tekstgegevenstype van de oem-codepagina van het systeem naar de SQL Server-codepagina. |
RAW |
Er wordt geen conversie uitgevoerd van de ene codepagina naar de andere. Dit is de snelste optie. |
code_page |
Geeft de broncodepagina aan waarop de tekengegevens in het gegevensbestand zijn gecodeerd; bijvoorbeeld 850. Belangrijk Versies vóór SQL Server 2016 (13.x) bieden geen ondersteuning voor codepagina 65001 (UTF-8-codering). |
FORMAT = { 'CSV' | PARQUET | 'DELTA' }
Vanaf SQL Server 2017 (14.x) geeft dit argument een bestand met door komma's gescheiden waarden op dat voldoet aan de RFC 4180-standaard .
Vanaf SQL Server 2022 (16.x) worden zowel Parquet- als Delta-indelingen ondersteund.
SELECT *
FROM OPENROWSET(BULK N'D:\XChange\test-csv.csv',
FORMATFILE = N'D:\XChange\test-csv.fmt',
FIRSTROW=2,
FORMAT='CSV') AS cars;
FORMATFILE = 'format_file_path'
Hiermee specificeert u het volledige pad van een indelingsbestand. SQL Server ondersteunt twee typen indelingsbestanden: XML en niet-XML.
Een indelingsbestand is vereist voor het definiëren van kolomtypen in de resultatenset. De enige uitzondering is wanneer SINGLE_CLOB
, SINGLE_BLOB
of SINGLE_NCLOB
is opgegeven; In dat geval is het indelingsbestand niet vereist.
Zie Een indelingsbestand gebruiken om gegevens (SQL Server) bulksgewijs te importerenvoor meer informatie over het opmaken van bestanden.
Vanaf SQL Server 2017 (14.x) kan de format_file_path zich in Azure Blob Storage bevinden. Zie Voorbeelden van bulktoegang tot gegevens in Azure Blob Storagevoor voorbeelden.
FIELDQUOTE = 'field_quote'
Vanaf SQL Server 2017 (14.x) geeft dit argument een teken op dat wordt gebruikt als het aanhalingsteken in het CSV-bestand. Als dit niet is opgegeven, wordt het aanhalingsteken ("
) gebruikt als het aanhalingsteken zoals gedefinieerd in de RFC 4180-standaard . Er kan slechts één teken worden opgegeven als de waarde voor deze optie.
Remarks
OPENROWSET
kan alleen worden gebruikt voor toegang tot externe gegevens uit OLE DB-gegevensbronnen wanneer de registeroptie DisallowAdhocAccess expliciet is ingesteld 0
op voor de opgegeven provider en de geavanceerde configuratieoptie Ad Hoc gedistribueerde query's is ingeschakeld. Wanneer deze opties niet zijn ingesteld, is het standaardgedrag niet toegestaan voor ad-hoctoegang.
Wanneer u externe OLE DB-gegevensbronnen opent, wordt de aanmeldings-id van vertrouwde verbindingen niet automatisch gedelegeerd vanaf de server waarop de client is verbonden met de server waarop een query wordt uitgevoerd. Verificatiedelegering moet worden geconfigureerd.
Catalogus- en schemanamen zijn vereist als de gegevensprovider ondersteuning biedt voor meerdere catalogi en schema's in de opgegeven gegevensbron. Waarden voor catalog
en schema
kunnen worden weggelaten wanneer de gegevensprovider deze niet ondersteunt. Als de provider alleen schemanamen ondersteunt, moet een tweedelige naam van het formulier schema.object
worden opgegeven. Als de provider alleen catalogusnamen ondersteunt, moet er een driedelige naam van het formulier catalog.schema.object
worden opgegeven. Zie Transact-SQL syntaxisconventiesvoor meer informatie.
Driedelige namen moeten worden opgegeven voor passthrough-query's die gebruikmaken van de OLE DB-provider van de SQL Server-client.
OPENROWSET
accepteert geen variabelen voor de argumenten.
Elke aanroep van OPENDATASOURCE
, OPENQUERY
of OPENROWSET
in de FROM
component wordt afzonderlijk en onafhankelijk van elke aanroep naar deze functies die worden gebruikt als doel van de update, zelfs als identieke argumenten aan de twee aanroepen worden verstrekt. Met name filter- of joinvoorwaarden die zijn toegepast op het resultaat van een van deze aanroepen, hebben geen invloed op de resultaten van de andere.
OPENROWSET gebruiken met de optie BULK
De volgende Transact-SQL verbeteringen ondersteunen de functie OPENROWSET(BULK...)
:
Een
FROM
-component die wordt gebruikt metSELECT
kanOPENROWSET(BULK...)
aanroepen in plaats van een tabelnaam, met volledigeSELECT
functionaliteit.OPENROWSET
met de optieBULK
vereist een correlatienaam, ook wel een bereikvariabele of alias genoemd, in deFROM
-component. Kolomaliassen kunnen worden opgegeven. Als er geen kolomaliaslijst is opgegeven, moet het indelingsbestand kolomnamen hebben. Als u kolomaliassen opgeeft, worden de kolomnamen in het indelingsbestand overschreven, zoals:FROM OPENROWSET(BULK...) AS table_alias
FROM OPENROWSET(BULK...) AS table_alias(column_alias,...n)
Important
Het toevoegen van de
AS <table_alias>
resulteert in de fout: Msg 491, Niveau 16, State 1, Regel 20 Een correlatienaam moet worden opgegeven voor de bulkrijset in de from-component.Met een
SELECT...FROM OPENROWSET(BULK...)
-instructie worden de gegevens in een bestand rechtstreeks opgevraagd zonder de gegevens in een tabel te importeren.SELECT...FROM OPENROWSET(BULK...)
instructies kunnen ook bulkkolomaliassen vermelden met behulp van een indelingsbestand om kolomnamen en ook gegevenstypen op te geven.Als u
OPENROWSET(BULK...)
als brontabel in eenINSERT
- ofMERGE
-instructie gebruikt, importeert u bulksgewijs gegevens uit een gegevensbestand in een SQL Server-tabel. Zie BULK INSERT of OPENROWSET(BULK...) gebruiken om gegevens te importeren in SQL Servervoor meer informatie.Wanneer de optie
OPENROWSET BULK
wordt gebruikt met eenINSERT
-instructie, ondersteunt deBULK
-component tabelhints. Naast de normale tabelhints, zoalsTABLOCK
, kan deBULK
-component de volgende gespecialiseerde tabelhints accepteren:IGNORE_CONSTRAINTS
(negeert alleen de beperkingen voorCHECK
enFOREIGN KEY
),IGNORE_TRIGGERS
,KEEPDEFAULTS
enKEEPIDENTITY
. Zie tabelhints (Transact-SQL)voor meer informatie.Zie
INSERT...SELECT * FROM OPENROWSET(BULK...)
voor meer informatie over het gebruik van instructies. Zie Vereisten voor minimale logboekregistratie bij bulkimportvoor informatie over wanneer rij-invoegbewerkingen die worden uitgevoerd door bulkimport in het transactielogboek worden geregistreerd.
Note
Wanneer u OPENROWSET
gebruikt, is het belangrijk om te begrijpen hoe SQL Server imitatie afhandelt. Zie BULK INSERT of OPENROWSET(BULK...) gebruiken om gegevens te importeren in SQL Servervoor meer informatie over beveiligingsoverwegingen.
SQLCHAR-, SQLNCHAR- of SQLBINARY-gegevens bulksgewijs importeren
OPENROWSET(BULK...)
ervan uitgaat dat, indien niet opgegeven, de maximale lengte van SQLCHAR
, SQLNCHAR
of SQLBINARY
gegevens niet groter is dan 8000 bytes. Als de geïmporteerde gegevens zich in een LOB-gegevensveld bevinden dat varchar(max), nvarchar(max)- of varbinary(max) -objecten bevat die groter zijn dan 8.000 bytes, moet u een XML-indelingsbestand gebruiken dat de maximale lengte voor het gegevensveld definieert. Als u de maximale lengte wilt opgeven, bewerkt u het indelingsbestand en declareert u het kenmerk MAX_LENGTH.
Note
Een automatisch gegenereerd indelingsbestand geeft niet de lengte of maximumlengte voor een LOB-veld op. U kunt echter een indelingsbestand bewerken en handmatig de lengte of maximumlengte opgeven.
SQLXML-documenten bulksgewijs exporteren of importeren
Als u SQLXML-gegevens bulksgewijs wilt exporteren of importeren, gebruikt u een van de volgende gegevenstypen in uw indelingsbestand.
Data type | Effect |
---|---|
SQLCHAR of SQLVARYCHAR |
De gegevens worden verzonden op de clientcodepagina of op de codepagina die wordt geïmpliceerd door de sortering. |
SQLNCHAR of SQLNVARCHAR |
De gegevens worden verzonden als Unicode. |
SQLBINARY of SQLVARYBIN |
De gegevens worden zonder conversie verzonden. |
Permissions
OPENROWSET
voor externe gegevensbronnen zijn de volgende machtigingen vereist:
ADMINISTER DATABASE BULK OPERATIONS
or
ADMINISTER BULK OPERATIONS
In het volgende voorbeeld wordt een principal toegekend ADMINISTEER DATABASE BULK OPERATIONS
.
GRANT ADMINISTER DATABASE BULK OPERATIONS TO [<principal_name>];
Als het doelopslagaccount privé is, moet de principal ook de rol Opslagblobgegevenslezer (of hoger) hebben toegewezen op container- of opslagaccountniveau.
Examples
Deze sectie bevat algemene voorbeelden om te laten zien hoe u syntaxis gebruikt OPENROWSET BULK
.
A. OPENROWSET gebruiken om bestandsgegevens BULKSGEWIJS IN TE VOEGEN in een varbinary(max)-kolom
Van toepassing op: Alleen SQL Server.
In het volgende voorbeeld wordt een kleine tabel gemaakt voor demonstratiedoeleinden en worden bestandsgegevens ingevoegd uit een bestand met de naam Text1.txt
in de C:
hoofdmap in een varbinary(max) -kolom.
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. De OPENROWSET BULK-provider gebruiken met een indelingsbestand om rijen op te halen uit een tekstbestand
Van toepassing op: Alleen SQL Server.
In het volgende voorbeeld wordt een indelingsbestand gebruikt om rijen op te halen uit een tekstbestand met tabscheidingstekens, values.txt
met de volgende gegevens:
1 Data Item 1
2 Data Item 2
3 Data Item 3
Het indelingsbestand, values.fmt
, beschrijft de kolommen 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
Met deze query worden die gegevens opgehaald:
SELECT a.* FROM OPENROWSET(
BULK 'C:\test\values.txt',
FORMATFILE = 'C:\test\values.fmt'
) AS a;
C. Een indelingsbestand en codepagina opgeven
Van toepassing op: Alleen SQL Server.
In het volgende voorbeeld ziet u hoe u zowel de indelingsbestands- als codepaginaopties tegelijk gebruikt.
INSERT INTO MyTable
SELECT a.* FROM OPENROWSET (
BULK N'D:\data.csv',
FORMATFILE = 'D:\format_no_collation.txt',
CODEPAGE = '65001'
) AS a;
D. Toegang tot gegevens uit een CSV-bestand met een indelingsbestand
Van toepassing op: ALLEEN SQL Server 2017 (14.x) en latere versies.
SELECT * FROM OPENROWSET(
BULK N'D:\XChange\test-csv.csv',
FORMATFILE = N'D:\XChange\test-csv.fmt',
FIRSTROW = 2,
FORMAT = 'CSV'
) AS cars;
E. Toegang tot gegevens uit een CSV-bestand zonder een indelingsbestand
Van toepassing op: Alleen SQL Server.
SELECT * FROM OPENROWSET(
BULK 'C:\Program Files\Microsoft SQL Server\MSSQL14.CTP1_1\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
Het ODBC-stuurprogramma moet 64-bits zijn. Open het tabblad Stuurprogramma's van de toepassing Verbinding maken met een ODBC-gegevensbron (SQL Server Import and Export Wizard) in Windows om dit te controleren. Er is een 32-bits Microsoft Text Driver (*.txt, *.csv)
die niet werkt met een 64-bits versie van sqlservr.exe
.
F. Toegang krijgen tot gegevens uit een bestand dat is opgeslagen in Azure Blob Storage
Van toepassing op: ALLEEN SQL Server 2017 (14.x) en latere versies.
In SQL Server 2017 (14.x) en latere versies wordt in het volgende voorbeeld een externe gegevensbron gebruikt die verwijst naar een container in een Azure-opslagaccount en een databasereferentie die is gemaakt voor een handtekening voor gedeelde toegang.
SELECT * FROM OPENROWSET(
BULK 'inv-2017-01-19.csv',
DATA_SOURCE = 'MyAzureInvoices',
SINGLE_CLOB
) AS DataFile;
Zie OPENROWSET
voor volledige voorbeelden, waaronder het configureren van de referentie en externe gegevensbron.
G. Importeren in een tabel vanuit een bestand dat is opgeslagen in Azure Blob Storage
In het volgende voorbeeld ziet u hoe u de opdracht OPENROWSET
gebruikt om gegevens uit een CSV-bestand te laden in een Azure Blob Storage-locatie waarop u de SAS-sleutel hebt gemaakt. De Azure Blob Storage-locatie is geconfigureerd als een externe gegevensbron. Hiervoor is een database-gerichte referentie vereist met behulp van een gedeelde toegangssignatuur die is versleuteld met een hoofdsleutel in de gebruikersdatabase.
-- 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. Een beheerde identiteit gebruiken voor een externe bron
Van toepassing op: Azure SQL Managed Instance en Azure SQL Database
In het volgende voorbeeld wordt een referentie gemaakt met behulp van een beheerde identiteit, een externe bron gemaakt en vervolgens gegevens uit een CSV geladen die wordt gehost op de externe bron.
Maak eerst de referentie en geef blobopslag op als de externe bron:
CREATE DATABASE SCOPED CREDENTIAL sampletestcred
WITH IDENTITY = 'MANAGED IDENTITY';
CREATE EXTERNAL DATA SOURCE SampleSource
WITH (
LOCATION = 'abs://****************.blob.core.windows.net/curriculum',
CREDENTIAL = sampletestcred
);
Laad vervolgens gegevens uit het CSV-bestand dat wordt gehost in blobopslag:
SELECT * FROM OPENROWSET(
BULK 'Test - Copy.csv',
DATA_SOURCE = 'SampleSource',
SINGLE_CLOB
) as test;
I. OPENROWSET gebruiken voor toegang tot verschillende Parquet-bestanden met behulp van S3-compatibele objectopslag
Van toepassing op: SQL Server 2022 (16.x) en latere versies.
In het volgende voorbeeld wordt gebruikgemaakt van toegang tot verschillende Parquet-bestanden vanaf verschillende locaties, die allemaal zijn opgeslagen op S3-compatibele objectopslag:
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. OPENROWSET gebruiken voor toegang tot verschillende Delta-tabellen vanuit Azure Data Lake Gen2
Van toepassing op: SQL Server 2022 (16.x) en latere versies.
In dit voorbeeld heet de gegevenstabelcontainer Contoso
en bevindt zich in een Azure Data Lake Gen2-opslagaccount.
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. OPENROWSET gebruiken om een query uit te voeren op een openbare anonieme gegevensset
In het volgende voorbeeld wordt gebruikgemaakt van de openbaar beschikbare gegevensset voor gele taxiritën in NYC.
Maak eerst de gegevensbron:
CREATE EXTERNAL DATA SOURCE NYCTaxiExternalDataSource
WITH (LOCATION = 'abs://nyctlc@azureopendatastorage.blob.core.windows.net');
Voer een query uit op alle bestanden met de parquet-extensie in mappen die overeenkomen met het naampatroon:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
) AS filerows;
More examples
Zie de volgende artikelen voor meer voorbeelden die het gebruik van INSERT...SELECT * FROM OPENROWSET(BULK...)
weergeven:
- Voorbeelden van bulksgewijs importeren en exporteren van XML-documenten (SQL Server)
- Identiteitswaarden behouden bij het bulksgewijs importeren van gegevens (SQL Server)
- Null-waarden of standaardwaarden behouden tijdens het bulksgewijs importeren (SQL Server)
- Een indelingsbestand gebruiken om gegevens bulksgewijs te importeren (SQL Server)
- Tekenindeling gebruiken om gegevens (SQL Server) te importeren of te exporteren
- Een indelingsbestand gebruiken om een tabelkolom (SQL Server) over te slaan
- Een indelingsbestand gebruiken om een gegevensveld (SQL Server) over te slaan
- Een indelingsbestand gebruiken om tabelkolommen toe te wijzen aan gegevensbestandsvelden (SQL Server)
- query's uitvoeren op gegevensbronnen met behulp van OPENROWSET in Azure SQL Managed Instances
Related content
- DELETE (Transact-SQL)
- FROM-clausule plus JOIN, APPLY, PIVOT (Transact-SQL)
- bulksgewijs importeren en exporteren van gegevens (SQL Server)
- INSERT (Transact-SQL)
- OPENDATASOURCE (Transact-SQL)
- OPENQUERY (Transact-SQL)
- SELECT (Transact-SQL)
- sp_serveroption (Transact-SQL)
- UPDATE (Transact-SQL)
- WHERE (Transact-SQL)
Van toepassing op:SQL Analytics-eindpunt en -warehouse in Microsoft Fabric
De T-SQL-OPENROWSET
-functie leest een inhoud van een bestand in Azure Data Lake Storage. U kunt de bestandsindelingen voor tekst/CSV, Parquet of JSON-lijnen lezen die zijn opgeslagen in Azure Data Lake of Azure Blob Storage.
De functie OPENROWSET
leest gegevens uit een bestand en retourneert deze als een rijenset. De functie OPENROWSET
kan worden verwezen in de FROM
component van een query alsof deze een tabelnaam is.
Dit artikel is alleen van toepassing op Microsoft Fabric Warehouse. Er zijn functionele verschillen tussen de functie OPENROWSET in fabricwarehouse- en SQL-analyse-eindpuntitems.
Details en koppelingen naar vergelijkbare voorbeelden op andere platforms:
- Voor syntaxis in andere services selecteert u uw versie in de vervolgkeuzelijst versie.
Syntax
SELECT <columns>
FROM OPENROWSET(
BULK 'https://<storage>.blob.core.windows.net/path/folder1=*/folder2=*/<filename>'
[, FORMAT = ('PARQUET' | 'CSV' | 'JSONL') ]
-- execution options
[, ROWS_PER_BATCH=number_of_rows]
-- Text/CSV encoding options
[, DATAFILETYPE = {'char' | 'widechar' } ]
[, CODEPAGE = {'ACP' | 'OEM' | 'raw' | '<code_page>' } ]
-- Text/CSV formatting options
[, ROWTERMINATOR = 'row_terminator' ]
[, FIELDTERMINATOR = 'field_terminator' ]
[, FIELDQUOTE = 'string_delimiter' ]
[ , PARSER_VERSION = 'parser_version' ]
[, ESCAPECHAR = 'escape_char' ]
[, HEADER_ROW = [true|false] ]
[, FIRSTROW = first_row ]
[, LASTROW = last_row ]
-- execution options
[, ROWS_PER_BATCH=number_of_rows]
)
[
WITH ( ( <column_name> <sql_datatype> [ '<column_path>' | <column_ordinal> ] )+ )
]
[ AS <alias> ]
Arguments
BULK 'data_file'
De URI van de gegevensbestanden waarvan de gegevens moeten worden gelezen en geretourneerd als rijset. De URI kan verwijzen naar Azure Data Lake Storage of Azure Blob Storage.
De URI kan het *
teken bevatten dat overeenkomt met een willekeurige reeks tekens, zodat OPENROWSET
het patroon overeenkomt met de URI. Bovendien kan het eindigen met /**
het inschakelen van recursieve doorkruising door alle submappen.
U kunt OPENROWSET(BULK)
gegevens rechtstreeks lezen uit bestanden die zijn opgeslagen in de Fabric OneLake, met name vanuit de map Bestanden van een Fabric Lakehouse. Dit elimineert de noodzaak voor externe faseringsaccounts (zoals ADLS Gen2 of Blob Storage) en maakt werkruimtebeheerde SaaS-systeemeigen opname met infrastructuurmachtigingen mogelijk. Deze functionaliteit ondersteunt:
- Lezen vanuit
Files
mappen in Lakehouses - Werkruimte-naar-magazijnbelastingen binnen dezelfde tenant
- Systeemeigen identiteits afdwinging met Behulp van Microsoft Entra-id
Note
Fabric OneLake-opslag is in preview. Bekijk de beperkingen die van toepassing zijn op COPY INTO
en OPENROWSET(BULK)
.
De ondersteunde URI-indelingen zijn:
https://{storage}.blob.core.windows.net/[container}/{file path}
https://{storage}.dfs.core.windows.net/[container}/{file path}
abfss://[container}@{storage}.dfs.core.windows.net/{file path}
-
https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/{file path}
- momenteel in preview
For example:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/*.parquet'
);
Opties voor BULK-invoerbestandsindeling
FORMAT = { 'CSV' | PARQUET | JSONL }
Hiermee geeft u de indeling van het bestand waarnaar wordt verwezen. Als de bestandsextensie in het pad eindigt op .csv
, .tsv
, .parquet
, .parq
, , .jsonl
, of .ldjson
.ndjson
, hoeft de FORMAT
optie niet te worden opgegeven.
Note
De OPENROWSET
functie kan alleen de JSON-indeling met scheidingstekens voor nieuwe regels lezen. Deze functie is momenteel beschikbaar als preview-versie.
Het nieuwe regelteken moet worden gebruikt als scheidingsteken tussen JSON-documenten en kan niet worden geplaatst in het midden van een JSON-document.
For example:
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'
);
Als het bestandspad niet eindigt op een van deze extensies, moet u bijvoorbeeld een FORMAT
, bijvoorbeeld:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'abfss://nyctlc@azureopendatastorage.blob.core.windows.net/yellow/**',
FORMAT='PARQUET'
)
ROWS_PER_BATCH = rows_per_batch
Hiermee geeft u het geschatte aantal rijen met gegevens in het gegevensbestand. Deze waarde is een schatting en moet een benadering (binnen één volgorde van grootte) van het werkelijke aantal rijen zijn. Standaard wordt ROWS_PER_BATCH
geschat op basis van bestandskenmerken (aantal bestanden, bestandsgrootten, grootte van de geretourneerde gegevenstypen). Het opgeven van ROWS_PER_BATCH = 0
is hetzelfde als het weglaten van ROWS_PER_BATCH
.
For example:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'abfss://public@pandemicdatalake.dfs.core.windows.net/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet',
ROWS_PER_BATCH = 100000
);
Opties voor tekst-/CSV-codering
DATAFILETYPE = { 'char' | 'widechar' }
Hiermee geeft u op dat OPENROWSET(BULK)
de bestandsinhoud met één byte (ASCII, UTF8) of UTF16 moet lezen.
DATAFILETYPE value | Alle gegevens die worden weergegeven in: |
---|---|
char (default) | Character format. Zie Tekenindeling gebruiken voor het importeren of exporteren van gegevensvoor meer informatie. |
widechar | Unicode characters. Zie Unicode-tekenindeling gebruiken voor het importeren of exporteren van gegevensvoor meer informatie. |
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' }
Hiermee geeft u de codepagina van de gegevens in het gegevensbestand.
CODEPAGE
is alleen relevant als de gegevens teken-, varchar- of tekstkolommen met tekenwaarden meer dan 127 of minder dan 32 bevatten.
CODEPAGE value | Description |
---|---|
ACP |
Converteert kolommen met teken-, varchar- of tekstgegevenstype van de ANSI-/Microsoft Windows-codepagina (ISO 1252) naar de SQL Server-codepagina. |
OEM (standaard) |
Converteert kolommen met teken-, varchar- of tekstgegevenstype van de oem-codepagina van het systeem naar de SQL Server-codepagina. |
RAW |
Er wordt geen conversie uitgevoerd van de ene codepagina naar de andere. Dit is de snelste optie. |
code_page |
Geeft de broncodepagina aan waarop de tekengegevens in het gegevensbestand zijn gecodeerd; bijvoorbeeld 850. Belangrijk Versies vóór SQL Server 2016 (13.x) bieden geen ondersteuning voor codepagina 65001 (UTF-8-codering). |
Opties voor tekst-/CSV-opmaak
ROWTERMINATOR = 'row_terminator'
Hiermee geeft u het rijeindteken dat moet worden gebruikt voor tekens en widechar-gegevensbestanden . Het standaardrijeindteken is \r\n
(nieuwlijnteken). Zie Veld- en rijeindtekens opgeven voor meer informatie.
FIELDTERMINATOR = 'field_terminator'
Hiermee geeft u het veldeindteken dat moet worden gebruikt voor teken - en widechar-gegevensbestanden . Het standaardveldeindteken is ,
(komma). Zie Veld- en rijeindtekens opgevenvoor meer informatie.
Als u bijvoorbeeld door tabs gescheiden gegevens uit een bestand wilt lezen:
SELECT *
FROM OPENROWSET(
BULK '{file path}',
ROWTERMINATOR = '\t'
);
FIELDQUOTE = 'field_quote'
Hiermee geeft u een teken op dat wordt gebruikt als het aanhalingsteken in het CSV-bestand. Als dit niet is opgegeven, wordt het aanhalingsteken ("
) gebruikt als het aanhalingsteken zoals gedefinieerd in de RFC 4180-standaard . Het FIELDTERMINATOR
teken (bijvoorbeeld een komma) kan worden geplaatst binnen de veldcitaties en wordt beschouwd als een gewoon teken in de cel met de FIELDQUOTE
tekens.
Gebruik bijvoorbeeld FIELDQUOTE = '"'
de volgende gegevensset met door komma's gescheiden waarden (CSV) met komma's in een adresveld. De waarden van het adresveld worden bewaard als één waarde, niet gesplitst in meerdere waarden door de komma's binnen de "
(aanhalingstekens).
SELECT *
FROM OPENROWSET(
BULK '{file path}',
FIELDQUOTE = '"',
FIELDTERMINATOR = ','
);
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"
PARSER_VERSION = 'parser_version'
Hiermee geeft u parserversie moet worden gebruikt bij het lezen van bestanden. Momenteel ondersteunde csv-parserversies zijn 1.0 en 2.0:
- PARSER_VERSION = '1,0'
- PARSER_VERSION = '2,0'
CSV-parserversie 1.0 is standaard en bevat uitgebreide functies. Versie 2.0 is gebouwd voor prestaties en biedt geen ondersteuning voor alle opties en coderingen.
Details van CSV-parserversie 1.0:
- De volgende opties worden niet ondersteund: HEADER_ROW.
- Standaardeindtekens zijn
\r\n
,\n
en\r
. - Als u (nieuwe regel) opgeeft
\n
als het rijeindteken, wordt deze automatisch voorafgegaan door een\r
(regelterugloopteken), wat resulteert in een rijeindteken van\r\n
.
Details van CSV-parserversie 2.0:
- Niet alle gegevenstypen worden ondersteund.
- De maximale lengte van de tekenkolom is 8000.
- Maximale maximale rijgrootte is 8 MB.
- De volgende opties worden niet ondersteund:
DATA_COMPRESSION
. - Lege tekenreeks tussen aantekening ("") wordt geïnterpreteerd als een lege tekenreeks.
- De optie DATEFORMAT SET wordt niet gehonoreerd.
- Ondersteunde indeling voor datumgegevenstype :
YYYY-MM-DD
- Ondersteunde indeling voor tijdgegevenstype :
HH:MM:SS[.fractional seconds]
- Ondersteunde indeling voor het gegevenstype datetime2 :
YYYY-MM-DD HH:MM:SS[.fractional seconds]
- Standaardeindtekens zijn
\r\n
en\n
.
ESCAPE_CHAR = 'char'
Hiermee geeft u het teken in het bestand dat wordt gebruikt om zichzelf te ontsnappen en alle scheidingstekens in het bestand. Als het escape-teken wordt gevolgd door een andere waarde dan het teken zelf, of een van de scheidingstekens, wordt het escape-teken genegeerd bij het lezen van de waarde.
De ESCAPECHAR
parameter wordt toegepast, ongeacht of de FIELDQUOTE
parameter wel of niet is ingeschakeld. Het wordt niet gebruikt om het aanhalingsteken te ontsnappen. Het aanhalingsteken moet worden voorafgegaan door een ander aanhalingsteken. Het aanhalingsteken kan alleen in de kolomwaarde worden weergegeven als de waarde is ingekapseld met aanhalingstekens.
In het volgende voorbeeld worden komma's (,
) en backslash (\
) ontsnapt en weergegeven als \,
en \\
:
SELECT *
FROM OPENROWSET(
BULK '{file path}',
ESCAPECHAR = '\'
);
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
HEADER_ROW = { TRUE | ONWAAR }
Hiermee geeft u op of een CSV-bestand veldnamenrij bevat. De standaardinstelling is FALSE
. Ondersteund in PARSER_VERSION='2.0'
. Als TRUE
, de kolomnamen worden gelezen uit de eerste rij volgens FIRSTROW
argument. Als TRUE
en schema wordt opgegeven met behulp WITH
van, wordt de binding van kolomnamen uitgevoerd op kolomnaam, niet op rangtelposities.
Hiermee geeft u op of een CSV-bestand veldnamenrij bevat die niet moet worden geretourneerd met andere gegevensrijen. De standaardinstelling is FALSE
. Ondersteund in PARSER_VERSION='2.0'
. Als TRUE
, de kolomnamen worden gelezen uit de eerste rij volgens FIRSTROW
argument. Als TRUE
en schema wordt opgegeven met behulp WITH
van, wordt de binding van kolomnamen uitgevoerd op kolomnaam, niet op rangtelposities.
SELECT *
FROM OPENROWSET(
BULK '{file path}',
HEADER_ROW = TRUE
);
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
FIRSTROW = first_row
Hiermee geeft u het nummer op van de eerste rij die moet worden geladen. De standaardwaarde is 1. Dit geeft de eerste rij in het opgegeven gegevensbestand aan. De rijnummers worden bepaald door de rijeindtekens te tellen.
FIRSTROW
is gebaseerd op 1.
LASTROW = last_row
Hiermee geeft u het nummer op van de laatste rij die moet worden geladen. De standaardwaarde is 0. Dit geeft de laatste rij in het opgegeven gegevensbestand aan.
Execution options
ROWS_PER_BATCH = rows_per_batch
Hiermee geeft u het geschatte aantal rijen met gegevens in het gegevensbestand. Deze waarde moet dezelfde volgorde hebben als het werkelijke aantal rijen.
Standaard wordt ROWS_PER_BATCH
geschat op basis van bestandskenmerken (aantal bestanden, bestandsgrootten, grootte van de geretourneerde gegevenstypen). Het opgeven van ROWS_PER_BATCH = 0
is hetzelfde als het weglaten van ROWS_PER_BATCH
.
WITH Schema
Het WITH
schema geeft de kolommen op die de resultatenset van de OPENROWSET
-functie definiëren. Het bevat kolomdefinities voor elke kolom die als resultaat wordt geretourneerd en geeft een overzicht van de toewijzingsregels die de onderliggende bestandskolommen binden aan de kolommen in de resultatenset.
In het volgende voorbeeld:
- De
country_region
kolom heeft het type varchar(50) en verwijst naar de onderliggende kolom met dezelfde naam - De
date
kolom verwijst naar een CSV-/Parquet-kolom of JSONL-eigenschap met een andere fysieke naam - De
cases
kolom verwijst naar de derde kolom in het bestand - De
fatal_cases
kolom verwijst naar een geneste Parquet-eigenschap of JSONL-subobject
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>
De naam van de kolom die wordt geretourneerd in de resultatenrijset. De gegevens voor deze kolom worden gelezen uit de onderliggende bestandskolom met dezelfde naam, tenzij deze worden overschreven door <column_path>
of <column_ordinal>
. De naam van de kolom moet voldoen aan de regels voor kolomnaam-id's.
<column_type>
Het T-SQL-type van de kolom in de resultatenset. De waarden uit het onderliggende bestand worden geconverteerd naar dit type wanneer OPENROWSET
de resultaten retourneert. Zie Gegevenstypen in Fabric Warehouse voor meer informatie.
<column_path>
Een door punt gescheiden pad (bijvoorbeeld $.description.location.lat
) dat wordt gebruikt om te verwijzen naar geneste velden in complexe typen zoals Parquet.
<column_ordinal>
Een getal dat de fysieke index vertegenwoordigt van de kolom die wordt toegewezen aan de kolom in de WITH
component.
Remarks
De ondersteunde functies worden samengevat in de tabel:
Feature | Supported | Not available |
---|---|---|
File formats | Parquet, CSV, JSONL (preview) | Delta, Azure Cosmos DB, JSON, relationele databases |
Authentication | EntraID/SPN-passthrough, openbare opslag | SAS/SAK, SPN, beheerde toegang |
Storage | Azure Blob Storage, Azure Data Lake Storage, Fabric OneLake (preview) | |
Options | Alleen volledige/absolute URI in OPENROWSET |
Relatieve URI-pad in OPENROWSET , DATA_SOURCE |
Partitioning | U kunt de functie filepath() in een query gebruiken. |
Examples
A. Een Parquet-bestand lezen uit Azure Blob Storage
In het volgende voorbeeld ziet u hoe u 100 rijen uit een Parquet-bestand kunt lezen:
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. Een aangepast CSV-bestand lezen
In het volgende voorbeeld ziet u hoe u rijen uit een CSV-bestand kunt lezen met een veldnamenrij en expliciet opgegeven afsluittekens die rijen en velden scheiden:
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. Het schema van de bestandskolom opgeven tijdens het lezen van een bestand
In het volgende voorbeeld ziet u hoe u expliciet het schema van de rij opgeeft dat als resultaat van de OPENROWSET
functie wordt geretourneerd:
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. Gepartitioneerde gegevenssets lezen
In het volgende voorbeeld ziet u hoe u de functie filepath()
kunt gebruiken om de onderdelen van de URI te lezen vanuit het overeenkomende bestandspad:
SELECT TOP 10
files.filepath(2) AS area
, files.*
FROM OPENROWSET(
BULK 'https://synapseaisolutionsa.blob.core.windows.net/public/NYC_Property_Sales_Dataset/*_*.csv',
HEADER_ROW = TRUE)
AS files
WHERE files.filepath(1) = '2009';
E. Het schema van de bestandskolom opgeven tijdens het lezen van een JSONL-bestand
In het volgende voorbeeld ziet u hoe u expliciet het schema van de rij opgeeft dat als resultaat van de OPENROWSET
functie wordt geretourneerd:
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'
);
Als een kolomnaam niet overeenkomt met de fysieke naam van een kolom in de eigenschappen als het JSONL-bestand, kunt u de fysieke naam in het JSON-pad opgeven na de typedefinitie. U kunt meerdere eigenschappen gebruiken. Als u bijvoorbeeld $.location.latitude
wilt verwijzen naar de geneste eigenschappen in parquet complexe typen of JSON-subobjecten.