OPENROWSET BULK (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-analysslutpunkt i Microsoft FabricLager i Microsoft FabricSQL-databas i Microsoft Fabric

Funktionen OPENROWSET läser data från en eller flera filer och returnerar innehållet som en raduppsättning. Beroende på tjänsten kan filen lagras i Azure Blob Storage, Azure Data Lake Storage, on-premises disk, nätverksdelningar och mer. Du kan läsa olika filformat som text/CSV, Parquet eller JSON-linjer.

Du kan referera till OPENROWSET funktionen i klausulen FROM i en fråga som om det vore ett tabellnamn. Använd den för att läsa data i ett SELECT uttalande, eller för att uppdatera måldata i UPDATE, INSERT, DELETE, MERGE, CTAS, eller CETAS satserna.

  • Använd OPENROWSET(BULK) för att läsa data från externa datafiler.
  • Använd OPENROWSET utan BULK för att läsa från en annan databasmotor. Mer information finns i OPENROWSET (Transact-SQL).

Tip

Denna artikel och syntaxen skiljer OPENROWSET(BULK) sig åt på olika plattformar i SQL Database Engine.

För Microsoft Fabric Data Warehouse syntax, välj Fabric Data Warehouse i versionsmenyn.

Information och länkar till liknande exempel på andra plattformar:

Transact-SQL syntaxkonventioner

Syntax

För SQL Server, Azure SQL Database, SQL database in Fabric och Azure SQL Managed Instance:

OPENROWSET( BULK 'data_file_path',
            <bulk_option> ( , <bulk_option> )*
)
[
    WITH (  ( <column_name> <sql_datatype> [ '<column_path>' | <column_ordinal> ] )+ )
]

<bulk_option> ::=
   DATA_SOURCE = 'data_source_name' |

   -- file format options
   CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } |
   DATAFILETYPE = { 'char' | 'widechar' } |
   FORMAT = <file_format> |

   FORMATFILE = 'format_file_path' |
   FORMATFILE_DATA_SOURCE = 'data_source_name' |

   SINGLE_BLOB |
   SINGLE_CLOB |
   SINGLE_NCLOB |

   -- Text/CSV options
   ROWTERMINATOR = 'row_terminator' |
   FIELDTERMINATOR =  'field_terminator' |
   FIELDQUOTE = 'quote_character' |

   -- Error handling options
   MAXERRORS = maximum_errors |
   ERRORFILE = 'file_name' |
   ERRORFILE_DATA_SOURCE = 'data_source_name' |

   -- Execution options
   FIRSTROW = first_row |
   LASTROW = last_row |

   ORDER ( { column [ ASC | DESC ] } [ , ...n ] ) [ UNIQUE ] ] |

   ROWS_PER_BATCH = rows_per_batch

Syntax för 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

Vissa OPENROWSET alternativ är formatspecifika, medan andra är universella. Rad- och fältavgränsare är till exempel endast meningsfulla för avgränsad text (CSV/TSV), medan alternativ som DATA_SOURCE och MAXERRORS gäller för alla format. Följande tabell sammanfattar vilka alternativ som stöds för de vanligaste formaten.

Alternativ CSV(1.0) CSV(2.0) PARKETTGOLV JSONL
DATA_SOURCE, ROWS_PER_BATCH, MAXERRORS Supported Supported Supported Supported
FELFIL, ERRORFILE_DATA_SOURCE, FORMATFIL, FORMATFILE_DATA_SOURCE Supported Supported Stöds inte Supported
CODEPAGE, DATAFILETYPE Supported Supported Stöds inte Supported
FÖRSTA RADEN Supported Supported Stöds inte Supported
ROWTERMINATOR, FIELDTERMINATOR, FIELDQUOTE, ESCAPECHAR Supported Supported Stöds inte Stöds inte
PARSER_VERSION Supported Supported Stöds inte Stöds inte
LASTROW Supported Stöds inte Stöds inte Stöds inte
HEADER_ROW Stöds inte Supported Stöds inte Stöds inte
SINGLE_BLOB, SINGLE_CLOB, SINGLE_NCLOB Stöds inte Stöds inte Stöds inte Stöds inte

Arguments

Argumenten för alternativet BULK ger betydande kontroll över var data ska börja och sluta läsas, hur fel ska hanteras och hur data tolkas. Du kan till exempel ange att datafilen ska läsas som en radradsuppsättning med en enda kolumn av typen varbinary, varchar eller nvarchar. Standardbeteendet beskrivs i de argumentbeskrivningar som följer.

Information om hur du använder BULK alternativet finns i avsnittet Kommentarer senare i den här artikeln. För information om vilka behörigheter som BULK alternativet kräver, se avsnittet Behörigheter senare i denna artikel.

Information om hur du förbereder data för massimport finns i Förbereda data för massexport eller import.

OMFÅNG

Sökvägen eller URI:n för datafilerna som OPENROWSET läses och returneras som en raduppsättning.

URI:n kan referera till Azure Data Lake Storage eller Azure Blob Storage. URI:n för de datafiler vars data ska läsas och returneras som raduppsättning.

