COPY INTO (Transact-SQL)
platí pro:azure Synapse Analytics
Tento článek vysvětluje, jak použít příkaz COPY ve službě Azure Synapse Analytics 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 Azure Synapse Analytics.
Poznámka
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)
- Pro umístění ERRORFILE (REJECTED_ROW_LOCATION) použijte jiný účet úložiště.
- 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
Poznámka
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' } ]
)
Argumenty
schema_name
Volitelné, pokud je výchozím schématem pro uživatele, který operaci provádí, schéma zadané tabulky. Pokud není zadáno schéma a výchozí schéma uživatele provádějícího operaci COPY se liší od schématu zadané tabulky, funkce 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 AUTO_CREATE_TABLE = 'ON'
nezadávejte column_list .
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ích umístěních
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\>
Poznámka
Koncový bod objektu blob je k dispozici i pro ADLS Gen2 a aktuálně poskytuje nejlepší výkon. Koncový bod objektu blob použijte, pokud pro metodu ověřování není vyžadován .dfs.
Úč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 části Customer1 (včetně podadresářů Customer1) se načtou v následujícím příkladu:
Account/Container/Customer1/*.csv
Poznámka
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).
Poznámka
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:
CSV | Parkety | ORC | |
---|---|---|---|
azure Blob Storage | SAS, MSI, INSTANČNÍ OBJEKT, KLÍČ/ AAD | SAS/KLÍČ | SAS/KLÍČ |
Azure Data Lake Gen2 | SAS, MSI, INSTANČNÍ OBJEKT, KLÍČ/ AAD | SAS (objekt blob 1 )/MSI (dfs 2 )/INSTANČNÍ OBJEKT/KLÍČ/AAD | SAS (objekt blob 1 )/MSI (dfs 2 )/INSTANČNÍ OBJEKT/KLÍČ/AAD |
1: Koncový bod objektu blob (.blob.core.windows.net) ve vaší cestě k externímu umístění je pro tuto metodu ověřování vyžadová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í.
Poznámka
- 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 _zajistí, že adresář bude uchycený pro jiné zpracování dat, pokud není explicitně pojmenovaný v parametru location.
Poznámka
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 / AAD
Azure Data Lake Gen2 – SAS, MSI, INSTANČNÍ OBJEKT/ AAD
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
Poznámka
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.
Poznámka
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_TYPE "PARQUET", výjimky způsobené chybami převodu datového typu (např. binární soubor Parquet na celé číslo SQL) stále způsobí selhání funkce COPY INTO bez ohledu na 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 – snappy
- .deflate – výchozího kódu (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é.
Poznámka
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.
FIRSTROW = 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. 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. 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.
AUTO_CREATE_TABLE = { 'ON' | 'OFF' }
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 COPY INTO vytvoří novou tabulku automaticky zjištěním struktury souboru, který se má načíst. 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é. Výchozí.
Poznámka
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é.
Nenačítejte do hodnot hash distribuovaných tabulek ze souborů Parquet pomocí funkce COPY INTO s AUTO_CREATE_TABLE = ON.
Pokud soubory Parquet mají být načteny do hash distribuovaných tabulek pomocí COPY INTO, načtěte je do pracovní tabulky kruhového dotazování následované INSERT ... SELECT z této tabulky na cílovou distribuovanou tabulku hash.
Dovolení
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];
Poznámky
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.
Příklady
A. Načtení z veřejného účtu úložiště
Následující příklad je nejjednodušší formou příkazu COPY, který načte data z veřejného účtu ú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'
Důležitý
FUNKCE COPY zpracovává \n
interně jako s \r\n
. Další informace naleznete v části ROWTERMINATOR.
FIRSTROW = 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'
)
FAQ
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.
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 při ověřování pomocí spravované identity narazit na podobnou chybovou zprávu: 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
Další informace o použití příkazu COPY INTO ve skladu v Microsoft Fabric najdete v tématu Ingestování dat do vašeho skladu pomocí příkazu COPY.
Ve výchozím nastavení se COPY INTO
ověří jako spuštěný uživatel ID Entra.
Poznámka
Informace o službě Azure Synapse Analytics najdete v tématu COPY INTO pro azure Synapse Analytics.
Funkce COPY slouží k následujícím funkcím:
- 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).
- Pro umístění ERRORFILE (REJECTED_ROW_LOCATION) použijte jiný účet úložiště.
- 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ů.
- Zadání vlastního ukončovače řádku, ukončovače polí a uvozovek polí pro soubory CSV
- 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' } ]
)
Argumenty
warehouse_name
Volitelné, pokud aktuální sklad pro uživatele provádějící operaci je skladem zadané tabulky. Pokud není zadán skladu a zadané schéma a tabulka v aktuálním skladu neexistuje, funkce 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 není zadáno schéma a výchozí schéma uživatele provádějícího operaci COPY se liší od schématu zadané tabulky, funkce COPY se zruší a vrátí se chybová zpráva.
table_name
Název tabulky, do které chcete kopírovat data. 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á 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ý column_list, 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.
Poznámka
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 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ím umístěním
Poznámka
cesty Fabric OneLake se v současné době nepodporují, podporují se jenom účty úložiště BLOB a ADLS Gen2.
Určuje, kde jsou soubory obsahující data připraveny. 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\>
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.
Poznámka
Koncový bod objektu blob je k dispozici i pro ADLS Gen2 a aktuálně poskytuje nejlepší výkon. Koncový bod objektu blob použijte, pokud pro metodu ověřování není vyžadován .dfs.
Úč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é 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 (\).
Poznámka
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 = '')
PŘIHLAŠOVACÍ ÚDAJE určuje mechanismus ověřování pro přístup k externímu účtu úložiště. Ve službě Warehouse v Microsoft Fabric jsou jedinými podporovanými mechanismy ověřování sdílený přístupový podpis (SAS) a klíč účtu úložiště (SAK). Ověřování EntraID uživatele je výchozí, není nutné zadat žádné přihlašovací údaje.
Poznámka
Při použití veřejného účtu úložiště není nutné zadat CREDENTIAL. Ve výchozím nastavení se používá ID Entra spuštěného uživatele.
Ověřování pomocí sdíleného přístupového podpisu (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í klíče účtu úložiště
- IDENTITY: Konstanta s hodnotou "Klíč účtu úložiště"
- 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 _zajistí, že adresář bude uchycený pro jiné zpracování dat, pokud není explicitně pojmenovaný v parametru location.
Poznámka
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 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.
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
Poznámka
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ý operace COPY nemůže importovat, se ignoruje a počítá se jako jedna chyba. Pokud není zadaný max_errors, je výchozí hodnota 0.
V Microsoft Fabric MAXERRORS nelze použít, pokud FILE_TYPE je 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 dedetktuje typ komprese na základě přípony souboru, pokud tento parametr není zadaný:
- .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 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í 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é.
Poznámka
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
, \n
a \r
.
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é ZNAKY ASCII a více bajtů nejsou u UTF-8 pro ROWTERMINATOR podporovány.
FIRSTROW = First_row_int
FIRSTROW platí jenom pro sdílený svazek clusteru. 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 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.
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í.
- Multicharacter nebo multibajt ROWTERMINATOR, FIELDTERMINATOR nebo FIELDQUOTE se nepodporuje. Jako výchozí ROWTERMINATOR se ale přijímá\r\n.
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í.
Poznámka
Při použití funkce COPY INTO s komprimovanými soubory CSV nebo soubory s kódováním UTF-16 se funkce COPY INTO automaticky přepne na PARSER_VERSION 1.0 bez nutnosti zásahu uživatele. U víceznakových ukončovačů v FIELDTERMINATOR nebo ROWTERMINATOR selže příkaz COPY INTO. Pokud jsou potřeba oddělovače více znaků, použijte PARSER_VERSION = 1,0.
Dovolení
Příkaz COPY vyžaduje minimálně roli PŘISPĚVATEL na úrovni pracovního prostoru nebo případně roli VIEWER na úrovni pracovního prostoru a SPRAVOVAT DATABÁZOVÉ HROMADNÉ OPERACE databáze a OPRÁVNĚNÍ VLOŽIT u objektů tabulky.
Poznámky
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.
Příklady
Další informace o použití příkazu COPY INTO ve skladu v Microsoft Fabric najdete v tématu Ingestování 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 příkazu COPY, který načte data z veřejného účtu ú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'
Výchozí hodnoty příkazu COPY jsou:
MAXERRORS = 0
Výchozí komprese je nekomprimovaná.
FIELDQUOTE = '''
FIELDTERMINATOR = ','
ROWTERMINATOR = '\n'
Důležitý
FUNKCE COPY zpracovává \n
interně jako s \r\n
. Další informace naleznete v části ROWTERMINATOR.
FIRSTROW = 1
ENCODING = '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í EntraID 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 = '|'
)
FAQ
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 INTRO
použije ID Entra spuštěného uživatele.