Share via


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 anhand des Namens auf die externe Tabelle.

Berechtigungen

Zum Ausführen dieses Befehls müssen Sie mindestens über Die Berechtigung Table Admin verfügen.

Syntax

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

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

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

Unterstützte Eigenschaften

Die folgenden Eigenschaften werden als Teil des Befehls "Export to external table" unterstützt.

Eigenschaft Typ BESCHREIBUNG Standard
sizeLimit long Die Größenbeschränkung in Byte eines einzelnen Speicherartefakts, das (vor der Komprimierung) geschrieben wird. Eine vollständige Zeilengruppe der Größe parquetRowGroupSize wird geschrieben, bevor überprüft wird, ob diese Zeilengruppe den Größengrenzwert erreicht hat und ein neues Artefakt starten sollte. Gültiger Bereich: 100 MB (Standard) bis 1 GB.
distributed bool Deaktivieren/aktivieren Sie den verteilten Export. Die Einstellung auf false entspricht dem single Verteilungshinweis. Der Standardwert ist true.
distribution string Verteilungshinweis (single, per_node, per_shard). Weitere Informationen finden Sie unter Verteilungseinstellungen. Der Standardwert ist per_node.
distributionKind string Wechselt optional zur Uniform Distribution, wenn die externe Tabelle nach Zeichenfolgenpartition partitioniert wird. Gültige Werte sind uniform und default. Weitere Informationen finden Sie unter Verteilungseinstellungen.
concurrency Number Gibt dem System an, wie viele Partitionen parallel ausgeführt werden sollen. Weitere Informationen finden Sie unter Verteilungseinstellungen. Der Standardwert ist 16.
spread Number Weist das System darauf hin, wie die Partitionen auf Clusterknoten verteilt werden. Weitere Informationen finden Sie unter Verteilungseinstellungen. Standardwert: Min(64, number-of-nodes).
parquetRowGroupSize int Nur relevant, wenn das Datenformat Parquet ist. Steuert die Zeilengruppengröße in den exportierten Dateien. Dieser Wert hat Vorrang vor sizeLimit, d. h. eine vollständige Zeilengruppe wird exportiert, bevor überprüft wird, ob diese Zeilengruppe die Größenbeschränkung erreicht hat und ein neues Artefakt starten sollte. Die Standardgröße der Zeilengruppe beträgt 100.000 Datensätze.

Verteilungseinstellungen

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

Partitionierung externer Tabellen Standardverteilung
Die externe Tabelle ist nicht partitioniert oder nur nach datetime Spalte partitioniert. Der Export ist 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 nur größer als 1, wenn die Größe der Daten von diesem Knoten überschreitet sizeLimit.
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 übersteigen sizeLimit. Wenn die externe Tabelle mehrere Zeichenfolgenpartitionen enthält, werden die Daten basierend auf der ersten Partition zwischen dem Knoten partitioniert. Daher wird empfohlen, die Partition mit der meisten einheitlichen Verteilung als erste zu definieren.

Ändern der Standardverteilungseinstellungen

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

Anwendungsfall BESCHREIBUNG Empfehlung
Reduzieren der Anzahl exportierter Dateien Beim Export werden zu viele kleine Dateien erstellt, und Sie möchten, dass eine kleinere Anzahl größerer Dateien erstellt wird. Legen Sie distribution=single oder distributed=false (beide sind gleichwertig) in den Befehlseigenschaften fest. Nur ein einzelner Thread führt den Export aus. Der Nachteil ist, dass der Exportvorgang langsamer sein kann, da die Parallelität viel geringer ist.
Verringern der Exportdauer Erhöhen der Parallelität des Exportvorgangs, um die Dauer zu verringern. Legen Sie in den Befehlseigenschaften fest distribution=per_shard . Dies bedeutet, dass die Parallelität der Schreibvorgänge pro Datenshard und nicht pro Knoten erfolgt. Dies ist nur beim Exportieren in eine externe Tabelle relevant, die nicht nach einer Zeichenfolgenpartition partitioniert ist. Dies kann zu einer zu erheblichen Auslastung des Speichers führen, was zu einer Drosselung führen kann. Weitere Informationen finden Sie unter Speicherfehler.
Verringern der Exportdauer für externe Tabellen, die durch eine Zeichenfolgenpartition partitioniert werden Wenn die Partitionen nicht einheitlich auf die Knoten verteilt sind, kann die Ausführung des Exports länger dauern. Wenn es beispielsweise eine einzelne Partition gibt, die viel größer als andere ist, erfolgt der Großteil der Exportarbeit über den einzelnen Knoten, der dieser Partition zugewiesen ist, während sich andere Knoten größtenteils im Leerlauf befinden. Weitere Informationen finden Sie unter Verteilungseinstellungen. Es gibt mehrere Einstellungen, die Sie ändern können:
* Wenn mehr als eine Zeichenfolgenpartition vorhanden ist, definieren Sie zuerst die Partition mit der besten Verteilung.

