Freigeben über


Exportieren von Daten in eine externe Tabelle

Sie können Daten exportieren, indem Sie eine externe Tabelle definieren und Daten in diese exportieren. Die Tabelleneigenschaften werden beim Erstellen der externen Tabelle angegeben. Der Exportbefehl verweist auf die externe Tabelle anhand des Namens.

Berechtigungen

Sie müssen mindestens über Die Berechtigungen des Tabellenadministrators verfügen, um diesen Befehl auszuführen.

Syntax

.export [async] to table externalTableName
[ propertyName = propertyValue [, (with ...]] <| )Frage

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Type Erforderlich Beschreibung
externalTableName string ✔️ Der Name der externen Tabelle, in die exportiert werden soll.
propertyName, propertyValue string Eine durch Trennzeichen getrennte Liste optionaler Eigenschaften.
query string ✔️ Die Exportabfrage.

Unterstützte Eigenschaften

Die folgenden Eigenschaften werden als Teil des Befehls "In externe Tabelle exportieren" unterstützt.

Eigenschaft Typ Beschreibung Standard
sizeLimit long Die Größenbeschränkung in Bytes eines einzelnen Speicherartefaktes, das geschrieben wird (vor der Komprimierung). Eine vollständige Zeilengruppe parquetRowGroupSize wird geschrieben, bevor überprüft wird, ob diese Zeilengruppe den Größengrenzwert erreicht hat und ein neues Artefakt beginnen soll. Gültiger Bereich: 100 MB (Standard) auf 1 GB.
distributed bool Deaktivieren/Aktivieren des verteilten Exports. Die Einstellung auf "false" entspricht dem single Verteilungshinweis. Der Standardwert ist true.
distribution string Verteilungshinweis (single, per_node, per_shard). Weitere Details in den Verteilungseinstellungen anzeigen Der Standardwert ist per_node.
distributionKind string Wechselt optional zu einer gleichmäßigen Verteilung, wenn die externe Tabelle durch Zeichenfolgenpartition partitioniert wird. Gültige Werte sind uniform und default. Weitere Details in den Verteilungseinstellungen anzeigen
concurrency Anzahl Gibt an, wie viele Partitionen parallel ausgeführt werden sollen. Weitere Details in den Verteilungseinstellungen anzeigen Der Standardwert ist 16.
spread Anzahl Gibt an, wie die Partitionen auf Clusterknoten verteilt werden. Weitere Details in den Verteilungseinstellungen anzeigen Der Standardwert ist Min(64, number-of-nodes).
parquetRowGroupSize int Nur relevant, wenn das Datenformat "Parkett" ist. Steuert die Zeilengruppengröße in den exportierten Dateien. Dieser Wert hat Vorrang sizeLimitvor , was bedeutet, dass eine vollständige Zeilengruppe exportiert wird, bevor überprüft wird, ob diese Zeilengruppe die Größenbeschränkung erreicht hat und ein neues Artefakt beginnen soll. Die Standardgröße der Zeilengruppe beträgt 100.000 Datensätze.

Verteilungseinstellungen

Die Verteilung eines Exportvorgangs in externe Tabellen gibt die Anzahl der Knoten und Threads an, die gleichzeitig in den Speicher geschrieben werden. Die Standardverteilung hängt von der Partitionierung der externen Tabelle ab:

Partitionierung externer Tabellen Standardverteilung
Externe Tabelle ist nicht partitioniert oder nur nach datetime Spalte partitioniert. Export wird verteilt per_node – alle Knoten im Cluster werden gleichzeitig exportiert. Jeder Knoten schreibt die daten, die diesem Knoten zugewiesen sind. Die Anzahl der von einem Knoten exportierten Dateien ist größer als eins, nur wenn die Größe der Daten aus diesem Knoten überschritten wird sizeLimit.
Die externe Tabelle wird durch eine Zeichenfolgenspalte partitioniert. Die zu exportierenden Daten werden zwischen den Knoten verschoben, sodass jeder Knoten eine Teilmenge der Partitionswerte schreibt. Eine einzelne Partition wird immer von einem einzelnen Knoten geschrieben. Die Anzahl der pro Partition geschriebenen Dateien sollte nur größer sein, wenn die Daten überschritten werden sizeLimit. Wenn die externe Tabelle mehrere Zeichenfolgenpartitionen enthält, werden Die Daten basierend auf der ersten Partition zwischen dem Knoten partitioniert. Daher empfiehlt es sich, die Partition mit der einheitlichen Verteilung als erste zu definieren.

