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
Tip
Microsoft Fabric Data Warehouse je relační sklad v podnikovém měřítku na základu datového jezera s architekturou připravenou pro budoucnost, integrovanou AI a novými funkcemi. Pokud s datovými sklady začínáte, doporučujeme vám začít s „Fabric Data Warehouse“. Stávající úlohy dedikovaného SQL fondu mohou upgradovat na Fabric a získat tak přístup k novým funkcím napříč datovou vědou, analytikou v reálném čase a reportingem.
Tento článek vysvětluje, jak použít příkaz COPY v Azure Synapse Analytics pro načítání dat z externích účtů úložiště. Toto COPY prohlášení poskytuje největší flexibilitu pro vysokopropustný vstup dat do Azure Synapse Analytics.
Note
Sklad v Microsoft Fabric najdete v tématu COPY INTO.
Použití COPY pro následující schopnosti:
- Pomocí nižších privilegovaných uživatelů můžete načítat data 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 jsou oddělovače (řetězec, pole, řádek) uchvácené v řetězcových sloupcích s oddělovači.
- Pomocí sdílených přístupových podpisů (SAS) určete jemně model oprávnění bez vystavení klíčů účtu úložiště.
- 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.
- Pro soubory CSV použijte formáty data SQL Server.
- Zadejte zástupné cardy 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římo načtěte komplexní datové typy ze souborů Parquet, jako jsou Mapy a seznamy, do řetězcových sloupců, aniž byste k předběžnému zpracování dat používali jiné nástroje.
Note
Chcete-li načíst složité datové typy ze souborů Parquet, zapněte automatické vytváření tabulek pomocí .AUTO_CREATE_TABLE
Komplexní příklady a rychlá zprovoznění pomocí příkazu najdete tady COPY :
- 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 nezadáte schéma a výchozí schéma uživatele provádějícího COPY operaci se liší od schématu zadané tabulky, COPY operace se zruší a vrátí se chybová zpráva.
název_tabulky
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 nezadáte seznam sloupců, COPY mapuje sloupce na základě zdrojového a cílového pořadí: Vstupní pole 1 přejde na cílový sloupec 1, pole 2 přejde na sloupec 2 atd.
Externí lokality
Umístění, kde jsou soubory obsahující data fázované. V současné době se podporují 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.
.blob Koncový bod použijte v případě, že .dfs se pro metodu ověřování nevyžaduje.
Úč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 zadáte složku,
COPYnačte všechny soubory ze složky a všech jejích podsložek.COPYignoruje skryté složky a nevrací soubory, které začínají podtržením (_) nebo tečkou (.), pokud nejsou explicitně zadané v cestě. Toto chování je stejné i při zadávání cesty se zástupným znakem.
Do cesty můžete zahrnout zástupné cardy, kde:
- Porovnávání názvů zástupných znaků rozlišují malá a velká písmena.
- Zástupný znak můžete řídicí znak použít 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é se rozšiřují 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ů.
Můžete zadat více umístění souborů 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, který je kompatibilní se standardem RFC 4180 .
- PARQUET: Určuje formát Parquet.
- ORC: Určuje formát sloupce optimalizovaného řádku (ORC).
Note
Typ souboru s oddělovači v PolyBase se nahrazuje formátem souboru CSV. Výchozí oddělovač čárky můžete nakonfigurovat prostřednictvím parametru FIELDTERMINATOR .
FILE_FORMAT = external_file_format_name
FILE_FORMAT platí pouze pro soubory Parquet a ORC. Určuje název objektu formátu externího souboru, který ukládá typ souboru a metodu komprese externích dat. Pro vytvoření externího formátu souboru použijte CREATE EXTERNAL FILE FORMAT.
CREDENTIAL (IDENTITY = '', SECRET = '')
CREDENTIAL 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/SERVICE PRINCIPAL/KEY/Entra | SAS/KEY | SAS/KEY |
| Azure Data Lake Gen2 | SAS/MSI/SERVICE PRINCIPAL/KEY/Entra | SAS (blob 1 )/MSI (dfs 2 )/SERVICE PRINCIPAL/KEY/Entra | SAS (blob 1 )/MSI (dfs 2 )/SERVICE PRINCIPAL/KEY/Entra |
1 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ě nemusíte zadávat
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 hodnotouShared Access Signature -
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í instančních objektů
-
IDENTITY:<ClientID>@<OAuth_2.0_Token_EndPoint> -
SECRET: Microsoft Entra klíč instančního objektu aplikace
-
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 hodnotouStorage Account Key -
SECRET: Klíč účtu úložiště
-
Ověřování pomocí spravované identity
(koncové body služeb virtuální sítě) -
IDENTITY: Konstanta s hodnotouManaged Identity
-
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 u cílových objektů oprávnění Access Control List (ACL), aby bylo možné povolit přístup pro čtení ke zdrojovým souborům.
Ověřování pomocí uživatele Microsoft Entra
- CREDENTIAL nevyžaduje se
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í pouze pro sdílený svazek clusteru. Určuje adresář v příkazu COPY , ve kterém se zamítají řádky a odpovídající chybový soubor. Úplnou cestu můžete zadat z účtu úložiště nebo cesty vzhledem ke kontejneru. Pokud zadaná cesta neexistuje, vytvoří ho sklad. 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
Když předáte relativní cestu ERRORFILE, aby byla relativní vzhledem k cestě kontejneru, kterou zadáte v external_location.
V tomto adresáři vytvoří sklad složku na základě času odeslání zatížení ve formátu YearMonthDay -HourMinuteSecond (například 20180330-173205). V této složce proces zapíše dva typy souborů: důvod (chybový) soubor a datový soubor (řádek). Každý soubor předpendí queryID, distributionIDa identifikátor 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 ERRORFILE má definovanou úplnou cestu k účtu úložiště, COPY použije ERRORFILE_CREDENTIAL se k připojení k ho. V opačném případě použije hodnotu, kterou zadáte pro CREDENTIAL. Při použití stejných přihlašovacích údajů pro zdrojová data a ERRORFILEomezení, která platí také pro ERRORFILE_CREDENTIAL použití.
ERRORFILE_CREDENTIAL = (IDENTITY = '', SECRET = '')
ERRORFILE_CREDENTIAL platí pouze pro soubory CSV. Podporované metody zdroje dat a ověřování jsou:
Azure Blob Storage: SAS, instanční objekt nebo Microsoft Entra
Azure Data Lake Gen2: SAS, MSI, instanční objekt nebo Microsoft Entra
Ověřování pomocí sdílených přístupových podpisů (SAS)
-
IDENTITY: Konstanta s hodnotouShared Access Signature -
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í: ČÍST, SEZNAMOVAT, ZAPISOVAT, VYTVÁŘET, DELETE
Ověřování pomocí instančních objektů
-
IDENTITY:<ClientID>@<OAuth_2.0_Token_EndPoint> -
SECRET: Microsoft Entra klíč instančního objektu aplikace
-
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 hodnotouManaged Identity
-
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
-
CREDENTIALnevyžaduje se
-
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ě se ERRORFILE_CREDENTIAL nepodporuje.
Note
Pokud pro soubor chyby použijete stejný účet úložiště a zadáte ERRORFILE cestu 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 selháním operace COPY. Každý řádek, který operace COPY nemůže importovat, se ignoruje a počítá se jako jedna chyba. Pokud nezadáte hodnotu maximálního počtu chyb, výchozí hodnota je 0.
MAXERRORS nelze použít s AUTO_CREATE_TABLE.
Pokud FILE_TYPE je PARQUET, výjimky, které jsou způsobeny chybami převodu datového typu (například Parquet binary to SQL integer) stále způsobit COPY INTO selhání, ignorování MAXERRORS.
COMPRESSION = { 'DefaultCodec' | 'Snappy' | 'GZIP' | 'NONE'}
COMPRESSION je volitelná a určuje metodu komprese dat pro externí data.
- Sdílený svazek clusteru podporuje GZIP.
- Parquet podporuje GZIP a Snappy.
- ORC podporuje DefaultCodec a Snappy.
- Zlib je výchozí komprese pro ORC.
Příkaz COPY automaticky dedetkuje typ komprese na základě přípony souboru, pokud nezadáte tento parametr:
-
.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. Pokud chcete zajistit, aby se kopírování úspěšně spustilo, ujistěte se, že na konci souborů gzip není žádné koncové uvolňování paměti.
FIELDQUOTE = 'field_quote'
FIELDQUOTE se vztahuje na sdílený svazek clusteru a určuje jeden znak, který se použije jako znak uvozovky (oddělovač řetězců) v souboru CSV. Pokud tuto hodnotu nezadáte, znak uvozovky (") se použije jako znak uvozovky definovaný ve standardu RFC 4180. Hexadecimální notace je podporována také pro FIELDQUOTE. Rozšířené ASCII a vícebajtové znaky nejsou u UTF-8 pro FIELDQUOTE.
Note
Znaky FIELDQUOTE jsou uvozené ve sloupcích řetězců, kde je přítomnost dvojitého POLEQUOTE (oddělovač).
FIELDTERMINATOR = 'field_terminator'
FIELDTERMINATOR platí pouze pro sdílený svazek clusteru. Určuje ukončovací znak pole, který se používá v souboru CSV. Ukončovací znak pole můžete zadat pomocí šestnáctkového zápisu. Ukončovací znak pole může být multicharacter. Výchozí ukončovací znak pole je (,). Rozšířené ASCII a vícebajtové znaky nejsou u UTF-8 pro FIELDTERMINATOR.
ROWTERMINATOR = 'row_terminator'
ROWTERMINATOR platí pouze pro sdílený svazek clusteru. Určuje ukončovací znak řádku, který se používá v souboru CSV. Ukončovací znak řádku můžete zadat pomocí šestnáctkového zápisu. Ukončovací znak řádku může být multicharacter. 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í vícefakterových ukončovačů řádků v šestnáctkové soustavě nezadávejte 0x mezi jednotlivými znaky.
Rozšířené ASCII a vícebajtové znaky nejsou u UTF-8 pro ROWTERMINATOR.
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 pro příkaz COPY. Hodnoty začínají od 1, což je výchozí hodnota. Pokud nastavíte hodnotu na 2, první řádek v každém souboru (řádek záhlaví) se při načtení dat přeskočí. Řádky se přeskočí na základě existence ukončovačů řádků.
DATEFORMAT = { 'mdy' | 'dmy' | 'ymd' | 'ydm' | 'myd' | 'dym' }
DATEFORMATPlatí pouze pro CSV a specifikuje formát datového mapování na SQL Server formáty. 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 příkaz COPY má přednost před DATEFORMAT konfigurovanou na úrovni relace.
KÓDOVÁNÍ = 'UTF8' | 'UTF16'
ENCODING platí pouze 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 = 'ZAPNUTO' | 'VYPNUTÉ'
IDENTITY_INSERT Určuje, jestli se má pro sloupec identity použít hodnota identity nebo hodnoty v importovaném datovém souboru. Pokud IDENTITY_INSERT je OFF hodnota (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
IDENTITY_INSERTje vypnutá a tabulka obsahuje sloupec identity- Je nutné zadat seznam sloupců, který nemapuje vstupní pole na sloupec identity.
- Pokud
IDENTITY_INSERTje zapnuté, a tabulka obsahuje sloupec identity.- Pokud předáte seznam sloupců, musí se namapovat vstupní pole na sloupec identity.
- Výchozí hodnota není podporována pro sloupec IDENTITY v seznamu sloupců.
- Najednou můžete nastavit
IDENTITY_INSERTjenom jednu tabulku.
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 je možné tabulku automaticky vytvořit pomocí automatického zjišťování schématu. AUTO_CREATE_TABLE je k dispozici pouze pro soubory Parquet v Azure Synapse Analytics.
- ZAPNUTO: Umožňuje automatické vytváření tabulek. Proces
COPY INTOautomaticky vytvoří novou tabulku zjištěním struktury souboru, který se má načíst. Můžete ho také použít s existujícími tabulkami, abyste mohli využívat automatické zjišťování schémat souborů Parquet. - VYPNUTO: Automatické vytváření tabulek není povolené. Default.
Note
Automatické vytváření tabulek funguje společně se zjišťováním automatického 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 INSERT a ADMINISTRUJE OPRÁVNĚNÍ K HROMADNÝM OPERACÍM. V Azure Synapse Analytics INSERTjsou vyžadována oprávnění , a ADADMINISTROVAT DATABASE HROMADNÉ OPERACE.
Navíc, pokud uživatel spouštějící příkaz COPY zároveň hodlá vygenerovat novou tabulku a načíst do ní data, vyžaduje CREATE TABLE oprávnění 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 řádku a parametry příkazů. Příkaz COPY může nesprávně interpretovat zdrojové soubory nebo parametry (například ROWTERMINATOR ) FIELDTERMINATORpoužívající neplatné znaky 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 .
Nápovědu MAXDOP k dotazu nepodporuje COPY INTO.
Pokud chcete zajistit spolehlivé provádění, během operace neměňte zdrojové soubory a složky COPY INTO .
- 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.
Pokud zdrojová data mají větší přesnost než definice cílového sloupce, hodnota se zkrátí, nezaokrouhlí, pro číselné typy, datum a čas.
Examples
A. Načtení z veřejného účtu úložiště
Následující příklad ukazuje nejjednodušší formu COPY příkazu, která načte data z veřejného účtu úložiště. V tomto příkladu COPY se výchozí hodnoty příkazu 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= Zasedání DATEFORMATMAXERRORS= 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'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 například 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>'),
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 se výkon příkazu COPY porovnává s PolyBase?
Výkon příkazu COPY může být lepší v závislosti na vaší úloze.
Sklad nemůže automaticky rozdělit komprimované soubory. Pro zajištění co 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.
Sklad může automaticky rozdělit velké nekomprimované soubory CSV pro paralelní načítání, takže obvykle nemusíte 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?
Následující tabulka popisuje počet souborů, které byste měli použít. Když dosáhnete doporučeného počtu souborů, dosáhnete lepšího výkonu s většími soubory. Počet souborů je určen počtem výpočetních uzlů vynásobeným číslem 60. Například v 6000 DWU máte 12 výpočetních uzlů, takže máte 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 | Počet souborů |
|---|---|
| 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 nemusíte rozdělovat, protože příkaz COPY automaticky rozdělí soubory. Pro zajištění nejlepšího výkonu by soubory Parquet a ORC v účtu úložiště Azure měly být 256 MB nebo větší.
Existují nějaká omezení počtu nebo velikosti souborů?
Počet nebo velikost souborů nejsou nijak omezeny. Pro zajištění nejlepšího výkonu však používejte soubory, které jsou 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, který jste vytvořili před 7. prosincem 2020, může při ověřování pomocí spravované identity narazit na podobnou chybovou zprávu: com.microsoft.sqlserver.jdbc.SQLServerException: Managed Service Identity isn't enabled on this server. Please enable Managed Service Identity and try again.
Pokud chcete tento problém obejít, znovu zaregistrujte spravovanou identitu pracovního prostoru:
- Nainstalujte Azure PowerShell. Viz Instalace PowerShellu.
- 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 službě Warehouse v Microsoft Fabric pro 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 v Microsoft Fabric a je to strategie pro Ingestování dat do vašeho skladu v Microsoft Fabric.
V Fabric Data Warehouse aktuálně příkaz COPY podporuje formáty souborů CSV, JSONL a PARQUET. U zdrojů dat se podporují Azure Data Lake Storage Gen2 účty a zdroje OneLake.
Další informace o použití COPY INTO ve skladu v Microsoft Fabric najdete v tématu Ingestování dat do vašeho skladu v Microsoft Fabric pomocí příkazu COPY.
Ve výchozím nastavení se COPY INTO ověřuje jako spuštěný Microsoft Entra ID uživatel.
Použití COPY pro následující schopnosti:
- Pomocí nižších privilegovaných uživatelů můžete načíst data, aniž byste u skladu potřebovali striktní oprávnění CONTROL.
- 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.
- Správně parsujte a načtěte soubory JSONL, kde každý řádek je platný objekt JSON a pole se mapují pomocí výrazů cesty JSON.
- Pomocí sdílených přístupových podpisů (SAS) určete jemně model oprávnění bez vystavení klíčů účtu úložiště.
- 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 v Microsoft Fabric pomocí příkazu COPY.
Syntax
COPY INTO [ warehouse_name. ] [ schema_name. ] table_name
[ (Column_list) ]
FROM '<external_location>' [ , ...n ]
WITH
(
[ FILE_TYPE = { 'CSV' | 'JSONL' | 'PARQUET' } ]
[ , CREDENTIAL = (AZURE CREDENTIAL) ]
[ , ERRORFILE = ' [ http(s)://storageaccount/container ] /errorfile_directory [ / ] ] '
[ , ERRORFILE_CREDENTIAL = (AZURE CREDENTIAL) ]
[ , MAXERRORS = max_errors ]
[ , COMPRESSION = { 'Gzip' | 'Snappy' } ]
[ , FIELDQUOTE = 'string_delimiter' ]
[ , FIELDTERMINATOR = 'field_terminator' ]
[ , ROWTERMINATOR = 'row_terminator' ]
[ , FIRSTROW = first_row ]
[ , DATEFORMAT = 'date_format' ]
[ , ENCODING = { 'UTF8' | 'UTF16' } ]
[ , PARSER_VERSION = { '1.0' | '2.0' } ]
[ , MATCH_COLUMN_COUNT = { 'ON' | 'OFF' } ]
)
Arguments
warehouse_name
Volitelné, pokud aktuální sklad pro uživatele provádějící operaci je skladem zadané tabulky. Pokud nezadáte sklad a zadané schéma a tabulka v aktuálním skladu neexistují, COPY selže a vrátí 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 nezadáte schéma a výchozí schéma uživatele provádějícího COPY operaci se liší od schématu zadané tabulky, COPY zruší se a vrátí se chybová zpráva.
název_tabulky
Název tabulky, do COPY které se data zasouvají. Cílová tabulka už musí existovat ve skladu.
(column_list)
Volitelný seznam sloupců sloužících k mapování zdrojových datových polí na cílové sloupce tabulky během načítání dat.
column_list musí být uzavřeny v závorkách a oddělené čárkami. Syntaxe je:
[(Column_name [výchozí Default_value] [Field_number | JSON_path] [,... 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 – platí jenom pro soubory CSV. Určuje pořadové umístění pole ve vstupních datech. Indexování pole začíná na 1.
-
JSON_path – platí jenom pro soubory JSONL. Určuje výraz cesty JSON, který identifikuje pole, které se má extrahovat z každého objektu JSON (například
$.CustomerName).
Pokud nezadáte column_list, 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.
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.
Pokud nezadáte seznam sloupců, COPY mapuje sloupce na základě zdrojového a cílového pořadí: Vstupní pole 1 přejde na cílový sloupec 1, pole 2 přejde na sloupec 2 atd.
Externí umístění
Určuje, kde jsou soubory obsahující data připraveny. Azure Data Lake Storage (ADLS) Gen2, Azure Blob Storage a OneLake se v současné době podporují:
-
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:
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.
blob Koncový bod použijte v případě, že dfs se pro metodu ověřování nevyžaduje.
Úč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 zadáte složku,
COPYnačte všechny soubory ze složky a všech jejích podsložek.COPYignoruje skryté složky a nevrací soubory, které začínají podtržením (_) nebo tečkou (.), pokud nejsou explicitně zadané v cestě. 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ůžete řídicí znak použít 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é se rozšiřují 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ů.
Můžete zadat více umístění souborů 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' | JSONL | "PARQUET" }
FILE_TYPE určuje formát externích dat.
- CSV: Určuje soubor hodnot oddělených čárkami, který je kompatibilní se standardem RFC 4180 .
- JSONL: Určuje soubor JSON s oddělovači newline (řádky JSON), kde každý řádek je platným objektem JSON.
- PARQUET: Určuje formát Parquet.
CREDENTIAL (IDENTITY = '', SECRET = '')
CREDENTIAL Určuje mechanismus ověřování pro přístup k externímu účtu úložiště.
V datovém skladu infrastruktury:
-
COPY INTOnepodporuje se v případě, že je zakázaný 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í Microsoft Entra ID 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 hodnotouShared Access Signature. -
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 hodnotouStorage Account Key. -
SECRET: Klíč účtu úložiště.
-
ERRORFILE = Umístění adresáře
ERRORFILE platí pro CSV a JSONL. Určuje adresář, do kterého se mají zapsat odmítnuté řádky a odpovídající chybový soubor. Úplnou cestu můžete zadat z účtu úložiště nebo cesty vzhledem ke kontejneru. Pokud zadaná cesta neexistuje, systém ji vytvoří 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
Když předáte relativní cestu ERRORFILE, aby byla relativní vzhledem k cestě kontejneru, kterou zadáte v external_location.
V tomto adresáři vytvoří sklad složku na základě času odeslání zatížení ve formátu YearMonthDay -HourMinuteSecond (například 20180330-173205). V této složce vytvoří sklad složku s ID příkazu a v této složce se zapíšou dva typy souborů: chyba. Soubor JSON obsahující důvody zamítnutí a soubor row.csv obsahující odmítnuté řádky.
Pokud ERRORFILE je definovaná úplná cesta k účtu úložiště, ERRORFILE_CREDENTIAL použije se k připojení k ho. V opačném případě se použije hodnota uvedená pro CREDENTIAL . Pokud se používají stejné přihlašovací údaje, které se používají ERRORFILEpro zdrojová data, omezení, která platí ERRORFILE_CREDENTIAL také pro.
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í ERRORFILE možnosti v tomto scénáři je také nutné zadat MAXERROR parametr. Pokud ERRORFILE je definovaná úplná cesta k účtu úložiště, ERRORFILE_CREDENTIAL použije se k připojení k ho. V opačném případě se použije hodnota uvedená pro CREDENTIAL .
ERRORFILE_CREDENTIAL = (IDENTITY = '', SECRET = '')
ERRORFILE_CREDENTIAL platí pro soubory CSV a JSONL. 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 hodnotouShared Access Signature -
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í: ČÍST, SEZNAMOVAT, ZAPISOVAT, VYTVÁŘET, DELETE
Note
Pokud pro soubor chyby použijete stejný účet úložiště a zadáte ERRORFILE cestu vzhledem ke kořenovému adresáři kontejneru, nemusíte zadávat ERROR_CREDENTIAL.
MAXERRORS = max_errors
MAXERRORS platí pro CSV a JSONL. Určuje maximální počet odmítnutých řádků povolených v načtení před selháním COPY operace. Každý řádek, který operace nemůže importovat, COPY je ignorován a počítán jako jedna chyba. Pokud nezadáte maximální počet chyb, výchozí hodnota je 0.
V Fabric Data Warehouse nemůžete použít MAXERRORS, pokud je FILE_TYPEPARQUET.
KOMPRESE = { 'Snappy' | 'GZIP' | 'ŽÁDNÁ'}
COMPRESSION je volitelná a určuje metodu komprese dat pro externí data.
- Sdílený svazek clusteru podporuje GZIP.
- Parquet podporuje GZIP a Snappy.
- Nepodporuje se pro JSONL.
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 s analyzátorem verze 1.0.
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 mimo gzip, vede k selhání COPY příkazu. Pokud chcete zajistit COPY úspěšné spuštění, ujistěte se, že na konci souborů gzip není žádné koncové uvolňování paměti.
FIELDQUOTE = 'field_quote'
FIELDQUOTE platí pouze pro sdílený svazek clusteru. Určuje jeden znak, který se použije jako znak uvozovky (oddělovač řetězců) v souboru CSV. Pokud nezadáte FIELDQUOTE, znak uvozovky (") se použije jako znak uvozovek definovaný ve standardu RFC 4180. Hexadecimální notace je podporována také pro FIELDQUOTE. Rozšířené ASCII a vícebajtové znaky nejsou u UTF-8 pro FIELDQUOTE.
Note
Znaky FIELDQUOTE jsou uvozené ve sloupcích řetězců, kde je přítomnost dvojitého POLEQUOTE (oddělovač).
FIELDTERMINATOR = 'field_terminator'
FIELDTERMINATOR platí pouze pro sdílený svazek clusteru. Určuje ukončovací znak pole, který se používá v souboru CSV. Ukončovací znak pole můžete také zadat pomocí šestnáctkového zápisu. Ukončovací znak pole může být multicharacter. Výchozí ukončovací znak pole je a (,). Rozšířené ASCII a vícebajtové znaky nejsou u UTF-8 pro FIELDTERMINATOR podporované.
ROWTERMINATOR = 'row_terminator'
ROWTERMINATOR platí pouze pro sdílený svazek clusteru. Určuje ukončovací znak řádku, který se používá v souboru CSV. Ukončovací znak řádku můžete zadat pomocí šestnáctkového zápisu. Ukončovací znak řádku může být multicharacter. 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í vícefakterových ukončovačů řádků v šestnáctkové soustavě nezadávejte 0x mezi jednotlivými znaky.
Rozšířené ASCII a vícebajtové znaky nejsou u UTF-8 pro ROWTERMINATOR.
PRVNÍ ŘADA = First_row_int
FIRSTROW platí pouze 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 nastavíte hodnotu na 2, první řádek v každém souboru (řádek záhlaví) se při načtení dat přeskočí. Řádky se přeskočí na základě existence ukončovačů řádků.
DATEFORMAT = { 'mdy' | 'dmy' | 'ymd' | 'ydm' | 'myd' | 'dym' }
DATEFORMAT platí pro CSV a JSONL. Určuje formát data mapování dat na SQL Server formáty kalendářních dat. 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 příkaz uvnitř COPY má přednost před DATEFORMAT konfigurací na úrovni relace.
KÓDOVÁNÍ = 'UTF8' | 'UTF16'
ENCODING platí pro CSV a JSONL. 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í pouze pro soubory CSV. Výchozí hodnota je 2,0.
PARSER_VERSION určuje analyzátor souborů používaný k příjmu dat, pokud 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 podporované.
- Soubory s kódováním UTF-16 se nepodporují.
- Multicharacter nebo multibyte
ROWTERMINATOR,FIELDTERMINATORneboFIELDQUOTEnení 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 podporovány FIELDTERMINATORvícebajtové a multicharacter ukončovací moduly .
Analyzátor verze 1.0 je k dispozici pouze pro zpětnou kompatibilitu. Používejte ho jenom v případech, kdy narazíte na tato omezení.
Note
Když použijete COPY INTO komprimované soubory CSV nebo soubory s kódováním UTF-16, COPY INTO automaticky se přepne na PARSER_VERSION 1.0 bez nutnosti zásahu uživatele. Pro vícefaktorové ukončovací moduly v FIELDTERMINATOR nebo ROWTERMINATORpříkaz COPY INTO selže. Použijte PARSER_VERSION = '1.0' , pokud potřebujete oddělovače vícenásobných znaků.
MATCH_COLUMN_COUNT = { 'ZAPNUTO' | 'VYPNUTÉ' }
MATCH_COLUMN_COUNT platí pouze pro soubory CSV. Výchozí hodnota je OFF. Určuje, jestli má příkaz zkontrolovat, jestli COPY počet řádků sloupců ve zdrojových souborech odpovídá počtu sloupců cílové tabulky. Platí následující chování:
- Pokud
MATCH_COLUMN_COUNTje:OFF- Příkaz ignoruje překročení sloupců ze zdrojových řádků.
- Příkaz vloží
NULLhodnoty do sloupců s možnou hodnotou null pro řádky s menším počtem sloupců.
- Příkaz vloží
- Pokud se hodnota nezadá do sloupce bez hodnoty null,
COPYpříkaz selže.
- Příkaz ignoruje překročení sloupců ze zdrojových řádků.
- Pokud
MATCH_COLUMN_COUNTje: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 neshodě počtu sloupců,
COPYpříkaz selže.
Note
MATCH_COLUMN_COUNT pracuje nezávisle na MAXERRORS. Neshoda COPY INTO počtusloupcůch MAXERRORS
Použití příkazu COPY INTO s OneLake
Pomocí COPY INTO můžete načíst data přímo ze souborů uložených v Fabric OneLake pod existujícími položkami. Tato metoda eliminuje potřebu externích pracovních účtů, jako je ADLS Gen2 nebo Blob Storage, a umožňuje příjem dat nativní pro pracovní prostory pomocí oprávnění Fabric. Tato funkce podporuje:
- Čtení z libovolného umístění v pracovním prostoru a položce
- 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 příkaz spustit COPY INTO , musíte mít udělené členství v roli pracovního prostoru prostřednictvím správy přístupu v pracovním prostoru s alespoň rolí čtenáře. Přístup k skladu můžete také sdílet s uživatelem prostřednictvím Oprávnění Kitem 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á uživatel oprávnění jen ke čtení na úrovni roviny dat, udělte uživateli INSERT a ADMINISTER DATABASE BULK OPERATIONS oprávnění také pomocí příkazů T-SQL.
Například následující skript T-SQL uděluje tato oprávnění jednotlivým uživatelům pomocí Microsoft Entra ID.
GRANT ADMINISTER DATABASE BULK OPERATIONS to [mike@contoso.com];
GO
GRANT INSERT to [mike@contoso.com];
GO
Pokud použijete možnost soubor chyby, uživatel musí mít minimální oprávnění Blob Storage Přispěvatel v kontejneru účtu úložiště.
Pokud jako zdroj použijete OneLake, 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). Microsoft Entra ID a role pracovního prostoru Fabric řídí veškerý přístup.
Remarks
Příkaz COPY přijímá pouze platné znaky UTF-8 a UTF-16 pro data řádku a parametry příkazů. Pokud používáte zdrojové soubory nebo parametry (například ROWTERMINATOR nebo FIELDTERMINATOR), které obsahují neplatné znaky, COPY příkaz je může nesprávně interpretovat a způsobit neočekávané výsledky, například poškození dat nebo jiná selhání. Před vyvolání COPY příkazu se ujistěte, že zdrojové soubory a parametry jsou kompatibilní s UTF-8 nebo UTF-16.
Příkaz COPY INTO má omezení velikosti jednotlivých sloupců varchar(max) a varbinary(max) a také na celkové velikosti řádku, kterou můžete ingestovat.
- Parquet: maximum varchar(max)/varbinary(max) velikost sloupce 16 MB, maximální velikost řádku 1 GB.
- CSV a JSONL: maximum varchar(max)/varbinary(max) velikost sloupce 1 MB, maximální velikost řádku 16 MB.
Pokud chcete zajistit spolehlivé provádění, během operace neměňte zdrojové soubory a složky COPY INTO .
- 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 že se během procesu nemění.
Pokud zdrojová data mají větší přesnost než definice cílového sloupce, hodnota se zkrátí, nezaokrouhlí, pro číselné typy, datum a čas.
Omezení pro OneLake jako zdroj
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 povolené.
Skladové položky nejsou podporované jako zdrojová umístění. Soubory musí pocházet z jiných položek infrastruktury, které zpřístupňují soubory prostřednictvím úložiště OneLake.
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
Další informace o použití COPY INTO ve skladu v Microsoft Fabric najdete v tématu Ingestování dat do vašeho skladu v Microsoft Fabric pomocí příkazu COPY.
A. Načtení z veřejného účtu úložiště
Následující příklad ukazuje nejjednodušší formu COPY příkazu, která načte data z veřejného účtu úložiště. V tomto příkladu COPY se výchozí hodnoty příkazu shodují s formátem souboru CSV položky řádku.
COPY INTO dbo.[lineitem]
FROM 'https://unsecureaccount.blob.core.windows.net/customerdatasets/folder1/lineitem.csv'
Výchozí hodnoty příkazu COPY jsou:
MAXERRORS = 0COMPRESSION(výchozí hodnota je nekomprimovaná)FIELDQUOTE = '"'FIELDTERMINATOR = ','ROWTERMINATOR = '\n'Important
COPYTo bere\njako\r\nvnitřní. Další informace najdete vROWTERMINATORčá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 například 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>'),
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>'),
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í Entra ID 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í JSONL
Tento příklad používá zástupný znak k načtení všech souborů JSONL do složky pomocí Entra ID spuštěného uživatele.
COPY INTO test_jsonl
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/*.jsonl'
WITH (
FILE_TYPE = 'JSONL'
)
F. Mapování názvů sloupců na cesty polí v dokumentech JSONL
Následující příklad ukazuje soubor JSON Lines (JSONL), kde každý řádek představuje jeden objekt JSON:
{"CountryKey": 0, "CountryName": "ALGERIA", "RegionID": 0, "Population": 34800000}
{"CountryKey": 1, "CountryName": "ARGENTINA", "RegionID": 1, "Population": 46044703}
{"CountryKey": 2, "CountryName": "BRAZIL", "RegionID": 1, "Population": 203080756}
V COPY INTOaplikaci můžete namapovat sloupce tabulky na konkrétní pole JSON pomocí výrazů cesty JSON. Toto mapování umožňuje ingestovat pouze požadovaná pole ze zdrojových dat.
COPY INTO Countries (
CountryID '$.CountryKey',
CountryName '$.CountryName',
RegionID '$.RegionKey',
Population '$.Population'
)
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/countries.jsonl'
WITH (
FILE_TYPE = 'JSONL'
)
G. Načtení dat zadáním zástupných znaků 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 = '|'
)
H. Načtení dat z OneLake
COPY INTO t1
FROM 'https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/*.csv'
WITH (
FILE_TYPE = 'CSV',
FIRSTROW = 2
);