Source: Dev.to
Overview
Azure Logic Apps Standard uses Azure Table Storage as its primary persistence layer for:
- Workflow state
- Execution history
- 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}
| Component | Description |
|---|
| LAIdentifier | First 15 characters of MurmurHash64(LogicAppName) |
| suffix | Table‑type identifier (see the list below) |
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
Resulting base tables:
flow7365adc025615f3flows
flow7365adc025615f3flowruntimecontext
flow7365adc025615f3flowaccesskeys
flow7365adc025615f3flowsubscriptions
flow7365adc025615f3flowsubscriptionsummary
flow7365adc025615f3jobdefinitions
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}
| Placeholder | Description |
|---|
| LAIdentifier | First 15 characters of MurmurHash64(LogicAppName) |
| WFIdentifier | First 15 characters of MurmurHash64(WorkflowId) |
| suffix | Table‑type identifier (e.g., flows, runs, …) |
Flow‑table types
| Table suffix | Purpose | Key data stored |
|---|
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 are partitioned by date for scalability:
{WFIdentifier}yyyyMMddT000000Z{suffix}
Example: 1c859134ef297b720250114T000000Zactions
Example
For workflow ProcessOrder in the OrderProcessing Logic App:
LAIdentifier = flow7365adc025615f3
WFIdentifier = 1c859134ef297b7
Resulting tables:
flow7365adc025615f31c859134ef297b7flows
flow7365adc025615f31c859134ef297b7runs
flow7365adc025615f31c859134ef297b7histories
flow7365adc025615f31c859134ef297b720250114T000000Zactions
flow7365adc025615f31c859134ef297b720250114T000000Zvariables
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, …) |
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, etc.) |
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, etc.) |
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 | Cached compressed definition |
JobDefinitions Table
| Field | Description |
|---|
JobId | Unique job identifier |
JobPartition | Job partition key |
Callback | Job callback type (e.g., LinearSequencerJob) |
State | Job state (Completed, Waiting, …) |
ExecutionState | Current execution state |
StartTime / EndTime | Job scheduling window |
NextExecutionTime | Next scheduled execution |
This reference is intended for developers, architects, and operations engineers who need to understand or troubleshoot the persistence layer of Azure Logic Apps Standard.
Recurrence & Retry Configuration
| Setting | Description |
|---|
| 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 | Reference to the workflow |
| Status | Succeeded, Failed, Running, Cancelled |
| CreatedTime / EndTime | Timestamps for the run |
| TriggerName | Name of the trigger that started the run |
| CorrelationId | Identifier for request correlation |
| ClientTrackingId | Client‑provided tracking identifier |
| TriggerCompressed | Compressed payload of the trigger |
| OutputsCompressed | Compressed payload of the run outputs |
Histories Table (Trigger History)
| Field | Description |
|---|
HistoryName | History entry identifier |
TriggerName | Trigger reference |
Fired | Boolean – whether the trigger actually fired |
Status | Trigger evaluation result |
InputsLinkCompressed | Link to trigger inputs (compressed) |
OutputsLinkCompressed | Link to trigger outputs (compressed) |
TrackingId | Correlation tracking identifier |
Actions Table
| Field | Description |
|---|
| ActionName | Identifier of the action |
| ActionRepetitionName | Loop iteration index (e.g., 000000) |
| Status | Succeeded, Skipped, Failed |
| Code | Result code (OK, ActionSkipped, etc.) |
| CreatedTime / CompletedTime | Timestamps for when the action started and finished |
| InputsLinkCompressed | Link to the compressed inputs blob |
| OutputsLinkCompressed | Link to the compressed outputs blob |
| RepeatItemIndex | Index of the loop iteration |
| RepeatItemScopeName | Name of the parent loop action |
| Error | Error details (if the action 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);
// Build the complete table name
string tableName = laIdentifier + wfIdentifier + suffix;
Constraints
- Table names: Max 63 characters (Azure Table Storage limit)
- Characters: Lowercase alphanumeric only
- Hash truncation: 15 characters provides sufficient uniqueness
Quick Reference
Base: flow{LAIdentifier}{suffix}
Flow: flow{LAIdentifier}{WFIdentifier}{suffix}
Dated: flow{LAIdentifier}{WFIdentifier}{yyyyMMddT000000Z}{suffix}
Common Suffixes
| Suffix | Level | Purpose |
|---|
flows | Both | Definitions |
runs | Flow | Run history |
actions | Flow | Action executions |
flowsubscriptions | Base | Trigger subscriptions |
jobdefinitions | Base | Scheduled jobs |