forked from estuary/flow
-
Notifications
You must be signed in to change notification settings - Fork 0
/
acmeBank.flow.yaml
79 lines (75 loc) · 2.72 KB
/
acmeBank.flow.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
collections:
# Collection of 💲 transfers between accounts:
# {id: 123, sender: alice, recipient: bob, amount: 32.50}
acmeBank/transfers:
schema:
# JSON Schema of collection's documents.
type: object
properties:
id: { type: integer }
sender: { type: string }
recipient: { type: string }
amount: { type: number }
required: [id, sender, recipient, amount]
key: [/id]
# Derived balances of each account:
# {account: alice, amount: 67.35}
acmeBank/balances:
schema:
type: object
properties:
account: { type: string }
amount:
# Flow extends JSON schema with "reduce" annotations.
# These tell Flow how to combine each document location.
reduce: { strategy: sum }
type: number
required: [account, amount]
reduce: { strategy: merge }
key: [/account]
derivation:
transform:
fromTransfers:
source: { name: acmeBank/transfers }
# Lambdas are functions that map input documents into output documents.
# Here we declare a lambda that will map a bank transfer document
# into a balance update.
# This declaration tells Flow to look for an associated TypeScript module.
publish: { lambda: typescript }
# Uncomment when updating README:
#
#materializations:
# acmeBank/database:
# endpoint:
# connector:
# # Use a Docker connector to materialize into a PostgreSQL database.
# # Connectors encapsulate the details of how to update a remote system,
# # whether it's a database, a key/value store, pub/sub, or a SaaS API.
# image: ghcr.io/estuary/materialize-postgres:f6f197d
# config:
# # Try this by standing up a local PostgreSQL database.
# # docker run --rm -e POSTGRES_PASSWORD=password -p 5432:5432 postgres -c log_statement=all
# # (Use host: host.docker.internal when running Docker for Windows/Mac).
# host: localhost
# password: password
# database: postgres
# user: postgres
# port: 5432
# bindings:
# # Create and materialize into table `account_balances`.
# - resource:
# table: account_balances
# source: acmeBank/balances
tests:
acmeBank/test/balancers-from-transfers:
- ingest:
collection: acmeBank/transfers
documents:
- { id: 1, sender: alice, recipient: bob, amount: 32.50 }
- { id: 2, sender: bob, recipient: carly, amount: 10.75 }
- verify:
collection: acmeBank/balances
documents:
- { account: alice, amount: -32.50 }
- { account: bob, amount: 21.75 }
- { account: carly, amount: 10.75 }