window.ExamData = window.ExamData || {};
window.ExamData['dp-203'] = {
  meta: {
    id: 'dp-203',
    title: {
      en: 'Data Engineering on Microsoft Azure',
      de: 'Data Engineering auf Microsoft Azure'
    },
    description: {
      en: 'This exam measures your ability to design and implement data storage, develop data processing, and secure, monitor, and optimize data storage and processing.',
      de: 'Diese Prüfung misst Ihre Fähigkeit, Datenspeicherung zu entwerfen und zu implementieren, Datenverarbeitung zu entwickeln sowie Datenspeicherung und -verarbeitung zu sichern, zu überwachen und zu optimieren.'
    },
    icon: '💾',
    level: 'associate',
    passingScore: 700,
    totalTime: 120,
    questionCount: '40-60',
    msLearnUrl: 'https://learn.microsoft.com/en-us/certifications/exams/dp-203/',
    domains: [
      {
        name: {
          en: 'Design and Implement Data Storage',
          de: 'Datenspeicherung entwerfen und implementieren'
        },
        weight: '15-20%',
        objectives: [
          {
            en: 'Design analytical storage and data lake layouts',
            de: 'Analytische Speicher- und Data-Lake-Layouts entwerfen'
          },
          {
            en: 'Model data with fact and dimension tables',
            de: 'Daten mit Fakten- und Dimensionstabellen modellieren'
          },
          {
            en: 'Choose ingestion and partitioning strategies',
            de: 'Strategien für Laden und Partitionierung auswählen'
          }
        ]
      },
      {
        name: {
          en: 'Develop Data Processing',
          de: 'Datenverarbeitung entwickeln'
        },
        weight: '40-45%',
        objectives: [
          {
            en: 'Build batch and streaming pipelines',
            de: 'Batch- und Streamingpipelines erstellen'
          },
          {
            en: 'Transform data with ADF, Synapse, and Databricks',
            de: 'Daten mit ADF, Synapse und Databricks transformieren'
          },
          {
            en: 'Process structured, semi-structured, and streaming data',
            de: 'Strukturierte, semistrukturierte und Streamingdaten verarbeiten'
          }
        ]
      },
      {
        name: {
          en: 'Secure, Monitor, and Optimize Data Storage and Data Processing',
          de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren'
        },
        weight: '30-35%',
        objectives: [
          {
            en: 'Implement security controls and encryption',
            de: 'Sicherheitskontrollen und Verschlüsselung implementieren'
          },
          {
            en: 'Monitor pipelines and data platforms',
            de: 'Pipelines und Datenplattformen überwachen'
          },
          {
            en: 'Tune performance and govern data assets',
            de: 'Leistung optimieren und Datenbestände verwalten'
          }
        ]
      }
    ]
  },
  questions: [
    {
      id: 'dp203-001', type: 'single',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'Which capability is enabled when you use Azure Data Lake Storage Gen2 with a hierarchical namespace?',
        de: 'Welche Funktion wird bereitgestellt, wenn Sie Azure Data Lake Storage Gen2 mit einem hierarchischen Namespace verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'Atomic directory operations and POSIX-style ACLs', de: 'Atomare Verzeichnisoperationen und ACLs im POSIX-Stil' } },
        { id: 'B', text: { en: 'Automatic star schema creation', de: 'Automatische Erstellung eines Sternschemas' } },
        { id: 'C', text: { en: 'Built-in dynamic data masking', de: 'Integrierte dynamische Datenmaskierung' } },
        { id: 'D', text: { en: 'Dedicated SQL pool auto-scaling', de: 'Automatische Skalierung des Dedicated SQL Pools' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'A hierarchical namespace adds a directory structure to the storage account. That enables atomic rename and delete operations and supports POSIX-style access control lists, which are important for big data workloads.',
        de: 'Ein hierarchischer Namespace ergänzt das Speicherkonto um eine Verzeichnisstruktur. Dadurch werden atomare Umbenennungs- und Löschvorgänge möglich, und ACLs im POSIX-Stil werden unterstützt, was für Big-Data-Workloads wichtig ist.'
      },
      hint: {
        en: 'Think about the features that make blob storage behave more like a file system for analytics engines.',
        de: 'Denken Sie an die Funktionen, durch die Blob Storage für Analyse-Engines eher wie ein Dateisystem arbeitet.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-introduction'
    },
    {
      id: 'dp203-002', type: 'single',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'medium',
      scenario: {
        en: 'Tailwind Traders stores daily sales CSV files in Azure Data Lake Storage Gen2. You must load the files into a Synapse dedicated SQL pool every morning with as little setup as possible. The solution must avoid creating external tables and external file formats.',
        de: 'Tailwind Traders speichert tägliche Verkaufs-CSV-Dateien in Azure Data Lake Storage Gen2. Sie müssen die Dateien jeden Morgen mit möglichst wenig Einrichtungsaufwand in einen Synapse Dedicated SQL Pool laden. Die Lösung darf keine externen Tabellen und keine externen Dateiformate erfordern.'
      },
      question: {
        en: 'Which T-SQL option should you use?',
        de: 'Welche T-SQL-Option sollten Sie verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'PolyBase with external tables', de: 'PolyBase mit externen Tabellen' } },
        { id: 'B', text: { en: 'COPY INTO', de: 'COPY INTO' } },
        { id: 'C', text: { en: 'OPENROWSET in a serverless SQL pool', de: 'OPENROWSET in einem serverlosen SQL-Pool' } },
        { id: 'D', text: { en: 'CETAS from a Spark pool', de: 'CETAS aus einem Spark-Pool' } }
      ],
      correct: ['B'],
      explanation: {
        en: 'COPY INTO is designed for loading data from Azure storage directly into a dedicated SQL pool with minimal setup. PolyBase is powerful, but it usually requires more supporting objects such as external data sources, file formats, and tables.',
        de: 'COPY INTO ist dafür vorgesehen, Daten mit minimalem Einrichtungsaufwand direkt aus Azure Storage in einen Dedicated SQL Pool zu laden. PolyBase ist leistungsfähig, benötigt aber in der Regel mehr unterstützende Objekte wie externe Datenquellen, Dateiformate und Tabellen.'
      },
      hint: {
        en: 'Choose the loading method that is intentionally simpler than PolyBase for common file ingestion patterns.',
        de: 'Wählen Sie die Lademethode, die für typische Dateiimporte bewusst einfacher als PolyBase ausgelegt ist.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/quickstart-bulk-load-copy-tsql'
    },
    {
      id: 'dp203-003', type: 'multiple',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'Which two statements describe a star schema?',
        de: 'Welche zwei Aussagen beschreiben ein Sternschema?'
      },
      options: [
        { id: 'A', text: { en: 'A fact table stores numeric measures and foreign keys to dimensions', de: 'Eine Faktentabelle speichert numerische Kennzahlen und Fremdschlüssel zu Dimensionen' } },
        { id: 'B', text: { en: 'Dimension tables store descriptive attributes such as product, customer, or date details', de: 'Dimensionstabellen speichern beschreibende Attribute wie Produkt-, Kunden- oder Datumsdetails' } },
        { id: 'C', text: { en: 'Every table should be distributed on a random column', de: 'Jede Tabelle sollte über eine zufällige Spalte verteilt werden' } },
        { id: 'D', text: { en: 'Fact tables should avoid relationships to dimension tables', de: 'Faktentabellen sollten Beziehungen zu Dimensionstabellen vermeiden' } }
      ],
      correct: ['A', 'B'],
      explanation: {
        en: 'A star schema centers on a fact table that contains measurable events and keys to related dimensions. Dimension tables hold descriptive business context and are typically denormalized to simplify reporting and improve query usability.',
        de: 'Ein Sternschema basiert auf einer Faktentabelle, die messbare Ereignisse und Schlüssel zu zugehörigen Dimensionen enthält. Dimensionstabellen halten den beschreibenden fachlichen Kontext und sind meist denormalisiert, um Berichte zu vereinfachen und die Nutzbarkeit von Abfragen zu verbessern.'
      },
      hint: {
        en: 'Separate measurable events from descriptive context.',
        de: 'Trennen Sie messbare Ereignisse vom beschreibenden Kontext.'
      },
      reference: 'https://learn.microsoft.com/en-us/power-bi/guidance/star-schema'
    },
    {
      id: 'dp203-004', type: 'single',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'hard',
      scenario: null,
      question: {
        en: 'You need to preserve the full history of customer segment changes over time. What should you implement in the dimension table?',
        de: 'Sie müssen die vollständige Historie von Änderungen am Kundensegment über die Zeit aufbewahren. Was sollten Sie in der Dimensionstabelle implementieren?'
      },
      options: [
        { id: 'A', text: { en: 'Overwrite the existing row whenever the segment changes', de: 'Die vorhandene Zeile jedes Mal überschreiben, wenn sich das Segment ändert' } },
        { id: 'B', text: { en: 'Insert a new versioned row and expire the previous row', de: 'Eine neue versionierte Zeile einfügen und die vorherige Zeile auslaufen lassen' } },
        { id: 'C', text: { en: 'Store the segment only in the fact table', de: 'Das Segment nur in der Faktentabelle speichern' } },
        { id: 'D', text: { en: 'Replicate the dimension to every compute node', de: 'Die Dimension auf jeden Computeknoten replizieren' } }
      ],
      correct: ['B'],
      explanation: {
        en: 'This is a classic slowly changing dimension Type 2 pattern. You keep the old row for history, insert a new row with a new surrogate key for the changed version, and track effective dates or current-row flags.',
        de: 'Dies ist ein klassisches Muster für Slowly Changing Dimension Typ 2. Sie behalten die alte Zeile für die Historie, fügen eine neue Zeile mit neuem Surrogatschlüssel für die geänderte Version ein und verfolgen Gültigkeitsdaten oder Kennzeichen für die aktuelle Zeile.'
      },
      hint: {
        en: 'The requirement is to keep historical values, not just the latest value.',
        de: 'Die Anforderung lautet, historische Werte aufzubewahren und nicht nur den aktuellen Wert.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/architecture/data-guide/relational-data/data-warehousing'
    },
    {
      id: 'dp203-005', type: 'single',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'A Delta Lake table is queried mostly by event date. Which partitioning choice is best to improve pruning and avoid excessive partition counts?',
        de: 'Eine Delta-Lake-Tabelle wird überwiegend nach Ereignisdatum abgefragt. Welche Partitionierungsentscheidung ist am besten geeignet, um das Pruning zu verbessern und eine übermäßige Anzahl von Partitionen zu vermeiden?'
      },
      options: [
        { id: 'A', text: { en: 'Partition by EventDate', de: 'Nach EventDate partitionieren' } },
        { id: 'B', text: { en: 'Partition by TransactionId', de: 'Nach TransactionId partitionieren' } },
        { id: 'C', text: { en: 'Partition by CustomerEmail', de: 'Nach CustomerEmail partitionieren' } },
        { id: 'D', text: { en: 'Partition by a random GUID', de: 'Nach einer zufälligen GUID partitionieren' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'EventDate is usually a good partition column because queries commonly filter on it and its cardinality is manageable. High-cardinality values such as TransactionId or GUIDs create too many partitions and hurt performance.',
        de: 'EventDate ist in der Regel eine gute Partitionierungsspalte, weil Abfragen häufig danach filtern und die Kardinalität beherrschbar bleibt. Werte mit hoher Kardinalität wie TransactionId oder GUIDs erzeugen zu viele Partitionen und verschlechtern die Leistung.'
      },
      hint: {
        en: 'Choose a column that is commonly used in predicates and does not create millions of partitions.',
        de: 'Wählen Sie eine Spalte, die häufig in Prädikaten verwendet wird und nicht Millionen von Partitionen erzeugt.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/databricks/delta/'
    },
    {
      id: 'dp203-006', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'You need an Azure Data Factory pipeline to run every night at 01:00. Which trigger should you use?',
        de: 'Sie benötigen eine Azure-Data-Factory-Pipeline, die jede Nacht um 01:00 Uhr ausgeführt wird. Welchen Trigger sollten Sie verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'Event trigger', de: 'Ereignistrigger' } },
        { id: 'B', text: { en: 'Schedule trigger', de: 'Zeitplantrigger' } },
        { id: 'C', text: { en: 'Tumbling window trigger', de: 'Tumbling-Window-Trigger' } },
        { id: 'D', text: { en: 'Manual debug run', de: 'Manueller Debuglauf' } }
      ],
      correct: ['B'],
      explanation: {
        en: 'A schedule trigger runs pipelines based on a wall-clock schedule such as every day at 01:00. Event triggers react to storage events, and tumbling window triggers are meant for continuous, contiguous time slices.',
        de: 'Ein Zeitplantrigger führt Pipelines nach einem festen Zeitplan aus, zum Beispiel jeden Tag um 01:00 Uhr. Ereignistrigger reagieren auf Speicherereignisse, und Tumbling-Window-Trigger sind für fortlaufende, lückenlose Zeitfenster gedacht.'
      },
      hint: {
        en: 'The requirement is based on a fixed time, not on an arriving file or a processing window.',
        de: 'Die Anforderung basiert auf einer festen Uhrzeit und nicht auf einer eingehenden Datei oder einem Verarbeitungsfenster.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/how-to-create-schedule-trigger'
    },
    {
      id: 'dp203-007', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'You need to join sources, derive columns, and cleanse data in Azure Data Factory without writing Spark code. Which feature should you use?',
        de: 'Sie müssen in Azure Data Factory Datenquellen verknüpfen, Spalten ableiten und Daten bereinigen, ohne Spark-Code zu schreiben. Welche Funktion sollten Sie verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'Linked service', de: 'Linked Service' } },
        { id: 'B', text: { en: 'Mapping data flow', de: 'Mapping Data Flow' } },
        { id: 'C', text: { en: 'Integration runtime', de: 'Integration Runtime' } },
        { id: 'D', text: { en: 'Schedule trigger', de: 'Zeitplantrigger' } }
      ],
      correct: ['B'],
      explanation: {
        en: 'Mapping data flows provide a visual, code-free way to perform transformations such as joins, derived columns, filters, and aggregations at scale. Linked services and integration runtimes support connectivity and execution, but they do not define transformation logic by themselves.',
        de: 'Mapping Data Flows bieten eine visuelle, codefreie Möglichkeit, Transformationen wie Joins, abgeleitete Spalten, Filter und Aggregationen im großen Maßstab auszuführen. Linked Services und Integration Runtimes unterstützen Konnektivität und Ausführung, definieren aber nicht selbst die Transformationslogik.'
      },
      hint: {
        en: 'Look for the ADF feature that is specifically intended for visual ETL transformations.',
        de: 'Suchen Sie nach der ADF-Funktion, die speziell für visuelle ETL-Transformationen vorgesehen ist.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/concepts-data-flow-overview'
    },
    {
      id: 'dp203-008', type: 'multiple',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'hard',
      scenario: {
        en: 'You work for Tailwind Traders. Think in three phases: read the checkpoint, copy only changed data, then advance the checkpoint.',
        de: 'Sie arbeiten für Tailwind Traders. Denken Sie in drei Phasen: Checkpoint lesen, nur geänderte Daten kopieren, dann den Checkpoint fortschreiben.'
      },
      question: {
        en: 'Which three pipeline components should be part of the solution?',
        de: 'Welche drei Pipelinekomponenten sollten Teil der Lösung sein?'
      },
      options: [
        { id: 'A', text: { en: 'A Lookup or stored procedure activity to read the current watermark', de: 'Eine Lookup- oder Stored-Procedure-Aktivität zum Lesen des aktuellen Wasserstands' } },
        { id: 'B', text: { en: 'A Copy activity with a source query filtered by the watermark', de: 'Eine Copy-Aktivität mit einer nach dem Wasserstand gefilterten Quellabfrage' } },
        { id: 'C', text: { en: 'A Script or stored procedure activity to write the new watermark after success', de: 'Eine Script- oder Stored-Procedure-Aktivität zum Schreiben des neuen Wasserstands nach erfolgreichem Lauf' } },
        { id: 'D', text: { en: 'A Delete activity to remove already copied rows from the source table', de: 'Eine Delete-Aktivität zum Entfernen bereits kopierter Zeilen aus der Quelltabelle' } }
      ],
      correct: ['A', 'B', 'C'],
      explanation: {
        en: 'Incremental copy patterns typically read the existing watermark, use it to filter the source query, and then update the stored watermark after the copy succeeds. Deleting rows from the source is unnecessary and risky because the source system is usually the system of record.',
        de: 'Muster für inkrementelles Kopieren lesen typischerweise zunächst den vorhandenen Wasserstand, verwenden ihn zum Filtern der Quellabfrage und aktualisieren anschließend den gespeicherten Wasserstand nach erfolgreichem Kopiervorgang. Das Löschen von Zeilen aus der Quelle ist unnötig und riskant, weil das Quellsystem in der Regel das führende System ist.'
      },
      hint: {
        en: 'Think in three phases: read the checkpoint, copy only changed data, then advance the checkpoint.',
        de: 'Denken Sie in drei Phasen: Checkpoint lesen, nur geänderte Daten kopieren, dann den Checkpoint fortschreiben.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/tutorial-incremental-copy-overview'
    },
    {
      id: 'dp203-009', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'Which Synapse compute option is best for ad hoc SQL queries over Parquet files in a data lake when you do not want to provision dedicated capacity?',
        de: 'Welche Synapse-Computeoption ist am besten für Ad-hoc-SQL-Abfragen über Parquet-Dateien in einem Data Lake geeignet, wenn Sie keine dedizierte Kapazität bereitstellen möchten?'
      },
      options: [
        { id: 'A', text: { en: 'Dedicated SQL pool', de: 'Dedicated SQL Pool' } },
        { id: 'B', text: { en: 'Serverless SQL pool', de: 'Serverloser SQL-Pool' } },
        { id: 'C', text: { en: 'Spark pool', de: 'Spark-Pool' } },
        { id: 'D', text: { en: 'Synapse pipeline', de: 'Synapse-Pipeline' } }
      ],
      correct: ['B'],
      explanation: {
        en: 'A serverless SQL pool is designed for on-demand querying of files in the data lake by using T-SQL. It removes the need to provision or manage dedicated SQL capacity for exploratory or intermittent workloads.',
        de: 'Ein serverloser SQL-Pool ist für bedarfsgesteuerte Abfragen von Dateien im Data Lake per T-SQL ausgelegt. Dadurch müssen Sie für explorative oder sporadische Workloads keine dedizierte SQL-Kapazität bereitstellen oder verwalten.'
      },
      hint: {
        en: 'Focus on the option that is query-on-demand and pay-per-query.',
        de: 'Konzentrieren Sie sich auf die Option, die bedarfsgesteuert und pro Abfrage abgerechnet wird.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql/on-demand-workspace-overview'
    },
    {
      id: 'dp203-010', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'hard',
      scenario: null,
      question: {
        en: 'In Azure Databricks, which Delta Lake command is designed for atomic upserts from a staging table into a target table?',
        de: 'Welcher Delta-Lake-Befehl in Azure Databricks ist für atomare Upserts aus einer Staging-Tabelle in eine Zieltabelle vorgesehen?'
      },
      options: [
        { id: 'A', text: { en: 'MERGE INTO', de: 'MERGE INTO' } },
        { id: 'B', text: { en: 'VACUUM', de: 'VACUUM' } },
        { id: 'C', text: { en: 'OPTIMIZE', de: 'OPTIMIZE' } },
        { id: 'D', text: { en: 'DESCRIBE HISTORY', de: 'DESCRIBE HISTORY' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'MERGE INTO supports matched and not-matched logic in one atomic transaction, making it ideal for idempotent inserts and updates in Delta Lake. VACUUM removes old files, OPTIMIZE improves layout, and DESCRIBE HISTORY shows transaction history.',
        de: 'MERGE INTO unterstützt Logik für übereinstimmende und nicht übereinstimmende Zeilen in einer atomaren Transaktion und ist damit ideal für idempotente Inserts und Updates in Delta Lake. VACUUM entfernt alte Dateien, OPTIMIZE verbessert das Layout und DESCRIBE HISTORY zeigt die Transaktionshistorie an.'
      },
      hint: {
        en: 'Choose the statement used for match-based insert and update logic.',
        de: 'Wählen Sie die Anweisung, die für abgleichsbasierte Insert- und Update-Logik verwendet wird.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/databricks/delta/merge'
    },
    {
      id: 'dp203-011', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: {
        en: 'At Datum Corporation, an industrial solution must onboard millions of devices. Each device needs its own identity, secure telemetry ingestion, and the ability to receive cloud-to-device commands.',
        de: 'Bei Datum Corporation: eine industrielle Lösung muss Millionen von Geräten anbinden. Jedes Gerät benötigt eine eigene Identität, eine sichere Telemetrieaufnahme und die Möglichkeit, Cloud-zu-Gerät-Befehle zu empfangen.'
      },
      question: {
        en: 'Which Azure service should sit at the device ingestion layer?',
        de: 'Welcher Azure-Dienst sollte die Geräteeingangsschicht bilden?'
      },
      options: [
        { id: 'A', text: { en: 'Azure Event Hubs', de: 'Azure Event Hubs' } },
        { id: 'B', text: { en: 'Azure IoT Hub', de: 'Azure IoT Hub' } },
        { id: 'C', text: { en: 'Azure Stream Analytics', de: 'Azure Stream Analytics' } },
        { id: 'D', text: { en: 'Azure Service Bus queues', de: 'Azure Service Bus Queues' } }
      ],
      correct: ['B'],
      explanation: {
        en: 'Azure IoT Hub is built specifically for device connectivity. It supports per-device identities, secure bi-directional communication, and device management capabilities that Event Hubs does not provide.',
        de: 'Azure IoT Hub ist speziell für die Geräteanbindung entwickelt worden. Der Dienst unterstützt gerätespezifische Identitäten, sichere bidirektionale Kommunikation und Geräteverwaltungsfunktionen, die Event Hubs nicht bereitstellt.'
      },
      hint: {
        en: 'The key clue is device identity and command-and-control, not just high-throughput event ingestion.',
        de: 'Der entscheidende Hinweis sind Geräteidentität sowie Befehls- und Steuerungsfunktionen und nicht nur die Aufnahme großer Ereignismengen.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/iot-hub/about-iot-hub'
    },
    {
      id: 'dp203-012', type: 'multiple',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'Which two statements about Azure Stream Analytics are correct?',
        de: 'Welche zwei Aussagen über Azure Stream Analytics sind korrekt?'
      },
      options: [
        { id: 'A', text: { en: 'It supports tumbling, hopping, and sliding windows', de: 'Es unterstützt Tumbling-, Hopping- und Sliding-Window-Funktionen' } },
        { id: 'B', text: { en: 'It can ingest data from Azure Event Hubs', de: 'Es kann Daten aus Azure Event Hubs aufnehmen' } },
        { id: 'C', text: { en: 'It requires Spark notebooks to define queries', de: 'Es erfordert Spark-Notebooks zur Definition von Abfragen' } },
        { id: 'D', text: { en: 'It can output data only to Power BI', de: 'Es kann Daten nur nach Power BI ausgeben' } }
      ],
      correct: ['A', 'B'],
      explanation: {
        en: 'Azure Stream Analytics uses a SQL-like query language and supports multiple windowing patterns for streaming analysis. It commonly reads from Event Hubs and can write to many sinks, so it is not limited to Power BI.',
        de: 'Azure Stream Analytics verwendet eine SQL-ähnliche Abfragesprache und unterstützt mehrere Fensterungsmuster für Streaminganalysen. Der Dienst liest häufig aus Event Hubs und kann in viele Ziele schreiben, daher ist er nicht auf Power BI beschränkt.'
      },
      hint: {
        en: 'One correct answer is about windowing, and one is about native integration with a streaming source.',
        de: 'Eine richtige Antwort bezieht sich auf Fensterung, die andere auf die native Integration mit einer Streamingquelle.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/stream-analytics/stream-analytics-introduction'
    },
    {
      id: 'dp203-013', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'hard',
      scenario: {
        en: 'You work for Northwind Traders. The requirement explicitly says fixed 5-minute intervals with no overlap.',
        de: 'Sie arbeiten für Northwind Traders. Die Anforderung nennt ausdrücklich feste 5-Minuten-Intervalle ohne Überlappung.'
      },
      question: {
        en: 'Which window type should you use in Azure Stream Analytics?',
        de: 'Welchen Fenstertyp sollten Sie in Azure Stream Analytics verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'Sliding window', de: 'Sliding Window' } },
        { id: 'B', text: { en: 'Session window', de: 'Session Window' } },
        { id: 'C', text: { en: 'Tumbling window', de: 'Tumbling Window' } },
        { id: 'D', text: { en: 'Hopping window', de: 'Hopping Window' } }
      ],
      correct: ['C'],
      explanation: {
        en: 'A tumbling window creates fixed-size, non-overlapping time buckets such as every 5 minutes. Sliding and hopping windows overlap, while session windows depend on activity gaps rather than fixed clock boundaries.',
        de: 'Ein Tumbling Window erzeugt feste, sich nicht überlappende Zeitfenster, zum Beispiel alle 5 Minuten. Sliding- und Hopping-Windows überlappen sich, während Session Windows von Aktivitätslücken statt von festen Zeitgrenzen abhängen.'
      },
      hint: {
        en: 'The requirement explicitly says fixed 5-minute intervals with no overlap.',
        de: 'Die Anforderung nennt ausdrücklich feste 5-Minuten-Intervalle ohne Überlappung.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/stream-analytics/stream-analytics-window-functions'
    },
    {
      id: 'dp203-014', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'What is the primary purpose of a linked service in Azure Data Factory or Synapse pipelines?',
        de: 'Was ist der Hauptzweck eines Linked Service in Azure Data Factory oder Synapse Pipelines?'
      },
      options: [
        { id: 'A', text: { en: 'Store connection information for a data store or compute service', de: 'Verbindungsinformationen für einen Datenspeicher oder Compute-Dienst speichern' } },
        { id: 'B', text: { en: 'Define exact source-to-target column mappings', de: 'Exakte Spaltenzuordnungen zwischen Quelle und Ziel definieren' } },
        { id: 'C', text: { en: 'Create Azure RBAC role assignments', de: 'Azure-RBAC-Rollenzuweisungen erstellen' } },
        { id: 'D', text: { en: 'Tune Spark executor memory settings', de: 'Speichereinstellungen für Spark-Executors optimieren' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'A linked service defines how the pipeline connects to external resources such as storage accounts, SQL databases, or compute environments. Datasets, activities, and transformations use that connection definition.',
        de: 'Ein Linked Service definiert, wie sich die Pipeline mit externen Ressourcen wie Speicherkonten, SQL-Datenbanken oder Computeumgebungen verbindet. Datasets, Aktivitäten und Transformationen verwenden diese Verbindungsdefinition.'
      },
      hint: {
        en: 'Think of a linked service as the connection object, not the transformation logic.',
        de: 'Betrachten Sie ein Linked Service als Verbindungsobjekt und nicht als Transformationslogik.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/concepts-linked-services'
    },
    {
      id: 'dp203-015', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'You need to run PySpark notebooks inside Azure Synapse to transform large semi-structured datasets. Which compute resource should you use?',
        de: 'Sie müssen PySpark-Notebooks innerhalb von Azure Synapse ausführen, um große semistrukturierte Datensätze zu transformieren. Welche Computeressource sollten Sie verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'Dedicated SQL pool', de: 'Dedicated SQL Pool' } },
        { id: 'B', text: { en: 'Serverless SQL pool', de: 'Serverloser SQL-Pool' } },
        { id: 'C', text: { en: 'Spark pool', de: 'Spark-Pool' } },
        { id: 'D', text: { en: 'Self-hosted integration runtime', de: 'Selbstgehostete Integration Runtime' } }
      ],
      correct: ['C'],
      explanation: {
        en: 'A Synapse Spark pool is the compute environment for Spark jobs, notebooks, and distributed data transformations. SQL pools are for SQL workloads, while the integration runtime focuses on connectivity and movement rather than notebook execution.',
        de: 'Ein Synapse-Spark-Pool ist die Computeumgebung für Spark-Jobs, Notebooks und verteilte Datentransformationen. SQL-Pools sind für SQL-Workloads vorgesehen, während die Integration Runtime sich auf Konnektivität und Datenbewegung statt auf die Ausführung von Notebooks konzentriert.'
      },
      hint: {
        en: 'The requirement explicitly mentions PySpark notebooks.',
        de: 'Die Anforderung nennt ausdrücklich PySpark-Notebooks.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/spark/apache-spark-overview'
    },
    {
      id: 'dp203-016', type: 'multiple',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'hard',
      scenario: null,
      question: {
        en: 'Which two actions commonly improve performance for large star-schema analytics workloads in a Synapse dedicated SQL pool?',
        de: 'Welche zwei Maßnahmen verbessern typischerweise die Leistung großer Sternschema-Analyseworkloads in einem Synapse Dedicated SQL Pool?'
      },
      options: [
        { id: 'A', text: { en: 'Hash-distribute large fact tables on a common join key', de: 'Große Faktentabellen per Hash auf einem gemeinsamen Join-Schlüssel verteilen' } },
        { id: 'B', text: { en: 'Use clustered columnstore indexes on large fact tables', de: 'Clustered-Columnstore-Indizes für große Faktentabellen verwenden' } },
        { id: 'C', text: { en: 'Use round-robin distribution for every table regardless of query pattern', de: 'Round-Robin-Verteilung für jede Tabelle unabhängig vom Abfragemuster verwenden' } },
        { id: 'D', text: { en: 'Convert large fact tables to heaps permanently', de: 'Große Faktentabellen dauerhaft in Heaps umwandeln' } }
      ],
      correct: ['A', 'B'],
      explanation: {
        en: 'Hash distribution on a common join key can reduce data movement during joins, which is critical in distributed MPP systems. Clustered columnstore indexes compress large fact tables and accelerate analytics scans, making them a best practice for large warehouse workloads.',
        de: 'Eine Hash-Verteilung auf einem gemeinsamen Join-Schlüssel kann Datenbewegungen bei Joins reduzieren, was in verteilten MPP-Systemen entscheidend ist. Clustered-Columnstore-Indizes komprimieren große Faktentabellen und beschleunigen analytische Scans, weshalb sie als Best Practice für große Warehouse-Workloads gelten.'
      },
      hint: {
        en: 'Think about reducing data movement and improving scan efficiency.',
        de: 'Denken Sie daran, Datenbewegungen zu reduzieren und die Effizienz von Scans zu verbessern.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql/best-practices-dedicated-sql-pool'
    },
    {
      id: 'dp203-017', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'Analysts should be able to query a customer table, but email values must appear obfuscated unless the user has special permission. Which feature should you use?',
        de: 'Analysten sollen eine Kundentabelle abfragen können, aber E-Mail-Werte müssen verschleiert angezeigt werden, sofern der Benutzer keine besondere Berechtigung besitzt. Welche Funktion sollten Sie verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'Dynamic data masking', de: 'Dynamische Datenmaskierung' } },
        { id: 'B', text: { en: 'Geo-replication', de: 'Georeplikation' } },
        { id: 'C', text: { en: 'Materialized view', de: 'Materialisierte Sicht' } },
        { id: 'D', text: { en: 'Partition switching', de: 'Partitionswechsel' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Dynamic data masking hides sensitive values in query results for users who are not exempt from masking. It is useful when users still need access to the table but should not see the full clear-text value.',
        de: 'Dynamische Datenmaskierung blendet sensible Werte in Abfrageergebnissen für Benutzer aus, die nicht von der Maskierung ausgenommen sind. Sie ist nützlich, wenn Benutzer weiterhin auf die Tabelle zugreifen sollen, aber den vollständigen Klartextwert nicht sehen dürfen.'
      },
      hint: {
        en: 'The requirement is to obscure values in results, not to physically encrypt or move the data.',
        de: 'Die Anforderung besteht darin, Werte in Ergebnissen zu verschleiern und nicht darin, die Daten physisch zu verschlüsseln oder zu verschieben.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-dynamic-data-masking'
    },
    {
      id: 'dp203-018', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'Users must see only rows for their own sales region in a Synapse dedicated SQL pool. Which feature best meets this requirement?',
        de: 'Benutzer dürfen in einem Synapse Dedicated SQL Pool nur Zeilen ihrer eigenen Verkaufsregion sehen. Welche Funktion erfüllt diese Anforderung am besten?'
      },
      options: [
        { id: 'A', text: { en: 'Row-level security with a predicate function', de: 'Row-Level Security mit einer Prädikatfunktion' } },
        { id: 'B', text: { en: 'Dynamic data masking', de: 'Dynamische Datenmaskierung' } },
        { id: 'C', text: { en: 'Transparent data encryption', de: 'Transparent Data Encryption' } },
        { id: 'D', text: { en: 'A workload classifier', de: 'Ein Workload-Classifier' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Row-level security filters which rows are returned based on the executing user or session context. That makes it the correct control when different users should see different subsets of the same table.',
        de: 'Row-Level Security filtert, welche Zeilen basierend auf dem ausführenden Benutzer oder dem Sitzungskontext zurückgegeben werden. Damit ist sie die richtige Kontrolle, wenn verschiedene Benutzer unterschiedliche Teilmengen derselben Tabelle sehen sollen.'
      },
      hint: {
        en: 'The requirement is row filtering, not column obfuscation or encryption at rest.',
        de: 'Die Anforderung betrifft die Filterung von Zeilen und nicht die Verschleierung von Spalten oder die Verschlüsselung ruhender Daten.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-row-level-security'
    },
    {
      id: 'dp203-019', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'A finance-reader role must be prevented from selecting the Salary column while still being allowed to read the rest of the table. Which approach should you use?',
        de: 'Eine Rolle finance-reader darf die Spalte Salary nicht auswählen, soll aber weiterhin den Rest der Tabelle lesen können. Welchen Ansatz sollten Sie verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'Column-level GRANT and DENY permissions', de: 'Spaltenbezogene GRANT- und DENY-Berechtigungen' } },
        { id: 'B', text: { en: 'Dynamic data masking', de: 'Dynamische Datenmaskierung' } },
        { id: 'C', text: { en: 'Snapshot isolation', de: 'Snapshot Isolation' } },
        { id: 'D', text: { en: 'Table partitioning', de: 'Tabellenpartitionierung' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Column-level security is implemented through permissions that allow or deny access to specific columns. Dynamic data masking changes how values appear, but it does not provide the same strict authorization boundary as denying column access.',
        de: 'Spaltenbasierte Sicherheit wird über Berechtigungen umgesetzt, die den Zugriff auf bestimmte Spalten erlauben oder verweigern. Dynamische Datenmaskierung verändert nur die Darstellung der Werte, stellt aber nicht dieselbe strikte Autorisierungsgrenze wie das Verweigern des Spaltenzugriffs bereit.'
      },
      hint: {
        en: 'The user should be blocked from reading the sensitive column at all, not just shown a masked value.',
        de: 'Der Benutzer soll die sensible Spalte überhaupt nicht lesen können und nicht nur einen maskierten Wert sehen.'
      },
      reference: 'https://learn.microsoft.com/en-us/sql/t-sql/statements/grant-object-permissions-transact-sql?view=sql-server-ver16'
    },
    {
      id: 'dp203-020', type: 'multiple',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'hard',
      scenario: {
        en: 'At Tailwind Traders, a multi-region analytics platform uses a Synapse dedicated SQL pool. Analysts must see only rows for their own region. PII columns such as Email should appear obfuscated for most users. The security team also requires customer-managed keys for encryption at rest.',
        de: 'Bei Tailwind Traders: eine Analyseplattform mit mehreren Regionen verwendet einen Synapse Dedicated SQL Pool. Analysten dürfen nur Zeilen ihrer eigenen Region sehen. PII-Spalten wie Email sollen für die meisten Benutzer verschleiert erscheinen. Das Sicherheitsteam verlangt außerdem kundenseitig verwaltete Schlüssel für die Verschlüsselung ruhender Daten.'
      },
      question: {
        en: 'Which three controls should you implement?',
        de: 'Welche drei Kontrollen sollten Sie implementieren?'
      },
      options: [
        { id: 'A', text: { en: 'Row-level security', de: 'Row-Level Security' } },
        { id: 'B', text: { en: 'Dynamic data masking', de: 'Dynamische Datenmaskierung' } },
        { id: 'C', text: { en: 'Customer-managed keys', de: 'Kundenseitig verwaltete Schlüssel' } },
        { id: 'D', text: { en: 'Materialized views', de: 'Materialisierte Sichten' } }
      ],
      correct: ['A', 'B', 'C'],
      explanation: {
        en: 'Row-level security restricts users to their own regional rows, dynamic data masking obscures sensitive values in results, and customer-managed keys satisfy the requirement for customer control over encryption keys. Materialized views improve performance, but they do not address the stated security controls.',
        de: 'Row-Level Security beschränkt Benutzer auf die Zeilen ihrer eigenen Region, dynamische Datenmaskierung verschleiert sensible Werte in Ergebnissen, und kundenseitig verwaltete Schlüssel erfüllen die Anforderung nach kundenseitiger Kontrolle über die Verschlüsselungsschlüssel. Materialisierte Sichten verbessern die Leistung, adressieren aber nicht die geforderten Sicherheitskontrollen.'
      },
      hint: {
        en: 'Map each requirement to a specific control: rows, displayed values, and encryption keys.',
        de: 'Ordnen Sie jede Anforderung einer konkreten Kontrolle zu: Zeilen, angezeigte Werte und Verschlüsselungsschlüssel.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/storage/common/customer-managed-keys-overview'
    },
    {
      id: 'dp203-021', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'You want operations staff to receive an automatic notification when an Azure Data Factory pipeline fails. What should you configure?',
        de: 'Sie möchten, dass das Betriebsteam automatisch benachrichtigt wird, wenn eine Azure-Data-Factory-Pipeline fehlschlägt. Was sollten Sie konfigurieren?'
      },
      options: [
        { id: 'A', text: { en: 'An Azure Monitor alert rule based on Data Factory metrics or diagnostic logs', de: 'Eine Azure-Monitor-Alertregel auf Basis von Data-Factory-Metriken oder Diagnoselogs' } },
        { id: 'B', text: { en: 'A Microsoft Purview scan', de: 'Einen Microsoft-Purview-Scan' } },
        { id: 'C', text: { en: 'A Delta Lake checkpoint', de: 'Einen Delta-Lake-Checkpoint' } },
        { id: 'D', text: { en: 'Synapse result-set caching', de: 'Synapse-Ergebnismengencache' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Azure Monitor can collect Data Factory metrics and diagnostic logs and trigger alert rules when failure conditions occur. That is the standard way to notify operators through action groups, email, webhooks, or other destinations.',
        de: 'Azure Monitor kann Data-Factory-Metriken und Diagnoselogs sammeln und Alertregeln auslösen, wenn Fehlerbedingungen eintreten. Das ist der Standardweg, um Betreiber über Aktionsgruppen, E-Mail, Webhooks oder andere Ziele zu benachrichtigen.'
      },
      hint: {
        en: 'Choose the Azure service that turns operational signals into alerts and notifications.',
        de: 'Wählen Sie den Azure-Dienst, der Betriebssignale in Warnungen und Benachrichtigungen umwandelt.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/monitor-visually'
    },
    {
      id: 'dp203-022', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'Which Microsoft service provides a unified data catalog, lineage, classification, and scanning across Azure data sources?',
        de: 'Welcher Microsoft-Dienst bietet einen einheitlichen Datenkatalog, Herkunftsnachverfolgung, Klassifizierung und Scans über Azure-Datenquellen hinweg?'
      },
      options: [
        { id: 'A', text: { en: 'Azure Key Vault', de: 'Azure Key Vault' } },
        { id: 'B', text: { en: 'Microsoft Purview', de: 'Microsoft Purview' } },
        { id: 'C', text: { en: 'Log Analytics', de: 'Log Analytics' } },
        { id: 'D', text: { en: 'Azure Policy', de: 'Azure Policy' } }
      ],
      correct: ['B'],
      explanation: {
        en: 'Microsoft Purview is the governance service for data discovery, cataloging, lineage, classification, and scanning. It helps organizations understand where data lives, how it moves, and how it should be governed.',
        de: 'Microsoft Purview ist der Governance-Dienst für Datenermittlung, Katalogisierung, Herkunftsnachverfolgung, Klassifizierung und Scans. Er hilft Organisationen zu verstehen, wo Daten liegen, wie sie sich bewegen und wie sie verwaltet werden sollten.'
      },
      hint: {
        en: 'Think about governance and data catalog capabilities rather than secrets, logs, or policy enforcement.',
        de: 'Denken Sie an Governance- und Datenkatalogfunktionen und nicht an Geheimnisse, Logs oder Richtliniendurchsetzung.'
      },
      reference: 'https://learn.microsoft.com/en-us/purview/'
    },
    {
      id: 'dp203-023', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'A 3 TB FactSales table is frequently joined to DimCustomer on CustomerKey in a Synapse dedicated SQL pool. Which distribution strategy best reduces data movement for the fact table?',
        de: 'Eine 3-TB-Tabelle FactSales wird in einem Synapse Dedicated SQL Pool häufig über CustomerKey mit DimCustomer verknüpft. Welche Verteilungsstrategie reduziert die Datenbewegung für die Faktentabelle am besten?'
      },
      options: [
        { id: 'A', text: { en: 'Replicate the fact table', de: 'Die Faktentabelle replizieren' } },
        { id: 'B', text: { en: 'Hash-distribute the fact table on CustomerKey', de: 'Die Faktentabelle per Hash auf CustomerKey verteilen' } },
        { id: 'C', text: { en: 'Use round-robin distribution', de: 'Round-Robin-Verteilung verwenden' } },
        { id: 'D', text: { en: 'Hash-distribute the fact table on LoadDate', de: 'Die Faktentabelle per Hash auf LoadDate verteilen' } }
      ],
      correct: ['B'],
      explanation: {
        en: 'For large fact tables that frequently join on CustomerKey, hash distribution on that key helps co-locate matching rows and reduces costly shuffle operations. Replication is typically suited for small dimension tables, not multi-terabyte fact tables.',
        de: 'Bei großen Faktentabellen, die häufig über CustomerKey verknüpft werden, hilft eine Hash-Verteilung auf diesem Schlüssel dabei, passende Zeilen zusammenzuführen und kostspielige Shuffle-Vorgänge zu reduzieren. Replikation eignet sich in der Regel für kleine Dimensionstabellen und nicht für Faktentabellen im Multi-Terabyte-Bereich.'
      },
      hint: {
        en: 'Choose the strategy that aligns the distribution with the common join column.',
        de: 'Wählen Sie die Strategie, die die Verteilung auf die häufig verwendete Join-Spalte ausrichtet.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-tables-distribute'
    },
    {
      id: 'dp203-024', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'How is data protected at rest in Azure Data Lake Storage Gen2 by default?',
        de: 'Wie werden Daten in Azure Data Lake Storage Gen2 standardmäßig im Ruhezustand geschützt?'
      },
      options: [
        { id: 'A', text: { en: 'It is not encrypted until you enable encryption manually', de: 'Es wird erst verschlüsselt, wenn Sie die Verschlüsselung manuell aktivieren' } },
        { id: 'B', text: { en: 'It is encrypted with Storage Service Encryption using Microsoft-managed keys', de: 'Es wird mit Storage Service Encryption unter Verwendung von Microsoft-verwalteten Schlüsseln verschlüsselt' } },
        { id: 'C', text: { en: 'It is encrypted only in the archive tier', de: 'Es wird nur in der Archivstufe verschlüsselt' } },
        { id: 'D', text: { en: 'It is encrypted only when a private endpoint is used', de: 'Es wird nur verschlüsselt, wenn ein privater Endpunkt verwendet wird' } }
      ],
      correct: ['B'],
      explanation: {
        en: 'Azure Storage encrypts data at rest by default through Storage Service Encryption. Microsoft-managed keys are used unless you explicitly configure customer-managed keys for additional control.',
        de: 'Azure Storage verschlüsselt ruhende Daten standardmäßig durch Storage Service Encryption. Dabei werden Microsoft-verwaltete Schlüssel verwendet, sofern Sie nicht ausdrücklich kundenseitig verwaltete Schlüssel für zusätzliche Kontrolle konfigurieren.'
      },
      hint: {
        en: 'Encryption at rest is on by default in Azure Storage.',
        de: 'Die Verschlüsselung ruhender Daten ist in Azure Storage standardmäßig aktiviert.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/storage/common/storage-service-encryption'
    },
    {
      id: 'dp203-025', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'medium',
      scenario: {
        en: 'At Northwind Traders, finance users run the same aggregate query every day against billions of rows in a Synapse dedicated SQL pool. The query pattern is stable, and you want to improve performance without changing the BI tool.',
        de: 'Bei Northwind Traders: finanzanwender führen jeden Tag dieselbe Aggregationsabfrage gegen Milliarden von Zeilen in einem Synapse Dedicated SQL Pool aus. Das Abfragemuster ist stabil, und Sie möchten die Leistung verbessern, ohne das BI-Tool zu ändern.'
      },
      question: {
        en: 'Which feature is most appropriate?',
        de: 'Welche Funktion ist am geeignetsten?'
      },
      options: [
        { id: 'A', text: { en: 'Materialized view', de: 'Materialisierte Sicht' } },
        { id: 'B', text: { en: 'Dynamic data masking', de: 'Dynamische Datenmaskierung' } },
        { id: 'C', text: { en: 'Linked service', de: 'Linked Service' } },
        { id: 'D', text: { en: 'Event trigger', de: 'Ereignistrigger' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'A materialized view can precompute and persist expensive aggregations so repeated analytical queries run faster. Because the BI tool can keep using the same logical query pattern, this is a low-friction way to optimize recurring workloads.',
        de: 'Eine materialisierte Sicht kann aufwendige Aggregationen vorab berechnen und persistent speichern, sodass wiederholte analytische Abfragen schneller laufen. Da das BI-Tool weiterhin dasselbe logische Abfragemuster verwenden kann, ist dies ein reibungsarmer Weg zur Optimierung wiederkehrender Workloads.'
      },
      hint: {
        en: 'Look for the feature that stores precomputed query results for repeated analytics.',
        de: 'Suchen Sie nach der Funktion, die vorab berechnete Abfrageergebnisse für wiederholte Analysen speichert.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/performance-tuning-materialized-views'
    },
    {
      id: 'dp203-026', type: 'single',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'Which file format is usually best for analytical queries over large datasets in a data lake because it is columnar and compressed?',
        de: 'Welches Dateiformat ist für analytische Abfragen über große Datensätze in einem Data Lake normalerweise am besten geeignet, weil es spaltenorientiert und komprimiert ist?'
      },
      options: [
        { id: 'A', text: { en: 'CSV', de: 'CSV' } },
        { id: 'B', text: { en: 'TXT', de: 'TXT' } },
        { id: 'C', text: { en: 'Parquet', de: 'Parquet' } },
        { id: 'D', text: { en: 'BMP', de: 'BMP' } }
      ],
      correct: ['C'],
      explanation: {
        en: 'Parquet is a columnar storage format that supports compression and predicate pushdown. That makes it highly efficient for analytical scans that read only a subset of columns and rows.',
        de: 'Parquet ist ein spaltenorientiertes Speicherformat, das Komprimierung und Predicate Pushdown unterstützt. Dadurch ist es sehr effizient für analytische Scans, die nur einen Teil der Spalten und Zeilen lesen.'
      },
      hint: {
        en: 'Choose the format designed for analytics engines rather than plain text interchange.',
        de: 'Wählen Sie das Format, das für Analyse-Engines und nicht für den einfachen Textaustausch entwickelt wurde.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql/query-parquet-files'
    },
    {
      id: 'dp203-027', type: 'multiple',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'Which two statements about Delta Lake are correct?',
        de: 'Welche zwei Aussagen über Delta Lake sind korrekt?'
      },
      options: [
        { id: 'A', text: { en: 'It adds ACID transactions to data lake tables', de: 'Es fügt Data-Lake-Tabellen ACID-Transaktionen hinzu' } },
        { id: 'B', text: { en: 'It supports version history and time travel', de: 'Es unterstützt Versionshistorie und Time Travel' } },
        { id: 'C', text: { en: 'It stores data only as uncompressed CSV files', de: 'Es speichert Daten nur als unkomprimierte CSV-Dateien' } },
        { id: 'D', text: { en: 'It requires you to rewrite the entire table for every update because there is no transaction log', de: 'Es erfordert das Umschreiben der gesamten Tabelle für jedes Update, weil es kein Transaktionsprotokoll gibt' } }
      ],
      correct: ['A', 'B'],
      explanation: {
        en: 'Delta Lake adds a transaction log on top of data lake files. That enables ACID behavior, version history, schema enforcement, and time travel for reliable analytical pipelines.',
        de: 'Delta Lake ergänzt Data-Lake-Dateien um ein Transaktionsprotokoll. Dadurch werden ACID-Verhalten, Versionshistorie, Schemaerzwingung und Time Travel für zuverlässige Analysepipelines möglich.'
      },
      hint: {
        en: 'Think about reliability and table history in the lake.',
        de: 'Denken Sie an Zuverlässigkeit und Tabellenhistorie im Data Lake.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/databricks/delta/'
    },
    {
      id: 'dp203-028', type: 'single',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'Which distribution strategy is usually best for a small dimension table that is joined frequently to very large fact tables in a Synapse dedicated SQL pool?',
        de: 'Welche Verteilungsstrategie ist in einem Synapse Dedicated SQL Pool normalerweise am besten für eine kleine Dimensionstabelle geeignet, die häufig mit sehr großen Faktentabellen verknüpft wird?'
      },
      options: [
        { id: 'A', text: { en: 'Replicated', de: 'Repliziert' } },
        { id: 'B', text: { en: 'Round-robin', de: 'Round-Robin' } },
        { id: 'C', text: { en: 'Hash on a random column', de: 'Hash auf einer zufälligen Spalte' } },
        { id: 'D', text: { en: 'Archive tier', de: 'Archivstufe' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Replicating a small dimension table places a copy on each compute node. That often removes data movement during joins with large fact tables and improves query performance.',
        de: 'Bei der Replikation einer kleinen Dimensionstabelle wird eine Kopie auf jedem Computeknoten abgelegt. Dadurch entfällt bei Joins mit großen Faktentabellen häufig die Datenbewegung, was die Abfrageleistung verbessert.'
      },
      hint: {
        en: 'Use replication for small lookup-style tables, not for large facts.',
        de: 'Verwenden Sie Replikation für kleine Lookup-Tabellen und nicht für große Faktentabellen.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-tables-distribute'
    },
    {
      id: 'dp203-029', type: 'single',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'A staging table is loaded quickly from files and used only for short-lived preprocessing before the data is redistributed. Which table distribution is the best starting point?',
        de: 'Eine Staging-Tabelle wird schnell aus Dateien geladen und nur kurzzeitig für Vorverarbeitung verwendet, bevor die Daten neu verteilt werden. Welche Tabellenverteilung ist der beste Ausgangspunkt?'
      },
      options: [
        { id: 'A', text: { en: 'Replicated', de: 'Repliziert' } },
        { id: 'B', text: { en: 'Hash distributed on CustomerKey', de: 'Per Hash auf CustomerKey verteilt' } },
        { id: 'C', text: { en: 'Round-robin', de: 'Round-Robin' } },
        { id: 'D', text: { en: 'Hash distributed on LoadTimestamp', de: 'Per Hash auf LoadTimestamp verteilt' } }
      ],
      correct: ['C'],
      explanation: {
        en: 'Round-robin is often a good choice for transient staging tables because it is simple and fast to load. Later processing can transform or redistribute the data into a more optimized warehouse structure.',
        de: 'Round-Robin ist oft eine gute Wahl für temporäre Staging-Tabellen, weil diese Verteilung einfach und schnell zu laden ist. Die spätere Verarbeitung kann die Daten dann in eine stärker optimierte Warehouse-Struktur transformieren oder neu verteilen.'
      },
      hint: {
        en: 'Choose the option commonly used for fast landing when query patterns are not yet important.',
        de: 'Wählen Sie die Option, die häufig für schnelles Landing verwendet wird, wenn Abfragemuster noch nicht wichtig sind.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-tables-distribute'
    },
    {
      id: 'dp203-030', type: 'single',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'hard',
      scenario: null,
      question: {
        en: 'A 4 TB FactSales table is usually joined to dimensions by CustomerKey. Which distribution key is most likely to reduce data movement?',
        de: 'Eine 4-TB-Tabelle FactSales wird normalerweise über CustomerKey mit Dimensionen verknüpft. Welcher Verteilungsschlüssel reduziert die Datenbewegung am ehesten?'
      },
      options: [
        { id: 'A', text: { en: 'Hash distribute on CustomerKey', de: 'Per Hash auf CustomerKey verteilen' } },
        { id: 'B', text: { en: 'Hash distribute on a random GUID column', de: 'Per Hash auf einer zufälligen GUID-Spalte verteilen' } },
        { id: 'C', text: { en: 'Round-robin distribute the fact table', de: 'Die Faktentabelle per Round-Robin verteilen' } },
        { id: 'D', text: { en: 'Replicate the fact table', de: 'Die Faktentabelle replizieren' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Hash distribution works best when it aligns with a frequently used join key of a large table. That helps co-locate related rows and reduces shuffle operations across distributions.',
        de: 'Eine Hash-Verteilung funktioniert am besten, wenn sie zu einem häufig verwendeten Join-Schlüssel einer großen Tabelle passt. Dadurch werden zusammengehörige Zeilen eher zusammengeführt und Shuffle-Operationen zwischen Verteilungen reduziert.'
      },
      hint: {
        en: 'Pick the key that matches the dominant join pattern.',
        de: 'Wählen Sie den Schlüssel, der zum dominanten Join-Muster passt.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-tables-distribute'
    },
    {
      id: 'dp203-031', type: 'single',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'What happens in a slowly changing dimension Type 1 implementation?',
        de: 'Was geschieht bei einer Slowly Changing Dimension vom Typ 1?'
      },
      options: [
        { id: 'A', text: { en: 'A new row version is inserted and the old row is retained for history', de: 'Es wird eine neue Zeilenversion eingefügt und die alte Zeile für die Historie behalten' } },
        { id: 'B', text: { en: 'The current row is overwritten and historical values are not preserved', de: 'Die aktuelle Zeile wird überschrieben und historische Werte bleiben nicht erhalten' } },
        { id: 'C', text: { en: 'Only fact tables are updated', de: 'Es werden nur Faktentabellen aktualisiert' } },
        { id: 'D', text: { en: 'The dimension must be replicated', de: 'Die Dimension muss repliziert werden' } }
      ],
      correct: ['B'],
      explanation: {
        en: 'Type 1 changes overwrite the existing attribute value. This is appropriate when the latest value matters and keeping prior history is not required.',
        de: 'Änderungen vom Typ 1 überschreiben den vorhandenen Attributwert. Das ist geeignet, wenn nur der aktuelle Wert wichtig ist und keine Historie aufbewahrt werden muss.'
      },
      hint: {
        en: 'Type 1 keeps the present state, not the past.',
        de: 'Typ 1 bewahrt den aktuellen Zustand und nicht die Vergangenheit.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/architecture/data-guide/relational-data/data-warehousing'
    },
    {
      id: 'dp203-032', type: 'single',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'You must keep original source files exactly as received so you can replay ingestion later if a transformation bug is found. In a medallion-style lake design, where should those files go?',
        de: 'Sie müssen ursprüngliche Quelldateien exakt so aufbewahren, wie sie angekommen sind, damit Sie die Ingestion später erneut ausführen können, falls ein Transformationsfehler gefunden wird. Wohin sollten diese Dateien in einem Lake-Design nach Medallion-Muster geschrieben werden?'
      },
      options: [
        { id: 'A', text: { en: 'Gold or serving layer', de: 'Gold- oder Serving-Schicht' } },
        { id: 'B', text: { en: 'Bronze or raw layer', de: 'Bronze- oder Raw-Schicht' } },
        { id: 'C', text: { en: 'Semantic model layer', de: 'Schicht des semantischen Modells' } },
        { id: 'D', text: { en: 'Presentation cache layer', de: 'Präsentations-Cache-Schicht' } }
      ],
      correct: ['B'],
      explanation: {
        en: 'The raw or bronze layer is intended to preserve source fidelity. Keeping immutable source files there supports replay, auditing, and recovery from downstream transformation issues.',
        de: 'Die Raw- oder Bronze-Schicht dient dazu, die Quelltreue zu bewahren. Das unveränderte Aufbewahren der Quelldateien dort unterstützt Replay, Audits und die Wiederherstellung nach nachgelagerten Transformationsproblemen.'
      },
      hint: {
        en: 'Think about the layer that preserves source truth before refinement.',
        de: 'Denken Sie an die Schicht, die die Quellwahrheit vor der Veredelung bewahrt.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/databricks/lakehouse/medallion'
    },
    {
      id: 'dp203-033', type: 'multiple',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'Which two Azure Blob Storage access tiers provide online access to data without rehydration?',
        de: 'Welche zwei Azure-Blob-Storage-Zugriffsebenen bieten Onlinezugriff auf Daten ohne Rehydrierung?'
      },
      options: [
        { id: 'A', text: { en: 'Hot', de: 'Hot' } },
        { id: 'B', text: { en: 'Cool', de: 'Cool' } },
        { id: 'C', text: { en: 'Archive', de: 'Archive' } },
        { id: 'D', text: { en: 'Frozen', de: 'Frozen' } }
      ],
      correct: ['A', 'B'],
      explanation: {
        en: 'Hot and cool tiers both provide online access. Archive is an offline tier intended for very infrequently accessed data and requires rehydration before use.',
        de: 'Die Stufen Hot und Cool bieten beide Onlinezugriff. Archive ist eine Offline-Stufe für sehr selten genutzte Daten und erfordert vor der Nutzung eine Rehydrierung.'
      },
      hint: {
        en: 'One tier is offline and therefore not an online tier.',
        de: 'Eine Stufe ist offline und daher keine Online-Stufe.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/storage/blobs/access-tiers-overview'
    },
    {
      id: 'dp203-034', type: 'single',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'Which Azure Storage feature should you use to move blobs automatically from hot to cool or archive based on age?',
        de: 'Welche Azure-Storage-Funktion sollten Sie verwenden, um Blobs abhängig vom Alter automatisch von Hot nach Cool oder Archive zu verschieben?'
      },
      options: [
        { id: 'A', text: { en: 'Lifecycle management policy', de: 'Lifecycle-Management-Richtlinie' } },
        { id: 'B', text: { en: 'Dynamic data masking', de: 'Dynamische Datenmaskierung' } },
        { id: 'C', text: { en: 'Result-set caching', de: 'Ergebnismengencache' } },
        { id: 'D', text: { en: 'Spark checkpointing', de: 'Spark-Checkpointing' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Lifecycle management policies can transition blobs between tiers and delete them based on rules such as age or last modified time. This helps control storage cost without manual operational work.',
        de: 'Lifecycle-Management-Richtlinien können Blobs anhand von Regeln wie Alter oder Zeitpunkt der letzten Änderung zwischen Stufen verschieben oder löschen. Dadurch lassen sich Speicherkosten ohne manuellen Betriebsaufwand steuern.'
      },
      hint: {
        en: 'Look for the policy engine built into Azure Storage.',
        de: 'Suchen Sie nach der in Azure Storage integrierten Richtlinien-Engine.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/storage/blobs/lifecycle-management-overview'
    },
    {
      id: 'dp203-035', type: 'single',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'You plan to create an external table in a Synapse dedicated SQL pool over Parquet files. Which object defines how the external data is interpreted?',
        de: 'Sie möchten eine externe Tabelle in einem Synapse Dedicated SQL Pool über Parquet-Dateien erstellen. Welches Objekt definiert, wie die externen Daten interpretiert werden?'
      },
      options: [
        { id: 'A', text: { en: 'External file format', de: 'Externes Dateiformat' } },
        { id: 'B', text: { en: 'Workload classifier', de: 'Workload-Classifier' } },
        { id: 'C', text: { en: 'Columnstore index', de: 'Columnstore-Index' } },
        { id: 'D', text: { en: 'Integration runtime', de: 'Integration Runtime' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'In dedicated SQL pools, the external file format describes the file serialization details used by an external table. The external data source points to location and credentials, but the file format tells the engine how to read the files.',
        de: 'In Dedicated SQL Pools beschreibt das externe Dateiformat die Serialisierungsdetails der Dateien, die von einer externen Tabelle verwendet werden. Die externe Datenquelle verweist auf Ort und Anmeldeinformationen, aber das Dateiformat sagt der Engine, wie die Dateien gelesen werden sollen.'
      },
      hint: {
        en: 'Separate location from file interpretation.',
        de: 'Trennen Sie Speicherort von Dateiauslegung.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql/develop-tables-external-tables'
    },
    {
      id: 'dp203-036', type: 'single',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'You query lake data with a serverless SQL pool and want to persist the result set back to the lake as Parquet for downstream reuse. Which T-SQL pattern should you use?',
        de: 'Sie fragen Lake-Daten mit einem serverlosen SQL-Pool ab und möchten das Ergebnis zur späteren Wiederverwendung als Parquet zurück in den Lake schreiben. Welches T-SQL-Muster sollten Sie verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'CTAS into a dedicated SQL pool', de: 'CTAS in einen Dedicated SQL Pool' } },
        { id: 'B', text: { en: 'CETAS', de: 'CETAS' } },
        { id: 'C', text: { en: 'MERGE', de: 'MERGE' } },
        { id: 'D', text: { en: 'DBCC CHECKDB', de: 'DBCC CHECKDB' } }
      ],
      correct: ['B'],
      explanation: {
        en: 'CETAS stands for CREATE EXTERNAL TABLE AS SELECT. In serverless SQL, it is the pattern used to write query output to files in the lake for reuse.',
        de: 'CETAS steht für CREATE EXTERNAL TABLE AS SELECT. In serverlosen SQL-Pools ist dies das Muster, mit dem Abfrageergebnisse zur Wiederverwendung in Dateien im Lake geschrieben werden.'
      },
      hint: {
        en: 'Choose the statement that writes a query result to external storage.',
        de: 'Wählen Sie die Anweisung, die ein Abfrageergebnis in externen Speicher schreibt.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql/develop-tables-cetas'
    },
    {
      id: 'dp203-037', type: 'single',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'Which folder layout is most appropriate when most queries filter by sales date and you want effective partition pruning?',
        de: 'Welches Ordnerlayout ist am geeignetsten, wenn die meisten Abfragen nach Verkaufsdatum filtern und Sie ein wirksames Partition Pruning erreichen möchten?'
      },
      options: [
        { id: 'A', text: { en: 'sales/customerId=12345/file.parquet', de: 'sales/customerId=12345/file.parquet' } },
        { id: 'B', text: { en: 'sales/year=2026/month=05/day=27/file.parquet', de: 'sales/year=2026/month=05/day=27/file.parquet' } },
        { id: 'C', text: { en: 'sales/guid=8f9c.../file.parquet', de: 'sales/guid=8f9c.../file.parquet' } },
        { id: 'D', text: { en: 'sales/randomBucket=47/file.parquet', de: 'sales/randomBucket=47/file.parquet' } }
      ],
      correct: ['B'],
      explanation: {
        en: 'Partitioning folders by date aligns the storage layout with the most common filter predicate. That lets engines skip unrelated partitions and reduces scan cost.',
        de: 'Die Partitionierung von Ordnern nach Datum richtet das Speicherlayout auf das häufigste Filterprädikat aus. Dadurch können Engines irrelevante Partitionen überspringen und die Scankosten reduzieren.'
      },
      hint: {
        en: 'Match the physical layout to the most common filter column.',
        de: 'Stimmen Sie das physische Layout auf die am häufigsten verwendete Filterspalte ab.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql/best-practices-serverless-sql-pool'
    },
    {
      id: 'dp203-038', type: 'single',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'Which file format is most natural for storing nested, semi-structured application logs with arrays and varying properties?',
        de: 'Welches Dateiformat eignet sich am ehesten zum Speichern verschachtelter, semistrukturierter Anwendungsprotokolle mit Arrays und variierenden Eigenschaften?'
      },
      options: [
        { id: 'A', text: { en: 'JSON', de: 'JSON' } },
        { id: 'B', text: { en: 'BMP', de: 'BMP' } },
        { id: 'C', text: { en: 'Fixed-width text only', de: 'Nur Text mit fester Breite' } },
        { id: 'D', text: { en: 'PNG', de: 'PNG' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'JSON is designed for semi-structured and nested data. It can represent objects, arrays, and varying fields more naturally than rigid tabular formats.',
        de: 'JSON ist für semistrukturierte und verschachtelte Daten vorgesehen. Es kann Objekte, Arrays und variierende Felder natürlicher darstellen als starre tabellarische Formate.'
      },
      hint: {
        en: 'Look for the format that preserves nested structures well.',
        de: 'Suchen Sie nach dem Format, das verschachtelte Strukturen gut bewahrt.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql/query-json-files'
    },
    {
      id: 'dp203-039', type: 'single',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'Which Blob Storage tier is most appropriate for compliance data that must be retained for years, is almost never read, and can tolerate hours of retrieval delay?',
        de: 'Welche Blob-Storage-Stufe ist am besten für Compliance-Daten geeignet, die jahrelang aufbewahrt werden müssen, fast nie gelesen werden und mehrere Stunden Abrufverzögerung tolerieren können?'
      },
      options: [
        { id: 'A', text: { en: 'Hot', de: 'Hot' } },
        { id: 'B', text: { en: 'Cool', de: 'Cool' } },
        { id: 'C', text: { en: 'Archive', de: 'Archive' } },
        { id: 'D', text: { en: 'Premium SSD', de: 'Premium SSD' } }
      ],
      correct: ['C'],
      explanation: {
        en: 'The archive tier is intended for very rarely accessed data with the lowest storage cost and slower retrieval. It fits long-term retention scenarios where access latency is acceptable.',
        de: 'Die Stufe Archive ist für sehr selten genutzte Daten mit den niedrigsten Speicherkosten und langsameren Abrufzeiten vorgesehen. Sie passt zu Langzeitaufbewahrungsszenarien, in denen Zugriffsverzögerungen akzeptabel sind.'
      },
      hint: {
        en: 'Choose the lowest-cost tier for very infrequent access.',
        de: 'Wählen Sie die kostengünstigste Stufe für sehr seltenen Zugriff.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/storage/blobs/access-tiers-overview'
    },
    {
      id: 'dp203-040', type: 'single',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'Which partition column should you avoid for a Delta Lake fact table because it usually creates too many tiny partitions?',
        de: 'Welche Partitionierungsspalte sollten Sie für eine Delta-Lake-Faktentabelle vermeiden, weil sie in der Regel zu sehr vielen winzigen Partitionen führt?'
      },
      options: [
        { id: 'A', text: { en: 'TransactionId', de: 'TransactionId' } },
        { id: 'B', text: { en: 'EventDate', de: 'EventDate' } },
        { id: 'C', text: { en: 'YearMonth', de: 'YearMonth' } },
        { id: 'D', text: { en: 'LoadDate', de: 'LoadDate' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'High-cardinality columns such as TransactionId create far too many partitions and many small files. Partitioning works best on columns with moderate cardinality that are frequently used in filters.',
        de: 'Spalten mit hoher Kardinalität wie TransactionId erzeugen viel zu viele Partitionen und viele kleine Dateien. Partitionierung funktioniert am besten bei Spalten mit moderater Kardinalität, die häufig in Filtern verwendet werden.'
      },
      hint: {
        en: 'Avoid very high-cardinality partition keys.',
        de: 'Vermeiden Sie Partitionierungsschlüssel mit sehr hoher Kardinalität.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/databricks/delta/best-practices'
    },
    {
      id: 'dp203-041', type: 'single',
      domain: { en: 'Design and Implement Data Storage', de: 'Datenspeicherung entwerfen und implementieren' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'You need directory-level ACLs and atomic rename operations in Azure Storage for analytics engines. What must be enabled on the storage account?',
        de: 'Sie benötigen Verzeichnis-ACLs und atomare Umbenennungsoperationen in Azure Storage für Analyse-Engines. Was muss im Speicherkonto aktiviert sein?'
      },
      options: [
        { id: 'A', text: { en: 'Hierarchical namespace', de: 'Hierarchischer Namespace' } },
        { id: 'B', text: { en: 'Point-in-time restore', de: 'Point-in-Time Restore' } },
        { id: 'C', text: { en: 'Blob versioning only', de: 'Nur Blob Versioning' } },
        { id: 'D', text: { en: 'Geo-zone redundancy', de: 'Geozonenredundanz' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Hierarchical namespace is the capability behind Azure Data Lake Storage Gen2. It enables file-system-like directory semantics, POSIX-style ACLs, and atomic directory operations.',
        de: 'Der hierarchische Namespace ist die Grundlage von Azure Data Lake Storage Gen2. Er ermöglicht dateisystemähnliche Verzeichnissemantik, ACLs im POSIX-Stil und atomare Verzeichnisoperationen.'
      },
      hint: {
        en: 'This is the feature that makes blob storage behave more like a data lake file system.',
        de: 'Dies ist die Funktion, durch die Blob Storage eher wie ein Data-Lake-Dateisystem arbeitet.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-introduction'
    },
    {
      id: 'dp203-042', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'You must connect Azure Data Factory to an on-premises SQL Server that is not exposed to the internet. Which integration runtime should you use?',
        de: 'Sie müssen Azure Data Factory mit einem lokalen SQL Server verbinden, der nicht über das Internet erreichbar ist. Welche Integration Runtime sollten Sie verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'Azure integration runtime', de: 'Azure Integration Runtime' } },
        { id: 'B', text: { en: 'Self-hosted integration runtime', de: 'Selbstgehostete Integration Runtime' } },
        { id: 'C', text: { en: 'Managed VNet only', de: 'Nur Managed VNet' } },
        { id: 'D', text: { en: 'Spark runtime', de: 'Spark Runtime' } }
      ],
      correct: ['B'],
      explanation: {
        en: 'A self-hosted integration runtime runs inside your network and provides secure connectivity to on-premises data sources. It is the standard choice when the source is not publicly reachable.',
        de: 'Eine selbstgehostete Integration Runtime wird in Ihrem Netzwerk ausgeführt und stellt eine sichere Konnektivität zu lokalen Datenquellen bereit. Sie ist die Standardwahl, wenn die Quelle nicht öffentlich erreichbar ist.'
      },
      hint: {
        en: 'Choose the runtime that lives close to the on-premises source.',
        de: 'Wählen Sie die Runtime, die sich in der Nähe der lokalen Quelle befindet.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/create-self-hosted-integration-runtime'
    },
    {
      id: 'dp203-043', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'Which trigger type is best when you need hourly pipeline runs that process contiguous, non-overlapping time windows and can recover missed windows?',
        de: 'Welcher Triggertyp ist am besten geeignet, wenn Sie stündliche Pipelineausführungen benötigen, die zusammenhängende, nicht überlappende Zeitfenster verarbeiten und verpasste Fenster nachholen können?'
      },
      options: [
        { id: 'A', text: { en: 'Schedule trigger', de: 'Zeitplantrigger' } },
        { id: 'B', text: { en: 'Event trigger', de: 'Ereignistrigger' } },
        { id: 'C', text: { en: 'Tumbling window trigger', de: 'Tumbling-Window-Trigger' } },
        { id: 'D', text: { en: 'Manual trigger', de: 'Manueller Trigger' } }
      ],
      correct: ['C'],
      explanation: {
        en: 'Tumbling window triggers are designed for fixed, contiguous time slices with built-in window management and backfill behavior. They are a good fit for recurring interval-based ingestion and processing.',
        de: 'Tumbling-Window-Trigger sind für feste, zusammenhängende Zeitabschnitte mit integrierter Fensterverwaltung und Backfill-Verhalten ausgelegt. Sie eignen sich gut für wiederkehrende intervallbasierte Ingestion und Verarbeitung.'
      },
      hint: {
        en: 'Look for the trigger designed around time windows rather than simple clock times.',
        de: 'Suchen Sie nach dem Trigger, der auf Zeitfenster statt nur auf Uhrzeiten ausgelegt ist.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/how-to-create-tumbling-window-trigger'
    },
    {
      id: 'dp203-044', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'What is the primary purpose of a dataset in Azure Data Factory or Synapse pipelines?',
        de: 'Was ist der Hauptzweck eines Datasets in Azure Data Factory oder Synapse Pipelines?'
      },
      options: [
        { id: 'A', text: { en: 'It defines a named view of data within a data store, such as a file path, table, or structure', de: 'Es definiert eine benannte Sicht auf Daten innerhalb eines Datenspeichers, zum Beispiel einen Dateipfad, eine Tabelle oder eine Struktur' } },
        { id: 'B', text: { en: 'It creates Azure RBAC assignments', de: 'Es erstellt Azure-RBAC-Zuweisungen' } },
        { id: 'C', text: { en: 'It runs Spark code', de: 'Es führt Spark-Code aus' } },
        { id: 'D', text: { en: 'It stores pipeline alert rules', de: 'Es speichert Pipeline-Alertregeln' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'A dataset represents the data that an activity consumes or produces. It works with a linked service to identify the exact path, table, or structure involved in the movement or transformation.',
        de: 'Ein Dataset repräsentiert die Daten, die eine Aktivität verbraucht oder erzeugt. Es arbeitet mit einem Linked Service zusammen, um den genauen Pfad, die Tabelle oder die Struktur für Bewegung oder Transformation festzulegen.'
      },
      hint: {
        en: 'A linked service is the connection, while a dataset describes the data inside it.',
        de: 'Ein Linked Service ist die Verbindung, während ein Dataset die darin enthaltenen Daten beschreibt.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/concepts-datasets-linked-services'
    },
    {
      id: 'dp203-045', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'You want one file-based dataset to work across multiple folders such as raw/2026/05/ and raw/2026/06/ without duplicating the dataset definition. What should you use?',
        de: 'Sie möchten, dass ein dateibasiertes Dataset in mehreren Ordnern wie raw/2026/05/ und raw/2026/06/ funktioniert, ohne die Datasetdefinition zu duplizieren. Was sollten Sie verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'Dataset parameters', de: 'Datasetparameter' } },
        { id: 'B', text: { en: 'Azure Policy', de: 'Azure Policy' } },
        { id: 'C', text: { en: 'Dynamic data masking', de: 'Dynamische Datenmaskierung' } },
        { id: 'D', text: { en: 'A second integration runtime', de: 'Eine zweite Integration Runtime' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Dataset parameters let you inject values such as folder names, file names, and partitions at run time. This keeps the design reusable and avoids many nearly identical dataset objects.',
        de: 'Mit Datasetparametern können Sie Werte wie Ordnernamen, Dateinamen und Partitionen zur Laufzeit einfügen. Dadurch bleibt das Design wiederverwendbar und viele nahezu identische Datasetobjekte werden vermieden.'
      },
      hint: {
        en: 'Use parameterization instead of cloning objects.',
        de: 'Verwenden Sie Parametrisierung statt das Klonen von Objekten.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/parameters-data-flow'
    },
    {
      id: 'dp203-046', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'You receive a list of 500 input files and want to process the same copy logic for each file in parallel in a pipeline. Which activity should wrap the copy step?',
        de: 'Sie erhalten eine Liste von 500 Eingabedateien und möchten dieselbe Kopierlogik für jede Datei parallel in einer Pipeline ausführen. Welche Aktivität sollte den Kopierschritt umschließen?'
      },
      options: [
        { id: 'A', text: { en: 'ForEach', de: 'ForEach' } },
        { id: 'B', text: { en: 'Wait', de: 'Wait' } },
        { id: 'C', text: { en: 'Lookup only', de: 'Nur Lookup' } },
        { id: 'D', text: { en: 'Delete', de: 'Delete' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'ForEach iterates over a collection and can run inner activities in parallel up to a configured limit. It is commonly used for file-by-file or table-by-table orchestration patterns.',
        de: 'ForEach iteriert über eine Sammlung und kann innere Aktivitäten bis zu einem konfigurierten Grenzwert parallel ausführen. Es wird häufig für Datei-zu-Datei- oder Tabelle-zu-Tabelle-Orchestrierungsmuster verwendet.'
      },
      hint: {
        en: 'Think about iterating over many similar units of work.',
        de: 'Denken Sie an die Iteration über viele ähnliche Arbeitseinheiten.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/control-flow-for-each-activity'
    },
    {
      id: 'dp203-047', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'Which activity should you use to inspect a folder and return metadata such as child items before deciding whether to copy files?',
        de: 'Welche Aktivität sollten Sie verwenden, um einen Ordner zu prüfen und Metadaten wie untergeordnete Elemente zurückzugeben, bevor Sie entscheiden, ob Dateien kopiert werden sollen?'
      },
      options: [
        { id: 'A', text: { en: 'Get Metadata', de: 'Get Metadata' } },
        { id: 'B', text: { en: 'Stored Procedure', de: 'Stored Procedure' } },
        { id: 'C', text: { en: 'Set Variable', de: 'Set Variable' } },
        { id: 'D', text: { en: 'Web', de: 'Web' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Get Metadata can return properties such as existence, structure, and childItems for supported stores. That makes it useful for conditional branching before movement activities run.',
        de: 'Get Metadata kann Eigenschaften wie Existenz, Struktur und childItems für unterstützte Speicher zurückgeben. Das macht die Aktivität nützlich für bedingte Verzweigungen, bevor Bewegungsaktivitäten ausgeführt werden.'
      },
      hint: {
        en: 'Choose the activity built for file and object inspection.',
        de: 'Wählen Sie die Aktivität, die für die Inspektion von Dateien und Objekten vorgesehen ist.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/control-flow-get-metadata-activity'
    },
    {
      id: 'dp203-048', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'A pipeline should start automatically whenever a new blob arrives in a landing container. Which trigger should you configure?',
        de: 'Eine Pipeline soll automatisch starten, sobald ein neuer Blob in einem Landing-Container ankommt. Welchen Trigger sollten Sie konfigurieren?'
      },
      options: [
        { id: 'A', text: { en: 'Event trigger', de: 'Ereignistrigger' } },
        { id: 'B', text: { en: 'Schedule trigger', de: 'Zeitplantrigger' } },
        { id: 'C', text: { en: 'Tumbling window trigger', de: 'Tumbling-Window-Trigger' } },
        { id: 'D', text: { en: 'Debug run', de: 'Debuglauf' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Event triggers respond to storage events such as blob creation. They are appropriate when pipeline execution should be driven by file arrival rather than a fixed schedule.',
        de: 'Ereignistrigger reagieren auf Speicherereignisse wie die Erstellung eines Blobs. Sie sind passend, wenn die Pipelineausführung durch das Eintreffen von Dateien und nicht durch einen festen Zeitplan ausgelöst werden soll.'
      },
      hint: {
        en: 'The pipeline should react to an event, not to a clock.',
        de: 'Die Pipeline soll auf ein Ereignis und nicht auf eine Uhrzeit reagieren.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/how-to-create-event-trigger'
    },
    {
      id: 'dp203-049', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'Several parent pipelines must invoke the same reusable ingestion logic. Which activity should you use to call a child pipeline?',
        de: 'Mehrere übergeordnete Pipelines müssen dieselbe wiederverwendbare Ingestionslogik aufrufen. Welche Aktivität sollten Sie verwenden, um eine untergeordnete Pipeline aufzurufen?'
      },
      options: [
        { id: 'A', text: { en: 'Execute Pipeline', de: 'Execute Pipeline' } },
        { id: 'B', text: { en: 'Delete', de: 'Delete' } },
        { id: 'C', text: { en: 'Validation', de: 'Validation' } },
        { id: 'D', text: { en: 'Wait', de: 'Wait' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Execute Pipeline is the orchestration activity for modular pipeline design. It allows shared child pipelines to be called with parameters from multiple parents.',
        de: 'Execute Pipeline ist die Orchestrierungsaktivität für ein modulares Pipelinedesign. Sie erlaubt es, gemeinsame untergeordnete Pipelines mit Parametern aus mehreren übergeordneten Pipelines aufzurufen.'
      },
      hint: {
        en: 'Use the control-flow activity for pipeline reuse.',
        de: 'Verwenden Sie die Control-Flow-Aktivität für die Wiederverwendung von Pipelines.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/control-flow-execute-pipeline-activity'
    },
    {
      id: 'dp203-050', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'After a Copy activity loads rows into a staging table, you need to run a T-SQL MERGE procedure to upsert them into the warehouse. Which pipeline activity is the best fit?',
        de: 'Nachdem eine Copy-Aktivität Zeilen in eine Staging-Tabelle geladen hat, müssen Sie eine T-SQL-MERGE-Prozedur ausführen, um sie per Upsert in das Warehouse zu übernehmen. Welche Pipelineaktivität passt am besten?'
      },
      options: [
        { id: 'A', text: { en: 'Stored Procedure activity', de: 'Stored-Procedure-Aktivität' } },
        { id: 'B', text: { en: 'Event trigger', de: 'Ereignistrigger' } },
        { id: 'C', text: { en: 'Delete activity', de: 'Delete-Aktivität' } },
        { id: 'D', text: { en: 'Validation activity', de: 'Validation-Aktivität' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'The Stored Procedure activity is intended to execute database procedures as part of orchestration. It is a common way to call post-load MERGE logic after staging completes.',
        de: 'Die Stored-Procedure-Aktivität ist dafür vorgesehen, Datenbankprozeduren als Teil der Orchestrierung auszuführen. Sie ist ein gängiger Weg, nach Abschluss des Stagings eine nachgelagerte MERGE-Logik aufzurufen.'
      },
      hint: {
        en: 'The key clue is that the warehouse logic already exists as a procedure.',
        de: 'Der entscheidende Hinweis ist, dass die Warehouse-Logik bereits als Prozedur existiert.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/transform-data-using-stored-procedure'
    },
    {
      id: 'dp203-051', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'Which activity should a Synapse pipeline use to run a PySpark notebook?',
        de: 'Welche Aktivität sollte eine Synapse-Pipeline verwenden, um ein PySpark-Notebook auszuführen?'
      },
      options: [
        { id: 'A', text: { en: 'Synapse notebook activity', de: 'Synapse-Notebook-Aktivität' } },
        { id: 'B', text: { en: 'Lookup activity', de: 'Lookup-Aktivität' } },
        { id: 'C', text: { en: 'Get Metadata activity', de: 'Get-Metadata-Aktivität' } },
        { id: 'D', text: { en: 'Validation activity', de: 'Validation-Aktivität' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Notebook activities are designed to execute Spark notebooks as part of Synapse orchestration. They let you parameterize and schedule notebook-based data engineering steps.',
        de: 'Notebook-Aktivitäten sind dafür vorgesehen, Spark-Notebooks als Teil der Synapse-Orchestrierung auszuführen. Sie ermöglichen das Parametrisieren und Planen notebookbasierter Data-Engineering-Schritte.'
      },
      hint: {
        en: 'Pick the activity that directly targets notebook execution.',
        de: 'Wählen Sie die Aktivität, die direkt auf die Ausführung von Notebooks abzielt.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/synapse-notebook-activity'
    },
    {
      id: 'dp203-052', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'A pipeline must call a REST endpoint to request an export job before data can be copied. Which activity should you use for the API call?',
        de: 'Eine Pipeline muss einen REST-Endpunkt aufrufen, um einen Exportauftrag anzufordern, bevor Daten kopiert werden können. Welche Aktivität sollten Sie für den API-Aufruf verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'Web activity', de: 'Web-Aktivität' } },
        { id: 'B', text: { en: 'Delete activity', de: 'Delete-Aktivität' } },
        { id: 'C', text: { en: 'Set Variable only', de: 'Nur Set Variable' } },
        { id: 'D', text: { en: 'Trigger activity', de: 'Trigger-Aktivität' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'The Web activity can issue HTTP requests to REST endpoints. It is commonly used to integrate pipelines with external orchestration APIs and SaaS systems.',
        de: 'Die Web-Aktivität kann HTTP-Anforderungen an REST-Endpunkte senden. Sie wird häufig verwendet, um Pipelines mit externen Orchestrierungs-APIs und SaaS-Systemen zu integrieren.'
      },
      hint: {
        en: 'Choose the activity that can send an HTTP request.',
        de: 'Wählen Sie die Aktivität, die eine HTTP-Anforderung senden kann.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/control-flow-web-activity'
    },
    {
      id: 'dp203-053', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'An external system returns job status asynchronously, and your pipeline must keep polling until the status becomes Completed. Which control-flow activity is best for this pattern?',
        de: 'Ein externes System liefert den Auftragsstatus asynchron zurück, und Ihre Pipeline muss so lange pollen, bis der Status Completed lautet. Welche Control-Flow-Aktivität eignet sich am besten für dieses Muster?'
      },
      options: [
        { id: 'A', text: { en: 'Until', de: 'Until' } },
        { id: 'B', text: { en: 'Delete', de: 'Delete' } },
        { id: 'C', text: { en: 'Lookup', de: 'Lookup' } },
        { id: 'D', text: { en: 'Copy', de: 'Copy' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'The Until activity repeatedly executes inner steps until a condition evaluates to true. It is commonly used for polling patterns against asynchronous external services.',
        de: 'Die Until-Aktivität führt innere Schritte wiederholt aus, bis eine Bedingung den Wert true liefert. Sie wird häufig für Polling-Muster gegenüber asynchronen externen Diensten verwendet.'
      },
      hint: {
        en: 'You need a loop that stops when a condition is met.',
        de: 'Sie benötigen eine Schleife, die stoppt, wenn eine Bedingung erfüllt ist.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/control-flow-until-activity'
    },
    {
      id: 'dp203-054', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'You must copy PDF and image files into Azure Data Lake Storage without parsing or transforming their contents. Which dataset or format type should you use?',
        de: 'Sie müssen PDF- und Bilddateien in Azure Data Lake Storage kopieren, ohne deren Inhalte zu analysieren oder zu transformieren. Welchen Dataset- oder Formattyp sollten Sie verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'Binary', de: 'Binary' } },
        { id: 'B', text: { en: 'Parquet', de: 'Parquet' } },
        { id: 'C', text: { en: 'DelimitedText', de: 'DelimitedText' } },
        { id: 'D', text: { en: 'JSON', de: 'JSON' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Binary datasets copy files as-is without trying to parse structured content. That is the right choice for unstructured assets such as PDFs, images, and archives.',
        de: 'Binary-Datasets kopieren Dateien unverändert, ohne zu versuchen, strukturierte Inhalte zu analysieren. Das ist die richtige Wahl für unstrukturierte Assets wie PDFs, Bilder und Archive.'
      },
      hint: {
        en: 'Pick the format that treats the file as opaque content.',
        de: 'Wählen Sie das Format, das die Datei als undurchsichtigen Inhalt behandelt.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/format-binary'
    },
    {
      id: 'dp203-055', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'You need a source database feature that records inserts, updates, and deletes so downstream pipelines can process changes without comparing entire tables. Which feature should you use?',
        de: 'Sie benötigen eine Datenbankfunktion an der Quelle, die Inserts, Updates und Deletes erfasst, damit nachgelagerte Pipelines Änderungen verarbeiten können, ohne ganze Tabellen zu vergleichen. Welche Funktion sollten Sie verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'Change Data Capture', de: 'Change Data Capture' } },
        { id: 'B', text: { en: 'Table partitioning', de: 'Tabellenpartitionierung' } },
        { id: 'C', text: { en: 'Dynamic data masking', de: 'Dynamische Datenmaskierung' } },
        { id: 'D', text: { en: 'Transparent data encryption', de: 'Transparent Data Encryption' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Change Data Capture captures row-level changes from the transaction log and exposes them for downstream processing. It is designed for incremental ETL and replication scenarios.',
        de: 'Change Data Capture erfasst Zeilenänderungen aus dem Transaktionsprotokoll und stellt sie für nachgelagerte Verarbeitung bereit. Es ist für inkrementelle ETL- und Replikationsszenarien vorgesehen.'
      },
      hint: {
        en: 'The requirement is to capture change operations, not to scan full tables repeatedly.',
        de: 'Die Anforderung besteht darin, Änderungsoperationen zu erfassen und nicht wiederholt ganze Tabellen zu scannen.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/azure-sql/database/change-data-capture-overview'
    },
    {
      id: 'dp203-056', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'In Azure Event Hubs, which setting most directly affects the maximum degree of parallel read processing across consumers?',
        de: 'Welche Einstellung in Azure Event Hubs beeinflusst am direktesten den maximalen Grad paralleler Leseverarbeitung über Consumer hinweg?'
      },
      options: [
        { id: 'A', text: { en: 'Partition count', de: 'Partitionsanzahl' } },
        { id: 'B', text: { en: 'Blob access tier', de: 'Blob-Zugriffsstufe' } },
        { id: 'C', text: { en: 'Dynamic data masking', de: 'Dynamische Datenmaskierung' } },
        { id: 'D', text: { en: 'Key Vault secret name', de: 'Name des Key-Vault-Geheimnisses' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Partitions are the unit of parallelism in Event Hubs. The number of partitions influences how event streams can be processed concurrently by downstream consumers.',
        de: 'Partitionen sind die Einheit der Parallelität in Event Hubs. Die Anzahl der Partitionen beeinflusst, wie Ereignisströme von nachgelagerten Consumern parallel verarbeitet werden können.'
      },
      hint: {
        en: 'Think about how the stream is divided for parallel readers.',
        de: 'Denken Sie daran, wie der Stream für parallele Leser aufgeteilt wird.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/event-hubs/event-hubs-features#partitions'
    },
    {
      id: 'dp203-057', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'Two different applications must read the same Event Hubs stream independently and maintain separate offsets. What should you configure?',
        de: 'Zwei verschiedene Anwendungen müssen denselben Event-Hubs-Stream unabhängig lesen und getrennte Offsets verwalten. Was sollten Sie konfigurieren?'
      },
      options: [
        { id: 'A', text: { en: 'Two consumer groups', de: 'Zwei Consumer Groups' } },
        { id: 'B', text: { en: 'Two archive tiers', de: 'Zwei Archivstufen' } },
        { id: 'C', text: { en: 'Two linked services', de: 'Zwei Linked Services' } },
        { id: 'D', text: { en: 'Two result-set caches', de: 'Zwei Ergebnismengencaches' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Consumer groups provide independent views of an event stream, including separate offsets. That allows multiple applications to read the same events without interfering with each other.',
        de: 'Consumer Groups stellen unabhängige Sichten auf einen Ereignisstrom bereit, einschließlich getrennter Offsets. Dadurch können mehrere Anwendungen dieselben Ereignisse lesen, ohne sich gegenseitig zu beeinflussen.'
      },
      hint: {
        en: 'The readers need independent checkpoints.',
        de: 'Die Leser benötigen unabhängige Checkpoints.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/event-hubs/event-hubs-features#consumer-groups'
    },
    {
      id: 'dp203-058', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'Which Event Hubs feature automatically writes near-real-time stream data to Azure Storage or Data Lake for batch analytics?',
        de: 'Welche Event-Hubs-Funktion schreibt Streamdaten nahezu in Echtzeit automatisch in Azure Storage oder Data Lake für Batchanalysen?'
      },
      options: [
        { id: 'A', text: { en: 'Event Hubs Capture', de: 'Event Hubs Capture' } },
        { id: 'B', text: { en: 'Azure Policy', de: 'Azure Policy' } },
        { id: 'C', text: { en: 'Dynamic data masking', de: 'Dynamische Datenmaskierung' } },
        { id: 'D', text: { en: 'External tables', de: 'Externe Tabellen' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Event Hubs Capture periodically writes streaming data to Azure Storage or Data Lake as files. This is useful when the same event stream must also support downstream batch processing and archival.',
        de: 'Event Hubs Capture schreibt Streamingdaten periodisch als Dateien in Azure Storage oder Data Lake. Das ist nützlich, wenn derselbe Ereignisstrom auch nachgelagerte Batchverarbeitung und Archivierung unterstützen soll.'
      },
      hint: {
        en: 'Look for the native landing feature built into Event Hubs.',
        de: 'Suchen Sie nach der nativen Landing-Funktion, die in Event Hubs integriert ist.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/event-hubs/event-hubs-capture-overview'
    },
    {
      id: 'dp203-059', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'A Stream Analytics job must enrich incoming telemetry with a small static table of device thresholds. Which input type should you add for the thresholds?',
        de: 'Ein Stream-Analytics-Job muss eingehende Telemetrie mit einer kleinen statischen Tabelle von Geräteschwellwerten anreichern. Welchen Eingabetyp sollten Sie für die Schwellwerte hinzufügen?'
      },
      options: [
        { id: 'A', text: { en: 'Reference data input', de: 'Referenzdateneingabe' } },
        { id: 'B', text: { en: 'Archive tier input', de: 'Archive-Tier-Eingabe' } },
        { id: 'C', text: { en: 'Columnstore input', de: 'Columnstore-Eingabe' } },
        { id: 'D', text: { en: 'Workload group input', de: 'Workload-Group-Eingabe' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Reference data inputs are meant for slowly changing or static lookup data used to enrich a live stream. Stream Analytics can join streaming input with that reference dataset during processing.',
        de: 'Referenzdateneingaben sind für langsam ändernde oder statische Lookup-Daten gedacht, mit denen ein Live-Stream angereichert wird. Stream Analytics kann die Streamingeingabe während der Verarbeitung mit diesem Referenzdatensatz verknüpfen.'
      },
      hint: {
        en: 'The lookup data is small and comparatively static.',
        de: 'Die Lookup-Daten sind klein und vergleichsweise statisch.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/stream-analytics/stream-analytics-use-reference-data'
    },
    {
      id: 'dp203-060', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'hard',
      scenario: null,
      question: {
        en: 'Events can arrive up to two minutes late or slightly out of order in an Azure Stream Analytics job. What should you configure to handle this correctly?',
        de: 'Ereignisse können in einem Azure-Stream-Analytics-Job bis zu zwei Minuten verspätet oder leicht außerhalb der Reihenfolge eintreffen. Was sollten Sie konfigurieren, damit dies korrekt behandelt wird?'
      },
      options: [
        { id: 'A', text: { en: 'Late arrival and out-of-order policies', de: 'Richtlinien für verspätetes Eintreffen und falsche Reihenfolge' } },
        { id: 'B', text: { en: 'Dynamic data masking', de: 'Dynamische Datenmaskierung' } },
        { id: 'C', text: { en: 'Blob lifecycle rules', de: 'Blob-Lifecycle-Regeln' } },
        { id: 'D', text: { en: 'Result-set caching', de: 'Ergebnismengencache' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Stream Analytics provides policies for late-arriving and out-of-order events so event-time processing remains accurate. Without these settings, aggregations and windowed logic may produce incorrect results.',
        de: 'Stream Analytics bietet Richtlinien für verspätet eintreffende und falsch gereihte Ereignisse, damit die Verarbeitung nach Ereigniszeit korrekt bleibt. Ohne diese Einstellungen können Aggregationen und Fensterlogik falsche Ergebnisse liefern.'
      },
      hint: {
        en: 'The issue is event-time correctness, not storage or security.',
        de: 'Es geht um die Korrektheit nach Ereigniszeit und nicht um Speicher oder Sicherheit.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/stream-analytics/event-ordering'
    },
    {
      id: 'dp203-061', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'You run the following T-SQL against files in a lake: SELECT TOP 100 * FROM OPENROWSET(BULK \'https://acct.dfs.core.windows.net/curated/sales/*.parquet\', FORMAT = \'PARQUET\') AS rows; Which Synapse engine executes this pattern without loading data into tables first?',
        de: 'Sie führen folgendes T-SQL gegen Dateien in einem Lake aus: SELECT TOP 100 * FROM OPENROWSET(BULK \'https://acct.dfs.core.windows.net/curated/sales/*.parquet\', FORMAT = \'PARQUET\') AS rows; Welche Synapse-Engine führt dieses Muster aus, ohne die Daten vorher in Tabellen zu laden?'
      },
      options: [
        { id: 'A', text: { en: 'Serverless SQL pool', de: 'Serverloser SQL-Pool' } },
        { id: 'B', text: { en: 'Dedicated SQL pool only', de: 'Nur Dedicated SQL Pool' } },
        { id: 'C', text: { en: 'Integration runtime', de: 'Integration Runtime' } },
        { id: 'D', text: { en: 'Power BI semantic model', de: 'Power-BI-Semantikmodell' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Serverless SQL pools are designed for on-demand querying of files in the lake with OPENROWSET. They let you analyze external data without first ingesting it into warehouse tables.',
        de: 'Serverlose SQL-Pools sind für bedarfsgesteuerte Abfragen von Dateien im Lake mit OPENROWSET vorgesehen. Sie ermöglichen die Analyse externer Daten, ohne sie zuerst in Warehousetabellen zu laden.'
      },
      hint: {
        en: 'This is query-in-place over files.',
        de: 'Dies ist Query-in-Place über Dateien.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql/query-data-storage'
    },
    {
      id: 'dp203-062', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'hard',
      scenario: null,
      question: {
        en: 'A Spark SQL query joins a 5 TB fact dataset to a 5 MB dimension. Which hint can reduce shuffle by sending the small table to each executor?',
        de: 'Eine Spark-SQL-Abfrage verknüpft einen 5-TB-Faktdatensatz mit einer 5-MB-Dimension. Welcher Hint kann Shuffle reduzieren, indem die kleine Tabelle an jeden Executor gesendet wird?'
      },
      options: [
        { id: 'A', text: { en: 'BROADCAST', de: 'BROADCAST' } },
        { id: 'B', text: { en: 'REPARTITION', de: 'REPARTITION' } },
        { id: 'C', text: { en: 'CACHE TABLE', de: 'CACHE TABLE' } },
        { id: 'D', text: { en: 'DESCRIBE DETAIL', de: 'DESCRIBE DETAIL' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'A broadcast join sends the small table to all executors, which can avoid shuffling the large fact data across the cluster. This is often an effective optimization for large-to-small joins.',
        de: 'Ein Broadcast-Join sendet die kleine Tabelle an alle Executors, wodurch das Verschieben der großen Faktendaten über den Cluster vermieden werden kann. Dies ist oft eine wirksame Optimierung für Joins zwischen großen und kleinen Tabellen.'
      },
      hint: {
        en: 'The clue is a very small dimension and a very large fact dataset.',
        de: 'Der Hinweis ist eine sehr kleine Dimension und ein sehr großer Faktendatensatz.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/databricks/optimizations/aqe#dynamically-change-sort-merge-join-into-broadcast-hash-join'
    },
    {
      id: 'dp203-063', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'After filtering a DataFrame down to a small result set, you want to write fewer output files without a full shuffle. Which Spark operation is typically the better choice?',
        de: 'Nachdem Sie ein DataFrame auf ein kleines Ergebnis reduziert haben, möchten Sie weniger Ausgabedateien ohne vollständigen Shuffle schreiben. Welche Spark-Operation ist in der Regel die bessere Wahl?'
      },
      options: [
        { id: 'A', text: { en: 'coalesce', de: 'coalesce' } },
        { id: 'B', text: { en: 'explode', de: 'explode' } },
        { id: 'C', text: { en: 'checkpoint', de: 'checkpoint' } },
        { id: 'D', text: { en: 'cache', de: 'cache' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'coalesce reduces the number of partitions efficiently when you mainly want fewer output files. It usually avoids the full shuffle behavior associated with repartition.',
        de: 'coalesce reduziert die Anzahl der Partitionen effizient, wenn Sie hauptsächlich weniger Ausgabedateien möchten. Dabei wird in der Regel das vollständige Shuffle-Verhalten vermieden, das mit repartition verbunden ist.'
      },
      hint: {
        en: 'You want fewer partitions, not a complete redistribution.',
        de: 'Sie möchten weniger Partitionen und keine vollständige Umverteilung.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/databricks/optimizations/spark-ui-guide/slow-spark-stage-low-io'
    },
    {
      id: 'dp203-064', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'A notebook uses the same transformed DataFrame in several actions. Which technique helps avoid recomputing the DataFrame each time?',
        de: 'Ein Notebook verwendet dasselbe transformierte DataFrame in mehreren Aktionen. Welche Technik hilft dabei, das DataFrame nicht bei jeder Ausführung neu berechnen zu müssen?'
      },
      options: [
        { id: 'A', text: { en: 'cache or persist', de: 'cache oder persist' } },
        { id: 'B', text: { en: 'VACUUM', de: 'VACUUM' } },
        { id: 'C', text: { en: 'ALTER LOGIN', de: 'ALTER LOGIN' } },
        { id: 'D', text: { en: 'Geo-replication', de: 'Georeplikation' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Caching or persisting a reused DataFrame can prevent repeated computation of the same lineage. This often improves notebook performance when the same data is referenced multiple times.',
        de: 'Das Cachen oder Persistieren eines wiederverwendeten DataFrames kann die wiederholte Berechnung derselben Lineage verhindern. Das verbessert häufig die Notebook-Leistung, wenn dieselben Daten mehrfach referenziert werden.'
      },
      hint: {
        en: 'The same transformed result is reused several times.',
        de: 'Dasselbe transformierte Ergebnis wird mehrfach wiederverwendet.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/databricks/optimizations/disk-cache'
    },
    {
      id: 'dp203-065', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'hard',
      scenario: null,
      question: {
        en: 'A structured streaming job writes from Event Hubs to Delta Lake and must restart safely after failure without reprocessing everything. What should you configure?',
        de: 'Ein Structured-Streaming-Job schreibt von Event Hubs nach Delta Lake und muss nach einem Fehler sicher neu starten können, ohne alles erneut zu verarbeiten. Was sollten Sie konfigurieren?'
      },
      options: [
        { id: 'A', text: { en: 'A checkpoint location', de: 'Einen Checkpoint-Speicherort' } },
        { id: 'B', text: { en: 'A blob lifecycle rule', de: 'Eine Blob-Lifecycle-Regel' } },
        { id: 'C', text: { en: 'A workload classifier', de: 'Einen Workload-Classifier' } },
        { id: 'D', text: { en: 'A materialized view', de: 'Eine materialisierte Sicht' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Structured Streaming uses checkpoints to store progress and state. That allows the job to resume from the correct offsets and continue processing reliably after interruptions.',
        de: 'Structured Streaming verwendet Checkpoints, um Fortschritt und Zustand zu speichern. Dadurch kann der Job nach Unterbrechungen mit den richtigen Offsets fortsetzen und zuverlässig weiterarbeiten.'
      },
      hint: {
        en: 'You need state and progress durability for the stream.',
        de: 'Sie benötigen dauerhaften Zustand und Fortschritt für den Stream.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/databricks/structured-streaming/checkpoints'
    },
    {
      id: 'dp203-066', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'A bad update changed a Delta table. You need to query the table exactly as it looked in version 15. Which Delta capability should you use?',
        de: 'Ein fehlerhaftes Update hat eine Delta-Tabelle verändert. Sie müssen die Tabelle genau so abfragen, wie sie in Version 15 aussah. Welche Delta-Funktion sollten Sie verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'VERSION AS OF', de: 'VERSION AS OF' } },
        { id: 'B', text: { en: 'TRUNCATE TABLE', de: 'TRUNCATE TABLE' } },
        { id: 'C', text: { en: 'CHECKPOINT ONLY', de: 'NUR CHECKPOINT' } },
        { id: 'D', text: { en: 'DROP TABLE', de: 'DROP TABLE' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Delta Lake supports time travel through version-based or timestamp-based queries. VERSION AS OF lets you inspect or restore a previous snapshot of the table.',
        de: 'Delta Lake unterstützt Time Travel durch versions- oder zeitstempelbasierte Abfragen. Mit VERSION AS OF können Sie einen früheren Snapshot der Tabelle untersuchen oder wiederherstellen.'
      },
      hint: {
        en: 'You need a historical snapshot, not a deletion command.',
        de: 'Sie benötigen einen historischen Snapshot und keinen Löschbefehl.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/databricks/delta/history'
    },
    {
      id: 'dp203-067', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'A Spark SQL column contains an array of order items, and you need one output row per array element. Which function should you use?',
        de: 'Eine Spark-SQL-Spalte enthält ein Array von Bestellpositionen, und Sie benötigen eine Ausgabezeile pro Array-Element. Welche Funktion sollten Sie verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'explode', de: 'explode' } },
        { id: 'B', text: { en: 'coalesce', de: 'coalesce' } },
        { id: 'C', text: { en: 'broadcast', de: 'broadcast' } },
        { id: 'D', text: { en: 'cache', de: 'cache' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'explode expands an array or map into multiple rows. It is the standard function for flattening nested collection elements in Spark SQL.',
        de: 'explode erweitert ein Array oder eine Map in mehrere Zeilen. Es ist die Standardfunktion zum Flatten verschachtelter Sammlungselemente in Spark SQL.'
      },
      hint: {
        en: 'The requirement is to turn one row with many items into many rows.',
        de: 'Die Anforderung besteht darin, aus einer Zeile mit vielen Elementen viele Zeilen zu machen.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/databricks/sql/language-manual/functions/explode'
    },
    {
      id: 'dp203-068', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'You created a DataFrame in Spark and want analysts to query it with SQL in the same notebook session. What should you create?',
        de: 'Sie haben in Spark ein DataFrame erstellt und möchten, dass Analysten es in derselben Notebook-Sitzung mit SQL abfragen können. Was sollten Sie erstellen?'
      },
      options: [
        { id: 'A', text: { en: 'A temporary view', de: 'Eine temporäre Sicht' } },
        { id: 'B', text: { en: 'A dynamic data mask', de: 'Eine dynamische Datenmaske' } },
        { id: 'C', text: { en: 'A workload group', de: 'Eine Workload Group' } },
        { id: 'D', text: { en: 'A private endpoint', de: 'Einen privaten Endpunkt' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'A temporary view registers the DataFrame with a SQL name for the current session. That makes it easy to switch between DataFrame APIs and Spark SQL.',
        de: 'Eine temporäre Sicht registriert das DataFrame unter einem SQL-Namen für die aktuelle Sitzung. Dadurch ist es einfach, zwischen DataFrame-APIs und Spark SQL zu wechseln.'
      },
      hint: {
        en: 'You need a SQL name for a session-scoped result.',
        de: 'Sie benötigen einen SQL-Namen für ein sitzungsgebundenes Ergebnis.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/databricks/spark/latest/spark-sql/language-manual/sql-ref-syntax-ddl-create-view'
    },
    {
      id: 'dp203-069', type: 'multiple',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'hard',
      scenario: null,
      question: {
        en: 'You want to use PolyBase external tables in a dedicated SQL pool over files in Azure Data Lake Storage. Which two supporting objects are typically required before the external table is created?',
        de: 'Sie möchten PolyBase-Externtabellen in einem Dedicated SQL Pool über Dateien in Azure Data Lake Storage verwenden. Welche zwei unterstützenden Objekte werden typischerweise benötigt, bevor die externe Tabelle erstellt wird?'
      },
      options: [
        { id: 'A', text: { en: 'External data source', de: 'Externe Datenquelle' } },
        { id: 'B', text: { en: 'External file format', de: 'Externes Dateiformat' } },
        { id: 'C', text: { en: 'Workload classifier', de: 'Workload-Classifier' } },
        { id: 'D', text: { en: 'Schedule trigger', de: 'Zeitplantrigger' } }
      ],
      correct: ['A', 'B'],
      explanation: {
        en: 'PolyBase-style external tables rely on an external data source for location and credentials, plus an external file format for file interpretation. Workload classifiers and triggers are unrelated to the external table definition.',
        de: 'PolyBase-ähnliche Externtabellen basieren auf einer externen Datenquelle für Speicherort und Anmeldeinformationen sowie auf einem externen Dateiformat für die Interpretation der Dateien. Workload-Classifier und Trigger stehen nicht in Beziehung zur Definition der Externtabelle.'
      },
      hint: {
        en: 'One object points to where the data lives, and one tells SQL how to read it.',
        de: 'Ein Objekt zeigt, wo die Daten liegen, und eines sagt SQL, wie es sie lesen soll.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql/develop-tables-external-tables'
    },
    {
      id: 'dp203-070', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'A REST source returns data across many pages by using a continuation token in each response. Which Copy activity capability should you configure?',
        de: 'Eine REST-Quelle liefert Daten über viele Seiten hinweg mithilfe eines Fortsetzungstokens in jeder Antwort zurück. Welche Fähigkeit der Copy-Aktivität sollten Sie konfigurieren?'
      },
      options: [
        { id: 'A', text: { en: 'Pagination rules', de: 'Paginierungsregeln' } },
        { id: 'B', text: { en: 'Archive tier', de: 'Archivstufe' } },
        { id: 'C', text: { en: 'Column-level security', de: 'Spaltenbezogene Sicherheit' } },
        { id: 'D', text: { en: 'Materialized views', de: 'Materialisierte Sichten' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Copy activity supports pagination rules for REST connectors so it can follow continuation tokens or next links automatically. This avoids writing custom looping logic for common paged APIs.',
        de: 'Die Copy-Aktivität unterstützt Paginierungsregeln für REST-Connectoren, sodass sie Fortsetzungstokens oder Next Links automatisch verfolgen kann. Dadurch ist keine benutzerdefinierte Schleifenlogik für gängige paginierte APIs erforderlich.'
      },
      hint: {
        en: 'You need built-in handling for paged REST responses.',
        de: 'Sie benötigen eine integrierte Verarbeitung für paginierte REST-Antworten.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/connector-rest#pagination-support'
    },
    {
      id: 'dp203-071', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'Which Mapping Data Flow transformation is designed to generate surrogate keys for dimension rows?',
        de: 'Welche Mapping-Data-Flow-Transformation ist dafür vorgesehen, Surrogatschlüssel für Dimensionszeilen zu erzeugen?'
      },
      options: [
        { id: 'A', text: { en: 'Surrogate Key', de: 'Surrogate Key' } },
        { id: 'B', text: { en: 'Pivot', de: 'Pivot' } },
        { id: 'C', text: { en: 'Window', de: 'Window' } },
        { id: 'D', text: { en: 'Flatten', de: 'Flatten' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'The Surrogate Key transformation creates sequential or generated key values for output rows. It is useful when loading dimensions that require warehouse surrogate keys.',
        de: 'Die Surrogate-Key-Transformation erzeugt sequenzielle oder generierte Schlüsselwerte für Ausgabezeilen. Sie ist nützlich beim Laden von Dimensionen, die Warehouse-Surrogatschlüssel benötigen.'
      },
      hint: {
        en: 'The name of the transformation directly matches the requirement.',
        de: 'Der Name der Transformation passt direkt zur Anforderung.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/data-flow-surrogate-key'
    },
    {
      id: 'dp203-072', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'hard',
      scenario: null,
      question: {
        en: 'In a Mapping Data Flow, which transformation lets you define row-level insert, update, upsert, and delete behavior before writing to a database sink?',
        de: 'Welche Transformation in einem Mapping Data Flow ermöglicht es, zeilenbezogenes Insert-, Update-, Upsert- und Delete-Verhalten festzulegen, bevor in eine Datenbanksenke geschrieben wird?'
      },
      options: [
        { id: 'A', text: { en: 'Alter Row', de: 'Alter Row' } },
        { id: 'B', text: { en: 'Sort', de: 'Sort' } },
        { id: 'C', text: { en: 'Join', de: 'Join' } },
        { id: 'D', text: { en: 'Exists', de: 'Exists' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Alter Row is used to declare row policies such as insert, update, delete, and upsert for supported sinks. It is central when implementing data-flow-based database change logic.',
        de: 'Alter Row wird verwendet, um Zeilenrichtlinien wie Insert, Update, Delete und Upsert für unterstützte Senken festzulegen. Es ist zentral, wenn datenflussbasierte Änderungslogik für Datenbanken implementiert wird.'
      },
      hint: {
        en: 'The requirement is about DML behavior, not sorting or matching alone.',
        de: 'Die Anforderung betrifft DML-Verhalten und nicht nur Sortierung oder Abgleich.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/data-flow-alter-row'
    },
    {
      id: 'dp203-073', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'You need to route valid rows and invalid rows to different sinks in a Mapping Data Flow. Which transformation should you use?',
        de: 'Sie müssen gültige und ungültige Zeilen in einem Mapping Data Flow an unterschiedliche Senken weiterleiten. Welche Transformation sollten Sie verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'Conditional Split', de: 'Conditional Split' } },
        { id: 'B', text: { en: 'Surrogate Key', de: 'Surrogate Key' } },
        { id: 'C', text: { en: 'Derived Column', de: 'Derived Column' } },
        { id: 'D', text: { en: 'Select', de: 'Select' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Conditional Split evaluates expressions and routes rows to different streams based on the outcome. It is commonly used for data-quality branching scenarios.',
        de: 'Conditional Split wertet Ausdrücke aus und leitet Zeilen abhängig vom Ergebnis in verschiedene Streams weiter. Es wird häufig für Verzweigungsszenarien der Datenqualität verwendet.'
      },
      hint: {
        en: 'Think of branching rows by business rules.',
        de: 'Denken Sie an das Aufteilen von Zeilen anhand von Geschäftsregeln.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/data-flow-conditional-split'
    },
    {
      id: 'dp203-074', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'Which statement about pipeline parameters and variables is correct?',
        de: 'Welche Aussage über Pipelineparameter und Variablen ist korrekt?'
      },
      options: [
        { id: 'A', text: { en: 'Parameters are immutable during a run, while variables can be changed during execution', de: 'Parameter sind während eines Laufs unveränderlich, während Variablen während der Ausführung geändert werden können' } },
        { id: 'B', text: { en: 'Variables are defined only in Azure Key Vault', de: 'Variablen werden nur in Azure Key Vault definiert' } },
        { id: 'C', text: { en: 'Parameters can be changed by a Set Variable activity', de: 'Parameter können durch eine Set-Variable-Aktivität geändert werden' } },
        { id: 'D', text: { en: 'Parameters can be used only in triggers', de: 'Parameter können nur in Triggern verwendet werden' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Parameters are supplied at invocation and remain fixed during the run. Variables are mutable and can be updated by activities such as Set Variable or Append Variable.',
        de: 'Parameter werden beim Aufruf übergeben und bleiben während des Laufs fest. Variablen sind veränderlich und können durch Aktivitäten wie Set Variable oder Append Variable aktualisiert werden.'
      },
      hint: {
        en: 'One concept is fixed input, the other is run-time state.',
        de: 'Das eine Konzept ist feste Eingabe, das andere Laufzeitzustand.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/concepts-parameters-variables'
    },
    {
      id: 'dp203-075', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'A cleanup activity must run whether an upstream copy succeeds or fails. Which dependency condition should you choose?',
        de: 'Eine Bereinigungsaktivität muss ausgeführt werden, unabhängig davon, ob ein vorgelagerter Kopiervorgang erfolgreich ist oder fehlschlägt. Welche Abhängigkeitsbedingung sollten Sie wählen?'
      },
      options: [
        { id: 'A', text: { en: 'Upon Success', de: 'Bei Erfolg' } },
        { id: 'B', text: { en: 'Upon Failure', de: 'Bei Fehler' } },
        { id: 'C', text: { en: 'Upon Completion', de: 'Bei Abschluss' } },
        { id: 'D', text: { en: 'Upon Skip', de: 'Bei Überspringen' } }
      ],
      correct: ['C'],
      explanation: {
        en: 'Upon Completion executes the downstream activity after the upstream activity finishes regardless of success or failure. This is appropriate for cleanup and finalization logic.',
        de: 'Bei Abschluss führt die nachgelagerte Aktivität aus, nachdem die vorgelagerte Aktivität beendet wurde, unabhängig von Erfolg oder Fehler. Das ist passend für Bereinigungs- und Finalisierungslogik.'
      },
      hint: {
        en: 'The requirement is to run in all outcomes except not started.',
        de: 'Die Anforderung lautet, bei allen Ergebnissen außer Nichtstart auszuführen.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/tutorial-pipeline-failure-error-handling'
    },
    {
      id: 'dp203-076', type: 'single',
      domain: { en: 'Develop Data Processing', de: 'Datenverarbeitung entwickeln' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'A nightly Azure Databricks ETL job should start a fresh cluster for each run and shut it down automatically afterward to control cost. What should you use?',
        de: 'Ein nächtlicher Azure-Databricks-ETL-Job soll für jeden Lauf einen frischen Cluster starten und ihn danach automatisch herunterfahren, um Kosten zu kontrollieren. Was sollten Sie verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'A job cluster', de: 'Einen Job-Cluster' } },
        { id: 'B', text: { en: 'An always-on all-purpose cluster', de: 'Einen ständig laufenden All-Purpose-Cluster' } },
        { id: 'C', text: { en: 'A private endpoint', de: 'Einen privaten Endpunkt' } },
        { id: 'D', text: { en: 'A linked service', de: 'Einen Linked Service' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Job clusters are created for a job run and terminated when the run completes. That gives good isolation and cost control for scheduled batch ETL workloads.',
        de: 'Job-Cluster werden für einen Joblauf erstellt und beendet, wenn der Lauf abgeschlossen ist. Dadurch erhalten Sie gute Isolation und Kostenkontrolle für geplante Batch-ETL-Workloads.'
      },
      hint: {
        en: 'Use ephemeral compute for scheduled batch processing.',
        de: 'Verwenden Sie kurzlebige Compute-Ressourcen für geplante Batchverarbeitung.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/databricks/jobs/configure-job'
    },
    {
      id: 'dp203-077', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'You want an Azure Data Factory linked service to use a centrally managed secret that can be rotated without editing pipeline JSON. Where should the secret be stored?',
        de: 'Sie möchten, dass ein Linked Service in Azure Data Factory ein zentral verwaltetes Geheimnis verwendet, das rotiert werden kann, ohne Pipeline-JSON zu bearbeiten. Wo sollte das Geheimnis gespeichert werden?'
      },
      options: [
        { id: 'A', text: { en: 'Azure Key Vault', de: 'Azure Key Vault' } },
        { id: 'B', text: { en: 'A CSV file in the lake', de: 'Eine CSV-Datei im Lake' } },
        { id: 'C', text: { en: 'A notebook comment', de: 'Ein Notebook-Kommentar' } },
        { id: 'D', text: { en: 'A dataset name', de: 'Ein Datasetname' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Azure Key Vault is the recommended place to store and rotate secrets used by pipelines and linked services. It avoids embedding credentials directly in pipeline definitions.',
        de: 'Azure Key Vault ist der empfohlene Ort zum Speichern und Rotieren von Geheimnissen, die von Pipelines und Linked Services verwendet werden. Dadurch werden Anmeldeinformationen nicht direkt in Pipelinedefinitionen eingebettet.'
      },
      hint: {
        en: 'The requirement is secure central secret management and rotation.',
        de: 'Die Anforderung ist sichere zentrale Geheimnisverwaltung und Rotation.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/store-credentials-in-key-vault'
    },
    {
      id: 'dp203-078', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'A Synapse pipeline must access Azure Storage without storing account keys or SAS tokens. Which authentication approach should you prefer?',
        de: 'Eine Synapse-Pipeline muss auf Azure Storage zugreifen, ohne Kontoschlüssel oder SAS-Token zu speichern. Welchen Authentifizierungsansatz sollten Sie bevorzugen?'
      },
      options: [
        { id: 'A', text: { en: 'Managed identity', de: 'Managed Identity' } },
        { id: 'B', text: { en: 'Hard-coded storage key', de: 'Fest codierten Storage-Schlüssel' } },
        { id: 'C', text: { en: 'Anonymous access', de: 'Anonymen Zugriff' } },
        { id: 'D', text: { en: 'Public container access', de: 'Öffentlichen Containerzugriff' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Managed identities provide Azure AD-based authentication without storing secrets in code or configuration. This is the preferred passwordless pattern for Azure services accessing other Azure resources.',
        de: 'Managed Identities bieten eine Azure-AD-basierte Authentifizierung, ohne Geheimnisse in Code oder Konfiguration zu speichern. Dies ist das bevorzugte kennwortlose Muster für Azure-Dienste, die auf andere Azure-Ressourcen zugreifen.'
      },
      hint: {
        en: 'Use identity-based access instead of shared secrets.',
        de: 'Verwenden Sie identitätsbasierten Zugriff statt gemeinsamer Geheimnisse.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/data-factory-service-identity'
    },
    {
      id: 'dp203-079', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'Your security team requires traffic between Synapse and storage to stay off the public internet. Which networking feature best supports this?',
        de: 'Ihr Sicherheitsteam verlangt, dass der Datenverkehr zwischen Synapse und Storage nicht über das öffentliche Internet läuft. Welche Netzwerkfunktion unterstützt dies am besten?'
      },
      options: [
        { id: 'A', text: { en: 'Private endpoints', de: 'Private Endpoints' } },
        { id: 'B', text: { en: 'Public read access', de: 'Öffentlicher Lesezugriff' } },
        { id: 'C', text: { en: 'Archive tier', de: 'Archivstufe' } },
        { id: 'D', text: { en: 'Dynamic data masking', de: 'Dynamische Datenmaskierung' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Private endpoints expose Azure PaaS services through private IP addresses in your virtual network. This helps keep traffic on the Azure backbone and reduces exposure to the public internet.',
        de: 'Private Endpoints stellen Azure-PaaS-Dienste über private IP-Adressen in Ihrem virtuellen Netzwerk bereit. Dadurch bleibt der Verkehr auf dem Azure-Backbone und die Exposition gegenüber dem öffentlichen Internet wird reduziert.'
      },
      hint: {
        en: 'The requirement is network isolation for service traffic.',
        de: 'Die Anforderung ist Netzwerktrennung für Dienstverkehr.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/private-link/private-endpoint-overview'
    },
    {
      id: 'dp203-080', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'Where in Synapse Studio can you view pipeline runs, SQL requests, and Spark applications in one operational area?',
        de: 'Wo in Synapse Studio können Sie Pipelineausführungen, SQL-Anforderungen und Spark-Anwendungen in einem gemeinsamen Betriebsbereich anzeigen?'
      },
      options: [
        { id: 'A', text: { en: 'Monitor hub', de: 'Monitor Hub' } },
        { id: 'B', text: { en: 'Manage hub only', de: 'Nur Manage Hub' } },
        { id: 'C', text: { en: 'Data hub', de: 'Data Hub' } },
        { id: 'D', text: { en: 'Linked service panel', de: 'Linked-Service-Bereich' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'The Monitor hub is the operational area in Synapse Studio for observing pipeline execution, Spark applications, and SQL activity. It centralizes run history and troubleshooting data.',
        de: 'Der Monitor Hub ist der operative Bereich in Synapse Studio zur Beobachtung von Pipelineausführung, Spark-Anwendungen und SQL-Aktivität. Er zentralisiert Ausführungshistorie und Troubleshooting-Daten.'
      },
      hint: {
        en: 'Think about the Synapse page specifically built for operations.',
        de: 'Denken Sie an die Synapse-Seite, die speziell für den Betrieb gedacht ist.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/monitoring/how-to-monitor-using-monitoring-hub'
    },
    {
      id: 'dp203-081', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'You need centralized diagnostics and alerting for Data Factory pipeline failures across environments. Which Azure service should you use with diagnostic settings?',
        de: 'Sie benötigen zentrale Diagnosen und Warnungen für Pipelinefehler in Data Factory über mehrere Umgebungen hinweg. Welchen Azure-Dienst sollten Sie zusammen mit Diagnoseeinstellungen verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'Azure Monitor and Log Analytics', de: 'Azure Monitor und Log Analytics' } },
        { id: 'B', text: { en: 'Azure Policy only', de: 'Nur Azure Policy' } },
        { id: 'C', text: { en: 'Microsoft Word', de: 'Microsoft Word' } },
        { id: 'D', text: { en: 'Blob archive tier', de: 'Blob-Archivstufe' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Diagnostic settings can send logs and metrics to Azure Monitor destinations such as Log Analytics. From there you can build centralized queries, dashboards, and alert rules for failures and performance issues.',
        de: 'Diagnoseeinstellungen können Protokolle und Metriken an Azure-Monitor-Ziele wie Log Analytics senden. Von dort aus können Sie zentrale Abfragen, Dashboards und Warnregeln für Fehler und Leistungsprobleme erstellen.'
      },
      hint: {
        en: 'The key is central operations telemetry and alerts.',
        de: 'Entscheidend sind zentrale Betriebs-Telemetrie und Warnungen.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/monitor-data-factory-reference'
    },
    {
      id: 'dp203-082', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'A Synapse dedicated SQL pool is unused overnight and on weekends. Which action most directly reduces compute cost during idle periods?',
        de: 'Ein Synapse Dedicated SQL Pool wird nachts und an Wochenenden nicht genutzt. Welche Maßnahme reduziert die Compute-Kosten in Leerlaufzeiten am direktesten?'
      },
      options: [
        { id: 'A', text: { en: 'Pause the dedicated SQL pool', de: 'Den Dedicated SQL Pool anhalten' } },
        { id: 'B', text: { en: 'Enable dynamic data masking', de: 'Dynamische Datenmaskierung aktivieren' } },
        { id: 'C', text: { en: 'Create more tables', de: 'Mehr Tabellen erstellen' } },
        { id: 'D', text: { en: 'Switch to CSV files', de: 'Zu CSV-Dateien wechseln' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Dedicated SQL pools incur compute cost while running. Pausing them when idle is a standard cost-management practice and storage remains preserved while compute is stopped.',
        de: 'Dedicated SQL Pools verursachen Compute-Kosten, solange sie laufen. Das Anhalten in Leerlaufzeiten ist eine Standardmaßnahme des Kostenmanagements, wobei der Speicher erhalten bleibt, während Compute gestoppt wird.'
      },
      hint: {
        en: 'You want to stop paying for idle compute.',
        de: 'Sie möchten nicht für ungenutzte Compute-Ressourcen bezahlen.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/pause-and-resume-compute-portal'
    },
    {
      id: 'dp203-083', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'Users keep running the exact same SELECT statement against unchanged tables in a dedicated SQL pool. Which feature can return the cached result instead of re-executing the query?',
        de: 'Benutzer führen immer wieder exakt dieselbe SELECT-Anweisung gegen unveränderte Tabellen in einem Dedicated SQL Pool aus. Welche Funktion kann das zwischengespeicherte Ergebnis zurückgeben, anstatt die Abfrage erneut auszuführen?'
      },
      options: [
        { id: 'A', text: { en: 'Result-set caching', de: 'Ergebnismengencache' } },
        { id: 'B', text: { en: 'Geo-replication', de: 'Georeplikation' } },
        { id: 'C', text: { en: 'Archive tier', de: 'Archivstufe' } },
        { id: 'D', text: { en: 'Key rotation', de: 'Schlüsselrotation' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Result-set caching can speed up repeated identical queries when the underlying data has not changed. It avoids repeated computation for stable query patterns.',
        de: 'Der Ergebnismengencache kann wiederholte identische Abfragen beschleunigen, wenn sich die zugrunde liegenden Daten nicht geändert haben. Er vermeidet wiederholte Berechnung bei stabilen Abfragemustern.'
      },
      hint: {
        en: 'The query text and data state stay the same.',
        de: 'Der Abfragetext und der Datenzustand bleiben gleich.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/performance-tuning-result-set-caching'
    },
    {
      id: 'dp203-084', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'After loading hundreds of millions of rows into a dedicated SQL pool fact table, what maintenance step often helps the optimizer choose better query plans?',
        de: 'Nach dem Laden von Hunderten Millionen Zeilen in eine Faktentabelle eines Dedicated SQL Pools: Welcher Wartungsschritt hilft dem Optimierer häufig dabei, bessere Abfragepläne zu wählen?'
      },
      options: [
        { id: 'A', text: { en: 'Update statistics', de: 'Statistiken aktualisieren' } },
        { id: 'B', text: { en: 'Delete the table', de: 'Die Tabelle löschen' } },
        { id: 'C', text: { en: 'Switch to archive tier', de: 'Zur Archivstufe wechseln' } },
        { id: 'D', text: { en: 'Disable security', de: 'Sicherheit deaktivieren' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Statistics describe data distribution and cardinality to the query optimizer. After major data changes, refreshing statistics can improve plan quality and overall performance.',
        de: 'Statistiken beschreiben dem Abfrageoptimierer die Datenverteilung und Kardinalität. Nach größeren Datenänderungen kann das Aktualisieren von Statistiken die Planqualität und die Gesamtleistung verbessern.'
      },
      hint: {
        en: 'The optimizer needs fresh information about the data.',
        de: 'Der Optimierer benötigt aktuelle Informationen über die Daten.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-tables-statistics'
    },
    {
      id: 'dp203-085', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'Which warehouse design choice most directly improves partition elimination for queries that filter on OrderDate?',
        de: 'Welche Warehouse-Designentscheidung verbessert die Partition Elimination für Abfragen, die nach OrderDate filtern, am direktesten?'
      },
      options: [
        { id: 'A', text: { en: 'Partition the table by OrderDate or a matching date key', de: 'Die Tabelle nach OrderDate oder einem passenden Datumsschlüssel partitionieren' } },
        { id: 'B', text: { en: 'Hash distribute on a random GUID', de: 'Per Hash auf einer zufälligen GUID verteilen' } },
        { id: 'C', text: { en: 'Replicate the fact table', de: 'Die Faktentabelle replizieren' } },
        { id: 'D', text: { en: 'Use only dynamic data masking', de: 'Nur dynamische Datenmaskierung verwenden' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Partition elimination works when the table partitioning aligns with common filter predicates. If queries filter on OrderDate, date-based partitions help the engine scan only relevant partitions.',
        de: 'Partition Elimination funktioniert, wenn die Tabellenpartitionierung zu häufigen Filterprädikaten passt. Wenn Abfragen nach OrderDate filtern, helfen datumsbasierte Partitionen der Engine dabei, nur relevante Partitionen zu scannen.'
      },
      hint: {
        en: 'Align partitions with the most common filter column.',
        de: 'Richten Sie Partitionen auf die am häufigsten verwendete Filterspalte aus.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-tables-partition'
    },
    {
      id: 'dp203-086', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'hard',
      scenario: null,
      question: {
        en: 'One ETL workload in a dedicated SQL pool needs more memory and higher priority than ad hoc analyst queries. Which feature should you configure?',
        de: 'Eine ETL-Workload in einem Dedicated SQL Pool benötigt mehr Arbeitsspeicher und höhere Priorität als Ad-hoc-Abfragen von Analysten. Welche Funktion sollten Sie konfigurieren?'
      },
      options: [
        { id: 'A', text: { en: 'Workload management with workload groups and classifiers', de: 'Workload Management mit Workload Groups und Classifiers' } },
        { id: 'B', text: { en: 'Dynamic data masking', de: 'Dynamische Datenmaskierung' } },
        { id: 'C', text: { en: 'Blob lifecycle management', de: 'Blob-Lifecycle-Management' } },
        { id: 'D', text: { en: 'Hierarchical namespace', de: 'Hierarchischer Namespace' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Workload management lets you classify requests and assign resources and importance based on workload type. That is how you differentiate ETL jobs from lighter interactive queries in a shared warehouse.',
        de: 'Mit Workload Management können Sie Anforderungen klassifizieren und Ressourcen sowie Wichtigkeit abhängig vom Workload-Typ zuweisen. So unterscheiden Sie ETL-Jobs von leichteren interaktiven Abfragen in einem gemeinsam genutzten Warehouse.'
      },
      hint: {
        en: 'The requirement is resource governance between competing workloads.',
        de: 'Die Anforderung ist Ressourcensteuerung zwischen konkurrierenden Workloads.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-workload-management'
    },
    {
      id: 'dp203-087', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'hard',
      scenario: null,
      question: {
        en: 'A column contains highly sensitive values, and database administrators must not be able to view them in plaintext. Which feature best fits this requirement?',
        de: 'Eine Spalte enthält hochsensible Werte, und Datenbankadministratoren dürfen sie nicht im Klartext sehen können. Welche Funktion passt am besten zu dieser Anforderung?'
      },
      options: [
        { id: 'A', text: { en: 'Always Encrypted', de: 'Always Encrypted' } },
        { id: 'B', text: { en: 'Dynamic data masking', de: 'Dynamische Datenmaskierung' } },
        { id: 'C', text: { en: 'Row-level security', de: 'Row-Level Security' } },
        { id: 'D', text: { en: 'Result-set caching', de: 'Ergebnismengencache' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Always Encrypted is designed so that sensitive column values remain encrypted in the database and are decrypted only by authorized client applications. This helps prevent even privileged database operators from seeing plaintext values.',
        de: 'Always Encrypted ist dafür ausgelegt, dass sensible Spaltenwerte in der Datenbank verschlüsselt bleiben und nur von autorisierten Clientanwendungen entschlüsselt werden. Dadurch wird verhindert, dass selbst privilegierte Datenbankbetreiber Klartextwerte sehen können.'
      },
      hint: {
        en: 'Masking hides display values, but it does not remove plaintext access from the engine itself.',
        de: 'Maskierung blendet Anzeigewerte aus, entzieht der Engine selbst aber keinen Klartextzugriff.'
      },
      reference: 'https://learn.microsoft.com/en-us/sql/relational-databases/security/encryption/always-encrypted-database-engine'
    },
    {
      id: 'dp203-088', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'Which database feature encrypts files at rest without requiring application changes?',
        de: 'Welche Datenbankfunktion verschlüsselt Dateien im Ruhezustand, ohne Anwendungsänderungen zu erfordern?'
      },
      options: [
        { id: 'A', text: { en: 'Transparent Data Encryption', de: 'Transparent Data Encryption' } },
        { id: 'B', text: { en: 'Conditional Split', de: 'Conditional Split' } },
        { id: 'C', text: { en: 'Event Hubs Capture', de: 'Event Hubs Capture' } },
        { id: 'D', text: { en: 'ForEach', de: 'ForEach' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Transparent Data Encryption protects data and log files at rest by encrypting them on disk. It works below the application layer, so application code does not need to change.',
        de: 'Transparent Data Encryption schützt Daten- und Protokolldateien im Ruhezustand durch Verschlüsselung auf dem Datenträger. Sie arbeitet unterhalb der Anwendungsschicht, sodass keine Änderungen im Anwendungscode erforderlich sind.'
      },
      hint: {
        en: 'This is at-rest encryption handled by the database platform.',
        de: 'Dies ist eine von der Datenbankplattform durchgeführte Verschlüsselung ruhender Daten.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/azure-sql/database/transparent-data-encryption-tde-overview'
    },
    {
      id: 'dp203-089', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'Your organization wants to control encryption keys for Azure Storage and integrate them with Azure Key Vault. Which capability should you implement?',
        de: 'Ihre Organisation möchte Verschlüsselungsschlüssel für Azure Storage selbst kontrollieren und in Azure Key Vault integrieren. Welche Funktion sollten Sie implementieren?'
      },
      options: [
        { id: 'A', text: { en: 'Customer-managed keys', de: 'Kundenseitig verwaltete Schlüssel' } },
        { id: 'B', text: { en: 'Result-set caching', de: 'Ergebnismengencache' } },
        { id: 'C', text: { en: 'Consumer groups', de: 'Consumer Groups' } },
        { id: 'D', text: { en: 'Event trigger', de: 'Ereignistrigger' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Customer-managed keys let you use your own key material, commonly stored in Azure Key Vault, for encryption at rest. This gives the organization greater control over key lifecycle and revocation.',
        de: 'Kundenseitig verwaltete Schlüssel ermöglichen die Verwendung eigener Schlüsselmaterialien, die häufig in Azure Key Vault gespeichert werden, für die Verschlüsselung ruhender Daten. Dadurch erhält die Organisation mehr Kontrolle über Schlüssel-Lebenszyklus und Widerruf.'
      },
      hint: {
        en: 'The requirement is organizational control over the encryption keys.',
        de: 'Die Anforderung ist organisatorische Kontrolle über die Verschlüsselungsschlüssel.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/storage/common/customer-managed-keys-overview'
    },
    {
      id: 'dp203-090', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'You need to grant the Finance group read access only to the finance folder inside an ADLS Gen2 container. Which permission model gives that fine-grained folder-level control?',
        de: 'Sie müssen der Finance-Gruppe Lesezugriff nur auf den finance-Ordner innerhalb eines ADLS-Gen2-Containers gewähren. Welches Berechtigungsmodell bietet diese feingranulare Kontrolle auf Ordnerebene?'
      },
      options: [
        { id: 'A', text: { en: 'POSIX-style ACLs', de: 'ACLs im POSIX-Stil' } },
        { id: 'B', text: { en: 'Archive tier settings', de: 'Einstellungen der Archivstufe' } },
        { id: 'C', text: { en: 'Columnstore indexes', de: 'Columnstore-Indizes' } },
        { id: 'D', text: { en: 'Partition switching', de: 'Partitionswechsel' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'ADLS Gen2 supports POSIX-style ACLs for fine-grained access control at the file and directory level. That is the right mechanism when permissions differ across folders inside the same container.',
        de: 'ADLS Gen2 unterstützt ACLs im POSIX-Stil für feingranulare Zugriffskontrolle auf Datei- und Verzeichnisebene. Das ist der richtige Mechanismus, wenn Berechtigungen zwischen Ordnern innerhalb desselben Containers unterschiedlich sein sollen.'
      },
      hint: {
        en: 'The scope is a specific folder, not the whole account.',
        de: 'Der Geltungsbereich ist ein bestimmter Ordner und nicht das gesamte Konto.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-access-control'
    },
    {
      id: 'dp203-091', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'You need detailed information about Spark stages, tasks, executor time, and skew while troubleshooting a slow job. Which interface should you inspect?',
        de: 'Sie benötigen detaillierte Informationen zu Spark-Stages, Tasks, Executor-Zeit und Skew, während Sie einen langsamen Job untersuchen. Welche Oberfläche sollten Sie prüfen?'
      },
      options: [
        { id: 'A', text: { en: 'Spark UI or Spark application details', de: 'Spark UI oder Spark-Anwendungsdetails' } },
        { id: 'B', text: { en: 'Blob lifecycle page', de: 'Blob-Lifecycle-Seite' } },
        { id: 'C', text: { en: 'Azure Policy compliance page', de: 'Azure-Policy-Compliance-Seite' } },
        { id: 'D', text: { en: 'Key Vault access policy page', de: 'Key-Vault-Zugriffsrichtlinienseite' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'The Spark UI exposes execution details such as stages, tasks, shuffle metrics, and executor behavior. These details are essential when diagnosing skew, spills, and slow transformations.',
        de: 'Die Spark UI zeigt Ausführungsdetails wie Stages, Tasks, Shuffle-Metriken und Executor-Verhalten. Diese Details sind entscheidend bei der Diagnose von Skew, Spills und langsamen Transformationen.'
      },
      hint: {
        en: 'The requirement is low-level Spark execution diagnostics.',
        de: 'Die Anforderung ist Spark-Ausführungsdiagnose auf niedriger Ebene.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/spark/apache-spark-monitoring'
    },
    {
      id: 'dp203-092', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'A Copy activity failed, and you need the exact error details, rows read, and throughput for that run. Where should you look first?',
        de: 'Eine Copy-Aktivität ist fehlgeschlagen, und Sie benötigen die genauen Fehlerdetails, gelesene Zeilen und den Durchsatz dieses Laufs. Wo sollten Sie zuerst nachsehen?'
      },
      options: [
        { id: 'A', text: { en: 'The activity output in the monitoring experience', de: 'In der Aktivitätsausgabe in der Überwachungsansicht' } },
        { id: 'B', text: { en: 'The storage account access tier', de: 'In der Zugriffsstufe des Speicherkontos' } },
        { id: 'C', text: { en: 'The data lake folder name', de: 'Im Namen des Data-Lake-Ordners' } },
        { id: 'D', text: { en: 'The workspace icon', de: 'Beim Workspace-Symbol' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Activity output contains run-specific operational details such as error messages, rows processed, duration, and throughput. It is the first place to inspect when troubleshooting a failed pipeline activity.',
        de: 'Die Aktivitätsausgabe enthält laufspezifische Betriebsdetails wie Fehlermeldungen, verarbeitete Zeilen, Dauer und Durchsatz. Sie ist der erste Ort, den Sie bei der Untersuchung einer fehlgeschlagenen Pipelineaktivität prüfen sollten.'
      },
      hint: {
        en: 'Look at the run-level details of the failed activity.',
        de: 'Prüfen Sie die Ausführungsdetails der fehlgeschlagenen Aktivität.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/data-factory/monitor-visually'
    },
    {
      id: 'dp203-093', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'A Delta table receives frequent small micro-batch writes and query performance is degrading because of many small files. Which command is typically used to compact them?',
        de: 'Eine Delta-Tabelle erhält häufig kleine Micro-Batch-Schreibvorgänge, und die Abfrageleistung verschlechtert sich aufgrund vieler kleiner Dateien. Welcher Befehl wird typischerweise verwendet, um diese zu komprimieren?'
      },
      options: [
        { id: 'A', text: { en: 'OPTIMIZE', de: 'OPTIMIZE' } },
        { id: 'B', text: { en: 'GRANT', de: 'GRANT' } },
        { id: 'C', text: { en: 'ROLLBACK', de: 'ROLLBACK' } },
        { id: 'D', text: { en: 'KILL', de: 'KILL' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'OPTIMIZE compacts small files into larger ones, which improves scan efficiency and file management for Delta tables. This is a common maintenance step for heavily updated or streamed tables.',
        de: 'OPTIMIZE fasst kleine Dateien zu größeren zusammen, was die Scan-Effizienz und Dateiverwaltung für Delta-Tabellen verbessert. Dies ist ein häufiger Wartungsschritt für stark aktualisierte oder gestreamte Tabellen.'
      },
      hint: {
        en: 'The issue is file compaction, not permissions or transaction control.',
        de: 'Das Problem ist die Dateikompaktierung und nicht Berechtigungen oder Transaktionssteuerung.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/databricks/sql/language-manual/delta-optimize'
    },
    {
      id: 'dp203-094', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'After retention requirements are met, which Delta Lake command removes obsolete data files that are no longer needed by the transaction log?',
        de: 'Welcher Delta-Lake-Befehl entfernt veraltete Datendateien, die nach Ablauf der Aufbewahrungspflichten vom Transaktionsprotokoll nicht mehr benötigt werden?'
      },
      options: [
        { id: 'A', text: { en: 'VACUUM', de: 'VACUUM' } },
        { id: 'B', text: { en: 'CACHE', de: 'CACHE' } },
        { id: 'C', text: { en: 'MERGE', de: 'MERGE' } },
        { id: 'D', text: { en: 'OPENROWSET', de: 'OPENROWSET' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'VACUUM physically removes old files that are outside the configured retention window. It helps reclaim storage after Delta operations have left obsolete files behind.',
        de: 'VACUUM entfernt physisch alte Dateien, die außerhalb des konfigurierten Aufbewahrungsfensters liegen. Damit lässt sich Speicher zurückgewinnen, nachdem Delta-Operationen veraltete Dateien hinterlassen haben.'
      },
      hint: {
        en: 'This command is about storage cleanup for Delta files.',
        de: 'Dieser Befehl betrifft die Speicherbereinigung für Delta-Dateien.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/databricks/delta/vacuum'
    },
    {
      id: 'dp203-095', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'hard',
      scenario: null,
      question: {
        en: 'Queries on a large Delta table frequently filter by CustomerId and EventDate. Which optimization can improve data skipping for those columns?',
        de: 'Abfragen auf einer großen Delta-Tabelle filtern häufig nach CustomerId und EventDate. Welche Optimierung kann das Data Skipping für diese Spalten verbessern?'
      },
      options: [
        { id: 'A', text: { en: 'Z-ORDER BY CustomerId, EventDate', de: 'Z-ORDER BY CustomerId, EventDate' } },
        { id: 'B', text: { en: 'Archive tiering', de: 'Archivstufung' } },
        { id: 'C', text: { en: 'Dynamic data masking', de: 'Dynamische Datenmaskierung' } },
        { id: 'D', text: { en: 'Round-robin distribution', de: 'Round-Robin-Verteilung' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Z-Ordering colocates related values in the underlying files, which improves data skipping for common filter columns. It is often used after compaction on large Delta tables with stable query predicates.',
        de: 'Z-Ordering ordnet zusammengehörige Werte in den zugrunde liegenden Dateien an, was das Data Skipping für häufige Filterspalten verbessert. Es wird oft nach der Kompaktierung großer Delta-Tabellen mit stabilen Abfrageprädikaten verwendet.'
      },
      hint: {
        en: 'The goal is to improve file pruning for frequent filter columns.',
        de: 'Das Ziel ist die Verbesserung des File Pruning für häufige Filterspalten.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/databricks/sql/language-manual/delta-optimize#zorder-by'
    },
    {
      id: 'dp203-096', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'Ingress volume to Event Hubs is unpredictable and sometimes exceeds current throughput units. Which feature can increase throughput automatically to reduce throttling risk?',
        de: 'Das eingehende Volumen in Event Hubs ist unvorhersehbar und überschreitet manchmal die aktuellen Throughput Units. Welche Funktion kann den Durchsatz automatisch erhöhen, um das Risiko von Drosselung zu verringern?'
      },
      options: [
        { id: 'A', text: { en: 'Auto-inflate', de: 'Auto-Inflate' } },
        { id: 'B', text: { en: 'Private endpoint', de: 'Private Endpoint' } },
        { id: 'C', text: { en: 'Dynamic data masking', de: 'Dynamische Datenmaskierung' } },
        { id: 'D', text: { en: 'Materialized view', de: 'Materialisierte Sicht' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Auto-inflate lets Event Hubs automatically increase throughput units up to a configured maximum when demand rises. That helps handle bursts without constant manual scaling.',
        de: 'Auto-Inflate ermöglicht Event Hubs, Throughput Units bei steigendem Bedarf automatisch bis zu einem konfigurierten Maximum zu erhöhen. Das hilft, Lastspitzen ohne ständige manuelle Skalierung zu bewältigen.'
      },
      hint: {
        en: 'The key is automatic scaling of ingress and egress capacity.',
        de: 'Entscheidend ist die automatische Skalierung der Ein- und Ausgabe-Kapazität.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/event-hubs/event-hubs-auto-inflate'
    },
    {
      id: 'dp203-097', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'Which index type is generally recommended for very large fact tables in a Synapse dedicated SQL pool?',
        de: 'Welcher Indextyp wird im Allgemeinen für sehr große Faktentabellen in einem Synapse Dedicated SQL Pool empfohlen?'
      },
      options: [
        { id: 'A', text: { en: 'Clustered columnstore index', de: 'Clustered-Columnstore-Index' } },
        { id: 'B', text: { en: 'XML index', de: 'XML-Index' } },
        { id: 'C', text: { en: 'Spatial index', de: 'Spatial-Index' } },
        { id: 'D', text: { en: 'No index in all cases', de: 'In allen Fällen kein Index' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Clustered columnstore indexes are optimized for large analytical tables, delivering strong compression and fast scan performance. They are a common default for warehouse fact tables.',
        de: 'Clustered-Columnstore-Indizes sind für große analytische Tabellen optimiert und bieten starke Komprimierung sowie schnelle Scan-Leistung. Sie sind ein häufiger Standard für Warehouse-Faktentabellen.'
      },
      hint: {
        en: 'Think analytics, compression, and large scans.',
        de: 'Denken Sie an Analytik, Komprimierung und große Scans.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-tables-index'
    },
    {
      id: 'dp203-098', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'medium',
      scenario: null,
      question: {
        en: 'A transient staging table receives fast bulk inserts and is truncated after each load. It is not used for analytics queries. Which table structure is often appropriate?',
        de: 'Eine temporäre Staging-Tabelle erhält schnelle Bulk-Inserts und wird nach jedem Ladevorgang geleert. Sie wird nicht für analytische Abfragen verwendet. Welche Tabellenstruktur ist oft geeignet?'
      },
      options: [
        { id: 'A', text: { en: 'Heap', de: 'Heap' } },
        { id: 'B', text: { en: 'Replicated dimension', de: 'Replizierte Dimension' } },
        { id: 'C', text: { en: 'Always Encrypted table', de: 'Always-Encrypted-Tabelle' } },
        { id: 'D', text: { en: 'Archive blob', de: 'Archiv-Blob' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Heaps can be a good fit for transient staging tables that prioritize fast loads over query performance. They are often used temporarily before data is transformed and moved into optimized warehouse tables.',
        de: 'Heaps können gut zu temporären Staging-Tabellen passen, bei denen schnelle Ladevorgänge wichtiger sind als Abfrageleistung. Sie werden häufig vorübergehend verwendet, bevor Daten transformiert und in optimierte Warehouse-Tabellen verschoben werden.'
      },
      hint: {
        en: 'The table is for short-lived loading, not for end-user analytics.',
        de: 'Die Tabelle dient dem kurzfristigen Laden und nicht der Endbenutzer-Analytik.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-tables-index'
    },
    {
      id: 'dp203-099', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'hard',
      scenario: null,
      question: {
        en: 'You load a new month of data into a separate table and then want to move that month into the fact table almost instantly as a metadata operation. Which technique should you use?',
        de: 'Sie laden einen neuen Datenmonat in eine separate Tabelle und möchten diesen Monat anschließend nahezu sofort als Metadatenoperation in die Faktentabelle verschieben. Welche Technik sollten Sie verwenden?'
      },
      options: [
        { id: 'A', text: { en: 'Partition switching', de: 'Partitionswechsel' } },
        { id: 'B', text: { en: 'Dynamic data masking', de: 'Dynamische Datenmaskierung' } },
        { id: 'C', text: { en: 'VACUUM', de: 'VACUUM' } },
        { id: 'D', text: { en: 'Event trigger', de: 'Ereignistrigger' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Partition switching moves data between partition-aligned tables by metadata instead of physically copying rows. This is very efficient for large periodic loads and archival patterns.',
        de: 'Der Partitionswechsel verschiebt Daten zwischen partitionsausgerichteten Tabellen per Metadaten, anstatt Zeilen physisch zu kopieren. Dies ist sehr effizient für große periodische Ladevorgänge und Archivierungsmuster.'
      },
      hint: {
        en: 'The clue is an almost instantaneous metadata-based move.',
        de: 'Der Hinweis ist eine nahezu sofortige metadatenbasierte Verschiebung.'
      },
      reference: 'https://learn.microsoft.com/en-us/sql/relational-databases/tables/manage-retention-of-historical-data-in-system-versioned-temporal-tables?view=sql-server-ver16'
    },
    {
      id: 'dp203-100', type: 'multiple',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'hard',
      scenario: null,
      question: {
        en: 'Which two design choices commonly reduce cost in Synapse serverless SQL pool workloads over lake data?',
        de: 'Welche zwei Designentscheidungen senken typischerweise die Kosten bei Workloads mit Synapse Serverless SQL Pool über Lake-Daten?'
      },
      options: [
        { id: 'A', text: { en: 'Store data in Parquet and select only the columns you need', de: 'Daten in Parquet speichern und nur die benötigten Spalten auswählen' } },
        { id: 'B', text: { en: 'Organize data in partitioned folders and filter on partition columns', de: 'Daten in partitionierten Ordnern organisieren und auf Partitionsspalten filtern' } },
        { id: 'C', text: { en: 'Use SELECT * for every report', de: 'Für jeden Bericht SELECT * verwenden' } },
        { id: 'D', text: { en: 'Convert all files to plain CSV regardless of workload', de: 'Alle Dateien unabhängig vom Workload in einfaches CSV konvertieren' } }
      ],
      correct: ['A', 'B'],
      explanation: {
        en: 'Serverless SQL is charged by data processed, so reducing scanned bytes matters. Columnar Parquet, column projection, and partition pruning all reduce the amount of data that must be read.',
        de: 'Serverless SQL wird nach verarbeiteten Datenmengen berechnet, daher ist die Reduzierung gescannter Bytes entscheidend. Spaltenorientiertes Parquet, Spaltenprojektion und Partition Pruning verringern alle die zu lesende Datenmenge.'
      },
      hint: {
        en: 'Think about scanning fewer bytes.',
        de: 'Denken Sie daran, weniger Bytes zu scannen.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/synapse-analytics/sql/best-practices-serverless-sql-pool'
    },
    {
      id: 'dp203-101', type: 'single',
      domain: { en: 'Secure, Monitor, and Optimize Data Storage and Data Processing', de: 'Datenspeicherung und Datenverarbeitung sichern, überwachen und optimieren' }, difficulty: 'easy',
      scenario: null,
      question: {
        en: 'An interactive Azure Databricks cluster is often left idle after development sessions. Which configuration best helps reduce unnecessary cost?',
        de: 'Ein interaktiver Azure-Databricks-Cluster bleibt nach Entwicklungssitzungen häufig im Leerlauf bestehen. Welche Konfiguration hilft am besten, unnötige Kosten zu reduzieren?'
      },
      options: [
        { id: 'A', text: { en: 'Auto-termination', de: 'Auto-Termination' } },
        { id: 'B', text: { en: 'Dynamic data masking', de: 'Dynamische Datenmaskierung' } },
        { id: 'C', text: { en: 'Archive tier', de: 'Archivstufe' } },
        { id: 'D', text: { en: 'Row-level security', de: 'Row-Level Security' } }
      ],
      correct: ['A'],
      explanation: {
        en: 'Auto-termination shuts down a cluster after a defined idle period. This is a straightforward and effective way to limit Databricks compute cost for development and exploratory work.',
        de: 'Auto-Termination fährt einen Cluster nach einer definierten Leerlaufzeit herunter. Das ist ein einfacher und wirksamer Weg, Databricks-Compute-Kosten für Entwicklung und explorative Arbeit zu begrenzen.'
      },
      hint: {
        en: 'The cluster is idle, so the best optimization is to stop it automatically.',
        de: 'Der Cluster ist im Leerlauf, daher ist die beste Optimierung sein automatisches Beenden.'
      },
      reference: 'https://learn.microsoft.com/en-us/azure/databricks/clusters/clusters-manage#automatic-termination-1'
    }
  ]
};
