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


MÁSOLÁS (Transact-SQL)

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 ERRORFILE helyhez (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:

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

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

  • 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 INTO folyamat 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:

  1. Telepítse az Azure PowerShellt. Tekintse meg PowerShell-telepítése című témakört.
  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 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 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 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 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 – 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, COPY az összes fájlt visszanyeri a mappából és annak almappáiból. COPY figyelmen 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 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ó 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)
  • 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, vagy FIELDQUOTE nem 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_COUNTOFF:
    • 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 COPY parancs meghibásodik.
  • Ha MATCH_COLUMN_COUNTON:
    • 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 oszlopszám eltér, a COPY parancs 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 Files Lakehouse 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 = 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'

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.