Partitionierungsrichtlinie
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer
Die Partitionierungsrichtlinie definiert, ob und wie Umfang (Datenshards) für eine bestimmte Tabelle oder eine materialisierte Ansicht partitioniert werden soll.
Die Richtlinie löst einen zusätzlichen Hintergrundprozess aus, der nach der Erstellung von Schwankungen nach der Datenaufnahme stattfindet. Dieser Vorgang umfasst das Erneute Aufnehmen von Daten aus den Quellausdehnungen und die Erzeugung homogener Ausmaße, in denen sich alle Werte der Spalte befinden, die als Partitionsschlüssel bezeichnet wird, innerhalb einer einzigen Partition.
Das Hauptziel der Partitionierungsrichtlinie besteht darin, die Abfrageleistung in bestimmten unterstützten Szenarien zu verbessern.
Hinweis
Wenn eine Datenpartitionierungsrichtlinie standardmäßig nicht definiert ist (ist null
), werden Vergrößerungen nach Erstellungszeit (Erfassung) partitioniert. In den meisten Fällen ist es nicht erforderlich, eine Datenpartitionierungsrichtlinie festzulegen.
Unterstützte Szenarios
Im Folgenden sind die einzigen Szenarien aufgeführt, in denen das Festlegen einer Datenpartitionierungsrichtlinie empfohlen wird. In allen anderen Szenarien wird das Festlegen der Richtlinie nicht empfohlen.
- Häufige Filter auf eine mittlere oder hohe Kardinalität
string
oderguid
Spalte:- Beispiel: Multitenant-Lösungen oder eine Metriktabelle, in der die meisten oder alle Abfragen nach einer Spalte vom Typ
string
oder , z. B. dem oder demTenantId
MetricId
.guid
- Mittlere Kardinalität ist mindestens 10.000 unterschiedliche Werte.
- Legen Sie den Hashpartitionsschlüssel als die
string
Oder-Spalteguid
fest, und legen Sie diePartitionAssignmentMode
Eigenschaft aufuniform
.
- Beispiel: Multitenant-Lösungen oder eine Metriktabelle, in der die meisten oder alle Abfragen nach einer Spalte vom Typ
- Häufige Aggregationen oder Verknüpfungen zu einer hohen Kardinalität
string
oderguid
Spalte:- Beispielsweise IoT-Informationen aus vielen verschiedenen Sensoren oder akademischen Datensätzen vieler verschiedener Studenten.
- Hohe Kardinalität ist mindestens 1.000.000 unterschiedliche Werte, wobei die Verteilung von Werten in der Spalte ungefähr gleich ist.
- Legen Sie in diesem Fall den Hashpartitionsschlüssel so fest, dass er häufig nach der Spalte gruppiert oder verknüpft ist, und legen Sie die
PartitionAssignmentMode
Eigenschaft aufByPartition
.
- Out-of-Order-Datenaufnahme:
- Daten, die in eine Tabelle aufgenommen werden, werden möglicherweise nicht sortiert und in Umfang (Hards) gemäß einer bestimmten
datetime
Spalte unterteilt, die die Datenerstellungszeit darstellt und häufig zum Filtern von Daten verwendet wird. Dies kann auf einen Backfill aus heterogenen Quelldateien zurückzuführen sein, die Datumstimewerte über einen großen Zeitraum enthalten. - Legen Sie in diesem Fall den uniform range datetime partition key auf die
datetime
Spalte fest. - Wenn Sie Aufbewahrungs- und Zwischenspeicherungsrichtlinien benötigen, um die Datums-/Uhrzeitwerte in der Spalte auszurichten, anstatt die Uhrzeit der Aufnahme auszurichten, legen Sie die
OverrideCreationTime
Eigenschaft auftrue
.
- Daten, die in eine Tabelle aufgenommen werden, werden möglicherweise nicht sortiert und in Umfang (Hards) gemäß einer bestimmten
Achtung
- Es sind keine hartcodierten Grenzwerte für die Anzahl von Tabellen festgelegt, für die die Partitionierungsrichtlinie definiert ist. Aber jede zusätzliche Tabelle fügt zusätzlichen Aufwand zum Prozess der Hintergrunddatenpartitionierung hinzu. Das Festlegen einer Richtlinie für weitere Tabellen führt dazu, dass mehr Ressourcen verwendet werden, und höhere Kosten aufgrund zugrunde liegender Speichertransaktionen. Weitere Informationen finden Sie unter "Kapazität".
- Es wird nicht empfohlen, eine Partitionierungsrichtlinie festzulegen, wenn die komprimierte Größe von Daten pro Partition voraussichtlich kleiner als 1 GB ist.
- Der Partitionierungsprozess führt zu Restspeicherartefakten für alle Erweiterungen, die während des Partitionierungsprozesses und während des Zusammenführungsprozesses ersetzt wurden. Die meisten Restspeicherartefakte werden voraussichtlich während des automatischen Bereinigungsprozesses gelöscht. Das Erhöhen des Werts der
MaxPartitionCount
Eigenschaft erhöht die Anzahl der Restspeicherartefakte und kann die Bereinigungsleistung verringern. - Bevor Sie eine Partitionierungsrichtlinie auf eine materialisierte Ansicht anwenden, lesen Sie die Empfehlungen für die Partitionierungsrichtlinie für materialisierte Ansichten.
Partitionsschlüssel
Die folgenden Arten von Partitionsschlüsseln werden unterstützt.
Variante | Spaltentyp | Partitionseigenschaften | Partitionswert |
---|---|---|---|
Hash | string oder guid |
Function , , MaxPartitionCount Seed PartitionAssignmentMode |
Function (ColumnName , , Seed MaxPartitionCount ) |
Einheitlicher Bereich | datetime |
RangeSize , Reference OverrideCreationTime |
bin_at (ColumnName , , Reference RangeSize ) |
Hashpartitionsschlüssel
Wenn die Richtlinie einen Hashpartitionsschlüssel enthält, werden alle homogenen Erweiterungen, die derselben Partition angehören, demselben Datenknoten zugewiesen.
Hinweis
Durch den Datenpartitionierungsvorgang werden erhebliche Verarbeitungslasten hinzugefügt. Es wird empfohlen, einen Hashpartitionsschlüssel nur unter den folgenden Bedingungen auf eine Tabelle anzuwenden:
- Wenn der Großteil der Abfragen Gleichheitsfilter (
==
,in()
) verwendet. - Die Meisten Abfragen aggregieren/joinen für eine bestimmte Spalte vom Typ
string
oder die eine große Dimension (Kardinalität von 10M oder höher), z. B. eine oderuser_ID
einedevice_ID
guid
. - Das Verwendungsmuster der partitionierten Tabellen befindet sich in hoher Parallelitätsabfragelast, z. B. in Überwachungs- oder Dashboardanwendungen.
- Eine Hashmodulo-Funktion wird verwendet, um die Daten zu partitionieren.
- Daten in homogenen (partitionierten) Ausmaßen werden vom Hashpartitionsschlüssel sortiert.
- Sie müssen den Hashpartitionsschlüssel nicht in die Zeilenreihenfolgerichtlinie einschließen, wenn einer in der Tabelle definiert ist.
- Abfragen, die die Shuffle-Strategie verwenden und in denen der
shuffle key
verwendetejoin
summarize
Partitionsschlüssel der Tabelle odermake-series
der Hashpartitionsschlüssel der Tabelle verwendet wird, werden voraussichtlich besser ausgeführt, da die zum Verschieben über Knoten erforderliche Datenmenge reduziert wird.
Partitionseigenschaften
Eigenschaft | Beschreibung | Unterstützte Werte | Empfohlener Wert |
---|---|---|---|
Function |
Der Name einer zu verwendenden Hashmodulo-Funktion. | XxHash64 |
|
MaxPartitionCount |
Die maximale Anzahl der zu erstellenden Partitionen (das Modulo-Argument für die Hashmodulo-Funktion) pro Zeitraum. | Im Bereich (1,2048] . |
Höhere Werte führen zu einem größeren Mehraufwand für den Datenpartitionierungsprozess und zu einer höheren Anzahl von Ausmaßen für jeden Zeitraum. Empfohlener Wert: 128 . Höhere Werte erhöhen den Aufwand für die Partitionierung der Daten nach der Erfassung und die Größe von Metadaten erheblich und werden daher nicht empfohlen. |
Seed |
Wird zum Zufälligen des Hashwerts verwendet. | Eine positive ganze Zahl | 1 , was auch der Standardwert ist. |
PartitionAssignmentMode |
Der Modus, der zum Zuweisen von Partitionen zu Knoten verwendet wird. | ByPartition : Alle homogenen (partitionierten) Ausmaße, die derselben Partition angehören, werden demselben Knoten zugewiesen. Uniform : Partitionswerte von Erweiterungen werden ignoriert. Erweiterungen werden den Knoten einheitlich zugewiesen. |
Wenn Abfragen nicht mit dem Hashpartitionsschlüssel verknüpft oder aggregiert werden, verwenden Sie Uniform . Verwenden Sie andernfalls ByPartition . |
Beispiel für Hashpartitionsschlüssel
Ein Hashpartitionsschlüssel über eine string
Spalte mit dem Namen tenant_id
"-typed".
Es verwendet die XxHash64
Hashfunktion, mit MaxPartitionCount
festgelegt auf den empfohlenen Wert 128
und den Standardwert Seed
von 1
.
{
"ColumnName": "tenant_id",
"Kind": "Hash",
"Properties": {
"Function": "XxHash64",
"MaxPartitionCount": 128,
"Seed": 1,
"PartitionAssignmentMode": "Uniform"
}
}
Uniform range datetime partition key
Hinweis
Wenden Sie nur einen uniform range datetime partition key für eine datetime
-typed column in a table an, wenn daten, die in die Tabelle aufgenommen wurden, nicht gemäß dieser Spalte sortiert werden.
In diesen Fällen können Sie die Daten zwischen den Ausmaßen erneut zuordnen, sodass in jedem Umfang Datensätze aus einem begrenzten Zeitraum enthalten sind. Dieser Prozess führt dazu, dass Filter für die datetime
Spalte zur Abfragezeit effektiver sind.
Die verwendete Partitionsfunktion ist bin_at() und kann nicht angepasst werden.
Partitionseigenschaften
Eigenschaft | Beschreibung | Empfohlener Wert |
---|---|---|
RangeSize |
Eine timespan skalare Konstante, die die Größe jeder Datetime-Partition angibt. |
Beginnen Sie mit dem Wert 1.00:00:00 (ein Tag). Legen Sie keinen kürzeren Wert fest, da sie dazu führen kann, dass die Tabelle eine große Anzahl kleinerEr Umfang aufweist, die nicht zusammengeführt werden können. |
Reference |
Eine datetime skalare Konstante, die einen festen Punkt in der Zeit angibt, entsprechend der datumstime Partitionen ausgerichtet werden. |
Beginnen Sie mit 1970-01-01 00:00:00 . Wenn Datensätze vorhanden sind, in denen der Datetime-Partitionsschlüssel Werte enthält null , wird ihr Partitionswert auf den Wert von Reference . |
OverrideCreationTime |
Ein bool Wert, der angibt, ob die mindesten und maximalen Erstellungszeiten des Ergebnisumfangs durch den Bereich der Werte im Partitionsschlüssel überschrieben werden sollen. |
Wird standardmäßig auf false festgelegt. Legen Sie fest, true ob Daten nicht in der Reihenfolge der Ankunft aufgenommen werden. Eine einzelne Quelldatei kann z. B. Datumstimewerte enthalten, die entfernt sind, und/oder Sie möchten die Aufbewahrung oder Zwischenspeicherung basierend auf den Datums-/Uhrzeitwerten anstelle der Aufnahmezeit erzwingen.Wenn OverrideCreationTime diese Einstellung festgelegt true ist, können im Zusammenführungsprozess Soweit nicht mehr vorhanden sein. Ausdehnungen werden verpasst, wenn die Erstellungszeit älter als der Lookback Zeitraum der Zusammenführungsrichtlinie der Tabelle ist. Um sicherzustellen, dass die Ausdehnungen auffindbar sind, legen Sie die Lookback Eigenschaft auf HotCache . |
Beispiel für eine uniform range datetime partition
Der Codeausschnitt zeigt einen uniform datetime range partition key over a datetime
typed column named timestamp
.
Sie verwendet als Referenzpunkt mit einer Größe für jede Partition und überschreibt nicht die Erstellungszeiten des Umfangs.It uses datetime(2021-01-01)
as its reference point, with a size of 7d
each partition, and doesn't override the extents' creation times.
{
"ColumnName": "timestamp",
"Kind": "UniformRange",
"Properties": {
"Reference": "2021-01-01T00:00:00",
"RangeSize": "7.00:00:00",
"OverrideCreationTime": false
}
}
Das Richtlinienobjekt
Standardmäßig ist null
die Datenpartitionierungsrichtlinie einer Tabelle , in diesem Fall werden Die Daten in der Tabelle nach der Aufnahme nicht neu partitioniert.
Die Datenpartitionierungsrichtlinie weist die folgenden Haupteigenschaften auf:
PartitionKeys:
- Eine Sammlung von Partitionsschlüsseln , die definieren, wie die Daten in der Tabelle partitionieren.
- Eine Tabelle kann bis zu
2
Partitionsschlüssel haben, mit einer der folgenden Optionen: - Jeder Partitionsschlüssel weist die folgenden Eigenschaften auf:
ColumnName
:string
- Der Name der Spalte, nach der die Daten partitioniert werden.Kind
:string
- Die art der Datenpartitionierung, die angewendet werden soll (Hash
oderUniformRange
).Properties
:property bag
- Definiert Parameter, nach denen partitioniert wird.
EffectiveDateTime:
- Die UTC-Datumszeit, von der die Richtlinie wirksam ist.
- Diese Eigenschaft ist optional. Wenn sie nicht angegeben ist, wird die Richtlinie für daten wirksam, die nach der Anwendung der Richtlinie aufgenommen wurden.
Achtung
- Sie können einen Datetime-Wert in der Vergangenheit festlegen und bereits erfasste Daten partitionieren. Diese Vorgehensweise kann jedoch die ressourcenaufwendigend erhöhen, die im Partitionierungsprozess verwendet werden.
- In den meisten Fällen wird empfohlen, nur neu aufgenommene Daten partitioniert zu haben und eine Partitionierung großer Mengen von historischen Daten zu vermeiden.
- Wenn Sie sich dafür entscheiden, verlaufsgeschichtliche Daten zu partitionieren, sollten Sie dies schrittweise tun, indem Sie " EffectiveDateTime " bei jeder Änderung der Richtlinie auf einen vorherigen
datetime
Schritt von bis zu einigen Tagen festlegen.
Beispiel für die Datenpartitionierung
Datenpartitionierungsrichtlinienobjekt mit zwei Partitionsschlüsseln.
- Ein Hashpartitionsschlüssel über eine
string
Spalte mit dem Namentenant_id
"-typed".- Es verwendet die
XxHash64
Hashfunktion, mitMaxPartitionCount
festgelegt auf den empfohlenen Wert128
und den StandardwertSeed
von1
.
- Es verwendet die
- Ein einheitlicher Datetime-Bereichspartitionsschlüssel über einer
datetime
Typspalte mit dem Namentimestamp
.- Es wird als Referenzpunkt mit einer Größe
7d
für jede Partition verwendetdatetime(2021-01-01)
.
- Es wird als Referenzpunkt mit einer Größe
{
"PartitionKeys": [
{
"ColumnName": "tenant_id",
"Kind": "Hash",
"Properties": {
"Function": "XxHash64",
"MaxPartitionCount": 128,
"Seed": 1,
"PartitionAssignmentMode": "Uniform"
}
},
{
"ColumnName": "timestamp",
"Kind": "UniformRange",
"Properties": {
"Reference": "2021-01-01T00:00:00",
"RangeSize": "7.00:00:00",
"OverrideCreationTime": false
}
}
]
}
Zusätzliche Eigenschaften
Die folgenden Eigenschaften können als Teil der Richtlinie definiert werden. Diese Eigenschaften sind optional, und es wird empfohlen, sie nicht zu ändern.
Eigenschaft | Beschreibung | Empfohlener Wert | Standardwert |
---|---|---|---|
MinRowCountPerOperation | Mindestziel für die Summe der Zeilenanzahl der Quellausdehnungen eines einzelnen Datenpartitionierungsvorgangs. | 0 |
|
MaxRowCountPerOperation | Maximum target for the sum of the row count of the source extents of a single data partitioning operation. | Legen Sie einen Wert unter 5M fest, wenn Sie feststellen, dass die Partitionierungsvorgänge eine große Menge Arbeitsspeicher oder CPU pro Vorgang verbrauchen. | 0 , mit einem Standardziel von 5.000.000 Datensätzen. |
MaxOriginalSizePerOperation | Maximum target for the sum of the original size (in bytes) of the source extents of a single data partitioning operation. | Wenn die Partitionierungsvorgänge eine große Menge Arbeitsspeicher oder CPU pro Vorgang verbrauchen, legen Sie einen Wert unter 5 GB fest. | 0 , mit einem Standardziel von 5.368.709.120 Bytes (5 GB). |
Der Datenpartitionierungsprozess
- Die Datenpartitionierung wird als Hintergrundprozess nach der Erfassung ausgeführt.
- Eine Tabelle, die kontinuierlich aufgenommen wird, wird erwartet, dass immer ein "Tail" von Daten vorhanden ist, die noch nicht partitioniert werden (nichthomogene Ausmaße).
- Die Datenpartitionierung wird nur in heißem Umfang ausgeführt, unabhängig vom Wert der Eigenschaft in der
EffectiveDateTime
Richtlinie.- Wenn die Partitionierung kalter Ausmaße erforderlich ist, müssen Sie die Zwischenspeicherungsrichtlinie vorübergehend anpassen.
Sie können den Partitionierungsstatus von Tabellen mit definierten Richtlinien in einer Datenbank überwachen, indem Sie den Befehl zur Partitionierungsstatistik und Partitionierungsmetriken verwenden.
Partitionierungskapazität
Der Datenpartitionierungsprozess führt zur Erstellung von mehr Ausmaßen. Die Ausmaße der Zusammenführungskapazität können allmählich steigen, sodass der Prozess der Zusammenführung weiter zunehmen kann.
Wenn ein hoher Aufnahmedurchsatz oder eine große Anzahl von Tabellen mit einer definierten Partitionierungsrichtlinie vorhanden ist, kann sich die Partitionskapazität des Umfangs schrittweise erhöhen, sodass der Prozess der Partitionierungsausdehnungen beibehalten werden kann.
::: moniker range = "azure-data-explorer"
- Um zu viele Ressourcen zu vermeiden, werden diese dynamischen Erhöhungen begrenzt. Möglicherweise müssen Sie sie schrittweise und linear über die Obergrenze hinaus erhöhen, wenn sie vollständig verwendet werden.
Begrenzungen
- Versuche, Daten in einer Datenbank zu partitionieren, die bereits mehr als 5.000.000 Erweiterungen aufweist, werden gedrosselt.
- In solchen Fällen wird die
EffectiveDateTime
Eigenschaft der Partitionierungsrichtlinien von Tabellen in der Datenbank automatisch um mehrere Stunden verzögert, sodass Sie Ihre Konfiguration und Richtlinien neu bewerten können.
- In solchen Fällen wird die
Ausreißer in partitionierten Spalten
- Die folgenden Situationen können zu einer ungleichgewichtigen Verteilung von Daten über Knoten hinweg beitragen und die Abfrageleistung beeinträchtigen:
- Wenn ein Hashpartitionsschlüssel Werte enthält, die viel häufiger als andere sind, z. B. eine leere Zeichenfolge oder einen generischen Wert (z
null
. B. oderN/A
). - Die Werte stellen eine Entität (z
tenant_id
. B. ) dar, die im Dataset häufiger ist.
- Wenn ein Hashpartitionsschlüssel Werte enthält, die viel häufiger als andere sind, z. B. eine leere Zeichenfolge oder einen generischen Wert (z
- Wenn ein einheitlicher Bereichs-Datetime-Partitionsschlüssel einen großen Prozentsatz von Werten aufweist, die "weit" von der Mehrheit der Werte in der Spalte entfernt sind, wird der Aufwand des Datenpartitionierungsprozesses erhöht und kann zu vielen kleinen Ausmaßen führen, um den Überblick zu behalten. Ein Beispiel für eine solche Situation sind Datetime-Werte aus der entfernten Vergangenheit oder Zukunft.
In beiden Fällen "fixieren" Sie die Daten, oder filtern Sie irrelevante Datensätze in den Daten vor oder zur Erfassungszeit, um den Aufwand der Datenpartitionierung zu verringern. Verwenden Sie beispielsweise eine Updaterichtlinie.