Sdílet prostřednictvím


Zásady dělení

Platí pro: ✅Microsoft FabricAzure Data Explorer

Zásady dělení definují, jestli a jak se mají rozsahy (horizontální oddíly dat) dělit pro konkrétní tabulku nebo materializované zobrazení.

Zásady aktivují další proces na pozadí, který se provádí po vytvoření rozsahů po příjmu dat. Tento proces zahrnuje reingestování dat ze zdrojových rozsahů a vytváření homogenních rozsahů, ve kterých se všechny hodnoty sloupce určeného jako klíč oddílu nacházejí v jednom oddílu.

Hlavním cílem zásad dělení je zvýšit výkon dotazů v konkrétních podporovaných scénářích.

Poznámka:

Ve výchozím nastavení platí, že pokud není definována zásada dělení dat (je null), rozsahy se dělí podle času vytvoření (příjmu dat). Ve většině případů není nutné nastavovat zásady dělení dat.

Podporované scénáře

Tady jsou jediné scénáře, ve kterých se doporučuje nastavení zásad dělení dat. Ve všechostatníchch

  • Časté filtry pro střední nebo vysokou kardinalitu string nebo guid sloupec:
    • Příklad: víceklientová řešení nebo tabulka metrik, kde většina nebo všechny dotazy filtrují sloupec typu string nebo , například nebo guidTenantId.MetricId
    • Střední kardinalita je alespoň 10 000 jedinečných hodnot.
    • Nastavte klíč oddílu uniform
  • Časté agregace nebo spojení ve vysoké kardinalitě string nebo guid sloupci:
    • Například informace o IoT z mnoha různých senzorů nebo akademické záznamy mnoha různých studentů.
    • Vysoká kardinalita je alespoň 1 000 000 jedinečných hodnot, kde rozdělení hodnot ve sloupci je přibližně sudé.
    • V tomto případě nastavte klíč oddílu ByPartition
  • Příjem dat mimo pořadí:
    • Data ingestovaná do tabulky nemusí být seřazená a rozdělená do rozsahů (horizontálních oddílů) podle konkrétního datetime sloupce, který představuje čas vytvoření dat a běžně se používá k filtrování dat. Důvodem může být backfill z heterogenních zdrojových souborů, které obsahují hodnoty data a času v průběhu velkého časového rozsahu.
    • V tomto případě nastavte klíč oddílu datetime v jednotném rozsahu datetime jako sloupec.
    • Pokud potřebujete zásady uchovávání informací a ukládání do mezipaměti, aby byly v souladu s hodnotami data a času ve sloupci, místo toho, aby odpovídaly času příjmu dat, nastavte OverrideCreationTime vlastnost na truehodnotu .

Upozornění

  • Pro počet tabulek s definovanými zásadami dělení nejsou nastavené žádné pevně zakódované limity. Každá další tabulka ale přidává režijní náklady na proces dělení dat na pozadí. Nastavení zásad u více tabulek bude mít za následek použití více prostředků a vyšší náklady kvůli základním transakcím úložiště. Další informace najdete v tématu kapacita.
  • Pokud se očekává, že komprimovaná velikost dat na oddíl bude menší než 1 GB, nedoporučuje se nastavit zásady dělení.
  • Proces dělení vede k artefaktům zbytkového úložiště pro všechny rozsahy nahrazené během procesu dělení a během procesu sloučení. Většina artefaktů zbytkového úložiště se očekává, že se během procesu automatického čištění odstraní. Zvýšení hodnoty MaxPartitionCount vlastnosti zvyšuje počet artefaktů zbytkového úložiště a může snížit výkon čištění.
  • Před použitím zásad dělení na materializované zobrazení si projděte doporučení pro materializovaná zobrazení zásad dělení.

Klíče oddílu

Podporují se následující typy klíčů oddílů.

