Delen via


COPY INTO (Transact-SQL)

van toepassing op:Azure Synapse Analytics-

In dit artikel wordt uitgelegd hoe u de COPY-instructie in Azure Synapse Analytics gebruikt voor het laden van externe opslagaccounts. De COPY-instructie biedt de meeste flexibiliteit voor gegevensopname met hoge doorvoer in Azure Synapse Analytics.

Notitie

Ga voor Warehouse in Microsoft Fabric naar COPY INTO.

Gebruik COPY voor de volgende mogelijkheden:

  • Gebruikers met lagere bevoegdheden gebruiken om te laden zonder strikte CONTROL-machtigingen voor het datawarehouse nodig te hebben
  • Eén T-SQL-instructie uitvoeren zonder dat u andere databaseobjecten hoeft te maken
  • CSV-bestanden correct parseren en laden, waarbij scheidingstekens (tekenreeks, veld, rij) worden ontsnapt binnen kolommen met scheidingstekens
  • Een nauwkeuriger machtigingsmodel opgeven zonder dat opslagaccountsleutels beschikbaar worden gemaakt met behulp van Sas (Share Access Signatures)
  • Een ander opslagaccount gebruiken voor de locatie ERRORFILE (REJECTED_ROW_LOCATION)
  • Standaardwaarden voor elke doelkolom aanpassen en brongegevensvelden opgeven die moeten worden geladen in specifieke doelkolommen
  • Geef een aangepast rijeindteken, veldeindteken en veldcitaat op voor CSV-bestanden
  • SQL Server-datumnotaties gebruiken voor CSV-bestanden
  • Jokertekens en meerdere bestanden opgeven in het pad naar de opslaglocatie
  • Automatische schemadetectie vereenvoudigt het definiëren en toewijzen van brongegevens in doeltabellen
  • Het proces voor het automatisch maken van tabellen maakt automatisch de tabellen en werkt samen met automatische schemadetectie
  • Complexe gegevenstypen rechtstreeks laden uit Parquet-bestanden, zoals Kaarten en Lijsten, in tekenreekskolommen, zonder andere hulpprogramma's te gebruiken om de gegevens vooraf te verwerken

Notitie

Als u complexe gegevenstypen uit Parquet-bestanden wilt laden, moet het automatisch maken van tabellen zijn ingeschakeld met behulp van AUTO_CREATE_TABLE.

Raadpleeg de volgende documentatie voor uitgebreide voorbeelden en quickstarts met behulp van de COPY-instructie:

Notitie

Microsoft Entra ID voorheen Azure Active Directory (Azure AD) werd genoemd.

Syntaxis

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

Argumenten

schema_name

Optioneel als het standaardschema voor de gebruiker die de bewerking uitvoert, het schema van de opgegeven tabel is. Als schema niet is opgegeven en het standaardschema van de gebruiker die de COPY-bewerking uitvoert, verschilt van het schema van de opgegeven tabel, wordt COPY geannuleerd en wordt er een foutbericht geretourneerd.

table_name

De naam van de tabel waarnaar u gegevens wilt kopiëren. De doeltabel kan een tijdelijke of permanente tabel zijn en moet al aanwezig zijn in de database. Geef voor de automatische schemadetectiemodus geen kolomlijst op.

(column_list)

Een optionele lijst met een of meer kolommen die worden gebruikt om brongegevensvelden toe te wijzen aan tabelkolommen voor het laden van gegevens.

Geef geen column_list op wanneer AUTO_CREATE_TABLE = 'ON'.

column_list moet tussen haakjes staan en gescheiden door komma's. De kolomlijst heeft de volgende indeling:

[(Column_name [standaard Default_value] [Field_number] [,... n])]

  • Column_name : de naam van de kolom in de doeltabel.
  • Default_value: de standaardwaarde die een NULL-waarde in het invoerbestand vervangt. De standaardwaarde is van toepassing op alle bestandsindelingen. COPY probeert NULL uit het invoerbestand te laden wanneer een kolom wordt weggelaten uit de kolomlijst of wanneer er een leeg invoerbestandsveld is. De standaardwaarde gaat vooraf aan het trefwoord 'standaard'
  • Field_number: het veldnummer van het invoerbestand dat is toegewezen aan de doelkolom.
  • De veldindexering begint bij 1.

Wanneer een kolomlijst niet is opgegeven, wijst COPY kolommen toe op basis van de bron- en doelvolgorde: invoerveld 1 gaat naar doelkolom 1, veld 2 gaat naar kolom 2, enzovoort.

externe locaties

Is de plaats waar de bestanden met de gegevens worden gefaseerd. Momenteel worden Azure Data Lake Storage (ADLS) Gen2 en Azure Blob Storage ondersteund:

  • externe locatie voor Blob Storage: https://<account\>.blob.core.windows.net/<container\>/<path\>
  • externe locatie voor ADLS Gen2: https://<account\>.dfs.core.windows.net/<container\>/<path\>

Notitie

Het .blob-eindpunt is ook beschikbaar voor ADLS Gen2 en levert momenteel de beste prestaties op. Gebruik het .blob-eindpunt wanneer .dfs niet is vereist voor uw verificatiemethode.

  • account - De naam van het opslagaccount

  • Container - De naam van de blobcontainer

  • pad : de map of het bestandspad voor de gegevens. De locatie begint vanuit de container. Als er een map is opgegeven, haalt COPY alle bestanden op uit de map en alle bijbehorende submappen. COPY negeert verborgen mappen en retourneert geen bestanden die beginnen met een onderstreping (_) of een punt (.) tenzij expliciet is opgegeven in het pad. Dit gedrag is hetzelfde, zelfs wanneer u een pad met een jokerteken opgeeft.