Sökvägsformaten som stöds är:

  • <drive letter>:\<file path> för att komma åt filer på en lokal disk
  • \\<network-share\<file path> för att komma åt filer på nätverksresurser
  • adls://<container>@<storage>.dfs.core.windows.net/<file path> för att få åtkomst till Azure Data Lake Storage
  • abs://<storage>.blob.core.windows.net/<container>/<file path> för att få åtkomst till Azure Blob Storage
  • s3://<ip-address>:<port>/<file path> för att få åtkomst till s3-kompatibel lagring

Note

Den här artikeln och de URI-mönster som stöds skiljer sig åt på olika plattformar. För de URI-mönster som finns tillgängliga i Microsoft Fabric Data Warehouse, välj Fabric Data Warehouse i versionslistan.

Från och med SQL Server 2017 (14.x) kan data_file finnas i Azure Blob Storage. Exempel finns i Exempel på massåtkomst till data i Azure Blob Storage.

  • https://<storage>.blob.core.windows.net/<container>/<file path> för att få åtkomst till Azure Blob Storage eller Azure Data Lake Storage
  • https://<storage>.dfs.core.windows.net/<container>/<file path> för att få åtkomst till Azure Data Lake Storage
  • abfss://<container>@<storage>.dfs.core.windows.net/<file path> för att få åtkomst till Azure Data Lake Storage
  • https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/<file path> - för att komma åt OneLake i Microsoft Fabric

När du får åtkomst till data lagrad i Azure Data Lake Storage Gen2, använd URI-formatet abfss://<container>@<storage>.dfs.core.windows.net/<file path> istället https://<storage>.dfs.core.windows.net/<container>/<file path> för blob-endpointen. Båda ger fullt stöd för det hierarkiska namnrymden (HNS), vilket möjliggör katalogsemantik, optimerade filoperationer och POSIX-liknande åtkomstkontrolllistor (ACL).

I kontrast exponerar inte ändpunkten blob hierarkiska namnrymdsfunktioner och behandlar alla vägar som platta objektnycklar. Detta kan leda till minskad prestanda, begränsat katalogbeteende och inkompatibilitet med motorer som förväntar sig Azure Data Lake Storage Gen2-filsystemsemantik.

Note

Den här artikeln och de URI-mönster som stöds skiljer sig åt på olika plattformar. För de URI-mönster som är tillgängliga i SQL Server, Azure SQL Database och Azure SQL Managed Instance väljer du produkten i listrutan version.