Kind Typ sloupce Vlastnosti oddílu Hodnota oddílu
Hash string nebo guid Function, MaxPartitionCount, , SeedPartitionAssignmentMode Function(ColumnName, MaxPartitionCount, Seed)
Jednotný rozsah datetime RangeSize, , ReferenceOverrideCreationTime bin_at(ColumnName, RangeSize, Reference)

Klíč oddílu hash

Pokud zásada obsahuje klíč oddílu hash, všechny homogenní rozsahy, které patří do stejného oddílu, se přiřadí stejnému datovému uzlu.

Poznámka:

Operace dělení dat přidává významné zatížení zpracování. Pro tabulku doporučujeme použít klíč oddílu hash pouze za následujících podmínek:

  • Pokud většina dotazů používá filtry rovnosti (==, in()).
  • Většina dotazů agreguje nebo spojuje konkrétní sloupec typu string nebo který má guid (kardinalitu 10 M nebo vyšší), například nebo device_ID.user_ID
  • Vzor použití dělených tabulek je ve vysokém zatížení dotazů souběžnosti, například při monitorování nebo řídicích panelech aplikací.
  • Funkce hash-modulo slouží k rozdělení dat.
  • Data v homogenních (dělených) rozsahech se řadí podle klíče oddílu hash.
  • Dotazy, které používají strategii náhodného make-series

Vlastnosti oddílu

Vlastnost Popis Podporované hodnoty Doporučená hodnota
Function Název funkce hash-modulo, která se má použít. XxHash64
MaxPartitionCount Maximální počet oddílů, které se mají vytvořit (argument modulo funkce hash-modulo) za časové období. V rozsahu (1,2048]. Vyšší hodnoty vedou k větší režii procesu dělení dat a vyššího počtu rozsahů pro každé časové období. Doporučená hodnota je 128. Vyšší hodnoty výrazně zvýší režii při dělení dat po příjmu dat a velikost metadat , a proto se nedoporučují.
Seed Slouží k náhodnému určení hodnoty hash. Kladné celé číslo. 1, což je také výchozí hodnota.
PartitionAssignmentMode Režim použitý k přiřazování oddílů uzlům. ByPartition: Všechny homogenní (dělené) rozsahy, které patří do stejného oddílu, jsou přiřazeny stejnému uzlu.
Uniform: Hodnoty oddílů rozsahů jsou ignorovány. Rozsahy jsou k uzlům přiřazeny jednotně.
Pokud se dotazy nepřipojují nebo agregují s klíčem oddílu hash, použijte Uniform. V opačném případě použijte ByPartition.

Příklad klíče oddílu hash

Hash partition key over a string-typed column named tenant_id. Používá XxHash64 funkci hash s MaxPartitionCount nastavenou na doporučenou hodnotu 128a výchozí hodnotu Seed1.

{
  "ColumnName": "tenant_id",
  "Kind": "Hash",
  "Properties": {
    "Function": "XxHash64",
    "MaxPartitionCount": 128,
    "Seed": 1,
    "PartitionAssignmentMode": "Uniform"
  }
}

Uniform range datetime partition key

Poznámka:

Klíč oddílu datetime s jednotným rozsahem použijte pouze u datetimesloupce typu -typed v tabulce, pokud se data ingestovaná do tabulky pravděpodobně nebudou řadit podle tohoto sloupce.

V těchto případech můžete data mezi rozsahy přemístit tak, aby každý rozsah obsahoval záznamy z omezeného časového rozsahu. Tento proces vede k datetime efektivnějšímu filtrování sloupce v době dotazu.

Použitá funkce oddílu je bin_at() a není přizpůsobitelná.

Vlastnosti oddílu

