Table Storage

Azure integration · 14 node(s).

00Overview

Store and retrieve rows in Azure Table Storage straight from a flow — insert, fetch, update, upsert, delete and query entities, and run up to a hundred changes as one all-or-nothing batch, plus create, list and delete the tables themselves. You can also hand out scoped, time-limited access with a shared access signature, manage a table's stored access policies, and read the account's Table service settings for diagnostics. Everything keys off a storage account you already have, using its account key, a connection string or a Microsoft Entra service principal.

Every field below is exactly what you see in the Flomation editor. Fields marked ● live picker let you choose from a list pulled live from your account — no IDs to look up.

01Connecting Table Storage

  1. In the Azure portal, open your storage account and go to Security + networking → Access keys — this one page has everything the first two authentication methods need.
  2. For the simplest setup, set Authentication to Shared Key, put the account's name in Storage Account, and copy the Key value (the base64 string, not its name) into Account Key. Alternatively set Authentication to Connection String and paste the whole Connection string from the same page into Connection String — it already carries the account name and key.
  3. To authenticate as an app instead, set Authentication to Microsoft Entra (service principal). In Microsoft Entra ID → App registrations, register an application, add a secret under Certificates & secrets → Client secrets, then fill Tenant ID (Directory / tenant ID), Client ID (Application / client ID) and Client Secret.
  4. For the service-principal method, also grant that app access to the data: on the storage account's Access control (IAM) blade, assign it the Storage Table Data Contributor role (or Storage Table Data Reader for read-only) — a subscription-level Owner role is not enough.
  5. Store the sensitive value — the account key, connection string or client secret — as a Flomation environment secret (e.g. tables_secret) and select it in the node's matching field.
FieldTypeDetails
AuthenticationstringShared Key, Connection String, Microsoft Entra (service principal)
Account KeysecretBase64 account key — Storage Account ▸ Access keys
Connection StringsecretDefaultEndpointsProtocol=https;AccountName=…;AccountKey=…;EndpointSuffix=core.windows.net — Storage Account ▸ Access keys ▸ Connection string
Client SecretsecretThe app needs a Storage Table Data role on the account (RBAC)
Allow Insecure TLSbooleanSkip TLS verification — only for custom endpoints with a self-signed certificate
Storage Accountstringmystorageaccount
Tenant IDstringDirectory (tenant) ID — a GUID or your-tenant.onmicrosoft.com
Client IDstringApplication (client) ID of the service principal
Custom Endpointstringhttps://myaccount.table.core.windows.net — leave blank to derive; Azurite: http://host:10002/devstoreaccount1
i
Pick an Environment on your flow (Flow Settings → Environment) so the secret resolves. Secret fields never show the value — they reference ${secrets.your_secret}.

02Entity

Azure Table Storage: Batch Rows

azure/tables/entity_batch · Action

Apply up to 100 row changes as one all-or-nothing transaction. Every change must be in the SAME partition — that is the service's rule, not ours, and it is what makes the batch atomic

FieldTypeDetails
TablestringRequiredMyTable — letters and digits only, starting with a letter
Changes (JSON array)objectRequired[{"action":"upsert_merge","row":{"PartitionKey":"orders","RowKey":"1001","Total":42}},{"action":"delete","row":{"PartitionKey":"orders","RowKey":"1002"}}] — every row must share one PartitionKey

Returns: id, result, tool_result, success, error

Azure Table Storage: Delete Row

azure/tables/entity_delete · Action

Delete one row by Partition Key and Row Key. Supply an ETag to fail if the row changed since you read it

FieldTypeDetails
TablestringRequiredMyTable — letters and digits only, starting with a letter
Partition KeystringRequiredThe group the row lives in, e.g. orders — rows sharing one Partition Key are stored together and are the only rows a batch can touch
Row KeystringRequiredThe row's ID within that group, e.g. 1001 — Partition Key + Row Key together identify exactly one row
ETagstringOptional — take it from a previous action's result.etag to fail if the row changed since. LEAVE BLANK to overwrite whatever is there now
Ignore If It Does Not ExistbooleanTreat a missing row as success instead of an error

Returns: id, result, tool_result, success, error

Azure Table Storage: Get Row

azure/tables/entity_get · Action

Fetch one row by Partition Key and Row Key. This is the fast path — the only lookup that goes straight to the row rather than scanning

FieldTypeDetails
TablestringRequiredMyTable — letters and digits only, starting with a letter
Partition KeystringRequiredThe group the row lives in, e.g. orders — rows sharing one Partition Key are stored together and are the only rows a batch can touch
Row KeystringRequiredThe row's ID within that group, e.g. 1001 — Partition Key + Row Key together identify exactly one row
FieldsstringCustomer,Total — comma-separated; leave blank for every field

Returns: id, result, tool_result, success, error

Azure Table Storage: Insert Row

azure/tables/entity_insert · Action

Insert a new row. Fails if a row with the same Partition Key and Row Key already exists — this is the strictly-create path; use Upsert Row to insert-or-update

FieldTypeDetails
TablestringRequiredMyTable — letters and digits only, starting with a letter
Row (JSON)objectRequired{"PartitionKey":"orders","RowKey":"1001","Customer":"Acme","Total":42} — PartitionKey and RowKey are required and must be text. Rows are FLAT: no nested objects or arrays

Returns: id, result, tool_result, success, error

Azure Table Storage: Query Rows

azure/tables/entity_query · Action

Query rows with an OData filter. Include the Partition Key in the filter wherever you can — only Partition Key and Row Key are indexed, so any other filter scans the whole table and gets slower as it grows

