Direkt zum Inhalt

Große Erwartungen Tutorial: Validierung von Daten mit Python

Lerne in diesem durchgängigen Tutorial, wie du deine Daten mit Great Expectations in Python validierst!
Aktualisierte 29. Nov. 2024  · 20 Min. Lesezeit

Datenqualität und -konsistenz sind wie das Fundament eines Hauses - ohne eine solide Basis droht alles, was darauf gebaut wird, zusammenzubrechen. An dieser Stelle spielt die Datenvalidierung eine wichtige Rolle. Mit der Datenvalidierung kannst du sicherstellen, dass deine Daten genau, konsistent und zuverlässig sind.

Great Expectations ist ein Open-Source-Datenvalidierungstool, mit dem du Datenprobleme frühzeitig erkennen und sicherstellen kannst, dass deine Daten die erforderlichen Qualitätsstandards erfüllen.

In diesem Leitfaden führen wir dich durch den Prozess der Datenvalidierung mit Great Expectations und zeigen dir ein praktisches Beispiel, das dir den Einstieg erleichtert!

Was ist "Große Erwartungen"?

Great Expectations (GX) ist ein Open-Source-Framework, das sich für die Verwaltung und Automatisierung der Datenvalidierung in modernen Datenpipelines durchgesetzt hat.

Das auf Python basierende Framework wurde entwickelt, um Datenteams dabei zu helfen, die Qualität und Konsistenz ihrer Daten zu gewährleisten. Die Nutzer können "Erwartungen" definieren - Regeln oder Tests, die beschreiben, wie gültige Daten aussehen sollten - und automatisch überprüfen, ob die Daten diese Standards erfüllen.

Einige Vorteile von Great Expectations sind:

  • Automatisierte Datenvalidierung - Great Expectations automatisiert den Prozess der Datenvalidierung, wodurch der manuelle Aufwand reduziert und das Fehlerrisiko minimiert wird. Es stellt sicher, dass die Daten durchgängig den vordefinierten Standards entsprechen.
  • Integration in Datenpipelines - Die Software lässt sich problemlos in verschiedene Datenquellen und -plattformen integrieren, z. B. in SQL-Datenbanken, Cloud-Speicher und ETL-Tools, und ermöglicht sodie Datenvalidierung in verschiedenen Phasen deiner Pipeline.
  • Klare, umsetzbare Validierungsergebnisse - Das Tool liefert transparente Validierungsergebnisse, die es leicht machen, Probleme mit der Datenqualität zu erkennen und sie schnell zu beheben.
  • Daten-Dokumentation - Great Expectations kann eine detaillierte, leicht zugängliche Dokumentation deiner Datenvalidierungsprozesse erstellen, die den Teams hilft, sich an Qualitätsstandards zu orientieren, und die als Referenz für die zukünftige Verwendung dient.
  • Skalierbarkeit und Flexibilität - Als Open-Source-Tool ist Great Expectations in hohem Maße anpassbar und kann mit deinen Datenvalidierungsbedürfnissen skaliert werden, sodass du dich ohne hohe Kosten an verschiedene Anwendungsfälle anpassen kannst.

Schauen wir uns jetzt ein durchgängiges Beispiel an!

Werde Dateningenieur

Baue Python-Kenntnisse auf, um ein professioneller Dateningenieur zu werden.
Jetzt kostenlos loslegen

Große Erwartungen wecken

In diesem Lernprogramm lernst du, wie du mit GX Core, der Open-Source-Version von Great Expectations, einen Pandas DataFrame validieren kannst. Wir gehen durch das Einrichten eines Kontexts, das Registrieren einer Pandas-Datenquelle, das Definieren von Erwartungen und das Validieren von Datenbatches.

Hinweis: Wir empfehlen dir, mit dem DataLab-Notebook zu arbeiten, aber du kannst auch dein eigenes Python-Skript erstellen.

Voraussetzungen

  • Python 3.9 bis 3.12 installiert.
  • Um Konflikte zu vermeiden, wird dringend empfohlen, dass du Great Expectations in einer virtuellen Umgebung installierst (Haftungsausschluss: Die Einrichtung von virtuellen Umgebungen geht über den Rahmen dieses Artikels hinaus).
  • Ein Beispiel-Datensatz.

Hinweis: Wenn du das mitgelieferte DataLab-Notebook verwendest, sind diese Voraussetzungen bereits erfüllt. Du kannst sie gerne auslassen.

Verwende den folgenden Befehl, um GX über pip zu installieren:

pip install great_expectations

Mit diesem Befehl werden das Kernpaket und alle notwendigen Abhängigkeiten installiert.

Great Expectations benötigt einen Datenkontext, um Konfigurationen zu verwalten. Wir verwenden einen ephemeren Datenkontext, um zu vermeiden, dass Konfigurationen bestehen bleiben.

import great_expectations as gx

# Get the Ephemeral Data Context
context = gx.get_context()
assert type(context).__name__ == "EphemeralDataContext"

Erstellen deiner ersten Datenvalidierungssuite

Jetzt, wo GX eingerichtet ist, können wir eine Datenvalidierungssuite erstellen.

Eine Datenquelle verbindet Great Expectations mit deinen Daten, während ein Daten-Asset eine bestimmte Teilmenge von Daten darstellt (z. B. eine Tabelle, ein DataFrame oder eine Datei).

In diesem Fall werden wir alles vorbereiten, um eine Verbindung zu einem DataFrame namens inventory_parts_df herzustellen. Der Beispieldatensatz ist im mitgelieferten DataLab verfügbar und wird erstellt, sobald wir den SQL-Block ausführen:

Wenn du nicht mit DataLab arbeitest, erstelle deinen eigenen DataFrame mit Beispieldaten.

Jetzt erstellst du deine Datenquelle und dein Asset:

# Add a Pandas Data Source
data_source = context.data_sources.add_pandas(name="inventory_parts")
# Add a Data Asset to the Data Source
data_asset = data_source.add_dataframe_asset(name="inventory_parts_asset")

Eine Stapeldefinition identifiziert und organisiert deine Daten für die Validierung. Hier fügen wir eine Stapeldefinition hinzu, die den gesamten DataFrame umfasst:

# Define the Batch Definition name
batch_definition_name = "inventory_parts_batch"
# Add the Batch Definition
batch_definition = data_asset.add_batch_definition_whole_dataframe(batch_definition_name)
assert batch_definition.name == batch_definition_name

Ein Batch ist eine Sammlung von Daten, die an eine Batch-Definition gebunden ist. Um die Daten zu validieren, musst du den Batch abrufen und mit deinem DataFrame verknüpfen, in diesem Fall inventory_parts_df:

# Define the Batch Parameters
batch_parameters = {"dataframe": inventory_parts_df}
# Retrieve the Batch
batch = batch_definition.get_batch(batch_parameters=batch_parameters)

Erwartungen sind Regeln für die Validierung von Daten. In diesem Beispiel werden wir die folgenden einfachen Erwartungen definieren:

  1. Achte darauf, dass die Werte von inventory_id nicht null sind.
  2. Stelle sicher, dass die Werte von part_num eindeutig sind.
# Create an Expectation Suite
expectation_suite_name = "inventory_parts_suite"
suite = gx.ExpectationSuite(name=expectation_suite_name)
# Add Expectations
suite.add_expectation(
    gx.expectations.ExpectColumnValuesToNotBeNull(column="inventory_id")
)
suite.add_expectation(
    gx.expectations.ExpectColumnValuesToBeUnique(column="part_num")
)
# Add the Expectation Suite to the Context
context.suites.add(suite)

Du kannst alle verfügbaren Erwartungen in der Erwartungsgalerie erkunden. Wir ermutigen dich, noch ein paar mehr hinzuzufügen!

Nachdem du die Erwartungen definiert hast, gibt GX die Konfiguration der Erwartungssuite aus:

{
  "name": "inventory_parts_suite",
  "id": "b2de0b69-0869-4163-8dde-6c09884483f7",
  "expectations": [
    {
      "type": "expect_column_values_to_not_be_null",
      "kwargs": {
        "column": "inventory_id"
      },
      "meta": {},
      "id": "53d6c42a-d190-412f-a113-783b706531f4"
    },
    {
      "type": "expect_column_values_to_be_unique",
      "kwargs": {
        "column": "part_num"
      },
      "meta": {},
      "id": "362a2bdc-616d-4b3a-b7f0-c73808caee78"
    }
  ],
  "meta": {
    "great_expectations_version": "1.2.4"
  },
  "notes": null
}

Die Suite umfasst die folgenden Details:

  1. Name und ID der Suite: Ein eindeutiger Name (inventory_parts_suite) und eine Kennung, um die Suite zu verfolgen und zu verwalten.
  2. Erwartungen: Jede Regel legt fest:
    • Die Art der Prüfung (z. B. ob eine Spalte keine Nullwerte oder eindeutige Einträge hat).
    • Parameter, wie z. B. die zu prüfende Spalte.
    • Metadaten und eine eindeutige ID für jede Erwartung, die eine einfachere Nachverfolgung und Anpassung ermöglicht.
  3. Metadaten: Versionsinformationen für Great Expectations, um die Kompatibilität mit dem Tool sicherzustellen.
  4. Anmerkungen: Ein Platzhalter, um beschreibende Kommentare zur Suite hinzuzufügen (optional).

Diese strukturierte Ausgabe dient sowohl als Dokumentation als auch als wiederverwendbare Konfiguration für die Validierung deines Datensatzes, damit deine Erwartungen klar definiert, nachvollziehbar und für die zukünftige Nutzung bereit sind.

5. Validierung der Daten

Schließlich validierst du die Charge anhand der festgelegten Erwartungen und wertest die Ergebnisse aus.

# Validate the Data Against the Suite
validation_results = batch.validate(suite)
# Evaluate the Results
print(validation_results)

Nach der Validierung liefert Great Expectations einen detaillierten Bericht darüber, ob der Datensatz die definierten Erwartungen erfüllt:

{
  "success": false,
  "results": [
    {
      "success": true,
      "expectation_config": {
        "type": "expect_column_values_to_not_be_null",
        "kwargs": {
          "batch_id": "inventory_parts-inventory_parts_asset",
          "column": "inventory_id"
        },
        "meta": {},
        "id": "53d6c42a-d190-412f-a113-783b706531f4"
      },
      "result": {
        "element_count": 580069,
        "unexpected_count": 0,
        "unexpected_percent": 0.0,
        "partial_unexpected_list": [],
        "partial_unexpected_counts": [],
        "partial_unexpected_index_list": []
      },
      "meta": {},
      "exception_info": {
        "raised_exception": false,
        "exception_traceback": null,
        "exception_message": null
      }
    },
    {
      "success": false,
      "expectation_config": {
        "type": "expect_column_values_to_be_unique",
        "kwargs": {
          "batch_id": "inventory_parts-inventory_parts_asset",
          "column": "part_num"
        },
        "meta": {},
        "id": "362a2bdc-616d-4b3a-b7f0-c73808caee78"
      },
      "result": {
        "element_count": 580069,
        "unexpected_count": 568352,
        "unexpected_percent": 97.98006788847535,
        "partial_unexpected_list": [
          "48379c01",
          "paddle",
          "11816pr0005",
          "2343",
          "3003",
          "30176",
          "3020",
          "3022",
          "3023",
          "30357",
          "3039",
          "3062b",
          "3068b",
          "3069b",
          "3069b",
          "33291",
          "33291",
          "3795",
          "3941",
          "3960"
        ],
        "missing_count": 0,
        "missing_percent": 0.0,
        "unexpected_percent_total": 97.98006788847535,
        "unexpected_percent_nonmissing": 97.98006788847535,
        "partial_unexpected_counts": [
          {
            "value": "3069b",
            "count": 2
          },
          {
            "value": "33291",
            "count": 2
          },
          {
            "value": "11816pr0005",
            "count": 1
          },
          {
            "value": "2343",
            "count": 1
          },
          {
            "value": "3003",
            "count": 1
          },
          {
            "value": "30176",
            "count": 1
          },
          {
            "value": "3020",
            "count": 1
          },
          {
            "value": "3022",
            "count": 1
          },
          {
            "value": "3023",
            "count": 1
          },
          {
            "value": "30357",
            "count": 1
          },
          {
            "value": "3039",
            "count": 1
          },
          {
            "value": "3062b",
            "count": 1
          },
          {
            "value": "3068b",
            "count": 1
          },
          {
            "value": "3795",
            "count": 1
          },
          {
            "value": "3941",
            "count": 1
          },
          {
            "value": "3960",
            "count": 1
          },
          {
            "value": "48379c01",
            "count": 1
          },
          {
            "value": "paddle",
            "count": 1
          }
        ],
        "partial_unexpected_index_list": [
          0,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12,
          13,
          14,
          15,
          16,
          17,
          18,
          19,
          20,
          21
        ]
      },
      "meta": {},
      "exception_info": {
        "raised_exception": false,
        "exception_traceback": null,
        "exception_message": null
      }
    }
  ],
  "suite_name": "inventory_parts_suite",
  "suite_parameters": {},
  "statistics": {
    "evaluated_expectations": 2,
    "successful_expectations": 1,
    "unsuccessful_expectations": 1,
    "success_percent": 50.0
  },
  "meta": {
    "great_expectations_version": "1.2.4",
    "batch_spec": {
      "batch_data": "PandasDataFrame"
    },
    "batch_markers": {
      "ge_load_time": "20241129T122532.416424Z",
      "pandas_data_fingerprint": "84a1e1939091fcf54324910def3b89cd"
    },
    "active_batch_definition": {
      "datasource_name": "inventory_parts",
      "data_connector_name": "fluent",
      "data_asset_name": "inventory_parts_asset",
      "batch_identifiers": {
        "dataframe": "<DATAFRAME>"
      }
    }
  },
  "id": null
}

Dieser Bericht gibt Aufschluss über die Qualität deiner Daten und zeigt Erfolge und Misserfolge auf. Hier ist eine vereinfachte Erklärung der Ergebnisse:

Gesamtvalidierung: Das Ergebnis der Validierung war teilweise erfolgreich: 50 % der Erwartungen wurden erfüllt, 50 % nicht. Eine fehlgeschlagene Erwartung weist auf ein Problem mit der Datenqualität hin, das behoben werden muss. In diesem Fall entsprach eine Spalte nicht der festgelegten Regel.

Erwartung 1: inventory_id sollte keine fehlenden Werte haben

  • Ergebnis: Bestanden
  • Erläuterung: Jeder Wert in der Spalte inventory_id ist vorhanden, es gibt keine leeren oder fehlenden Einträge. Das deutet auf eine gute Datenvollständigkeit für diese Spalte hin.

Erwartung 2: part_num sollte eindeutige Werte haben

  • Ergebnis: Gescheitert
  • Erläuterung: Die Spalte part_num enthält 97,98% doppelte Werte, d.h. nur wenige Werte sind eindeutig.
  • Highlights:
    • Beispiele für doppelte Werte sind "3069b" und "33291".
    • Das Tool zeigt auch an, wie häufig diese Duplikate auftreten und wo sie sich in den Zeilen befinden, damit du die Probleme leichter finden und beheben kannst.

Natürlich ist dies nur ein Beispieldatensatz, und wir haben absichtlich eine positive und eine negative Erwartung aufgenommen, damit du beide Validierungsergebnisse sehen kannst.

Das war's! Du hast die End-to-End-Datenvalidierung erfolgreich durchgeführt.

Große Erwartungen in Datenpipelines integrieren

In einer Produktionsumgebung müssen Validierungen direkt in den Workflow eingebettet werden, um die Datenqualität in jeder Phase kontinuierlich zu überwachen. 

In diesem Abschnitt erfahren wir, wie du Great Expectations in deine Datenpipelines integrieren kannst.

Diese Beispiele sollen dir eine Vorstellung davon geben, welche zusätzlichen Konfigurationen erforderlich sein können, die hier nicht aufgeführt sind. Die aktuelle Syntax findest du in der Dokumentation des jeweiligen Tools!

Integration mit ETL-Tools

Die Integration von Great Expectations mit gängigen ETL-Tools wie Apache Airflow oder Prefect ist relativ einfach. Wenn du Validierungsschritte direkt in die ETL-Prozesse einbaust, kannst du Datenprobleme in Echtzeit erkennen und beheben, bevor sie die nachgelagerte Analyse beeinträchtigen.

Lass uns ein einfaches Beispiel für die Integration von Great Expectations mit Prefect durchgehen, um die Datenvalidierung als Teil eines automatisierten ETL-Workflows durchzuführen:

from prefect import task, Flow
import great_expectations as ge
# Define a task to run Great Expectations validation
@task
def validate_data():
    context = ge.data_context.DataContext()
    batch_kwargs = {"path": "path/to/your/datafile.csv", "datasource": "your_datasource"}
    batch = context.get_batch(batch_kwargs, suite_name="your_expectation_suite")
    results = context.run_validation_operator("action_list_operator", assets_to_validate=[batch])
	    
    # Check validation results and raise an alert if validation fails
    if not results["success"]:
        raise ValueError("Data validation failed!")
# Define your ETL flow
with Flow("ETL_with_GE_Validation") as flow:
    validation = validate_data()
# Execute the flow
flow.run()

In diesem Beispiel definieren wir einen Prefect-Flow mit einer Aufgabe für die Validierung von Great Expectations.

Die Aufgabe validate_data() lädt den Great Expectations-Kontext, ruft den Datenstapel ab und wendet die Expectation Suite an. 

Wenn die Daten die Validierungskriterien nicht erfüllen, löst die Aufgabe eine Warnung aus, die den Workflow anhält und nachgelagerte Fehler verhindert.

Kontinuierliche Datenvalidierung

Du kannst Validierungsaufträge mit verschiedenen Tools planen, z. B. mit Cron-Jobs auf Unix-basierten Systemen oder mit verwalteten Diensten wie Apache Airflow. In diesem Beispiel zeigen wir dir, wie du Validierungsläufe mit Airflow planst, das sich gut für die Orchestrierung von Datenpipelines eignet.

Hier erfährst du, wie du einen Airflow DAG(Directed Acyclic Graph) einrichten kannst, um Great Expectations täglich zu validieren:

from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime
import great_expectations as ge
# Define the DAG and set the schedule to run daily
default_args = {
	  'owner': 'airflow',
	  'start_date': datetime(2024, 1, 1),
	  'retries': 1,
}
dag = DAG(
      'great_expectations_validation',
	default_args=default_args,
	schedule_interval='@daily',  # Runs once a day
)
# Define the function to run the validation
def run_validation():
    context = ge.data_context.DataContext()
    batch = context.get_batch(batch_kwargs, suite_name="your_expectation_suite")
    results = context.run_validation_operator("action_list_operator", assets_to_validate=[batch])
    return results
# Set up the task in Airflow
validation_task = PythonOperator(
      task_id='run_great_expectations_validation',
      python_callable=run_validation,
      dag=dag,
)
# Set the task in the DAG
validation_task

In diesem Beispiel definieren wir eine DAG, die einmal am Tag einen Validierungslauf plant (@daily). 

Die Funktion run_validation() führt die Validierung durch, indem sie den Great Expectations-Kontext lädt und die definierte Expectation Suite auf die Daten anwendet.

Best Practices für die Datenvalidierung mit großen Erwartungen

Für Skalierbarkeit und Effizienz ist es immer ratsam, die besten Praktiken zu befolgen, und das ist bei der Datenvalidierung mit Great Expectations nicht anders.

Klein anfangen und iterieren

Beginne mit grundlegenden Datenqualitätsprüfungen und erweitere sie schrittweise. Es ist besser, sich anfangs auf die grundlegenden Erwartungen zu konzentrieren, um den Prozess nicht zu sehr zu verkomplizieren, was eine reibungslosere Integration und eine einfachere Fehlerbehebung ermöglicht. Je besser du den Datensatz verstehst, desto komplexere Validierungen kannst du hinzufügen.

Teamübergreifend zusammenarbeiten

Datenqualität ist nicht nur ein technisches Problem. Arbeite mit anderen Teams zusammen, um Erwartungen zu definieren und sicherzustellen, dass die implementierte Validierung mit der zugrunde liegenden Geschäftslogik und den Zielen übereinstimmt. Dieser funktionsübergreifende Ansatz garantiert, dass die Daten ihren Zweck erfüllen und den Anforderungen aller Beteiligten gerecht werden.

Automatisiere wo möglich

Automatisiere den Prozess, wo immer es möglich ist, um die Datenvalidierung in die Datenpipelines zu integrieren. Die Integration von automatisierten Validierungsprüfungen ermöglicht eine kontinuierliche Überwachung der Datenqualität ohne manuelle Eingriffe, was die Effizienz deutlich verbessert.

Fazit

Tolle Arbeit! Du hast gelernt, wie man Daten in Great Expectations konfiguriert und validiert. Diese Techniken helfen dir, eine hohe Datenqualität und Transparenz in deinen Arbeitsabläufen zu erhalten.

Um deine Fähigkeiten weiter auszubauen, schau dir diese Ressourcen an:

Werde Dateningenieur

Beweise deine Fähigkeiten als einsatzbereiter Datentechniker.

FAQs

Wie schneidet Great Expectations im Vergleich zu anderen Datenvalidierungstools ab?

Great Expectations ist quelloffen, flexibel und lässt sich gut in moderne Datenpipelines integrieren. Es zeichnet sich durch eine umfangreiche Erwartungsbibliothek und eine gute Dokumentation aus.

Muss ich Python können, um Great Expectations zu benutzen?

Grundlegende Python-Kenntnisse sind zwar hilfreich, aber Great Expectations bietet eine benutzerfreundliche Befehlszeilenschnittstelle und eine ausführliche Dokumentation, so dass es auch für Nicht-Programmierer zugänglich ist.

Welche Arten von Datenquellen werden von Great Expectations unterstützt?

Great Expectations unterstützt eine breite Palette von Datenquellen, darunter:

  • Relationale Datenbanken wie PostgreSQL, MySQL und SQL Server.
  • Cloud-Speicherlösungen wie AWS S3, Google Cloud Storage und Azure Blob Storage.
  • Dateiformate wie CSV, Parquet und Excel.
  • Big Data-Frameworks wie Apache Spark und Databricks. Du kannst Great Expectations ganz einfach mit diesen Quellen verbinden, indem du die entsprechende Konfiguration für deine Datenquelle verwendest.

Kann ich Great Expectations mit Streaming-Daten nutzen?

Great Expectations ist in erster Linie für die Batch-Datenvalidierung konzipiert. Es unterstützt zwar keine Streaming-Datenpipelines, aber du kannst es in Frameworks wie Apache Kafka oder Spark Structured Streaming integrieren, indem du regelmäßig Snapshots oder Mikrobatches von Daten validierst.

Ist es möglich, Erwartungen und Validierungsergebnisse zu kontrollieren?

Ja, du kannst Erwartungen und Konfigurationen versionskontrollieren, indem du sie als YAML- oder JSON-Dateien in einem Git-Repository speicherst. Für die Validierungsergebnisse kannst du einen datenbank- oder dateibasierten Speicher einrichten, um die Ergebnisse im Laufe der Zeit zu verfolgen und sie in deine CI/CD-Pipelines zur kontinuierlichen Überwachung zu integrieren.

Wie geht Great Expectations mit der Schemaentwicklung in Datensätzen um?

Great Expectations steuert die Schemaentwicklung durch sein flexibles Erwartungsrahmenwerk. Wenn sich dein Schema ändert, kannst du:

  • Verwende expect_table_columns_to_match_set oder ähnliche Erwartungen, um Spaltennamen dynamisch zu validieren.
  • Ändere oder erstelle neue Expectation Suites, um sie an das neue Schema anzupassen.
  • Nutze Schema-Inferenz-Tools, um die Erwartungen für neu hinzugefügte Spalten automatisch zu aktualisieren.

Kurtis Pykes 's photo
Author
Kurtis Pykes
LinkedIn

Thalia Barrera's photo
Author
Thalia Barrera

Thalia Barrera ist Senior Data Science Editor bei DataCamp. Sie hat einen Master in Informatik und mehr als ein Jahrzehnt Erfahrung in der Software- und Datentechnik. Thalia liebt es, technische Konzepte für Ingenieure und Datenwissenschaftler durch Blogbeiträge, Tutorials und Videokurse zu vereinfachen.

Themen

Lerne mehr über Data Engineering mit diesen Kursen!

Lernpfad

Data Engineer

40hrs hr
Gain in-demand skills to efficiently ingest, clean, manage data, and schedule and monitor pipelines, setting you apart in the data engineering field.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Der Blog

Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Bist du gerade auf der Suche nach einem Job, der Snowflake nutzt? Bereite dich mit diesen 20 besten Snowflake-Interview-Fragen vor, damit du den Job bekommst!
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 Min.

Der Blog

Top 30 Generative KI Interview Fragen und Antworten für 2024

Dieser Blog bietet eine umfassende Sammlung von Fragen und Antworten zu generativen KI-Interviews, die von grundlegenden Konzepten bis hin zu fortgeschrittenen Themen reichen.
Hesam Sheikh Hassani's photo

Hesam Sheikh Hassani

15 Min.

Der Blog

Die 32 besten AWS-Interview-Fragen und Antworten für 2024

Ein kompletter Leitfaden zur Erkundung der grundlegenden, mittleren und fortgeschrittenen AWS-Interview-Fragen, zusammen mit Fragen, die auf realen Situationen basieren. Es deckt alle Bereiche ab und sorgt so für eine abgerundete Vorbereitungsstrategie.
Zoumana Keita 's photo

Zoumana Keita

30 Min.

See MoreSee More