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 a fájl tárolható Azure Blob Storage-ben, Azure Data Lake storage-ben, on-premises lemezben, hálózati megosztásokban és még sok másban. Különböző fájlformátumokat olvashatsz, például szöveg/CSV, Parquet vagy JSON-vonalak.

A függvényt a FROM lekérdezés záradékában hivatkozhatod OPENROWSET úgy, mintha egy táblanév lenne. Használd az utasítások adatainak SELECT olvasásához, vagy a céladatok frissítéséhez , INSERT, CTASDELETEMERGEvagy CETAS az UPDATEutasításokban.

  • Külső OPENROWSET(BULK) adatfájlokból olvasni akarok adatokat.
  • Használd OPENROWSET nélkület BULK , hogy egy másik adatbázis motorból olvass. További információ: OPENROWSET (Transact-SQL).

Tip

Ez a cikk és a OPENROWSET(BULK) szintaxis eltér az SQL Database Engine különböző platformjain.

Microsoft Fabric Data Warehouse szintaxishoz válaszd ki a verzió legördülő listájában Fabric Data Warehouse-et.

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

Néhány OPENROWSET opció formátumspecifikus, míg mások univerzálisak. A sor- és mezőhatárolók például csak az elhatárolt szöveg (CSV/TSV) esetében értelmezhetők, míg az olyan beállítások, mint a DATA_SOURCE és a MAXERRORS, minden formátumra érvényesek. Az alábbi táblázat összefoglalja, mely opciók támogatottak a leggyakoribb formátumokhoz.

Beállítások CSV(1.0) CSV(2.0) PARKETTA JSONL
DATA_SOURCE, ROWS_PER_BATCH, MAXERRORS Supported Supported Supported Supported
ERRORFILE, ERRORFILE_DATA_SOURCE, FORMATFILE, FORMATFILE_DATA_SOURCE Supported Supported Nem támogatott Supported
KÓDLAP, ADATFÁJLTÍPUS Supported Supported Nem támogatott Supported
ELSŐ SOR Supported Supported Nem támogatott Supported
ROWTERMINATOR, FIELDTERMINATOR, FIELDQUOTE, ESCAPECHAR Supported Supported Nem támogatott Nem támogatott
PARSER_VERSION Supported Supported Nem támogatott Nem támogatott
LASTROW Supported Nem támogatott Nem támogatott Nem támogatott
HEADER_ROW Nem támogatott Supported Nem támogatott Nem támogatott
SINGLE_BLOB, SINGLE_CLOB, SINGLE_NCLOB Nem támogatott Nem támogatott Nem támogatott Nem támogatott

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. Az opció által megkövetelt jogosultságokról BULK információért lásd a cikk későbbi részében a Jogosultságok szakaszt.

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.

TERJEDELEM

Az adatfájlok útja vagy URI-je, amely OPENROWSET sorhalmazként olvas és visszatér.

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-ben elérhető URI mintákhoz válaszd ki a verzió lebontott listájában Fabric Data Warehouse-et.

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

Az Azure Data Lake Storage Gen2-ben tárolt adatokhoz való hozzáféréskor használd az abfss://<container>@<storage>.dfs.core.windows.net/<file path> vagy https://<storage>.dfs.core.windows.net/<container>/<file path> URI formátumot a blob végpont helyett. Mindkettő teljes mértékben támogatja a hierarchikus névteret (HNS), amely lehetővé teszi a könyvtár-szemantikát, az optimalizált fájlműveleteket és a POSIX stílusú hozzáférés-vezérlő listákat (ACL-eket).

