2017-04-20 2 views
3

Ich habe einen mehrdimensionalen OLAP Cube für Sales.Aber ich habe riesige Datenbank.Erstens habe ich Olap Cube volle Verarbeitung. Aber jedes Mal wird es voll tun, so wird es viel Zeit in Anspruch nehmen. Ich muss inkrementelle Verarbeitung tun.Aber ich habe nicht irgendeine Frist für dieses Thema. Können Sie mir helfen?Wie kann ich die inkrementelle OLAP-Verarbeitung durchführen?

Wie soll ich einem Pfad folgen? Ich fand einige Artikel zu diesem Thema zum Beispiel this eins.

Aber ich weiß nicht, was ich schreiben werde, wo Bedingung in Partition Abfrage.

enter image description here

Antwort

2

Eine typische Art und Weise Faktentabellen zu partitionieren ist nach Datum. Sie haben eine Sales_TransactionDate Spalte in Ihrer Quelle, also wäre dies eine offensichtliche Wahl als Partitionierungsattribut.

Abhängig von Ihrem Datenvolumen und somit der Anzahl der Partitionen, die Sie erstellen möchten, können Sie nach Jahr, Monat, Tag oder irgendetwas dazwischen partitionieren.

Die Idee ist, dass Sie den gesamten Würfel nur einmal verarbeiten würden. Dann, jede (zum Beispiel) Nacht, verarbeiten Sie nur die Partition für den aktuellen (zum Beispiel) Monat neu. Dies funktioniert nur, wenn es stimmt, dass ältere Daten (d. H. Daten bis zum Ende des letzten (beispielsweise) Monats) sich niemals im Quellsystem ändern. Wenn es sich geändert hat, würden Sie die Änderungen verpassen, weil die Partition des letzten Monats nicht mehr verarbeitet wird.

Das ist also ein wichtiger Punkt für die inkrementelle Verarbeitung. Sie müssen wissen, wie lange nach dem ersten Auftreten Daten im Quellsystem geändert werden können (offensichtlich nur Änderungen, die für den Würfel relevant sind - wenn eine Spalte, die der Würfel nicht verwendet, sich ändert, ist das egal) und in welchem ​​Stadium es sich in einen unveränderlichen Zustand niederschlägt.

Es ist eine ETL Frage, damit zusammen, wie (wenn überhaupt) Sie verwenden Typ2 langsam ändernden Attribute, und ob das Quellsystem hat keinen Hinweis auf, wenn eine Zeile wurde zuletzt aktualisiert (zB ein Lastupdated Datetime Säule).

(Edit - nach unten Kommentar)

Sie benötigen eine Partitionsgröße anpassen, so dass Sie alle möglichen Änderungen garantiert sind, nur um zu erfassen, indem die letzte Partition zu verarbeiten. Wenn sich eine Zeile beispielsweise bis zu 6 Monate nach dem Transaktionsdatum (oder dem von Ihnen zur Partitionierung verwendeten Datum) ändern kann, müssen Sie die letzten 6 Datenmonate verarbeiten, um keine Änderungen zu verpassen.

Diese Einschränkung wirkt sich jedoch nur auf die Größe der letzten Partition aus - ältere Partitionen können beliebig skaliert werden. Sie können die Verarbeitungsmenge in der letzten Partition reduzieren, wenn im Quellsystem ein Mechanismus vorhanden ist, der Zeilen als "geändert" markiert. (Ein Beispiel ist eine "LastUpdated" -Spalte, die immer auf das aktuelle Datum/die aktuelle Uhrzeit gesetzt wird, wenn die Zeile aktualisiert wird. Ein anderes ist SQL CDC).

+0

Hallo SebTHU, können Sie einen weiteren Vorschlag für inkrementelle Olap Cube geben? –

+0

Ich brauche ein Beispiel –

+1

@SebTHU - Zur Verdeutlichung sollte LastUpdated nur verwendet werden, sobald es statisch wird. Wenn LastUpdated nach der Verarbeitung des Cubes geändert wird, muss die alte Partition erneut mit der neuen Partition verarbeitet werden, um sicherzustellen, dass der Datensatz nicht doppelt gezählt wird. –

Verwandte Themen