Sdílet prostřednictvím


.export do tabulky

Platí pro: ✅Microsoft FabricAzure Data Explorer

Data můžete exportovat definováním externí tabulky a exportem dat do ní. Vlastnosti tabulky se zadají při vytváření externí tabulky. Příkaz pro export odkazuje na externí tabulku podle názvu.

Oprávnění

Ke spuštění tohoto příkazu musíte mít alespoň oprávnění správce tabulky.

Syntaxe

.export [async] totableexternalTableName
[with(propertyName=propertyValue [, ...]] )<|dotaz

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Type Požadováno Popis
externalTableName string ✔️ Název externí tabulky, do které chcete exportovat.
propertyName, propertyValue string Čárkami oddělený seznam volitelných vlastností.
query string ✔️ Dotaz exportu.

Podporované vlastnosti

Následující vlastnosti jsou podporovány jako součást příkazu exportu do externí tabulky.

Vlastnost Type Popis Výchozí
sizeLimit long Omezení velikosti v bajtech jednoho artefaktu úložiště zapsaného před kompresí. Před kontrolou, jestli tato skupina řádků dosáhne limitu velikosti, se zapíše celá skupina řádků parquetRowGroupSize a má spustit nový artefakt. Platný rozsah: 100 MB (výchozí) až 1 GB.
distributed bool Zakažte nebo povolte distribuovaný export. Nastavení na hodnotu false je ekvivalentem nápovědy k single distribuci. Výchozí hodnota je true.
distribution string Distribuční tip (single, per_node, per_shard). Další podrobnosti najdete v nastavení distribuce. Výchozí hodnota je per_node.
distributionKind string Volitelně se přepne na jednotnou distribuci, když je externí tabulka rozdělená podle oddílu řetězce. Platné hodnoty jsou uniform nebo default. Další podrobnosti najdete v nastavení distribuce.
concurrency Počet Napovídá systému, kolik oddílů se má paralelně spouštět. Další podrobnosti najdete v nastavení distribuce. Výchozí hodnota je 16.
spread Počet Tipuje systém, jak distribuovat oddíly mezi uzly. Další podrobnosti najdete v nastavení distribuce. Výchozí hodnota je Min(64, number-of-nodes).
parquetRowGroupSize int Relevantní pouze v případech, kdy je formát dat Parquet. Určuje velikost skupiny řádků v exportovaných souborech. Tato hodnota má přednost před sizeLimit, což znamená, že se před kontrolou, jestli tato skupina řádků dosáhne limitu velikosti, a měla by spustit nový artefakt. Výchozí velikost skupiny řádků je 100 000 záznamů.

Nastavení distribuce

Distribuce exportu do externí tabulky označuje počet uzlů a vláken, které se zapisují do úložiště současně. Výchozí distribuce závisí na dělení externí tabulky:

Dělení externí tabulky Výchozí distribuce
Externí tabulka není rozdělená na oddíly ani není rozdělená podle datetime sloupce. Export je distribuovaný per_node – všechny uzly se exportují souběžně. Každý uzel zapíše data přiřazená uzlu. Počet souborů exportovaných uzlem je větší než jeden, pouze pokud velikost dat z tohoto uzlu překročí sizeLimit.
Externí tabulka je rozdělená podle sloupce řetězců. Data, která se mají exportovat, se přesunou mezi uzly, aby každý uzel zapisuje podmnožinu hodnot oddílů. Jeden oddíl je vždy napsán jedním uzlem. Počet zapsaných souborů na oddíl by měl být větší než jeden, pouze pokud data překročí sizeLimit. Pokud externí tabulka obsahuje několik oddílů řetězců, data se rozdělí mezi uzel na základě prvního oddílu. Proto doporučujeme definovat oddíl s nejjednotnější distribucí jako první.

Změna výchozího nastavení distribuce

Změna výchozího nastavení distribuce může být užitečná v následujících případech:

Případ použití Popis Doporučení
Snížení počtu exportovaných souborů Export vytváří příliš mnoho malých souborů a chcete, aby se vytvořil menší počet větších souborů. Nastavení distribution=single nebo distributed=false (oba jsou ekvivalentní) ve vlastnostech příkazu. Export provádí pouze jedno vlákno. Nevýhodou je, že operace exportu může být pomalejší, protože souběžnost je mnohem nižší.
Zkrácení doby trvání exportu Zvýšení souběžnosti operace exportu, aby se zkrátila její doba trvání. Nastavte distribution=per_shard ve vlastnostech příkazu. To znamená, že souběžnost operací zápisu je na horizontální oddíl dat místo na uzel. To je relevantní jenom při exportu do externí tabulky, která není rozdělená podle oddílu řetězce. To může způsobit příliš velké zatížení úložiště, což může způsobit omezování. Podívejte se na selhání úložiště.
Zkrácení doby trvání exportu externích tabulek rozdělených podle oddílu řetězce Pokud oddíly nejsou rovnoměrně rozdělené mezi uzly, může spuštění exportu trvat delší dobu. Pokud je jeden oddíl mnohem větší než druhý, uzel přiřazený k houževnu většinu práce exportu, zatímco ostatní uzly zůstanou většinou nečinné. Další informace naleznete v tématu Nastavení distribuce. Můžete změnit několik nastavení:
* Pokud existuje více než jeden řetězcový oddíl, definujte ho s nejlepším rozdělením jako první.

* Nastavte distributionKind=uniform ve vlastnostech příkazu. Toto nastavení zakáže výchozí nastavení distribuce pro externí tabulky dělené řetězcem. Export běží s distribucí per-node a každý uzel exportuje data přiřazená uzlu. Jeden oddíl může zapsat několik uzlů a počet souborů se odpovídajícím způsobem zvyšuje. Pokud chcete zvýšit souběžnost ještě více, nastavte distributionKind=uniform spolu s distribution=per_shard nejvyšší souběžností (za cenu potenciálně mnoha dalších zapsaných souborů).