Ändern der Standardverteilungseinstellungen

Das Ändern der Standardverteilungseinstellungen kann in den folgenden Fällen hilfreich sein:

Anwendungsfall Beschreibung Empfehlung
Verringern der Anzahl exportierter Dateien Der Export erstellt zu viele kleine Dateien, und Sie möchten eine kleinere Anzahl größerer Dateien erstellen. Set distribution=single or distributed=false (both are equivalent) in the command properties. Nur ein einzelner Thread führt den Export aus. Der Nachteil ist, dass der Exportvorgang langsamer sein kann, da die Parallelität viel reduziert wird.
Verringern der Exportdauer Erhöhen der Parallelität des Exportvorgangs, um die Dauer zu verringern. Legen Sie distribution=per_shard die Befehlseigenschaften fest. Dies bedeutet, dass die Parallelität der Schreibvorgänge pro Datenshard und nicht pro Knoten erfolgt. Dies ist nur relevant, wenn sie in eine externe Tabelle exportiert wird, die nicht durch Zeichenfolgenpartition partitioniert ist. Dies kann zu viel Last auf den Speicher führen, was möglicherweise zu Drosselung führt. Siehe Speicherfehler.
Verringern der Exportdauer für externe Tabellen, die durch eine Zeichenfolgenpartition partitioniert werden Wenn die Partitionen nicht einheitlich zwischen den Knoten verteilt werden, kann die Ausführung des Exports länger dauern. Wenn beispielsweise eine einzelne Partition vorhanden ist, die viel größer als andere ist, erfolgt der Großteil der Exportarbeit durch den einzelnen Knoten, der dieser Partition zugewiesen ist, während andere Knoten meist im Leerlauf sind. Siehe Verteilungseinstellungen. Es gibt mehrere Einstellungen, die Sie ändern können:
* Wenn mehrere Zeichenfolgenpartitionen vorhanden sind, definieren Sie zuerst die Partition mit der besten Verteilung.

* Legen Sie distributionKind=uniform die Befehlseigenschaften fest. Diese Einstellung deaktiviert die Standardverteilungseinstellungen für Zeichenfolgenpartitionierte externe Tabellen. Der Export wird mit per-node Verteilung ausgeführt, und jeder Knoten exportiert die dem Knoten zugewiesenen Daten. Eine einzelne Partition kann von mehreren Knoten geschrieben werden, und die Anzahl der Dateien steigt entsprechend. Um die Parallelität noch weiter zu erhöhen, legen Sie distributionKind=uniform sie zusammen mit der distribution=per_shard höchsten Parallelität (zu Den Kosten potenziell vieler weiterer geschriebener Dateien) fest.

* Wenn die Ursache für den langsamen Export in den Daten nicht ausreißt, verringern Sie die Dauer, indem Sie die Parallelität erhöhen, ohne Partitionierungseinstellungen zu ändern. Verwenden Sie die hint.spread Eigenschaften, hint.concurrency die die Parallelität der Partitionierung bestimmen. Siehe Partitionsoperator. Standardmäßig ist die Anzahl der Knoten, die gleichzeitig exportiert werden (die spread) der Mindestwert zwischen 64 und der Anzahl der Clusterknoten. Die Einstellung spread auf eine höhere Zahl als die Anzahl von Knoten erhöht die Parallelität auf jedem Knoten (max. Wert für spread 64).

Authentifizierung und Autorisierung

Um in eine externe Tabelle zu exportieren, müssen Sie Schreibberechtigungen einrichten. Weitere Informationen finden Sie in den Schreibberechtigungen für die externe Azure Storage-Tabelle oder die externe SQL Server-Tabelle.

Output

