Megosztás a következőn keresztül:


OPENROWSET TÖMEG (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

A OPENROWSET függvény egy vagy több fájlból olvas be adatokat, és sorhalmazként adja vissza a tartalmat. A szolgáltatástól függően előfordulhat, hogy a fájl az Azure Blob Storage-ban, az Azure Data Lake Storage-ban, a helyszíni lemezen, a hálózati megosztásokban stb. található. Különböző fájlformátumokat olvashat, például szöveg-/CSV-, parquet- vagy JSON-sorokat.

A OPENROWSET függvény a lekérdezés FROM záradékában úgy hivatkozhat rá, mintha táblanév lenne. Felhasználható az adatok utasításban SELECT való olvasására, illetve a céladatok frissítésére a UPDATE, INSERT, , DELETE, MERGECTAS, vagy CETAS utasításokban.

  • OPENROWSET(BULK) külső adatfájlokból származó adatok olvasására szolgál.
  • OPENROWSET anélkül BULK , hogy egy másik adatbázismotorból való olvasásra lett tervezve. További információ: OPENROWSET (Transact-SQL).

Ez a cikk és a OPENROWSET(BULK) benne megadott argumentum a platformok között változik.

Más platformokon található hasonló példák részletei és hivatkozásai:

Transact-SQL szintaxis konvenciók

Szemantika

SQL Server, Azure SQL Database, SQL database in Fabric és Azure SQL Managed Instance esetén:

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

A Fabric Data Warehouse szintaxisa

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

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

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

   -- Text/CSV options
   ROWTERMINATOR = 'row_terminator' |
   FIELDTERMINATOR =  'field_terminator' |
   FIELDQUOTE = 'quote_character' |
   ESCAPECHAR = 'escape_char' |
   HEADER_ROW = [true|false] |
   PARSER_VERSION = 'parser_version' |

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

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

   ROWS_PER_BATCH = rows_per_batch

Arguments

A BULK lehetőség argumentumai jelentős mértékben befolyásolják az olvasási adatok kezdő és befejező helyét, a hibák kezelését és az adatok értelmezését. Megadhatja például, hogy az adatfájl egysoros, egyoszlopos, varbináris, varchar vagy nvarchar típusú sorhalmazként legyen beolvasva. Az alapértelmezett viselkedést az alábbi argumentumleírások ismertetik.

A beállítás használatáról a BULK cikk későbbi , Megjegyzések szakaszában olvashat. A beállításhoz szükséges engedélyekkel BULK kapcsolatos információkért tekintse meg a cikk későbbi, Engedélyek szakaszát.

További információ az adatok tömeges importálásra való előkészítéséről: Adatok előkészítése tömeges exportálásra vagy importálásra.

TÖMEGES "data_file_path"

Azon adatfájl(ok) elérési útja vagy URI-ja, amelynek adatait sorkészletként kell olvasni és visszaadni.

Az URI hivatkozhat az Azure Data Lake Storage-ra vagy az Azure Blob Storage-ra. Azon adatfájl(ok) URI-ja, amelynek adatait sorkészletként kell beolvasni és visszaadni.

A támogatott elérési utak formátumai a következők:

  • <drive letter>:\<file path> fájlok elérése helyi lemezen
  • \\<network-share\<file path> fájlok elérése hálózati megosztásokon
  • adls://<container>@<storage>.dfs.core.windows.net/<file path> az Azure Data Lake Storage eléréséhez
  • abs://<storage>.blob.core.windows.net/<container>/<file path> az Azure Blob Storage eléréséhez
  • s3://<ip-address>:<port>/<file path> s3-kompatibilis tároló elérése

Note

Ez a cikk és a támogatott URI-minták különböző platformokon különböznek. A Microsoft Fabric Data Warehouse-ban elérhető URI-minták esetében válassza a Fabric lehetőséget a verzió legördülő listájában.

Az SQL Server 2017-től (14.x) kezdődően a data_file az Azure Blob Storage-ban lehet. Példák: Példák az adatokhoz való tömeges hozzáférésre az Azure Blob Storage.

  • https://<storage>.blob.core.windows.net/<container>/<file path> az Azure Blob Storage vagy az Azure Data Lake Storage eléréséhez
  • https://<storage>.dfs.core.windows.net/<container>/<file path> az Azure Data Lake Storage eléréséhez
  • abfss://<container>@<storage>.dfs.core.windows.net/<file path> az Azure Data Lake Storage eléréséhez
  • https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/<file path> - a OneLake eléréséhez a Microsoft Fabric-ben

Note

Ez a cikk és a támogatott URI-minták különböző platformokon különböznek. Az SQL Serverben, az Azure SQL Database-ben és a felügyelt Azure SQL-példányban elérhető URI-mintákhoz válassza ki a terméket a verzió legördülő listájában.

Az URI bármilyen karaktersorozatnak megfelelő karaktert tartalmazhat * , lehetővé téve OPENROWSET a mintaegyezést az URI-val szemben. Emellett az összes almappán keresztüli rekurzív bejárás engedélyezésével /** is végződhet. Az SQL Serverben ez a viselkedés az SQL Server 2022-től (16.x) kezdve érhető el.

Például:

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

Az URI által hivatkozható tárolási típusok az alábbi táblázatban láthatók:

verzió On-premises Azure Storage OneLake a Hálóban S3 Google Cloud (GCS)
SQL Server 2017 (14.x), SQL Server 2019 (15.x) Igen Igen Nem Nem Nem
SQL Server 2022 (16.x) Igen Igen Nem Igen Nem
Azure SQL Database Nem Igen Nem Nem Nem
Azure SQL Managed Instance Nem Igen Nem Nem Nem
Kiszolgáló nélküli SQL-készlet az Azure Synapse Analyticsben Nem Igen Igen Nem Nem
Microsoft Fabric Warehouse és SQL Analytics-végpont Nem Igen Igen Igen, OneLake használata a Fabric rövidítésekben Igen, OneLake használata a Fabric rövidítésekben
SQL-adatbázis a Microsoft Fabricben Nem Igen, OneLake használata a Fabric rövidítésekben Igen Igen, OneLake használata a Fabric rövidítésekben Igen, OneLake használata a Fabric rövidítésekben

Használhatod OPENROWSET(BULK) az adatokat közvetlenül a Microsoft Fabric-ben tárolt OneLake-ben tárolt fájlokból, különösen a Fabric Lakehouse Files mappájából . Ez szükségtelenné teszi a külső átmeneti fiókok (például ADLS Gen2 vagy Blob Storage) használatát, és lehetővé teszi a munkaterület által szabályozott, natív SaaS-betöltést Fabric-engedélyekkel. Ez a funkció a következőket támogatja:

  • Olvasás a Lakehouses mappáiból Files
  • Munkaterületről raktárra betöltődik egy bérlőn belül
  • Natív identitáskényszerítés a Microsoft Entra-azonosítóval

Tekintse meg azokat a korlátozásokat , amelyek mind a következőkre vonatkoznak: COPY INTOOPENROWSET(BULK).

DATA_SOURCE

DATA_SOURCE az adatfájl elérési útjának gyökérhelyét határozza meg. Lehetővé teszi a relatív elérési utak használatát a TÖMEGES elérési úton. Az adatforrás a CREATE EXTERNAL DATA SOURCE használatával jön létre.

A gyökérhelyen kívül egyéni hitelesítő adatokat is definiálhat, amelyek az adott helyen található fájlok eléréséhez használhatók.

Például:

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

Fájlformátum beállításai

CODEPAGE

Az adatfájlban lévő adatok kódlapját adja meg. CODEPAGE csak akkor releváns, ha az adatok karakter-, varchar- vagy szöveges oszlopokat tartalmaznak 127-nél vagy 32-nél kisebb karakterértékekkel. Az érvényes értékek a következők: "ACP", "OEM", "RAW" vagy "code_page":

CODEPAGE-érték Description
ACP Az ANSI/Microsoft Windows kódlapról (ISO 1252) származó karakter-, varchar- vagy szöveges adattípus oszlopait az SQL Server kódlapjára konvertálja.
OEM (alapértelmezett) Karakter ,varchar vagy szöveges adattípus oszlopait konvertálja a rendszer OEM-kódlapjáról az SQL Server kódlapjára.
RAW Egyik kódlapról a másikra nem történik átalakítás. Ez a leggyorsabb lehetőség.
code_page Azt a forráskódlapot jelzi, amelyen az adatfájlban lévő karakteradatok kódolva lesznek; például a 850-et.

Important

Az SQL Server 2016 (13.x) előtti verziók nem támogatják a 65001-ös kódlapot (UTF-8 kódolás). CODEPAGE Linuxon nem támogatott lehetőség.

Note

Azt javasoljuk, hogy adjon meg egy rendezési nevet egy formátumfájl minden oszlopához, kivéve, ha azt szeretné, hogy a 65001 beállítás prioritást élvezjen a rendezési/kódlap-specifikációval szemben.

DATAFILETYPE

OPENROWSET(BULK) Egy bájtos (ASCII, UTF8) vagy több bájtos (UTF16) fájltartalmat kell olvasnia. Az érvényes értékek a karakter és a widechar:

DATAFILETYPE érték Az összes adat a következő helyen jelenik meg:
karakter (alapértelmezett) Karakterformátum.

További információ: Adatok importálása vagy exportálása.
widechar Unicode-karakterek.

További információ: Unicode karakterformátum használata adatok importálásához vagy exportálásához.

FORMAT

Megadja a hivatkozott fájl formátumát, például:

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

Az érvényes értékek a "CSV" ( az RFC 4180 szabványnak megfelelő vesszővel tagolt értékek fájlja), a "PARQUET", a "DELTA" (1.0-s verzió) és a "JSONL" értékek, a verziótól függően:

verzió CSV PARKETTA DELTA JSONL
SQL Server 2017 (14.x), SQL Server 2019 (15.x) Igen Nem Nem Nem
SQL Server 2022 (16.x) és újabb verziók Igen Igen Igen Nem
Azure SQL Database Igen Igen Igen Nem
Azure SQL Managed Instance Igen Igen Igen Nem
Kiszolgáló nélküli SQL-készlet az Azure Synapse Analyticsben Igen Igen Igen Nem
Microsoft Fabric Warehouse és SQL Analytics-végpont Igen Igen Nem Igen
SQL-adatbázis a Microsoft Fabricben Igen Igen Nem Nem

Important

A OPENROWSET függvény csak új vonallal tagolt JSON-formátumot tud olvasni. Az új vonal karaktert elválasztóként kell használni a JSON-dokumentumok között, és nem lehet JSON-dokumentum közepén elhelyezni.

A FORMAT beállítást nem kell megadni, ha az elérési út fájlkiterjesztése a következővel .csvvégződik: , .tsv, .parquet, .parq, .jsonl, .ldjsonvagy .ndjson. A függvény például tudja, OPENROWSET(BULK) hogy a formátum a következő példában bővítményen alapuló parquet:

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

Ha a fájl elérési útja nem végződik az alábbi bővítmények egyikével, meg kell adnia például a következőt FORMAT:

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

FORMATFILE

Egy formátumfájl teljes elérési útját adja meg. Az SQL Server kétféle formátumfájlt támogat: XML-t és nem XML-t.

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

Az eredményhalmaz oszloptípusainak definiálásához formátumfájl szükséges. Az egyetlen kivétel az, ha SINGLE_CLOB, SINGLE_BLOBvagy SINGLE_NCLOB van megadva; ebben az esetben a formátumfájl nem szükséges.

A formátumfájlokról további információt Adatok tömeges importálása (SQL Server)című témakörben talál.

Az SQL Server 2017-től (14.x) kezdődően a format_file_path az Azure Blob Storage-ban lehet. Példák: Példák az adatokhoz való tömeges hozzáférésre az Azure Blob Storage.

FORMATFILE_DATA_SOURCE

FORMATFILE_DATA_SOURCE A formátumfájl elérési útjának gyökérhelyét határozza meg. Lehetővé teszi relatív elérési utak használatát a FORMATFILE beállításban.

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

A formátumfájl adatforrása a CREATE EXTERNAL DATA SOURCE használatával jön létre. A gyökérhelyen kívül egyéni hitelesítő adatokat is definiálhat, amelyek az adott helyen található fájlok eléréséhez használhatók.

Szöveg/CSV-beállítások

ROWTERMINATOR

Megadja a karakter- és widechar-adatfájlokhoz használandó sor terminátorát, például:

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

Az alapértelmezett sorkifejezés a \r\n (újvonalas karakter). További információ: Mező- és sorkifejezések megadása.

MEZŐGÉP

Megadja a karakter- és widechar-adatfájlokhoz használandó mezőkifejezést, például:

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

Az alapértelmezett mezőkifejezés ( , vessző). További információ: Mező- és sorkifejezések megadása. Ha például tabulátorral tagolt adatokat szeretne beolvasni egy fájlból:

FIELDQUOTE = 'field_quote'

Az SQL Server 2017-től (14.x) kezdődően ez az argumentum egy olyan karaktert határoz meg, amelyet idézőjelként használnak a CSV-fájlban, például a következő New York-i példában:

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"

Ehhez a beállításhoz csak egyetlen karakter adható meg értékként. Ha nincs megadva, a rendszer az " szabványban meghatározott idézőjelként () használja az idézőjelet. A FIELDTERMINATOR karakter (például vessző) elhelyezhető a mező idézőjelei között, és a karaktereket FIELDQUOTE tartalmazó cellában normál karakternek minősül.

Például az előző New York-i minta CSV-adatkészlet olvasásához használja FIELDQUOTE = '"'a következőt: . A címmező értékei egyetlen értékként maradnak meg, és nem oszthatók fel több értékre az " idézőjelek vesszői.

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

PARSER_VERSION = "parser_version"

Vonatkozik a következőkre: Csak Fabric Data Warehouse

A fájlok olvasásához használandó elemzőverziót adja meg. A jelenleg támogatott CSV elemzőverziók az 1.0 és a 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'
)

A CSV parser 2.0 verzió az alapértelmezett teljesítményre optimalizált megvalósítás, de nem támogatja az összes régi opciót és kódolást, amely az 1.0-ban elérhető. OPENROWSET használatakor a Fabric Data Warehouse automatikusan visszatér az 1.0-s verzióra, ha csak abban a verzióban támogatott opciókat használod, még akkor is, ha a verzió nincs kifejezetten megadva. Bizonyos esetekben kifejezetten meg kell határoznod az 1.0-s verziót, hogy megoldd azokat a hibákat, amelyeket a parser verzió által jelentett nem támogatott funkciók okoznak.

A CSV-elemző 1.0-s verziójának jellemzői:

  • A következő beállítások nem támogatottak: HEADER_ROW.
  • Az alapértelmezett terminátorok a következők\r\n\n: és \r.
  • Ha a sor terminátoraként (új vonal) adja meg \n a sort, a rendszer automatikusan előtagot ad egy \r (kocsivissza) karakterrel, amely a következő sor terminátorát \r\neredményezi: .

A CSV-elemző 2.0-s verziójának jellemzői:

  • Nem minden adattípus támogatott.
  • A karakteroszlopok maximális hossza 8000.
  • A maximális sorméretkorlát 8 MB.
  • A következő beállítások nem támogatottak: DATA_COMPRESSION.
  • Az idézett üres karakterlánc ("") üresként van értelmezve.
  • A DATEFORMAT SET beállítás nem érvényes.
  • A dátum adattípusának támogatott formátuma: YYYY-MM-DD
  • Az idő adattípusának támogatott formátuma: HH:MM:SS[.fractional seconds]
  • A datetime2 adattípus támogatott formátuma: YYYY-MM-DD HH:MM:SS[.fractional seconds]
  • Az alapértelmezett terminátorok a következők \r\n : és \n.

ESCAPE_CHAR = "char"

A fájl azon karakterét adja meg, amely önmagát és a fájl összes elválasztó értékét tartalmazza, például:

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

Ha a feloldó karaktert nem önmagától, vagy az elválasztó értékek bármelyikétől eltérő érték követi, a rendszer elveti a feloldó karaktert az érték olvasásakor.

A ESCAPECHAR paramétert a rendszer attól függetlenül alkalmazza, hogy a FIELDQUOTE paraméter engedélyezve van-e vagy sem. Nem fogják az idézőjelet escape karakterként használni. Az idézőjelet egy másik idézőjellel kell kivédeni. Az idéző karakter csak akkor jelenhet meg az oszlopértékben, ha az érték idéző karakterekkel van beágyazva.

Az alábbi példában a vessző (,) és a fordított perjel (\) feloldása és ábrázolása \,\\:

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

HEADER_ROW = { IGAZ | HAMIS }

Megadja, hogy egy CSV-fájl tartalmaz-e olyan fejlécsort, amelyet nem szabad más adatsorokkal visszaadni. Az alábbi példában egy fejlécet tartalmazó CSV-fájl látható:

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

Az alapértelmezett érték FALSE. Támogatott a PARSER_VERSION='2.0' Fabric Data Warehouse-ban. Ha TRUE, az oszlopnevek az első sorból lesznek beolvasva az argumentumnak FIRSTROW megfelelően. Ha TRUE a séma a használatával WITHvan megadva, az oszlopnevek kötése oszlopnév alapján történik, nem pedig sorszámok szerint.

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

Hibakezelési beállítások

ERRORFILE = "file_name"

Megadja azt a fájlt, amely formázási hibákat tartalmazó sorok gyűjtésére szolgál, és nem konvertálható OLE DB-sorkészletté. Ezeket a sorokat a rendszer a hibafájlba másolja a "ahogy van" adatfájlból.

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

A hibafájl a parancs végrehajtásának elején jön létre. Hiba akkor jelentkezik, ha a fájl már létezik. Emellett létrejön egy vezérlőfájl, amely .ERROR.txt kiterjesztéssel rendelkezik. Ez a fájl a hibafájl minden sorára hivatkozik, és hibadiagnosztikát biztosít. A hibák kijavítása után az adatok betölthetők.

Az SQL Server 2017 -től (14.x) kezdődően a error_file_path az Azure Blob Storage-ban lehet.

ERRORFILE_DATA_SOURCE

Az SQL Server 2017 -től (14.x) kezdődően ez az argumentum egy elnevezett külső adatforrás, amely annak a hibafájlnak a helyére mutat, amely az importálás során talált hibákat fogja tartalmazni.

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

További információ: CREATE EXTERNAL DATA SOURCE (Transact-SQL).

MAXERRORS = maximum_errors

Megadja a formátumfájlban definiált szintaxishibák vagy nem konformáló sorok maximális számát, amely akkor fordulhat elő, ha OPENROWSET kivételt okoz. Amíg el nem éri MAXERRORS, OPENROWSET figyelmen kívül hagyja az egyes rossz sorokat, nem tölti be, és a rossz sort egyetlen hibának számítja.

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

A maximum_errors alapértelmezett értéke 10.

Note

MAX_ERRORS nem vonatkozik a korlátozásokra CHECK , illetve a pénz és a bigint adattípusok konvertálására.

Adatfeldolgozási lehetőségek

ELSŐ SOR = first_row

Megadja az első betöltendő sor számát. Az alapértelmezett érték 1. Ez a megadott adatfájl első sorát jelzi. A sorszámokat a sorok terminátorainak megszámlálásával határozzuk meg. FIRSTROW 1-alapú.

LASTROW = last_row

Az utolsó betöltendő sor számát adja meg. Az alapértelmezett érték 0. Ez a megadott adatfájl utolsó sorát jelzi.

ROWS_PER_BATCH = rows_per_batch

Megadja az adatfájlban lévő adatsorok hozzávetőleges számát. Ez az érték becslés, és a sorok tényleges számának (egy nagyságrenden belüli) közelítésének kell lennie. Alapértelmezés szerint a ROWS_PER_BATCH a fájltulajdonságok (fájlok száma, fájlméretek, visszaadott adattípusok mérete) alapján becsülik. A ROWS_PER_BATCH = 0 megadása megegyezik ROWS_PER_BATCHkihagyásával. Például:

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

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

Nem kötelező tipp, amely meghatározza az adatfájl adatainak rendezését. Alapértelmezés szerint a tömeges művelet feltételezi, hogy az adatfájl rendezetlen. A teljesítmény akkor javítható, ha a lekérdezésoptimalizáló kihasználja a sorrendet egy hatékonyabb lekérdezésterv létrehozásához. Az alábbi lista példákat tartalmaz a rendezés megadására:

  • Sorok beszúrása fürtözött indexet tartalmazó táblába, ahol a sorokhalmaz adatai a fürtözött indexkulcson vannak rendezve.
  • A sorok egy másik táblával való összekapcsolása, ahol a rendezés és az illesztés oszlopai egyeznek.
  • A sorhalmaz adatainak összesítése a rendezési oszlopok szerint.
  • A sorhalmaz használata forrástáblaként egy lekérdezés FROM záradékában, ahol a rendezési és illesztési oszlopok egyeznek.

UNIQUE

Azt adja meg, hogy az adatfájl nem tartalmaz ismétlődő bejegyzéseket.

Ha az adatfájl tényleges sorai nem a megadott sorrend szerint vannak rendezve, vagy ha a UNIQUE tipp meg van adva, és a kulcsok duplikáltak, hibaüzenet jelenik meg.

A ORDER használatakor oszlop aliasok szükségesek. Az oszlop aliaslistájának a BULK záradék által elért származtatott táblára kell hivatkoznia. A ORDER záradékban megadott oszlopnevek erre az oszlop aliaslistára hivatkoznak. A nagyméretű értéktípusok (varchar(max), nvarchar(max), varbinary(max)és xml) és nagy objektumtípusok (LOB) (szöveg, ntext és kép) oszlopok nem adhatók meg.

Tartalombeállítások

SINGLE_BLOB

A data_file tartalmát egysoros, egyoszlopos , varbinary(max) típusú sorhalmazként adja vissza.

Important

Javasoljuk, hogy az XML-adatokat csak a SINGLE_BLOB beállítással importálja ahelyett, hogy SINGLE_CLOB és SINGLE_NCLOB, mert csak SINGLE_BLOB támogatja az összes Windows kódolási konverziót.

SINGLE_CLOB

A data_file ASCII-ként való olvasásával a tartalmat egysoros, egyoszlopos, varchar(max) típusú sorhalmazként adja vissza az aktuális adatbázis rendezésével.

SINGLE_NCLOB

A data_file Unicode-ként való olvasásával a tartalmat egysoros, egyoszlopos sorhalmazként adja vissza , amely nvarchar(max) típusú, az aktuális adatbázis rendezésével.

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

SÉMÁVAL

A WITH séma a OPENROWSET függvény eredményhalmazát meghatározó oszlopokat adja meg. Az eredményként visszaadott oszlopok oszlopdefinícióit tartalmazza, és felvázolja azokat a leképezési szabályokat, amelyek az alapul szolgáló fájloszlopokat az eredményhalmaz oszlopaihoz kötik.

Az alábbi példában:

  • Az country_region oszlop varchar(50) típusú, és az alapul szolgáló oszlopra hivatkozik ugyanazzal a névvel
  • Az date oszlop egy CSV/Parquet oszlopra vagy más fizikai névvel rendelkező JSONL-tulajdonságra hivatkozik
  • Az cases oszlop a fájl harmadik oszlopára hivatkozik
  • Az fatal_cases oszlop beágyazott Parquet-tulajdonságra vagy JSONL-alobjektumra hivatkozik
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>

Az eredménysorhalmazban visszaadott oszlop neve. Az oszlop adatait a rendszer az alapul szolgáló fájloszlopból olvassa be ugyanazzal a névvel, kivéve, ha <column_path> vagy <column_ordinal>felül van bírálva. Az oszlop nevének az oszlopnév-azonosítókra vonatkozó szabályokat kell követnie.

<column_type>

Az eredményhalmaz oszlopának T-SQL-típusa. A mögöttes fájl értékei ilyen típusúvá lesznek konvertálva, amikor OPENROWSET visszaadja az eredményeket. További információ: Adattípusok a Fabric Warehouse-ban.

<column_path>

Pontokkal tagolt elérési út (például $.description.location.lat) a beágyazott mezők olyan összetett típusokban való hivatkozására, mint a Parquet.

<column_ordinal>

Az oszlop fizikai indexét képviselő szám, amely a WITH záradék oszlopára lesz leképezve.

Permissions

OPENROWSET külső adatforrásokhoz a következő engedélyek szükségesek:

  • ADMINISTER DATABASE BULK OPERATIONS vagy
  • ADMINISTER BULK OPERATIONS

Az alábbi T-SQL-példa egy tagnak nyújt támogatást ADMINISTER DATABASE BULK OPERATIONS .

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

Ha a céltárfiók privát, az egyszerű fióknak a tároló vagy tárfiók szintjén is rendelkeznie kell a Storage Blob Adatolvasó szerepkörével (vagy magasabb szintű).

Remarks

  • A FROM használt SELECT záradék táblanév helyett OPENROWSET(BULK...) hívhat meg, teljes SELECT funkcióval.

  • OPENROWSET a BULK lehetőséghez a FROM záradékban egy korrelációs nevet, más néven tartományváltozót vagy aliast kell megadni. Nem sikerült hozzáadni az eredményeket az AS <table_alias> Msg 491 hiba miatt: "Korrelációs nevet kell megadni a tételsorkészlethez a forrás záradékban."

  • Az oszlop aliasai megadhatóak. Ha nincs megadva oszlop aliaslistája, a formátumfájlnak oszlopnevekkel kell rendelkeznie. Az oszlop aliasainak megadása felülírja a formátumfájl oszlopneveit, például:

    • FROM OPENROWSET(BULK...) AS table_alias
    • FROM OPENROWSET(BULK...) AS table_alias(column_alias,...n)
  • Egy SELECT...FROM OPENROWSET(BULK...) utasítás közvetlenül lekérdezi az adatokat egy fájlban anélkül, hogy az adatokat egy táblába importálja.

  • Az SELECT...FROM OPENROWSET(BULK...) utasítások az oszlopnevek és adattípusok megadására használt formátumfájllal listázhatják a tömeges oszlop aliasokat.

  • Forrástáblaként való használata OPENROWSET(BULK...) egy INSERT vagy MERGE több utasításban tömegesen importál adatokat egy adatfájlból egy táblába. További információ: Adatok importálása az SQL Servera TÖMEGES BESZÚRÁS vagy AZ OPENROWSET(BULK...) használatával.
  • Ha a OPENROWSET BULK beállítást egy INSERT utasítással használja, a BULK záradék támogatja a táblázat tippjeinek használatát. A TABLOCK záradék a hagyományos táblázati tippeken ( például BULK) kívül a következő speciális táblázattippeket is elfogadhatja: IGNORE_CONSTRAINTS (csak a CHECK és FOREIGN KEY korlátozásokat hagyja figyelmen kívül), IGNORE_TRIGGERS, KEEPDEFAULTSés KEEPIDENTITY. További információkért lásd: Tábla-javallatok (Transact-SQL).
  • A INSERT...SELECT * FROM OPENROWSET(BULK...) utasítások használatáról további információt Adatok tömeges importálása és exportálása (SQL Server)című témakörben talál. A tömeges importálással végrehajtott sorbeszúrási műveletek tranzakciónaplóban való naplózásának időpontjáról további információt a A tömeges importálásiminimális naplózás előfeltételei című témakörben talál.
  • Ha a teljes helyreállítási modellel rendelkező adatok importálására szolgál, OPENROWSET (BULK ...) nem optimalizálja a naplózást.

Note

A OPENROWSEThasználatakor fontos tisztában lenni azzal, hogy az SQL Server hogyan kezeli a megszemélyesítést. További információ a biztonsági szempontokról: Adatok importálása az SQL Servera BULK INSERT vagy AZ OPENROWSET(BULK...) használatával.

A Microsoft Fabric Data Warehouse támogatott funkciókat a táblázat foglalja össze:

Feature Supported Nem elérhető
Fájlformátumok Parquet, CSV, JSONL Delta, Azure Cosmos DB, JSON, relációs adatbázisok
Authentication EntraID/SPN átengedés, nyilvános tárolás SAS/SAK, SPN, felügyelt hozzáférés
Storage Azure Blob Storage, Azure Data Lake Storage, OneLake in Microsoft Fabric
Options Csak teljes/abszolút URI OPENROWSET Relatív URI elérési útja a következőben:OPENROWSETDATA_SOURCE
Partitioning A filepath() függvényt egy lekérdezésben is használhatja.

SQLCHAR-, SQLNCHAR- vagy SQLBINARY-adatok tömeges importálása

OPENROWSET(BULK...) feltételezi, hogy ha nincs megadva, a SQLCHAR, SQLNCHARvagy SQLBINARY adatok maximális hossza nem haladja meg a 8000 bájtot. Ha az importált adatok olyan LOB adatmezőben találhatók, amely tartalmaz bármilyen varchar(max), nvarchar(max) vagy varbinary(max) objektumot, amely meghaladja a 8000 bájtot, olyan XML-formátumú fájlt kell használnia, amely meghatározza az adatmező maximális hosszát. A maximális hossz megadásához szerkessze a formátumfájlt, és deklarálja a MAX_LENGTH attribútumot.

Note

Az automatikusan létrehozott formátumfájl nem határozza meg a LOB mező hosszát vagy maximális hosszát. Azonban szerkesztheti a formátumfájlt, és manuálisan megadhatja a hosszt vagy a maximális hosszt.

SQLXML-dokumentumok tömeges exportálása vagy importálása

AZ SQLXML-adatok tömeges exportálásához vagy importálásához használja a formátumfájlban az alábbi adattípusok egyikét.

Adattípus Effect
SQLCHAR vagy SQLVARYCHAR Az adatokat az ügyfélkódlapon vagy a rendezés által sugallt kódlapon küldi el a rendszer.
SQLNCHAR vagy SQLNVARCHAR Az adatok Unicode formátumban lesznek elküldve.
SQLBINARY vagy SQLVARYBIN Az adatok konvertálás nélkül lesznek elküldve.

Fájl metaadat-függvényei

Néha tudni kell, melyik fájl vagy mappa forrása kapcsolódik egy adott sorhoz az eredményhalmazban.

Használhatsz függvényeket filepath és filename fájlneveket és/vagy az útvonalat az eredményhalmazban visszaadhatod. Vagy használhatod őket arra, hogy az adatokat a fájl neve és/vagy a mappa útvonala alapján szűrj. A következő részekben rövid leírásokat találsz a minták mellett.

Fájlnév funkció

Ez a függvény visszaadja azt a fájlnevet, amelyből a sor származik.

A visszaadó adattípus: nvarchar(1024). Az optimális teljesítmény érdekében mindig a fájlnévfüggvény eredményét a megfelelő adattípusra cseréljük. Ha karakteradattípust használsz, győződj meg róla, hogy megfelelő hosszúságot használsz.

A következő minta a NYC Yellow Taxi adatait olvassa 2017 utolsó három hónapjára, és visszaadja a fuvarozások számát fájlonként. A OPENROWSET lekérdezés része megadja, mely fájlokat fogják olvasni.

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

Az alábbi példa bemutatja, hogyan filename() lehet a WHERE záradékban felhasználni az olvasandó fájlok szűrésére. Hozzáfér a lekérdezés teljes mappájához, és szűri a OPENROWSET záradékban lévő fájlokat WHERE .

Az eredményeid ugyanazok lesznek, mint az előző példán.

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

Fájlút függvény

Ez a függvény teljes utat vagy az út egy részét ad vissza:

  • Ha paraméter nélkül hívják, visszaadja a teljes fájlútot, amelyből egy sor indul.
  • Ha paraméterrel hívják, az út azon része adja vissza, amely megegyezik a paraméterben megadott helyen lévő vadkártyával. Például az 1-es paraméterérték visszaadja az út azon részét, amely megegyezik az első vadkártyával.

A visszaadó adattípus: nvarchar(1024). Az optimális teljesítmény érdekében mindig a függvény eredményét filepath a megfelelő adattípusra kell alkalmazni. Ha karakteradattípust használsz, győződj meg róla, hogy megfelelő hosszúságot használsz.

A következő minta a NYC Yellow Taxi adatfájljait olvassa 2017 utolsó három hónapjában. Visszaadja a fájlútonként a fuvarok számát. A OPENROWSET lekérdezés része megadja, mely fájlokat fogják olvasni.

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;

Az alábbi példa bemutatja, hogyan filepath() lehet a WHERE záradékban felhasználni az olvasandó fájlok szűrésére.

Használhatod a wildcardokat a OPENROWSET lekérdezés részében, és szűrheted a fájlokat a WHERE záradékban. Az eredményeid ugyanazok lesznek, mint az előző példán.

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

Ez a szakasz általános példákat tartalmaz a szintaxis használatának OPENROWSET BULK bemutatására.

A. Az OPENROWSET használata a fájladatok tömeges beszúrásához egy varbinary(max) oszlopba

A következőkre vonatkozik: Csak SQL Server.

Az alábbi példa egy kis táblát hoz létre bemutató célokra, és fájladatokat szúr be a Text1.txt gyökérkönyvtárban található fájlból C: egy varbinary(max) oszlopba.

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. Sorok lekérése szövegfájlból az OPENROWSET BULK szolgáltatóval

A következőkre vonatkozik: Csak SQL Server.

Az alábbi példa egy formátumfájl használatával kéri le a sorokat egy tabulátorral tagolt szövegfájlból, values.txt, amely a következő adatokat tartalmazza:

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

A formátumfájl (values.fmt) a values.txtoszlopait írja le:

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

Ez a lekérdezés a következő adatokat kéri le:

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

C. Fájl- és kódlap formázása

A következőkre vonatkozik: Csak SQL Server.

Az alábbi példa bemutatja, hogyan használható egyszerre a fájlformátum és a kódlap beállításai.

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

D. Adatok elérése CSV-fájlból formátumfájllal

A következőkre vonatkozik: Az SQL Server 2017 (14.x) és újabb verziói csak.

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

E. Adatok elérése CSV-fájlból formátumfájl nélkül

A következőkre vonatkozik: Csak 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

Az ODBC-illesztőnek 64 bitesnek kell lennie. Ennek ellenőrzéséhez nyissa meg a Csatlakozás ODBC-adatforráshoz (SQL Server Importálás és exportálás varázsló) alkalmazás Illesztőprogramok lapját a Windowsban. A Microsoft Text Driver (*.txt, *.csv)64 bites verziójával nem használható 32 bites sqlservr.exe.

F. Adatok elérése az Azure Blob Storage-ban tárolt fájlból

A következőkre vonatkozik: Az SQL Server 2017 (14.x) és újabb verziói csak.

Az SQL Server 2017 (14.x) és újabb verzióiban az alábbi példa egy külső adatforrást használ, amely egy Azure-tárfiók tárolójára mutat, és egy közös hozzáférésű jogosultságkódhoz létrehozott adatbázis-hatókörű hitelesítő adatot.

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

A teljes OPENROWSET példákért, beleértve a hitelesítő adatok és a külső adatforrás konfigurálását, tekintse meg Példák az Azure Blob Storageadataihoz való tömeges hozzáférésre.

G. Importálás egy táblába az Azure Blob Storage-ban tárolt fájlból

Az alábbi példa bemutatja, hogyan tölthet be adatokat egy csv-fájlból a OPENROWSET paranccsal egy Olyan Azure Blob Storage-helyen, amelyen létrehozta az SAS-kulcsot. Az Azure Blob Storage helye külső adatforrásként van konfigurálva. Ehhez adatbázis-hatókörű hitelesítő adatokra van szükség egy megosztott hozzáférésű aláírással, amely a felhasználói adatbázisban található főkulcs használatával van titkosítva.

-- 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. Felügyelt identitás használata külső forráshoz

A következőkre vonatkozik: Felügyelt Azure SQL-példány és Azure SQL Database

Az alábbi példa egy felügyelt identitással hoz létre hitelesítő adatokat, létrehoz egy külső forrást, majd betölti az adatokat a külső forráson üzemeltetett CSV-ből.

Először hozza létre a hitelesítő adatokat, és adja meg a blobtárolót külső forrásként:

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

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

Ezután töltse be az adatokat a blobtárolón tárolt CSV-fájlból:

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

I. Az OPENROWSET használatával több Parquet-fájlhoz is hozzáférhet S3-kompatibilis objektumtároló használatával

A következőkre vonatkozik: SQL Server 2022 (16.x) és újabb verziók.

Az alábbi példa több parquet-fájlt használ különböző helyről, és mindegyik S3-kompatibilis objektumtárolóban van tárolva:

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. Az OPENROWSET használata több Delta-tábla eléréséhez az Azure Data Lake Gen2-ből

A következőkre vonatkozik: SQL Server 2022 (16.x) és újabb verziók.

Ebben a példában az adattábla-tároló neve Contoso, és egy Azure Data Lake Gen2-tárfiókon található.

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. Nyilvános névtelen adathalmaz lekérdezése az OPENROWSET használatával

Az alábbi példa a nyilvánosan elérhető NYC sárga taxiút-rekordokat használja.

Először hozza létre az adatforrást:

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

A névmintának megfelelő mappákban lévő kiterjesztésű .parquet fájlok lekérdezése:

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

A. Parquet-fájl olvasása az Azure Blob Storage-ból

Az alábbi példában 100 sort olvashat egy Parquet-fájlból:

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. Egyéni CSV-fájl olvasása

Az alábbi példában láthatja, hogyan olvashat sorokat egy CSV-fájlból egy fejlécsorral és explicit módon megadott, sorokat és mezőket elválasztó terminátorkarakterek használatával:

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. Fájl olvasása közben adja meg a fájloszlop sémáját

Az alábbi példában láthatja, hogyan adhatja meg explicit módon a függvény eredményeként visszaadott sor sémáját OPENROWSET :

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. Particionált adatkészletek olvasása

Az alábbi példában az filepath() függvénnyel olvashatja be az URI részeit a egyeztetett fájl elérési útján:

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. A fájloszlop sémájának megadása JSONL-fájl olvasása közben

Az alábbi példában láthatja, hogyan adhatja meg explicit módon a függvény eredményeként visszaadott sor sémáját OPENROWSET :

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

Ha egy oszlopnév nem egyezik meg a tulajdonságok egyik oszlopának fizikai nevével, ha a JSONL-fájl, a JSON-elérési út fizikai nevét a típusdefiníció után is megadhatja. Több tulajdonságot is használhat. Például $.location.latitude a beágyazott tulajdonságok parquet komplex típusokban vagy JSON-alobjektumokban való hivatkozásához.

További példák

A. Használj OPENROWSET-et CSV fájl olvasására egy Fabric Lakehouse-ból

Ebben a példában OPENROWSET egy CSV fájl olvasásához szolgál, amely elérhető a Fabric Lakehouse-on, a mappában tárolt customer.csv, és a mappában található Files/Contoso/ . Mivel nincs adatforrás és adatbázis alapú hitelesítés, a Fabric SQL adatbázis a felhasználó Entra ID kontextusával autentikál.

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. Használd az OPENROWSET-et a fájl olvasásához a Fabric Lakehouse-ból, és beillesztés egy új táblába

Ebben a példában OPENROWSET először egy parkettfájlból származó adatokat fogjuk olvasni.store.parquet Ezután INSERT az adatokat egy új táblázatba helyezik, amit .Store A parquet fájl a Fabric Lakehouse-ban található, mivel nincs DATA_SOURCE és adatbázis-alapú hitelesítő kivonat, az SQL adatbázis a Fabric-ben a felhasználó Entra ID kontextusával autentikál.

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; 

További példák

A OPENROWSET(BULK...)használatát bemutató további példákért tekintse meg a következő cikkeket: