MÁSOLÁS (Transact-SQL)

A következőkre vonatkozik:Azure Synapse Analytics

Tip

Microsoft Fabric Data Warehouse egy nagyvállalati szintű relációs raktár egy Data Lake-alaprendszeren, jövőre kész architektúrával, beépített AI-vel és új funkciókkal. Ha még nem ismerkedik az adattárházakkal, kezdje a Fabric Data Warehouse-szal. A meglévő dedikált SQL-készlet számítási feladatai frissíthetők Fabric az adatelemzés, a valós idejű elemzés és a jelentéskészítés új képességeinek eléréséhez.

Ez a cikk azt ismerteti, hogyan használhatja a COPY utasítást Azure Synapse Analytics adatok külső tárfiókokból való betöltéséhez. 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-ról lásd: COPY INTO.

A következő képességek felhasználása COPY :

  • Használjon alacsonyabb jogosultságú felhasználókat az adatok betöltéséhez anélkül, hogy szigorú CONTROL-engedélyekre van szüksége 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, amelyek elválasztó elemei (sztring, mező, sor) sztringel tagolt oszlopokban vannak feloldva.
  • Adjon meg egy finomabb engedélymodellt anélkül, hogy tárfiókkulcsokat ad meg közös hozzáférésű jogosultságkódok (SAS) használatával.
  • Használj egy másik tárolófiókot a ERRORFILE helyszí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.
  • CSV-fájlok SQL Server Dátumformátumok használata.
  • Adjon meg helyettesítő karaktereket és több fájlt 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ípusokat tölthet be közvetlenül a Parquet-fájlokból, például a térképekből és a 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, kapcsolja be az automatikus táblalétrehozás funkciót a használatával AUTO_CREATE_TABLE.

Az utasítást használó COPY átfogó példákért és rövid útmutatókért lásd:

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 nem ad meg sémát, és a műveletet végrehajtó COPY felhasználó alapértelmezett sémája eltér a megadott tábla sémájától, a COPY 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 nem ad meg oszloplistát, 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 és így tovább.

Külső helyek

Az adatokat tartalmazó fájlok előkészítési helye. Jelenleg Azure Data Lake Storage (ADLS) Gen2 és Azure Blob Storage támogatottak:

  • 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ódszerre.

  • 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 megad egy mappát, COPY lekéri az összes fájlt a mappából és annak almappáiból. 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.

Helyettesítő karaktereket is felvehet az elérési útra, ahol:

  • A helyettesítő karakterek elérési útjának egyezése megkülönbözteti a kis- és nagybetűk nevét
  • A fordított perjel karakterrel () elkerülheti a helyettesítő karaktereket\
  • 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 az Customer1alkö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ájlon bontanak ki. Ha lehetséges, helyettesítő karakterek megadása helyett listázz több fájlhelyet.

Több fájlhelyet csak ugyanabból a tárfiókból és tárolóból adhat meg egy 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: Az 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 "Tagolt szöveg" fájltípusát a CSV fájlformátum váltja fel. Az alapértelmezett vesszőelválasztót a FIELDTERMINATOR paraméteren keresztül konfigurálhatja.

FILE_FORMAT = external_file_format_name

FILE_FORMAT csak Parquet- és ORC-fájlokra vonatkozik. 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 Megadja 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

  • Ha Microsoft Entra ID vagy nyilvános tárfiók használatával hitelesít, nem kell megadnia CREDENTIAL.
  • 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)

  • Minimálisan szükséges engedélyek: READ és LIST

  • Hitelesítés szolgáltatásnevek

    • IDENTITY: <ClientID>@<OAuth_2.0_Token_EndPoint>
    • SECRET: Microsoft Entra application service principal key
  • 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: Állandó a következő értékkel: Storage Account Key
    • SECRET: Tárfiók kulcsa
  • Hitelesítés felügyelt identitás (VNet-szolgáltatásvégpontok)

    • IDENTITY: Állandó a következő értékkel: Managed Identity
  • 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 Access Control listára (ACL) vonatkozó engedélyek szükségesek 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

    • A HITELESÍTŐ ADATOK megadása nem kötelező
  • 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 = Könyvtár helye

ERRORFILE csak a CSV-re vonatkozik. Megadja az utasítás azon könyvtárát COPY , amelyben az elutasított sorok és a megfelelő hibafájl meg van írva. Megadhatja a tárfiók teljes elérési útját, vagy a tárolóhoz viszonyított elérési utat. Ha a megadott elérési út nem létezik, a raktár létrehoz egyet. 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 ERRORFILEad át, az a external_location megadott tárolóútvonalhoz képest legyen.

Ebben a könyvtárban a raktár létrehoz egy mappát a betöltési idő alapján a formátumban YearMonthDay -HourMinuteSecond (például 20180330-173205). Ebben a mappában a folyamat két fájltípust ír: az okfájlt (hiba) és az adatfájlt (sorfájlt). Minden fájl előküldi a queryID, distributionIDés egy fájl GUID azonosítót. Mivel az adatok és az ok külön fájlokban találhatók, a megfelelő fájloknak egyező előtagjuk van.

Ha ERRORFILE a tárfiók teljes elérési útja definiálva van, COPY a tárhoz való csatlakozást használja ERRORFILE_CREDENTIAL . Ellenkező esetben a megadott CREDENTIALértéket használja. Ha ugyanazt a hitelesítő adatot használja a forrásadatokhoz, és ERRORFILEa vonatkozó korlátozások ERRORFILE_CREDENTIAL is érvényesek.

ERRORFILE_CREDENTIAL = (IDENTITY = '', SECRET = '')

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, szolgáltatásnév vagy Microsoft Entra

  • Azure Data Lake Gen2: SAS, MSI, szolgáltatásnév vagy Microsoft Entra

  • Hitelesítés közös hozzáférésű jogosultságkódokkal (SAS)

  • Minimálisan szükséges engedélyek: OLVASÁS, LISTA, ÍRÁS, LÉTREHOZÁS, TÖRLÉS

  • Hitelesítés szolgáltatásnevek

    • IDENTITY: <ClientID>@<OAuth_2.0_Token_EndPoint>
    • SECRET: Microsoft Entra application service principal key
  • 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)

    • IDENTITY: Állandó a következő értékkel: Managed Identity
  • 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 nincs szükség
  • 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 ERRORFILE_CREDENTIAL használata nem támogatott.

Note

Ha ugyanazt a tárfiókot használja a hibafájlhoz, és megadja a ERRORFILE tároló gyökeréhez viszonyított elérési utat, akkor nem kell megadnia a ERROR_CREDENTIAL.

MAXERRORS = max_errors

MAXERRORS A MÁSOLÁS művelet meghiúsulása előtt a betöltés során engedélyezett elvetési sorok maximális számát adja meg. A MÁSOLÁS művelet nem importálható sorokat figyelmen kívül hagyja, és egyetlen hibának számít. Ha nem ad meg értéket a hibák maximális számához, az alapértelmezett érték a következő 0.

MAXERRORS nem használható a AUTO_CREATE_TABLE.

Ha FILE_TYPE igen, akkor az PARQUETadattípus-konverziós hibák (például a Parquet binárisból SQL egész számmá) által okozott kivételek továbbra is COPY INTO meghiúsulnak, figyelmen kívül hagyva.MAXERRORS

COMPRESSION = { 'DefaultCodec ' | "Snappy" | "GZIP" | 'NONE'}

COMPRESSION 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 nem adja meg ezt a paramétert:

  • .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 hibáját eredményezi. A COPY sikeres futtatásának biztosításához győződjön meg arról, hogy a gzip-fájlok végén nincs záró szemét.

FIELDQUOTE = 'field_quote'