Ausgabeparameter Typ Beschreibung
ExternalTableName string Der Name der externen Tabelle.
Pfad string Option „Output path“.
NumRecords string Die Anzahl der in den Pfad exportierten Datensätze.

Hinweise

  • Das Ausgabeschema der Exportabfrage muss mit dem Schema der externen Tabelle übereinstimmen, einschließlich aller Spalten, die von den Partitionen definiert sind. Wenn die Tabelle beispielsweise von DateTime partitioniert wird, muss das Abfrageausgabeschema eine Timestamp-Spalte aufweisen, die dem TimestampColumnName entspricht. Dieser Spaltenname wird in der Definition der externen Tabellenpartitionierung definiert.

  • Es ist nicht möglich, die eigenschaften der externen Tabelle mithilfe des Exportbefehls außer Kraft zu setzen. Sie können z. B. keine Daten im Parkettformat in eine externe Tabelle exportieren, deren Datenformat CSV ist.

  • Wenn die externe Tabelle partitioniert ist, werden exportierte Artefakte gemäß den Partitionsdefinitionen gemäß dem Beispiel für die partitionierte externe Tabelle in ihre jeweiligen Verzeichnisse geschrieben.

    • Wenn ein Partitionswert null/leer ist oder ein ungültiger Verzeichniswert gemäß den Definitionen des Zielspeichers ist, wird der Partitionswert durch einen Standardwert __DEFAULT_PARTITION__ersetzt.
  • Vorschläge zum Beheben von Speicherfehlern während exportbefehlen finden Sie unter Fehlern bei Exportbefehlen.

  • Externe Tabellenspalten sind geeigneten Datentypen im Zielformat entsprechend den Zuordnungsregeln für Datentypen zugeordnet.

  • Der native Parkettexport ist ein leistungsfähigerer, Ressourcenlichtexportmechanismus. Eine exportierte 'datetime'-Spalte wird derzeit von Synapse SQL 'COPY' nicht unterstützt.

Anzahl von Dateien

Die Anzahl der pro Partition geschriebenen Dateien hängt von den Verteilungseinstellungen des Exportvorgangs ab:

  • Wenn die externe Tabelle nur Datetime-Partitionen oder gar keine Partitionen enthält, sollte die Anzahl der geschriebenen Dateien (falls vorhanden) mit der Anzahl der Knoten im Cluster (oder mehr, falls sizeLimit vorhanden) vergleichbar sein. Wenn der Exportvorgang verteilt wird, werden alle Knoten im Cluster gleichzeitig exportiert. Um die Verteilung zu deaktivieren, sodass nur ein einzelner Knoten die Schreibvorgänge ausführt, auf "false" festgelegt distributed ist. Dieser Vorgang erstellt weniger Dateien, verringert jedoch die Exportleistung.

  • Wenn die externe Tabelle eine Partition durch eine Zeichenfolgenspalte enthält, sollte die Anzahl der exportierten Dateien eine einzelne Datei pro Partition (oder mehr, falls sizeLimit erreicht) sein. Alle Knoten nehmen weiterhin am Export teil (Vorgang wird verteilt), aber jeder Partition wird einem bestimmten Knoten zugewiesen. Die Einstellung distributed auf "false" bewirkt, dass nur ein einzelner Knoten den Export ausführen kann, aber das Verhalten bleibt gleich (eine einzelne Datei, die pro Partition geschrieben wurde).

Beispiele

Beispiel für eine nicht partitionierte externe Tabelle

ExternalBlob ist eine nicht partitionierte externe Tabelle.

.export to table ExternalBlob <| T
ExternalTableName Pfad NumRecords
ExternalBlob http://storage1.blob.core.windows.net/externaltable1cont1/1_58017c550b384c0db0fea61a8661333e.csv 10

Beispiel für partitionierte externe Tabelle

PartitionedExternalBlob ist eine externe Tabelle, die wie folgt definiert ist:

.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'
)
.export to table PartitionedExternalBlob <| T
ExternalTableName Pfad 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

Wenn der Befehl asynchron ausgeführt wird (mithilfe des async Schlüsselworts), ist die Ausgabe mit dem Befehl "Vorgangsdetails anzeigen" verfügbar.