Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:Azure Synapse Analytics
Tip
Microsoft Fabric Data Warehouse är ett relationslager i företagsskala på en datasjögrund med en framtidsklar arkitektur, inbyggd AI och nya funktioner. Om du är nybörjare på datalager börjar du med Fabric Data Warehouse. Befintliga dedicerade SQL-poolarbetsbelastningar kan uppgraderas till Fabric för att få åtkomst till nya funktioner inom datavetenskap, realtidsanalys och rapportering.
Den här artikeln beskriver hur du använder instruktionen COPY i Azure Synapse Analytics för att läsa in data från externa lagringskonton. Satsen COPY ger mest flexibilitet för höggenomströmningsdatainsamling i Azure Synapse Analytics.
Note
Information om informationslager i Microsoft Fabric finns i COPY INTO.
Användning COPY för följande funktioner:
- Använd användare med lägre privilegier för att läsa in data utan att behöva strikta KONTROLL-behörigheter i informationslagret.
- Kör en enda T-SQL-instruktion utan att behöva skapa några andra databasobjekt.
- Parsa och läs in CSV-filer korrekt där avgränsare (sträng, fält, rad) är undantagna i strängavgränsade kolumner.
- Ange en finare behörighetsmodell utan att exponera lagringskontonycklar med hjälp av signaturer för delad åtkomst (SAS).
- Använd ett annat lagringskonto för platsen
ERRORFILE(REJECTED_ROW_LOCATION). - Anpassa standardvärden för varje målkolumn och ange källdatafält som ska läsas in i specifika målkolumner.
- Ange en anpassad radterminator, fältterminator och fältcitat för CSV-filer.
- Använd SQL Server datumformat för CSV-filer.
- Ange jokertecken och flera filer i lagringsplatssökvägen.
- Automatisk schemaidentifiering förenklar processen för att definiera och mappa källdata till måltabeller.
- Den automatiska processen för att skapa tabeller skapar automatiskt tabellerna och fungerar tillsammans med automatisk schemaidentifiering.
- Läs in komplexa datatyper direkt från Parquet-filer, till exempel Kartor och listor i strängkolumner, utan att använda andra verktyg för att förbearbeta data.
Note
Om du vill läsa in komplexa datatyper från Parquet-filer aktiverar du automatisk tabellskapande med hjälp AUTO_CREATE_TABLEav .
Omfattande exempel och snabbstarter med instruktionen finns i COPY :
- Snabbstart: Massinläsning av data med copy-instruktionen
- Snabbstart: Exempel med copy-instruktionen och dess autentiseringsmetoder som stöds
- Snabbstart: Skapa COPY-instruktionen med hjälp av det omfattande Synapse Studio-användargränssnittet
Note
Microsoft Entra ID tidigare kallades Azure Active Directory (Azure AD).
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
Valfritt om standardschemat för användaren som utför åtgärden är schemat för den angivna tabellen. Om du inte anger schema och standardschemat för användaren som utför COPY åtgärden skiljer sig från schemat för den angivna tabellen COPY avbryts åtgärden och ett felmeddelande returneras.
tabell_namn
Namnet på tabellen som du vill kopiera data till. Måltabellen kan vara en tillfällig eller permanent tabell och måste redan finnas i databasen. Ange ingen kolumnlista för automatiskt schemaidentifieringsläge.
(column_list)
En valfri lista över en eller flera kolumner som används för att mappa källdatafält till måltabellkolumner för inläsning av data.
Ange inte en column_list när AUTO_CREATE_TABLE = 'ON'.
column_list måste omges av parenteser och avgränsas med kommatecken. Kolumnlistan har följande format:
[(Column_name [standard Default_value] [Field_number] [,... n])]
- Column_name – namnet på kolumnen i måltabellen.
- Default_value – standardvärdet som ersätter alla NULL-värden i indatafilen. Standardvärdet gäller för alla filformat. COPY försöker läsa in NULL från indatafilen när en kolumn utelämnas från kolumnlistan eller när det finns ett tomt indatafilfält. Standardvärdet föregår nyckelordet "standard"
- Field_number – indatafilens fältnummer som mappas till målkolumnen.
- Fältindexeringen börjar vid 1.
När du inte anger en kolumnlista COPY mappar kolumner baserat på käll- och målordningen: Indatafält 1 går till målkolumn 1, fält 2 går till kolumn 2 och så vidare.
Externa platser
Platsen där filerna som innehåller data mellanlagras. För närvarande stöds Azure Data Lake Storage (ADLS) Gen2 och Azure Blob Storage:
-
extern plats för Blob Storage:
https://<account\>.blob.core.windows.net/<container\>/<path\> -
Extern plats för ADLS Gen2:
https://<account\>.dfs.core.windows.net/<container\>/<path\>
Note
Slutpunkten .blob är också tillgänglig för ADLS Gen2 och ger för närvarande bästa prestanda.
.blob Använd slutpunkten när .dfs krävs inte för din autentiseringsmetod.
Konto – lagringskontonamnet
Container – namnet på blobcontainern
Path – mappen eller filsökvägen för data. Platsen startar från containern. Om du anger en mapp
COPYhämtar du alla filer från mappen och alla dess undermappar.COPYignorerar dolda mappar och returnerar inte filer som börjar med en understrykning (_) eller en punkt (.) om inte uttryckligen anges i sökvägen. Det här beteendet är detsamma även när du anger en sökväg med ett jokertecken.
Du kan inkludera jokertecken i sökvägen där:
- Matchning av sökvägsnamn för jokertecken är skiftlägeskänsligt
- Du kan fly från ett jokertecken med hjälp av omvänt snedstreck (
\) - Jokerteckenexpansion tillämpas rekursivt. Till exempel läses alla CSV-filer under
Customer1(inklusive underkataloger förCustomer1) in i följande exempel:Account/Container/Customer1/*.csv
Note
För bästa prestanda bör du undvika att ange jokertecken som expanderar över ett större antal filer. Om möjligt anger du flera filplatser i stället för att ange jokertecken.
Du kan bara ange flera filplatser från samma lagringskonto och container via en kommaavgränsad lista, till exempel:
-
https://<account>.blob.core.windows.net/<container\>/<path\>,https://<account\>.blob.core.windows.net/<container\>/<path\>
FILE_TYPE = { 'CSV' | "PARQUET" | "ORC" }
FILE_TYPE anger formatet för externa data.
- CSV: Anger en kommaavgränsad värdefil som är kompatibel med RFC 4180-standarden .
- PARQUET: Anger ett Parquet-format.
- ORC: Anger ett ORC-format (Optimized Row Columnar).
Note
Filtypen Avgränsad text i PolyBase ersätts av filformatet CSV. Du kan konfigurera standardkommaavgränsaren via parametern FIELDTERMINATOR .
FILE_FORMAT = external_file_format_name
FILE_FORMAT gäller endast för Parquet- och ORC-filer. Den anger namnet på det externa filformatobjektet som lagrar filtypen och komprimeringsmetoden för externa data. Om du vill skapa ett externt filformat använder du CREATE EXTERNAL FILE FORMAT.
CREDENTIAL (IDENTITY = '', SECRET = ''')
CREDENTIAL Anger autentiseringsmekanismen för att få åtkomst till det externa lagringskontot. Autentiseringsmetoder är:
| CSV | Parquet | ORC | |
|---|---|---|---|
| Azure Blob Storage- | SAS/MSI/SERVICE PRINCIPAL/KEY/Entra | SAS/KEY | SAS/KEY |
| Azure Data Lake Gen2 | SAS/MSI/SERVICE PRINCIPAL/KEY/Entra | SAS (blob 1 )/MSI (dfs 2 )/SERVICE PRINCIPAL/KEY/Entra | SAS (blob 1 )/MSI (dfs 2 )/SERVICE PRINCIPAL/KEY/Entra |
1 Den blob slutpunkten (.blob.core.windows.net) i den externa platssökvägen krävs för den här autentiseringsmetoden.
2 Den dfs slutpunkten (.dfs.core.windows.net) i den externa platssökvägen krävs för den här autentiseringsmetoden.
Note
- När du autentiserar med hjälp av Microsoft Entra ID eller till ett offentligt lagringskonto behöver du inte ange
CREDENTIAL. - Om ditt lagringskonto är associerat med ett virtuellt nätverk måste du autentisera med hjälp av en hanterad identitet.
Autentisera med signaturer för delad åtkomst (SAS)
-
IDENTITY: En konstant med värdetShared Access Signature -
SECRET: Signaturen för delad åtkomst ger delegerad åtkomst till resurser i ditt lagringskonto.
-
Minsta behörigheter som krävs: READ och LIST
Autentisera med tjänstens huvudnamn
-
IDENTITY:<ClientID>@<OAuth_2.0_Token_EndPoint> -
SECRET: Microsoft Entra huvudnyckel för programtjänsten
-
Minsta RBAC-roller som krävs: Lagringsblobdatadeltagare, Lagringsblobdatadeltagare, Lagringsblobdataägare eller Lagringsblobdataläsare
Autentisera med lagringskontonyckel
-
IDENTITY: En konstant med värdetStorage Account Key -
SECRET: Lagringskontonyckel
-
Autentisera med hanterad identitet (VNet-tjänstslutpunkter)
-
IDENTITY: En konstant med värdetManaged Identity
-
Minsta RBAC-roller som krävs: Lagringsblobdatadeltagare eller Lagringsblobdataägare för Microsoft Entra-registrerade logiska servern i Azure. När du använder en dedikerad SQL-pool (tidigare SQL DW) som inte är associerad med en Synapse-arbetsyta krävs inte den här RBAC-rollen, men den hanterade identiteten kräver behörigheter för Access Control Lista (ACL) för målobjekten för att aktivera läsåtkomst till källfilerna.
Autentisera med en Microsoft Entra-användare
- CREDENTIAL krävs inte
Minsta RBAC-roller som krävs: Lagringsblobdatadeltagare eller Lagringsblobdataägare för Microsoft Entra-användaren
ERRORFILE = Katalogplats
ERRORFILE gäller endast csv. Den anger katalogen i -instruktionen COPY där de avvisade raderna och motsvarande felfil skrivs. Du kan ange den fullständiga sökvägen från lagringskontot eller sökvägen i förhållande till containern. Om den angivna sökvägen inte finns skapar lagret en. En underordnad katalog skapas med namnet _rejectedrows. Tecknet _ säkerställer att katalogen är undantagen för annan databehandling om den inte uttryckligen namnges i platsparametern.
Note
När du skickar en relativ sökväg till ERRORFILEgör du den relativ till den containersökväg som du anger i external_location.
I den här katalogen skapar lagret en mapp baserat på tidpunkten för inläsningen i formatet YearMonthDay -HourMinuteSecond (till exempel 20180330-173205). I den här mappen skriver processen två typer av filer: orsaksfilen (felet) och datafilen (rad). Varje fil förbereder queryID, distributionIDoch ett fil-GUID. Eftersom data och orsaken finns i separata filer har motsvarande filer ett matchande prefix.
Om ERRORFILE har den fullständiga sökvägen för det definierade lagringskontot COPY används ERRORFILE_CREDENTIAL för att ansluta till lagringen. Annars används värdet som du anger för CREDENTIAL. När du använder samma autentiseringsuppgifter för källdata och ERRORFILE, gäller begränsningar som även gäller för ERRORFILE_CREDENTIAL .
ERRORFILE_CREDENTIAL = (IDENTITY = '', SECRET = ''')
ERRORFILE_CREDENTIAL gäller endast för CSV-filer. Datakällan och autentiseringsmetoderna som stöds är:
Azure Blob Storage: SAS, tjänstens huvudnamn eller Microsoft Entra
Azure Data Lake Gen2: SAS, MSI, tjänstens huvudnamn eller Microsoft Entra
Autentisera med signaturer för delad åtkomst (SAS)
-
IDENTITY: En konstant med värdetShared Access Signature -
SECRET: Signaturen för delad åtkomst ger delegerad åtkomst till resurser i ditt lagringskonto.
-
Minsta behörigheter som krävs: READ, LIST, WRITE, CREATE, DELETE
Autentisera med tjänstens huvudnamn
-
IDENTITY:<ClientID>@<OAuth_2.0_Token_EndPoint> -
SECRET: Microsoft Entra huvudnyckel för programtjänsten
-
Minsta RBAC-roller som krävs: Lagringsblobdatadeltagare eller Lagringsblobdataägare
Note
Använd OAuth 2.0-tokenslutpunkten V1-
Autentisera med hanterad identitet (VNet-tjänstslutpunkter)
-
IDENTITY: En konstant med värdetManaged Identity
-
Minsta RBAC-roller som krävs: Lagringsblobdatadeltagare eller Lagringsblobdataägare för den Microsoft Entra-registrerade SQL Database-servern
Autentisera med en Microsoft Entra-användare
-
CREDENTIALkrävs inte
-
Minsta RBAC-roller som krävs: Lagringsblobdatadeltagare eller Lagringsblobdataägare för Microsoft Entra-användaren
Det går inte att använda en lagringskontonyckel med ERRORFILE_CREDENTIAL .
Note
Om du använder samma lagringskonto för felfilen och anger ERRORFILE sökvägen i förhållande till containerns rot behöver du inte ange ERROR_CREDENTIAL.
MAXERRORS = max_errors
MAXERRORS anger det maximala antalet avvisande rader som tillåts i inläsningen innan kopieringsåtgärden misslyckas. Varje rad som kopieringsåtgärden inte kan importera ignoreras och räknas som ett fel. Om du inte anger något värde för maximalt antal fel är 0standardvärdet .
MAXERRORS kan inte användas med AUTO_CREATE_TABLE.
När FILE_TYPE är PARQUETorsakar COPY INTO undantag som orsakas av datatypkonverteringsfel (till exempel Parquet-binärt till SQL-heltal) fortfarande att misslyckas och ignorerar MAXERRORS.
COMPRESSION = { 'DefaultCodec' | "Snappy" | "GZIP" | 'NONE'}
COMPRESSION är valfritt och anger datakomprimeringsmetoden för externa data.
- CSV stöder GZIP.
- Parquet stöder GZIP och Snappy.
- ORC stöder DefaultCodec och Snappy.
- Zlib är standardkomprimering för ORC.
Kommandot COPY identifierar komprimeringstypen automatiskt baserat på filtillägget när du inte anger den här parametern:
-
.gz- GZIP -
.snappy- Kvick -
.deflate- DefaultCodec (endast Parquet och ORC)
Kommandot COPY kräver att gzip-filer inte innehåller något avslutande skräp för att fungera normalt. Gzip-formatet kräver strikt att filerna består av giltiga medlemmar utan ytterligare information före, mellan eller efter dem. Alla avvikelser från det här formatet, till exempel förekomsten av avslutande icke-gzip-data, resulterar i att kommandot COPY misslyckas. Kontrollera att COPY körs korrekt genom att kontrollera att det inte finns något avslutande skräp i slutet av gzip-filer.
FIELDQUOTE = "field_quote"
FIELDQUOTE gäller för CSV och anger ett enda tecken som används som citattecken (stränggränsare) i CSV-filen. Om du inte anger det här värdet används citattecknet (") som citattecken enligt definitionen i RFC 4180-standarden. Hexadecimal notation stöds också för FIELDQUOTE. Utökade ASCII- och flerbytestecken stöds inte med UTF-8 för FIELDQUOTE.
Note
FIELDQUOTE-tecken är undantagna i strängkolumner där det finns en förekomst av en dubbel FIELDQUOTE (avgränsare).
FIELDTERMINATOR = "field_terminator"
FIELDTERMINATOR gäller endast csv. Anger fältavgränsaren som används i CSV-filen. Du kan ange fältavgränsaren med hexadecimal notation. Fältavslutaren kan vara multicharacter. Standardfältavslutaren är en (,). Utökade ASCII- och flerbytestecken stöds inte med UTF-8 för FIELDTERMINATOR.
ROWTERMINATOR = "row_terminator"
ROWTERMINATOR gäller endast csv. Anger radavgränsaren som används i CSV-filen. Du kan ange radavslutaren med hexadecimal notation. Radavgränsaren kan vara multicharacter. Som standard är radavslutaren \r\n.
Kommandot COPY prefixar \r när du anger \n (newline) vilket resulterar i \r\n. Om du bara vill ange \n-tecknet använder du hexadecimal notation (0x0A). När du anger radavgränsare för flera tecken i hexadecimalt ska du inte ange 0x mellan varje tecken.
Utökade ASCII- och flerbytestecken stöds inte med UTF-8 för ROWTERMINATOR.
FIRSTROW = First_row_int
FIRSTROW gäller för CSV och anger radnumret som först läss i alla filer för kommandot COPY. Värdena börjar från 1, vilket är standardvärdet. Om du anger värdet till 2hoppas den första raden i varje fil (rubrikrad) över när data läses in. Rader hoppas över baserat på förekomsten av radavgränsare.
DATEFORMAT = { 'mdy' | "dmy" | "ymd" | 'ydm' | "myd" | "dym" }
DATEFORMAT gäller endast csv och anger datumformatet för datummappningen till SQL Server-datumformat. En översikt över alla datatyper och funktioner för datum och tid Transact-SQL finns i Datatyper och funktioner för datum och tid (Transact-SQL). DATEFORMAT i COPY-kommandot har företräde framför DATEFORMAT som konfigurerats på sessionsnivå.
ENCODING = "UTF8" | "UTF16"
ENCODING gäller endast csv. Standardvärdet är UTF8. Anger datakodningsstandarden för de filer som läses in av kommandot COPY.
IDENTITY_INSERT = "ON" | "AV"
IDENTITY_INSERT anger om identitetsvärdet eller värdena i den importerade datafilen ska användas för identitetskolumnen. Om IDENTITY_INSERT är OFF (standard) verifieras identitetsvärdena för den här kolumnen, men importeras inte. Observera följande beteende med kommandot COPY:
- Om
IDENTITY_INSERTär OFF och tabellen har en identitetskolumn- Du måste ange en kolumnlista som inte mappar ett indatafält till identitetskolumnen.
- Om
IDENTITY_INSERTär PÅ och tabellen har en identitetskolumn- Om du skickar en kolumnlista måste det mappa ett indatafält till identitetskolumnen.
- Standardvärdet stöds inte för kolumnen IDENTITY i kolumnlistan.
- Du kan bara ange
IDENTITY_INSERTför en tabell i taget.
Azure Synapse Analytics tilldelar automatiskt unika värden baserat på de start- och inkrementsvärden som angavs när tabellen skapades.
AUTO_CREATE_TABLE = { 'ON' | 'OFF' }
AUTO_CREATE_TABLE anger om tabellen kan skapas automatiskt genom att arbeta tillsammans med automatisk schemaidentifiering. AUTO_CREATE_TABLE är endast tillgängligt för Parquet-filer i Azure Synapse Analytics.
- PÅ: Aktiverar automatisk skapande av tabeller. Processen
COPY INTOskapar automatiskt en ny tabell genom att identifiera strukturen för filen som ska läsas in. Du kan också använda den med befintliga tabeller för att dra nytta av automatisk schemaidentifiering av Parquet-filer. - AV: Automatisk skapande av tabell är inte aktiverat. Default.
Note
Den automatiska tabellskapandet fungerar tillsammans med automatisk schemaidentifiering. Den automatiska tabellgenereringen är inte aktiverad som standard.
Permissions
Användaren som kör KOMMANDOT COPY måste ha följande behörigheter:
Kräver behörigheter för INSERT och ADMIN BULK OPERATIONS. I Azure Synapse Analytics krävs behörigheterna INSERT och ADMIN DATABASE BULK OPERATIONS.
Om användaren som kör KOMMANDOT COPY också vill generera en ny tabell och läsa in data i den, kräver de dessutom behörigheterna CREATE TABLE och ALTER ON SCHEMA.
Om du till exempel vill tillåta att mike@contoso.com använder COPY för att skapa en ny tabell i HR-schemat och infoga data från en Parquet-fil använder du följande Transact-SQL exempel:
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
Satsen COPY accepterar endast giltiga tecken i UTF-8 och UTF-16 för raddata och kommandoparametrar. Instruktionen COPY kan felaktigt tolka källfiler eller parametrar (till exempel eller FIELDTERMINATOR) som ROWTERMINATOR använder ogiltiga tecken och orsakar oväntade resultat, till exempel skadade data eller andra fel. Se till att dina källfiler och parametrar är UTF-8- eller UTF-16-kompatibla innan du anropar satsen COPY .
Frågetipset MAXDOP stöds inte med COPY INTO.
För att säkerställa tillförlitlig körning ändrar du inte källfilerna och mapparna under åtgärden COPY INTO .
- Om du ändrar, tar bort eller ersätter alla refererade filer eller mappar medan kommandot körs kan åtgärden misslyckas eller leda till inkonsekvent datainmatning.
- Innan du
COPY INTOkör kontrollerar du att alla källdata är stabila och inte ändras under processen.
Om källdata har större precision än målkolumndefinitionen trunkeras värdet, inte avrundat, för numeriska typer, datum och tidstyper.
Examples
A. Läsa in från ett offentligt lagringskonto
I följande exempel visas den enklaste formen av COPY kommandot, som läser in data från ett offentligt lagringskonto. I det här exemplet matchar instruktionens COPY standardinställningar formatet för CSV-filen för radobjektet.
COPY INTO dbo.[lineitem]
FROM 'https://unsecureaccount.blob.core.windows.net/customerdatasets/folder1/lineitem.csv'
WITH (FIELDTERMINATOR = '|')
Standardvärdena för KOMMANDOT COPY är:
DATEFORMAT= Datumformat för sessionMAXERRORS= 0COMPRESSIONStandard är okomprimeradFIELDQUOTE= '"'FIELDTERMINATOR= ','ROWTERMINATOR= '\n'
Important
COPY Behandlar \n som \r\n internt. Mer information finns i avsnittet ROWTERMINATOR .
FIRSTROW= 1ENCODING= "UTF8"FILE_TYPE= "CSV"IDENTITY_INSERT= "OFF"
B. Läs in autentisering via SAS (Share Access Signature)
I följande exempel läses filer som använder radflödet som radavgränsare, till exempel UNIX-utdata. Det här exemplet använder också en SAS-nyckel för att autentisera till Azure Blob Storage.
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. Läs in med en kolumnlista med standardvärden som autentiserar via lagringskontonyckel
Det här exemplet läser in filer som anger en kolumnlista med standardvärden.
--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. Läs in Parquet eller ORC med ett befintligt filformatobjekt
I det här exemplet används ett jokertecken för att läsa in alla Parquet-filer under en mapp.
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. Läs in och ange jokertecken och flera filer
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. Läs in med MSI-autentiseringsuppgifter
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. Läs in med automatisk schemaidentifiering
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'
)
FAQ
Hur jämförs prestandan för COPY-kommandot med PolyBase?
Prestanda för COPY-kommandot kan vara bättre beroende på din arbetsbelastning.
Det går inte att dela komprimerade filer automatiskt i informationslagret. För bästa inläsningsprestanda bör du överväga att dela upp dina indata i flera filer när du läser in komprimerade CSV:er.
Informationslagret kan automatiskt dela upp stora okomprimerade CSV-filer för parallell inläsning, så du behöver vanligtvis inte dela okomprimerade CSV-filer manuellt. I vissa fall där automatisk fildelning inte är möjlig på grund av dataegenskaper kan det fortfarande vara bra att dela upp stora CSV:er manuellt.
Vad är vägledningen för fildelning för copy-kommandot som läser in komprimerade CSV-filer?
I följande tabell beskrivs antalet filer som du bör använda. När du når det rekommenderade antalet filer får du bättre prestanda med större filer. Antalet filer bestäms av antalet beräkningsnoder multiplicerat med 60. Vid till exempel 6 000 DWU har du 12 beräkningsnoder, så du har 12 * 60 = 720 partitioner. En enkel fildelningsupplevelse finns i Så här maximerar du dataflödet för KOPIERingsbelastning med fildelningar.
| DWU | Antal filer |
|---|---|
| 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 |
Vad är vägledningen för fildelning för copy-kommandot som läser in Parquet- eller ORC-filer?
Du behöver inte dela Parquet- och ORC-filer eftersom copy-kommandot automatiskt delar upp filer. För bästa prestanda bör Parquet- och ORC-filer i Azure lagringskontot vara 256 MB eller större.
Finns det några begränsningar för antalet eller storleken på filer?
Det finns inga begränsningar för antalet eller storleken på filer. För bästa prestanda använder du dock filer som är minst 4 MB. Begränsa också antalet källfiler till högst 5 000 filer för bättre prestanda.
Finns det några kända problem med COPY-instruktionen?
Om du har en Azure Synapse arbetsyta som du skapade före den 7 december 2020 kan du stöta på ett liknande felmeddelande när du autentiserar med hjälp av Hanterad identitet: com.microsoft.sqlserver.jdbc.SQLServerException: Managed Service Identity isn't enabled on this server. Please enable Managed Service Identity and try again.
Om du vill undvika det här problemet registrerar du arbetsytans hanterade identitet på nytt:
- Installera Azure PowerShell. Se Installera PowerShell.
- Registrera arbetsytans hanterade identitet med hjälp av PowerShell:
Connect-AzAccount Select-AzSubscription -SubscriptionId <subscriptionId> Set-AzSqlServer -ResourceGroupName your-database-server-resourceGroup -ServerName your-SQL-servername -AssignIdentity
Relaterat innehåll
- översikt över inläsning med Azure Synapse Analytics
gäller för:Warehouse i Microsoft Fabric
Den här artikeln beskriver hur du använder instruktionen COPY i Warehouse i Microsoft Fabric för inläsning från externa lagringskonton. Instruktionen COPY ger mest flexibilitet för datainmatning med högt dataflöde i ditt lager i Microsoft Fabric och är som strategi för att Ingest-data till ditt lager i Microsoft Fabric.
I Fabric Data Warehouse stöder COPY-instruktionen för närvarande FILformaten CSV, JSONL och PARQUET. För datakällor stöds Azure Data Lake Storage Gen2 konton och OneLake-källor.
Mer information om hur du använder COPY INTO i ditt lager i Microsoft Fabric finns i Mata in data i ditt lager i Microsoft Fabric med copy-instruktionen.
Som standard autentiseras COPY INTO som kör Microsoft Entra ID användare.
Användning COPY för följande funktioner:
- Använd användare med lägre privilegier för att läsa in data utan att behöva strikta KONTROLL-behörigheter på lagret.
- Kör en enda T-SQL-instruktion utan att behöva skapa några andra databasobjekt.
- Parsa och läs in CSV-filer korrekt där avgränsare (sträng, fält, rad) är undantagna inom strängavgränsade kolumner.
- Parsa och läs in JSONL-filer korrekt där varje rad är ett giltigt JSON-objekt och fält mappas med JSON-sökvägsuttryck.
- Ange en finare behörighetsmodell utan att exponera lagringskontonycklar med hjälp av signaturer för delad åtkomst (SAS).
- Använd ett annat lagringskonto för platsen
ERRORFILE(REJECTED_ROW_LOCATION). - Anpassa standardvärden för varje målkolumn och ange källdatafält som ska läsas in i specifika målkolumner.
- Ange en anpassad radterminator, fältterminator och fältcitat för CSV-filer.
- Ange jokertecken och flera filer i lagringsplatssökvägen.
- Mer information om datainmatningsalternativ och metodtips finns i Mata in data i ditt lager i Microsoft Fabric med copy-instruktionen.
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
Valfritt om det aktuella lagret för användaren som utför åtgärden är lagret för den angivna tabellen. Om du inte anger lager och det angivna schemat och tabellen inte finns i det aktuella lagret, COPY misslyckas och ett felmeddelande returneras.
schema_name
Valfritt om standardschemat för användaren som utför åtgärden är schemat för den angivna tabellen. Om du inte anger schema och standardschemat för användaren som utför COPY åtgärden skiljer sig från schemat för den angivna tabellen COPY avbryts och ett felmeddelande returneras.
tabell_namn
Namnet på tabellen att data ska COPY in i. Måltabellen måste redan finnas i lagret.
(column_list)
En valfri lista med kolumner som används för att mappa källdatafält till måltabellkolumner under datainläsningen.
column_list måste omges av parenteser och avgränsas med kommatecken. Syntaxen är:
[(Column_name [standard Default_value] [Field_number | JSON_path] [,... n])]
- Column_name – namnet på kolumnen i måltabellen.
-
Default_value – standardvärdet som ersätter vilket värde som helst
NULLi indatafilen. Standardvärdet gäller för alla filformat.COPYförsöker laddaNULLfrån indatafilen när en kolumn utelämnas från kolumnlistan eller när det finns ett tomt fält för inmatningsfilen. Standardvärdet föregås av nyckelordet "standard" - Field_number – gäller endast csv-filer. Anger ordningspositionen för fältet i indata. Fältindexeringen börjar vid 1.
-
JSON_path – gäller endast för JSONL-filer. Anger ett JSON-sökvägsuttryck som identifierar det fält som ska extraheras från varje JSON-objekt (till exempel
$.CustomerName).
När du inte anger column_listCOPY mappar kolumner baserat på käll- och målordningen: Indatafält 1 går till målkolumn 1, fält 2 går till kolumn 2 och så vidare.
Note
När du arbetar med Parquet-filer på Warehouse i Microsoft Fabric måste kolumnnamnen matcha exakt i källan och målet. Om namnet på kolumnen i måltabellen skiljer sig från kolumnnamnet i parquet-filen fylls måltabellkolumnen med NULL.
När du inte anger en kolumnlista COPY mappar kolumner baserat på käll- och målordningen: Indatafält 1 går till målkolumn 1, fält 2 går till kolumn 2 och så vidare.
Extern lokation
Anger var filerna som innehåller data mellanlagras. För närvarande stöds Azure Data Lake Storage (ADLS) Gen2, Azure Blob Storage och OneLake:
-
extern plats för Blob Storage:
https://<account\>.blob.core.windows.net/<container\>/<path\> -
Extern plats för ADLS Gen2:
https://<account\>.dfs.core.windows.net/<container\>/<path\> -
Extern plats för OneLake:
https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/
Azure Data Lake Storage (ADLS) Gen2 ger bättre prestanda än Azure Blob Storage (äldre). Överväg att använda ett ADLS Gen2-konto när det är möjligt.
Note
Slutpunkten .blob är också tillgänglig för ADLS Gen2 och ger för närvarande bästa prestanda.
blob Använd slutpunkten när dfs krävs inte för din autentiseringsmetod.
Konto – lagringskontonamnet
Container – namnet på blobcontainern
Path – mappen eller filsökvägen för data. Platsen startar från containern. Om du anger en mapp
COPYhämtar du alla filer från mappen och alla dess undermappar.COPYignorerar dolda mappar och returnerar inte filer som börjar med en understrykning (_) eller en punkt (.) om inte uttryckligen anges i sökvägen. Det här beteendet är detsamma även när du anger en sökväg med ett jokertecken.
Jokertecken kan ingå i sökvägen där
- Matchning av sökvägsnamn för jokertecken är skiftlägeskänsligt
- Du kan fly från ett jokertecken med hjälp av omvänt snedstreck (
\)
Note
För bästa prestanda bör du undvika att ange jokertecken som expanderar över ett större antal filer. Om möjligt anger du flera filplatser i stället för att ange jokertecken.
Du kan bara ange flera filplatser från samma lagringskonto och container via en kommaavgränsad lista, till exempel:
https://<account>.blob.core.windows.net/<container>/<path>, https://<account>.blob.core.windows.net/<container>/<path>
externa platser bakom brandväggen
För att få åtkomst till filer i Azure Data Lake Storage (ADLS) Gen2 och Azure Blob Storage-platser som finns bakom en brandvägg gäller följande krav:
- En arbetsyteidentitet för arbetsytan som är värd för ditt lager måste etableras. Mer information om hur du konfigurerar en arbetsyteidentitet finns i Arbetsyteidentitet.
- Ditt Entra-ID-konto måste kunna använda arbetsytans identitet.
- Ditt Entra-ID-konto måste ha åtkomst till de underliggande filerna via rollbaserad åtkomstkontroll i Azure (RBAC) eller data lake-ACL:er.
- Din infrastrukturarbetsyta som är värd för lagret måste läggas till som en resursinstansregel. Mer information om hur du lägger till din Infrastruktur-arbetsyta med en resursinstansregel finns i Resursinstansregel.
FILE_TYPE = { 'CSV' | "JSONL" | "PARQUET" }
FILE_TYPE anger formatet för externa data.
- CSV: Anger en kommaavgränsad värdefil som är kompatibel med RFC 4180-standarden .
- JSONL: Anger en JSON-fil (JSON Lines), där varje rad är ett giltigt JSON-objekt.
- PARQUET: Anger ett Parquet-format.
CREDENTIAL (IDENTITY = '', SECRET = ''')
CREDENTIAL Anger autentiseringsmekanismen för att få åtkomst till det externa lagringskontot.
I Infrastrukturdatalager:
-
COPY INTOstöds inte där offentlig åtkomst är inaktiverad. - För offentliga lagringskonton är de autentiseringsmekanismer som stöds Microsoft Entra ID, SAS (Shared Access Signature) eller Storage Account Key (SAK).
- För offentliga lagringskonton bakom en brandvägg är Microsoft Entra ID-autentisering den enda autentiseringsmetod som stöds.
COPY INTOOm du använder OneLake som källa stöder du endast EntraID-autentisering.
Användarens Microsoft Entra ID autentisering är standard. Inga autentiseringsuppgifter behöver anges.
- Autentisera med signatur för delad åtkomst (SAS)
-
IDENTITY: En konstant med värdetShared Access Signature. -
SECRET: Signaturen för delad åtkomst ger delegerad åtkomst till resurser i ditt lagringskonto. - Minsta behörigheter som krävs: READ och LIST.
-
- Autentisera med lagringskontonyckel
-
IDENTITY: En konstant med värdetStorage Account Key. -
SECRET: Nyckel för lagringskonto.
-
ERRORFILE = Katalogplats
ERRORFILE gäller för CSV och JSONL. Anger den katalog där de avvisade raderna och motsvarande felfil ska skrivas. Du kan ange den fullständiga sökvägen från lagringskontot eller sökvägen i förhållande till containern. Om den angivna sökvägen inte finns skapar systemet en för din räkning. En underordnad katalog skapas med namnet _rejectedrows. Tecknet _ säkerställer att katalogen är undantagen för annan databehandling om den inte uttryckligen namnges i platsparametern.
Note
När du skickar en relativ sökväg till ERRORFILEgör du den relativ till den containersökväg som du anger i external_location.
I den här katalogen skapar lagret en mapp baserat på tidpunkten för inläsningen i formatet YearMonthDay -HourMinuteSecond (till exempel 20180330-173205). I den här mappen skapar lagret en mapp med instruktions-ID:t, och under den mappen skrivs två typer av filer: ett fel. Json-fil som innehåller avslagsorsakerna och en row.csv fil som innehåller de avvisade raderna.
Om ERRORFILE den fullständiga sökvägen för lagringskontot har definierats används den ERRORFILE_CREDENTIAL för att ansluta till lagringen. Annars används det värde som nämns för CREDENTIAL . När samma autentiseringsuppgifter som används för källdata används för ERRORFILEgäller även begränsningar som gäller för ERRORFILE_CREDENTIAL .
När du använder ett brandväggsskyddat Azure Storage-konto skapas felfilen i samma container som anges i lagringskontosökvägen. När du överväger att använda alternativet ERRORFILE i det här scenariot måste du också ange parametern MAXERROR . Om ERRORFILE den fullständiga sökvägen för lagringskontot har definierats används den ERRORFILE_CREDENTIAL för att ansluta till lagringen. Annars används det värde som nämns för CREDENTIAL .
ERRORFILE_CREDENTIAL = (IDENTITY = '', SECRET = ''')
ERRORFILE_CREDENTIAL gäller för CSV- och JSONL-filer. På Warehouse i Microsoft Fabric är den enda autentiseringsmekanism som stöds signatur för delad åtkomst (SAS).
- Autentisera med signaturer för delad åtkomst (SAS)
-
IDENTITY: En konstant med värdetShared Access Signature -
SECRET: Signaturen för delad åtkomst ger delegerad åtkomst till resurser i ditt lagringskonto.
-
- Minsta behörigheter som krävs: READ, LIST, WRITE, CREATE, DELETE
Note
Om du använder samma lagringskonto för felfilen och anger ERRORFILE sökvägen i förhållande till containerns rot behöver du inte ange ERROR_CREDENTIAL.
MAXERRORS = max_errors
MAXERRORS gäller för CSV och JSONL. Anger det maximala antalet avvisande rader som tillåts i belastningen innan åtgärden COPY misslyckas. Varje rad som operationen COPY inte kan importera ignoreras och räknas som ett fel. Om du inte anger ett maximalt antal fel är 0standardvärdet .
I Fabric Data Warehouse kan du inte använda MAXERRORS när FILE_TYPE är PARQUET.
COMPRESSION = { 'Snappy' | "GZIP" | 'NONE'}
COMPRESSION är valfritt och anger datakomprimeringsmetoden för externa data.
- CSV stöder GZIP.
- Parquet stöder GZIP och Snappy.
- Stöds inte för JSONL
Kommandot COPY detekterar automatiskt komprimeringstypen baserat på filändelsen när denna parameter inte är specificerad:
-
.gz- GZIP
Inläsning av komprimerade filer stöds för närvarande endast med parser version 1.0.
Kommandot COPY kräver att gzip-filer inte innehåller något avslutande skräp för att fungera normalt. Gzip-formatet kräver strikt att filerna består av giltiga medlemmar utan ytterligare information före, mellan eller efter dem. Eventuella avvikelser från det här formatet, till exempel förekomsten av avslutande icke-gzip-data, resulterar i att kommandot misslyckas COPY . Kontrollera att det inte finns något avslutande skräp i slutet av gzip-filer för att säkerställa COPY att körningarna har slutförts.
FIELDQUOTE = "field_quote"
FIELDQUOTE gäller endast csv. Anger ett enskilt tecken som används som citattecken (stränggränsare) i CSV-filen. Om du inte anger FIELDQUOTEanvänds citattecknet (") som citattecken enligt definitionen i RFC 4180-standarden. Hexadecimal notation stöds också för FIELDQUOTE. Utökade ASCII- och flerbytestecken stöds inte med UTF-8 för FIELDQUOTE.
Note
FIELDQUOTE-tecken är undantagna i strängkolumner där det finns en förekomst av en dubbel FIELDQUOTE (avgränsare).
FIELDTERMINATOR = "field_terminator"
FIELDTERMINATOR gäller endast csv. Anger fältavgränsaren som används i CSV-filen. Du kan också ange fältavslutaren med hexadecimal notation. Fältavslutaren kan vara multicharacter. Standardfältets avslutare är (,). Utökade ASCII- och flerbytestecken stöds inte med UTF-8 för FIELDTERMINATOR.
ROWTERMINATOR = "row_terminator"
ROWTERMINATOR gäller endast csv. Anger radavgränsaren som används i CSV-filen. Du kan ange radavslutaren med hexadecimal notation. Radavgränsaren kan vara multicharacter. Standardavgränsarna är \r\n, \noch \r.
Kommandot COPY prefixar tecknet \r när man specificerar \n (radny) vilket resulterar i \r\n. Om du bara vill ange \n-tecknet använder du hexadecimal notation (0x0A). När du anger radavgränsare för flera tecken i hexadecimalt anger du inte 0x mellan varje tecken.
Utökade ASCII- och flerbytestecken stöds inte med UTF-8 för ROWTERMINATOR.
FIRSTROW = First_row_int
FIRSTROW gäller endast csv. Specificerar radnumret som läses först i alla filer för kommandot COPY . Värdena börjar från 1, vilket är standardvärdet. Om du anger värdet till 2hoppas den första raden i varje fil (rubrikrad) över när data läses in. Rader hoppas över baserat på förekomsten av radavgränsare.
DATEFORMAT = { 'mdy' | "dmy" | "ymd" | 'ydm' | "myd" | "dym" }
DATEFORMAT gäller för CSV och JSONL. Anger datumformatet för datummappningen till SQL Server datumformat. En översikt över alla datatyper och funktioner för datum och tid Transact-SQL finns i Datatyper och funktioner för datum och tid (Transact-SQL). DATEFORMAT inom kommandot COPY har företräde framför DATEFORMAT konfigurerat på sessionsnivå.
ENCODING = "UTF8" | "UTF16"
ENCODING gäller för CSV och JSONL. Standardvärdet är UTF8. Specificerar datakodningsstandarden för filerna som laddas av kommandot COPY .
PARSER_VERSION = { '1.0' | '2.0' }
PARSER_VERSION gäller endast för CSV-filer. Standardvärdet är 2.0.
PARSER_VERSION anger filparsern som används för inmatning när källfiltypen är CSV. 2.0-parsern ger bättre prestanda för inmatning av CSV-filer.
Parser version 2.0 har följande begränsningar:
- Komprimerade CSV-filer stöds inte.
- Filer med UTF-16-kodning stöds inte.
- Multicharacter eller multibyte
ROWTERMINATOR,FIELDTERMINATORellerFIELDQUOTEstöds inte. Dock\r\naccepteras som standardROWTERMINATOR.
När du använder parser version 1.0 med UTF-8-filer stöds inte flerbytes- och multicharacter-terminators för FIELDTERMINATOR.
Parser version 1.0 är endast tillgängligt för bakåtkompatibilitet. Använd den bara när du stöter på dessa begränsningar.
Note
När du använder COPY INTO med komprimerade CSV-filer eller -filer med UTF-16-kodning COPY INTO växlar automatiskt till PARSER_VERSION 1.0, utan att användaråtgärd krävs. För flerteckensavslutare på FIELDTERMINATOR eller ROWTERMINATORmisslyckas -instruktionen COPY INTO . Använd PARSER_VERSION = '1.0' om du behöver multikarakteravgränsare.
MATCH_COLUMN_COUNT = { 'ON' | 'AV' }
MATCH_COLUMN_COUNT gäller endast för CSV-filer. Standardvärdet är OFF. Den anger om COPY kommandot ska kontrollera om kolumnantalet rader i källfilerna matchar kolumnantalet i måltabellen. Följande beteende gäller:
- Om
MATCH_COLUMN_COUNTärOFF:- Kommandot ignorerar att kolumner överskrids från källrader.
- Kommandot infogar
NULLvärden i null-kolumner för rader med färre kolumner.
- Kommandot infogar
- Om ett värde inte anges till en kolumn som inte kan null-värdet misslyckas
COPYkommandot.
- Kommandot ignorerar att kolumner överskrids från källrader.
- Om
MATCH_COLUMN_COUNTärON:- Kommandot
COPYkontrollerar om kolumnantalet på varje rad i varje fil från källan matchar kolumnantalet i destinationstabellen.
- Kommandot
- Om det finns ett matchningsfel för kolumnantal misslyckas
COPYkommandot.
Note
MATCH_COLUMN_COUNT fungerar oberoende av MAXERRORS. Ett matchningsfel för antal kolumner gör COPY INTO att det misslyckas oavsett MAXERRORS.
Använda COPY INTO med OneLake
Använd COPY INTO för att läsa in data direkt från filer som lagras i Fabric OneLake under befintliga objekt. Den här metoden eliminerar behovet av externa mellanlagringskonton, till exempel ADLS Gen2 eller Blob Storage, och aktiverar arbetsytestyrd, SaaS-inbyggd inmatning med hjälp av Fabric behörigheter. Den här funktionen stöder:
- Läsa från valfri plats i en arbetsyta och ett objekt
- Arbetsyte-till-lager-inläsningar inom samma klientorganisation
- Intern identitetsframtvingande med hjälp av Microsoft Entra ID
Example:
COPY INTO t1
FROM 'https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/*.csv'
WITH (
FILE_TYPE = 'CSV',
FIRSTROW = 2
);
Permissions
Behörigheter för kontrollplan
Om du vill köra COPY INTO kommandot måste du beviljas medlemskap till en arbetsyteroll via Hantera åtkomst i arbetsytan, med minst rollen Visningsprogram. Du kan också dela informationslageråtkomst med en användare via Item-behörigheter i Fabric-portalen med minst läsbehörighet. Läsbehörigheten räcker för att anpassa till principen om lägsta behörighet.
Behörigheter för dataplan
När du har beviljat kontrollplansbehörigheter via arbetsyteroller eller objektbehörigheter, om användaren bara har läsbehörighet på dataplansnivå, beviljar du även användaren INSERT och ADMINISTER DATABASE BULK OPERATIONS behörigheter med hjälp av T-SQL-kommandon.
Följande T-SQL-skript ger till exempel dessa behörigheter till en enskild användare med hjälp av deras Microsoft Entra ID.
GRANT ADMINISTER DATABASE BULK OPERATIONS to [mike@contoso.com];
GO
GRANT INSERT to [mike@contoso.com];
GO
När du använder alternativet felfil måste användaren ha minimal behörighet för Blob Storage deltagare i containern lagringskonto.
När du använder OneLake som källa måste användaren ha deltagarbehörighet eller högre behörighet för både källarbetsytan (där Lakehouse finns) och målarbetsytan (där lagret finns). Microsoft Entra ID- och Fabric arbetsyteroller styr all åtkomst.
Remarks
Satsen COPY accepterar endast giltiga tecken i UTF-8 och UTF-16 för raddata och kommandoparametrar. Om du använder källfiler eller parametrar (till exempel eller FIELDTERMINATOR) som ROWTERMINATOR innehåller ogiltiga tecken kan instruktionen COPY tolka dem felaktigt och orsaka oväntade resultat, till exempel skadade data eller andra fel. Innan du anropar -instruktionen COPY kontrollerar du att källfilerna och parametrarna är UTF-8- eller UTF-16-kompatibla.
Instruktionen COPY INTO har begränsningar för storleken på enskilda kolumner med varchar(max) och varbinary(max) samt den totala radstorlek som du kan mata in.
- Parquet: maximal varchar(max)/varbinary(max) kolumnstorlek 16 MB, maximal radstorlek 1 GB.
- CSV och JSONL: maximal varchar(max)/varbinary(max) kolumnstorlek 1 MB, maximal radstorlek 16 MB.
För att säkerställa tillförlitlig körning ändrar du inte källfilerna och mapparna under åtgärden COPY INTO .
- Om du ändrar, tar bort eller ersätter alla refererade filer eller mappar medan kommandot körs kan åtgärden misslyckas eller leda till inkonsekvent datainmatning.
- Innan du
COPY INTOkör kontrollerar du att alla källdata är stabila och inte ändras under processen.
Om källdata har större precision än målkolumndefinitionen trunkeras värdet, inte avrundat, för numeriska typer, datum och tidstyper.
Begränsningar för OneLake som källa
Endast Microsoft Entra ID-autentisering stöds. Andra autentiseringsmetoder, till exempel SAS-token, delade nycklar eller anslutningssträngar, är inte tillåtna.
Informationslagerobjekt stöds inte som källplatser. Filer måste komma från andra infrastrukturobjekt som exponerar filer via OneLake-lagring.
OneLake-sökvägar måste använda arbetsytan och lager-ID:t. Egna namn för arbetsytor eller Lakehouses stöds inte just nu.
Deltagarbehörigheter krävs på båda arbetsytorna. Den körande användaren måste ha minst deltagarrollen på lakehouse-källarbetsytan och målarbetsytan Lager.
Examples
Mer information om hur du använder COPY INTO i ditt lager i Microsoft Fabric finns i Mata in data i ditt lager i Microsoft Fabric med copy-instruktionen.
A. Läsa in från ett offentligt lagringskonto
I följande exempel visas den enklaste formen av COPY kommandot, som läser in data från ett offentligt lagringskonto. I det här exemplet matchar instruktionens COPY standardinställningar formatet för CSV-filen för radobjektet.
COPY INTO dbo.[lineitem]
FROM 'https://unsecureaccount.blob.core.windows.net/customerdatasets/folder1/lineitem.csv'
Standardvärdena för kommandot COPY är:
MAXERRORS = 0COMPRESSION(standardvärdet är okomprimerat)FIELDQUOTE = '"'FIELDTERMINATOR = ','ROWTERMINATOR = '\n'Important
COPYBehandlar\nsom\r\ninternt. Mer information finns i avsnittetROWTERMINATOR.FIRSTROW = 1ENCODING = 'UTF8'FILE_TYPE = 'CSV'
B. Läs in autentisering via SAS (Share Access Signature)
I följande exempel läses filer som använder radflödet som radavgränsare, till exempel UNIX-utdata. Det här exemplet använder också en SAS-nyckel för att autentisera till Azure Blob Storage.
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. Läs in med en kolumnlista med standardvärden som autentiserar via Lagringskontonyckel (SAK)
Det här exemplet läser in filer som anger en kolumnlista med standardvärden.
--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. Ladda Parquet
I det här exemplet används ett jokertecken för att läsa in alla Parquet-filer under en mapp med hjälp av den körbara användarens Entra ID.
COPY INTO test_parquet
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/*.parquet'
WITH (
FILE_TYPE = 'PARQUET'
)
E. Läs in JSONL
I det här exemplet används ett jokertecken för att läsa in alla JSONL-filer under en mapp med hjälp av den körande användarens Entra ID.
COPY INTO test_jsonl
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/*.jsonl'
WITH (
FILE_TYPE = 'JSONL'
)
F. Mappa kolumnnamn till fältsökvägar i JSONL-dokument
I följande exempel visas en JSON Lines-fil (JSONL), där varje rad representerar ett enda JSON-objekt:
{"CountryKey": 0, "CountryName": "ALGERIA", "RegionID": 0, "Population": 34800000}
{"CountryKey": 1, "CountryName": "ARGENTINA", "RegionID": 1, "Population": 46044703}
{"CountryKey": 2, "CountryName": "BRAZIL", "RegionID": 1, "Population": 203080756}
I COPY INTOkan du mappa tabellkolumner till specifika JSON-fält med hjälp av JSON-sökvägsuttryck. Med den här mappningen kan du bara mata in de obligatoriska fälten från källdata.
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. Läs in data genom att ange jokertecken och flera filer
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. Läsa in data från OneLake
COPY INTO t1
FROM 'https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/*.csv'
WITH (
FILE_TYPE = 'CSV',
FIRSTROW = 2
);