A 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 nem adja meg ezt az értéket, a rendszer az RFC 4180 szabványban meghatározott idézőjelként (") használja. Hexadecimális jelölés is támogatott .FIELDQUOTE A kiterjesztett ASCII- és többbájtos karakterek nem támogatottak az UTF-8 esetében FIELDQUOTE.

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-re vonatkozik. A CSV-fájlban használt mező-terminátort adja meg. A mező terminátorát hexadecimális jelöléssel adhatja meg. A mező terminátora lehet többkarakteres. Az alapértelmezett mezőkifejezés a (,). A kiterjesztett ASCII- és többbájtos karakterek nem támogatottak az UTF-8 esetében FIELDTERMINATOR.

ROWTERMINATOR = 'row_terminator'

ROWTERMINATOR csak a CSV-re vonatkozik. A CSV-fájlban használt sor terminátorát adja meg. A sor terminátorát hexadecimális jelöléssel adhatja meg. A sor terminátora többkarakteres is lehet. 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öbbkarakteres sor terminátorokat ad meg, ne adja meg 0x az egyes karaktereket.

A kiterjesztett ASCII- és többbájtos karakterek nem támogatottak az UTF-8 esetében ROWTERMINATOR.

FIRSTROW = First_row_int

FIRSTROW a CSV-ra vonatkozik, és megadja az elsőként beolvasott sorszámot a COPY parancs összes fájljában. Az értékek az alapértelmezett értéktől 1kezdődnek. Ha az értéket úgy állítja be, hogy 2minden fájl (fejlécsor) első sora ki lesz hagyva az adatok betöltésekor. 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.

ENCODING = "UTF8" | "UTF16"

ENCODING 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 ez ( OFF alapértelmezett), a rendszer ellenőrzi az oszlop identitásértékét, de nem importálja. 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 megadnia, 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 oszloplistát ad át, annak le kell képeznie egy bemeneti mezőt az identitásoszlophoz.
  • Az oszloplista IDENTITÁS oszlopa nem támogatja az alapértelmezett értéket.
  • Egyszerre csak egy táblát állíthat be IDENTITY_INSERT .

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étrehozható-e az automatikus sémafelderítéssel együtt. AUTO_CREATE_TABLE csak parquet-fájlokhoz érhető el Azure Synapse Analytics.

  • BE: Automatikus táblalétrehozás engedélyezése. A COPY INTO folyamat automatikusan létrehoz egy új táblát a betöltendő fájl szerkezetének felderítésével. A parquet-fájlok automatikus sémafelderítésének előnyeinek kihasználásához használhatja az előre meglevő táblákkal is.
  • KI: Az automatikus táblalétrehozás nincs engedélyezve. Default.

Note

Az automatikus táblalétrehozás az automatikus sémafelderítés mellett működik. Az automatikus táblalétrehozás alapértelmezés szerint nincs engedélyezve.

Permissions

A COPY parancsot futtató 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

Az COPY utasítás csak UTF-8 és UTF-16 érvényes karaktereket fogad el soradatokhoz és parancsparaméterekhez. Az COPY utasítás helytelenül értelmezhet olyan forrásfájlokat vagy paramétereket (például ROWTERMINATOR vagy FIELDTERMINATOR), amelyek érvénytelen karaktereket használnak, és váratlan eredményeket, például adatsérülést vagy egyéb hibákat okoznak. 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.

A MAXDOP lekérdezési tipp nem támogatott COPY INTO.

A megbízható végrehajtás érdekében ne módosítsa a forrásfájlokat és mappákat a COPY INTO művelet során.

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

Ha a forrásadatok pontossága nagyobb, mint a céloszlop definíciója, akkor az érték csonkolt, nem kerekítve, numerikus, dátum- és időtípusok esetén.

Examples

A. Betöltés nyilvános tárfiókból

Az alábbi példa a parancs legegyszerűbb formáját mutatja be, amely betölti az COPY adatokat egy nyilvános tárfiókból. Ebben a példában az 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

  • COMPRESSION az alapértelmezett tömörítés nélküli

  • FIELDQUOTE = '"'

  • 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 = 1

  • ENCODING = '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 betölti azokat a fájlokat, amelyek sorkimenetként használják a sor hírcsatornát, például UNIX-kimenetként. 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>'),
    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

Hogyan viszonyul a COPY parancs teljesítménye a PolyBase-hez?

