Delen via


OPENROWSET BULK (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure 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, UPDATEof 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:

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_BLOBof 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, OPENQUERYof 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 met SELECT kan OPENROWSET(BULK...) aanroepen in plaats van een tabelnaam, met volledige SELECT functionaliteit.

    OPENROWSET met de optie BULK vereist een correlatienaam, ook wel een bereikvariabele of alias genoemd, in de FROM-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 een INSERT- of MERGE-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 een INSERT-instructie, ondersteunt de BULK-component tabelhints. Naast de normale tabelhints, zoals TABLOCK, kan de BULK-component de volgende gespecialiseerde tabelhints accepteren: IGNORE_CONSTRAINTS (negeert alleen de beperkingen voor CHECK en FOREIGN KEY), IGNORE_TRIGGERS, KEEPDEFAULTSen KEEPIDENTITY. 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 OPENROWSETgebruikt, 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, SQLNCHARof 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 OPENROWSETvoor 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 Contosoen 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:

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:

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 WITHvan, 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 WITHvan, 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.