Jokertekens-kaarten kunnen worden opgenomen in het pad waar

  • Naam van jokertekenpad komt overeen met hoofdlettergevoelig
  • Jokertekens kunnen worden ontsnapt met behulp van het backslash-teken (\)
  • Jokertekenuitbreiding wordt recursief toegepast. Alle CSV-bestanden onder Klant1 (inclusief submappen van Customer1) worden bijvoorbeeld geladen in het volgende voorbeeld: Account/Container/Customer1/*.csv

Notitie

Voor de beste prestaties vermijdt u het opgeven van jokertekens die over een groter aantal bestanden zouden worden uitgebreid. Vermeld indien mogelijk meerdere bestandslocaties in plaats van jokertekens op te geven.

Meerdere bestandslocaties kunnen alleen worden opgegeven vanuit hetzelfde opslagaccount en dezelfde container via een door komma's gescheiden lijst, zoals:

  • https://<account>.blob.core.windows.net/<container\>/<path\>, https://<account\>.blob.core.windows.net/<container\>/<path\>

FILE_TYPE = { 'CSV' | PARQUET | 'ORC' }

FILE_TYPE geeft de indeling van de externe gegevens op.

  • CSV: hiermee geeft u een bestand met door komma's gescheiden waarden op dat voldoet aan de RFC 4180-standaard.
  • PARQUET: Hiermee geeft u een Parquet-indeling op.
  • ORC: Hiermee geeft u de indeling Geoptimaliseerde rijkolommen (ORC) op.

Notitie

Het bestandstype 'Gescheiden tekst' in PolyBase wordt vervangen door de CSV-bestandsindeling waarin het standaardscheidingsteken voor komma's kan worden geconfigureerd via de parameter FIELDTERMINATOR.

FILE_FORMAT = external_file_format_name

FILE_FORMAT is alleen van toepassing op Parquet- en ORC-bestanden en geeft de naam op van het externe bestandsindelingsobject waarin het bestandstype en de compressiemethode voor de externe gegevens worden opgeslagen. Als u een externe bestandsindeling wilt maken, gebruikt u CREATE EXTERNAL FILE FORMAT.

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

CREDENTIAL geeft het verificatiemechanisme op voor toegang tot het externe opslagaccount. Verificatiemethoden zijn:

CSV Parket ORK
Azure Blob Storage- SAS/MSI/SERVICE PRINCIPAL/KEY/Entra SAS/SLEUTEL SAS/SLEUTEL
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 Het blob-eindpunt (.blob.core.windows.net) in het pad naar de externe locatie is vereist voor deze verificatiemethode.

2 Het dfs-eindpunt (.dfs.core.windows.net) in uw externe locatiepad is vereist voor deze verificatiemethode.

Notitie

  • Bij verificatie met behulp van Microsoft Entra-id of een openbaar opslagaccount hoeft CREDENTIAL niet te worden opgegeven.
  • Als uw opslagaccount is gekoppeld aan een VNet, moet u zich verifiëren met behulp van een beheerde identiteit.
  • Verifiëren met Shared Access Signatures (SAS)

    • IDENTITY: een constante met de waarde Shared Access Signature
    • SECRET: deShared Access Signaturebiedt gedelegeerde toegang tot resources in uw opslagaccount.
    • Minimale machtigingen vereist: LEZEN en LIJST
  • Verifiëren met service-principals

    • IDENTITY: <ClientID>@<OAuth_2.0_Token_EndPoint>
    • SECRET: service-principalsleutel voor Microsoft Entra-toepassingen
    • Minimale RBAC-rollen vereist: Inzender voor opslagblobgegevens, Inzender voor opslagblobgegevens, eigenaar van opslagblobgegevens of Lezer van opslagblobgegevens
  • Verifiëren met opslagaccountsleutel

    • IDENTITY: een constante met de waarde 'Opslagaccountsleutel'
    • SECRET: Sleutel van opslagaccount
  • Verifiëren met Managed Identity (VNet-service-eindpunten)

    • IDENTITY: Een constante met de waarde Managed Identity
    • Minimale RBAC-rollen vereist: inzender voor opslagblobgegevens of eigenaar van opslagblobgegevens voor de geregistreerde Microsoft Entra-logische server in Azure. Wanneer u een toegewezen SQL-pool (voorheen SQL DW) gebruikt die niet is gekoppeld aan een Synapse-werkruimte, is deze RBAC-rol niet vereist, maar voor de beheerde identiteit zijn toegangsbeheerlijstmachtigingen (ACL) vereist voor de doelobjecten om leestoegang tot de bronbestanden in te schakelen
  • Verifiëren met een Microsoft Entra-gebruiker

    • REFERENTIE is niet vereist
    • Minimale RBAC-rollen vereist: Inzender voor opslagblobgegevens of eigenaar van opslagblobgegevens voor de Microsoft Entra-gebruiker

ERRORFILE = Maplocatie

ERRORFILE alleen van toepassing op CSV. Hiermee geeft u de map in de COPY-instructie waarin de geweigerde rijen en het bijbehorende foutbestand moeten worden geschreven. Het volledige pad van het opslagaccount kan worden opgegeven of het pad ten opzichte van de container kan worden opgegeven. Als het opgegeven pad niet bestaat, wordt er een namens u gemaakt. Er wordt een onderliggende map gemaakt met de naam '_rejectedrows'. Het teken _zorgt ervoor dat de map wordt ontsnapt voor andere gegevensverwerking, tenzij deze expliciet is benoemd in de locatieparameter.

Notitie

Wanneer een relatief pad wordt doorgegeven aan ERRORFILE, is het pad relatief ten opzichte van het containerpad dat is opgegeven in external_location.

In deze map is er een map gemaakt op basis van de tijd van het indienen van de belasting in de indeling YearMonthDay -HourMinuteSecond (bijvoorbeeld 20180330-173205). In deze map worden twee typen bestanden geschreven, het redenbestand (Fout) en het gegevensbestand (rij) die elk vooraf worden toegepast met de queryID, distributionID en een bestands-GUID. Omdat de gegevens en de reden zich in afzonderlijke bestanden bevinden, hebben de bijbehorende bestanden een overeenkomend voorvoegsel.

Als ERRORFILE het volledige pad van het opslagaccount heeft gedefinieerd, wordt de ERRORFILE_CREDENTIAL gebruikt om verbinding te maken met die opslag. Anders wordt de waarde die wordt vermeld voor CREDENTIAL gebruikt. Wanneer dezelfde referentie die wordt gebruikt voor de brongegevens wordt gebruikt voor ERRORFILE, gelden er ook beperkingen die van toepassing zijn op ERRORFILE_CREDENTIAL

ERRORFILE_CREDENTIAL = (IDENTITEIT= '', SECRET = '')

ERRORFILE_CREDENTIAL is alleen van toepassing op CSV-bestanden. Ondersteunde gegevensbron- en verificatiemethoden zijn:

  • Azure Blob Storage - SAS/SERVICE PRINCIPAL/Entra

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

  • Verifiëren met Shared Access Signatures (SAS)

    • IDENTITY: een constante met de waarde Shared Access Signature
    • SECRET: deShared Access Signaturebiedt gedelegeerde toegang tot resources in uw opslagaccount.
    • Minimale machtigingen vereist: LEZEN, LIJST, SCHRIJVEN, MAKEN, VERWIJDEREN
  • Verifiëren met service-principals

    • IDENTITY: <ClientID>@<OAuth_2.0_Token_EndPoint>
    • SECRET: service-principalsleutel voor Microsoft Entra-toepassingen
    • Minimale RBAC-rollen vereist: Inzender voor opslagblobgegevens of eigenaar van opslagblobgegevens

Notitie

Het OAuth 2.0-tokeneindpunt gebruiken V1-

  • Verifiëren met Managed Identity (VNet-service-eindpunten)

    • IDENTITY: Een constante met de waarde Managed Identity
    • Minimale RBAC-rollen vereist: Inzender voor opslagblobgegevens of eigenaar van opslagblobgegevens voor de geregistreerde SQL Database-server van Microsoft Entra
  • Verifiëren met een Microsoft Entra-gebruiker

    • REFERENTIE is niet vereist
    • Minimale RBAC-rollen vereist: Inzender voor opslagblobgegevens of eigenaar van opslagblobgegevens voor de Microsoft Entra-gebruiker

Het gebruik van een opslagaccountsleutel met ERRORFILE_CREDENTIAL wordt niet ondersteund.

Notitie

Als u hetzelfde opslagaccount gebruikt voor uw ERRORFILE en het PAD ERRORFILE opgeeft ten opzichte van de hoofdmap van de container, hoeft u de ERROR_CREDENTIAL niet op te geven.

MAXERRORS = max_errors

MAXERRORS geeft het maximum aantal geweigerde rijen op dat is toegestaan in de belasting voordat de COPY-bewerking mislukt. Elke rij die niet kan worden geïmporteerd door de COPY-bewerking wordt genegeerd en geteld als één fout. Als max_errors niet is opgegeven, is de standaardwaarde 0.

MAXERRORS kan niet worden gebruikt met AUTO_CREATE_TABLE.

Wanneer FILE_TYPE 'PARQUET' is, mislukken uitzonderingen die worden veroorzaakt door conversiefouten van gegevenstypen (bijvoorbeeld parquet binair naar SQL-geheel getal), waardoor COPY INTO mislukt, waarbij MAXERRORS-worden genegeerd.

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

COMPRESSION is optioneel en geeft u de methode voor gegevenscompressie voor de externe gegevens op.

  • CSV ondersteunt GZIP
  • Parquet ondersteunt GZIP en Snappy
  • ORC ondersteunt DefaultCodec en Snappy.
  • Zlib is de standaardcompressie voor ORC

Met de opdracht COPY wordt het compressietype automatisch gedefinieerd op basis van de bestandsextensie wanneer deze parameter niet is opgegeven:

  • .gz - GZIP-
  • .snappy – Snappy-
  • .deflate - DefaultCodec- (alleen Parquet en ORC)

De opdracht COPY vereist dat gzip-bestanden geen volgvuil bevatten om normaal te werken. De gzip-indeling vereist strikt dat bestanden bestaan uit geldige leden zonder aanvullende informatie voor, tussen of na de bestanden. Elke afwijking van deze indeling, zoals de aanwezigheid van niet-gzip-gegevens, resulteert in de fout van de opdracht COPY. Controleer of er geen achtervolgingsvuil aan het einde van gzip-bestanden is om ervoor te zorgen dat COPY deze bestanden kan verwerken.

FIELDQUOTE = 'field_quote'

FIELDQUOTE- is van toepassing op CSV en geeft één teken op dat wordt gebruikt als het aanhalingsteken (tekenreeksscheidingsteken) in het CSV-bestand. Als dit niet is opgegeven, wordt het aanhalingsteken (") gebruikt als het aanhalingsteken zoals gedefinieerd in de RFC 4180-standaard. Hexadecimale notatie wordt ook ondersteund voor FIELDQUOTE. Uitgebreide ASCII- en multi-bytetekens worden niet ondersteund met UTF-8 voor FIELDQUOTE.

Notitie

FIELDQUOTE-tekens worden ontsnapt in tekenreekskolommen waar een dubbele FIELDQUOTE (scheidingsteken) aanwezig is.

FIELDTERMINATOR = 'field_terminator'

FIELDTERMINATOR alleen van toepassing op CSV. Hiermee geeft u het veldeindteken op dat wordt gebruikt in het CSV-bestand. Het veldeindteken kan worden opgegeven met behulp van hexadecimale notatie. Het veldeindteken kan uit meerdere tekens bestaan. Het standaardveldeindteken is een (,). Uitgebreide ASCII- en multi-bytetekens worden niet ondersteund met UTF-8 voor FIELDTERMINATOR.

RIJEINDTEKEN = 'row_terminator'

RIJEINDTEKEN Alleen van toepassing op CSV. Hiermee geeft u het rijeindteken op dat wordt gebruikt in het CSV-bestand. Het rijeindteken kan worden opgegeven met behulp van hexadecimale notatie. Het rijeindteken kan uit meerdere tekens bestaan. Standaard is het rijeindteken \r\n.

Met de opdracht COPY wordt het \r teken voorafgegaan bij het opgeven van \n (nieuwe regel) wat resulteert in \r\n. Als u alleen het \n teken wilt opgeven, gebruikt u hexadecimale notatie (0x0A). Bij het opgeven van rijeindtekens met meerdere tekens in hexadecimaal teken, geeft u niet 0x op tussen elk teken.

Uitgebreide ASCII- en multi-bytetekens worden niet ondersteund met UTF-8 voor ROW TERMINATOR.

FIRSTROW = First_row_int

FIRSTROW- is van toepassing op CSV en geeft het rijnummer op dat eerst wordt gelezen in alle bestanden voor de opdracht COPY. Waarden beginnen vanaf 1. Dit is de standaardwaarde. Als de waarde is ingesteld op twee, wordt de eerste rij in elk bestand (veldnamenrij) overgeslagen wanneer de gegevens worden geladen. Rijen worden overgeslagen op basis van het bestaan van rijeindtekens.

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

DATEFORMAT is alleen van toepassing op CSV en geeft de datumnotatie van de datumtoewijzing aan SQL Server-datumnotaties op. Zie datum- en tijdgegevenstypen en -functies (Transact-SQL)voor een overzicht van alle Transact-SQL datum- en tijdgegevenstypen en -functies. DATEFORMAT in de opdracht COPY heeft voorrang op DATEFORMAT geconfigureerd op sessieniveau.

ENCODING = 'UTF8' | UTF16-

ENCODING- alleen van toepassing op CSV. De standaardwaarde is UTF8. Hiermee geeft u de gegevenscoderingsstandaard op voor de bestanden die door de opdracht COPY zijn geladen.

IDENTITY_INSERT = 'AAN' | 'UIT'

IDENTITY_INSERT geeft aan of de identiteitswaarde of -waarden in het geïmporteerde gegevensbestand moeten worden gebruikt voor de identiteitskolom. Als IDENTITY_INSERT is UITGESCHAKELD (standaard), worden de identiteitswaarden voor deze kolom geverifieerd, maar niet geïmporteerd. In Azure Synapse Analytics worden automatisch unieke waarden toegewezen op basis van de seed- en incrementele waarden die zijn opgegeven tijdens het maken van de tabel. Let op het volgende gedrag met de opdracht COPY:

  • Als IDENTITY_INSERT UIT is en de tabel een identiteitskolom heeft
    • Er moet een kolomlijst worden opgegeven waarmee geen invoerveld wordt toegewezen aan de identiteitskolom.
  • Als IDENTITY_INSERT is ingeschakeld en de tabel een identiteitskolom heeft
    • Als een kolomlijst wordt doorgegeven, moet er een invoerveld aan de identiteitskolom worden toegewezen.
  • De standaardwaarde wordt niet ondersteund voor de IDENTITEITSKOLOM in de kolomlijst.
  • IDENTITY_INSERT kan slechts voor één tabel tegelijk worden ingesteld.

AUTO_CREATE_TABLE = { 'AAN' | 'UIT' }

AUTO_CREATE_TABLE geeft aan of de tabel automatisch kan worden gemaakt door samen te werken met automatische schemadetectie. Deze is alleen beschikbaar voor Parquet-bestanden.

  • AAN: Hiermee schakelt u het automatisch maken van tabellen in. Met het COPY INTO-proces wordt automatisch een nieuwe tabel gemaakt door de structuur van het bestand te detecteren dat moet worden geladen. Kan ook worden gebruikt met vooraf bestaande tabellen om te profiteren van automatische schemadetectie van Parquet-bestanden.
  • UIT: Het automatisch maken van tabellen is niet ingeschakeld. Verstek.

Notitie

Het automatisch maken van tabellen werkt samen met automatische schemadetectie. Het automatisch maken van tabellen is niet standaard ingeschakeld.

Laad niet in gedistribueerde hashtabellen van Parquet-bestanden met COPY INTO met AUTO_CREATE_TABLE = 'AAN'.

Als Parquet-bestanden moeten worden geladen in hash gedistribueerde tabellen met behulp van COPY INTO, laadt u deze in een round robin faseringstabel, gevolgd door INSERT ... SELECT uit die tabel naar de gedistribueerde doel-hashtabel.

Machtigingen

De gebruiker die de opdracht COPY uitvoert, moet de volgende machtigingen hebben:

Hiervoor zijn INSERT- en BEHEERMACHTIGINGEN VOOR BULKBEWERKINGen vereist. In Azure Synapse Analytics zijn MACHTIGINGEN VOOR BULKBEWERKINGEN VOOR DATABASES VEREIST.

Als de gebruiker die de opdracht COPY uitvoert ook van plan is een nieuwe tabel te genereren en er gegevens in te laden, hebben ze CREATE TABLE en ALTER ON SCHEMA-machtigingen nodig.

Als u bijvoorbeeld wilt toestaan dat mike@contoso.com copy gebruikt om een nieuwe tabel te maken in het HR schema en de gegevens uit een Parquet-bestand in te voegen, gebruikt u het volgende Transact-SQL voorbeeld:

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

Opmerkingen

De COPY-instructie accepteert alleen UTF-8 en UTF-16 geldige tekens voor rijgegevens en opdrachtparameters. Bronbestanden of -parameters (zoals ROW TERMINATOR of FIELD TERMINATOR) die ongeldige tekens gebruiken, kunnen onjuist worden geïnterpreteerd door de COPY-instructie en onverwachte resultaten veroorzaken, zoals beschadiging van gegevens of andere fouten. Zorg ervoor dat uw bronbestanden en -parameters UTF-8 of UTF-16 compatibel zijn voordat u de COPY-instructie aanroept.

Voorbeelden

Een. Laden vanuit een openbaar opslagaccount

Het volgende voorbeeld is de eenvoudigste vorm van de opdracht COPY, waarmee gegevens uit een openbaar opslagaccount worden geladen. In dit voorbeeld komen de standaardwaarden van de COPY-instructie overeen met de indeling van het CSV-bestand met regelitems.

COPY INTO dbo.[lineitem]
FROM 'https://unsecureaccount.blob.core.windows.net/customerdatasets/folder1/lineitem.csv'
WITH (FIELDTERMINATOR = '|')

De standaardwaarden van de opdracht COPY zijn:

  • DATEFORMAT = Sessie DATEFORMAT

  • MAXERRORS = 0

  • COMPRESSIE is standaard niet gecomprimeerd

  • FIELDQUOTE = '"'

  • FIELDTERMINATOR = ','

  • ROWTERMINATOR = '\n'

Belangrijk

COPY behandelt \n intern als \r\n. Zie de sectie ROWTERMINATOR voor meer informatie.

  • FIRSTROW = 1

  • ENCODING = 'UTF8'

  • FILE_TYPE = 'CSV'

  • IDENTITY_INSERT = 'UIT'

B. Verificatie laden via Share Access Signature (SAS)

In het volgende voorbeeld worden bestanden geladen die gebruikmaken van de regelfeed als een rijeindteken zoals een UNIX-uitvoer. In dit voorbeeld wordt ook een SAS-sleutel gebruikt om te verifiëren bij 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. Laden met een kolomlijst met standaardwaarden die worden geverifieerd via opslagaccountsleutel

In dit voorbeeld worden bestanden geladen die een kolomlijst met standaardwaarden opgeven.

--Note when specifying the column list, input field numbers start from 1
COPY INTO test_1 (Col_one default 'myStringDefault' 1, Col_two default 1 3)
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
    FILE_TYPE = 'CSV',
    CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET='<Your_Account_Key>'),
    --CREDENTIAL should look something like this:
    --CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET='x6RWv4It5F2msnjelv3H4DA80n0PQW0daPdw43jM0nyetx4c6CpDkdj3986DX5AHFMIf/YN4y6kkCnU8lb+Wx0Pj+6MDw=='),
    FIELDQUOTE = '"',
    FIELDTERMINATOR=',',
    ROWTERMINATOR='0x0A',
    ENCODING = 'UTF8',
    FIRSTROW = 2
)

D. Parquet of ORC laden met een bestaand bestandsindelingsobject

In dit voorbeeld wordt een jokerteken gebruikt om alle Parquet-bestanden onder een map te laden.

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. Laden met jokertekens en meerdere bestanden

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. Laden met MSI-referenties

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. Laden met automatische schemadetectie

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

Wat is de prestaties van de opdracht COPY vergeleken met PolyBase?

De opdracht COPY heeft betere prestaties, afhankelijk van uw workload.

  • Gecomprimeerde bestanden kunnen niet automatisch worden gesplitst. Voor de beste laadprestaties kunt u overwegen uw invoer op te splitsen in meerdere bestanden bij het laden van gecomprimeerde CSV's.

  • Grote niet-gecomprimeerde CSV-bestanden kunnen automatisch worden gesplitst en parallel worden geladen, dus in de meeste gevallen hoeft u niet-gecomprimeerde CSV-bestanden handmatig te splitsen. In bepaalde gevallen waarbij automatisch splitsen van bestanden niet haalbaar is vanwege gegevenskenmerken, kan het handmatig splitsen van grote CSV's nog steeds de prestaties verbeteren.

Wat is de richtlijnen voor het splitsen van bestanden voor de opdracht COPY voor het laden van gecomprimeerde CSV-bestanden?

Richtlijnen voor het aantal bestanden worden beschreven in de volgende tabel. Zodra het aanbevolen aantal bestanden is bereikt, hebt u betere prestaties hoe groter de bestanden. Het aantal bestanden wordt bepaald door het aantal rekenknooppunten vermenigvuldigd met 60. Op 6000DWU hebben we bijvoorbeeld 12 rekenknooppunten en 12*60 = 720 partities. Raadpleeg voor een eenvoudige ervaring voor het splitsen van bestanden hoe u de doorvoer van COPY-belasting kunt maximaliseren met bestandssplitsingen.

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

Wat zijn de richtlijnen voor het splitsen van bestanden voor de COPY-opdracht voor het laden van Parquet- of ORC-bestanden?

Het is niet nodig om Parquet- en ORC-bestanden te splitsen omdat met de opdracht COPY bestanden automatisch worden gesplitst. Parquet- en ORC-bestanden in het Azure-opslagaccount moeten 256 MB of groter zijn voor de beste prestaties.

Zijn er beperkingen voor het aantal of de grootte van bestanden?

Er gelden geen beperkingen voor het aantal bestanden of de grootte van bestanden; Voor de beste prestaties raden we echter bestanden aan die ten minste 4 MB zijn.

Zijn er bekende problemen met de COPY-instructie?

Als u een Azure Synapse-werkruimte hebt die is gemaakt vóór 7 december 2020, kan er een vergelijkbaar foutbericht optreden bij het verifiëren met beheerde identiteit: com.microsoft.sqlserver.jdbc.SQLServerException: Managed Service Identity has not been enabled on this server. Please enable Managed Service Identity and try again.

Volg deze stappen om dit probleem te omzeilen door de beheerde identiteit van de werkruimte opnieuw te registreren:

  1. Installeer Azure PowerShell. Raadpleeg PowerShell-installeren.
  2. Registreer de beheerde identiteit van uw werkruimte met behulp van PowerShell:
    Connect-AzAccount
    Select-AzSubscription -SubscriptionId <subscriptionId>
    Set-AzSqlServer -ResourceGroupName your-database-server-resourceGroup -ServerName your-SQL-servername -AssignIdentity
    

van toepassing op:Warehouse in Microsoft Fabric

In dit artikel wordt uitgelegd hoe u de COPY-instructie in Warehouse in Microsoft Fabric gebruikt voor het laden van externe opslagaccounts. De COPY-instructie biedt de meeste flexibiliteit voor gegevensopname met hoge doorvoer in uw magazijn en is als strategie voor het opnemen van gegevens in uw warehouse.

In Microsoft Fabric ondersteunt de COPY-instructie (Transact-SQL) momenteel de PARQUET- en CSV-bestandsindelingen. Voor gegevensbronnen worden alleen Azure Data Lake Storage Gen2-accounts ondersteund.

Zie Gegevens opnemen in uw warehouse met behulp van de COPY-instructievoor meer informatie over het gebruik van COPY INTO in uw warehouse in Microsoft Fabric.

Standaard wordt COPY INTO geverifieerd als de actieve Entra ID-gebruiker.

Notitie

Ga voor Azure Synapse Analytics naar COPY INTO voor Azure Synapse Analytics.

Gebruik COPY voor de volgende mogelijkheden:

  • Gebruik gebruikers met lagere bevoegdheden om te laden zonder strikte CONTROL-machtigingen voor het datawarehouse nodig te hebben.
  • Voer één T-SQL-instructie uit zonder dat u andere databaseobjecten hoeft te maken.
  • CSV-bestanden correct parseren en laden, waarbij scheidingstekens (tekenreeks, veld, rij) worden ge escaped binnen kolommen met tekenreeksscheidingstekens.
  • Geef een nauwkeuriger machtigingsmodel op zonder dat opslagaccountsleutels beschikbaar worden gemaakt met behulp van Sas (Share Access Signatures).
  • Gebruik een ander opslagaccount voor de locatie ERRORFILE (REJECTED_ROW_LOCATION).
  • Pas standaardwaarden voor elke doelkolom aan en geef brongegevensvelden op die moeten worden geladen in specifieke doelkolommen.
  • Geef een aangepast rijeindteken, veldeindteken en veldcitaat op voor CSV-bestanden
  • Geef jokertekens en meerdere bestanden op in het pad naar de opslaglocatie.
  • Zie Gegevens opnemen in uw warehouse met behulp van de COPY-instructievoor meer informatie over opties voor gegevensopname en best practices.

Syntaxis

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

Argumenten

warehouse_name

Optioneel als het huidige magazijn voor de gebruiker die de bewerking uitvoert het magazijn van de opgegeven tabel is. Als magazijn niet is opgegeven en het opgegeven schema en de opgegeven tabel niet in het huidige magazijn bestaan, mislukt COPY en wordt er een foutbericht geretourneerd.

schema_name

Optioneel als het standaardschema voor de gebruiker die de bewerking uitvoert, het schema van de opgegeven tabel is. Als schema niet is opgegeven en het standaardschema van de gebruiker die de COPY-bewerking uitvoert, verschilt van het schema van de opgegeven tabel, wordt COPY geannuleerd en wordt er een foutbericht geretourneerd.

table_name

De naam van de tabel waarnaar u gegevens wilt kopiëren. De doeltabel moet al aanwezig zijn in het magazijn.

(column_list)

Een optionele lijst met een of meer kolommen die worden gebruikt om brongegevensvelden toe te wijzen aan tabelkolommen voor het laden van gegevens.

column_list moet tussen haakjes staan en gescheiden door komma's. De kolomlijst heeft de volgende indeling:

[(Column_name [standaard Default_value] [Field_number] [,... n])]

  • Column_name : de naam van de kolom in de doeltabel.
  • Default_value: de standaardwaarde die een NULL-waarde in het invoerbestand vervangt. De standaardwaarde is van toepassing op alle bestandsindelingen. COPY probeert NULL uit het invoerbestand te laden wanneer een kolom wordt weggelaten uit de kolomlijst of wanneer er een leeg invoerbestandsveld is. De standaardwaarde wordt voorafgegaan door het trefwoord 'standaard'
  • Field_number : het veldnummer van het invoerbestand dat is toegewezen aan de doelkolom.
  • De veldindexering begint bij 1.

Wanneer column_list niet is opgegeven, wijst COPY kolommen toe op basis van de bron- en doelvolgorde: Invoerveld 1 gaat naar doelkolom 1, veld 2 gaat naar kolom 2, enzovoort.

Notitie

Wanneer u werkt met Parquet-bestanden in Warehouse in Microsoft Fabric, moeten kolomnamen exact overeenkomen met de bron en bestemming. Als de naam van de kolom in de doeltabel anders is dan die van de kolomnaam in het parquet-bestand, wordt de doeltabelkolom gevuld met NULL.

Wanneer een kolomlijst niet is opgegeven, wijst COPY kolommen toe op basis van de bron- en doelvolgorde: invoerveld 1 gaat naar doelkolom 1, veld 2 gaat naar kolom 2, enzovoort.

externe locatie

Notitie

Fabric OneLake paden worden momenteel niet ondersteund, maar alleen BLOB- en ADLS Gen2-opslagaccounts worden ondersteund.

Hiermee geeft u op waar de bestanden met de gegevens zijn gefaseerd. Momenteel worden Azure Data Lake Storage (ADLS) Gen2 en Azure Blob Storage ondersteund:

  • externe locatie voor Blob Storage: https://<account\>.blob.core.windows.net/<container\>/<path\>
  • externe locatie voor ADLS Gen2: https://<account\>.dfs.core.windows.net/<container\>/<path\>

Azure Data Lake Storage (ADLS) Gen2 biedt betere prestaties dan Azure Blob Storage (verouderd). Overweeg waar mogelijk een ADLS Gen2-account te gebruiken.

Notitie

Het .blob-eindpunt is ook beschikbaar voor ADLS Gen2 en levert momenteel de beste prestaties op. Gebruik het blob-eindpunt wanneer dfs niet vereist is voor uw verificatiemethode.

  • account - De naam van het opslagaccount

  • Container - De naam van de blobcontainer

  • pad : de map of het bestandspad voor de gegevens. De locatie begint vanuit de container. Als er een map is opgegeven, haalt COPY alle bestanden op uit de map en alle bijbehorende submappen. COPY negeert verborgen mappen en retourneert geen bestanden die beginnen met een onderstreping (_) of een punt (.), tenzij expliciet is opgegeven in het pad. Dit gedrag is hetzelfde, zelfs wanneer u een pad met een jokerteken opgeeft.

Jokertekens kunnen worden opgenomen in het pad waar

  • Naam van jokertekenpad komt overeen met hoofdlettergevoelig
  • Jokertekens kunnen worden ontsnapt met behulp van het backslash-teken (\)

Notitie

Voor de beste prestaties vermijdt u het opgeven van jokertekens die over een groter aantal bestanden zouden worden uitgebreid. Vermeld indien mogelijk meerdere bestandslocaties in plaats van jokertekens op te geven.

Meerdere bestandslocaties kunnen alleen worden opgegeven vanuit hetzelfde opslagaccount en dezelfde container via een door komma's gescheiden lijst, zoals:

  • https://<account>.blob.core.windows.net/<container\>/<path\>, https://<account\>.blob.core.windows.net/<container\>/<path\>

externe locaties achter firewall-

Voor toegang tot bestanden op AdLS Gen2-locaties (Azure Data Lake Storage) en Azure Blob Storage die zich achter een firewall bevinden, zijn de volgende vereisten van toepassing:

  • Een werkruimte-id voor de werkruimte die als host fungeert voor uw magazijn, moet worden ingericht. Zie Werkruimte-identiteitvoor meer informatie over het instellen van een werkruimte-id.
  • Uw Entra ID-account moet de werkruimte-id kunnen gebruiken.
  • Uw Entra ID-account moet toegang hebben tot de onderliggende bestanden via op rollen gebaseerd toegangsbeheer (RBAC) van Azure of data lake-ACL's.
  • Uw Fabric-werkruimte die als host fungeert voor het magazijn, moet worden toegevoegd als een regel voor resource-exemplaar. Zie Regel voor resource-exemplarenvoor meer informatie over het toevoegen van uw Infrastructuurwerkruimte met een regel voor een resource-exemplaar.

FILE_TYPE = { 'CSV' | 'PARQUET' }

FILE_TYPE geeft de indeling van de externe gegevens op.

  • CSV: hiermee geeft u een bestand met door komma's gescheiden waarden op dat voldoet aan de RFC 4180-standaard.
  • PARQUET: Hiermee geeft u een Parquet-indeling op.

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

CREDENTIAL geeft het verificatiemechanisme op voor toegang tot het externe opslagaccount. In Warehouse in Microsoft Fabric zijn de enige ondersteunde verificatiemechanismen Shared Access Signature (SAS) en SAK (Storage Account Key). De EntraID-verificatie van de gebruiker is standaard. Er hoeft geen referentie te worden opgegeven.

Notitie

Wanneer u een openbaar opslagaccount gebruikt, hoeft CREDENTIAL niet te worden opgegeven. Standaard wordt de Entra-id van de gebruiker gebruikt.

  • Verifiëren met Shared Access Signature (SAS)

    • IDENTITY: een constante met de waarde Shared Access Signature
    • SECRET: deShared Access Signaturebiedt gedelegeerde toegang tot resources in uw opslagaccount.
    • Minimale machtigingen vereist: LEZEN en LIJST
  • Verifiëren met opslagaccountsleutel

    • IDENTITY: een constante met de waarde 'Opslagaccountsleutel'
    • SECRET: Sleutel van opslagaccount

ERRORFILE = Maplocatie

ERRORFILE alleen van toepassing op CSV. Hiermee geeft u de map waarin de geweigerde rijen en het bijbehorende foutbestand moeten worden geschreven. Het volledige pad van het opslagaccount kan worden opgegeven of het pad ten opzichte van de container kan worden opgegeven. Als het opgegeven pad niet bestaat, wordt er een namens u gemaakt. Er wordt een onderliggende map gemaakt met de naam '_rejectedrows'. Het teken _zorgt ervoor dat de map wordt ontsnapt voor andere gegevensverwerking, tenzij deze expliciet is benoemd in de locatieparameter.

Notitie

Wanneer een relatief pad wordt doorgegeven aan ERRORFILE, is het pad relatief ten opzichte van het containerpad dat is opgegeven in external_location.

In deze map is er een map gemaakt op basis van de tijd van het indienen van de belasting in de indeling YearMonthDay -HourMinuteSecond (bijvoorbeeld 20180330-173205). In deze map wordt een map met de instructie-id gemaakt en onder die map worden twee typen bestanden geschreven: een fout. Json-bestand met de weigeringsredenen en een row.csv-bestand met de geweigerde rijen.

Als ERRORFILE het volledige pad van het opslagaccount heeft gedefinieerd, wordt de ERRORFILE_CREDENTIAL gebruikt om verbinding te maken met die opslag. Anders wordt de waarde die wordt vermeld voor CREDENTIAL gebruikt. Wanneer dezelfde referentie die wordt gebruikt voor de brongegevens wordt gebruikt voor ERRORFILE, gelden ook beperkingen die van toepassing zijn op ERRORFILE_CREDENTIAL ook van toepassing.

ERRORFILE_CREDENTIAL = (IDENTITEIT= '', SECRET = '')

ERRORFILE_CREDENTIAL is alleen van toepassing op CSV-bestanden. In Warehouse in Microsoft Fabric is het enige ondersteunde verificatiemechanisme Shared Access Signature (SAS).

  • Verifiëren met Shared Access Signatures (SAS)
    • IDENTITY: een constante met de waarde Shared Access Signature
    • SECRET: deShared Access Signaturebiedt gedelegeerde toegang tot resources in uw opslagaccount.
    • Minimale machtigingen vereist: LEZEN, LIJST, SCHRIJVEN, MAKEN, VERWIJDEREN

Notitie

Als u hetzelfde opslagaccount gebruikt voor uw ERRORFILE en het PAD ERRORFILE opgeeft ten opzichte van de hoofdmap van de container, hoeft u de ERROR_CREDENTIAL niet op te geven.

MAXERRORS = max_errors

MAXERRORS geeft het maximum aantal geweigerde rijen op dat is toegestaan in de belasting voordat de COPY-bewerking mislukt. Elke rij die de COPY-bewerking niet kan importeren, wordt genegeerd en geteld als één fout. Als max_errors niet is opgegeven, is de standaardwaarde 0.

In Microsoft Fabric kan MAXERRORS niet worden gebruikt wanneer FILE_TYPE PARQUET is.

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

COMPRESSION is optioneel en geeft u de methode voor gegevenscompressie voor de externe gegevens op.

  • CSV ondersteunt GZIP
  • Parquet ondersteunt GZIP en Snappy

Met de opdracht COPY wordt het compressietype automatisch gedefinieerd op basis van de bestandsextensie wanneer deze parameter niet is opgegeven:

  • .gz - GZIP-

Het laden van gecomprimeerde bestanden wordt momenteel alleen ondersteund met PARSER_VERSION 1.0.

De opdracht COPY vereist dat gzip-bestanden geen volgvuil bevatten om normaal te werken. De gzip-indeling vereist strikt dat bestanden bestaan uit geldige leden zonder aanvullende informatie voor, tussen of na de bestanden. Elke afwijking van deze indeling, zoals de aanwezigheid van niet-gzip-gegevens, resulteert in de fout van de opdracht COPY. Controleer of er geen achtervolgingsvuil aan het einde van gzip-bestanden is om ervoor te zorgen dat COPY deze bestanden kan verwerken.

FIELDQUOTE = 'field_quote'

FIELDQUOTE- is alleen van toepassing op CSV. Hiermee geeft u één teken op dat wordt gebruikt als het aanhalingsteken (tekenreeksscheidingsteken) in het CSV-bestand. Als dit niet is opgegeven, wordt het aanhalingsteken (") gebruikt als het aanhalingsteken zoals gedefinieerd in de RFC 4180-standaard. Hexadecimale notatie wordt ook ondersteund voor FIELDQUOTE. Uitgebreide ASCII- en multi-bytetekens worden niet ondersteund met UTF-8 voor FIELDQUOTE.

Notitie

FIELDQUOTE-tekens worden ontsnapt in tekenreekskolommen waar een dubbele FIELDQUOTE (scheidingsteken) aanwezig is.

FIELDTERMINATOR = 'field_terminator'

FIELDTERMINATOR alleen van toepassing op CSV. Hiermee geeft u het veldeindteken op dat wordt gebruikt in het CSV-bestand. Het veldeindteken kan ook worden opgegeven met behulp van hexadecimale notatie. Het veldeindteken kan uit meerdere tekens bestaan. Het standaardveldeindteken is een (,). Uitgebreide ASCII- en multi-bytetekens worden niet ondersteund met UTF-8 voor FIELDTERMINATOR.

ROWTERMINATOR = 'row_terminator'

ROWTERMINATOR alleen van toepassing op CSV. Hiermee geeft u het rijeindteken op dat wordt gebruikt in het CSV-bestand. Het rijeindteken kan worden opgegeven met behulp van hexadecimale notatie. Het rijeindteken kan uit meerdere tekens bestaan. De standaardeindtekens zijn \r\n, \nen \r.

Met de opdracht COPY wordt het \r teken voorafgegaan bij het opgeven van \n (nieuwe regel) wat resulteert in \r\n. Als u alleen het \n teken wilt opgeven, gebruikt u hexadecimale notatie (0x0A). Bij het opgeven van rijeindtekens met meerdere tekens in hexadecimaal teken, geeft u niet 0x op tussen elk teken.

Uitgebreide ASCII- en multi-bytetekens worden niet ondersteund met UTF-8 voor ROWTERMINATOR.

FIRSTROW = First_row_int

FIRSTROW- alleen van toepassing op CSV. Hiermee geeft u het rijnummer op dat eerst wordt gelezen in alle bestanden voor de opdracht COPY. Waarden beginnen vanaf 1. Dit is de standaardwaarde. Als de waarde is ingesteld op twee, wordt de eerste rij in elk bestand (veldnamenrij) overgeslagen wanneer de gegevens worden geladen. Rijen worden overgeslagen op basis van het bestaan van rijeindtekens.

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

DATEFORMAT is alleen van toepassing op CSV en geeft de datumnotatie van de datumtoewijzing aan SQL Server-datumnotaties op. Zie datum- en tijdgegevenstypen en -functies (Transact-SQL)voor een overzicht van alle Transact-SQL datum- en tijdgegevenstypen en -functies. DATEFORMAT in de opdracht COPY heeft voorrang op DATEFORMAT geconfigureerd op sessieniveau.

ENCODING = 'UTF8' | UTF16-

ENCODING- alleen van toepassing op CSV. De standaardwaarde is UTF8. Hiermee geeft u de gegevenscoderingsstandaard op voor de bestanden die door de opdracht COPY zijn geladen.

PARSER_VERSION = { '1,0' | '2.0' }

PARSER_VERSION is alleen van toepassing op CSV. De standaardwaarde is 2.0. Hiermee geeft u de bestandsparser die wordt gebruikt voor opname wanneer het bronbestandstype CSV is. De 2.0-parser biedt verbeterde prestaties voor het opnemen van CSV-bestanden.

Parser versie 2.0 heeft de volgende beperkingen:

  • Gecomprimeerde CSV-bestanden worden niet ondersteund
  • Bestanden met UTF-16-codering worden niet ondersteund
  • Multicharacter of multibyte ROWTERMINATOR, FIELDTERMINATOR of FIELDQUOTE wordt niet ondersteund. Echter, '\r\n' wordt geaccepteerd als een standaard ROWTERMINATOR

Wanneer u parserversie 1.0 gebruikt met UTF-8-bestanden, worden de terminators voor multibyte en multicharacter niet ondersteund voor FIELDTERMINATOR.

Parser versie 1.0 is alleen beschikbaar voor compatibiliteit met eerdere versies en mag alleen worden gebruikt wanneer deze beperkingen worden aangetroffen.

Notitie

Wanneer COPY INTO wordt gebruikt met gecomprimeerde CSV-bestanden of bestanden met UTF-16-codering, schakelt COPY INTO automatisch over naar PARSER_VERSION 1.0, zonder dat gebruikersactie is vereist. Voor afsluiters met meerdere tekens op FIELDTERMINATOR of ROWTERMINATOR mislukt de COPY INTO-instructie. Gebruik PARSER_VERSION = '1,0' als scheidingstekens met meerdere tekens nodig zijn.

MATCH_COLUMN_COUNT = { 'AAN' | 'UIT' }

MATCH_COLUMN_COUNT is alleen van toepassing op CSV. De standaardwaarde is UITGESCHAKELD. Hiermee geeft u op of de opdracht COPY moet controleren of de rijen met het aantal kolommen in bronbestanden overeenkomen met het aantal kolommen van de doeltabel. Het volgende gedrag is van toepassing:

  • Als MATCH_COLUMN_COUNT is UITGESCHAKELD
    • Het overschrijden van kolommen uit bronrijen wordt genegeerd
    • Rijen met minder kolommen worden ingevoegd als null in null-kolommen
    • Als een waarde niet is opgegeven voor een niet-null-bare kolom, mislukt de opdracht COPY
  • Als MATCH_COLUMN_COUNT is ingeschakeld
    • Met de opdracht COPY wordt gecontroleerd of het aantal kolommen voor elke rij in elk bestand uit de bron overeenkomt met het aantal kolommen van de doeltabel
    • Als het aantal kolommen niet overeenkomt, mislukt de opdracht COPY

Machtigingen

Machtigingen voor besturingsvlak

Als u de opdracht COPY INTO wilt uitvoeren, moet een gebruiker lid zijn van een werkruimterol via Toegang beheren in de werkruimte, met ten minste de rol Kijker. U kunt ook magazijntoegang delen met een gebruiker via Itemmachtigingen in de Fabric-portal, met ten minste leesmachtigingen. Leesmachtigingen zijn voldoende om te voldoen aan het principe van minimale bevoegdheden.

Machtigingen voor het gegevensvlak

Zodra de gebruiker machtigingen voor het besturingsvlak via werkruimterollen of itemmachtigingen is verleend, moet de gebruiker ook en INSERT machtigingen krijgen via T-SQL-opdrachten als ze alleen leesmachtigingen hebben op ADMINISTER DATABASE BULK OPERATIONSniveau.

Het volgende T-SQL-script verleent deze machtigingen bijvoorbeeld aan een afzonderlijke gebruiker via hun Microsoft Entra-id.

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

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

Opmerkingen

De COPY-instructie accepteert alleen UTF-8 en UTF-16 geldige tekens voor rijgegevens en opdrachtparameters. Bronbestanden of -parameters (zoals ROW TERMINATOR of FIELD TERMINATOR) die ongeldige tekens gebruiken, kunnen onjuist worden geïnterpreteerd door de COPY-instructie en onverwachte resultaten veroorzaken, zoals beschadiging van gegevens of andere fouten. Zorg ervoor dat uw bronbestanden en -parameters UTF-8 of UTF-16 compatibel zijn voordat u de COPY-instructie aanroept.

Voorbeelden

Zie Gegevens opnemen in uw warehouse met behulp van de COPY-instructievoor meer informatie over het gebruik van COPY INTO in uw warehouse in Microsoft Fabric.

Een. Laden vanuit een openbaar opslagaccount

Het volgende voorbeeld is de eenvoudigste vorm van de opdracht COPY, waarmee gegevens uit een openbaar opslagaccount worden geladen. In dit voorbeeld komen de standaardwaarden van de COPY-instructie overeen met de indeling van het CSV-bestand met regelitems.

COPY INTO dbo.[lineitem]
FROM 'https://unsecureaccount.blob.core.windows.net/customerdatasets/folder1/lineitem.csv'

De standaardwaarden van de opdracht COPY zijn:

  • MAXERRORS = 0

  • COMPRESSIE is standaard niet gecomprimeerd

  • FIELDQUOTE = '"'

  • FIELDTERMINATOR = ','

  • ROWTERMINATOR = '\n'

Belangrijk

COPY behandelt \n intern als \r\n. Zie de sectie ROWTERMINATOR voor meer informatie.

  • FIRSTROW = 1

  • ENCODING = 'UTF8'

  • FILE_TYPE = 'CSV'

B. Verificatie laden via Share Access Signature (SAS)

In het volgende voorbeeld worden bestanden geladen die gebruikmaken van de regelfeed als een rijeindteken zoals een UNIX-uitvoer. In dit voorbeeld wordt ook een SAS-sleutel gebruikt om te verifiëren bij 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. Laden met een kolomlijst met standaardwaarden die worden geverifieerd via SAK (Storage Account Key)

In dit voorbeeld worden bestanden geladen die een kolomlijst met standaardwaarden opgeven.

--Note when specifying the column list, input field numbers start from 1
COPY INTO test_1 (Col_one default 'myStringDefault' 1, Col_two default 1 3)
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
    FILE_TYPE = 'CSV',
    CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET='<Your_account_key>'),
    --CREDENTIAL should look something like this:
    --CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET='x6RWv4It5F2msnjelv3H4DA80n0PQW0daPdw43jM0nyetx4c6CpDkdj3986DX5AHFMIf/YN4y6kkCnU8lb+Wx0Pj+6MDw=='),
    FIELDQUOTE = '"',
    FIELDTERMINATOR=',',
    ROWTERMINATOR='0x0A',
    ENCODING = 'UTF8',
    FIRSTROW = 2
)

D. Parquet laden

In dit voorbeeld wordt een jokerteken gebruikt om alle Parquet-bestanden onder een map te laden met behulp van de EntraID van de gebruiker die wordt uitgevoerd.

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

E. Laden met jokertekens en meerdere bestanden

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

Wat is de richtlijnen voor het splitsen van bestanden voor de opdracht COPY voor het laden van gecomprimeerde CSV-bestanden?

Overweeg om grote CSV-bestanden te splitsen, met name wanneer het aantal bestanden klein is, maar bestanden minimaal 4 MB bewaren voor betere prestaties.

Wat zijn de richtlijnen voor het splitsen van bestanden voor de COPY-opdracht voor het laden van Parquet-bestanden?

Overweeg om grote Parquet-bestanden te splitsen, met name wanneer het aantal bestanden klein is.

Zijn er beperkingen voor het aantal of de grootte van bestanden?

Er gelden geen beperkingen voor het aantal bestanden of de grootte van bestanden; Voor de beste prestaties raden we echter bestanden aan die ten minste 4 MB zijn.

Welke verificatiemethode wordt gebruikt wanneer ik geen referentie opgeeft?

Standaard gebruikt COPY INTRO de Entra-id van de gebruiker die wordt uitgevoerd.