A COPY parancs teljesítménye a számítási feladattól függően jobb lehet.

  • A raktár nem tudja automatikusan felosztani a tömörített fájlokat. 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 raktár automatikusan feloszthatja a nagy tömörítetlen CSV-fájlokat a párhuzamos betöltéshez, így általában nem kell manuálisan felosztania a tömörítetlen CSV-fájlokat. Bizonyos esetekben, amikor az adattulajdonságok miatt az automatikus fájlfelosztás 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?

Az alábbi táblázat a használni kívánt fájlok számát ismerteti. Ha eléri az ajánlott fájlszámot, nagyobb fájlok esetén jobb teljesítményt érhet el. A fájlok számát a számítási csomópontok száma és 60 szorzata határozza meg. Például 6000 DWU-n 12 számítási csomópontja van, így 12 * 60 = 720 partícióval rendelkezik. Az egyszerű fájlfelosztási élményért tekintse meg a COPY betöltési sebesség maximalizálását fájlmegosztásokkal.

DWU Fájlok száma
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?

Nem kell felosztania a Parquet- és ORC-fájlokat, mert a COPY parancs automatikusan felosztja a fájlokat. A legjobb teljesítmény érdekében a Azure tárfió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?

A fájlok száma és mérete nincs korlátozva. A legjobb teljesítmény érdekében azonban legalább 4 MB méretű fájlokat használjon. 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ással végzett hitelesítéskor: com.microsoft.sqlserver.jdbc.SQLServerException: Managed Service Identity isn't enabled on this server. Please enable Managed Service Identity and try again.

A probléma megoldásához regisztrálja újra a munkaterület felügyelt identitását:

  1. Telepítse az Azure PowerShellt. Lásd: A PowerShell telepítése.
  2. 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
    

A következőkre vonatkozik:Warehouse a Microsoft Fabric

Ez a cikk azt ismerteti, hogyan használhatja a COPY utasítást a Warehouse-ban a Microsoft Fabric 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 az Microsoft Fabric-ben, és a Az adatok Microsoft Fabric raktárba való betöltésének stratégiája.

A Fabric Data Warehouse a COPY utasítás jelenleg támogatja a CSV, JSONL és PARQUET fájlformátumokat. Adatforrások esetén Azure Data Lake Storage Gen2 fiókok és OneLake-források támogatottak.

A Microsoft Fabric-beli warehouse használatával COPY INTO kapcsolatos további információkért lásd: Adatok betöltése a Microsoft Fabric raktárába a COPY utasítás használatával.

Alapértelmezés szerint COPY INTO hitelesítést hajt végre Microsoft Entra ID felhasználóként.

A következő képességek felhasználása COPY :

  • Használjon alacsonyabb jogosultságú felhasználókat az adatok betöltéséhez anélkül, hogy szigorú CONTROL-engedélyekre van szüksége a raktárban.
  • 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.
  • A JSONL-fájlok megfelelő elemzése és betöltése, ahol minden sor érvényes JSON-objektum, és a mezők JSON-elérésiút-kifejezések használatával vannak leképezve.
  • Adjon meg egy finomabb engedélymodellt anélkül, hogy tárfiókkulcsokat ad meg közös hozzáférésű jogosultságkódok (SAS) használatával.
  • Használj egy másik tárolófiókot a ERRORFILE helyszí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 Microsoft Fabric raktárába a COPY utasítás használatával.

Syntax

