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
] to
table
externalTableName
[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__
.
- Wenn ein Partitionswert null/leer oder ein ungültiger Verzeichniswert ist, wird der Partitionswert gemäß den Definitionen des Zielspeichers durch den Standardwert ersetzt
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 festdistributed
. 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 festlegendistributed
, 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.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für