Dela via


KOPIERA TILL (Transact-SQL)

gäller för:Azure Synapse Analytics

Den här artikeln beskriver hur du använder COPY-instruktionen i Azure Synapse Analytics för inläsning från externa lagringskonton. COPY-instruktionen ger mest flexibilitet för datainmatning med högt dataflöde till Azure Synapse Analytics.

Not

Informationslager i Microsoft Fabric finns i KOPIERA TILL.

Använd COPY för följande funktioner:

  • Använda användare med lägre privilegier för att läsa in utan att behöva strikta KONTROLL-behörigheter i informationslagret
  • Köra 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
  • Ange en finare behörighetsmodell utan att exponera lagringskontonycklar med hjälp av SAS (Share Access Signatures)
  • Använd ett annat lagringskonto för ERRORFILE-platsen (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 radavgränsare, fältavgränsare och fältoffert för CSV-filer
  • Använda 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 tabellerna automatiskt 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

Not

Om du vill läsa in komplexa datatyper från Parquet-filer måste automatisk tabellskapande aktiveras med hjälp av AUTO_CREATE_TABLE.

I följande dokumentation finns omfattande exempel och snabbstarter med copy-instruktionen:

Not

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' } ]
)

Argument

schema_name

Valfritt om standardschemat för användaren som utför åtgärden är schemat för den angivna tabellen. Om schema inte har angetts och standardschemat för användaren som utför kopieringsåtgärden skiljer sig från schemat i den angivna tabellen avbryts COPY och ett felmeddelande returneras.

table_name

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 en kolumnlista inte har angetts mappar COPY 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 osv.

externa platser

Är 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\>

Not

.blob-slutpunkten är också tillgänglig för ADLS Gen2 och ger för närvarande bästa prestanda. Använd .blob-slutpunkten när .dfs inte krävs 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 en mapp har angetts hämtar COPY 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.

Jokerteckenkort kan ingå i sökvägen där

  • Matchning av sökvägsnamn för jokertecken är skiftlägeskänsligt
  • Jokertecken kan inte användas med 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

Not

För bästa prestanda bör du undvika att ange jokertecken som skulle expandera över ett större antal filer. Om möjligt anger du flera filplatser i stället för att ange jokertecken.

Flera filplatser kan bara anges 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 på externa data.

  • CSV: Anger en fil med kommaavgränsade värden som är kompatibel med RFC 4180 standard.
  • PARQUET: Anger ett Parquet-format.
  • ORC: Anger ett ORC-format (Optimized Row Columnar).

Not

Filtypen "Avgränsad text" i PolyBase ersätts med filformatet "CSV" där standardkommaavgränsaren kan konfigureras via parametern FIELDTERMINATOR.

FILE_FORMAT = external_file_format_name

FILE_FORMAT gäller endast för Parquet- och ORC-filer och 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 åtkomst till det externa lagringskontot. Autentiseringsmetoder är:

CSV Parkettgolv ORCH
Azure Blob Storage- SAS/MSI/SERVICE PRINCIPAL/KEY/Entra SAS/NYCKEL SAS/NYCKEL
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.

Not

  • När du autentiserar med Microsoft Entra-ID eller till ett offentligt lagringskonto behöver CREDENTIAL inte anges.
  • 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 "Signatur för delad åtkomst"
    • SECRET: Signaturen fördelad åtkomstger 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-tjänstens huvudnyckel
    • Minsta RBAC-roller som krävs: Lagringsblobdatadeltagare, Lagringsblobdatadeltagare, Lagringsblobdataägare eller Lagringsblobdataläsare
  • Autentisera med lagringskontonyckel

    • IDENTITY: En konstant med värdet "Lagringskontonyckel"
    • SECRET: Lagringskontonyckel
  • Autentisera med hanterad identitet (VNet-tjänstslutpunkter)

    • IDENTITET: En konstant med värdet "Hanterad identitet"
    • 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 åtkomstkontrollistan (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 för CSV. Anger katalogen i COPY-instruktionen där de avvisade raderna och motsvarande felfil ska skrivas. Den fullständiga sökvägen från lagringskontot kan anges eller så kan sökvägen i förhållande till containern anges. Om den angivna sökvägen inte finns skapas 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.

Not

När en relativ sökväg skickas till ERRORFILE-är sökvägen relativ till den containersökväg som anges i external_location.

I den här katalogen finns det en mapp som skapats baserat på tidpunkten för inläsningen i formatet YearMonthDay -HourMinuteSecond (till exempel 20180330-173205). I den här mappen skrivs två typer av filer, orsaksfilen (fel) och datafilen (rad) som var och en väntar med queryID, distributionID och 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 lagringskontot definierat används ERRORFILE_CREDENTIAL för att ansluta till lagringen. Annars används värdet som anges för CREDENTIAL. När samma autentiseringsuppgifter som används för källdata används för ERRORFILE gäller även begränsningar som gäller för ERRORFILE_CREDENTIAL

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

ERRORFILE_CREDENTIAL gäller endast CSV-filer. Datakällan och autentiseringsmetoderna som stöds är:

  • Azure Blob Storage – SAS/SERVICE PRINCIPAL/Entra

  • Azure Data Lake Gen2 – SAS/MSI/SERVICE PRINCIPAL/Entra

  • Autentisera med signaturer för delad åtkomst (SAS)

    • IDENTITY: En konstant med värdet "Signatur för delad åtkomst"
    • SECRET: Signaturen fördelad åtkomstger 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-tjänstens huvudnyckel
    • Minsta RBAC-roller som krävs: Lagringsblobdatadeltagare eller Lagringsblobdataägare

Not

Använd OAuth 2.0-tokenslutpunkten V1-

  • Autentisera med hanterad identitet (VNet-tjänstslutpunkter)

    • IDENTITET: En konstant med värdet "Hanterad identitet"
    • 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.

Not

Om du använder samma lagringskonto för ERRORFILE 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 belastningen innan kopieringsåtgärden misslyckas. Varje rad som inte kan importeras av kopieringsåtgärden ignoreras och räknas som ett fel. Om max_errors inte anges är standardvärdet 0.

MAXERRORS kan inte användas med AUTO_CREATE_TABLE.

När FILE_TYPE är "PARQUET" leder undantag som orsakas av konverteringsfel av datatyp (t.ex. Parquet-binärt till SQL-heltal) fortfarande att COPY INTO 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 den här parametern inte har angetts:

  • .gz – GZIP
  • .snappy – Snabb
  • .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 det inte finns något avslutande skräp i slutet av gzip-filer för att säkerställa att COPY kan bearbeta dessa 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 det inte anges 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.

Not

FIELDQUOTE-tecken är undantagna i strängkolumner där det finns en dubbel FIELDQUOTE (avgränsare).

FIELDTERMINATOR = "field_terminator"

FIELDTERMINATOR Gäller endast csv. Anger fältavgränsaren som används i CSV-filen. Fältavslutaren kan anges med hexadecimal notation. Fältavgränsaren kan vara flera tecken. Standardfältets avslutare är (,). Utökade ASCII- och flerbytestecken stöds inte med UTF-8 för FIELDTERMINATOR.

RADAVGRÄNSARE = "row_terminator"

ROW TERMINATOR Gäller endast csv. Anger radavgränsaren som används i CSV-filen. Radavgränsaren kan anges med hexadecimal notation. Radavgränsaren kan vara flera tecken. 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 med flera tecken i hexadecimalt anger du inte 0x mellan varje tecken.

Utökade ASCII- och multi-byte-tecken stöds inte med UTF-8 för ROW TERMINATOR.

FIRSTROW = First_row_int

FIRSTROW- gäller för CSV och anger radnumret som läss först i alla filer för KOMMANDOT COPY. Värdena börjar från 1, vilket är standardvärdet. Om värdet är inställt på två hoppas 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" | "OFF"

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. Azure Synapse Analytics tilldelar automatiskt unika värden baserat på de start- och inkrementsvärden som angavs när tabellen skapades. Observera följande beteende med kommandot COPY:

  • Om IDENTITY_INSERT är AV och tabellen har en identitetskolumn
    • En kolumnlista måste anges som inte mappar ett indatafält till identitetskolumnen.
  • Om IDENTITY_INSERT är PÅ och tabellen har en identitetskolumn
    • Om en kolumnlista skickas måste den mappa ett indatafält till identitetskolumnen.
  • Standardvärdet stöds inte för identitetskolumnen i kolumnlistan.
  • IDENTITY_INSERT kan bara anges för en tabell i taget.

AUTO_CREATE_TABLE = { 'ON' | "OFF" }

AUTO_CREATE_TABLE anger om tabellen kan skapas automatiskt genom att arbeta tillsammans med automatisk schemaidentifiering. Den är endast tillgänglig för Parquet-filer.

  • PÅ: Aktiverar automatisk skapande av tabeller. COPY INTO-processen skapar en ny tabell automatiskt genom att identifiera strukturen för filen som ska läsas in. Kan också användas med befintliga tabeller för att dra nytta av automatisk schemaidentifiering av Parquet-filer.
  • AV: Automatisk skapande av tabell är inte aktiverat. Standard.

Not

Den automatiska tabellskapandet fungerar tillsammans med automatisk schemaidentifiering. Det automatiska skapandet av tabellen är INTE aktiverat som standard.

Läs inte in i hash-distribuerade tabeller från Parquet-filer med COPY INTO med AUTO_CREATE_TABLE = "ON".

Om Parquet-filer ska läsas in i hash-distribuerade tabeller med COPY INTO läser du in dem i en mellanlagringstabell för resursallokering följt av INSERT ... VÄLJ från tabellen till den distribuerade målhashtabellen.

Behörigheter

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];

Anmärkningar

COPY-instruktionen accepterar endast UTF-8 och UTF-16 giltiga tecken för raddata och kommandoparametrar. Källfiler eller parametrar (till exempel ROW TERMINATOR eller FIELD TERMINATOR) som använder ogiltiga tecken kan tolkas felaktigt av COPY-instruktionen och orsaka oväntade resultat, till exempel skadade data eller andra fel. Kontrollera att dina källfiler och parametrar är UTF-8- eller UTF-16-kompatibla innan du anropar COPY-instruktionen.

Exempel

A. Läsa in från ett offentligt lagringskonto

Följande exempel är den enklaste formen av kommandot COPY, som läser in data från ett offentligt lagringskonto. I det här exemplet matchar COPY-instruktionens standardformatet 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 = Session DATEFORMAT

  • MAXERRORS = 0

  • KOMPRIMERingsstandarden är okomprimerad

  • FIELDQUOTE = ''''

  • FIELDTERMINATOR = ','

  • ROWTERMINATOR = "\n"

Viktig

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 radfeeden 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>'),
    --CREDENTIAL should look something like this:
    --CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET='x6RWv4It5F2msnjelv3H4DA80n0PQW0daPdw43jM0nyetx4c6CpDkdj3986DX5AHFMIf/YN4y6kkCnU8lb+Wx0Pj+6MDw=='),
    FIELDQUOTE = '"',
    FIELDTERMINATOR=',',
    ROWTERMINATOR='0x0A',
    ENCODING = 'UTF8',
    FIRSTROW = 2
)

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

Vad är prestanda för COPY-kommandot jämfört med PolyBase?

COPY-kommandot har bättre prestanda beroende på din arbetsbelastning.

  • Komprimerade filer kan inte delas automatiskt. 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.

  • Stora okomprimerade CSV-filer kan delas upp och läsas in parallellt automatiskt, så det finns ingen anledning att manuellt dela okomprimerade CSV-filer i de flesta fall. 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?

Vägledning om antalet filer beskrivs i följande tabell. När det rekommenderade antalet filer har nåtts har du bättre prestanda ju större filer. Antalet filer bestäms av antalet beräkningsnoder multiplicerat med 60. Vid 6000DWU har vi till exempel 12 beräkningsnoder och 12*60 = 720 partitioner. En enkel fildelningsupplevelse finns i Så här maximerar du dataflödet för KOPIERingsbelastning med fildelningar.

DWU #Files
100 60
200 60
300 60
400 60
500 60
1,000 120
1,500 180
2,000 240
2,500 300
3,000 360
5,000 600
6,000 720
7,500 900
10,000 1200
15,000 1800
30,000 3600

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. Parquet- och ORC-filer i Azure Storage-kontot ska vara 256 MB eller större för bästa prestanda.

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 rekommenderar vi dock filer som är minst 4 MB.

Finns det några kända problem med COPY-instruktionen?

Om du har en Azure Synapse-arbetsyta som skapades före den 7 december 2020 kan du stöta på ett liknande felmeddelande när du autentiserar med hanterad identitet: com.microsoft.sqlserver.jdbc.SQLServerException: Managed Service Identity has not been enabled on this server. Please enable Managed Service Identity and try again.

Följ de här stegen för att lösa det här problemet genom att registrera arbetsytans hanterade identitet på nytt:

  1. Installera Azure PowerShell. Se Installera PowerShell.
  2. Registrera arbetsytans hanterade identitet med 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 COPY-instruktionen i Warehouse i Microsoft Fabric för inläsning från externa lagringskonton. COPY-instruktionen ger den största flexibiliteten för datainmatning med högt dataflöde till ditt lager och är en strategi för att mata in data i din Warehouse-.

I Microsoft Fabric stöder COPY (Transact-SQL)-instruktionen för närvarande FILformaten PARQUET och CSV. För datakällor stöds endast Azure Data Lake Storage Gen2-konton.

Mer information om hur du använder COPY INTO på ditt lager i Microsoft Fabric finns i Mata in data i ditt lager med hjälp av COPY-instruktionen.

Som standard autentiseras COPY INTO som den körande Entra-ID-användaren.

Not

För Azure Synapse Analytics kan du besöka COPY INTO för Azure Synapse Analytics.

Använd COPY för följande funktioner:

  • Använd användare med lägre privilegier för att läsa in 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 inom strängavgränsade kolumner.
  • Ange en finare behörighetsmodell utan att exponera lagringskontonycklar med hjälp av SAS (Share Access Signatures).
  • Använd ett annat lagringskonto för ERRORFILE-platsen (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 radavgränsare, fältavgränsare och fältoffert 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 med hjälp av COPY-instruktionen.

Syntax

COPY INTO [ warehouse_name. ] [ schema_name. ] table_name
[ (Column_list) ]
FROM '<external_location>' [ , ...n ]
WITH
 (
 [ FILE_TYPE = { 'CSV' | 'PARQUET' } ]
 [ , CREDENTIAL = (AZURE CREDENTIAL) ]
 [ , ERRORFILE = ' [ http(s)://storageaccount/container ] /errorfile_directory [ / ] ] '
 [ , ERRORFILE_CREDENTIAL = (AZURE CREDENTIAL) ]
 [ , MAXERRORS = max_errors ]
 [ , COMPRESSION = { 'Gzip' | 'Snappy' } ]
 [ , FIELDQUOTE = 'string_delimiter' ]
 [ , FIELDTERMINATOR =  'field_terminator' ]
 [ , ROWTERMINATOR = 'row_terminator' ]
 [ , FIRSTROW = first_row ]
 [ , DATEFORMAT = 'date_format' ]
 [ , ENCODING = { 'UTF8' | 'UTF16' } ]
 [ , PARSER_VERSION = { '1.0' | '2.0' } ]
 [ , MATCH_COLUMN_COUNT = { 'ON' | 'OFF' } ]
)

Argument

warehouse_name

Valfritt om det aktuella lagret för användaren som utför åtgärden är lagret för den angivna tabellen. Om lager inte har angetts och det angivna schemat och tabellen inte finns i det aktuella lagret, misslyckas KOPIERing 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 schema inte har angetts och standardschemat för användaren som utför kopieringsåtgärden skiljer sig från schemat i den angivna tabellen avbryts COPY och ett felmeddelande returneras.

table_name

Namnet på tabellen som du vill kopiera data till. Måltabellen måste redan finnas i lagret.

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

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ås av nyckelordet "standard"
  • Field_number – indatafilens fältnummer som mappas till målkolumnen.
  • Fältindexeringen börjar vid 1.

När column_list inte har angetts mappar COPY 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 osv.

Not

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 en kolumnlista inte har angetts mappar COPY 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 osv.

extern plats

Not

Fabric OneLake sökvägar stöds för närvarande inte, endast BLOB- och ADLS Gen2-lagringskonton stöds.

Anger var 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\>

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.

Not

.blob-slutpunkten är också tillgänglig för ADLS Gen2 och ger för närvarande bästa prestanda. Använd blob slutpunkten när dfs inte krävs 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 en mapp har angetts hämtar COPY 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
  • Jokertecken kan inte användas med omvänt snedstreck (\)

Not

För bästa prestanda bör du undvika att ange jokertecken som skulle expandera över ett större antal filer. Om möjligt anger du flera filplatser i stället för att ange jokertecken.

Flera filplatser kan bara anges 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' | "PARQUET" }

FILE_TYPE anger formatet på externa data.

  • CSV: Anger en fil med kommaavgränsade värden som är kompatibel med RFC 4180 standard.
  • PARQUET: Anger ett Parquet-format.

CREDENTIAL (IDENTITY = '', SECRET = '')

CREDENTIAL anger autentiseringsmekanismen för åtkomst till det externa lagringskontot. På Warehouse i Microsoft Fabric är de enda autentiseringsmekanismer som stöds signatur för delad åtkomst (SAS) och lagringskontonyckel (SAK). Användarens EntraID-autentisering är standard, inga autentiseringsuppgifter behöver anges.

Not

När du använder ett offentligt lagringskonto behöver inte CREDENTIAL anges. Som standard används den körande användarens Entra-ID.

  • Autentisera med signatur för delad åtkomst (SAS)

    • IDENTITY: En konstant med värdet "Signatur för delad åtkomst"
    • SECRET: Signaturen fördelad åtkomstger 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 "Lagringskontonyckel"
    • SECRET: Lagringskontonyckel

ERRORFILE = Katalogplats

ERRORFILE- gäller endast för CSV. Anger den katalog där de avvisade raderna och motsvarande felfil ska skrivas. Den fullständiga sökvägen från lagringskontot kan anges eller så kan sökvägen i förhållande till containern anges. Om den angivna sökvägen inte finns skapas 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.

Not

När en relativ sökväg skickas till ERRORFILE-är sökvägen relativ till den containersökväg som anges i external_location.

I den här katalogen finns det en mapp som skapats baserat på tidpunkten för inläsningen i formatet YearMonthDay -HourMinuteSecond (till exempel 20180330-173205). I den här mappen skapas 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 har den fullständiga sökvägen för lagringskontot definierat används ERRORFILE_CREDENTIAL för att ansluta till lagringen. Annars används värdet som anges för CREDENTIAL. När samma autentiseringsuppgifter som används för källdata används för ERRORFILE gäller även begränsningar som gäller för ERRORFILE_CREDENTIAL.

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

ERRORFILE_CREDENTIAL gäller endast CSV-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 "Signatur för delad åtkomst"
    • SECRET: Signaturen fördelad åtkomstger delegerad åtkomst till resurser i ditt lagringskonto.
    • Minsta behörigheter som krävs: READ, LIST, WRITE, CREATE, DELETE

Not

Om du använder samma lagringskonto för ERRORFILE 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 belastningen innan kopieringsåtgärden misslyckas. Varje rad som kopieringsåtgärden inte kan importera ignoreras och räknas som ett fel. Om max_errors inte anges är standardvärdet 0.

I Microsoft Fabric kan MAXERRORS inte användas 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

Kommandot COPY identifierar komprimeringstypen automatiskt baserat på filtillägget när den här parametern inte har angetts:

  • .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. 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 det inte finns något avslutande skräp i slutet av gzip-filer för att säkerställa att COPY kan bearbeta dessa filer.

FIELDQUOTE = "field_quote"

FIELDQUOTE- gäller endast för CSV. Anger ett enskilt tecken som används som citattecken (stränggränsare) i CSV-filen. Om det inte anges 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.

Not

FIELDQUOTE-tecken är undantagna i strängkolumner där det finns en dubbel FIELDQUOTE (avgränsare).

FIELDTERMINATOR = "field_terminator"

FIELDTERMINATOR gäller endast för CSV. Anger fältavgränsaren som används i CSV-filen. Fältavslutaren kan också anges med hexadecimal notation. Fältavgränsaren kan vara flera tecken. 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 för CSV. Anger radavgränsaren som används i CSV-filen. Radavgränsaren kan anges med hexadecimal notation. Radavgränsaren kan vara flera tecken. Standardavgränsarna är \r\n, \noch \r.

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 med 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 för CSV. Anger radnumret som läss först i alla filer för KOMMANDOT COPY. Värdena börjar från 1, vilket är standardvärdet. Om värdet är inställt på två hoppas 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.

PARSER_VERSION = { '1.0' | '2.0' }

PARSER_VERSION gäller endast csv. Standardvärdet är 2.0. 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, FIELDTERMINATOR eller FIELDQUOTE stöds inte. Men "\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.When using parser version 1.0 with UTF-8 files, multibyte and multicharacter terminators are not supported for FIELDTERMINATOR.

Parser version 1.0 är endast tillgängligt för bakåtkompatibilitet och bör endast användas när dessa begränsningar påträffas.

Not

När COPY INTO används med komprimerade CSV-filer eller filer med UTF-16-kodning växlar COPY INTO automatiskt till PARSER_VERSION 1.0, utan att användaråtgärd krävs. För avslutare med flera tecken i FIELDTERMINATOR eller ROWTERMINATOR misslyckas COPY INTO-instruktionen. Använd PARSER_VERSION = "1.0" om avgränsare med flera tecken behövs.

MATCH_COLUMN_COUNT = { 'ON' | 'OFF' }

MATCH_COLUMN_COUNT gäller endast csv. Standardvärdet är AV. Anger om kommandot COPY ska kontrollera om kolumnantalet rader i källfilerna matchar kolumnantalet i måltabellen. Följande beteende gäller:

  • Om MATCH_COLUMN_COUNT är AV
    • Överskridna kolumner från källrader ignoreras
    • Rader med färre kolumner infogas som null i nullbara kolumner
    • Om ett värde inte har angetts för en kolumn som inte är nullbar misslyckas kommandot COPY
  • Om MATCH_COLUMN_COUNT är PÅ
    • Kommandot COPY kontrollerar om kolumnantalet på varje rad i varje fil från källan matchar kolumnantalet i måltabellen
    • Om det finns ett matchningsfel för kolumnantal misslyckas KOMMANDOT COPY

Behörigheter

Behörigheter för kontrollplan

Om du vill köra kommandot COPY INTO måste en användare beviljas medlemskap för att en arbetsyteroll via Hantera åtkomst i arbetsytan, med minst rollen Visningsprogram. Du kan också dela informationslageråtkomst med en användare via objektbehörigheter i infrastrukturresursportalen, med minst läsbehörigheter. Läsbehörigheten räcker för att anpassa till principen om lägsta behörighet.

Behörigheter för dataplan

När användaren har beviljats kontrollplansbehörigheter genom arbetsyteroller eller objektbehörigheter, om användaren bara har läsbehörigheter på dataplansnivå, bör användaren också beviljas INSERT och ADMINISTER DATABASE BULK OPERATIONS behörigheter via T-SQL-kommandon.

Följande T-SQL-skript ger till exempel dessa behörigheter till en enskild användare via deras Microsoft Entra-ID.

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

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

Anmärkningar

COPY-instruktionen accepterar endast UTF-8 och UTF-16 giltiga tecken för raddata och kommandoparametrar. Källfiler eller parametrar (till exempel ROW TERMINATOR eller FIELD TERMINATOR) som använder ogiltiga tecken kan tolkas felaktigt av COPY-instruktionen och orsaka oväntade resultat, till exempel skadade data eller andra fel. Kontrollera att dina källfiler och parametrar är UTF-8- eller UTF-16-kompatibla innan du anropar COPY-instruktionen.

Exempel

Mer information om hur du använder COPY INTO på ditt lager i Microsoft Fabric finns i Mata in data i ditt lager med hjälp av COPY-instruktionen.

A. Läsa in från ett offentligt lagringskonto

Följande exempel är den enklaste formen av kommandot COPY, som läser in data från ett offentligt lagringskonto. I det här exemplet matchar COPY-instruktionens standardformatet 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

  • KOMPRIMERingsstandarden är okomprimerad

  • FIELDQUOTE = ''''

  • FIELDTERMINATOR = ','

  • ROWTERMINATOR = "\n"

Viktig

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 radfeeden 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',
    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>'),
    --CREDENTIAL should look something like this:
    --CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET='x6RWv4It5F2msnjelv3H4DA80n0PQW0daPdw43jM0nyetx4c6CpDkdj3986DX5AHFMIf/YN4y6kkCnU8lb+Wx0Pj+6MDw=='),
    FIELDQUOTE = '"',
    FIELDTERMINATOR=',',
    ROWTERMINATOR='0x0A',
    ENCODING = 'UTF8',
    FIRSTROW = 2
)

D. 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örande användarens EntraID.

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

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= 'Shared Access Signature', SECRET='<Your_SAS_Token>')
    FIELDTERMINATOR = '|'
)

FAQ

Vad är vägledningen för fildelning för copy-kommandot som läser in komprimerade CSV-filer?

Överväg att dela upp stora CSV-filer, särskilt när antalet filer är litet, men behåll filer på minst 4 MB vardera för bättre prestanda.

Vad är vägledningen för fildelning för copy-kommandot som läser in Parquet-filer?

Överväg att dela upp stora Parquet-filer, särskilt när antalet filer är litet.

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 rekommenderar vi dock filer som är minst 4 MB.

Vilken autentiseringsmetod används när jag inte anger någon autentiseringsuppgift?

Som standard använder COPY INTRO den körande användarens Entra-ID.