Vlastnost Popis Doporučená hodnota
RangeSize timespan Skalární konstanta, která označuje velikost každého oddílu data a času. Začněte hodnotou 1.00:00:00 (jeden den). Nenastavujte kratší hodnotu, protože může vést k tomu, že tabulka má velký počet malých rozsahů, které nelze sloučit.
Reference Skalární konstanta datetime označující pevný bod v čase, podle kterého jsou oddíly datetime zarovnány. Začněte s 1970-01-01 00:00:00. Pokud existují záznamy, ve kterých má klíč null oddílu datetime hodnoty, jejich hodnota oddílu je nastavena na hodnotu Reference.
OverrideCreationTime Určuje bool , zda se minimální a maximální doba vytvoření rozsahu výsledku má přepsat rozsahem hodnot v klíči oddílu. Výchozí hodnota falseje . Nastavte na true to, jestli se data neingestují v pořadí od příjezdu. Jeden zdrojový soubor může například obsahovat hodnoty datetime, které jsou vzdálené, nebo můžete chtít vynutit uchovávání dat nebo ukládání do mezipaměti na základě hodnot data a času, nikoli času příjmu dat.

Pokud OverrideCreationTime je nastavena na true, rozsahy mohou být vynechány v procesu sloučení. Rozsahy se zmešká, pokud je jejich čas vytvoření starší než Lookback období zásad sloučení rozsahů tabulky. Chcete-li zajistit, aby rozsahy byly zjistitelné, nastavte Lookback vlastnost na HotCachehodnotu .

Příklad oddílu datetime v jednotném rozsahu

Fragment kódu ukazuje klíč oddílu rozsahu data a času přes datetime zadaný sloupec s názvem timestamp. Používá datetime(2021-01-01) se jako referenční bod s velikostí 7d každého oddílu a nepřepíše časy vytváření rozsahů.

{
  "ColumnName": "timestamp",
  "Kind": "UniformRange",
  "Properties": {
    "Reference": "2021-01-01T00:00:00",
    "RangeSize": "7.00:00:00",
    "OverrideCreationTime": false
  }
}

Objekt zásad

Ve výchozím nastavení zásady dělení dat tabulky jsou null, v takovém případě se data v tabulce po ingestování nepředělá.

Zásady dělení dat mají následující hlavní vlastnosti:

  • PartitionKeys:

    • Kolekce klíčů oddílů, které definují, jak rozdělit data v tabulce.
    • Tabulka může mít až klíče 2 oddílů s jednou z následujících možností:
      • Jeden klíč oddílu hash.
      • Jeden klíč oddílu datetime v jednotném rozsahu
      • Jeden klíč oddílu hash a jeden klíč oddílu datetime v jednotném rozsahu
    • Každý klíč oddílu má následující vlastnosti:
      • ColumnName: string – Název sloupce, podle kterého budou data rozdělena.
      • Kind: string – Druh dělení dat, který se má použít (Hash nebo UniformRange).
      • Properties: property bag – Definuje parametry podle toho, které dělení se provádí.
  • EffectiveDateTime:

    • Datum a čas UTC, ze kterého je zásada platná.
    • Tato vlastnost je nepovinná. Pokud není zadaný, zásada se projeví pro data ingestovaná po použití zásady.

Upozornění

  • Hodnotu data a času můžete nastavit v minulosti a dělit už ingestovaná data. Tento postup ale může výrazně zvýšit prostředky používané v procesu dělení.
  • Ve většině případů se doporučuje mít pouze nově ingestovaná data rozdělená na oddíly a vyhnout se dělení velkých objemů historických dat.
  • Pokud se rozhodnete rozdělit historická data, zvažte to postupně tak, že nastavíte EffectiveDateTime na předchozí datetime v krocích až několik dní pokaždé, když zásadu změníte.

Příklad dělení dat

Objekt zásad dělení dat se dvěma klíči oddílu.

  1. Hash partition key over a string-typed column named tenant_id.
    • Používá XxHash64 funkci hash s MaxPartitionCount nastavenou na doporučenou hodnotu 128a výchozí hodnotu Seed1.
  2. Uniform datetime range partition key over a datetime type column named timestamp.
    • Používá datetime(2021-01-01) se jako referenční bod s velikostí každého oddílu 7d .
{
  "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
      }
    }
  ]
}

Další vlastnosti

