Välj kornighet i en kolumn eller tabell baserat på krav

Slutförd

Kornighet är ett av de viktigaste designbesluten du fattar när du skapar en datamodell. Den definierar detaljnivån som samlas in i dina tabeller och påverkar lagringskostnader, frågeprestanda och de analytiska frågor som du kan besvara. Som datatekniker hjälper förståelsen av kornighet dig att utforma tabeller som uppfyller affärskraven samtidigt som effektiv drift upprätthålls.

Den här lektionen förklarar vad kornighet innebär i samband med dimensionsmodellering och hur du utvärderar olika kornighetsalternativ baserat på organisationens krav.

Förstå vad kornighet representerar

Kornighet, som ibland kallas "korn", beskriver detaljnivån som varje rad i en tabell representerar. I en faktatabell avgör detaljnivån vilken affärshändelse eller mätning varje rad samlar in. I en dimensionstabell avgör detaljnivån hur entiteter representeras och versioneras.

Överväg ett IoT-sensordatascenario. Du kan utforma faktatabellen på olika kornighetsnivåer:

Diagram som förklarar vad kornighet representerar.

  • Granularitet på millisekundersnivå: Varje rad representerar en enda sensoravläsning som samlas in på millisekundersnivå. Detta samlar in den mest detaljerade informationen, inklusive exakta tidsstämplar, sensorvärden och enhetsidentifierare för varje mätning.

  • Andra aggregerade kornigheten: Varje rad representerar det genomsnittliga, lägsta eller högsta sensorvärdet för en enhet per sekund. Enskilda avläsningar sammanfattas i statistik per sekund.

  • Aggregerad kornighet per minut: Rad representerar aggregerad sensorstatistik för en enhet under en hel minut. Detta ger minst information men kräver minst lagring.

Det korn du väljer påverkar allt nedströms. När du förlorar information genom aggregering kan du inte återställa den. Om din minutaggregerade tabell visar att sensor X hade en medeltemperatur på 75°C under en viss minut kan du inte avgöra vilka millisekunder som hade temperaturtoppar eller identifiera exakt när en avvikelse inträffade.

Utvärdera faktorer som påverkar beslut om kornighet

Om du väljer rätt kornighet måste du balansera flera konkurrerande problem. Rätt val beror på din specifika affärskontext och tekniska begränsningar.

Affärskrav styr detaljnivån

De analytiska frågor som din organisation behöver besvara bör vara den primära faktorn för att fastställa kornighet. Fråga dig själv: vilken är den mest detaljerade analysnivån som krävs?

Om drifttekniker behöver identifiera utrustningsavvikelser på millisekundersnivå räcker det inte med aggregeringar per minut. Om hanteringen bara behöver sammanfattningar av timanvändning per produktionslinje, innebär lagring av varje sensoravläsning att resurser slösas bort.

Tänk på följande scenarier:

Affärskrav Minsta kornighet som krävs
Identifiera avvikelser för utrustningsvibrationer i realtid Händelsenivå för millisekunder
Analysera temperaturtrender för förutsägande underhåll Andra aggregeringsnivån
Övervaka energiförbrukning per timme per enhet Minut aggregerad nivå
Rapportera dagliga produktionsmått per anläggning Aggregeringsnivå varje timme

Frågemönster påverkar prestanda

Hur användare frågar efter dina data påverkar den optimala kornigheten. När frågor vanligtvis filtrerar och aggregerar till högre nivåer skapar lagring av alltför detaljerade data onödiga bearbetningskostnader. Varje fråga måste söka igenom och aggregera fler rader än nödvändigt.

Samtidigt förhindrar lagring av data med för grov kornighet användarna från att öka detaljnivån för att besvara detaljerade frågor. För att hitta balansen måste du förstå både aktuella och förväntade frågemönster.

Lagrings- och beräkningskostnader ackumuleras

Finare kornighet innebär fler rader, vilket ökar lagringskostnaderna. Det ökar också beräkningskostnaderna eftersom frågor måste bearbeta mer data. I Azure Databricks förvärras dessa kostnader över tid när historiska data ackumuleras.

En tillverkningsanläggning med tusentals sensorer som samlar in avläsningar med millisekunders intervall kan generera miljarder rader dagligen med den finaste kornigheten. Om du aggregerar till statistik per sekund eller per minut kan radantalet minskas med 99% eller mer, vilket kan översättas direkt till lägre lagrings- och frågekostnader.

Efterlevnads- och granskningskrav är viktiga

