DEV Community

Daniel Jonathan
Daniel Jonathan

Posted on

Inside Logic Apps Standard: How Azure Tables Store Your Workflows

Overview

Azure Logic Apps Standard uses Azure Table Storage as its primary persistence layer for workflow state, execution history, and runtime metadata. This document provides a comprehensive reference to the table architecture, naming conventions, and schema patterns.


Table Categories

Logic Apps Standard organizes data into two distinct table categories:

Category Scope Purpose
Base Tables Logic App Resource Shared runtime metadata across all workflows
Flow Tables Individual Workflow Isolated execution data per workflow

This separation enables workflow isolation, horizontal scaling, and independent lifecycle management.


Base Tables (App-Level)

Base Tables store metadata that applies to the entire Logic App resource. All workflows within a Logic App share these tables.

Table Naming Pattern

flow{LAIdentifier}{suffix}
Enter fullscreen mode Exit fullscreen mode

Where:

  • LAIdentifier = First 15 characters of MurmurHash64(LogicAppName)
  • suffix = Table type identifier

Base Table Types

Table Suffix Purpose Key Data
flows Master workflow registry Workflow definitions, state, CU assignment
flowruntimecontext Runtime execution context Flow state, execution cluster type, runtime config
flowaccesskeys Workflow access keys Primary/secondary keys for workflow API access
flowsubscriptions Subscription registration Tenant registration, subscription state
flowsubscriptionsummary Workflow counts & summaries Flow counts by state (enabled/disabled)
jobdefinitions Job scheduler metadata Execution state, retry config, repeat schedules

Example

For a Logic App named OrderProcessing:

LAIdentifier = flow7365adc025615f3

Base Tables:
├── flow7365adc025615f3flows
├── flow7365adc025615f3flowruntimecontext
├── flow7365adc025615f3flowaccesskeys
├── flow7365adc025615f3flowsubscriptions
└── flow7365adc025615f3jobdefinitions
Enter fullscreen mode Exit fullscreen mode

Flow Tables (Workflow-Level)

Flow Tables store execution data specific to each workflow. Each workflow gets its own isolated set of tables.

Table Naming Pattern

flow{LAIdentifier}{WFIdentifier}{suffix}
Enter fullscreen mode Exit fullscreen mode

Where:

  • LAIdentifier = First 15 characters of MurmurHash64(LogicAppName)
  • WFIdentifier = First 15 characters of MurmurHash64(WorkflowId)
  • suffix = Table type identifier

Flow Table Types

Table Suffix Purpose Key Data
flows Workflow definition cache Latest definition, parameters, runtime context, CU
runs Run metadata Run status, timing, trigger info, correlation IDs
histories Trigger history Trigger fires, evaluation results, input/output links
actions Action executions Action status, timing, input/output blob links
variables Workflow variables Variable name, data type, value links
concurrentruns Concurrency tracking Active run coordination (when concurrency is enabled)

Date-Stamped Tables

Action-related tables use date partitioning for scalability:

{WFIdentifier}yyyyMMddT000000Z{suffix}
Enter fullscreen mode Exit fullscreen mode

Example: 1c859134ef297b720250114T000000Zactions

Example

For workflow ProcessOrder in OrderProcessing Logic App:

LAIdentifier = flow7365adc025615f3
WFIdentifier = 1c859134ef297b7

Flow Tables:
├── flow7365adc025615f31c859134ef297b7flows
├── flow7365adc025615f31c859134ef297b7runs
├── flow7365adc025615f31c859134ef297b7histories
├── flow7365adc025615f31c859134ef297b720250114T000000Zactions
└── flow7365adc025615f31c859134ef297b720250114T000000Zvariables
Enter fullscreen mode Exit fullscreen mode

Table Key Fields

Base Flows Table (Master Registry)

Field Description
FlowId Unique workflow identifier (GUID)
FlowName Workflow name
Kind Workflow type (Stateful / Stateless)
State Enabled or Disabled
ScaleUnit CU assignment (CU00, CU01, etc.)
DefinitionCompressed Compressed workflow JSON definition
ParametersCompressed Compressed workflow parameters
RuntimeConfiguration Retention settings, operation options
CreatedTime / ChangedTime Lifecycle timestamps

FlowRuntimeContext Table

Field Description
FlowId Workflow identifier
FlowState Current workflow state
FlowExecutionClusterType Execution cluster (Classic)
Kind Workflow type
RuntimeConfiguration Runtime settings JSON
FlowSequenceId Sequence identifier

FlowAccessKeys Table

Field Description
FlowId Workflow identifier
FlowAccessKeyName Key name (e.g., default)
PrimaryKey Primary access key
SecondaryKey Secondary access key

FlowSubscriptions Table

Field Description
SubscriptionId Azure subscription identifier
State Registration state (Registered)
Properties Tenant ID and registered features JSON
RegistrationDate Subscription registration timestamp

FlowSubscriptionSummary Table

Field Description
FlowCountsByState JSON with enabled/disabled workflow counts
FlowId / FlowName Workflow reference (for per-workflow entries)
State Workflow state
ScaleUnit CU assignment
DefinitionCompressed Compressed definition (cached)

JobDefinitions Table

Field Description
JobId Unique job identifier
JobPartition Job partition key
Callback Job callback type (e.g., LinearSequencerJob)
State Job state (Completed, Waiting, etc.)
ExecutionState Current execution state
StartTime / EndTime Job scheduling window
NextExecutionTime Scheduled next execution
RepeatMode / RepeatUnit / RepeatInterval Recurrence configuration
RetryMode / RetryCount / RetryInterval Retry configuration
CurrentExecutionCount Total executions
LastExecutionStatus / LastExecutionTime Most recent execution info
BinaryMetadata00-15 Compressed job metadata chunks

Runs Table

Field Description
FlowId / FlowName Workflow reference
Status Succeeded, Failed, Running, Cancelled
CreatedTime / EndTime Run timing
TriggerName Trigger that initiated the run
CorrelationId Request correlation tracking
ClientTrackingId Client-provided tracking ID
TriggerCompressed Compressed trigger payload
OutputsCompressed Compressed run outputs

Histories Table (Trigger History)

Field Description
HistoryName History entry identifier
TriggerName Trigger reference
Fired Boolean - whether trigger actually fired
Status Trigger evaluation result
InputsLinkCompressed Link to trigger inputs
OutputsLinkCompressed Link to trigger outputs
TrackingId Correlation tracking

Actions Table

Field Description
ActionName Action identifier
ActionRepetitionName Loop iteration index (e.g., 000000)
Status Succeeded, Skipped, Failed
Code Result code (OK, ActionSkipped, etc.)
CreatedTime / CompletedTime Action timing
InputsLinkCompressed Link to action inputs blob
OutputsLinkCompressed Link to action outputs blob
RepeatItemIndex Loop iteration number
RepeatItemScopeName Parent loop action name
Error Error details (if failed)

Variables Table

Field Description
VariableName Variable identifier
DataType Variable type (Integer, String, Boolean, etc.)
FlowId / FlowName Workflow reference
FlowRunSequenceId Run sequence identifier
OperationId Operation that modified the variable
OperationSequenceId Operation sequence
InputsLinkCompressed Link to variable input
ValueLinkCompressed Link to current variable value
CreatedTime / ChangedTime Variable lifecycle timestamps

Workflow Flows Table (Per-Workflow Cache)

Field Description
FlowId / FlowName Workflow identifier
Kind Workflow type (Stateful)
State Enabled or Disabled
ScaleUnit CU assignment
DefinitionCompressed Compressed latest workflow definition
ParametersCompressed Compressed parameters
RuntimeConfiguration Runtime settings JSON
RuntimeContext Compressed runtime context
FlowSequenceId Definition sequence ID
FlowUpdatedTime Last definition update time

Identifier Generation

Logic Apps uses MurmurHash64 for deterministic, collision-resistant identifier generation.

Algorithm

// Generate Logic App identifier (LAIdentifier)
string laIdentifier = "flow" + MurmurHash64(logicAppName).Substring(0, 15);

// Generate Workflow identifier (WFIdentifier)
string wfIdentifier = MurmurHash64(workflowId).Substring(0, 15);

// Complete table name
string tableName = laIdentifier + wfIdentifier + suffix;
Enter fullscreen mode Exit fullscreen mode

Constraints

  • Table names: Max 63 characters (Azure Table Storage limit)
  • Characters: Lowercase alphanumeric only
  • Hash truncation: 15 characters provides sufficient uniqueness

Quick Reference

Table Name Format

Base:  flow{LAIdentifier}{suffix}
Flow:  flow{LAIdentifier}{WFIdentifier}{suffix}
Dated: flow{LAIdentifier}{WFIdentifier}{yyyyMMddT000000Z}{suffix}
Enter fullscreen mode Exit fullscreen mode

Common Suffixes

Suffix Level Purpose
flows Both Definitions
runs Flow Run history
actions Flow Action executions
flowsubscriptions Base Trigger subscriptions
jobdefinitions Base Scheduled jobs

Top comments (0)