COPY INTO [ warehouse_name. ] [ schema_name. ] table_name
[ (Column_list) ]
FROM '<external_location>' [ , ...n ]
WITH
 (
 [ FILE_TYPE = { 'CSV' | 'JSONL' | '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 nem adja meg a raktárat, és a megadott séma és tábla nem létezik az aktuális raktárban, sikertelen lesz, COPY é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 nem ad meg sémát, és a műveletet végrehajtó COPY felhasználó alapértelmezett sémája eltér a megadott tábla sémájától, COPY a rendszer megszakítja, és hibaüzenet jelenik meg.

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)

A forrásadatmezőknek az adatbetöltés során a táblázatoszlopok céloszlopaihoz való leképezéséhez használt oszlopok választható listája.

column_list zárójelek közé kell tenni, és vesszővel kell elválasztani. A szintaxis a következő:

[(Column_name [alapértelmezett Default_value] [Field_number | JSON_path] [,... n])]

  • Column_name – a céltábla oszlopának neve.
  • Default_value – az alapértelmezett érték, amely bármelyik NULL bemeneti fájl értékét helyettesíti. Az alapértelmezett érték az összes fájlformátumra érvényes. COPY megpróbál betölteni NULL a 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 – Csak CSV-fájlokra vonatkozik. Megadja a mező sorszámát a bemeneti adatokban. A mezőindexelés 1-nél kezdődik.
  • JSON_path – Csak JSONL-fájlokra vonatkozik. Egy JSON-elérési útkifejezést ad meg, amely azonosítja az egyes JSON-objektumokból kinyerni kívánt mezőt (például $.CustomerName).

Ha nem ad meg column_list, COPY a forrás és a cél sorrend alapján leképezi az oszlopokat: Az 1. beviteli mező az 1. céloszlopra, a 2. mező a 2. oszlopra és így tovább.

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 nem ad meg oszloplistát, 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 és így tovább.

Külső hely

Itt adhatja meg, hogy az adatokat tartalmazó fájlok hol legyenek előkészítettek. Jelenleg az Azure Data Lake Storage (ADLS) Gen2, az Azure Blob Storage és a OneLake 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: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ódszerre.

  • 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 megad egy mappát, COPY lekéri az összes fájlt a mappából és annak almappáiból. 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.

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 fordított perjel karakterrel () elkerülheti a helyettesítő karaktereket\

Note

A legjobb teljesítmény érdekében ne adjon meg olyan helyettesítő karaktereket, amelyek nagyobb számú fájlon bontanak ki. Ha lehetséges, helyettesítő karakterek megadása helyett listázz több fájlhelyet.

Több fájlhelyet csak ugyanabból a tárfiókból és tárolóból adhat meg egy 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' | "JSONL" | 'PARQUET' }

FILE_TYPE A külső adatok formátumát adja meg.

  • CSV: Az RFC 4180 szabványnak megfelelő vesszővel tagolt értékfájlt ad meg.
  • JSONL: Egy új vonallal tagolt JSON-fájlt (JSON-sorok) határoz meg, ahol minden sor érvényes JSON-objektum.
  • 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 INTO nem 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 INTO a OneLake forrásként való használata csak az EntraID-hitelesítést támogatja.

A felhasználó Microsoft Entra ID 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: Egy állandó , amelynek értéke Shared Access Signature.
    • 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ó , amelynek értéke Storage Account Key.
    • SECRET: Storage-fiók kulcsa.

ERRORFILE = Könyvtár helye

ERRORFILE a CSV-ra és a JSONL-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 a tárolóhoz viszonyított elérési utat. Ha a megadott elérési út nem létezik, a rendszer létrehoz egyet az Ön nevében. 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 ERRORFILEad át, az a external_location megadott tárolóútvonalhoz képest legyen.

Ebben a könyvtárban a raktár létrehoz egy mappát a betöltési idő alapján a formátumban YearMonthDay -HourMinuteSecond (például 20180330-173205). Ebben a mappában a raktár létrehoz egy mappát az utasításazonosítóval, és ebben a mappában 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 ERRORFILE a tárfiók teljes elérési útja definiálva van, akkor a rendszer a ERRORFILE_CREDENTIAL tárhoz való csatlakozáshoz használja. Ellenkező esetben a rendszer a megadott CREDENTIAL értéket használja. Ha ugyanazt a hitelesítő adatot használja a forrásadatokhoz ERRORFILE, azokra is vonatkoznak ERRORFILE_CREDENTIAL korlátozások.

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 beállítás ebben a ERRORFILE forgatókönyvben való használatakor a paramétert is meg kell adni MAXERROR . Ha ERRORFILE a tárfiók teljes elérési útja definiálva van, akkor a rendszer a ERRORFILE_CREDENTIAL tárhoz való csatlakozáshoz használja. Ellenkező esetben a rendszer a megadott CREDENTIAL értéket használja.

ERRORFILE_CREDENTIAL = (IDENTITY = '', SECRET = '')

ERRORFILE_CREDENTIAL CSV- és JSONL-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)
  • 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 a hibafájlhoz, és megadja a ERRORFILE tároló gyökeréhez viszonyított elérési utat, akkor nem kell megadnia a ERROR_CREDENTIAL.

MAXERRORS = max_errors

MAXERRORS a CSV-ra és a JSONL-ra vonatkozik. Megadja, hogy a művelet meghiúsulása előtt hány elvetési sor engedélyezett a COPY terhelésben. 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 nem adja meg a hibák maximális számát, az alapértelmezett érték a következő 0.

A Fabric Data Warehouse nem használható MAXERRORS, ha FILE_TYPEPARQUET.

COMPRESSION = { 'Snappy' | "GZIP" | 'NONE'}

COMPRESSION 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.
  • JSONL esetén nem támogatott

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 elemző 1.0-s verziójával támogatott.

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 parancs sikertelenségét COPY eredményezi. A sikeres futtatás biztosításához COPY győződjön meg arról, hogy nincs záró szemét a gzip-fájlok végén.

FIELDQUOTE = 'field_quote'

FIELDQUOTE csak a CSV-re vonatkozik. Egyetlen karaktert ad meg, amelyet a CSV-fájlban idézőjelként (sztringelválasztóként) használnak. Ha nem adja meg FIELDQUOTE, a rendszer az RFC 4180 szabványban meghatározott idézőjelként (") használja az idézőjelet. Hexadecimális jelölés is támogatott .FIELDQUOTE A kiterjesztett ASCII- és többbájtos karakterek nem támogatottak az UTF-8 esetében FIELDQUOTE.

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-re vonatkozik. A CSV-fájlban használt mező-terminátort adja meg. A mező terminátorát hexadecimális jelöléssel is megadhatja. A mező terminátora lehet többkarakteres. Az alapértelmezett mező terminátora egy (,). A KITERJESZTETT ASCII- és többbájtos karakterek nem támogatottak a FIELDTERMINATOR UTF-8-jával.

ROWTERMINATOR = 'row_terminator'

ROWTERMINATOR csak a CSV-re vonatkozik. Megadja a CSV-fájlban használt sor terminátorát. A sor terminátorát hexadecimális jelöléssel adhatja meg. A sor terminátora többkarakteres is lehet. 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öbbkarakteres sor terminátorokat ad meg, ne adjon meg 0x értéket az egyes karakterek között.

A kiterjesztett ASCII- és többbájtos karakterek nem támogatottak az UTF-8 esetében ROWTERMINATOR.

FIRSTROW = First_row_int

FIRSTROW csak a CSV-re vonatkozik. Megadja a parancs összes fájljában COPY először olvasható sorszámot. Az értékek az alapértelmezett értéktől 1kezdődnek. Ha az értéket úgy állítja be, hogy 2minden fájl (fejlécsor) első sora ki lesz hagyva az adatok betöltésekor. A sorok kihagyása a sorkifejezők meglétén alapul.

DATEFORMAT = { 'mdy' | 'dmy' | "ymd" | "ydm" | 'myd' | 'dym' }

A DATEFORMAT a CSV-re és a JSONL-ra vonatkozik. A dátum SQL Server dátumformátumra való leképezésének 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.

ENCODING = "UTF8" | "UTF16"

ENCODING a CSV-ra és a JSONL-ra 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 CSV-fájlokra vonatkozik. Az alapértelmezett érték a 2.0. PARSER_VERSION 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.
  • Többkarakteres vagy többbájtos ROWTERMINATOR, FIELDTERMINATORvagy FIELDQUOTE nem támogatott. Azonban \r\nROWTERMINATORalapértelmezett .

Ha UTF-8 fájlokkal használja az elemző 1.0-s verzióját, a többbájtos és a többkarakteres terminátor nem támogatott FIELDTERMINATOR.

Az Elemző 1.0-s verziója csak a visszamenőleges kompatibilitás érdekében érhető el. Csak akkor használja, ha ezeket a korlátozásokat tapasztalja.

Note

Ha tömörített CSV-fájlokkal vagy UTF-16 kódolású fájlokkal használja COPY INTO , COPY INTO automatikusan 1.0-ra PARSER_VERSION vált, felhasználói beavatkozás nélkül. Többkarakteres terminátorok FIELDTERMINATORROWTERMINATOResetén az COPY INTO utasítás meghiúsul. Többkarakteres PARSER_VERSION = '1.0' elválasztójelre van szüksége.

MATCH_COLUMN_COUNT = { 'ON' | "KI" }

MATCH_COLUMN_COUNT csak CSV-fájlokra vonatkozik. Az alapértelmezett érték a OFF. Megadja, hogy a COPY parancsnak ellenőriznie kell-e, hogy a forrásfájlok oszlopainak száma megegyezik-e a céltábla oszlopszámával. A következő viselkedés érvényes:

  • Ha MATCH_COLUMN_COUNT igen:OFF
    • A parancs figyelmen kívül hagyja a forrássorok oszlopainak túllépését.
      • A parancs null értékű oszlopokba szúr be NULL értékeket a kevesebb oszlopot tartalmazó sorokhoz.
    • Ha nem ad meg értéket egy nem null értékű oszlopnak, a COPY parancs meghiúsul.
  • Ha MATCH_COLUMN_COUNT igen:ON
    • A COPY parancs 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.
  • Ha az oszlopok száma nem egyezik, a COPY parancs meghiúsul.

Note

MATCH_COLUMN_COUNT A a .-tól MAXERRORSfüggetlenül működik. Az oszlopok száma nem egyezik, ezért COPY INTO a hiba a függvénytől függetlenül MAXERRORSmeghiúsul.

A COPY INTO használata a OneLake-nal

A COPY INTO használatával közvetlenül betöltheti az adatokat a Fabric OneLake-ben tárolt fájlokból a meglévő elemek alatt. Ez a módszer szükségtelenné teszi a külső átmeneti fiókok, például az ADLS Gen2 vagy Blob Storage használatát, és lehetővé teszi a munkaterület által szabályozott, SaaS-natív betöltést Fabric engedélyekkel. Ez a funkció a következőket támogatja:

  • Olvasás munkaterületen és elemen belüli bármely helyről
  • Munkaterületről raktárra betöltődik egy bérlőn belül
  • Natív identitásérvényesítés a Microsoft Entra ID használatá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 tagságot kell biztosítani egy munkaterületi szerepkörhöz a munkaterület hozzáférésének kezelése révén, legalább a Megtekintő szerepkörrel. Másik lehetőségként a Fabric portálon Item engedélyek keresztül is megoszthatja a felhasználókkal a raktári hozzáférést, 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 munkaterületi szerepkörökkel vagy elemengedélyekkel adott meg vezérlősík-engedélyeket , ha a felhasználó csak olvasási engedélyekkel rendelkezik az adatsík szintjén, T-SQL-parancsokkal is megadja a felhasználónak INSERT és ADMINISTER DATABASE BULK OPERATIONS az engedélyeket.

A következő T-SQL-szkript például ezeket az engedélyeket egy adott felhasználónak adja meg a Microsoft Entra ID használatával.

GRANT ADMINISTER DATABASE BULK OPERATIONS to [mike@contoso.com];
GO

GRANT INSERT to [mike@contoso.com];
GO

A hibafájl-beállítás használatakor a felhasználónak rendelkeznie kell a tárfiók tárolóján Blob Storage közreműködő minimális engedélyével.

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ó). Microsoft Entra ID és Fabric munkaterületi szerepkörök szabályozzák az összes hozzáférést.

Remarks

Az COPY utasítás csak UTF-8 és UTF-16 érvényes karaktereket fogad el soradatokhoz és parancsparaméterekhez. Ha érvénytelen karaktereket tartalmazó forrásfájlokat vagy paramétereket (például ROWTERMINATOR vagy FIELDTERMINATOR) használ, előfordulhat, hogy az COPY utasítás helytelenül értelmezi őket, és váratlan eredményeket, például adatsérülést vagy egyéb hibákat okoz. Az utasítás meghívása COPY előtt győződjön meg arról, hogy a forrásfájlok és paraméterek UTF-8 vagy UTF-16 kompatibilisek.

Az COPY INTO utasítás korlátozza az egyes varchar(max) és varbinary(max) oszlopok méretét, valamint a betölthető teljes sorméretet.

  • Parquet: maximális varchar(max)/varbinary(max) oszlopméret 16 MB, maximális sorméret 1 GB.
  • CSV és JSONL: maximális varchar(max)/varbinary(max) oszlopméret 1 MB, maximális sorméret 16 MB.

A megbízható végrehajtás érdekében ne módosítsa a forrásfájlokat és mappákat a COPY INTO művelet során.

  • 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 módosul-e a folyamat során.

Ha a forrásadatok pontossága nagyobb, mint a céloszlop definíciója, akkor az érték csonkolt, nem kerekítve, numerikus, dátum- és időtípusok esetén.

A OneLake forrásként való korlátozásai

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

  • A raktárelemek nem támogatottak forráshelyként. A fájloknak más Fabric-elemekből kell származnia, amelyek a OneLake Storage-on keresztül teszik elérhetővé a fájlokat.

  • 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

A Microsoft Fabric-beli warehouse használatával COPY INTO kapcsolatos további információkért lásd: Adatok betöltése a Microsoft Fabric raktárába a COPY utasítás használatával.

A. Betöltés nyilvános tárfiókból

Az alábbi példa a parancs legegyszerűbb formáját mutatja be, amely betölti az COPY adatokat egy nyilvános tárfiókból. Ebben a példában az 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'

A COPY parancs alapértelmezett értékei a következők:

  • MAXERRORS = 0

  • COMPRESSION (az alapértelmezett érték nincs tömörítve)

  • FIELDQUOTE = '"'

  • 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 = 1

  • ENCODING = '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 betölti azokat a fájlokat, amelyek sorkimenetként használják a sor hírcsatornát, például UNIX-kimenetként. 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>'),
    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>'),
    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 ID használatával.