Regelkrav kräver ibland specifika kornighetsnivåer. Organisationer för finansiella tjänster måste ofta behålla detaljer på transaktionsnivå i granskningssyfte, oavsett lagringskostnader. Sjukvårdsorganisationer kan behöva spåra enskilda patientinteraktioner av efterlevnadsskäl.

När efterlevnaden styr granularitetsbeslutet dokumenterar du kraven tydligt. Den här motiveringen hjälper när intressenter ifrågasätter varför du lagrar mer information än vad enbart analysbehov skulle kräva.

Tillämpa kornighet på faktatabeller

Faktatabeller drar mest nytta av noggranna detaljnivåbeslut eftersom de vanligtvis innehåller de största datavolymerna. Kornet i en faktatabell bestäms av kombinationen av dess dimensionsnycklar.

En faktatabell för försäljning med dimensionsnycklar för datum, produkt, kund och butik har ett intervall på "en rad per produkt per kund per butik och dag". Varje unik kombination av dessa dimensionsvärden skapar en distinkt rad. Om du lägger till en nyckel för tidsdimension på timnivå ändras detaljiseringen till "en rad per produkt per kund per butik per timme," vilket ökar antalet rader avsevärt.

Tabell som förklarar hur du lägger till en timdimension i en faktatabell, ökar antalet rader.

Viktigt!

Deklarera faktatabellens korn explicit innan du lägger till några kolumner. Grain-statementet fungerar som ett kontrakt som styr alla efterföljande designbeslut. Till exempel: "Den här faktatabellen innehåller en rad per försäljningsorderradsobjekt."

När du utformar faktatabeller bör du överväga om du behöver:

  • Atomärt korn: Den mest detaljerade nivån som avbildas i källsystemet. Att välja atomisk kornighet ger maximal analytisk flexibilitet eftersom du alltid kan aggregera, men aldrig dela upp.

  • Aggregerat korn: Sammanfattade data på en högre nivå än källan. Sammanställda faktatabeller förbättrar frågeprestanda för vanliga analysmönster, men begränsar de frågor som användarna kan besvara.

Många organisationer underhåller både atomiska och aggregerade faktatabeller med aggregerade tabeller som prestandaoptimering samtidigt som atomiska detaljer bevaras för ad hoc-analys. I Azure Databricks kan materialiserade vyer automatiskt underhålla dessa aggregeringstabeller och uppdatera dem när underliggande atomdata ändras.

Använd detaljnivå på dimensionstabeller

Dimensionstabeller har också en granularitet, även om den fungerar på ett annat sätt än granulariteten i faktatabeller. Dimensionens detaljnivå avgör hur du representerar och versionerar dina affärsentiteter.

För en kunddimension kan du välja:

  • En rad per kund: Det aktuella tillståndet för varje kund, som uppdateras på plats när attributen ändras (SCD-typ 1).
  • En rad per kund per version: En ny rad för varje betydande ändring, vilket bevarar historiska tillstånd (SCD-typ 2).
  • En rad per kund per tidsperiod: Periodiska ögonblicksbilder som samlar in kundattribut med jämna mellanrum.

Det dimensionskorn du väljer måste överensstämma med faktatabellens korn. Om faktatabellen spårar enskilda transaktioner med surrogatnycklar till kunddimensionen måste kundens dimensionsintervall ha stöd för den relationen. En transaktion som refererar till kundversion 5 måste kunna hitta den specifika versionen i dimensionstabellen.

Balansera kompromisser när du väljer kornighet

Inget val av kornighet är universellt korrekt. Varje beslut innebär kompromisser som du måste utvärdera mot dina specifika krav.

Att tänka på Fin kornighet Grov kornighet
Analysflexibilitet Hög – kan svara på detaljerade frågor Låg – begränsad till aggregerad analys
Lagringskostnader Högre – fler rader att lagra Lägre – färre rader
Frågeprestanda Långsammare för aggregerade frågor Snabbare för vanliga mönster
Historisk analys Stödjer ögonblicksanalys Kan förlora historiska detaljer
Efterlevnadsstöd Bättre för granskningskrav Får inte uppfylla regler

När du är osäker är det ofta säkrare att börja med finare kornighet . Du kan alltid skapa aggregeringstabeller senare för prestandaoptimering, men du kan inte återställa detaljer som aldrig har avbildats. Den här vägledningen förutsätter dock att du har budget och infrastruktur för att stödja finkornig lagring från början.

Genom att förstå hur du väljer lämplig kornighet kan du utforma datamodeller som stöder organisationens analytiska behov samtidigt som du hanterar kostnaderna effektivt. Implementeringsinformationen för att skapa och läsa in tabeller vid din valda kornighet i Azure Databricks beskrivs i senare enheter.