Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:Azure Synapse Analytics
Ez a cikk elmagyarázza, hogyan lehet használni az COPY utasítást az Azure Synapse Analytics külső tároló fiókjai betöltésére. Ez az COPY utasítás a legnagyobb rugalmasságot nyújtja a nagy áteresztőképességű adatfelvételhez az Azure Synapse Analytics-be.
Note
A Microsoft Fabric-beli Warehouse-hoz látogasson el COPY INTO.
Használja a COPY funkciót a következő képességekhez:
- Az alacsonyabb jogosultsággal rendelkező felhasználók betöltéséhez ne legyen szükség szigorú CONTROL-engedélyekre az adattárházban
- Egyetlen T-SQL-utasítás végrehajtása más adatbázis-objektumok létrehozása nélkül
- Megfelelően elemezze és töltse be azokat a CSV-fájlokat, amelyekben elválasztó (sztring, mező, sor) sztringhatárolt oszlopokban
- Adjon meg egy finomabb engedélymodellt anélkül, hogy tárfiókkulcsokat tárhat fel a Share Access Signatures (SAS) használatával
- Használj egy másik tárolófiókot a
ERRORFILEhelyhez (REJECTED_ROW_LOCATION) - Az egyes céloszlopok alapértelmezett értékeinek testreszabása és a forrásadatmezők megadása adott céloszlopokba való betöltéshez
- Egyéni sor-terminátor, mező-terminátor és mezőajánlat megadása CSV-fájlokhoz
- SQL Server-dátumformátumok használata CSV-fájlokhoz
- Helyettesítő karakterek és több fájl megadása a tárolási hely elérési útján
- Az automatikus sémafelderítés leegyszerűsíti a forrásadatok céltáblákba való definiálásának és leképezésének folyamatát
- Az automatikus táblalétrehozási folyamat automatikusan létrehozza a táblákat, és az automatikus sémafelderítés mellett működik
- Összetett adattípusok közvetlen betöltése Parquet-fájlokból, például térképekből és listákból sztringoszlopokba anélkül, hogy más eszközökkel előfeldolgoznák az adatokat
Note
Ha összetett adattípusokat szeretne betölteni a Parquet-fájlokból, az automatikus táblalétrehozásnak be kell kapcsolnia a AUTO_CREATE_TABLEhasználatával.
Az alábbi dokumentációban átfogó példákat és rövid útmutatókat találhat a COPY utasítás használatával:
- rövid útmutató: Adatok tömeges betöltése a COPY utasítással
- rövid útmutató: Példák a COPY utasítás és a támogatott hitelesítési módszerek
- rövid útmutató: A COPY utasítás létrehozása a Synapse Studio gazdag felhasználói felületi
Note
Microsoft Entra ID korábban Azure Active Directory (Azure AD) néven ismert.
Syntax
COPY INTO [ schema. ] table_name
[ (Column_list) ]
FROM '<external_location>' [ , ...n ]
WITH
(
[ FILE_TYPE = { 'CSV' | 'PARQUET' | 'ORC' } ]
[ , FILE_FORMAT = EXTERNAL FILE FORMAT OBJECT ]
[ , CREDENTIAL = (AZURE CREDENTIAL) ]
[ , ERRORFILE = ' [ http(s)://storageaccount/container ] /errorfile_directory [ / ] ] '
[ , ERRORFILE_CREDENTIAL = (AZURE CREDENTIAL) ]
[ , MAXERRORS = max_errors ]
[ , COMPRESSION = { 'Gzip' | 'DefaultCodec' | 'Snappy' } ]
[ , FIELDQUOTE = 'string_delimiter' ]
[ , FIELDTERMINATOR = 'field_terminator' ]
[ , ROWTERMINATOR = 'row_terminator' ]
[ , FIRSTROW = first_row ]
[ , DATEFORMAT = 'date_format' ]
[ , ENCODING = { 'UTF8' | 'UTF16' } ]
[ , IDENTITY_INSERT = { 'ON' | 'OFF' } ]
[ , AUTO_CREATE_TABLE = { 'ON' | 'OFF' } ]
)
Arguments
schema_name
Nem kötelező, ha a műveletet végrehajtó felhasználó alapértelmezett sémája a megadott tábla sémája. Ha nincs megadva séma , és a COPY műveletet végrehajtó felhasználó alapértelmezett sémája eltér a megadott tábla sémájától, akkor a MÁSOLÁS művelet megszakad, és hibaüzenet jelenik meg.
table_name
Annak a táblának a neve, amelybe az adatokat be szeretné másolni. A céltábla lehet ideiglenes vagy állandó tábla, és már léteznie kell az adatbázisban. Az automatikus sémaészlelési mód esetén ne adjon meg oszloplistát.
(column_list)
Egy vagy több oszlop választható listája, amellyel a forrásadatmezőket az adatok betöltésére szolgáló táblázatoszlopokra képezheti le.
Ne adjon meg column_listAUTO_CREATE_TABLE = 'ON'.
column_list zárójelek közé kell tenni, és vesszővel kell elválasztani. Az oszloplista formátuma a következő:
[(Column_name [alapértelmezett Default_value] [Field_number] [,... n])]
- Column_name – a céltábla oszlopának neve.
- Default_value – az alapértelmezett érték, amely a bemeneti fájl bármely NULL értékét lecseréli. Az alapértelmezett érték az összes fájlformátumra érvényes. A COPY megkísérli betölteni a NULL értéket a bemeneti fájlból, ha egy oszlop ki van hagyva az oszloplistából, vagy ha üres bemeneti fájlmező van. Az alapértelmezett érték megelőzi az "alapértelmezett" kulcsszót
- Field_number – a céloszlopra leképezett bemeneti fájl mezőszáma.
- A mezőindexelés 1-nél kezdődik.
Ha nincs megadva oszloplista, a COPY a forrás és a cél sorrend alapján leképezi az oszlopokat: Az 1. bemeneti mező az 1. céloszlopra, a 2. mező a 2. oszlopra kerül stb.
Külső helyek
Itt vannak az adatokat tartalmazó fájlok. Jelenleg az Azure Data Lake Storage (ADLS) Gen2 és az Azure Blob Storage támogatott:
-
Blob Storage külső helyének:
https://<account\>.blob.core.windows.net/<container\>/<path\> -
2. generációs ADLS külső helyének:
https://<account\>.dfs.core.windows.net/<container\>/<path\>
Note
A .blob végpont az ADLS Gen2-hez is elérhető, és jelenleg a legjobb teljesítményt nyújtja. Használja a .blob végpontot, ha .dfs nincs szükség a hitelesítési módszerhez.
Fiók – A tárfiók neve
Tároló – A blobtároló neve
Elérési út – az adatok mappája vagy fájl elérési útja. A hely a tárolóból indul ki. Ha egy mappa meg van adva, a COPY lekéri az összes fájlt a mappából és annak almappáiból. A COPY figyelmen kívül hagyja a rejtett mappákat, és nem ad vissza aláhúzással (
_) vagy ponttal (.) kezdődő fájlokat, kivéve, ha az elérési út kifejezetten meg van adva. Ez a viselkedés akkor is ugyanaz, ha helyettesítő karaktert tartalmazó elérési utat ad meg.
A helyettesítő kártyákat az elérési út tartalmazza, ahol
- A helyettesítő karakterek elérési útjának egyezése megkülönbözteti a kis- és nagybetűk nevét
- A helyettesítő karakterek a fordított perjel karakterrel (
\) szökhetnek meg - A helyettesítő karakterek kiterjesztése rekurzív módon történik. Az alábbi példában például az összes CSV-fájl
Customer1(beleértve azCustomer1alkönyvtárakat is) betöltődik:Account/Container/Customer1/*.csv
Note
A legjobb teljesítmény érdekében ne adjon meg olyan helyettesítő karaktereket, amelyek nagyobb számú fájlra bontanának ki. Ha lehetséges, helyettesítő karakterek megadása helyett listázz több fájlhelyet.
Több fájlhely csak ugyanabból a tárfiókból és tárolóból adható meg vesszővel tagolt listában, például:
-
https://<account>.blob.core.windows.net/<container\>/<path\>,https://<account\>.blob.core.windows.net/<container\>/<path\>
FILE_TYPE = { 'CSV' | "PARQUET" | "ORC" }
FILE_TYPE a külső adatok formátumát adja meg.
- CSV: A RFC 4180 szabványnak megfelelő vesszővel tagolt értékfájlt ad meg.
- PARQUET: Parquet formátumot ad meg.
- ORC: Optimalizált soroszlopos (ORC) formátumot ad meg.
Note
A PolyBase "Elhatárolt szöveg" fájltípusát a "CSV" fájlformátum váltja fel, ahol az alapértelmezett vesszőelválasztó konfigurálható a FIELDTERMINATOR paraméterrel.
FILE_FORMAT = external_file_format_name
FILE_FORMAT csak Parquet- és ORC-fájlokra vonatkozik, és megadja annak a külső fájlformátum objektumnak a nevét, amely a külső adatok fájltípusát és tömörítési módját tárolja. Külső fájlformátum létrehozásához használja CREATE EXTERNAL FILE FORMAT.
HITELESÍTŐ ADATOK (IDENTITY = '', SECRET = '')
CREDENTIAL határozza meg a külső tárfiók eléréséhez szükséges hitelesítési mechanizmust. A hitelesítési módszerek a következők:
| CSV | Parquet | ORC | |
|---|---|---|---|
| Azure Blob-tároló | SAS/MSI/SZOLGÁLTATÁSNÉV/KULCS/Entra | SAS/KEY | SAS/KEY |
| Azure Data Lake Gen2 | SAS/MSI/SZOLGÁLTATÁSNÉV/KULCS/Entra | SAS ( blob 1 )/MSI (dfs 2 )/SERVICE PRINCIPAL/KEY/Entra | SAS ( blob 1 )/MSI (dfs 2 )/SERVICE PRINCIPAL/KEY/Entra |
1 A külső hely elérési útjának blob végpontja (.blob.core.windows.net) szükséges ehhez a hitelesítési módszerhez.
2 A külső hely elérési útjának dfs végpontja (.dfs.core.windows.net) szükséges ehhez a hitelesítési módszerhez.
Note
- A Microsoft Entra ID vagy egy nyilvános tárfiók hitelesítésekor nem szükséges megadni a CREDENTIAL-t.
- Ha a tárfiók virtuális hálózathoz van társítva, felügyelt identitással kell hitelesítenie magát.
Hitelesítés közös hozzáférésű jogosultságkódokkal (SAS)
- IDENTITÁS: "Közös hozzáférésű jogosultságkód" értékkel rendelkező állandó
- TITKOS KÓD: Amegosztott hozzáférésű jogosultságkóddelegált hozzáférést biztosít a tárfiók erőforrásaihoz.
Minimálisan szükséges engedélyek: READ és LIST
Hitelesítés szolgáltatásnevek
- IDENTITÁS: <ClientID>@<OAuth_2.0_Token_EndPoint>
- SECRET: A Microsoft Entra alkalmazásszolgáltatás főkulcsa
Minimális RBAC-szerepkörök szükségesek: Storage-blobadatok közreműködője, Storage-blobadatok közreműködője, Storage-blobadatok tulajdonosa vagy Storage-blobadat-olvasó
Hitelesítés a Storage-fiók kulccsal
- IDENTITY: Egy "Storage Account Key" értékkel rendelkező állandó
SECRET: Tárfiókkulcs
Hitelesítés felügyelt identitás (VNet-szolgáltatásvégpontok)
- IDENTITÁS: "Felügyelt identitás" értékkel rendelkező állandó
Minimális RBAC-szerepkörök szükségesek: Storage-blobadatok közreműködője vagy Storage-blobadatok tulajdonosa a Microsoft Entra által regisztrált logikai kiszolgálóhoz az Azure. A Synapse-munkaterülethez nem társított dedikált SQL-készlet (korábbi nevén SQL DW) használatakor ez az RBAC-szerepkör nem szükséges, de a felügyelt identitáshoz hozzáférés-vezérlési lista (ACL) engedély szükséges a célobjektumokon a forrásfájlok olvasási hozzáférésének engedélyezéséhez
Hitelesítés Microsoft Entra-felhasználóval
- CREDENTIAL nem szükséges
Minimális RBAC-szerepkörök szükségesek: Storage-blobadatok közreműködője vagy Storage-blobadatok tulajdonosa a Microsoft Entra-felhasználó számára
ERRORFILE = Címtárhely
ERRORFILE csak a CSV-ra vonatkozik. A COPY utasítás azon könyvtárát adja meg, amelyben az elutasított sorokat és a megfelelő hibafájlt meg kell írni. Megadhatja a tárfiók teljes elérési útját, vagy megadhatja a tárolóhoz viszonyított elérési utat. Ha a megadott elérési út nem létezik, az Ön nevében jön létre egy. A rendszer létrehoz egy gyermekkönyvtárat a névvel _rejectedrows. A _ karakter biztosítja, hogy a könyvtár más adatfeldolgozáshoz is meg legyen szökve, kivéve, ha a helyparaméter kifejezetten el van nevezve.
Note
Ha relatív elérési utat ad át ERRORFILE, az elérési út a external_location.
Ebben a könyvtárban létrejön egy mappa a betöltési idő alapján YearMonthDay -HourMinuteSecond formátumban (pl. 20180330-173205). Ebben a mappában kétféle fájltípus van megírva, az ok (hiba) fájl és az adatfájl (Sor) minden egyes előalkalmazása a queryID, a distributionID és a fájl guid azonosítójával. Mivel az adatok és az ok külön fájlokban találhatók, a megfelelő fájloknak egyező előtagjuk van.
Ha az ERRORFILE a tárfiók teljes elérési útját definiálja, akkor a ERRORFILE_CREDENTIAL a rendszer a tárhoz való csatlakozáshoz használja. Ellenkező esetben a hitelesítő adatokhoz megadott értéket használja a rendszer. Ha a forrásadatokhoz használt hitelesítő adatokat az ERRORFILE-hoz használják, a ERRORFILE_CREDENTIAL vonatkozó korlátozások is érvényesek
ERRORFILE_CREDENTIAL = (IDENTITÁS= '', TITOK = '')
ERRORFILE_CREDENTIAL csak CSV-fájlokra vonatkozik. A támogatott adatforrás- és hitelesítési módszerek a következők:
Azure Blob Storage – SAS/SERVICE PRINCIPAL/Entra
Azure Data Lake Gen2 – SAS/MSI/SZOLGÁLTATÁSNÉV/Entra
Hitelesítés közös hozzáférésű jogosultságkódokkal (SAS)
- IDENTITÁS: "Közös hozzáférésű jogosultságkód" értékkel rendelkező állandó
- TITKOS KÓD: Amegosztott hozzáférésű jogosultságkóddelegált hozzáférést biztosít a tárfiók erőforrásaihoz.
Minimálisan szükséges engedélyek: OLVASÁS, LISTA, ÍRÁS, LÉTREHOZÁS, TÖRLÉS
Hitelesítés szolgáltatásnevek
- IDENTITÁS: <ClientID>@<OAuth_2.0_Token_EndPoint>
- SECRET: A Microsoft Entra alkalmazásszolgáltatás főkulcsa
Minimális RBAC-szerepkörök szükségesek: Storage-blobadatok közreműködője vagy Storage-blobadatok tulajdonosa
Note
Az OAuth 2.0 tokenvégpont használata V1
Hitelesítés felügyelt identitás (VNet-szolgáltatásvégpontok)
- IDENTITÁS: "Felügyelt identitás" értékkel rendelkező állandó
Minimális RBAC-szerepkörök szükségesek: Storage-blobadatok közreműködője vagy Storage-blobadatok tulajdonosa a Microsoft Entra regisztrált SQL Database-kiszolgálóhoz
Hitelesítés Microsoft Entra-felhasználóval
- CREDENTIAL nem szükséges
Minimális RBAC-szerepkörök szükségesek: Storage-blobadatok közreműködője vagy Storage-blobadatok tulajdonosa a Microsoft Entra-felhasználó számára
A tárfiókkulcs használata ERRORFILE_CREDENTIAL nem támogatott.
Note
Ha ugyanazt a tárfiókot használja az ERRORFILE-hoz, és megadja az ERRORFILE elérési útját a tároló gyökeréhez képest, nem kell megadnia a ERROR_CREDENTIAL.
MAXERRORS = max_errors
MAXERRORS a másolási művelet meghiúsulása előtt engedélyezett elvetési sorok maximális számát adja meg. A COPY művelettel nem importálható sorokat a rendszer figyelmen kívül hagyja, és egyetlen hibának számít. Ha nincs megadva max_errors, az alapértelmezett érték 0.
MAXERRORS nem használható AUTO_CREATE_TABLE.
Ha FILE_TYPE van PARQUET, az adattípus-konverziós hibák (például a Parquet bináris sql-egész szám) által okozott kivételek továbbra is COPY INTO meghiúsulnak, figyelmen kívül hagyva a MAXERRORS függvényt.
COMPRESSION = { 'DefaultCodec ' | "Snappy" | "GZIP" | 'NONE'}
TÖMÖRÍTÉSi megadása nem kötelező, és megadja a külső adatok adattömörítési módszerét.
- A CSV támogatja a GZIP-t
- A Parquet támogatja a GZIP-t és a Snappy-t
- Az ORC támogatja a DefaultCodec és a Snappy protokollt.
- A Zlib az ORC alapértelmezett tömörítése
A COPY parancs automatikusan észleli a tömörítés típusát a fájlkiterjesztés alapján, ha ez a paraméter nincs megadva:
-
.gz- GZIP -
.snappy- Rámenős -
.deflate- DefaultCodec (csak parquet és ORC)
A COPY parancs megköveteli, hogy a gzip-fájlok ne tartalmazzanak semmilyen záró szemetet a normál működéshez. A gzip formátum szigorúan megköveteli, hogy a fájlok érvényes tagokból legyenek összeállítva anélkül, hogy további információk kellenek az előttük, közöttük vagy utánuk. Az ettől a formátumtól való bármely eltérés, például a záró, nem gzip adatok jelenléte a COPY parancs meghibásodását eredményezi. Győződjön meg arról, hogy a gzip-fájlok végén nincs záró szemét, hogy a COPY sikeresen feldolgozhassa ezeket a fájlokat.
FIELDQUOTE = "field_quote"
FIELDQUOTE a CSV-ra vonatkozik, és egyetlen karaktert határoz meg, amelyet a CSV-fájlban idézőjelként (sztringelválasztóként) használnak. Ha nincs megadva, a rendszer az RFC 4180 szabványban meghatározott idézőjelként (") használja. A FIELDQUOTE esetében is támogatott a hexadecimális jelölés. A kiterjesztett ASCII- és több bájtos karakterek nem támogatottak a FIELDQUOTE UTF-8-jával.
Note
A MEZŐKVÓTA karakterek sztringoszlopokban vannak megszűrve, ahol kettős MEZŐKvótát (elválasztó) jelenik meg.
FIELDTERMINATOR = "field_terminator"
FIELDTERMINATOR Csak CSV-ra vonatkozik. A CSV-fájlban használt mező-terminátort adja meg. A mező terminátora hexadecimális jelöléssel adható meg. A mezőkifejezés több karakterből állhat. Az alapértelmezett mező terminátora egy (,). A kiterjesztett ASCII- és több bájtos karakterek nem támogatottak a FIELDTERMINATOR UTF-8-jával.
SORTERMINÁTOR = 'row_terminator'
SOR TERMINATOR Csak a CSV-ra vonatkozik. Megadja a CSV-fájlban használt sor terminátorát. A sor terminátora hexadecimális jelöléssel adható meg. A sor terminátora több karakterből állhat. Alapértelmezés szerint a sor terminátora \r\n.
A COPY parancs előtagja a \r karakter, amikor \n (új vonal) megadásával \r\n. Ha csak a \n karaktert szeretné megadni, használja a hexadecimális jelölést (0x0A). Ha hexadecimális több karakterből álló sor terminátorokat ad meg, ne adjon meg 0x értéket az egyes karakterek között.
A kiterjesztett ASCII- és több bájtos karakterek nem támogatottak az UTF-8 esetében a ROW TERMINATOR esetében.
ELSŐ SOR = First_row_int
FIRSTROW a CSV-ra vonatkozik, és megadja a COPY parancs összes fájljában elsőként beolvasott sorszámot. Az értékek 1-től kezdődnek, ez az alapértelmezett érték. Ha az érték két értékre van állítva, az adatok betöltésekor minden fájl (fejlécsor) első sora ki lesz hagyva. A sorok kihagyása a sorkifejezők meglétén alapul.
DATEFORMAT = { 'mdy' | 'dmy' | "ymd" | "ydm" | 'myd' | 'dym' }
A DATEFORMAT csak a CSV-ra vonatkozik, és az SQL Server dátumformátumaihoz való dátumleképezés dátumformátumát adja meg. Az összes Transact-SQL dátum- és időadattípus és -függvény áttekintése: Dátum- és időadattípusok és függvények (Transact-SQL). A DATEFORMAT a COPY parancson belül elsőbbséget élvez munkamenet szintjén konfigurált DATEFORMAT paranccsal szemben.
KÓDOLÁS = "UTF8" | "UTF16"
KÓDOLÁSI csak a CSV-re vonatkozik. Az alapértelmezett érték az UTF8. Megadja a COPY parancs által betöltött fájlok adatkódolási szabványát.
IDENTITY_INSERT = 'ON' | "KI"
IDENTITY_INSERT megadja, hogy az importált adatfájl identitásértékét vagy értékeit kell-e használni az identitásoszlophoz. Ha IDENTITY_INSERT ki van kapcsolva (alapértelmezett), az oszlop identitásértékeinek ellenőrzése, de importálása nem történik meg. Figyelje meg az alábbi viselkedést a COPY paranccsal:
- Ha IDENTITY_INSERT ki van kapcsolva, és a tábla identitásoszlopot tartalmaz
- Olyan oszloplistát kell megadni, amely nem képez le bemeneti mezőt az identitásoszlophoz.
- Ha IDENTITY_INSERT be van kapcsolva, és a tábla identitásoszlopot tartalmaz
- Ha egy oszloplista átadva van, egy bemeneti mezőt kell hozzárendelnie az identitásoszlophoz.
- Az alapértelmezett érték nem támogatott az oszloplistában szereplő IDENTITY COLUMN oszlop esetében.
- IDENTITY_INSERT egyszerre csak egy táblához állítható be.
Az Azure Synapse Analytics automatikusan egyedi értékeket rendel hozzá a tábla létrehozása során megadott mag- és növekményértékek alapján.
AUTO_CREATE_TABLE = { 'ON' | "KI" }
AUTO_CREATE_TABLE megadja, hogy a tábla automatikusan létrejön-e az automatikus sémafelderítéssel együtt. Csak Parquet-fájlokhoz érhető el.
- BE: Automatikus táblalétrehozás engedélyezése. A
COPY INTOfolyamat automatikusan létrehoz egy új táblát azáltal, hogy felfedezi a betöltendő fájl szerkezetét. A parquet-fájlok automatikus sémafelderítésének előnyeinek kihasználásához használhatja az előre meglevő táblákat is. - KI: Az automatikus táblalétrehozás nincs engedélyezve. Default.
Note
Az automatikus táblalétrehozás az automatikus sémafelderítéssel együtt működik. Az automatikus táblalétrehozás alapértelmezés szerint NEM engedélyezett.
Permissions
A COPY parancsot végrehajtó felhasználónak a következő engedélyekkel kell rendelkeznie:
A TÖMEGES MŰVELETEK BESZÚRÁSA és FELÜGYELETE engedélyre van szükség. Az Azure Synapse Analyticsben az INSERT és a ADMIN ADATBÁZIS TÖMEGES MŰVELETEK engedélyére van szükség.
Emellett ha a COPY parancsot végrehajtó felhasználó új táblát is létre kíván hozni, és adatokat szeretne betölteni a táblába, akkor a CREATE TABLE és az ALTER ON SCHEMA engedélyre van szükségük.
Ha például engedélyezni szeretné, hogy mike@contoso.com a COPY használatával hozzon létre egy új táblát a HR sémában, és beszúrja az adatokat egy Parquet-fájlból, használja az alábbi Transact-SQL mintát:
GRANT ADMINISTER DATABASE BULK OPERATIONS to [mike@contoso.com];
GRANT INSERT to [mike@contoso.com];
GRANT CREATE TABLE to [mike@contoso.com];
GRANT ALTER on SCHEMA::HR to [mike@contoso.com];
Remarks
A COPY utasítás csak UTF-8 és UTF-16 érvényes karaktereket fogad el a soradatokhoz és a parancsparaméterekhez. Az érvénytelen karaktereket használó forrásfájlokat vagy paramétereket (például SOR TERMINATOR vagy MEZŐ TERMINATOR) helytelenül értelmezheti a COPY utasítás, és váratlan eredményeket, például adatsérülést vagy egyéb hibákat okozhat. A COPY utasítás meghívása előtt győződjön meg arról, hogy a forrásfájlok és paraméterek UTF-8 vagy UTF-16 kompatibilisek.
A MAXDOP lekérdezési tipp nem támogatott .COPY INTO
A megbízható végrehajtás érdekében a forrásfájloknak és mappáknak a művelet teljes időtartama alatt változatlannak kell maradniuk COPY INTO .
- A hivatkozott fájlok vagy mappák módosítása, törlése vagy cseréje a parancs futtatása közben a művelet sikertelenségéhez vagy inkonzisztens adatbetöltéshez vezethet.
- A végrehajtás
COPY INTOelőtt ellenőrizze, hogy az összes forrásadat stabil-e, és nem változik-e a folyamat során.
Examples
A. Betöltés nyilvános tárfiókból
A következő példa a parancs legegyszerűbb formája COPY , amely adatokat tölt be egy nyilvános tárolófiókról. Ebben a példában a COPY utasítás alapértelmezett értéke megegyezik a sorelem csv fájljának formátumával.
COPY INTO dbo.[lineitem]
FROM 'https://unsecureaccount.blob.core.windows.net/customerdatasets/folder1/lineitem.csv'
WITH (FIELDTERMINATOR = '|')
A COPY parancs alapértelmezett értékei a következők:
DATEFORMAT = Session DATEFORMAT
MAXERRORS = 0
A TÖMÖRÍTÉS alapértelmezett beállítása nincs tömörítve
FIELDQUOTE = """
FIELDTERMINATOR = ','
ROWTERMINATOR = '\n'
Important
A COPY belső \n kezeli a \r\n. További információkért lásd a ROWTERMINATOR szakaszt.
ELSŐ SOR = 1
KÓDOLÁS = 'UTF8'
FILE_TYPE = "CSV"
IDENTITY_INSERT = "KI"
B. Hitelesítés betöltése megosztási jogosultságkód (SAS) használatával
Az alábbi példa sor-terminátorként, például UNIX-kimenetként tölti be a sorcsatornát használó fájlokat. Ez a példa saskulcsot is használ az Azure Blob Storage-ban való hitelesítéshez.
COPY INTO test_1
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='<Your_SAS_Token>'),
--CREDENTIAL should look something like this:
--CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='?sv=2018-03-28&ss=bfqt&srt=sco&sp=rl&st=2016-10-17T20%3A14%3A55Z&se=2021-10-18T20%3A19%3A00Z&sig=IEoOdmeYnE9%2FKiJDSHFSYsz4AkNa%2F%2BTx61FuQ%2FfKHefqoBE%3D'),
FIELDQUOTE = '"',
FIELDTERMINATOR=';',
ROWTERMINATOR='0X0A',
ENCODING = 'UTF8',
DATEFORMAT = 'ymd',
MAXERRORS = 10,
ERRORFILE = '/errorsfolder',--path starting from the storage container
IDENTITY_INSERT = 'ON'
)
C. Betöltés olyan oszloplistával, amely alapértelmezett értékekkel hitelesíti a tárfiókkulcsot
Ez a példa betölti az alapértelmezett értékeket tartalmazó oszloplistát meghatározó fájlokat.
--Note when specifying the column list, input field numbers start from 1
COPY INTO test_1 (Col_one default 'myStringDefault' 1, Col_two default 1 3)
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET='<Your_Account_Key>'),
--CREDENTIAL should look something like this:
--CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET='x6RWv4It5F2msnjelv3H4DA80n0PQW0daPdw43jM0nyetx4c6CpDkdj3986DX5AHFMIf/YN4y6kkCnU8lb+Wx0Pj+6MDw=='),
FIELDQUOTE = '"',
FIELDTERMINATOR=',',
ROWTERMINATOR='0x0A',
ENCODING = 'UTF8',
FIRSTROW = 2
)
D. Parquet vagy ORC betöltése meglévő fájlformátum-objektum használatával
Ez a példa helyettesítő karakterrel tölti be az összes Parquet-fájlt egy mappába.
COPY INTO test_parquet
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/*.parquet'
WITH (
FILE_FORMAT = myFileFormat,
CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='<Your_SAS_Token>')
)
E. Helyettesítő kártyák és több fájl betöltése
COPY INTO t1
FROM
'https://myaccount.blob.core.windows.net/myblobcontainer/folder0/*.txt',
'https://myaccount.blob.core.windows.net/myblobcontainer/folder1'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL=(IDENTITY= '<client_id>@<OAuth_2.0_Token_EndPoint>',SECRET='<key>'),
FIELDTERMINATOR = '|'
)
F. Betöltés MSI-hitelesítő adatokkal
COPY INTO dbo.myCOPYDemoTable
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder0/*.txt'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL = (IDENTITY = 'Managed Identity'),
FIELDQUOTE = '"',
FIELDTERMINATOR=','
)
G. Betöltés automatikus sémaészlelés használatával
COPY INTO [myCOPYDemoTable]
FROM 'https://myaccount.blob.core.windows.net/customerdatasets/folder1/lineitem.parquet'
WITH (
FILE_TYPE = 'Parquet',
CREDENTIAL = ( IDENTITY = 'Shared Access Signature', SECRET='<key>'),
AUTO_CREATE_TABLE = 'ON'
)
GYIK
Mi a COPY parancs teljesítménye a PolyBase-hez képest?
A COPY parancs a számítási feladattól függően jobb teljesítménnyel rendelkezik.
A tömörített fájlok nem oszthatók fel automatikusan. A legjobb betöltési teljesítmény érdekében fontolja meg a bemenet több fájlra való felosztását tömörített CSV-k betöltésekor.
A nagy tömörítetlen CSV-fájlok automatikusan feloszthatók és párhuzamosan tölthetők be, így a legtöbb esetben nincs szükség a tömörítetlen CSV-fájlok manuális felosztására. Bizonyos esetekben, amikor az automatikus fájlfelosztás az adatjellemzők miatt nem lehetséges, a nagy CSV-k manuális felosztása továbbra is előnyös lehet a teljesítmény szempontjából.
Mi a tömörített CSV-fájlok betöltésére szolgáló COPY parancs fájlmegosztási útmutatója?
A fájlok számával kapcsolatos útmutatást az alábbi táblázat ismerteti. A javasolt fájlok számának elérése után jobb teljesítményt érhet el, minél nagyobb a fájlok száma. A fájlok számát a számítási csomópontok száma és 60 szorzata határozza meg. A 6000DWU-nál például 12 számítási csomópont és 12*60 = 720 partíció van. Az egyszerű fájlmegosztási élményért tekintse meg A MÁSOLÁSi terhelés átviteli sebességének maximalizálása fájlmegosztásokkal.
| DWU | #Files |
|---|---|
| 100 | 60 |
| 200 | 60 |
| 300 | 60 |
| 400 | 60 |
| 500 | 60 |
| 1,000 | 120 |
| 1,500 | 180 |
| 2,000 | 240 |
| 2,500 | 300 |
| 3,000 | 360 |
| 5,000 | 600 |
| 6,000 | 720 |
| 7,500 | 900 |
| 10,000 | 1200 |
| 15,000 | 1800 |
| 30,000 | 3600 |
Mi az a fájlmegosztási útmutató a COPY parancs parquet- vagy ORC-fájlok betöltéséhez?
Nincs szükség parquet- és ORC-fájlok felosztására, mert a COPY parancs automatikusan felosztja a fájlokat. A legjobb teljesítmény érdekében az Azure Storage-fiók parquet- és ORC-fájljainak 256 MB-nak vagy nagyobbnak kell lenniük.
Vannak korlátozások a fájlok számára vagy méretére?
Nincsenek korlátozások a fájlok számára vagy méretére; A legjobb teljesítmény érdekében azonban legalább 4 MB méretű fájlokat ajánlunk. Emellett a jobb teljesítmény érdekében korlátozza a forrásfájlok számát legfeljebb 5000 fájlra.
Vannak ismert problémák a COPY utasítással kapcsolatban?
Ha 2020. december 7. előtt létrehozott Azure Synapse-munkaterülete van, hasonló hibaüzenet jelenhet meg a felügyelt identitások hitelesítésekor: com.microsoft.sqlserver.jdbc.SQLServerException: Managed Service Identity has not been enabled on this server. Please enable Managed Service Identity and try again.
A probléma megoldásához kövesse az alábbi lépéseket a munkaterület felügyelt identitásának újbóli regisztrálásával:
- Telepítse az Azure PowerShellt. Tekintse meg PowerShell-telepítése című témakört.
- A munkaterület felügyelt identitásának regisztrálása a PowerShell használatával:
Connect-AzAccount Select-AzSubscription -SubscriptionId <subscriptionId> Set-AzSqlServer -ResourceGroupName your-database-server-resourceGroup -ServerName your-SQL-servername -AssignIdentity
Kapcsolódó tartalom
A következőkre vonatkozik:Warehouse a Microsoft Fabric
Ez a cikk azt ismerteti, hogyan használhatja a COPY utasítást a Microsoft Fabric warehouse-ban külső tárfiókokból való betöltéshez. A COPY utasítás biztosítja a legnagyobb rugalmasságot a nagy átviteli sebességű adatbetöltéshez a Raktárban, és olyan stratégia, amely adatokat a Raktár.
A Microsoft Fabricben a COPY (Transact-SQL) utasítás jelenleg támogatja a PARQUET- és CSV-fájlformátumokat. Az adatforrások esetében az Azure Data Lake Storage Gen2-fiókok és a OneLake-források támogatottak.
További információért a COPY INTO Microsoft Fabric-ben való használatról lásd: Adatfelvétel a raktárba a COPY utasítással.
Alapértelmezés szerint COPY INTO a hitelesítés a végrehajtó Entra-azonosító felhasználójaként történik.
A következő képességek felhasználása COPY :
- Az alacsonyabb jogosultsággal rendelkező felhasználók betöltéséhez ne legyen szükség szigorú CONTROL-engedélyekre az adattárházban.
- Egyetlen T-SQL-utasítás végrehajtása anélkül, hogy más adatbázis-objektumokat kellene létrehoznia.
- Megfelelően elemezze és töltse be azokat a CSV-fájlokat, amelyekben elválasztó (sztring, mező, sor) sztringhatárolt oszlopokban.
- Adjon meg egy finomabb engedélymodellt anélkül, hogy tárfiókkulcsokat tárhat fel a Share Access Signatures (SAS) használatával.
- Használj egy másik tárolófiókot a
ERRORFILEhelyszínhez (REJECTED_ROW_LOCATION). - Szabja testre az egyes céloszlopok alapértelmezett értékeit, és adja meg a forrásadatmezőket, hogy betöltődjenek adott céloszlopokba.
- Határozz meg egyedi sorterminátort, mező terminátort és mezőidézetet CSV fájlokhoz.
- Adjon meg helyettesítő karaktereket és több fájlt a tárolási hely elérési útján.
- További információ az adatbetöltési lehetőségekről és az ajánlott eljárásokról: adatok betöltése a raktárba a COPY utasításhasználatával.
Syntax
COPY INTO [ warehouse_name. ] [ schema_name. ] table_name
[ (Column_list) ]
FROM '<external_location>' [ , ...n ]
WITH
(
[ FILE_TYPE = { 'CSV' | 'PARQUET' } ]
[ , CREDENTIAL = (AZURE CREDENTIAL) ]
[ , ERRORFILE = ' [ http(s)://storageaccount/container ] /errorfile_directory [ / ] ] '
[ , ERRORFILE_CREDENTIAL = (AZURE CREDENTIAL) ]
[ , MAXERRORS = max_errors ]
[ , COMPRESSION = { 'Gzip' | 'Snappy' } ]
[ , FIELDQUOTE = 'string_delimiter' ]
[ , FIELDTERMINATOR = 'field_terminator' ]
[ , ROWTERMINATOR = 'row_terminator' ]
[ , FIRSTROW = first_row ]
[ , DATEFORMAT = 'date_format' ]
[ , ENCODING = { 'UTF8' | 'UTF16' } ]
[ , PARSER_VERSION = { '1.0' | '2.0' } ]
[ , MATCH_COLUMN_COUNT = { 'ON' | 'OFF' } ]
)
Arguments
warehouse_name
Nem kötelező, ha a műveletet végrehajtó felhasználó aktuális raktára a megadott tábla raktára. Ha a raktár nincs megadva, és a megadott séma és tábla nem létezik a jelenlegi raktáron, COPY akkor meghibás, és hibaüzenet jelenik meg.
schema_name
Nem kötelező, ha a műveletet végrehajtó felhasználó alapértelmezett sémája a megadott tábla sémája. Ha a séma nincs megadva, és a műveletet végrehajtó COPY felhasználó alapértelmezett sémája eltér a megadott tábla sémától, COPY akkor töröljük, és hibaüzenet érkezik.
table_name
Az adat táblájának COPY neve. A céltáblának már léteznie kell a raktárban.
(column_list)
Egy vagy több oszlop választható listája, amellyel a forrásadatmezőket az adatok betöltésére szolgáló táblázatoszlopokra képezheti le.
column_list zárójelek közé kell tenni, és vesszővel kell elválasztani. Az oszloplista formátuma a következő:
[(Column_name [alapértelmezett Default_value] [Field_number] [,... n])]
- Column_name – a céltábla oszlopának neve.
-
Default_value – az alapértelmezett érték, amely bármelyik
NULLbemeneti fájl értékét helyettesíti. Az alapértelmezett érték az összes fájlformátumra érvényes.COPYmegpróbál betölteniNULLa bemeneti fájlból, ha egy oszlopot kihagynak az oszloplistából, vagy amikor üres bemeneti fájlmező van. Az alapértelmezett értéket az "alapértelmezett" kulcsszó előzi meg - Field_number – A céloszlophoz hozzárendelt bemeneti fájl mezőszáma.
- A mezőindexelés 1-nél kezdődik.
Ha column_list nincs megadva, COPY az oszlopokat a forrás- és célsorrend alapján képezi le: az 1-es bemeneti mező az 1-es céloszlopba, a 2-es mező a 2-es oszlopba, stb.
Note
Ha Parquet-fájlokat használ a Microsoft Fabric warehouse-ban, az oszlopneveknek pontosan meg kell egyeznie a forrásban és a célhelyen. Ha a céltábla oszlopának neve eltér a parquet-fájlban lévő oszlop nevéétől, a céltábla oszlopa NULL értékkel van kitöltve.
Ha egy oszloplista nincs megadva, COPY az oszlopokat a forrás- és célsorrend alapján képezi le: az 1-es bemeneti mező az 1-es céloszlopba, a 2-es mező a 2-es oszlopba, stb.
Külső hely
Itt adhatja meg, hogy az adatokat tartalmazó fájlok hol vannak előkészített állapotban. Jelenleg az Azure Data Lake Storage (ADLS) Gen2, az Azure Blob Storage és a OneLake (előzetes verzió) támogatott:
-
Blob Storage külső helyének:
https://<account\>.blob.core.windows.net/<container\>/<path\> -
2. generációs ADLS külső helyének:
https://<account\>.dfs.core.windows.net/<container\>/<path\> - A OneLake külső helye (előzetes verzió):
https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/
Az Azure Data Lake Storage (ADLS) Gen2 jobb teljesítményt nyújt, mint az Azure Blob Storage (örökölt). Amikor csak lehetséges, fontolja meg egy ADLS Gen2-fiók használatát.
Note
A .blob végpont az ADLS Gen2-hez is elérhető, és jelenleg a legjobb teljesítményt nyújtja. Használja a blob végpontot, ha dfs nincs szükség a hitelesítési módszerhez.
Fiók – A tárfiók neve
Tároló – A blobtároló neve
Elérési út – az adatok mappája vagy fájl elérési útja. A hely a tárolóból indul ki. Ha egy mappa van megadva,
COPYaz összes fájlt visszanyeri a mappából és annak almappáiból.COPYfigyelmen kívül hagyja a rejtett mappákat, és nem adja vissza azokat a fájlokat, amelyek aláhúzóval (_) vagy ponttal (.) kezdődnek, hacsak az út kifejezetten nem jelöli. Ez a viselkedés akkor is ugyanaz, ha helyettesítő karaktert tartalmazó elérési utat ad meg.
Helyettesítő karakterek is szerepelhetnek az elérési úton, ahol
- A helyettesítő karakterek elérési útjának egyezése megkülönbözteti a kis- és nagybetűk nevét
- A helyettesítő karakterek a fordított perjel karakterrel (
\) szökhetnek meg
Note
A legjobb teljesítmény érdekében ne adjon meg olyan helyettesítő karaktereket, amelyek nagyobb számú fájlra bontanának ki. Ha lehetséges, helyettesítő karakterek megadása helyett listázz több fájlhelyet.
Több fájlhely csak ugyanabból a tárfiókból és tárolóból adható meg vesszővel tagolt listában, például:
https://<account>.blob.core.windows.net/<container\>/<path\>, https://<account\>.blob.core.windows.net/<container\>/<path\>
tűzfal mögötti külső helyek
A tűzfal mögötti Azure Data Lake Storage (ADLS) Gen2- és Azure Blob Storage-helyeken található fájlok eléréséhez a következő előfeltételek érvényesek:
- Ki kell létesíteni egy munkaterületi identitást a raktárat üzemeltető munkaterülethez. A munkaterületi identitás beállításáról további információt Munkaterületi identitáscímű témakörben talál.
- Az Entra-azonosító fióknak képesnek kell lennie a munkaterületi identitás használatára.
- Az Entra-azonosító fiókjának hozzáféréssel kell rendelkeznie a mögöttes fájlokhoz Azure szerepköralapú hozzáférés-vezérlési (RBAC) vagy data lake ACL-keresztül.
- A raktárt üzemeltető Fabric-munkaterületet hozzá kell adni erőforráspéldány-szabályként. A Fabric-munkaterület erőforráspéldány-szabályokkal való hozzáadásáról további információt Erőforráspéldány-szabálycímű témakörben talál.
FILE_TYPE = { 'CSV' | 'PARKETT' }
FILE_TYPE a külső adatok formátumát adja meg.
- CSV: A RFC 4180 szabványnak megfelelő vesszővel tagolt értékfájlt ad meg.
- PARQUET: Parquet formátumot ad meg.
HITELESÍTŐ ADATOK (IDENTITY = '', SECRET = '')
CREDENTIAL Megadja a külső tárfiók eléréséhez szükséges hitelesítési mechanizmust.
A Fabric Data Warehouse-ban:
-
COPY INTOnem támogatott, ha a nyilvános hozzáférés le van tiltva. - Nyilvános tárfiókok esetén a támogatott hitelesítési mechanizmusok a Microsoft Entra ID, a közös hozzáférésű jogosultságkód (SAS) vagy a Storage-fiókkulcs (SAK).
- A tűzfal mögötti nyilvános tárfiókok esetében a Microsoft Entra ID-hitelesítés az egyetlen támogatott hitelesítési módszer.
COPY INTOa OneLake forrásként való használata csak az EntraID-hitelesítést támogatja.
A felhasználó EntraID-hitelesítése alapértelmezett. Nincs szükség hitelesítő adatok megadására.
- Hitelesítés közös hozzáférésű jogosultságkóddal (SAS)
-
IDENTITY: Állandó "Közös hozzáférésű jogosultságkód" értékkel. -
SECRET: A közös hozzáférésű jogosultságkód delegált hozzáférést biztosít a tárfiók erőforrásaihoz. - Minimális szükséges engedélyek: READ és LIST.
-
- Hitelesítés tárfiók-kulccsal
-
IDENTITY: Egy állandó "Tárfiókkulcs" értékkel. -
SECRET: Storage-fiók kulcsa.
-
ERRORFILE = Címtárhely
ERRORFILE csak a CSV-ra vonatkozik. Megadja azt a könyvtárat, amelyben az elutasított sorokat és a megfelelő hibafájlt meg kell írni. Megadhatja a tárfiók teljes elérési útját, vagy megadhatja a tárolóhoz viszonyított elérési utat. Ha a megadott elérési út nem létezik, az Ön nevében jön létre egy. A rendszer létrehoz egy gyermekkönyvtárat a névvel _rejectedrows. A _ karakter biztosítja, hogy a könyvtár más adatfeldolgozáshoz is meg legyen szökve, kivéve, ha a helyparaméter kifejezetten el van nevezve.
Note
Ha relatív elérési utat ad át ERRORFILE, az elérési út a external_location.
Ebben a könyvtárban létrejön egy mappa a betöltési idő alapján YearMonthDay -HourMinuteSecond formátumban (például 20180330-173205). Ebben a mappában létrejön egy utasításazonosítóval rendelkező mappa, amely alatt a rendszer két fájltípust ír: egy hibát. Az elutasítási okokat tartalmazó Json-fájl és az elutasított sorokat tartalmazó row.csv fájl.
Ha az ERRORFILE a tárfiók teljes elérési útját definiálja, akkor a ERRORFILE_CREDENTIAL a rendszer a tárhoz való csatlakozáshoz használja. Ellenkező esetben a hitelesítő adatokhoz megadott értéket használja a rendszer. Ha a forrásadatokhoz használt hitelesítő adatokat az ERRORFILE-hoz használják, a ERRORFILE_CREDENTIAL vonatkozó korlátozások is érvényesek.
Tűzfallal védett Azure Storage-fiók használata esetén a hibafájl ugyanabban a tárolóban jön létre, amelyet a tárfiók elérési útja határoz meg. A ERRORFILES beállítás használatakor a MAXERROR paramétert is meg kell adni. Ha az ERRORFILE a tárfiók teljes elérési útját definiálja, akkor a ERRORFILE_CREDENTIAL a rendszer a tárhoz való csatlakozáshoz használja. Ellenkező esetben a hitelesítő adatokhoz megadott értéket használja a rendszer.
ERRORFILE_CREDENTIAL = (IDENTITÁS= '', TITOK = '')
ERRORFILE_CREDENTIAL csak CSV-fájlokra vonatkozik. A Microsoft Fabric warehouse-ban az egyetlen támogatott hitelesítési mechanizmus a közös hozzáférésű jogosultságkód (SAS).
- Hitelesítés közös hozzáférésű jogosultságkódokkal (SAS)
- IDENTITÁS: "Közös hozzáférésű jogosultságkód" értékkel rendelkező állandó
- TITKOS KÓD: Amegosztott hozzáférésű jogosultságkóddelegált hozzáférést biztosít a tárfiók erőforrásaihoz.
- Minimálisan szükséges engedélyek: OLVASÁS, LISTA, ÍRÁS, LÉTREHOZÁS, TÖRLÉS
Note
Ha ugyanazt a tárfiókot használja az ERRORFILE-hoz, és megadja az ERRORFILE elérési útját a tároló gyökeréhez képest, nem kell megadnia a ERROR_CREDENTIAL.
MAXERRORS = max_errors
A MAXERRORS megadja a maximális elutasító sorok számát, amelyet a terhelés megengedett a művelet COPY meghibásodása előtt. Minden sort, amelyet a COPY művelet nem tud importálni, figyelmen kívül hagyják, és egy hibának számítanak. Ha nincs megadva max_errors, az alapértelmezett érték 0.
A Microsoft Fabricben a MAXERRORS nem használható, ha FILE_TYPE van PARQUET.
TÖMÖRÍTÉS = { "Snappy" | "GZIP" | 'NONE'}
TÖMÖRÍTÉSi megadása nem kötelező, és megadja a külső adatok adattömörítési módszerét.
- A CSV támogatja a GZIP-t
- A Parquet támogatja a GZIP-t és a Snappy-t
A COPY parancs automatikusan érzékeli a tömörítési típust a fájlkiterjesztés alapján, ha ez a paraméter nincs megadva:
-
.gz- GZIP
A tömörített fájlok betöltése jelenleg csak az 1.0-s PARSER_VERSION támogatott.
A COPY parancs megköveteli, hogy a gzip fájlok ne tartalmazzanak semmilyen hátsó hulladékot ahhoz, hogy normálisan működjenek. A gzip formátum szigorúan megköveteli, hogy a fájlok érvényes tagokból legyenek összeállítva anélkül, hogy további információk kellenek az előttük, közöttük vagy utánuk. Bármilyen eltérés ettől a formátumtól, például a nem gzip adatok jelenléte, a parancs sikertelenségéhez COPY vezet. Győződj meg róla, hogy nincs visszahúzott szemét a gzip fájlok végén, hogy COPY sikeresen feldolgozd ezeket a fájlokat.
FIELDQUOTE = "field_quote"
FIELDQUOTE csak a CSV-ra vonatkozik. Egyetlen karaktert ad meg, amelyet a CSV-fájlban idézőjelként (sztringelválasztóként) használnak. Ha nincs megadva, a rendszer az RFC 4180 szabványban meghatározott idézőjelként (") használja. A FIELDQUOTE esetében is támogatott a hexadecimális jelölés. A kiterjesztett ASCII- és több bájtos karakterek nem támogatottak a FIELDQUOTE UTF-8-jával.
Note
A MEZŐKVÓTA karakterek sztringoszlopokban vannak megszűrve, ahol kettős MEZŐKvótát (elválasztó) jelenik meg.
FIELDTERMINATOR = "field_terminator"
FIELDTERMINATOR csak a CSV-ra vonatkozik. A CSV-fájlban használt mező-terminátort adja meg. A mező-terminátor hexadecimális jelöléssel is megadható. A mezőkifejezés több karakterből állhat. Az alapértelmezett mező terminátora egy (,). A kiterjesztett ASCII- és több bájtos karakterek nem támogatottak a FIELDTERMINATOR UTF-8-jával.
ROWTERMINATOR = 'row_terminator'
ROWTERMINATOR csak CSV-ra vonatkozik. Megadja a CSV-fájlban használt sor terminátorát. A sor terminátora hexadecimális jelöléssel adható meg. A sor terminátora több karakterből állhat. Az alapértelmezett kifejezések a következők: \r\n, \nés \r.
A COPY parancs a karakter előtagját \r jelöli meg (newline) megadáskor \n , ami .\r\n Ha csak a \n karaktert szeretné megadni, használja a hexadecimális jelölést (0x0A). Ha hexadecimális több karakterből álló sor terminátorokat ad meg, ne adjon meg 0x értéket az egyes karakterek között.
A kiterjesztett ASCII- és több bájtos karakterek nem támogatottak a ROWTERMINATOR UTF-8-jával.
ELSŐ SOR = First_row_int
FIRSTROW csak a CSV-ra vonatkozik. Megadja a parancs összes fájljában COPY először olvasható sorszámot. Az értékek 1-től kezdődnek, ez az alapértelmezett érték. Ha az érték két értékre van állítva, az adatok betöltésekor minden fájl (fejlécsor) első sora ki lesz hagyva. A sorok kihagyása a sorkifejezők meglétén alapul.
DATEFORMAT = { 'mdy' | 'dmy' | "ymd" | "ydm" | 'myd' | 'dym' }
A DATEFORMAT csak a CSV-ra vonatkozik, és az SQL Server dátumformátumaihoz való dátumleképezés dátumformátumát adja meg. Az összes Transact-SQL dátum- és időadattípus és -függvény áttekintése: Dátum- és időadattípusok és függvények (Transact-SQL). A parancson belüli COPY DATEFORMAT elsőbbséget élvez a session szinten konfigurált DATEFORMAT felett.
KÓDOLÁS = "UTF8" | "UTF16"
KÓDOLÁSI csak a CSV-re vonatkozik. Az alapértelmezett érték az UTF8. Megadja a parancs által betöltött COPY fájlok adatkódolási szabványát.
PARSER_VERSION = { '1.0' | '2.0' }
PARSER_VERSION csak a CSV-re vonatkozik. Az alapértelmezett érték a 2.0. Megadja a betöltéshez használt fájlelemzőt, ha a forrásfájl típusa CSV. A 2.0-s elemző jobb teljesítményt nyújt a CSV-fájlok betöltéséhez.
Az Elemző 2.0-s verziója a következő korlátozásokkal rendelkezik:
- A tömörített CSV-fájlok nem támogatottak
- Az UTF-16 kódolással rendelkező fájlok nem támogatottak
- A többkarakter vagy többbájtos
ROWTERMINATOR,FIELDTERMINATOR, vagyFIELDQUOTEnem támogatott. Azonban\r\nROWTERMINATORalapértelmezett .
Ha UTF-8 fájlokkal használja az 1.0-s elemzőverziót, a FIELDTERMINATOR nem támogatja a többbájtos és a többkarakteres terminátor használatát.
Az Elemző 1.0-s verziója csak a visszamenőleges kompatibilitás érdekében érhető el, és csak akkor használható, ha ilyen korlátozások lépnek fel.
Note
Amikor COPY INTO tömörített CSV fájlokkal vagy UTF-16 kódolással rendelkező fájlokat használjuk, COPY INTO automatikusan vált 1.0-ra PARSER_VERSION , felhasználói beavatkozás nélkül. Többkarakteres terminátorok esetén vagy FIELDTERMINATORROWTERMINATOR-en az állítás COPY INTO meghibás. Használd PARSER_VERSION = '1.0' , ha többkarakteres elválasztóra van szükség.
MATCH_COLUMN_COUNT = { 'ON' | "KI" }
MATCH_COLUMN_COUNT csak a CSV-re vonatkozik. Az alapértelmezett érték OFF. Megadja, hogy a COPY parancs ellenőrizze, hogy a forrásfájlok oszlopszámának sorai megegyeznek-e a céltábla oszlopszámával. A következő viselkedés érvényes:
- Ha MATCH_COLUMN_COUNT
OFF:- A forrássorok oszlopainak túllépése figyelmen kívül lesz hagyva.
- A kevesebb oszlopot tartalmazó sorok null értékű oszlopokba lesznek beszúrva.
- Ha nem adunk meg értéket egy nem nullable oszlopban, a
COPYparancs meghibásodik.
- Ha MATCH_COLUMN_COUNT
ON:- A
COPYparancs ellenőrzi, hogy a forrásból származó fájlok minden során lévő oszlopszám egyezik-e a céltáblák oszlopszámával.
- A
- Ha oszlopszám eltér, a
COPYparancs meghibás.
Note
MATCH_COLUMN_COUNT a MAXERRORS függetlenül működik. Az oszlopok száma nem egyezik, COPY INTO a MAXERRORS függetlenül meghiúsul.
A COPY INTO használata a OneLake-nal
Az adatok közvetlenül a Fabric OneLake-ben tárolt fájlokból tölthetők COPY INTO be, különösen a Fabric Lakehouse Fájlok 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
Example:
COPY INTO t1
FROM 'https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/*.csv'
WITH (
FILE_TYPE = 'CSV',
FIRSTROW = 2
);
Permissions
Vezérlősík engedélyei
A COPY INTO parancs végrehajtásához a felhasználónak tagságot kell biztosítani egy munkaterületi szerepkör a munkaterületiHozzáférés kezelése keresztül, legalább a Megtekintő szerepkörrel. Másik lehetőségként a raktárhozzáférés megosztható egy felhasználóval Elemengedélyek a Háló portálon, legalább olvasási engedélyekkel. A minimális jogosultság elvével való összhangban elegendő az olvasási engedély.
Adatsík engedélyei
Miután a felhasználó megkapta vezérlősík-engedélyeket munkaterületi szerepkörök vagy elemek engedélyeivel, ha csak olvasási engedélyekkel rendelkezik az adatsík szintjén, a felhasználónak INSERT és ADMINISTER DATABASE BULK OPERATIONS engedélyeket is meg kell adni T-SQL-parancsokkal.
Az alábbi T-SQL-szkript például a Microsoft Entra-azonosítójukon keresztül biztosítja ezeket az engedélyeket egy adott felhasználónak.
GRANT ADMINISTER DATABASE BULK OPERATIONS to [mike@contoso.com];
GO
GRANT INSERT to [mike@contoso.com];
GO
A ErrorFile beállítás használatakor a felhasználónak rendelkeznie kell a Blob Storage-közreműködő minimális engedélyével a Tárfiók tárolóban.
Ha a OneLake-t használja forrásként, a felhasználónak közreműködői vagy magasabb engedélyekkel kell rendelkeznie a forrás munkaterületen (ahol a Lakehouse található) és a cél munkaterületen (ahol a Warehouse található). Minden hozzáférés a Microsoft Entra ID és Fabric munkaterületi szerepkörökön keresztül van szabályozva.
Remarks
Az COPY utasítás csak UTF-8 és UTF-16 érvényes karaktereket fogad el soradatokhoz és parancsparaméterekhez. A forrásfájlok vagy paraméterek (például ROW TERMINATOR vagy FIELD TERMINATOR), amelyek érvénytelen karaktereket használnak, rosszul értelmezhetők az COPY állítás által, és váratlan eredményeket okozhatnak, például adatkorrupciót vagy egyéb hibákat. Győződj meg róla, hogy a forrásfájljaid és paramétereid megfelelnek az UTF-8 vagy UTF-16 szabványoknak, mielőtt behívod az COPY utasítást.
Az COPY INTO állítás korlátozásokat tartalmaz az egyes varchar(max) és varbinary(max) oszlopok méretére, valamint a felfedhető sorméretre vonatkozóan.
- Parket: maximális varchar(max)/varbináris oszlopméret 16MB, maximális sor mérete 1GB.
- CSV: maximális varchar(max)/varbináris(max) oszlopméret 1MB, maximális sor mérete 16MB.
A megbízható végrehajtás érdekében a forrásfájloknak és mappáknak a művelet teljes időtartama alatt változatlannak kell maradniuk COPY INTO .
- A hivatkozott fájlok vagy mappák módosítása, törlése vagy cseréje a parancs futtatása közben a művelet sikertelenségéhez vagy inkonzisztens adatbetöltéshez vezethet.
- A végrehajtás
COPY INTOelőtt ellenőrizze, hogy az összes forrásadat stabil-e, és nem változik-e a folyamat során.
A OneLake forrásként való korlátozásai
A Fabric OneLake Storage mindkettő COPY INTO forrása, és OPENROWSET(BULK)egy előzetes verziójú funkció.
Csak a Microsoft Entra ID-hitelesítés támogatott. Más hitelesítési módszerek, például SAS-jogkivonatok, megosztott kulcsok vagy kapcsolati sztringek nem engedélyezettek.
Forrásként csak a
FilesLakehouse mappája támogatott. Az almappákhoz, billentyűparancsokhoz vagy más OneLake-helyekhez való hozzáférés jelenleg nem érhető el.A OneLake-útvonalaknak munkaterületet és raktárazonosítókat kell használniuk. A munkaterületek vagy Lakehouse-k rövid nevei jelenleg nem támogatottak.
Mindkét munkaterületen közreműködői engedélyekre van szükség. A végrehajtó felhasználónak legalább közreműködői szerepkört kell rendelkeznie a forrás Lakehouse-munkaterületen és a célraktár-munkaterületen.
Examples
További információért a COPY INTO Microsoft Fabric-ben való használatról lásd: Adatfelvétel a raktárba a COPY utasítással.
A. Betöltés nyilvános tárfiókból
A következő példa a parancs legegyszerűbb formája COPY , amely adatokat tölt be egy nyilvános tárolófiókról. Ebben a példában COPY az utasítások alapértelmezett beállításai megegyeznek a csv fájl sor formátumával.
COPY INTO dbo.[lineitem]
FROM 'https://unsecureaccount.blob.core.windows.net/customerdatasets/folder1/lineitem.csv'
A COPY parancs alapértelmezett értékei a következők:
MAXERRORS = 0COMPRESSIONaz alapértelmezett tömörítés nélküliFIELDQUOTE = '"'FIELDTERMINATOR = ','ROWTERMINATOR = '\n'
Important
COPY úgy \n kezeli, mint \r\n belsőleg. További információkért lásd a szakaszt ROWTERMINATOR .
FIRSTROW = 1ENCODING = 'UTF8'FILE_TYPE = 'CSV'
B. Hitelesítés betöltése megosztási jogosultságkód (SAS) használatával
Az alábbi példa sor-terminátorként, például UNIX-kimenetként tölti be a sorcsatornát használó fájlokat. Ez a példa saskulcsot is használ az Azure Blob Storage-ban való hitelesítéshez.
COPY INTO test_1
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='<Your_SAS_Token>'),
--CREDENTIAL should look something like this:
--CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='?sv=2018-03-28&ss=bfqt&srt=sco&sp=rl&st=2016-10-17T20%3A14%3A55Z&se=2021-10-18T20%3A19%3A00Z&sig=IEoOdmeYnE9%2FKiJDSHFSYsz4AkNa%2F%2BTx61FuQ%2FfKHefqoBE%3D'),
FIELDQUOTE = '"',
FIELDTERMINATOR = ';',
ROWTERMINATOR = '0X0A',
ENCODING = 'UTF8',
MAXERRORS = 10,
ERRORFILE = '/errorsfolder'--path starting from the storage container
)
C. Betöltés olyan oszloplistával, amelynek alapértelmezett értékei a tárfiókkulcson (SAK) keresztül hitelesíthetők
Ez a példa betölti az alapértelmezett értékeket tartalmazó oszloplistát meghatározó fájlokat.
--Note when specifying the column list, input field numbers start from 1
COPY INTO test_1 (Col_one default 'myStringDefault' 1, Col_two default 1 3)
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET='<Your_account_key>'),
--CREDENTIAL should look something like this:
--CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET='x6RWv4It5F2msnjelv3H4DA80n0PQW0daPdw43jM0nyetx4c6CpDkdj3986DX5AHFMIf/YN4y6kkCnU8lb+Wx0Pj+6MDw=='),
FIELDQUOTE = '"',
FIELDTERMINATOR=',',
ROWTERMINATOR='0x0A',
ENCODING = 'UTF8',
FIRSTROW = 2
)
D. Parquet betöltése
Ez a példa helyettesítő karakterrel tölti be az összes Parquet-fájlt egy mappába a végrehajtó felhasználó Entra-azonosítójával.
COPY INTO test_parquet
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/*.parquet'
WITH (
FILE_TYPE = 'PARQUET'
)
E. Helyettesítő kártyák és több fájl betöltése
COPY INTO t1
FROM
'https://myaccount.blob.core.windows.net/myblobcontainer/folder0/*.txt',
'https://myaccount.blob.core.windows.net/myblobcontainer/folder1'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='<Your_SAS_Token>')
FIELDTERMINATOR = '|'
)
F. Adatok betöltése a OneLake-ből (nyilvános előzetes verzió)
COPY INTO t1
FROM 'https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/*.csv'
WITH (
FILE_TYPE = 'CSV',
FIRSTROW = 2
);
GYIK
Mi a tömörített CSV-fájlok betöltésére szolgáló COPY parancs fájlmegosztási útmutatója?
Fontolja meg a nagy CSV-fájlok felosztását, különösen akkor, ha a fájlok száma kicsi, de a jobb teljesítmény érdekében tartsa a fájlokat legalább 4 MB-nál.
Mi az a fájlfelosztási útmutató a Parquet-fájlok betöltésére szolgáló COPY parancshoz?
Fontolja meg a nagy Parquet-fájlok felosztását, különösen akkor, ha a fájlok száma kicsi.
Vannak korlátozások a fájlok számára vagy méretére?
Nincsenek korlátozások a fájlok számára vagy méretére; A legjobb teljesítmény érdekében azonban legalább 4 MB méretű fájlokat ajánlunk.
Milyen hitelesítési módszert használ, ha nem ad meg hitelesítő adatokat?
Alapértelmezés szerint COPY INTO a végrehajtó felhasználó Entra-azonosítóját használja.