COPY INTO test_parquet
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/*.parquet'
WITH (
    FILE_TYPE = 'PARQUET'
)

E. JSONL betöltése

Ez a példa helyettesítő karakterrel tölti be az összes JSONL-fájlt egy mappába a végrehajtó felhasználó Entra ID használatával.

COPY INTO test_jsonl
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/*.jsonl'
WITH (
    FILE_TYPE = 'JSONL'
)

F. Oszlopnevek leképezése mezőútvonalakra JSONL-dokumentumokban

Az alábbi példában egy JSON Lines (JSONL) fájl látható, amelyben minden sor egyetlen JSON-objektumot jelöl:

{"CountryKey": 0, "CountryName": "ALGERIA", "RegionID": 0, "Population": 34800000}
{"CountryKey": 1, "CountryName": "ARGENTINA", "RegionID": 1, "Population": 46044703}
{"CountryKey": 2, "CountryName": "BRAZIL", "RegionID": 1, "Population": 203080756}

Ebben COPY INTOa szakaszban a táblázatoszlopokat JSON-elérésiút-kifejezések használatával képezheti le adott JSON-mezőkre. Ez a megfeleltetés lehetővé teszi, hogy csak a forrásadatokból származó szükséges mezőket tudja beszedni.

COPY INTO Countries (
  CountryID '$.CountryKey', 
  CountryName '$.CountryName', 
  RegionID '$.RegionKey', 
  Population '$.Population'
)
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/countries.jsonl'
WITH (   
    FILE_TYPE = 'JSONL' 
)

G. Adatok betöltése helyettesítő karakterek és több fájl megadásával

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

H. Adatok betöltése a OneLake-ből

COPY INTO t1
FROM 'https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/*.csv'
WITH (
    FILE_TYPE = 'CSV',
    FIRSTROW = 2
);