URI:n kan inkludera tecknet * för att matcha vilken teckensekvens som helst, så OPENROWSET den kan mönstermatcha mot URI:n. Dessutom kan URI:n sluta med /** för att möjliggöra rekursiv traversering genom alla delmappar. I SQL Server är det här beteendet tillgängligt från och med SQL Server 2022 (16.x).

Till exempel:

SELECT TOP 10 *
FROM OPENROWSET(
    BULK '<scheme:>//pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/*.parquet'
);

Följande tabell visar lagringstyper som URI:n kan referera till:

Utgåva På plats Azure Storage OneLake i Fabric S3 Google Cloud (GCS)
SQL Server 2017 (14.x), SQL Server 2019 (15.x) Yes Yes Nej Nej Nej
SQL Server 2022 (16.x) Yes Yes Nej Yes Nej
Azure SQL Database Nej Yes Nej Nej Nej
Hanterad instans i Azure SQL Nej Yes Nej Nej Nej
Serverlös SQL-pool i Azure Synapse Analytics Nej Yes Yes Nej Nej
Microsoft Fabric Warehouse i Microsoft Fabric- och SQL-analysslutpunkten i Microsoft Fabric Nej Yes Yes Ja, med OneLake i Fabric-genvägar Ja, med OneLake i Fabric-genvägar
SQL-databas i Microsoft Fabric Nej Ja, med OneLake i Fabric-genvägar Yes Ja, med OneLake i Fabric-genvägar Ja, med OneLake i Fabric-genvägar

Du kan använda den OPENROWSET(BULK) för att läsa data direkt från filer som lagras i OneLake i Microsoft Fabric, specifikt från mappen Files i en Fabric Lakehouse. Denna funktion eliminerar behovet av externa staging-konton (såsom ADLS Gen2 eller Blob Storage) och möjliggör arbetsytstyrd, SaaS-native inmatning genom att använda Fabric-behörigheter. Den här funktionen stöder:

  • Läsa från Files mappar i Lakehouses
  • Arbetsyte-till-lager-inläsningar inom samma klientorganisation
  • Intern identitetsframtvingande med Hjälp av Microsoft Entra-ID

Se begränsningarna som gäller för både COPY INTO och OPENROWSET(BULK).

DATA_SOURCE

DATA_SOURCE definierar rotplatsen för datafilsökvägen. Det gör det möjligt att använda relativa vägar i vägen BULK . Skapa datakällan med CREATE EXTERNAL DATA SOURCE.

Utöver root-platsen kan den definiera en anpassad inloggningsbehörighet för att komma åt filerna på den platsen.

Till exempel:

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'
);

Alternativ för filformat

KODSIDA

Anger kodsidan för data i datafilen. CODEPAGE är endast relevant om data innehåller tecken-, varchar- eller textkolumner med teckenvärden som är större än 127 eller mindre än 32. De giltiga värdena är ACP, OEM, , RAWeller en specifik kodsida:

CODEPAGE-värde Description
ACP Konverterar kolumner med tecken-, varchar- eller textdatatyp från kodsidan ANSI/Microsoft Windows (ISO 1252) till SQL Server-kodsidan.
OEM (standardinställning) Konverterar kolumner med tecken-, varchar- eller textdatatyp från systemets OEM-kodsida till SQL Server-kodsidan.
RAW Ingen konvertering sker från en kodsida till en annan. Det här är det snabbaste alternativet.
Integer Anger den källkodssida där teckendata i datafilen är kodade. till exempel 850.

Important

Versioner före SQL Server 2016 (13.x) stöder inte kodsida 65001 (UTF-8-kodning). CODEPAGE stöds inte i Linux.

Note

Vi rekommenderar att du anger ett sorteringsnamn för varje kolumn i en formatfil, förutom när du vill att alternativet 65001 ska ha prioritet framför specifikationen för sorterings-/kodsidan.

DATAFILETYPE

Specificerar att OPENROWSET(BULK) ska läsa innehåll i enkelbyte (ASCII, UTF8) eller multibyte (UTF16). Giltiga värden är char och widechar:

DATAFILETYPE värde Alla data som representeras i:
char (standard) Teckenformat.

Mer information finns i Använda teckenformat för att importera eller exportera data.
widechar Unicode-tecken.

Mer information finns i Använda Unicode-teckenformat för att importera eller exportera data.

FORMAT

Anger formatet för den refererade filen, till exempel:

SELECT *
FROM OPENROWSET(BULK N'<data-file-path>',
                FORMAT='CSV') AS cars;

De giltiga värdena är "CSV" (kommaavgränsade värden som är kompatibla med RFC 4180-standarden ), "PARQUET", "DELTA" (version 1.0) och "JSONL", beroende på version:

Utgåva CSV PARKETTGOLV DELTA JSONL
SQL Server 2017 (14.x), SQL Server 2019 (15.x) Yes Nej Nej Nej
SQL Server 2022 (16.x) och senare versioner Yes Yes Yes Nej
Azure SQL Database Yes Yes Yes Nej
Hanterad instans i Azure SQL Yes Yes Yes Nej
Serverlös SQL-pool i Azure Synapse Analytics Yes Yes Yes Nej
Microsoft Fabric Warehouse i Microsoft Fabric- och SQL-analysslutpunkten i Microsoft Fabric Yes Yes Nej Yes
SQL-databas i Microsoft Fabric Yes Yes Nej Nej

Important

Funktionen OPENROWSET kan bara läsa det nyradsavgränsade JSON-formatet . Radskiftet måste användas som separator mellan JSON-dokument och kan inte placeras mitt i ett JSON-dokument.

Du behöver inte specificera FORMAT alternativet om filfiländelsen i sökvägen slutar på .csv, .tsv, .parquet, .parq, .jsonl, , .ldjson, eller .ndjson. Till exempel OPENROWSET(BULK) vet funktionen att formatet är parquet baserat på tillägget i följande exempel:

SELECT *
FROM OPENROWSET(
    BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'
);

Om filsökvägen inte slutar med något av dessa tillägg måste du ange ett FORMAT, till exempel:

SELECT TOP 10 *
FROM OPENROWSET(
      BULK 'abfss://nyctlc@azureopendatastorage.blob.core.windows.net/yellow/**',
      FORMAT='PARQUET'
)

FORMATFILE

Anger den fullständiga sökvägen för en formatfil. SQL Server stöder två typer av formatfiler: XML och icke-XML.

SELECT TOP 10 *
FROM OPENROWSET(
      BULK 'D:\XChange\test-csv.csv',
      FORMATFILE= 'D:\XChange\test-format-file.xml'
)

Du behöver en formatfil för att definiera kolumntyper i resultatuppsättningen. Det enda undantaget är när du anger SINGLE_CLOB, SINGLE_BLOB, eller SINGLE_NCLOB; i detta fall behöver du ingen formatfil.

För mer information om formatfiler, se Använd en formatfil för att bulkimportera data (SQL Server).

Från och med SQL Server 2017 (14.x) kan de format_file_path vara i Azure Blob Storage. Exempel finns i Exempel på massåtkomst till data i Azure Blob Storage.

FORMATFILE_DATA_SOURCE

FORMATFILE_DATA_SOURCE definierar rotplatsen för formatfilens sökväg. Genom att använda denna datakälla kan du använda relativa vägar i alternativet 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'
);

Skapa formatet fildatakälla med CREATE EXTERNAL DATA SOURCE. Utöver root-platsen kan den definiera en anpassad inloggningsbehörighet för att komma åt filerna på den platsen.

Text-/CSV-alternativ

ROWTERMINATOR

Anger radavgränsaren som ska användas för char - och widechar-datafiler , till exempel:

SELECT *
FROM OPENROWSET(
    BULK '<data-file-path>',
    ROWTERMINATOR = '\n'
);

Standardradavslutaren är \r\n (nytt radtecken). Mer information finns i Ange fält- och radavgränsare.

FIELDTERMINATOR

Anger fältavslutaren som ska användas för datafiler för tecken och widechar , till exempel:

SELECT *
FROM OPENROWSET(
    BULK '<data-file-path>',
    FIELDTERMINATOR = '\t'
);

Standardfältets avslutare är , (kommatecken). Mer information finns i Ange fält och radavgränsare. Om du till exempel vill läsa tabbavgränsade data från en fil:

FÄLTCITAT

Från och med SQL Server 2017 (14.x) anger det här argumentet ett tecken som används som citattecken i CSV-filen, som i följande New York-exempel:

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"

Endast ett enskilt tecken kan anges som värde för det här alternativet. Om det inte anges används citattecknet (") som citattecken enligt definitionen i RFC 4180-standarden . Tecknet FIELDTERMINATOR (till exempel ett kommatecken) kan placeras inom fältcitaten och det betraktas som ett vanligt tecken i cellen omsluten FIELDQUOTE med tecknen.

Om du till exempel vill läsa den tidigare CSV-exempeldatauppsättningen i New York använder du FIELDQUOTE = '"'. Adressfältets värden behålls som ett enda värde, inte uppdelat i flera värden av kommatecken inom " (citattecken).

SELECT *
FROM OPENROWSET(
    BULK '<data-file-path>',
    FIELDQUOTE = '"'
);

PARSER_VERSION

Gäller för: Endast Fabric Data Warehouse

Anger den parserversion som ska användas vid läsning av filer. Parserversioner som stöds CSV för närvarande är 1.0 och 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'
)

CSV-parser version 2.0 är standardimplementeringen optimerad för prestanda, men den stöder inte alla äldre alternativ och kodningar som finns tillgängliga i version 1.0. När du använder OPENROWSET faller Fabric Data Warehouse automatiskt tillbaka till version 1.0 om du använder de alternativ som endast stöds i den versionen, även om versionen inte är uttryckligen specificerad. I vissa fall kan du behöva specificera version 1.0 uttryckligen för att åtgärda fel orsakade av icke-stödda funktioner rapporterade av parser version 2.0.

CSV-parser version 1.0- detaljer:

  • Följande alternativ stöds inte: HEADER_ROW.
  • Standardavgränsare är \r\n, \n och \r.
  • Om du anger \n (ny rad) som radavgränsare prefixet automatiskt med ett \r (vagnretur) tecken, vilket resulterar i en radavslutare av \r\n.

CSV-parser version 2.0- detaljer:

  • Alla datatyper stöds inte.
  • Maximal kolumnlängd är 8 000.
  • Maximal radstorleksgräns är 8 MB.
  • Följande alternativ stöds inte: DATA_COMPRESSION.
  • Den citerade tomma strängen ("") tolkas som en tom sträng.
  • DATEFORMAT SET Alternativet respekteras inte.
  • Format som stöds för datumdatatyp : YYYY-MM-DD
  • Format som stöds för tidsdatatyp : HH:MM:SS[.fractional seconds]
  • Format som stöds för datatypen datetime2 : YYYY-MM-DD HH:MM:SS[.fractional seconds]
  • Standardavgränsare är \r\n och \n.

ESCAPE_CHAR

Anger tecknet i filen som används för att undkomma sig själv och alla avgränsarvärden i filen, till exempel:

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

Om escape-tecknet följs av ett annat värde än sig självt, eller något av avgränsarvärdena, tas escape-tecknet bort när värdet läss.

Parametern ESCAPECHAR tillämpas oavsett om FIELDQUOTE är eller inte är aktiverat. Den kommer inte att användas för att undkomma citattecknet. Citattecknet måste undanröjas med ett annat citattecken. Citattecknet kan endast visas inom kolumnvärdet om värdet kapslas in med citattecken.

I följande exempel är kommatecken (,) och omvänt snedstreck (\) undantagna och representeras som \, och \\:

SELECT *
FROM OPENROWSET(
    BULK '<data-file-path>',
    ESCAPECHAR = '\'
);

HEADER_ROW

Anger om en CSV-fil innehåller rubrikrad som inte ska returneras med andra datarader. Ett exempel på CSV-fil med en rubrik visas i följande exempel:

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

Standard är FALSE. Stöds i PARSER_VERSION='2.0' Fabric Data Warehouse. Om TRUEkommer kolumnnamnen att läsas från den första raden enligt FIRSTROW argumentet. Om TRUE och schemat anges med hjälp WITHav utförs bindningen av kolumnnamn efter kolumnnamn, inte ordningstalspositioner.

SELECT *
FROM OPENROWSET(
    BULK '<data-file-path>',
    HEADER_ROW = TRUE
);

Alternativ för felhantering

FELFIL

Anger den fil som används för att samla in rader som har formateringsfel och som inte kan konverteras till en OLE DB-raduppsättning. Dessa rader kopieras till den här felfilen från datafilen "som den är".

SELECT *
FROM OPENROWSET(
    BULK '<data-file-path>',
    ERRORFILE = '<error-file-path>'
);

Felfilen skapas i början av kommandokörningen. Ett fel uppstår om filen redan finns. Dessutom skapas en kontrollfil med filändelsen .ERROR.txt . Den här filen refererar till varje rad i felfilen och ger feldiagnostik. När felen har korrigerats kan data läsas in.

Från och med SQL Server 2017 (14.x) kan error_file_path finnas i Azure Blob Storage.

ERRORFILE_DATA_SOURCE

Från och med SQL Server 2017 (14.x) är det här argumentet en namngiven extern datakälla som pekar på platsen för felfilen som innehåller fel som hittades under importen.

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'
);

Mer information finns i CREATE EXTERNAL DATA SOURCE (Transact-SQL).

MAXERRORS

Anger det maximala antalet syntaxfel eller icke-konforma rader, enligt definitionen i formatfilen, som kan inträffa innan OPENROWSET utlöser ett undantag. Tills MAXERRORS har nåtts ignorerar OPENROWSET varje felaktig rad, läser inte in den och räknar den felaktiga raden som ett fel.

SELECT *
FROM OPENROWSET(
    BULK '<data-file-path>',
    MAXERRORS = 0
);

Standardvärdet för maximum_errors är 10.

Note

MAX_ERRORS gäller inte för CHECK begränsningar eller för att konvertera datatyper för pengar och storint .

Alternativ för databehandling

FÖRSTA RADEN

Anger numret på den första raden som ska läsas in. Standardvärdet är 1. Detta värde anger den första raden i den angivna datafilen. Radnumren bestäms genom att radavslutarna räknas. FIRSTROW är 1-baserad.

LASTROW

Anger numret på den sista raden som ska läsas in. Standardvärdet är 0. Detta värde anger den sista raden i den angivna datafilen.

ROWS_PER_BATCH

Anger det ungefärliga antalet rader med data i datafilen. Det här värdet är en uppskattning och bör vara en uppskattning (inom en storleksordning) av det faktiska antalet rader. Som standard beräknas ROWS_PER_BATCH baserat på filegenskaper (antal filer, filstorlekar, storleken på de returnerade datatyperna). Att ange ROWS_PER_BATCH = 0 är detsamma som att utelämna ROWS_PER_BATCH. Till exempel:

SELECT TOP 10 *
FROM OPENROWSET(
    BULK '<data-file-path>',
    ROWS_PER_BATCH = 100000
);

ORDER ( { column [ ASC | DESC ] } [ ,... n ] [ UNIK ] )

Ett valfritt tips som anger hur data i datafilen sorteras. Som standard förutsätter massåtgärden att datafilen är osorterad. Prestanda kan förbättras om frågeoptimeraren kan utnyttja ordningen för att generera en effektivare frågeplan. Följande lista innehåller exempel på när du anger en sortering kan vara fördelaktigt:

  • Infoga rader i en tabell som har ett grupperat index, där raduppsättningsdata sorteras på den klustrade indexnyckeln.
  • Koppla raduppsättningen till en annan tabell, där sorterings- och kopplingskolumnerna matchar.
  • Aggregera raduppsättningsdata efter sorteringskolumnerna.
  • Använda raduppsättningen som en källtabell i FROM-satsen för en fråga, där sorterings- och kopplingskolumnerna matchar.

UNIQUE

Anger att datafilen inte har duplicerade poster.

Om de faktiska raderna i datafilen inte är sorterade enligt den ordning du anger, eller om du anger UNIQUE att hint- och dubblettnycklar finns, returneras ett felmeddelande.

Kolumnaliaser krävs när du använder ORDER. Kolumnaliaslistan måste referera till den härledda tabellen som klausulen BULK kommer åt. De kolumnnamn du anger i klausulen ORDER syftar på denna kolumnalias lista. Du kan inte specificera stora värdetyper (varchar(max),nvarchar(max),varbinary(max) och xml) och stora objekttyper (LOB) (text, ntext och bild).

Innehållsalternativ

SINGLE_BLOB

Returnerar innehållet i data_file som en radradsraduppsättning med en enda kolumn av typen varbinary(max).

Important

Importera XML-data endast genom att SINGLE_BLOB använda alternativet istället för SINGLE_CLOB och SINGLE_NCLOB, eftersom det endast SINGLE_BLOB stödjer alla Windows-kodningskonverteringar.

SINGLE_CLOB

Läser data_file som ASCII och returnerar innehållet som en enkelrad, enkelkolumns radmängd av typen varchar(max), med hjälp av sorteringen av den aktuella databasen.

SINGLE_NCLOB

Läser data_file som Unicode och returnerar innehållet som en radmängd med en rad och en kolumn av typen nvarchar(max), med hjälp av sorteringen av den aktuella databasen.

SELECT * FROM OPENROWSET(
    BULK N'C:\Text1.txt',
    SINGLE_NCLOB
) AS Document;

WITH-schemat

Schemat WITH anger de kolumner som definierar resultatuppsättningen för funktionen OPENROWSET. Den innehåller kolumndefinitioner för varje kolumn som OPENROWSET returnerar och beskriver mappningsreglerna som binder de underliggande filkolumnerna till kolumnerna i resultatuppsättningen.

I följande exempel:

  • Kolumnen country_region har varchar(50)- typen och refererar till den underliggande kolumnen med samma namn.
  • Kolumnen date refererar till en CSV- eller Parquet-kolumn eller JSONL-egenskap med ett annat fysiskt namn.
  • Kolumnen cases refererar till den tredje kolumnen i filen.
  • Kolumnen fatal_cases refererar till en nästlad Parquet-egenskap eller JSONL-delobjekt.
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>

Namnet på kolumnen som OPENROWSET returneras i resultatraduppsättningen. OPENROWSET läser data för denna kolumn från den underliggande filkolumnen med samma namn, om du inte åsidosätter den genom att använda <column_path> eller <column_ordinal>. Kolumnnamnet måste följa reglerna för kolumnnamnsidentifierare.

<column_type>

T-SQL-typen för kolumnen i resultatuppsättningen. OPENROWSET konverterar värden från den underliggande filen till denna typ när resultaten returneras. Mer information finns i Datatyper i Infrastrukturlager.

<column_path>

En punktavgränsad sökväg (till exempel $.description.location.lat) som används för att referera till kapslade fält i komplexa typer som Parquet.

<column_ordinal>

Ett tal som representerar det fysiska indexet för kolumnen som avbildas till kolumnen i satsen WITH .

Permissions

För att använda OPENROWSET med externa datakällor behöver du följande behörigheter:

  • ADMINISTER DATABASE BULK OPERATIONS eller
  • ADMINISTER BULK OPERATIONS

Följande T-SQL-exempel beviljar ADMINISTER DATABASE BULK OPERATIONS ett huvudnamn.

GRANT ADMINISTER DATABASE BULK OPERATIONS TO [<principal_name>];

Om mållagringskontot är privat måste du också tilldela medlemskap i Storage Blob Data Reader-rollen (eller högre) till principalen på container- eller lagringskontonivå.

Remarks

  • En klausul som du använder med SELECT kan anropa FROMOPENROWSET(BULK...) istället för ett tabellnamn, med full SELECT funktionalitet.

  • OPENROWSET med alternativet BULK kräver ett korrelationsnamn, även kallat intervallvariabel eller alias, i FROM-satsen. Om du inte lägger till AS <table_alias>, får du felmeddelandet 491: "Ett korrelationsnamn måste anges för bulk-raduppsättningen i from-klausulen."

  • Du kan ange kolumnalias. Om du inte specificerar en kolumnaliaslista måste formatfilen ha kolumnnamn. Att specificera kolumnaliaser åsidosätter kolumnnamnen i formatfilen. Till exempel:

    • FROM OPENROWSET(BULK...) AS table_alias
    • FROM OPENROWSET(BULK...) AS table_alias(column_alias,...n)
  • En SELECT...FROM OPENROWSET(BULK...)-instruktion frågar data i en fil direkt, utan att importera data till en tabell.

  • Ett SELECT...FROM OPENROWSET(BULK...) sats kan lista bulkkolumnaliaser genom att använda en formatfil för att specificera kolumnnamn och datatyper.

  • Genom att använda OPENROWSET(BULK...) som källtabell i en INSERT eller sats MERGE importerar du data från en datafil i bulk till en tabell. Mer information finns i Använd BULK INSERT eller OPENROWSET(BULK...) för att importera data till SQL Server.
  • När du använder OPENROWSET BULK alternativet med en INSERT sats BULK stöder klausulen tabellledtrådar. Förutom vanliga tabelltips, till exempel TABLOCK, kan BULK-satsen acceptera följande specialiserade tabelltips: IGNORE_CONSTRAINTS (ignorerar endast begränsningarna CHECK och FOREIGN KEY), IGNORE_TRIGGERS, KEEPDEFAULTSoch KEEPIDENTITY. Mer information finns i Tabelltips (Transact-SQL).
  • Information om hur du använder INSERT...SELECT * FROM OPENROWSET(BULK...)-instruktioner finns i massimport och export av data (SQL Server). För information om när radinsättningsoperationer som bulkimport utför loggas i transaktionsloggen, se Förutsättningar för minimal loggning vid bulkimport.
  • När du importerar OPENROWSET (BULK ...) data med hela återställningsmodellen optimeras inte loggningen.

Note

När du använder OPENROWSETär det viktigt att förstå hur SQL Server hanterar personifiering. För information om säkerhetsaspekter, se Use BULK INSERT or OPENROWSET(BULK...) för att importera data till SQL Server.

I Microsoft Fabric Data Warehouse sammanfattar följande tabell stödda funktioner:

Feature Supported Ej tillgänglig
Filformat Parquet, CSV, JSONL Delta, Azure Cosmos DB, JSON, relationsdatabaser
Authentication Entra ID/SPN passthrough, offentlig lagring SAS/SAK, SPN, Hanterad åtkomst
Storage Azure Blob Storage, Azure Data Lake Storage, OneLake i Microsoft Fabric
Options Endast fullständig/absolut URI i OPENROWSET Relativ URI-sökväg i OPENROWSET, DATA_SOURCE
Partitioning Du kan använda funktionen filepath() i en fråga.

Massimport av SQLCHAR-, SQLNCHAR- eller SQLBINARY-data

OPENROWSET(BULK...) antar att, om du inte specificerar något annat, den maximala längden på SQLCHAR, SQLNCHAR, eller SQLBINARY data inte överstiger 8 000 byte. Om du importerar data i ett LOB-datafält som innehåller varchar(max), nvarchar(max) eller varbinär(max) objekt som överstiger 8 000 byte, måste du använda en XML-fil som definierar maximal längd för datafältet. För att ange maximal längd, redigera formatfilen och deklarera attributet MAX_LENGTH .

Note

En automatiskt genererad formatfil anger inte längden eller maxlängden för ett LOB-fält. Du kan dock redigera en formatfil och ange längden eller maxlängden manuellt.

Massexportera eller importera SQLXML-dokument

Om du vill massexportera eller importera SQLXML-data använder du någon av följande datatyper i formatfilen.

Datatyp Effect
SQLCHAR eller SQLVARYCHAR Data skickas på klientkodsidan eller på kodsidan som är underförstådd av sorteringen.
SQLNCHAR eller SQLNVARCHAR Data skickas som Unicode.
SQLBINARY eller SQLVARYBIN Data skickas utan konvertering.

Filmetadata funktioner

Ibland kan du behöva veta vilken fil- eller mappkälla som motsvarar en specifik rad i resultatuppsättningen.

Du kan använda funktioner filepath och filename för att returnera filnamn och sökvägen i resultatuppsättningen. Eller så kan du använda dem för att filtrera data baserat på filnamn och mappväg. I följande avsnitt hittar du korta beskrivningar tillsammans med exempel.

Filnamnsfunktion

Denna funktion returnerar filnamnet för raden.

Returdatatypen är nvarchar(1024). För optimal prestanda, kasta alltid resultatet av filnamnsfunktionen till en lämplig datatyp. Om du använder en karaktärsdatatyp, se till att du använder en lämplig längd.

Följande exempel läser NYC Yellow Taxi-datafilerna för de sista tre månaderna av 2017 och återger antalet resor per fil. Den OPENROWSET del av frågan specificerar vilka filer som ska läsas.

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();

Följande exempel visar hur man använder filename() i satsen WHERE för att filtrera filerna att läsa. Den får tillgång till hela mappen i delen OPENROWSET av frågan och filtrerar filer i klausulen WHERE .

Dina resultat är desamma som i det föregående exemplet.

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];

Filvägsfunktion

Denna funktion returnerar en fullständig väg eller en del av en väg:

  • När du anropar filepath funktionen utan en parameter returnerar den hela filsökvägen som en rad kommer ifrån.
  • När du anropar filepath funktionen med en parameter returnerar den den del av vägen som matchar jokeren på den position som anges i parametern. Till exempel returnerar ett parametervärde 1 den del av vägen som matchar det första jokerkortet.

Funktionens returdatatyp filepath är nvarchar(1024). För optimal prestanda, kasta alltid resultatet av filepath funktionen till lämplig datatyp. Om du använder en karaktärsdatatyp, se till att du använder en lämplig längd.

Följande exempel visar NYC Yellow Taxi-datafiler för de sista tre månaderna av 2017. Den returnerar antalet ridar per filsökväg. Den OPENROWSET del av frågan specificerar vilka filer som ska läsas.

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;

Följande exempel visar hur man använder filepath() i satsen WHERE för att filtrera filerna att läsa.

Du kan använda jokerkort i OPENROWSET den delen av frågan och filtrera filerna i klausulen WHERE . Dina resultat kommer att vara desamma som i det tidigare exemplet.

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

Det här avsnittet innehåller allmänna exempel som visar hur du använder OPENROWSET BULK syntax.

A. Använd OPENROWSET för att BULK INSERT arkivera data i en varbinär(max)-kolumn

Gäller för: ENDAST SQL Server.

I följande exempel skapas en liten tabell i demonstrationssyfte och fildata infogas från en fil med namnet Text1.txt i rotkatalogen C: i en kolumn med 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. Använd OPENROWSET BULK-providern med en formatfil för att hämta rader från en textfil

Gäller för: ENDAST SQL Server.

I följande exempel används en formatfil för att hämta rader från en flikavgränsad textfil, values.txt som innehåller följande data:

1     Data Item 1
2     Data Item 2
3     Data Item 3

Formatfilen, values.fmt, beskriver kolumnerna i 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

Den här frågan hämtar dessa data:

SELECT a.* FROM OPENROWSET(
    BULK 'C:\test\values.txt',
   FORMATFILE = 'C:\test\values.fmt'
) AS a;

C. Ange en formatfil och kodsida

Gäller för: ENDAST SQL Server.

I följande exempel visas hur du använder alternativ för både formatfilen och kodsidan samtidigt.

INSERT INTO MyTable
SELECT a.* FROM OPENROWSET (
    BULK N'D:\data.csv',
    FORMATFILE = 'D:\format_no_collation.txt',
    CODEPAGE = '65001'
) AS a;

D. Få åtkomst till data från en CSV-fil med en formatfil

Gäller för: ENDAST SQL Server 2017 (14.x) och senare versioner.

SELECT * FROM OPENROWSET(
    BULK N'D:\XChange\test-csv.csv',
    FORMATFILE = N'D:\XChange\test-csv.fmt',
    FIRSTROW = 2,
    FORMAT = 'CSV'
) AS cars;

E. Komma åt data från en CSV-fil utan en formatfil

Gäller för: ENDAST 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

ODBC-drivrutinen ska vara 64-bitars. Öppna fliken Drivrutiner i programmet Anslut till en ODBC-datakälla (SQL Server Import and Export) i Windows för att verifiera detta. Det finns 32-bitars Microsoft Text Driver (*.txt, *.csv) som inte fungerar med en 64-bitars version av sqlservr.exe.

F. Komma åt data från en fil som lagras i Azure Blob Storage

Gäller för: ENDAST SQL Server 2017 (14.x) och senare versioner.

I SQL Server 2017 (14.x) och senare versioner använder följande exempel en extern datakälla som pekar på en container i ett Azure-lagringskonto och en databasomfattande autentiseringsuppgift som skapats för en signatur för delad åtkomst.

SELECT * FROM OPENROWSET(
   BULK 'inv-2017-01-19.csv',
   DATA_SOURCE = 'MyAzureInvoices',
   SINGLE_CLOB
) AS DataFile;

Fullständiga OPENROWSET exempel, inklusive konfiguration av autentiseringsuppgifter och extern datakälla, finns i Exempel på massåtkomst till data i Azure Blob Storage.

G. Importera till en tabell från en fil som lagras i Azure Blob Storage

Följande exempel visar hur man använder kommandot OPENROWSET för att ladda data från en CSV-fil i en Azure Blob-lagringsplats där du skapade SAS-nyckeln. Du konfigurerar Azure Blob-lagringsplatsen som en extern datakälla. Denna process kräver en databasbegränsad legitimation som använder en shared access-signatur (SAS) krypterad med en huvudnyckel i användardatabasen.

-- 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. Använda en hanterad identitet för en extern källa

Gäller för: Azure SQL Managed Instance och Azure SQL Database

Följande exempel skapar en legitimation genom att använda en hanterad identitet, skapar en extern källa och laddar sedan data från en CSV som är värd på den externa källan.

Skapa först autentiseringsuppgifterna och ange bloblagring som extern källa:

CREATE DATABASE SCOPED CREDENTIAL sampletestcred
WITH IDENTITY = 'MANAGED IDENTITY';

CREATE EXTERNAL DATA SOURCE SampleSource
WITH (
    LOCATION = 'abs://****************.blob.core.windows.net/curriculum',
    CREDENTIAL = sampletestcred
);

Läs sedan in data från CSV-filen som finns på Blob Storage:

SELECT * FROM OPENROWSET(
    BULK 'Test - Copy.csv',
    DATA_SOURCE = 'SampleSource',
    SINGLE_CLOB
) as test;

I. Använda OPENROWSET för att komma åt flera Parquet-filer med S3-kompatibel objektlagring

gäller för: SQL Server 2022 (16.x) och senare versioner.

Följande exempel åtkomst till flera Parquet-filer från olika platser, alla lagrade på S3-kompatibel objektlagring:

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. Använd OPENROWSET för att få åtkomst till flera Delta-tabeller från Azure Data Lake Gen2

gäller för: SQL Server 2022 (16.x) och senare versioner.

I det här exemplet heter datatabellcontainern Contosooch finns på ett Azure Data Lake Gen2-lagringskonto.

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. Använda OPENROWSET för att fråga offentlig-anonym datamängd

I följande exempel används den offentligt tillgängliga nyc yellow taxi trip-posterna open data set.

Skapa datakällan först:

CREATE EXTERNAL DATA SOURCE NYCTaxiExternalDataSource
WITH (LOCATION = 'abs://nyctlc@azureopendatastorage.blob.core.windows.net');

Fråga alla filer med .parquet tillägg i mappmatchningsnamnsmönster:

SELECT TOP 10 *
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT = 'parquet'
) AS filerows;

A. Läsa en parquet-fil från Azure Blob Storage

I följande exempel kan du se hur du läser 100 rader från en Parquet-fil:

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. Läsa en anpassad CSV-fil

I följande exempel kan du se hur man läser rader från en CSV-fil med en header-rad och uttryckligen specificerade terminatortecken som separerar rader och fält:

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. Ange filkolumnschemat när du läser en fil

I följande exempel specificerar du schemat för raden som OPENROWSET funktionen returnerar:

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. Läsa partitionerade datauppsättningar

I följande exempel använder filepath() du funktionen för att läsa delarna av URI:n från den matchade filvägen:

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. Ange filkolumnschemat när du läser en JSONL-fil

I följande exempel kan du se hur du uttryckligen anger schemat för raden som ska returneras som ett resultat av OPENROWSET funktionen:

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'
     );

Om ett kolumnnamn inte matchar det fysiska namnet på en kolumn i egenskaperna om JSONL-filen, kan du ange det fysiska namnet i JSON-sökvägen efter typdefinitionen. Du kan använda flera egenskaper. Om du till exempel $.location.latitude vill referera till kapslade egenskaper i parquet-komplexa typer eller JSON-underobjekt.

Fler exempel

A. Använd OPENROWSET för att läsa en CSV-fil från en Fabric Lakehouse

I det här exemplet använder OPENROWSET du det för att läsa en CSV-fil på en Fabric Lakehouse. Filen är namngiven customer.csv och lagras i mappen Files/Contoso/ . Eftersom du inte tillhandahåller någon datakälla eller databasbegränsade inloggningsuppgifter, använder Fabric SQL-databasen din Entra ID-kontext för autentisering.

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. Använd OPENROWSET för att läsa en fil från en Fabric Lakehouse och infoga data i en ny tabell

I det här exemplet använder OPENROWSET du det för att läsa data från en Parquet-fil som heter store.parquet. Sedan använder INSERT du det för att lägga till data i en ny tabell som heter Store. Parquet-filen finns i ett Fabric Lakehouse. Eftersom du inte tillhandahåller någon datakälla eller databasbegränsade inloggningsuppgifter, använder SQL-databasen i Fabric din Entra ID-kontext för autentisering.

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; 

Fler exempel

Fler exempel som visar hur du använder OPENROWSET(BULK...)finns i följande artiklar: