Datenbankmodell
Dieses Dokument beschreibt, wo und in welcher Form die Platform Daten speichert. Es dient als Referenz für die Festlegung des Backup-Umfangs, für direkte Abfragen oder bei der Anpassung von Aufbewahrungsdauern.
Die Platform verwendet verschiedene Speicher orthogonal zu den Dateneigenschaften (Polyglot Persistence). Wenn nicht bekannt ist, welche Daten wo liegen, ist das Backup unvollständig.
| Speicher | Inhalt | Umfang |
|---|---|---|
| PostgreSQL | Stammdaten · Konfiguration · Transaktionen | pp Schema 169 Tabellen + Vor-Ort App pf Schema |
Aster TSDB (pp) | Zeitreihe · Events · Aggregationen · KPI | 125 Tabellen |
Iceberg (spark.plantpulse) | Langzeitarchivierung · Analyse | 1 Tabelle |
PostgreSQL — Stammdaten und Konfiguration
Hier werden relationale Daten gespeichert. Schemaänderungen werden über Flyway verwaltet, und die Historie wird in flyway_schema_history_v2 protokolliert.
Die Tabellennamen bestehen zu einem Großteil aus 159 Tabellen mit dem mm_-Präfix (master/meta). Eine vollständige Liste nach Gruppen finden Sie unten.
| Gruppe | Repräsentative Tabellen |
|---|---|
| Organisation·Anlage | mm_asset_tree · mm_enterprise · mm_site · mm_area · mm_line · mm_equipment · mm_asset_class |
| Erfassungsdefinition | mm_opc · mm_tag · mm_point · mm_edge |
| Alarm | mm_alarm · mm_alarm_config · mm_alarm_delivery · mm_alarm_suppressed · mm_alarm_shelve · mm_alarm_out_of_service |
| Produktion | mm_order · mm_order_oee · mm_product · mm_shift · mm_calendar |
| Instandhaltung·Ausfall | mm_maintenance_order · mm_maintenance_plan · mm_failure_record |
| Personen·Lieferanten | mm_employee · mm_customer |
| Sicherheit | mm_security · mm_token · user_login · user_login_session |
Beziehungen — Anlage und Erfassung
mm_asset_tree In einer Tabelle sind alle fünf Ebenen enthalten: Unternehmen(E) → Site(S) → Bereich(A) → Linie(L) → Anlage(M).
Spalten, die auf allen Ebenen existieren (wie Name, Beschreibung, Anlagenklassifizierung, Betriebszustand, externe Nummer), befinden sich ausschließlich im Tree — in mm_site gibt es kein site_name, in mm_enterprise gibt es kein enterprise_name. Ebenenspezifische Spalten liegen in 1:1 Erweiterungstabellen(mm_enterprise · mm_site · mm_area · mm_line · mm_equipment) und werden gelöscht, wenn die entsprechende Tree-Zeile entfernt wird.
| Regel | Umsetzung |
|---|---|
| Parent ist die Ebene direkt darüber; ab Bereich ist die Site identisch | Fremdschlüssel fk_mm_asset_tree_parent · fk_mm_asset_tree_parent_site |
Nur Unternehmen ist die Wurzel; Unternehmen hat kein site_id; Site site_id ist sich selbst | CHECK-Constraint |
ID-Format pro Ebene — offizielles Präfix oder altes ASSET_ | CHECK chk_asset_id |
| Spalten nur für Anlagen (Workorder, Instandhaltung, Kalender etc.) | Fremdschlüssel auf mm_equipment |
Die Standortpfade werden über die View mv_path bereitgestellt — pro Knoten asset_type · depth(Unternehmen 0 ~ Anlage 4) · enterprise_id · site_id · area_id · line_id · equipment_id · id_path · name_path.
Beziehungen — Alarm
Beziehungen — Produktion und Benutzer
Die oben genannten Beziehungen sind größtenteils als Fremdschlüssel definiert. Ein direktes DELETE referenzierter Zeilen wird daher abgelehnt oder führt je nach Tabelle zu einem Kaskadenlöschvorgang
(ON DELETE CASCADE). Nutzen Sie für Löschvorgänge die Benutzeroberfläche oder die REST API.
Gesamte Tabellen (169)
| Gruppe | Tabellen |
|---|---|
| Organisation·Anlage (29) | mm_area · mm_area_function · mm_asset_class · mm_asset_class_iso_class · mm_asset_connection_status · mm_asset_document · mm_asset_health_status · mm_asset_layout · mm_asset_plan_generation · mm_asset_plan_segment · mm_asset_qr_access_audit · mm_asset_qr_token · mm_asset_relation · mm_asset_standard_profile · mm_asset_status · mm_asset_tree · mm_asset_type · mm_canvas · mm_enterprise · mm_equipment · mm_equipment_criticality · mm_image · mm_line · mm_line_kind · mm_operational_status · mm_site · mm_stats_site · mm_stats_system · mm_status |
| Erfassungsdefinition (11) | mm_edge · mm_edge_status_snapshot · mm_opc · mm_opc_connection_status · mm_opc_latency_status · mm_opc_protocol · mm_opc_source_type · mm_point · mm_tag · mm_tag_java_type · mm_tag_type |
| Alarm (16) | mm_alarm · mm_alarm_cause · mm_alarm_config · mm_alarm_config_recipient · mm_alarm_config_revision · mm_alarm_delay · mm_alarm_delivery · mm_alarm_label_revision · mm_alarm_notification · mm_alarm_out_of_service · mm_alarm_resolution_guide · mm_alarm_resolution_guide_cause · mm_alarm_shelve · mm_alarm_signal_gap · mm_alarm_suppressed · mm_tag_alarm_recipient |
| Anlagenbefehl·Statement (13) | mm_asset_command · mm_asset_command_revision · mm_asset_statement · mm_asset_statement_deployment · mm_asset_statement_plugin · mm_asset_statement_revision · mm_command_area · mm_command_execution · mm_command_execution_event · mm_command_switch · mm_command_switch_audit · mm_event · mm_event_attributes |
| Produktion (35) | mm_calendar · mm_calendar_revision · mm_calendar_type · mm_defect_cause · mm_defect_record · mm_defect_record_revision · mm_holiday · mm_order · mm_order_ems · mm_order_flow · mm_order_note · mm_order_oee · mm_order_pause · mm_order_performance · mm_order_progress · mm_order_quantity_correction · mm_order_quantity_correction_revision · mm_order_ram · mm_order_revision · mm_process_segment · mm_process_segment_asset · mm_product · mm_product_route · mm_product_standard_profile · mm_production_target · mm_shift · mm_shift_override · mm_shift_pattern · mm_shift_pattern_asset · mm_shift_pattern_slot · mm_shift_schedule_revision · mm_shift_slot_break · mm_stop_cause · mm_stop_reason · mm_stop_reason_revision |
| Instandhaltung·Ausfall (25) | mm_failure_record · mm_failure_record_change · mm_failure_record_label · mm_failure_record_link · mm_fault_cause · mm_fault_cause_alarm_cause · mm_fault_code_map · mm_fault_code_map_history · mm_iso_detection_method · mm_iso_equipment_category · mm_iso_equipment_class · mm_iso_failure_cause · mm_iso_failure_mechanism · mm_iso_failure_mode · mm_iso_failure_mode_class · mm_iso_maintainable_item · mm_iso_maintainable_item_class · mm_iso_maintenance_activity · mm_maintenance_attachment · mm_maintenance_code_map · mm_maintenance_code_map_history · mm_maintenance_order · mm_maintenance_order_revision · mm_maintenance_plan · mm_maintenance_plan_revision |
| Personen·Lieferanten (10) | mm_app_account · mm_app_account_audit · mm_app_account_revision · mm_app_account_scope · mm_customer · mm_employee · mm_employee_audit · mm_employee_emergency_contact · mm_employee_photo · mm_employee_qualification |
| Flow (5) | mm_flow · mm_flow_health_status · mm_flow_link · mm_flow_node · mm_flow_snapshot |
| Sicherheit (3) | mm_security · mm_security_asset_scope · mm_token |
| Sonstiges (22) | mm_blob · mm_config · mm_diagnostic_code · mm_diagnostic_state · mm_metadata · mm_query_history · mm_reference_external_key · mm_reference_revision · mm_reference_text · mm_report · mm_schedule_fire_log · mm_schedule_watermark · dual · edge_active_flows · flow_snapshots · flyway_schema_history_v2 · metadata · node_component · user_login · user_login_session · version · version_history |
Aster TSDB — Zeitreihe und Events
Der Keyspace ist pp. Die 125 Tabellen teilen sich in zwei Kategorien auf.
| Präfix | Anzahl | Bedeutung |
|---|---|---|
tm_ | 117 | Zeitreihe·Aggregation·Statistik·KPI (time series measurement) |
ts_ | 8 | Interne Struktur der generischen Zeitreihen-Engine |
tm_ ist weiter unterteilt nach Objekttyp — Tags (32), KPIs (26), Anlagen (17), Systeme (6), Monitore (6), Optionen (5), OPC (5), Sites (3), Blobs (3) etc.
Kerntabellen — tm_tag_point
Hier werden die Rohwerte der Erfassung gespeichert. Die meisten anderen Tag-Tabellen sind Ableitungen hiervon.
PRIMARY KEY (tag_id, timestamp)
WITH CLUSTERING ORDER BY (timestamp DESC)
| Eigenschaft | Wert |
|---|---|
| Partition Key | tag_id — Ein Tag pro Partition |
| Clustering | timestamp absteigend — Standardmäßig neueste Werte zuerst |
| Standard-TTL | 315360000 Sek. = 3650 Tage (10 Jahre) — Die Referenzwerte liegen in storage.tag.point.ttl (Aufbewahrungsdauer einstellen) |
| Compaction | UnifiedCompactionStrategy (Cassandra 5.0+ Feature) |
| Index | SAI (Storage Attached Index) auf asset_id · opc_id |
Die Spalten site_id · asset_id · line_id · area_id · opc_id · tag_name · type sind statisch. Da sie innerhalb eines Tags (= einer Partition) gleichbleibend sind, werden sie nur einmal pro Partition gespeichert. Dies reduziert den Speicherbedarf erheblich, da sie nicht bei jedem Datenpunkt wiederholt werden.
Abgeleitete Tabellen — Vorberechnung
Da Aggregationen zum Zeitpunkt der Abfrage in Aster TSDB rechenintensiv sind, werden diese bereits beim Schreiben vorbereitet. Daher gibt es eine hohe Anzahl an Tabellen.
| Kategorie | Beispiel |
|---|---|
| Aggregation | tm_tag_point_aggregation_{1,5,10,30}_minutes · _1_hours |
| Sampling | tm_tag_point_sampling_{10,30}_seconds · _{1,5,10,30}_minutes · _1_hours |
| Count | tm_tag_point_count · _by_date · _by_opc · _by_site |
| Qualität·Validierung | tm_tag_point_validation · _by_timestamp · _validation_count |
| KI-Analyse | tm_tag_point_anomalies · _forecasts |
| Snapshot·Archiv | tm_tag_point_snapshot · tm_tag_point_archive |
Alarme folgen demselben Prinzip — tm_tag_alarm sowie _count · _count_by_date · _count_by_opc, _count_by_site · _duration · _on.
Diese Daten werden nicht automatisch aus den Rohdaten regeneriert. Bei einer Löschung bleiben Bildschirme und Berichte für diesen Zeitraum leer; eine Wiederherstellung ist nur über Backups möglich.
KPI-Tabellen — OEE · RAM · EMS
Anlagen-KPIs (OEE · RAM · EMS) werden in 26 Tabellen gespeichert, die mit tm_kpi_ beginnen — domänenspezifisch unterteilt in tm_kpi_oee_* · tm_kpi_ram_* · tm_kpi_ems_*. Ein Calculation Job berechnet die Werte pro Anlage etwa alle 10 Sekunden.
tm_asset_oee* · tm_asset_ram* · tm_asset_ems* existieren nicht mehrKPIs werden nur noch in den neuen Tabellen geschrieben. Abfragen und Berichte, die auf alten Namen basieren, müssen an die neuen Tabellen und Partition Keys angepasst werden. Da sich der Key geändert hat, führen alte Filterbedingungen nicht zu Fehlern, sondern zu leeren Ergebnissen, die nicht von einem «Keine Daten»-Status unterscheidbar sind.
Die Tabellen sind nach ihrer Funktion in vier Kategorien unterteilt:
| Kategorie | Name | Primärschlüssel | Bedeutung einer Zeile |
|---|---|---|---|
| Aktueller Wert | tm_kpi_*_current | (asset_id) | Aktueller Wert der Anlage — eine Zeile pro Anlage, bei jeder Berechnung überschrieben |
| Pro Auftrag | tm_kpi_oee_order · tm_kpi_ems_order | (order_id) | Wert eines einzelnen Arbeitsauftrags — eine Zeile pro Auftrag, bleibt nach Abschluss erhalten |
| Historie | tm_kpi_*_history etc. | ((asset_id, day), timestamp) | Wert eines einzelnen Berechnungsticks — Partitionierung nach UTC-Datum, neueste zuerst |
| Rollup | tm_kpi_*_rollup | ((scope, scope_id, day), timestamp) | Aggregierte Werte auf Ebene von Linie · Bereich · Site · Unternehmen |
- Buckets basieren auf dem UTC-Datum.
dayistyyyymmdd,monthistyyyymm(Integer) und stellt das Datum dar, wenn die Zeilen-Spaltetimestampals UTC betrachtet wird — nicht Mitternacht Ortszeit. Ein lokaler Tag erstreckt sich daher über zwei UTC-Buckets (Zeilen von 00:00 bis 08:59 KST liegen im UTC-Bucket des Vortages). - Selten auftretende Daten nutzen Monats-Buckets — Anlagenzustand(
tm_kpi_oee_status), Ausfälle(tm_kpi_ram_failure·_failure_rollup) und Kraftstoff(tm_kpi_ems_fuel) werden übermonthpartitioniert. - Rollup
scopeist einer der Werte ausLINE·AREA·SITE·ENTERPRISE, undscope_idist die ID der entsprechenden Linie, des Bereichs oder der Site. Die Unternehmensebene wird überscope_id = 'ALL'definiert. - Ursachenzähler (Cause Counter)
tm_kpi_oee_defect_cause·_stop_cause·_fault_causespeichern die Tageskumuliere nach Fehler- und Ausfallursachen. Der Primärschlüssel ist((asset_id, month), date, cause_code). - Historienzeilen sind auftragsspezifische Kumuliere. Eine Zeile in
*_historyenthält den Gesamtwert des Auftrags (Betriebszeit, Produktionsmenge, Energie etc.) bis zu diesem Tick. Addieren Sie die Zeilen nicht — für Periodenwerte lesen Sie die letzte Zeile pro Auftrag oder die Zeile*_order. - Dauern von Anlagenzuständen werden nicht gespeichert.
tm_kpi_oee_statusenthält nur den Zeitpunkt der Änderung. Ein Zustand gilt bis zum Zeitpunkt der nächsten Zeile. Lesen Sie Buckets fortlaufend, anstatt sie an Monatsgrenzen abzuschneiden.
Setzen Sie sowohl asset_id als auch day (oder month) in die Bedingung. Verwenden Sie ALLOW FILTERING nicht. Bei Zeitraumabfragen lösen Sie das Intervall in eine Liste von UTC-Daten auf und lesen pro Bucket einmal.
SELECT timestamp, oee, availability, performance, quality
FROM pp.tm_kpi_oee_history
WHERE asset_id = 'EQUIPMENT_000001' AND day = 20260925
AND timestamp >= '2026-09-25 00:00:00+0000';
Für werkspezifische Werte lesen Sie die Anlagenliste aus PostgreSQL und rufen für jede Anlage tm_kpi_*_current ab. Die Site-Summe entspricht scope = 'SITE' in der Rollup-Tabelle.
Die Aufbewahrungsdauer beträgt 5 Jahre. Die Standard-TTL für Tabellen mit Buckets (Historie, Events, Zustände, Rollups etc.) ist 157680000 Sek. (1825 Tage), wobei die Referenzwerte in storage.asset.kpi.ttl (oder storage.asset.standard.ttl) liegen (Aufbewahrungsdauer einstellen). Aktuelle Werte(*_current), auftragsbezogene Werte(*_order) und Ursachenzähler haben keine TTL. 14 Historientabellen werden täglich in die tw_kpi_* von Iceberg kopiert, sodass sie auch nach Ablauf der 5 Jahre in Aster TSDB in Iceberg abfragbar bleiben. In Iceberg erfolgt keine Löschung.
Partitionierung — Partition Keys als Abfrageachsen
In Aster TSDB gibt es keine Joins. Tabellen werden passend zur Abfrageart erstellt — daher existieren 125 Tabellen. Dass dieselben Daten in mehreren Tabellen mit unterschiedlichen Partition Keys liegen, ist ein Designmerkmal und keine Redundanz.
| Partition Key Format | Verwendungszweck | Beispiel |
|---|---|---|
(tag_id) + timestamp | Zeitachsenabfrage eines einzelnen Tags | tm_tag_point |
(asset_id, date, hour) + timestamp | Tages- oder Stundenintervall einer Anlage | tm_asset_data |
(asset_id, day) + timestamp | UTC-Tages-KPI einer Anlage | tm_kpi_oee_history |
(scope, scope_id, day) + timestamp | UTC-Tages-KPI von Linie·Bereich·Site·Unternehmen | tm_kpi_oee_rollup |
(site_id, year, month, day) | Aggregation auf Site-Ebene | tm_site_summary |
Nur (id) | Aktueller Wert — keine Zeitachse, daher kein Ablauf | *_count, *_last_update, tm_kpi_*_current |
Gesamte Tabellen (125)
Tags · Punkte (32)
| Tabelle | Primärschlüssel (Partition · Clustering) |
|---|---|
tm_tag_alarm | tag_id, alarm_seq |
tm_tag_alarm_count | `` |
tm_tag_alarm_count_by_date | tag_id, year, month, day, hour, minute |
tm_tag_alarm_count_by_opc | (opc_id, tag_id), year, month, day, hour, minute |
tm_tag_alarm_count_by_site | (site_id, tag_id), year, month, day, hour, minute |
tm_tag_alarm_duration | alarm_config_id, alarm_seq |
tm_tag_alarm_on | `` |
tm_tag_point | tag_id, timestamp |
tm_tag_point_aggregation_10_minutes | tag_id, timestamp |
tm_tag_point_aggregation_1_hours | tag_id, timestamp |
tm_tag_point_aggregation_1_minutes | tag_id, timestamp |
tm_tag_point_aggregation_30_minutes | tag_id, timestamp |
tm_tag_point_aggregation_5_minutes | tag_id, timestamp |
tm_tag_point_anomalies | job_id, timestamp, tag_id |
tm_tag_point_archive | (site_id, year, month, day, hour), minute, second, tuuid |
tm_tag_point_count | `` |
tm_tag_point_count_by_date | tag_id, year, month, day, hour, minute |
tm_tag_point_count_by_opc | `` |
tm_tag_point_count_by_site | `` |
tm_tag_point_forecasts | job_id, timestamp, tag_id |
tm_tag_point_map | (year, month, day, hour, minute), timestamp |
tm_tag_point_sampling_10_minutes | tag_id, timestamp |
tm_tag_point_sampling_10_seconds | tag_id, timestamp |
tm_tag_point_sampling_1_hours | tag_id, timestamp |
tm_tag_point_sampling_1_minutes | tag_id, timestamp |
tm_tag_point_sampling_30_minutes | tag_id, timestamp |
tm_tag_point_sampling_30_seconds | tag_id, timestamp |
tm_tag_point_sampling_5_minutes | tag_id, timestamp |
tm_tag_point_snapshot | (site_id, snapshot_id, date), timestamp |
tm_tag_point_validation | tag_id, timestamp |
tm_tag_point_validation_by_timestamp | yyyymmdd, timestamp, tag_id |
tm_tag_point_validation_count | tag_id, year, month, day, hour, minute |
Anlagen (17)
| Tabelle | Primärschlüssel (Partition · Clustering) |
|---|---|
tm_asset_aggregation | asset_id, timestamp |
tm_asset_alarm | asset_id, alarm_seq |
tm_asset_command | asset_id, timestamp |
tm_asset_connection_status | asset_id, timestamp |
tm_asset_context | asset_id, timestamp |
tm_asset_data | (asset_id, date, hour), timestamp |
tm_asset_data_anomalies | job_id, timestamp, asset_id, tag_id |
tm_asset_data_based_day | asset_id, timestamp |
tm_asset_data_based_hour | asset_id, timestamp |
tm_asset_data_based_minute | (asset_id, date), timestamp |
tm_asset_data_based_second | (asset_id, date, hour), timestamp |
tm_asset_data_based_timestamp | (asset_id, date, hour), timestamp |
tm_asset_data_forecasts | job_id, timestamp, asset_id, tag_id |
tm_asset_event | asset_id, timestamp |
tm_asset_health_status | asset_id, timestamp |
tm_asset_status | asset_id, timestamp |
tm_asset_timeline | asset_id, timestamp, timeline_group, timeline_type |
KPI — OEE · RAM · EMS (26)
Die Spalte «Tag» in den Bucket-Feldern entspricht day (UTC yyyymmdd) und «Monat» entspricht month (UTC yyyymm). Die Werte des Ursachenzählers month werden aus date abgeleitet. Details zur Abfrage finden Sie im Abschnitt KPI-Tabellen.
| Tabelle | Primärschlüssel (Partition · Clustering) | Bucket | Inhalt |
|---|---|---|---|
tm_kpi_oee_current | asset_id | — | Aktueller OEE der Anlage |
tm_kpi_oee_order | order_id | — | OEE eines Arbeitsauftrags |
tm_kpi_oee_history | (asset_id, day), timestamp | Tag | OEE pro Berechnungstick (Auftragskumulativ) |
tm_kpi_oee_event | (asset_id, day), timestamp | Tag | OEE-Eingabe-Events |
tm_kpi_oee_count | (asset_id, day), timestamp | Tag | Gut-/Ausschussproduktionsmenge (Lot · Serial) |
tm_kpi_oee_rolling | (asset_id, day), timestamp | Tag | OEE der letzten N Minuten |
tm_kpi_oee_rollup | (scope, scope_id, day), timestamp | Tag | OEE von Linie · Bereich · Site · Unternehmen |
tm_kpi_oee_status | (asset_id, month), timestamp | Monat | Änderung des Anlagenzustands |
tm_kpi_oee_status_current | asset_id | — | Letzter Zustand der Anlage |
tm_kpi_oee_defect_cause | (asset_id, month), date, cause_code | Monat | Tageskumulierte Ausschussursachen (Zähler) |
tm_kpi_oee_stop_cause | (asset_id, month), date, cause_code | Monat | Tageskumulierte Stillstandursachen (Zähler) |
tm_kpi_oee_fault_cause | (asset_id, month), date, cause_code | Monat | Tageskumulierte Ausfallursachen (Zähler) |
tm_kpi_ram_current | asset_id | — | Aktueller RAM der Anlage |
tm_kpi_ram_history | (asset_id, day), timestamp | Tag | RAM pro Berechnungstick (Auftragskumulativ) |
tm_kpi_ram_failure | (asset_id, month), timestamp | Monat | Ausfall-Start- und End-Events |
tm_kpi_ram_failure_rollup | (scope, scope_id, month), timestamp, asset_id | Monat | Ausfall-Events von Linie · Bereich · Site |
tm_kpi_ram_rolling | (asset_id, day), timestamp | Tag | RAM der letzten N Minuten |
tm_kpi_ram_rollup | (scope, scope_id, day), timestamp | Tag | RAM von Linie · Bereich · Site · Unternehmen |
tm_kpi_ems_current | asset_id | — | Aktueller EMS der Anlage |
tm_kpi_ems_order | order_id | — | EMS eines Arbeitsauftrags |
tm_kpi_ems_history | (asset_id, day), timestamp | Tag | EMS pro Berechnungstick (Auftragskumulativ) |
tm_kpi_ems_power | (asset_id, day), timestamp | Tag | Strommessungs-Events (kW · kWh) |
tm_kpi_ems_power_rollup | (scope, scope_id, day), timestamp, asset_id | Tag | Strom-Events von Linie · Bereich · Site |
tm_kpi_ems_fuel | (asset_id, month), timestamp | Monat | Kraftstoffmessungs-Events (Scope 1) |
tm_kpi_ems_rolling | (asset_id, day), timestamp | Tag | EMS der letzten N Minuten |
tm_kpi_ems_rollup | (scope, scope_id, day), timestamp | Tag | EMS von Linie · Bereich · Site · Unternehmen |
Erfassung · Site (8)
| Tabelle | Primärschlüssel (Partition · Clustering) |
|---|---|
tm_opc_connection_latency_history | opc_id, timestamp |
tm_opc_connection_status_history | opc_id, timestamp |
tm_opc_point_count | `` |
tm_opc_point_count_by_date | opc_id, year, month, day, hour, minute |
tm_opc_point_last_update | `` |
tm_site_status | site_id, timestamp |
tm_site_summary | site_id, year, month, day, hour, minute |
tm_site_summary_total | `` |
Monitoring (13)
| Tabelle | Primärschlüssel (Partition · Clustering) |
|---|---|
tm_monitor_cep_metrics | type, timestamp |
tm_monitor_cluster_metrics | type, ip, timestamp |
tm_monitor_cluster_status | type, ip, timestamp |
tm_monitor_nodes | type, ip |
tm_monitor_platform_health | type, ip, timestamp |
tm_monitor_platform_status | type, ip, timestamp |
tm_system_health_status | app_name, timestamp |
tm_system_log | app_name, timestamp, seq |
tm_system_log_count | (app_name, level), year, month, day, hour, minute |
tm_system_log_hourly | app_name, bucket_start, instance_id, level |
tm_system_properties | property, timestamp |
tm_system_start_date | `` |
tm_system_trend | year, month, day, hour |
Batch · Audit (4)
| Tabelle | Primärschlüssel (Partition · Clustering) |
|---|---|
tm_batch_audit | yyyymmdd, timestamp, id |
tm_batch_job_run | yyyymmdd, timestamp, id |
tm_warehouse_audit | yyyymmdd, timestamp, id |
tm_warehouse_storage_usage_daily | year_bucket, day, table_name |
Zeitreihen-Engine (TSE-spezifisch) (8)
| Tabelle | Primärschlüssel (Partition · Clustering) |
|---|---|
ts_data_points | key, column1 |
ts_row_key_index | key, column1 |
ts_row_key_time_index | metric, table_name, row_time |
ts_row_keys | (metric, table_name, row_time), data_type, tags |
ts_service_index | (service, service_key), key |
ts_spec | spec_type, name |
ts_string_index | key, column1 |
ts_tag_indexed_row_keys | (metric, table_name, row_time, single_tag_pair), data_type, tag_collection_hash, tags |
Sonstiges (17)
| Tabelle | Primärschlüssel (Partition · Clustering) |
|---|---|
tm_blob | blob_id, timestamp |
tm_blob_count_and_size | `` |
tm_blob_object | `` |
tm_data_gateway_count | `` |
tm_data_gateway_log | lang, timestamp |
tm_database_size | keyspace_name, date |
tm_diagnostic | year, timestamp |
tm_diagnostic_count | year, level |
tm_domain_change_history | (domain_type, object_id), timestamp |
tm_edge_status | `` |
tm_option_eql_listener_result | `` |
tm_option_eql_statement | `` |
tm_option_eql_statement_history | stmt_name, timestamp |
tm_option_job_trigger_history | job_name, context_fire_time |
tm_option_listener_push_cache | url, timestamp |
tm_pipeline_exception_history | bucket, timestamp, type, object_id |
tm_trigger_result | trigger_id, timestamp |
Iceberg — Langzeitarchivierung
Daten aus Archivtabellen(tm_tag_point_archive, Standard 365 Tage) werden in einem Object Storage für Analysen gesammelt. Die Daten fließen nicht direkt aus den Originaltabellen, sondern über das Archiv.
| Element | Wert |
|---|---|
| Katalog | spark.plantpulse |
| Tabellen | tw_tag_point — Zeitreihen von Tags. Es gibt 9 Typen, die mit tw_asset_* · tw_blob etc. tw_ beginnen. Für KPIs gibt es 14 separate Typen in tw_kpi_* |
| Partition | site_id → year → month → day |
| Format | Iceberg v2 (Unterstützung von Row-Level Delete) |
| Kompression | Zstandard |
| Ausführung | Spark SQL |
KPI-Archiv — tw_kpi_*
KPIs werden ohne Umweg über Archivtabellen direkt aus tm_kpi_* übertragen. Da jeden Morgen die Daten des Vortages kopiert werden, liegen aktuelle Daten sowohl in Aster TSDB als auch in Iceberg; Daten, die älter als 5 Jahre (TTL) sind, verbleiben nur in Iceberg. In Iceberg erfolgt keine Löschung. Die Partitionen folgen dem Schema year → month → day (für Monats-Bucket-Tabellen year → month).
| Aster TSDB | Iceberg |
|---|---|
tm_kpi_oee_history · _event · _count · _status · _rollup | tw_kpi_oee_history · _event · _count · _status · _rollup |
tm_kpi_ram_history · _failure · _rollup · _failure_rollup | tw_kpi_ram_history · _failure · _rollup · _failure_rollup |
tm_kpi_ems_history · _power · _fuel · _rollup · _power_rollup | tw_kpi_ems_history · _power · _fuel · _rollup · _power_rollup |
Aktuelle Werte(*_current · oee_status_current), auftragsbezogene Werte(*_order), Werte der letzten N Minuten(*_rolling) und Ursachenzähler(*_cause) werden nicht übertragen, da sie entweder keine Historie darstellen oder aus der Historie neu berechnet werden können.
Diese Daten befinden sich nicht mehr in Aster TSDB. Bitte fragen Sie in Iceberg ab → Analyseschicht. Die aufbewahrungsdauer pro Tabelle ist unter Aufbewahrungsdauer (TTL) einstellen aufgeführt.
Häufige Fehler beim Backup
Alle drei Speicher müssen einzeln gesichert werden. Wer nur PostgreSQL sichert, verliert die gesamten Zeitreihen.
| Speicher | Folge bei Fehlen |
|---|---|
| PostgreSQL | Definitionen von Anlagen·Tags, Benutzer und Dashboards gehen verloren |
| Aster TSDB | Zeitreihen innerhalb der Aufbewahrungsdauer gehen verloren |
| Iceberg / Object Storage | Langzeithistorie geht verloren |
Weitere Details entnehmen Sie bitte dem Dokument Backup und Wiederherstellung.
Verwandte Dokumente
- Backup und Wiederherstellung
- Storage-Schicht · Analyseschicht
- Domänen-ID-Regeln — Präfixe
SITE_·EQUIPMENT_·TAG_ - Datenbankverwaltung — Installation·Betrieb