FieldTypeDetails
TablestringRequiredMyTable — letters and digits only, starting with a letter
Filter (OData)stringPartitionKey eq 'orders' and Total gt 100 — text values go in single quotes, and an apostrophe inside one must be doubled (O''Brien)
FieldsstringCustomer,Total — comma-separated; leave blank for every field
Return AllbooleanFollow the continuation to the end instead of returning one page. On an unfiltered table this reads every row
Limit (per page)integer50 unless set — the service caps a page at 1000 rows

Returns: results, count, tool_result, success, error

Azure Table Storage: Update Row

azure/tables/entity_update · Action

Update a row that must already exist. Merge only changes the fields you supply; Replace DELETES every field you leave out. Supply an ETag to fail if the row changed since you read it

FieldTypeDetails
TablestringRequiredMyTable — letters and digits only, starting with a letter
Row (JSON)objectRequired{"PartitionKey":"orders","RowKey":"1001","Customer":"Acme","Total":42} — PartitionKey and RowKey are required and must be text. Rows are FLAT: no nested objects or arrays
Update Modestringchoices: Merge — only change the fields you supply, Replace — delete any field you do not supply
ETagstringOptional — take it from a previous action's result.etag to fail if the row changed since. LEAVE BLANK to overwrite whatever is there now

Returns: id, result, tool_result, success, error

Azure Table Storage: Upsert Row

azure/tables/entity_upsert · Action

Insert the row, or update it if it already exists. The action most flows want. Merge only changes the fields you supply; Replace DELETES every field you leave out

FieldTypeDetails
TablestringRequiredMyTable — letters and digits only, starting with a letter
Row (JSON)objectRequired{"PartitionKey":"orders","RowKey":"1001","Customer":"Acme","Total":42} — PartitionKey and RowKey are required and must be text. Rows are FLAT: no nested objects or arrays
Update Modestringchoices: Merge — only change the fields you supply, Replace — delete any field you do not supply

Returns: id, result, tool_result, success, error

03Service

Azure Table Storage: Get Service Properties

azure/tables/service_get_properties · Action

Read the account-level Table service settings — CORS rules, logging and metrics — and optionally the geo-replication status. Diagnostic; rarely what a flow needs

FieldTypeDetails
Include Geo-Replication StatusbooleanOnly works on a read-access geo-redundant (RA-GRS) account AND only via its -secondary endpoint, e.g. https://myaccount-secondary.table.core.windows.net

Returns: id, result, tool_result, success, error

04Table

Azure Table Storage: Create Table

azure/tables/table_create · Action

Create a table in the storage account. Optionally succeed quietly when it already exists, so a flow can create-on-first-run without an error branch

FieldTypeDetails
TablestringRequiredMyTable — letters and digits only, starting with a letter
Ignore If It Already ExistsbooleanTreat an existing table as success instead of an error — the create-on-first-run shape

Returns: id, result, tool_result, success, error

Azure Table Storage: Delete Table

azure/tables/table_delete · Action

Delete a table and every row in it. The name stays unusable for up to about 40 seconds afterwards while the service reclaims it

FieldTypeDetails
TablestringRequiredMyTable — letters and digits only, starting with a letter
Ignore If It Does Not ExistbooleanTreat a missing table as success instead of an error

Returns: id, result, tool_result, success, error

Azure Table Storage: Generate SAS Link

azure/tables/table_generate_sas · Action

Create a time-limited shared access signature for one table — hand out access without sharing the account key, optionally narrowed to a slice of rows. Signed locally with the account key; no API call is made

FieldTypeDetails
TablestringRequiredMyTable — letters and digits only, starting with a letter
Permissionsstringr (read) is the default — any subset of "raud": read, add, update, delete
Expires After (hours)integer24 unless set
HTTPS OnlybooleanRefuse the link over plain HTTP. Leave off for an Azurite endpoint, which is HTTP
From Partition KeystringOptional — limit the link to rows from this partition onwards
From Row KeystringOptional — only meaningful alongside From Partition Key
To Partition KeystringOptional — limit the link to rows up to and including this partition
To Row KeystringOptional — only meaningful alongside To Partition Key

Returns: id, result, sas_url, sas_token, expires_at, tool_result, success, error

Azure Table Storage: Get Access Policies

azure/tables/table_get_access_policy · Action

Read the stored access policies on a table — the named, revocable grants a SAS link can point at instead of carrying its own permissions

FieldTypeDetails
TablestringRequiredMyTable — letters and digits only, starting with a letter

Returns: results, count, tool_result, success, error

Azure Table Storage: List Tables

azure/tables/table_get_all · Action

List the tables in the storage account

FieldTypeDetails
Filter (OData)stringTableName eq 'MyTable' — leave blank for every table
Return AllbooleanFollow the continuation token to the end instead of returning one page
Limitinteger50 unless set — ignored when Return All is on

Returns: results, count, tool_result, success, error

Azure Table Storage: Set Access Policies

azure/tables/table_set_access_policy · Action

Write the stored access policies on a table. This REPLACES the whole set — any policy you leave out is removed, which instantly revokes every SAS link that referenced it. Send an empty list to clear them all

FieldTypeDetails
TablestringRequiredMyTable — letters and digits only, starting with a letter
Policies (JSON array)objectRequired[{"id":"readonly","permissions":"r","expiry":"2027-01-01T00:00:00Z"}] — max 5; permissions is any subset of "raud". An empty list [] removes every policy

Returns: id, result, tool_result, success, error

05Notes & Limitations

Behaviours and constraints worth knowing before you build with these nodes.