Skip to main content
The Schema tab in Insights lists the tables and columns you can query. Insights reads a data lake: a stored copy of your ledger with four tables.

Balances belong to a ledger and optionally an identity. Each lake transaction row has a source wallet and a destination wallet.

How to join them

When a report needs columns from more than one table, join those tables on a shared ID. For example, a payment stores wallet IDs, but the owner’s name is on identity. A join brings them into one result. Every lake transaction row stores one source wallet and one destination wallet. Source is where money leaves. Destination is where money arrives. For payments that split across many wallets, see Multiple sources and Multiple destinations. Follow these steps to show each applied payment with the destination wallet and the owner’s name. Collapse balances and identity to one row per ID before you join, so multi-day copies do not multiply payment rows. See How the lake works.
1

Start from payments

Read from transactions and pick the payment fields you need.
2

Collapse wallets and owners

Build one row per balance_id and one row per identity_id. Use ANY_VALUE for display fields. Do not order by created_at to pick a latest snapshot.
3

Join destination wallet and owner

Connect destination to the collapsed wallet, then the wallet to the collapsed owner.
4

Put it together

Full query:
This returns each applied payment with the destination wallet and the owner’s name, without duplicating payments across daily copies.
Use these connections when you need more than an ID:
  • Use a join from transactions.source to a one-row-per-id balances set to see the wallet a payment left.
  • Use a join from transactions.destination to a one-row-per-id balances set to see the wallet a payment entered.
  • Use a join from balances.ledger_id to a one-row-per-id ledgers set to see which ledger a wallet belongs to.
  • Use a join from balances.identity_id to a one-row-per-id identity set to see the owner of a wallet.

Columns you can select

Use the tabs below to see what each table stores and when to select each column. Each tab is one lake table. When a report needs columns from more than one table, join on a shared ID. Collapse repeating entity tables to one row per ID first. For example, join transactions.destination to a one-row-per-id balances set, then to a one-row-per-id identity set, to show a payment with the receiving wallet and owner.
In the Schema tab (or in a SELECT * result), you may see columns that start with _blnk_ or __lake_. Those are internal lake fields and can change. Select the named columns in the tabs above instead.

Transaction status

Most reports filter on status. Core stores each state as its own row. See Transaction lifecycle. From QUEUED, a transaction can become INFLIGHT, APPLIED, or REJECTED. From INFLIGHT, it can become APPLIED or VOID. APPLIED, VOID, and REJECTED are terminal. An applied transaction does not later become void or rejected.
Transaction lifecycle: QUEUED can become INFLIGHT, APPLIED, or REJECTED. INFLIGHT can become APPLIED or VOID.

APPLIED, VOID, and REJECTED are terminal. Only INFLIGHT is money still on hold.


Need help?

We are very happy to help you make the most of Blnk, regardless of whether it is your first time or you are switching from another tool. To ask questions or discuss issues, please contact us or join our Discord community.