Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:azure Synapse Analytics
Tento článek vysvětluje, jak použít COPY příkaz v Azure Synapse Analytics pro načítání z externích úložišť. Toto COPY prohlášení poskytuje největší flexibilitu pro vysokopropustný vstup dat do Azure Synapse Analytics.
Note
Sklad v Microsoft Fabric, navštivte COPY INTO.
Funkce COPY slouží k následujícím funkcím:
- Použití nižších privilegovaných uživatelů k načtení bez nutnosti striktních oprávnění CONTROL v datovém skladu
- Provedení jednoho příkazu T-SQL bez nutnosti vytvářet další databázové objekty
- Správně parsovat a načítat soubory CSV, kde jsou oddělovače (řetězec, pole, řádek) v rámci sloupců oddělených řetězcem
- Určení jemného modelu oprávnění bez vystavení klíčů účtu úložiště pomocí sdílených přístupových podpisů (SAS)
- Použijte jiný úložný účet pro
ERRORFILEdané místo (REJECTED_ROW_LOCATION) - Přizpůsobení výchozích hodnot pro každý cílový sloupec a zadání zdrojových datových polí pro načtení do konkrétních cílových sloupců
- Zadání vlastního ukončovače řádku, ukončovače polí a uvozovek polí pro soubory CSV
- Použití formátů data SQL Serveru pro soubory CSV
- Zadání zástupných znaků a více souborů v cestě k umístění úložiště
- Automatické zjišťování schématu zjednodušuje proces definování a mapování zdrojových dat do cílových tabulek.
- Proces automatického vytváření tabulek automaticky vytvoří tabulky a funguje společně s automatickým zjišťováním schématu.
- Přímé načtení složitých datových typů ze souborů Parquet, jako jsou mapy a seznamy, do řetězcových sloupců bez použití dalších nástrojů k předběžnému zpracování dat
Note
Chcete-li načíst složité datové typy ze souborů Parquet, musí být automatické vytváření tabulek zapnuto pomocí AUTO_CREATE_TABLE.
Kompletní příklady a rychlá zprovoznění s využitím příkazu COPY najdete v následující dokumentaci:
- rychlý start : Hromadné načtení dat pomocí příkazu COPY
- rychlý start : Příklady použití příkazu COPY a podporovaných metod ověřování
- rychlý start : Vytvoření příkazu COPY pomocí bohatého uživatelského rozhraní synapse Studia
Syntax
COPY INTO [ schema. ] table_name
[ (Column_list) ]
FROM '<external_location>' [ , ...n ]
WITH
(
[ FILE_TYPE = { 'CSV' | 'PARQUET' | 'ORC' } ]
[ , FILE_FORMAT = EXTERNAL FILE FORMAT OBJECT ]
[ , CREDENTIAL = (AZURE CREDENTIAL) ]
[ , ERRORFILE = ' [ http(s)://storageaccount/container ] /errorfile_directory [ / ] ] '
[ , ERRORFILE_CREDENTIAL = (AZURE CREDENTIAL) ]
[ , MAXERRORS = max_errors ]
[ , COMPRESSION = { 'Gzip' | 'DefaultCodec' | 'Snappy' } ]
[ , FIELDQUOTE = 'string_delimiter' ]
[ , FIELDTERMINATOR = 'field_terminator' ]
[ , ROWTERMINATOR = 'row_terminator' ]
[ , FIRSTROW = first_row ]
[ , DATEFORMAT = 'date_format' ]
[ , ENCODING = { 'UTF8' | 'UTF16' } ]
[ , IDENTITY_INSERT = { 'ON' | 'OFF' } ]
[ , AUTO_CREATE_TABLE = { 'ON' | 'OFF' } ]
)
Arguments
schema_name
Volitelné, pokud je výchozím schématem pro uživatele, který operaci provádí, schéma zadané tabulky. Pokud není zadané schéma a výchozí schéma uživatele provádějícího operaci COPY se liší od schématu zadané tabulky, operace COPY se zruší a vrátí se chybová zpráva.
table_name
Název tabulky, do které chcete kopírovat data. Cílovou tabulkou může být dočasná nebo trvalá tabulka, která už musí v databázi existovat. V případě režimu automatického zjišťování schématu nezadávejte seznam sloupců.
(column_list)
Volitelný seznam jednoho nebo více sloupců používaných k mapování zdrojových datových polí na cílové sloupce tabulky pro načítání dat.
Při nezadávejte AUTO_CREATE_TABLE = 'ON' .
column_list musí být uzavřeny v závorkách a oddělené čárkami. Seznam sloupců má následující formát:
[(Column_name [výchozí Default_value] [Field_number] [,... n])]
- Column_name – název sloupce v cílové tabulce.
- Default_value – výchozí hodnota, která nahradí libovolnou hodnotu NULL ve vstupním souboru. Výchozí hodnota platí pro všechny formáty souborů. FUNKCE COPY se pokusí načíst hodnotu NULL ze vstupního souboru, pokud je sloupec vynechán ze seznamu sloupců nebo když je prázdné pole vstupního souboru. Výchozí hodnota předchází klíčovému slovu default.
- Field_number – číslo pole vstupního souboru, které je namapované na cílový sloupec.
- Indexování pole začíná na 1.
Pokud není zadaný seznam sloupců, funkce COPY mapuje sloupce na základě zdrojového a cílového pořadí: Vstupní pole 1 přejde do cílového sloupce 1, pole 2 přejde na sloupec 2 atd.
Externí umístění
Je místo, kde jsou soubory obsahující data fázované. V současné době se podporuje Azure Data Lake Storage (ADLS) Gen2 a Azure Blob Storage:
-
Externí umístění pro službu Blob Storage:
https://<account\>.blob.core.windows.net/<container\>/<path\> -
externím umístěním pro ADLS Gen2:
https://<account\>.dfs.core.windows.net/<container\>/<path\>
Note
Koncový .blob bod je k dispozici i pro ADLS Gen2 a aktuálně poskytuje nejlepší výkon. Koncový bod .blob použijte, pokud .dfs není pro metodu ověřování potřeba.
Účet – název účtu úložiště
kontejneru – název kontejneru objektů blob
cesta – složka nebo cesta k souboru pro data. Umístění začíná z kontejneru. Pokud je zadaná složka, funkce COPY načte všechny soubory ze složky a všech jejích podsložek. Funkce COPY ignoruje skryté složky a nevrací soubory, které začínají podtržením (
_) nebo tečkou (.), pokud není explicitně zadána v cestě. Toto chování je stejné i při zadávání cesty se zástupným znakem.
Zástupné znaky lze zahrnout do cesty, kde
- Porovnávání názvů zástupných znaků rozlišují malá a velká písmena.
- Zástupný znak může být uchvácený pomocí znaku zpětného lomítka (
\) - Rozšíření zástupných znaků se používá rekurzivně. Například všechny soubory CSV v
Customer1části (včetně podadresářůCustomer1) se načtou v následujícím příkladu:Account/Container/Customer1/*.csv
Note
Pokud chcete dosáhnout nejlepšího výkonu, vyhněte se zadávání zástupných znaků, které by se rozšířily o větší počet souborů. Pokud je to možné, uveďte místo zadávání zástupných znaků několik umístění souborů.
Více umístění souborů lze zadat pouze ze stejného účtu úložiště a kontejneru prostřednictvím seznamu odděleného čárkami, například:
-
https://<account>.blob.core.windows.net/<container\>/<path\>,https://<account\>.blob.core.windows.net/<container\>/<path\>
FILE_TYPE = { 'CSV' | "PARQUET" | "ORC" }
FILE_TYPE určuje formát externích dat.
- CSV: Určuje soubor hodnot oddělených čárkami vyhovující standardu RFC 4180.
- PARQUET: Určuje formát Parquet.
- ORC: Určuje formát sloupce optimalizovaného řádku (ORC).
Note
Typ souboru "Text s oddělovači" v PolyBase je nahrazen formátem souboru CSV, kde lze pomocí parametru FIELDTERMINATOR nakonfigurovat výchozí oddělovač čárk.
FILE_FORMAT = external_file_format_name
FILE_FORMAT platí pouze pro soubory Parquet a ORC a určuje název objektu formátu externího souboru, který ukládá typ souboru a metodu komprese externích dat. Chcete-li vytvořit formát externího souboru, použijte CREATE EXTERNAL FILE FORMAT.
PŘIHLAŠOVACÍ ÚDAJE (IDENTITA = '', SECRET = '')
PŘIHLAŠOVACÍ ÚDAJE určuje mechanismus ověřování pro přístup k externímu účtu úložiště. Metody ověřování jsou:
| formát CSV | Parquet | ORC | |
|---|---|---|---|
| azure Blob Storage | SAS/MSI/INSTANČNÍ OBJEKT/KLÍČ/Entra | SAS/KEY | SAS/KEY |
| Azure Data Lake Gen2 | SAS/MSI/INSTANČNÍ OBJEKT/KLÍČ/Entra | SAS (objekt blob 1 )/MSI (dfs 2 )/INSTANČNÍ OBJEKT/KLÍČ/Entra | SAS (objekt blob 1 )/MSI (dfs 2 )/INSTANČNÍ OBJEKT/KLÍČ/Entra |
1 Pro tuto metodu ověřování se vyžaduje koncový bod blob (.blob.core.windows.net) ve vaší cestě k externímu umístění.
2 Pro tuto metodu ověřování se vyžaduje koncový bod dfs (.dfs.core.windows.net) v cestě k externímu umístění.
Note
- Při ověřování pomocí Microsoft Entra ID nebo veřejného účtu úložiště není nutné zadat CREDENTIAL.
- Pokud je váš účet úložiště přidružený k virtuální síti, musíte se ověřit pomocí spravované identity.
Ověřování pomocí sdílených přístupových podpisů (SAS)
- IDENTITY: Konstanta s hodnotou sdíleného přístupového podpisu
- SECRET:sdílený přístupový podpisposkytuje delegovaný přístup k prostředkům ve vašem účtu úložiště.
Minimální požadovaná oprávnění: READ a LIST
Ověřování pomocí instančních objektů
- IDENTITY: <ID klienta>@<OAuth_2.0_Token_EndPoint>
- SECRET: Klíč instančního objektu aplikace Microsoft Entra
Minimální požadované role RBAC: Přispěvatel dat objektů blob úložiště, Přispěvatel dat objektů blob úložiště, Vlastník dat objektů blob úložiště nebo Čtenář dat objektů blob služby Storage
Ověřování pomocí klíče účtu úložiště
- IDENTITY: Konstanta s hodnotou "Klíč účtu úložiště"
SECRET: Klíč účtu úložiště
Ověřování pomocí spravované identity
(koncové body služeb virtuální sítě) - IDENTITY: Konstanta s hodnotou "Spravovaná identita"
Minimální požadované role RBAC: Přispěvatel dat objektů blob úložiště nebo vlastník dat objektů blob úložiště pro logický server Zaregistrovaný v Microsoft Entra v Azure. Pokud používáte vyhrazený fond SQL (dříve SQL DW), který není přidružený k pracovnímu prostoru Synapse, tato role RBAC se nevyžaduje, ale spravovaná identita vyžaduje oprávnění seznamu řízení přístupu (ACL) pro cílové objekty, aby bylo možné povolit přístup pro čtení ke zdrojovým souborům.
Ověřování pomocí uživatele Microsoft Entra
- CREDENTIAL se nevyžaduje
Minimální požadované role RBAC: Přispěvatel dat objektů blob úložiště nebo vlastník dat objektů blob úložiště pro uživatele Microsoft Entra
ERRORFILE = umístění adresáře
ERRORFILE platí jenom pro sdílený svazek clusteru. Určuje adresář v příkazu COPY, kde se mají zapsat odmítnuté řádky a odpovídající chybový soubor. Úplnou cestu z účtu úložiště je možné zadat nebo lze zadat cestu relativní k kontejneru. Pokud zadaná cesta neexistuje, vytvoří se vaším jménem. Vytvoří se podřízený adresář s názvem _rejectedrows. Znak _ zajišťuje, aby byl adresář uchycený pro jiné zpracování dat, pokud není explicitně pojmenovaný v parametru location.
Note
Pokud je relativní cesta předána ERRORFILE, cesta je relativní vzhledem k cestě kontejneru zadané v external_location.
V tomto adresáři existuje složka vytvořená na základě času odeslání načtení ve formátu YearMonthDay -HourMinuteSecond (např. 20180330-173205). V této složce se zapíšou dva typy souborů, soubor důvodu (Chyba) a soubor s daty (řádek) každý předpřipravený pomocí id dotazu, id distribuce a identifikátoru GUID souboru. Vzhledem k tomu, že data a důvod jsou v samostatných souborech, odpovídající soubory mají odpovídající předponu.
Pokud je v souboru ERRORFILE definovaná úplná cesta k účtu úložiště, použije se ERRORFILE_CREDENTIAL pro připojení k danému úložišti. V opačném případě se použije hodnota uvedená pro CREDENTIAL. Pokud se pro zdrojová data používají stejné přihlašovací údaje, které se používají pro ERRORFILE, platí také omezení, která platí pro ERRORFILE_CREDENTIAL.
ERRORFILE_CREDENTIAL = (IDENTITY= '', SECRET = '')
ERRORFILE_CREDENTIAL platí jenom pro soubory CSV. Podporované metody zdroje dat a ověřování jsou:
Azure Blob Storage – SAS/INSTANČNÍ OBJEKT/Entra
Azure Data Lake Gen2 – SAS/MSI/INSTANČNÍ OBJEKT/Entra
Ověřování pomocí sdílených přístupových podpisů (SAS)
- IDENTITY: Konstanta s hodnotou sdíleného přístupového podpisu
- SECRET:sdílený přístupový podpisposkytuje delegovaný přístup k prostředkům ve vašem účtu úložiště.
Minimální požadovaná oprávnění: READ, LIST, WRITE, CREATE, DELETE
Ověřování pomocí instančních objektů
- IDENTITY: <ID klienta>@<OAuth_2.0_Token_EndPoint>
- SECRET: Klíč instančního objektu aplikace Microsoft Entra
Minimální požadované role RBAC: Přispěvatel dat objektů blob úložiště nebo vlastník dat objektů blob služby Storage
Note
Použití koncového bodu tokenu OAuth 2.0 V1
Ověřování pomocí spravované identity
(koncové body služeb virtuální sítě) - IDENTITY: Konstanta s hodnotou "Spravovaná identita"
Minimální požadované role RBAC: Přispěvatel dat objektů blob úložiště nebo vlastník dat objektů blob služby Storage pro server služby SQL Database zaregistrovaný v Microsoft Entra
Ověřování pomocí uživatele Microsoft Entra
- CREDENTIAL se nevyžaduje
Minimální požadované role RBAC: Přispěvatel dat objektů blob úložiště nebo vlastník dat objektů blob úložiště pro uživatele Microsoft Entra
Použití klíče účtu úložiště s ERRORFILE_CREDENTIAL se nepodporuje.
Note
Pokud používáte stejný účet úložiště pro váš ERRORFILE a zadáváte cestu ERRORFILE vzhledem ke kořenovému adresáři kontejneru, nemusíte zadávat ERROR_CREDENTIAL.
MAXERRORS = max_errors
MAXERRORS určuje maximální počet odmítnutých řádků povolených při načítání, než operace COPY selže. Každý řádek, který nelze importovat operací KOPÍROVÁNÍ, se ignoruje a počítá se jako jedna chyba. Pokud není zadaný max_errors, je výchozí hodnota 0.
MAXERRORS nelze použít s AUTO_CREATE_TABLE.
Pokud je FILE_TYPEPARQUET, výjimky, které jsou způsobeny chybami převodu datového typu (například binární soubor Parquet na celé číslo SQL) stále způsobit COPY INTO selhání, ignorování FUNKCE MAXERRORS.
COMPRESSION = { 'DefaultCodec' | 'Snappy' | 'GZIP' | 'NONE'}
COMPRESSION je nepovinný a určuje metodu komprese dat pro externí data.
- Csv podporuje GZIP
- Parquet podporuje GZIP a Snappy
- ORC podporuje DefaultCodec a Snappy.
- Zlib je výchozí komprese pro ORC.
Příkaz COPY automaticky dedetktuje typ komprese na základě přípony souboru, pokud tento parametr není zadaný:
-
.gz- GZIP -
.snappy- Kousavý -
.deflate- DefaultCodec (pouze Parquet a ORC)
Příkaz COPY vyžaduje, aby soubory gzip neobsahují žádné koncové uvolňování paměti, aby fungovaly normálně. Formát gzip vyžaduje, aby soubory byly složeny z platných členů bez jakýchkoli dalších informací před, mezi nimi nebo za nimi. Jakákoli odchylka od tohoto formátu, například přítomnost koncových dat, která nejsou gzip, způsobí selhání příkazu COPY. Ujistěte se, že na konci souborů gzip není žádné koncové uvolňování paměti, abyste zajistili, že funkce COPY dokáže tyto soubory úspěšně zpracovat.
FIELDQUOTE = "field_quote"
FIELDQUOTE platí pro CSV a určuje jeden znak, který se použije jako znak uvozovky (oddělovač řetězců) v souboru CSV. Pokud není zadán, znak uvozovky (") se použije jako znak uvozovek definovaný ve standardu RFC 4180. Hexadecimální notace je také podporována pro FIELDQUOTE. Rozšířené ZNAKY ASCII a více bajtů nejsou u UTF-8 pro FIELDQUOTE podporované.
Note
Znaky FIELDQUOTE jsou uvozené ve sloupcích řetězců, kde je přítomnost dvojitého POLEQUOTE (oddělovač).
FIELDTERMINATOR = "field_terminator"
FIELDTERMINATOR Platí jenom pro CSV. Určuje ukončovací znak pole, který se používá v souboru CSV. Ukončovací znak pole lze zadat pomocí šestnáctkového zápisu. Ukončovací znak pole může být víceznakový. Výchozí ukončovací znak pole je a (,). Rozšířené ASCII a vícebajtů nejsou u UTF-8 pro FIELDTERMINATOR podporovány.
UKONČOVACÍ ZNAK ŘÁDKU = 'row_terminator'
UKONČOVACÍ ŘÁDKŮ platí jenom pro sdílený svazek clusteru. Určuje ukončovací znak řádku, který se používá v souboru CSV. Ukončovací znak řádku lze zadat pomocí šestnáctkového zápisu. Ukončovací znak řádku může být víceznakový. Ve výchozím nastavení je ukončovací znak řádku \r\n.
Příkaz COPY předpony \r znak při zadávání \n (newline) výsledkem \r\n. Chcete-li zadat pouze \n znak, použijte šestnáctkovou notaci (0x0A). Při zadávání ukončovačů řádků s více znaky v šestnáctkové soustavě nezadávejte 0x mezi jednotlivými znaky.
Rozšířené ASCII a více bajtové znaky nejsou podporovány u UTF-8 pro ROW TERMINATOR.
PRVNÍ ŘADA = First_row_int
FIRSTROW platí pro sdílený svazek clusteru a určuje číslo řádku, které se čte jako první ve všech souborech příkazu COPY. Hodnoty začínají od 1, což je výchozí hodnota. Pokud je hodnota nastavená na dvě, při načtení dat se první řádek v každém souboru (řádku záhlaví) přeskočí. Řádky se přeskočí na základě existence ukončovačů řádků.
DATEFORMAT = { 'mdy' | 'dmy' | 'ymd' | 'ydm' | 'myd' | 'dym' }
DATEFORMAT se vztahuje pouze na sdílený svazek clusteru a určuje formát data mapování dat na formáty kalendářních dat SQL Serveru. Přehled všech datových typů a funkcí Transact-SQL data a času najdete v tématu datové typy a funkce data a času (Transact-SQL). FUNKCE DATEFORMAT v rámci příkazu COPY má přednost před DATEFORMAT nakonfigurovaným na úrovni relace.
ENCODING = 'UTF8' | 'UTF16'
KÓDOVÁNÍ platí jenom pro sdílený svazek clusteru. Výchozí hodnota je UTF8. Určuje standard kódování dat pro soubory načtené příkazem COPY.
IDENTITY_INSERT = ON | "VYPNUTO"
IDENTITY_INSERT určuje, jestli se má pro sloupec identity použít hodnota identity nebo hodnoty v importovaném datovém souboru. Pokud je IDENTITY_INSERT VYPNUTO (výchozí), ověří se hodnoty identity pro tento sloupec, ale neimportují se. Všimněte si následujícího chování pomocí příkazu COPY:
- Pokud je IDENTITY_INSERT vypnutá a tabulka obsahuje sloupec identity
- Je nutné zadat seznam sloupců, který nemapuje vstupní pole na sloupec identity.
- Pokud je IDENTITY_INSERT ZAPNUTO a tabulka obsahuje sloupec identity.
- Pokud je seznam sloupců předán, musí namapovat vstupní pole na sloupec identity.
- Výchozí hodnota není pro SLOUPEC IDENTITY v seznamu sloupců podporovaná.
- IDENTITY_INSERT lze nastavit pouze pro jednu tabulku najednou.
Azure Synapse Analytics automaticky přiřadí jedinečné hodnoty na základě počátečních a přírůstkových hodnot zadaných během vytváření tabulky.
AUTO_CREATE_TABLE = { 'ZAPNUTO' | 'VYPNUTÉ' }
AUTO_CREATE_TABLE určuje, jestli se tabulka může automaticky vytvořit pomocí automatického zjišťování schématu. Je k dispozici pouze pro soubory Parquet.
- ZAPNUTO: Umožňuje automatické vytváření tabulek. Proces automaticky vytvoří novou tabulku tím, že zjistí
COPY INTOstrukturu souboru, který má být načten. Lze také použít s existujícími tabulkami, které využívají automatické zjišťování schémat souborů Parquet. - VYPNUTO: Automatické vytváření tabulek není povolené. Default.
Note
Automatické vytváření tabulek funguje společně s automatickým zjišťováním schématu. Automatické vytváření tabulek není ve výchozím nastavení povolené.
Permissions
Uživatel, který spouští příkaz COPY, musí mít následující oprávnění:
Vyžaduje oprávnění K VLOŽENÍ a SPRÁVĚ HROMADNÝCH OPERACÍ. V Azure Synapse Analytics jsou vyžadována oprávnění k operacím HROMADNÉ OPERACE VLOŽENÍ a SPRÁVA DATABÁZE.
Pokud navíc uživatel, který spouští příkaz COPY, chce také vygenerovat novou tabulku a načíst do ní data, vyžaduje oprávnění CREATE TABLE a ALTER ON SCHEMA.
Pokud chcete například povolit mike@contoso.com vytvořit novou tabulku ve schématu HR a vložit data ze souboru Parquet, použijte následující Transact-SQL ukázku:
GRANT ADMINISTER DATABASE BULK OPERATIONS to [mike@contoso.com];
GRANT INSERT to [mike@contoso.com];
GRANT CREATE TABLE to [mike@contoso.com];
GRANT ALTER on SCHEMA::HR to [mike@contoso.com];
Remarks
Příkaz COPY přijímá pouze platné znaky UTF-8 a UTF-16 pro data řádků a parametry příkazu. Zdrojové soubory nebo parametry (například ROW TERMINATOR nebo FIELD TERMINATOR), které používají neplatné znaky, mohou být nesprávně interpretovány příkazem COPY a způsobit neočekávané výsledky, jako je poškození dat nebo jiná selhání. Než vyvoláte příkaz COPY, ujistěte se, že zdrojové soubory a parametry splňují předpisy UTF-8 nebo UTF-16.
Dotazovací MAXDOP nápověda není podporována s .COPY INTO
Aby bylo zajištěno spolehlivé provádění, zdrojové soubory a složky musí zůstat po celou dobu trvání COPY INTO operace beze změny.
- Změna, odstranění nebo nahrazení všech odkazovaných souborů nebo složek během spuštění příkazu může způsobit selhání operace nebo způsobit nekonzistentní příjem dat.
- Před spuštěním
COPY INTOověřte, že jsou všechna zdrojová data stabilní a během procesu nebudou změněna.
Examples
A. Načtení z veřejného účtu úložiště
Následující příklad je nejjednodušší formou COPY příkazu, který načítá data z veřejného úložiště. V tomto příkladu se výchozí hodnoty příkazu COPY shodují s formátem souboru CSV položky řádku.
COPY INTO dbo.[lineitem]
FROM 'https://unsecureaccount.blob.core.windows.net/customerdatasets/folder1/lineitem.csv'
WITH (FIELDTERMINATOR = '|')
Výchozí hodnoty příkazu COPY jsou:
DATEFORMAT = Session DATEFORMAT
MAXERRORS = 0
Výchozí komprese je nekomprimovaná.
FIELDQUOTE = '''
FIELDTERMINATOR = ','
ROWTERMINATOR = '\n'
Important
FUNKCE COPY zpracovává \n interně jako s \r\n. Další informace naleznete v části ROWTERMINATOR.
PRVNÍ ŘADA = 1
ENCODING = 'UTF8'
FILE_TYPE = CSV
IDENTITY_INSERT = OFF
B. Načtení ověřování prostřednictvím přístupového podpisu sdílené složky (SAS)
Následující příklad načte soubory, které používají kanál řádku jako ukončovací znak řádku, jako je výstup systému UNIX. Tento příklad také používá klíč SAS k ověření ve službě 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. Načtení se seznamem sloupců s výchozími hodnotami, které se ověřují prostřednictvím klíče účtu úložiště
Tento příklad načte soubory určující seznam sloupců s výchozími hodnotami.
--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. Načtení Parquet nebo ORC pomocí existujícího objektu formátu souboru
Tento příklad používá zástupný znak k načtení všech souborů Parquet do složky.
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. Načtení určující zástupné znaky a více souborů
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. Načtení pomocí přihlašovacích údajů MSI
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. Načtení pomocí automatické detekce schématu
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'
)
časté otázky
Jaký je výkon příkazu COPY v porovnání s PolyBase?
Příkaz COPY má lepší výkon v závislosti na vaší úloze.
Komprimované soubory nelze automaticky rozdělit. Pokud chcete dosáhnout nejlepšího výkonu načítání, zvažte rozdělení vstupu do více souborů při načítání komprimovaných sdílených svazků clusteru.
Velké nekomprimované soubory CSV je možné rozdělit a načíst paralelně automaticky, takže ve většině případů není nutné ručně rozdělit nekomprimované soubory CSV. V některých případech, kdy automatické rozdělení souborů není možné kvůli charakteristikám dat použít, může ruční rozdělení velkých sdílených svazků clusteru výhodou výkonu.
Jaké jsou pokyny k rozdělení souboru pro příkaz COPY, který načítá komprimované soubory CSV?
Pokyny k počtu souborů jsou uvedeny v následující tabulce. Jakmile dosáhnete doporučeného počtu souborů, dosáhnete lepšího výkonu, který soubory zvětší. Počet souborů je určen počtem výpočetních uzlů vynásobeným číslem 60. Například v 6000DWU máme 12 výpočetních uzlů a 12*60 = 720 oddílů. Jednoduché prostředí pro rozdělení souborů najdete v tématu Jak maximalizovat propustnost načítání kopírování s rozdělením souborů.
| 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 |
Jaké jsou pokyny k rozdělení souboru pro příkaz COPY, který načítá soubory Parquet nebo ORC?
Soubory Parquet a ORC není potřeba rozdělit, protože příkaz COPY automaticky rozdělí soubory. Soubory Parquet a ORC v účtu úložiště Azure by měly být 256 MB nebo větší, aby byl co nejlepší výkon.
Existují nějaká omezení počtu nebo velikosti souborů?
Neexistují žádná omezení počtu nebo velikosti souborů; Pro zajištění nejlepšího výkonu však doporučujeme soubory, které mají alespoň 4 MB. Pokud chcete dosáhnout lepšího výkonu, omezte také počet zdrojových souborů na maximálně 5 000 souborů.
Existují nějaké známé problémy s příkazem COPY?
Pokud máte pracovní prostor Azure Synapse vytvořený před 7. prosincem 2020, může se při ověřování pomocí spravované identity zobrazit podobná chybová zpráva: com.microsoft.sqlserver.jdbc.SQLServerException: Managed Service Identity has not been enabled on this server. Please enable Managed Service Identity and try again.
Pokud chcete tento problém vyřešit opětovnou registrací spravované identity pracovního prostoru, postupujte takto:
- Nainstalujte Azure PowerShell. Přečtěte si instalacePowerShellu.
- Registrace spravované identity pracovního prostoru pomocí PowerShellu:
Connect-AzAccount Select-AzSubscription -SubscriptionId <subscriptionId> Set-AzSqlServer -ResourceGroupName your-database-server-resourceGroup -ServerName your-SQL-servername -AssignIdentity
Související obsah
- Přehled načítání s využitím služby Azure Synapse Analytics
platí pro:Warehouse v Microsoft Fabric
Tento článek vysvětluje, jak použít příkaz COPY ve skladu v Microsoft Fabric k načítání z externích účtů úložiště. Příkaz COPY poskytuje největší flexibilitu pro příjem dat s vysokou propustností do vašeho skladu a je jako strategie Ingestování dat do vašeho skladu.
V Microsoft Fabric příkaz
Pro více informací o použití COPY INTO ve vašem skladu v Microsoft Fabric viz Ingest dat do vašeho skladu pomocí příkazu COPY.
Ve výchozím nastavení COPY INTO se ověřuje jako spuštěný uživatel ID Entra.
Použití COPY pro následující schopnosti:
- Používejte nižší privilegované uživatele k načtení bez nutnosti striktních oprávnění CONTROL v datovém skladu.
- Spusťte jeden příkaz T-SQL, aniž byste museli vytvářet jiné databázové objekty.
- Správně parsovat a načítat soubory CSV, kde oddělovače (řetězec, pole, řádek) jsou v řetězcových sloupcích oddělených.
- Zadejte jemně odlišený model oprávnění bez vystavení klíčů účtu úložiště pomocí sdílených přístupových podpisů (SAS).
- Použijte jiný úložný účet pro
ERRORFILEdané místo (REJECTED_ROW_LOCATION). - Přizpůsobte výchozí hodnoty pro každý cílový sloupec a zadejte zdrojová datová pole, která se mají načíst do konkrétních cílových sloupců.
- Určete vlastní terminátor řádku, terminátor pole a citát pole pro CSV soubory.
- Zadejte zástupné cardy a více souborů v cestě k umístění úložiště.
- Další informace o možnostech příjmu dat a osvědčených postupech najdete v tématu Ingestování dat do vašeho skladu pomocí příkazu COPY.
Syntax
COPY INTO [ warehouse_name. ] [ schema_name. ] table_name
[ (Column_list) ]
FROM '<external_location>' [ , ...n ]
WITH
(
[ FILE_TYPE = { 'CSV' | 'PARQUET' } ]
[ , CREDENTIAL = (AZURE CREDENTIAL) ]
[ , ERRORFILE = ' [ http(s)://storageaccount/container ] /errorfile_directory [ / ] ] '
[ , ERRORFILE_CREDENTIAL = (AZURE CREDENTIAL) ]
[ , MAXERRORS = max_errors ]
[ , COMPRESSION = { 'Gzip' | 'Snappy' } ]
[ , FIELDQUOTE = 'string_delimiter' ]
[ , FIELDTERMINATOR = 'field_terminator' ]
[ , ROWTERMINATOR = 'row_terminator' ]
[ , FIRSTROW = first_row ]
[ , DATEFORMAT = 'date_format' ]
[ , ENCODING = { 'UTF8' | 'UTF16' } ]
[ , PARSER_VERSION = { '1.0' | '2.0' } ]
[ , MATCH_COLUMN_COUNT = { 'ON' | 'OFF' } ]
)
Arguments
warehouse_name
Volitelné, pokud aktuální sklad pro uživatele provádějící operaci je skladem zadané tabulky. Pokud sklad není specifikován a specifikované schéma a tabulka v aktuálním skladu neexistují, COPY selže a zobrazí se chybová zpráva.
schema_name
Volitelné, pokud je výchozím schématem pro uživatele, který operaci provádí, schéma zadané tabulky. Pokud schéma není specifikováno a výchozí schéma uživatele provádějícího COPY operaci se liší od schématu zadané tabulky, COPY je schéma zrušeno a vrací se chybová zpráva.
table_name
Název tabulky, do COPY které se data zasouvají. Cílová tabulka už musí existovat ve skladu.
(column_list)
Volitelný seznam jednoho nebo více sloupců používaných k mapování zdrojových datových polí na cílové sloupce tabulky pro načítání dat.
column_list musí být uzavřeny v závorkách a oddělené čárkami. Seznam sloupců má následující formát:
[(Column_name [výchozí Default_value] [Field_number] [,... n])]
- Column_name – název sloupce v cílové tabulce.
-
Default_value – výchozí hodnota, která nahrazuje jakoukoli
NULLhodnotu ve vstupním souboru. Výchozí hodnota platí pro všechny formáty souborů.COPYse pokouší načístNULLze vstupního souboru, když je sloupec vynechán ze seznamu sloupců nebo když je pole vstupního souboru prázdné. Výchozí hodnota předchází klíčovému slovu "default" - Field_number – číslo pole vstupního souboru, které je namapované na cílový sloupec.
- Indexování pole začíná na 1.
Když column_list není specifikováno, COPY namapuje sloupce podle pořadí zdroje a cíle: Vstupní pole 1 jde do cílového sloupce 1, pole 2 do sloupce 2 atd.
Note
Při práci se soubory Parquet ve službě Warehouse v Microsoft Fabric se názvy sloupců musí shodovat přesně ve zdroji a cíli. Pokud se název sloupce v cílové tabulce liší od názvu sloupce v souboru parquet, cílový sloupec tabulky se vyplní hodnotou NULL.
Když není specifikován seznam sloupců, mapuje COPY sloupce podle pořadí zdroje a cíle: vstupní pole 1 jde do cílového sloupce 1, pole 2 do sloupce 2 atd.
Externí umístění
Určuje, kde jsou soubory obsahující data připraveny. V současné době se podporuje Azure Data Lake Storage (ADLS) Gen2, Azure Blob Storage a OneLake (Preview):
-
Externí umístění pro službu Blob Storage:
https://<account\>.blob.core.windows.net/<container\>/<path\> -
externím umístěním pro ADLS Gen2:
https://<account\>.dfs.core.windows.net/<container\>/<path\> -
Externí umístění pro OneLake (Preview):
https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/
Azure Data Lake Storage (ADLS) Gen2 nabízí lepší výkon než Azure Blob Storage (starší verze). Pokud je to možné, zvažte použití účtu ADLS Gen2.
Note
Koncový .blob bod je k dispozici i pro ADLS Gen2 a aktuálně poskytuje nejlepší výkon. Koncový bod blob použijte, pokud dfs není pro metodu ověřování potřeba.
Účet – název účtu úložiště
kontejneru – název kontejneru objektů blob
cesta – složka nebo cesta k souboru pro data. Umístění začíná z kontejneru. Pokud je složka specifikována, načte
COPYvšechny soubory ze složky a všechny její podsložky.COPYignoruje skryté složky a nevrací soubory začínající podčarováním (_) nebo tečkou (.), pokud cesta výslovně nespecifikuje. Toto chování je stejné i při zadávání cesty se zástupným znakem.
Zástupné cardy lze zahrnout do cesty, kde
- Porovnávání názvů zástupných znaků rozlišují malá a velká písmena.
- Zástupný znak může být uchvácený pomocí znaku zpětného lomítka (
\)
Note
Pokud chcete dosáhnout nejlepšího výkonu, vyhněte se zadávání zástupných znaků, které by se rozšířily o větší počet souborů. Pokud je to možné, uveďte místo zadávání zástupných znaků několik umístění souborů.
Více umístění souborů lze zadat pouze ze stejného účtu úložiště a kontejneru prostřednictvím seznamu odděleného čárkami, například:
https://<account>.blob.core.windows.net/<container\>/<path\>, https://<account\>.blob.core.windows.net/<container\>/<path\>
externích umístění za bránou firewall
Pokud chcete získat přístup k souborům ve službě Azure Data Lake Storage (ADLS) Gen2 a v umístěních Azure Blob Storage, která jsou za bránou firewall, platí následující požadavky:
- Musí být zřízena identita pracovního prostoru pro pracovní prostor, který je hostitelem vašeho skladu. Další informace o nastavení identity pracovního prostoru najdete v tématu Identita pracovního prostoru.
- Váš účet ID Entra musí být schopen používat identitu pracovního prostoru.
- Váš účet Id Entra musí mít přístup k podkladovým souborům prostřednictvím řízení přístupu na základě role v Azure (RBAC) nebo seznamů ACL data Lake.
- Pracovní prostor Infrastruktury, který je hostitelem skladu, musí být přidán jako pravidlo instance prostředku . Další informace o tom, jak přidat pracovní prostor Fabric s pravidlem instance prostředku, najdete v tématu pravidlo instance prostředku.
FILE_TYPE = { 'CSV' | "PARQUET" }
FILE_TYPE určuje formát externích dat.
- CSV: Určuje soubor hodnot oddělených čárkami vyhovující standardu RFC 4180.
- PARQUET: Určuje formát Parquet.
PŘIHLAŠOVACÍ ÚDAJE (IDENTITA = '', SECRET = '')
CREDENTIAL Určuje mechanismus ověřování pro přístup k externímu účtu úložiště.
V datovém skladu infrastruktury:
-
COPY INTOnení podporován v případě, že je zakázán veřejný přístup. - U účtů veřejného úložiště jsou podporovanými mechanismy ověřování Microsoft Entra ID, sdílený přístupový podpis (SAS) nebo klíč účtu úložiště (SAK).
- U účtů veřejného úložiště za bránou firewall je jedinou podporovanou metodou ověřování Microsoft Entra ID ověřování.
COPY INTOpoužití OneLake jako zdroje podporuje pouze ověřování EntraID.
Ověřování EntraID uživatele je výchozí. Není nutné zadat žádné přihlašovací údaje.
- Ověřování pomocí sdíleného přístupového podpisu (SAS)
-
IDENTITY: Konstanta s hodnotou 'Sdílený přístupový podpis'. -
SECRET: Sdílený přístupový podpis poskytuje delegovaný přístup k prostředkům ve vašem účtu úložiště. - Minimální požadovaná oprávnění: READ a LIST.
-
- Ověřování pomocí klíče účtu úložiště
-
IDENTITY: Konstanta s hodnotou 'Storage Account Key'. -
SECRET: Klíč účtu úložiště.
-
ERRORFILE = umístění adresáře
ERRORFILE platí jenom pro sdílený svazek clusteru. Určuje adresář, do kterého se mají zapsat odmítnuté řádky a odpovídající chybový soubor. Úplnou cestu z účtu úložiště je možné zadat nebo lze zadat cestu relativní k kontejneru. Pokud zadaná cesta neexistuje, vytvoří se vaším jménem. Vytvoří se podřízený adresář s názvem _rejectedrows. Znak _ zajišťuje, aby byl adresář uchycený pro jiné zpracování dat, pokud není explicitně pojmenovaný v parametru location.
Note
Pokud je relativní cesta předána ERRORFILE, cesta je relativní vzhledem k cestě kontejneru zadané v external_location.
V tomto adresáři existuje složka vytvořená na základě času odeslání v YearMonthDay -HourMinuteSecond formátu (například 20180330-173205). V této složce se vytvoří složka s ID příkazu a v této složce jsou zapsány dva typy souborů: chyba. Soubor JSON obsahující důvody zamítnutí a soubor row.csv obsahující odmítnuté řádky.
Pokud je v souboru ERRORFILE definovaná úplná cesta k účtu úložiště, použije se ERRORFILE_CREDENTIAL pro připojení k danému úložišti. V opačném případě se použije hodnota uvedená pro CREDENTIAL. Pokud se pro zdrojová data používají stejné přihlašovací údaje, které se používají pro ERRORFILE, platí také omezení, která platí pro ERRORFILE_CREDENTIAL.
Při použití účtu úložiště chráněného bránou firewall se soubor chyby vytvoří ve stejném kontejneru zadaném v cestě k účtu úložiště. Při zvažování použití možnosti ERRORFILES v tomto scénáři je také nutné zadat parametr MAXERROR. Pokud je v souboru ERRORFILE definovaná úplná cesta k účtu úložiště, použije se ERRORFILE_CREDENTIAL pro připojení k danému úložišti. V opačném případě se použije hodnota uvedená pro CREDENTIAL.
ERRORFILE_CREDENTIAL = (IDENTITY= '', SECRET = '')
ERRORFILE_CREDENTIAL platí jenom pro soubory CSV. Jediným podporovaným mechanismem ověřování ve službě Warehouse v Microsoft Fabric je sdílený přístupový podpis (SAS).
- Ověřování pomocí sdílených přístupových podpisů (SAS)
- IDENTITY: Konstanta s hodnotou sdíleného přístupového podpisu
- SECRET:sdílený přístupový podpisposkytuje delegovaný přístup k prostředkům ve vašem účtu úložiště.
- Minimální požadovaná oprávnění: READ, LIST, WRITE, CREATE, DELETE
Note
Pokud používáte stejný účet úložiště pro váš ERRORFILE a zadáváte cestu ERRORFILE vzhledem ke kořenovému adresáři kontejneru, nemusíte zadávat ERROR_CREDENTIAL.
MAXERRORS = max_errors
MAXERRORS určuje maximální počet odmítnutých řádků povolených při načítání před COPY selháním operace. Každý řádek, který operace nemůže importovat, COPY je ignorován a počítán jako jedna chyba. Pokud není zadaný max_errors, je výchozí hodnota 0.
V Microsoft Fabric nelze při FILE_TYPEpoužít PARQUET .
COMPRESSION = { 'Snappy' | 'GZIP' | 'NONE'}
COMPRESSION je nepovinný a určuje metodu komprese dat pro externí data.
- Csv podporuje GZIP
- Parquet podporuje GZIP a Snappy
Příkaz COPY automaticky detekuje typ komprese na základě přípony souboru, pokud tento parametr není specifikován:
-
.gz- GZIP
Načítání komprimovaných souborů je aktuálně podporováno pouze u PARSER_VERSION 1.0.
Příkaz COPY vyžaduje, aby soubory gzip neobsahovaly žádný trailing bage, aby fungovaly normálně. Formát gzip vyžaduje, aby soubory byly složeny z platných členů bez jakýchkoli dalších informací před, mezi nimi nebo za nimi. Jakákoli odchylka od tohoto formátu, například přítomnost ne-gzip dat, povede k neúspěchu COPY příkazu. Ujistěte se, že na konci gzip souborů není žádný nesmyslný odpad, abyste tyto COPY soubory mohli úspěšně zpracovat.
FIELDQUOTE = "field_quote"
FIELDQUOTE platí jenom pro sdílený svazek clusteru. Určuje jeden znak, který se použije jako znak uvozovky (oddělovač řetězců) v souboru CSV. Pokud není zadán, znak uvozovky (") se použije jako znak uvozovek definovaný ve standardu RFC 4180. Hexadecimální notace je také podporována pro FIELDQUOTE. Rozšířené ZNAKY ASCII a více bajtů nejsou u UTF-8 pro FIELDQUOTE podporované.
Note
Znaky FIELDQUOTE jsou uvozené ve sloupcích řetězců, kde je přítomnost dvojitého POLEQUOTE (oddělovač).
FIELDTERMINATOR = "field_terminator"
FIELDTERMINATOR platí jenom pro sdílený svazek clusteru. Určuje ukončovací znak pole, který se používá v souboru CSV. Ukončovací znak pole lze také zadat pomocí šestnáctkového zápisu. Ukončovací znak pole může být víceznakový. Výchozí ukončovací znak pole je a (,). Rozšířené ASCII a vícebajtů nejsou u UTF-8 pro FIELDTERMINATOR podporovány.
ROWTERMINATOR = 'row_terminator'
ROWTERMINATOR platí jenom pro sdílený svazek clusteru. Určuje ukončovací znak řádku, který se používá v souboru CSV. Ukončovací znak řádku lze zadat pomocí šestnáctkového zápisu. Ukončovací znak řádku může být víceznakový. Výchozí ukončovací moduly jsou \r\n, \na \r.
Příkaz COPY předponu znaku při zadávání \r (nový řádek) předponuje\n, což vede k .\r\n Chcete-li zadat pouze \n znak, použijte šestnáctkovou notaci (0x0A). Při zadávání ukončovačů řádků s více znaky v šestnáctkové soustavě nezadávejte 0x mezi jednotlivými znaky.
Rozšířené ZNAKY ASCII a více bajtů nejsou u UTF-8 pro ROWTERMINATOR podporovány.
PRVNÍ ŘADA = First_row_int
FIRSTROW platí jenom pro sdílený svazek clusteru. Specifikuje číslo řádku, které se ve všech souborech COPY příkazu načte jako první. Hodnoty začínají od 1, což je výchozí hodnota. Pokud je hodnota nastavená na dvě, při načtení dat se první řádek v každém souboru (řádku záhlaví) přeskočí. Řádky se přeskočí na základě existence ukončovačů řádků.
DATEFORMAT = { 'mdy' | 'dmy' | 'ymd' | 'ydm' | 'myd' | 'dym' }
DATEFORMAT se vztahuje pouze na sdílený svazek clusteru a určuje formát data mapování dat na formáty kalendářních dat SQL Serveru. Přehled všech datových typů a funkcí Transact-SQL data a času najdete v tématu datové typy a funkce data a času (Transact-SQL). DATEFORMAT v příkazu COPY má přednost před DATEFORMAT, který je konfigurován na úrovni relace.
ENCODING = 'UTF8' | 'UTF16'
KÓDOVÁNÍ platí jenom pro sdílený svazek clusteru. Výchozí hodnota je UTF8. Specifikuje standard kódování dat pro soubory načítané příkazem COPY .
PARSER_VERSION = { '1.0' | '2.0' }
PARSER_VERSION platí jenom pro sdílený svazek clusteru. Výchozí hodnota je 2.0. Určuje analyzátor souborů používaný k příjmu dat, když je typ zdrojového souboru CSV. Analyzátor 2.0 nabízí lepší výkon pro příjem souborů CSV.
Analyzátor verze 2.0 má následující omezení:
- Komprimované soubory CSV nejsou podporovány.
- Soubory s kódováním UTF-16 se nepodporují.
- Multiznakový nebo
ROWTERMINATORvícebajtový ,FIELDTERMINATOR, neboFIELDQUOTEnení podporován. Nicméně\r\nje přijímána jako výchozíROWTERMINATOR.
Při použití analyzátoru verze 1.0 se soubory UTF-8 nejsou pro FIELDTERMINATOR podporovány vícebajtové a multicharacterové ukončovací moduly.
Analyzátor verze 1.0 je k dispozici pouze pro zpětnou kompatibilitu a měl by být použit pouze v případě, že jsou zjištěna tato omezení.
Note
Při COPY INTO použití s komprimovanými CSV soubory nebo soubory s kódováním UTF-16 automaticky přechází COPY INTO na PARSER_VERSION verzi 1.0 bez nutnosti zásahu uživatele. Pro víceznakové terminátory na FIELDTERMINATOR nebo ROWTERMINATOR, COPY INTO příkaz selže. Použijte PARSER_VERSION = '1.0' , pokud jsou potřeba víceznakové oddělovače.
MATCH_COLUMN_COUNT = { 'ZAPNUTO' | 'VYPNUTÉ' }
MATCH_COLUMN_COUNT platí jenom pro sdílený svazek clusteru. Výchozí hodnota je OFF. Určuje, jestli má příkaz COPY zkontrolovat, jestli počet řádků sloupců ve zdrojových souborech odpovídá počtu sloupců cílové tabulky. Platí následující chování:
- Pokud je MATCH_COLUMN_COUNT
OFF:- Překročení sloupců ze zdrojových řádků se ignoruje.
- Řádky s menším počtem sloupců se vloží jako null do sloupců s možnou hodnotou null.
- Pokud není do nenulovatelného sloupce uvedena hodnota, příkaz
COPYselže.
- Pokud je MATCH_COLUMN_COUNT
ON:- Příkaz
COPYkontroluje, zda počet sloupců v každém řádku v každém souboru ze zdroje odpovídá počtu sloupců v cílové tabulce.
- Příkaz
- Pokud dojde k nesouladu počtu sloupců,
COPYpříkaz selže.
Note
MATCH_COLUMN_COUNT funguje nezávisle na MAXERRORS. Neshoda počtu sloupců způsobí selhání COPY INTO bez ohledu na MAXERRORS .
Použití příkazu COPY INTO s OneLake
Data můžete načíst COPY INTO přímo ze souborů uložených v Fabric OneLake, konkrétně ze složky Files objektu Fabric Lakehouse. To eliminuje potřebu externích pracovních účtů (jako je ADLS Gen2 nebo Blob Storage) a umožňuje příjem dat nativních pro pracovní prostory pomocí oprávnění Fabric. Tato funkce podporuje:
- Čtení ze
Filessložek v Lakehouses - Načtení pracovního prostoru do skladu v rámci stejného tenanta
- Nativní vynucování identity pomocí Microsoft Entra ID
Example:
COPY INTO t1
FROM 'https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/*.csv'
WITH (
FILE_TYPE = 'CSV',
FIRSTROW = 2
);
Permissions
Oprávnění řídicí roviny
Pokud chcete spustit příkaz COPY INTO, musí být uživateli uděleno členství v roli pracovního prostoru prostřednictvím Spravovat přístup vpracovního prostoru s alespoň rolí Čtenář. Přístup k skladu můžete také sdílet s uživatelem prostřednictvím oprávnění k položce na portálu Fabric s alespoň oprávněními ke čtení. K zajištění souladu se zásadou nejnižších oprávnění stačí oprávnění ke čtení.
Oprávnění roviny dat
Po udělení oprávnění řídicí roviny prostřednictvím rolí pracovního prostoru nebo oprávnění k položce, pokud má oprávnění ke čtení pouze na úrovni roviny dat , měl by být uživateli udělen také INSERT a ADMINISTER DATABASE BULK OPERATIONS oprávnění prostřednictvím příkazů T-SQL.
Například následující skript T-SQL uděluje tato oprávnění jednotlivým uživatelům prostřednictvím svého ID Microsoft Entra.
GRANT ADMINISTER DATABASE BULK OPERATIONS to [mike@contoso.com];
GO
GRANT INSERT to [mike@contoso.com];
GO
Při použití možnosti ErrorFile musí mít uživatel minimální oprávnění přispěvatele služby Blob Storage v kontejneru účtu úložiště.
Při použití OneLake jako zdroje musí mít uživatel oprávnění Přispěvatel nebo vyšší pro zdrojový pracovní prostor (kde se nachází Lakehouse) a cílový pracovní prostor (kde se nachází Sklad). Veškerý přístup se řídí rolemi pracovního prostoru Microsoft Entra ID a Prostředků infrastruktury.
Remarks
Příkaz COPY přijímá pouze platné znaky UTF-8 a UTF-16 pro data řádku a parametry příkazů. Zdrojové soubory nebo parametry (například ROW TERMINATOR nebo FIELD TERMINATOR), které používají neplatné znaky, mohou být příkazem COPY nesprávně interpretovány a způsobit neočekávané výsledky, jako je poškození dat nebo jiné selhání. Ujistěte se, že vaše zdrojové soubory a parametry jsou v souladu s UTF-8 nebo UTF-16, než příkaz zavoláte COPY .
Tvrzení COPY INTO má omezení na velikost jednotlivých sloupců varchar(max) a varbinary(max), stejně jako na celkovou velikost řádku, kterou lze začít.
- Parketa: maximální varchar(max)/varbinary(max) velikost sloupce 16MB, maximální velikost řádku 1GB.
- CSV: maximální velikost sloupce varchar(max)/varbinary(max) 1MB, maximální velikost řádku 16MB.
Aby bylo zajištěno spolehlivé provádění, zdrojové soubory a složky musí zůstat po celou dobu trvání COPY INTO operace beze změny.
- Změna, odstranění nebo nahrazení všech odkazovaných souborů nebo složek během spuštění příkazu může způsobit selhání operace nebo způsobit nekonzistentní příjem dat.
- Před spuštěním
COPY INTOověřte, že jsou všechna zdrojová data stabilní a během procesu nebudou změněna.
Omezení pro OneLake jako zdroj
Úložiště Fabric OneLake jako zdroj pro obojí COPY INTO a OPENROWSET(BULK) je funkcí Preview.
Podporuje se pouze ověřování Microsoft Entra ID. Jiné metody ověřování, jako jsou tokeny SAS, sdílené klíče nebo připojovací řetězce, nejsou povoleny.
FilesJako zdroj se podporuje jenom složka Lakehouse. Přístup k podsložekm, zástupcům nebo jiným umístěním OneLake není momentálně k dispozici.Cesty OneLake musí používat ID pracovního prostoru a skladu. Popisné názvy pracovních prostorů nebo lakehouse se v tuto chvíli nepodporují.
Oprávnění přispěvatele jsou vyžadována v obou pracovních prostorech. Spuštěný uživatel musí mít v pracovním prostoru source Lakehouse a cílovém pracovním prostoru Skladu alespoň roli Přispěvatel.
Examples
Pro více informací o použití COPY INTO ve vašem skladu v Microsoft Fabric viz Ingest dat do vašeho skladu pomocí příkazu COPY.
A. Načtení z veřejného účtu úložiště
Následující příklad je nejjednodušší formou COPY příkazu, který načítá data z veřejného úložiště. V tomto příkladu výchozí hodnoty příkazu COPY odpovídají formátu řádkového souboru csv.
COPY INTO dbo.[lineitem]
FROM 'https://unsecureaccount.blob.core.windows.net/customerdatasets/folder1/lineitem.csv'
Výchozí hodnoty příkazu COPY jsou:
MAXERRORS = 0COMPRESSIONvýchozí je nekomprimovanýFIELDQUOTE = '"'FIELDTERMINATOR = ','ROWTERMINATOR = '\n'
Important
COPY To bere \n jako \r\n vnitřní. Další informace najdete v ROWTERMINATOR části.
FIRSTROW = 1ENCODING = 'UTF8'FILE_TYPE = 'CSV'
B. Načtení ověřování prostřednictvím přístupového podpisu sdílené složky (SAS)
Následující příklad načte soubory, které používají kanál řádku jako ukončovací znak řádku, jako je výstup systému UNIX. Tento příklad také používá klíč SAS k ověření ve službě 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. Načtení se seznamem sloupců s výchozími hodnotami, které se ověřují prostřednictvím klíče účtu úložiště (SAK)
Tento příklad načte soubory určující seznam sloupců s výchozími hodnotami.
--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. Načíst Parquet
Tento příklad používá zástupný znak k načtení všech souborů Parquet do složky pomocí ID Entra spuštěného uživatele.
COPY INTO test_parquet
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/*.parquet'
WITH (
FILE_TYPE = 'PARQUET'
)
E. Načtení určující zástupné znaky a více souborů
COPY INTO t1
FROM
'https://myaccount.blob.core.windows.net/myblobcontainer/folder0/*.txt',
'https://myaccount.blob.core.windows.net/myblobcontainer/folder1'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='<Your_SAS_Token>')
FIELDTERMINATOR = '|'
)
F. Načtení dat z OneLake (Public Preview)
COPY INTO t1
FROM 'https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/*.csv'
WITH (
FILE_TYPE = 'CSV',
FIRSTROW = 2
);
časté otázky
Jaké jsou pokyny k rozdělení souboru pro příkaz COPY, který načítá komprimované soubory CSV?
Zvažte rozdělení velkých souborů CSV, zejména pokud je počet souborů malý, ale pro zajištění lepšího výkonu udržujte soubory minimálně 4 MB.
Jaké jsou pokyny k rozdělení souboru pro příkaz COPY, který načítá soubory Parquet?
Zvažte rozdělení velkých souborů Parquet, zejména pokud je počet souborů malý.
Existují nějaká omezení počtu nebo velikosti souborů?
Neexistují žádná omezení počtu nebo velikosti souborů; Pro zajištění nejlepšího výkonu však doporučujeme soubory, které mají alespoň 4 MB.
Jakou metodu ověřování se používá, když nezadám přihlašovací údaje?
Ve výchozím nastavení COPY INTO používá id Entra spuštěného uživatele.