Ezzel szemben a blob végpont nem tárja fel hierarchikus névtér jellemzőket, és minden útvonalat lapos objektumkulcsként kezel. Ez csökkent teljesítményhez, korlátozott könyvtári viselkedéshez és az Azure Data Lake Storage Gen2 fájlrendszer szemantikáját elváró motorokkal való kompatibilitás hiányához vezethet.

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 beépítheti a * karaktert bármilyen karaktersorozathoz, így OPENROWSET mintát is egyeztethet az URI-vel. Az URI véget is zárhat azzal, /** hogy lehetővé teszi a rekurzív átjárást az összes almappán. 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 alábbi táblázat mutatja azokat a tárolótípusokat, amelyekre az URI hivatkozhat:

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 a Microsoft Fabricben és SQL Analytics-végpont a Microsoft Fabricben 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) közvetlenül az adatokat 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 a képesség megszünteti a külső staging fiókok (például ADLS Gen2 vagy Blob Storage) szükségességét, és lehetővé teszi a munkaterület által szabályozott, SaaS-natív felvételt Fabric jogosultságok használatával. 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

Lásd a korlátokat , amelyek mind COPY INTO a és OPENROWSET(BULK)a .

DATA_SOURCE

DATA_SOURCE az adatfájl elérési útjának gyökérhelyét határozza meg. Lehetővé teszi, hogy relatív útvonalakat használj az BULK úton. Hozd létre az adatforrást .CREATE EXTERNAL DATA SOURCE

A gyökér helyen kívül egyedi hitelesítő adatokat is meg tud határozni, hogy hozzáférjen az adott helyen lévő fájlokhoz.

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 , ACPOEM, RAW, vagy egy adott kódlap:

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.
Egész szám 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

Megadja, hogy OPENROWSET(BULK) az egybájtos (ASCII, UTF8) vagy többbájtos (UTF16) fájltartalmat olvassa. 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 a Microsoft Fabricben és SQL Analytics-végpont a Microsoft Fabricben 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 soros karaktert a JSON dokumentumok közötti elválasztóként kell használni, és nem helyezhető el a JSON dokumentum közepére.

Nem kell megadnod az FORMAT opciót, ha az út fájlkiterjesztése , .tsv, .parquet, .ldjson.parq.jsonlvagy ..csv.ndjson Például a OPENROWSET(BULK) függvény tudja, hogy a formátum parkett, az alábbi példában szereplő kiterjesztés alapján:

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

Szükséged van egy formátumfájlra, hogy meghatározd az oszloptípusokat az eredményhalmazban. Az egyetlen kivétel, ha SINGLE_CLOBmegadod , SINGLE_BLOB, vagy SINGLE_NCLOB; ebben az esetben nincs szükség formátumfájlra.

További információért a formátumfájlokról lásd: Használj egy formátumfájlt adat tömeges importjáért (SQL Server).

Az SQL Server 2017-től (14.x) kezdve az format_file_path Azure Blob Storage-ban lehet elérhető. 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. Ezzel az adatforrással relatív útvonalakat használhatsz az FORMATFILE opcióban.

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

Hozza létre a formátumfájl adatforrását .CREATE EXTERNAL DATA SOURCE A gyökér helyen kívül egyedi hitelesítő adatokat is meg tud határozni, hogy hozzáférjen az adott helyen lévő fájlokhoz.

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

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

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.
  • DATEFORMAT SET Az opciót nem tartják be.
  • 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

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

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

HIBAFÁJL

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. Ezen felül létrehoznak egy vezérlőfájlt, amelyhez van a kiterjesztés .ERROR.txt . 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

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

Megadja az első betöltendő sor számát. Az alapértelmezett érték 1. Ez az érték 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

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

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 sorrendben vannak rendezve, vagy ha megadod a UNIQUE hint és duplikátum kulcsokat, hiba jelenik meg.

Oszlop alias-ok szükségesek, amikor használod ORDER. Az oszlop alias listának hivatkoznia kell arra a származtatott táblára, amelyet a BULK záradék elér. A kluzadban megadott ORDER oszlopnevek erre az oszlop aliaslistájára vonatkoznak. Nem lehet nagy értékű típusokat (varchar(max), nvarchar(max), varbinary(max) és nagy objektumtípusokat (szöveg, ntext és kép) meghatározni.

Tartalombeállítások

SINGLE_BLOB

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

Important

XML adatokat csak az SINGLE_BLOB opcióval importálhatsz, nem SINGLE_CLOB és SINGLE_NCLOB, mert csak SINGLE_BLOB minden Windows kódolási átalakítást támogat.

SINGLE_CLOB

ASCII-ként olvassa data_file , és a tartalmat egy soros, egyoszlopos sorhalmazként adja vissza varchar(max) típusú, az aktuális adatbázis összeállításával.

SINGLE_NCLOB

Unicode-ként olvassa data_file, és a tartalmat egysoros, egyoszlopos sorhalmazként adja vissza nvarchar(max) típusú, az aktuális adatbázis összeállításával.

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

WITH sémával

A WITH séma a OPENROWSET függvény eredményhalmazát meghatározó oszlopokat adja meg. Minden visszaadott oszlop OPENROWSET definícióit tartalmazza, és vá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 hivatkozik az azonos nevű alatta lévő oszlopra.
  • Az date oszlop egy CSV vagy Parquet oszlop, illetve JSONL tulajdonságra utal, amelynek fizikai neve más.
  • Az cases oszlop a fájl harmadik oszlopára utal.
  • Az fatal_cases oszlop egy 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énysorban vissza adott oszlop OPENROWSET neve. OPENROWSETA fájloszlop azonos nevű alapoldaláról olvassa az adatokat ehhez az oszlophoz, hacsak nem írod felül az vagy <column_ordinal>-vel <column_path> . Az oszlopnévnek követnie kell az oszlopnévazonosítók szabályait.

<column_type>

Az eredményhalmaz oszlopának T-SQL-típusa. OPENROWSET az alapul szolgáló fájlból származó értékeket erre a típusra konvertálja, amikor 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>

Egy szám, amely az oszlop fizikai indexét jelöli, amely a klauzula tartozó oszlophoz WITH egyezik.

Permissions

Külső adatforrások használatához OPENROWSET a következő jogosultságokra van szükség:

  • 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él tárolófiók privát, akkor a Storage Blob Data Reader szerepében (vagy magasabb) tagságot is meg kell rendelni a fő számára a konténer- vagy tárolófiók szintjén.

Remarks

  • Egy FROM olyan záradék, amit használsz SELECT , képes táblanév helyett hívni OPENROWSET(BULK...) , teljes SELECT funkcionalitással.

  • 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. Ha nem adjuk hozzá a AS <table_alias>, akkor 491-es hibaüzenetet kapsz: "A korrelációs név meg kell határozni a tömeges sorhalmazhoz a from klauzuladékban."

  • Meg lehet határozni az oszlopos aliasokat. Ha nem jelölsz meg oszlop aliaslistát, akkor a formátumfájlnak oszlopneveknek kell lenniük. Az oszlop aliasok 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.

  • Egy SELECT...FROM OPENROWSET(BULK...) utasítás képes tömeges oszlop-aliazsokat listázni egy formátumfájl használatával, amely meghatározza az oszlopneveket és adattípusokat.

  • Ha OPENROWSET(BULK...) forrástáblaként használod az INSERT or MERGE utasításban, akkor tömegesen importálod az adatokat egy adatfájlból egy táblába. További információ: Adatok BULK INSERT importálása a SQL Server.
  • Ha az OPENROWSET BULK opciót egy INSERT állítással használod, a BULK záradék támogatja a táblázat tippeket. 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. Arról, hogy mikor rögzítik a tömeges importolás sor-behelyezési műveleteit, a tranzakciónaplóban olvasható: Előfeltételek a minimális naplózáshoz tömeges importáláshoz.
  • Amikor OPENROWSET (BULK ...) az adatokat teljes helyreállítási modellrel importálod, az 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. A biztonsági szempontokról információért lásd: Use BULK INSERT vagy OPENROWSET(BULK...) az adatok importálására az SQL Server-re.

Microsoft Fabric Data Warehouse-ben az alábbi táblázat összefoglalja a támogatott funkciókat:

Feature Supported Nem elérhető
Fájlformátumok Parquet, CSV, JSONL Delta, Azure Cosmos DB, JSON, relációs adatbázisok
Authentication Entra ID/SPN passthrough, public storage SAS/SAK, SPN, felügyelt hozzáférés
Storage Azure Blob Storage, Azure Data Lake Storage, OneLake a Microsoft Fabricben
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 nem másként jelöljük meg, az adat SQLNCHARSQLBINARY maximális hossza SQLCHARnem haladja meg a 8 000 bájtot. Ha egy LOB adatmezőbe importálsz adatokat, amely tartalmaz bármilyen varchar(max), nvarchar(max) vagy varbinary(max) objektumot, amely meghaladja a 8 000 bájtot, akkor XML formátumú fájlt kell használnod, amely meghatározza az adatmező maximális hosszát. A maximális hossz megadásához szerkesszük a formátumfájlt, és jelöld ki az 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.

Függvényeket filepath és filename fájlokat és az eredményhalmazban visszaadhat a fájlneveket és az útvonalat. Vagy használhatod őket arra, hogy adatokat szűrj a fájlnév és a mappa útvonala alapján. A következő részekben rövid leírásokat és mintákat találsz.

Fájlnév funkció

Ez a függvény adja vissza a sor fájlnevét.

A visszaküldési adattípus nvarchar(1024). Az optimális teljesítmény érdekében mindig a fájlnévfüggvény eredményét megfelelő adattípusra kell cserélni. 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 lekérdezés része OPENROWSET megadja, mely fájlokat kell 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();

A következő példa bemutatja, hogyan lehet filename() a WHERE záradékban használni a fájlok szűrésére az olvasáshoz. 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, 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 egy teljes útvonalat vagy annak egy részét ad vissza:

  • Ha paraméter nélkül hívod a filepath függvényt, az visszaadja a teljes fájlútot, amelyből egy sor indul.
  • Amikor a filepath függvényt paraméterrel hívod, az visszaadja azt az útrészt, amely megegyezik a vadkártyával a paraméterben megadott pozícióban. Például egy 1-es paraméterérték azt a részt adja vissza az útnak, amely megegyezik az első vadkártyával.

A filepath függvény visszaküldési adattípusa: nvarchar(1024). Az optimális teljesítmény érdekében mindig a függvény eredményét a megfelelő adattípusra filepath kell cserélni. 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 lekérdezés része OPENROWSET megadja, mely fájlokat kell 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;

A következő példa bemutatja, hogyan lehet filepath() a WHERE záradékban használni a fájlok szűrésére az olvasáshoz.

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. Használd az OPENROWSET adatait BULK INSERT egy varbináris (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. Van 32 bites Microsoft Text Driver (*.txt, *.csv) verzió, ami nem működik a 64 bites verzióval 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 lehet a OPENROWSET parancsot használni egy CSV fájlból az adatok betöltésére egy Azure Blob tárolóhelyen, ahol létrehoztad a SAS kulcsot. Az Azure Blob tárolóhelyét külső adatforrásként konfigurálod. Ez a folyamat egy adatbázis-alapú hitelesítő levelet igényel, amely megosztott hozzáférési aláírást (SAS) használ, amelyet a felhasználói adatbázisban található mesterkulcs titkosít.

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

A következő példa egy menedzselt identitás használatával létrehoz egy hitelesítést, létrehoz egy külső forrást, majd adatokat tölt be egy külső forráson hosztolt 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ájlhoz fér hozzá különböző helyekről, amelyek mind S3-kompatibilis objektumtárolóban tároltak:

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 megtekintheti, hogyan lehet CSV fájlból olvasni sorokat, amelyeknek egy fejlécsora és kifejezetten meghatározott terminátor karakterei vannak, amelyek elválasztják a sorokat és mezőket:

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

A következő példában megadjuk a függvény visszaadt sor OPENROWSET sémáját:

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

A következő példában a filepath() függvényt arra használjuk, hogy az URI részeit olvassuk a megfelelő fájlútról:

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 CSV fájlt olvasol egy Fabric Lakehouse-on. A fájl nevét customer.csv kapta, és a Files/Contoso/ mappában tárolják. Mivel nem adsz adatforrást vagy adatbázis-alapú hitelesítő adatokat, a Fabric SQL adatbázis az Entra ID kontextusodat használja az autentikáláshoz.

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 egy fájl olvasására egy Fabric Lakehouse-ból, és adat beillesztésére egy új táblába

Ebben a példában OPENROWSET egy Parquet fájlból származó adatokat olvashatsz .store.parquet Ezután INSERT az adatokat egy új táblába illeszted, amelynek neve Store. A Parquet fájl egy Fabric Lakehouse-ban található. Mivel nem adsz adatforrást vagy adatbázis-alapú hitelesítő adatokat, az Fabric SQL adatbázisa az Entra ID kontextusodat használja az autentikáláshoz.

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: