What is Data Catalog?#

DataCatalog is a service to index parameterized, strongly-typed data artifacts across revisions. It allows clients to query artifacts based on meta information and tags.

How Flyte Memoizes Task Executions on Data Catalog#

Flyte memoizes task executions by creating artifacts in DataCatalog and associating meta information regarding the execution with the artifact. Let’s walk through what happens when a task execution is cached on DataCatalog.

Every task instance is represented as a DataSet:

Dataset {
   project: Flyte project the task was registered in
   domain: Flyte domain for the task execution
   name: flyte_task-<taskName>
   version: <cache_version>-<hash(input params)>-<hash(output params)>

Every task execution is represented as an Artifact in the Dataset above:

Artifact {
   id: uuid
   Metadata: [executionName, executionVersion]
   ArtifactData: [List of ArtifactData]

ArtifactData {
   Name: <output-name>
   value: <offloaded storage location of the literal>

To retrieve the Artifact, tag the Artifact with a hash of the input values for the memoized task execution:

ArtifactTag {
   Name: flyte_cached-<unique hash of the input values>

When caching an execution, FlytePropeller will:

  1. Create a dataset for the task.

  2. Create an artifact that represents the execution, along with the artifact data that represents the execution output.

  3. Tag the artifact with a unique hash of the input values.

To ensure that the task execution is memoized, Flyte Propeller will:

  1. Compute the tag by computing the hash of the input.

  2. Check if a tagged artifact exists with that hash.

    • If it exists, we have a cache hit and the Propeller can skip the task execution.

    • If an artifact is not associated with the tag, Propeller needs to run the task.