* Pokud příčinou pomalého exportu nejsou v datech odlehlé hodnoty, zkraťte dobu trvání zvýšením souběžnosti beze změny nastavení dělení. Použijte vlastnosti hint.spreadhint.concurrency a určete souběžnost dělení. Viz operátor oddílu. Ve výchozím nastavení je minimální hodnota mezi 64 a počtem uzlů, které se exportují souběžně (spread). Nastavení spread na vyšší počet než počet uzlů zvyšuje souběžnost na každém uzlu (maximální hodnota je spread 64).

Ověřování a autorizace

Abyste mohli exportovat do externí tabulky, musíte nastavit oprávnění k zápisu. Další informace najdete v tématu Oprávnění k zápisu pro externí tabulku Azure Storage nebo externí tabulku SQL Serveru.

Výstup

Výstupní parametr Type Popis
ExternalTableName string Název externí tabulky.
Cesta string Výstupní cesta
NumRecords string Počet záznamů exportovaných do cesty

Notes

  • Výstupní schéma exportu dotazu musí odpovídat schématu externí tabulky, včetně všech sloupců definovaných oddíly. Pokud je například tabulka rozdělena podle dateTime, musí výstupní schéma dotazu obsahovat sloupec časového razítka odpovídající timestampColumnName. Tento název sloupce je definován v definici dělení externí tabulky.

  • Vlastnosti externí tabulky není možné přepsat pomocí příkazu exportu. Nemůžete například exportovat data ve formátu Parquet do externí tabulky, jejíž datový formát je CSV.

  • Pokud je externí tabulka rozdělená na oddíly, exportované artefakty se zapisují do příslušných adresářů podle definic oddílů. Příklad příkladu rozdělené externí tabulky.

    • Pokud je hodnota oddílu null/prázdná nebo je neplatnou hodnotou adresáře, nahradí se podle definic cílového úložiště hodnota oddílu výchozí hodnotou __DEFAULT_PARTITION__.
  • Návrhy, jak překonat chyby úložiště během příkazů pro export, najdete v tématu selhání při exportních příkazech.

  • Sloupce externí tabulky se mapují na vhodné datové typy cílového formátu podle pravidel mapování datových typů.

  • Nativní export Parquet je výkonnější mechanismus exportu světla prostředků. Exportovaný sloupec datetime v současné době nepodporuje COPYSynapse SQL .

Počet souborů

Počet zapsaných souborů na oddíl závisí na nastavení distribuce operace exportu:

  • Pokud externí tabulka obsahuje pouze datetime oddíly nebo vůbec žádné oddíly, počet souborů zapsaných pro každý oddíl, který existuje, by měl být podobný počtu uzlů (nebo více, pokud sizeLimit je dosaženo). Při distribuci operace exportu se všechny uzly exportují souběžně. Pokud chcete zakázat distribuci, aby zápisy udělal jenom jeden uzel, nastavte distributed na hodnotu false. Tento proces vytváří méně souborů, ale snižuje výkon exportu.

  • Pokud externí tabulka obsahuje oddíl podle sloupce řetězce, měl by být počet exportovaných souborů jedním souborem na oddíl (nebo více, pokud sizeLimit je dosaženo). Všechny uzly se stále účastní exportu (operace je distribuovaná), ale každý oddíl je přiřazen ke konkrétnímu uzlu. Nastavení distributed na false, způsobí, že export provede jenom jeden uzel, ale chování zůstane stejné (jeden soubor zapsaný na oddíl).

Příklady

Příklad nedělené externí tabulky

Následující příklad exportuje data z tabulky T do tabulky ExternalBlob. ExternalBlob je nedělaná externí tabulka.

.export to table ExternalBlob <| T

výstupní

ExternalTableName Cesta NumRecords
ExternalBlob http://storage1.blob.core.windows.net/externaltable1cont1/1_58017c550b384c0db0fea61a8661333e.csv 10

Příklad rozdělené externí tabulky

Následující příklad nejprve vytvoří dělenou externí tabulku PartitionedExternalBlob se zadaným umístěním úložiště objektů blob. Data jsou uložená ve formátu CSV s formátem cesty, který data uspořádá podle jména zákazníka a data.

.create external table PartitionedExternalBlob (Timestamp:datetime, CustomerName:string) 
kind=blob
partition by (CustomerName:string=CustomerName, Date:datetime=startofday(Timestamp))   
pathformat = ("CustomerName=" CustomerName "/" datetime_pattern("yyyy/MM/dd", Date))   
dataformat=csv
( 
   h@'http://storageaccount.blob.core.windows.net/container1;secretKey'
)

Potom exportuje data z tabulky T do PartitionedExternalBlob externí tabulky.

.export to table PartitionedExternalBlob <| T

výstupní

ExternalTableName Cesta NumRecords
ExternalBlob http://storageaccount.blob.core.windows.net/container1/CustomerName=customer1/2019/01/01/fa36f35c-c064-414d-b8e2-e75cf157ec35_1_58017c550b384c0db0fea61a8661333e.csv 10
ExternalBlob http://storageaccount.blob.core.windows.net/container1/CustomerName=customer2/2019/01/01/fa36f35c-c064-414d-b8e2-e75cf157ec35_2_b785beec2c004d93b7cd531208424dc9.csv 10

Pokud je příkaz spuštěn asynchronně pomocí klíčového slova async, výstup je k dispozici pomocí zobrazit podrobnosti operace příkaz.