KOPIERA TILL (Transact-SQL)

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 :

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 COPY hämtar du alla filer från mappen och alla dess undermappar. COPY ignorerar 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ör Customer1) 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ärdet Shared 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ärdet Storage Account Key
    • SECRET: Lagringskontonyckel
  • Autentisera med hanterad identitet (VNet-tjänstslutpunkter)

    • IDENTITY: En konstant med värdet Managed 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ärdet Shared 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ärdet Managed 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

    • CREDENTIAL krä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_INSERT fö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 INTO skapar 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 session

  • MAXERRORS = 0

  • COMPRESSION Standard är okomprimerad

  • FIELDQUOTE = '"'

  • FIELDTERMINATOR = ','

  • ROWTERMINATOR = '\n'

Important

COPY Behandlar \n som \r\n internt. Mer information finns i avsnittet ROWTERMINATOR .

  • FIRSTROW = 1

  • ENCODING = "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:

  1. Installera Azure PowerShell. Se Installera PowerShell.
  2. 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
    

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 NULL i indatafilen. Standardvärdet gäller för alla filformat. COPY försöker ladda NULL frå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 COPY hämtar du alla filer från mappen och alla dess undermappar. COPY ignorerar 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 INTO stö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 INTO Om 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ärdet Shared 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ärdet Storage 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ärdet Shared 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, FIELDTERMINATOReller FIELDQUOTE stöds inte. Dock \r\n accepteras som standard ROWTERMINATOR.

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 är OFF:
    • Kommandot ignorerar att kolumner överskrids från källrader.
      • Kommandot infogar NULL värden i null-kolumner för rader med färre kolumner.
    • Om ett värde inte anges till en kolumn som inte kan null-värdet misslyckas COPY kommandot.
  • Om MATCH_COLUMN_COUNT är ON:
    • Kommandot COPY kontrollerar om kolumnantalet på varje rad i varje fil från källan matchar kolumnantalet i destinationstabellen.
  • Om det finns ett matchningsfel för kolumnantal misslyckas COPY kommandot.

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

  • COMPRESSION (standardvärdet är okomprimerat)

  • FIELDQUOTE = '"'

  • FIELDTERMINATOR = ','

  • ROWTERMINATOR = '\n'

    Important

    COPY Behandlar \n som \r\n internt. Mer information finns i avsnittet ROWTERMINATOR .

  • FIRSTROW = 1

  • ENCODING = '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
);