Následující vlastnosti lze definovat jako součást zásad. Tyto vlastnosti jsou volitelné a nedoporučujeme je měnit.

Vlastnost Popis Doporučená hodnota Default value
MinRowCountPerOperation Minimální cíl pro součet počtu řádků zdrojových rozsahů jedné operace dělení dat. 0
MaxRowCountPerOperation Maximální cíl pro součet počtu řádků zdrojových rozsahů jedné operace dělení dat. Pokud zjistíte, že operace dělení spotřebovávají velké množství paměti nebo procesoru na operaci, nastavte hodnotu nižší než 5 M. 0, s výchozím cílem 5 000 000 záznamů.
MaxOriginalSizePerOperation Maximální cíl pro součet původní velikosti (v bajtech) zdrojových rozsahů jedné operace dělení dat. Pokud operace dělení spotřebovávají velké množství paměti nebo procesoru na operaci, nastavte hodnotu nižší než 5 GB. 0, s výchozím cílem 5 368 709 120 bajtů (5 GB).

Proces dělení dat

  • Dělení dat se spouští jako proces po příjmu dat na pozadí.
    • Očekává se, že tabulka, do které se průběžně ingestuje, bude mít vždy "ocas" dat, která se ještě mají dělit (nehomogenní rozsahy).
  • Dělení dat se spouští pouze v horkých rozsahech bez ohledu na hodnotu EffectiveDateTime vlastnosti v zásadách.
    • Pokud je vyžadováno dělení studených rozsahů, je nutné dočasně upravit zásady ukládání do mezipaměti.

Stav dělení tabulek s definovanými zásadami v databázi můžete monitorovat pomocí příkazu .show database extents partitioning statistics a partitioning metrics.

Dělení kapacity

  • Proces dělení dat vede k vytvoření více rozsahů. Kapacity sloučení se můžou postupně zvyšovat, aby proces sloučení rozsahů mohl zůstat vzhůru.

  • Pokud existuje vysoká propustnost příjmu dat nebo dostatek velkého počtu tabulek, které mají definované zásady dělení, může se kapacita oddílu Extents postupně zvýšit, aby proces rozsahů dělení mohl zůstat vzhůru.

  • Aby se zabránilo spotřebě příliš velkého množství prostředků, jsou tyto dynamické nárůsty omezené. Možná budete muset postupně a lineárně je zvýšit nad rámec limitu, pokud jsou zcela využity.
    • Pokud zvýšení kapacit způsobí významné zvýšení využití prostředků clusteru, můžete vertikálně navýšit/ kapacitu clusteru ručně nebo povolením automatického škálování.

Omezení

  • Pokusy o dělení dat v databázi, která už má více než 5 000 000 rozsahů, budou omezeny.
    • V takových případech EffectiveDateTime se vlastnost zásad dělení tabulek v databázi automaticky zpozdí o několik hodin, abyste mohli znovu vyhodnotit konfiguraci a zásady.

Odlehlé hodnoty v dělených sloupcích

  • Následující situace můžou přispět k nevyvážené distribuci dat mezi uzly a snížení výkonu dotazů:
    • Pokud klíč oddílu hash obsahuje hodnoty, které jsou mnohem častější než jiné, například prázdný řetězec nebo obecná hodnota (napříkladnull).N/A
    • Hodnoty představují entitu (například tenant_id), která je v datové sadě obecnější.
  • Pokud má klíč oddílu datetime v jednotném rozsahu dostatečně velké procento hodnot, které jsou "daleko" od většiny hodnot ve sloupci, zvýší se režie procesu dělení dat a může vést k mnoha malým rozsahům, aby bylo možné sledovat. Příkladem takové situace jsou hodnoty data a času ze vzdálené minulosti nebo budoucnosti.

Vobouch datech v obou těchto případech buď "opravte" data, nebo vyfiltrujte všechny irelevantní záznamy v datech před nebo v době příjmu dat, abyste snížili režijní náklady na dělení dat. Použijte například zásadu aktualizace.