* Legen Sie distributionKind=uniform in den 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 nimmt entsprechend zu. Um die Parallelität noch weiter zu erhöhen, legen Sie distributionKind=uniform zusammen mit für distribution=per_shard die höchste Parallelität fest (auf Kosten von potenziell viel mehr geschriebenen Dateien).

* Wenn die Ursache für den langsamen Export keine Ausreißer in den Daten sind, verringern Sie die Dauer, indem Sie die Parallelität erhöhen, ohne die Partitionierungseinstellungen zu ändern. Verwenden Sie die hint.spread Eigenschaften und hint.concurrency , die die Parallelität der Partitionierung bestimmen. Siehe Partitionsoperator. Standardmäßig ist die Anzahl der Gleichzeitig exportierenden Knoten (die spread) der Mindestwert zwischen 64 und der Anzahl der Clusterknoten. Wenn Sie auf eine höhere Anzahl als die Anzahl von Knoten festlegen spread , erhöht sich die Parallelität auf jedem Knoten (maximaler Wert für spread ist 64).

Authentifizierung und Autorisierung

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

Ausgabe

Ausgabeparameter type BESCHREIBUNG
ExternalTableName string Der Name der externen Tabelle.
Pfad string Ausgabepfad.
NumRecords string 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 werden. Wenn die Tabelle beispielsweise nach DateTime partitioniert ist, muss das Abfrageausgabeschema über eine Timestamp-Spalte verfügen, die mit TimestampColumnName übereinstimmt. Dieser Spaltenname ist in der Partitionierungsdefinition für externe Tabellen definiert.

  • Es ist nicht möglich, die Eigenschaften der externen Tabelle mit dem Befehl export zu überschreiben. Sie können beispielsweise keine Daten im Parquet-Format in eine externe Tabelle exportieren, deren Datenformat CSV ist.

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

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

  • Externe Tabellenspalten werden entsprechend den Zuordnungsregeln für Datentypen geeigneten Zielformatdatentypen zugeordnet.

  • Der native Parquet-Export ist ein effizienterer Ressourcen-Light-Exportmechanismus. 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 (für jede Partition, sofern vorhanden) der Anzahl der Knoten im Cluster entsprechen (oder mehr, wenn sizeLimit erreicht wird). Wenn der Exportvorgang verteilt ist, exportieren alle Knoten im Cluster gleichzeitig. Um die Verteilung zu deaktivieren, sodass nur ein einzelner Knoten die Schreibvorgänge ausführt, legen Sie auf false fest distributed . Dieser Prozess erstellt weniger Dateien, verringert jedoch die Exportleistung.

  • Wenn die externe Tabelle eine Partition nach einer Zeichenfolgenspalte enthält, sollte die Anzahl der exportierten Dateien eine einzelne Datei pro Partition sein (oder mehr, wenn sizeLimit erreicht wird). Alle Knoten sind weiterhin am Export beteiligt (Vorgang wird verteilt), aber jede Partition wird einem bestimmten Knoten zugewiesen. Wenn Sie auf false festlegen distributed , wird der Export nur von einem einzelnen Knoten ausgeführt, aber das Verhalten bleibt gleich (eine einzelne Datei, die pro Partition geschrieben wird).

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 der async Schlüsselwort (keyword)), ist die Ausgabe mit dem Befehl Vorgangsdetails anzeigen verfügbar.