Freigeben über


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 oder guid 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 dem TenantId MetricId.guid
    • Mittlere Kardinalität ist mindestens 10.000 unterschiedliche Werte.
    • Legen Sie den Hashpartitionsschlüssel als die string Oder-Spalte guid fest, und legen Sie die PartitionAssignmentMode Eigenschaft auf uniform.
  • Häufige Aggregationen oder Verknüpfungen zu einer hohen Kardinalität string oder guid 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 auf ByPartition.
  • 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 auf true.

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, , MaxPartitionCountSeedPartitionAssignmentMode Function(ColumnName, , SeedMaxPartitionCount)
Einheitlicher Bereich datetime RangeSize, ReferenceOverrideCreationTime bin_at(ColumnName, , ReferenceRangeSize)

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 oder user_IDeine device_IDguid .
  • 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 verwendete joinsummarize Partitionsschlüssel der Tabelle oder make-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 stringSpalte mit dem Namen tenant_id"-typed". Es verwendet die XxHash64 Hashfunktion, mit MaxPartitionCount festgelegt auf den empfohlenen Wert 128und 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 trueist, 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 nulldie 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:

  • 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.

  1. Ein Hashpartitionsschlüssel über eine stringSpalte mit dem Namen tenant_id"-typed".
    • Es verwendet die XxHash64 Hashfunktion, mit MaxPartitionCount festgelegt auf den empfohlenen Wert 128und den Standardwert Seed von 1.
  2. Ein einheitlicher Datetime-Bereichspartitionsschlüssel über einer datetime Typspalte mit dem Namen timestamp.
    • Es wird als Referenzpunkt mit einer Größe 7d für jede Partition verwendetdatetime(2021-01-01).
{
  "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.

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

::: 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.
    • Wenn das Erhöhen der Kapazitäten zu einer erheblichen Erhöhung der Verwendung der Clusterressourcen führt, können Sie den Cluster /entweder manuell oder durch Aktivieren der automatischen Skalierung skalieren. ::: moniker-end

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.

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. oder N/A).
    • Die Werte stellen eine Entität (z tenant_id. B. ) dar, die im Dataset häufiger ist.
  • 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.