drop bunch of fiels
This commit is contained in:
parent
545ba4e2b5
commit
de095017b1
BIN
build_json.xlsx
BIN
build_json.xlsx
Binary file not shown.
12
event_log.md
12
event_log.md
@ -1,12 +0,0 @@
|
|||||||
event log
|
|
||||||
|
|
||||||
collection of dissimilar items
|
|
||||||
-> trigger based on insert adds to GL
|
|
||||||
-> gl adds to balance based on GL trigger
|
|
||||||
? how is fiscal period determined
|
|
||||||
|
|
||||||
|
|
||||||
log gl format
|
|
||||||
* the gl array is an array of object
|
|
||||||
* each gl line is initially a full json object
|
|
||||||
* extract demanded fields (account, amount) and delete from the json but retain the rest as the supporting items
|
|
@ -1,33 +0,0 @@
|
|||||||
WITH
|
|
||||||
x AS (
|
|
||||||
SELECT
|
|
||||||
$$
|
|
||||||
{"vendor":"Drug Mart","date":"2017-08-20","instrument":"Discover Card","item":[{"item":"Green Chili","amount":1.49},{"item":"Black Beans","amount":1.6},{"item":"Distilled Water","amount":7.12},{"item":"Fruit Preservative","amount":3.99},{"item":"Watch Battery","amount":3.79},{"item":"Sales Tax","amount":"0.26"}],"account":[{"account":"food","offset":"dcard","amount":1.49},{"account":"food","offset":"dcard","amount":1.6},{"account":"food","offset":"dcard","amount":7.12},{"account":"food","offset":"dcard","amount":3.99},{"account":"stuff","offset":"dcard","amount":3.79},{"account":"taxes","offset":"dcard","amount":"0.26"}]}
|
|
||||||
$$::jsonb j
|
|
||||||
),
|
|
||||||
acct AS (
|
|
||||||
SELECT
|
|
||||||
rs.*,
|
|
||||||
row_number() over() rn
|
|
||||||
FROM
|
|
||||||
x
|
|
||||||
JOIN LATERAL jsonb_to_recordset(x.j->'account') rs(account text,"offset" text, amount numeric) ON TRUE
|
|
||||||
),
|
|
||||||
item as (
|
|
||||||
SELECT
|
|
||||||
rs.*,
|
|
||||||
row_number() over() rn
|
|
||||||
FROM
|
|
||||||
x
|
|
||||||
JOIN LATERAL jsonb_to_recordset(x.j->'item') rs(item text, amount numeric) ON TRUE
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
item.*,
|
|
||||||
acct.*,
|
|
||||||
r.*
|
|
||||||
FROM
|
|
||||||
item
|
|
||||||
INNER JOIN acct ON
|
|
||||||
acct.rn = item.rn
|
|
||||||
CROSS JOIN x
|
|
||||||
JOIN LATERAL jsonb_to_record(x.j) r(vendor text, "date" date, instrument text) ON TRUE
|
|
@ -1,34 +0,0 @@
|
|||||||
|
|
||||||
--this is a dynamic approach that dumps all keys into the json except several that are required which it extracts
|
|
||||||
WITH
|
|
||||||
expand_gl AS (
|
|
||||||
SELECT
|
|
||||||
id,
|
|
||||||
ARRAY['GL',rn::text] json_path,
|
|
||||||
post_stmp,
|
|
||||||
(a.i->>'amt')::numeric amount,
|
|
||||||
a.i->>'account' account,
|
|
||||||
j.rec->'header'->>'date' tran_date,
|
|
||||||
j.rec->'header'->>'vendor' vendor,
|
|
||||||
(a.i - '{amt,account,date}'::text[])||j.rec->'header' as therest
|
|
||||||
FROM
|
|
||||||
evt.log j
|
|
||||||
LEFT JOIN LATERAL JSONB_ARRAY_ELEMENTS(j.rec->'GL') WITH ORDINALITY a(i, rn) ON TRUE
|
|
||||||
)
|
|
||||||
,gl_agg AS (
|
|
||||||
SELECT
|
|
||||||
id
|
|
||||||
, tran_date
|
|
||||||
, vendor
|
|
||||||
, SUM(amount) amt
|
|
||||||
, ROUND(SUM(amount) FILTER (WHERE account = 'dcard'),2) dr
|
|
||||||
FROM
|
|
||||||
expand_gl
|
|
||||||
GROUP BY
|
|
||||||
id
|
|
||||||
, tran_date
|
|
||||||
, vendor
|
|
||||||
ORDER BY
|
|
||||||
id asc
|
|
||||||
)
|
|
||||||
SELECT id, tran_date, vendor, amt, dr, sum(dr) over(ORDER BY id) FROM gl_agg
|
|
@ -1,72 +0,0 @@
|
|||||||
DO $f$
|
|
||||||
|
|
||||||
DECLARE _j jsonb;
|
|
||||||
DECLARE _m text;
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
|
|
||||||
_j := $${"header":{"vendor":"Target","date":"10/12/2017","instrument":"Discover Card","module":"hdrio","total":47.74,"location":"Stow, OH","transaction":"purchase","offset":"dcard"},"item":[{"vend item":"HERBAL","amt":7.99,"account":"home supplies","item":"shampoo","reason":"hygiene"},{"vend item":"HERBAL","amt":7.99,"account":"home supplies","item":"conditioner","reason":"hygiene"},{"vend item":"BUILDING SET","amt":28.74,"account":"recreation","item":"legos","reason":"toys","qty":6,"uom":"ea"},{"vend item":"OH TAX","amt":3.02,"account":"sales tax","item":"sales tax","reason":"sales tax","rate":"0.0675"}]}$$;
|
|
||||||
|
|
||||||
WITH
|
|
||||||
j AS (
|
|
||||||
SELECT
|
|
||||||
_j jb
|
|
||||||
)
|
|
||||||
|
|
||||||
--------build a duplicating cross join table------------------
|
|
||||||
|
|
||||||
,os AS (
|
|
||||||
SELECT
|
|
||||||
flag,
|
|
||||||
sign,
|
|
||||||
x.offs
|
|
||||||
FROM
|
|
||||||
j
|
|
||||||
JOIN LATERAL
|
|
||||||
(
|
|
||||||
VALUES
|
|
||||||
('ITEM',1,null),
|
|
||||||
('OFFSET',-1,j.jb->'header'->>'offset')
|
|
||||||
) x (flag, sign, offs) ON TRUE
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
------------do the cross join against all the item elements-------------------
|
|
||||||
|
|
||||||
,build AS (
|
|
||||||
SELECT
|
|
||||||
array['item',rn::text]::text jpath
|
|
||||||
,COALESCE(os.offs,ae.e->>'account') acct
|
|
||||||
,(ae.e->>'amt')::numeric * os.sign amount
|
|
||||||
FROM
|
|
||||||
j
|
|
||||||
LEFT JOIN LATERAL JSONB_ARRAY_ELEMENTS(J.JB->'item') WITH ORDINALITY ae(e,rn) ON TRUE
|
|
||||||
CROSS JOIN os
|
|
||||||
ORDER BY
|
|
||||||
ae.rn ASC,
|
|
||||||
os.flag ASC
|
|
||||||
)
|
|
||||||
|
|
||||||
-------------re-aggregate the items into a single array point called 'gl'---------------
|
|
||||||
|
|
||||||
,agg AS (
|
|
||||||
SELECT
|
|
||||||
jsonb_build_object('gl',jsonb_agg(row_to_json(b))) gl
|
|
||||||
FROM
|
|
||||||
build b
|
|
||||||
)
|
|
||||||
|
|
||||||
------------take the new 'gl' with array key-value pair and combine it with the original---------------
|
|
||||||
|
|
||||||
SELECT
|
|
||||||
jsonb_pretty(agg.gl||j.jb)
|
|
||||||
INTO
|
|
||||||
_m
|
|
||||||
FROM
|
|
||||||
agg
|
|
||||||
CROSS JOIN j;
|
|
||||||
|
|
||||||
RAISE NOTICE '%', _m;
|
|
||||||
|
|
||||||
END
|
|
||||||
$f$
|
|
@ -1,10 +0,0 @@
|
|||||||
the journal module is fine forvbasic items, but when entering recipts, a single item has two entries but they are hard to match up. this could be solved by creating a separate schema module that has a head, item, the glbsub items for each main item.
|
|
||||||
|
|
||||||
is there a way to do this such that subsequent usage can identify any component of the json with one access path?
|
|
||||||
|
|
||||||
or should each push to evt.log pre-implement the down-stream transformation to avoid this?
|
|
||||||
|
|
||||||
So the main json structure woudl have a header-item, but then there woudl also be a GL array of items that are assoiated with teh othe header-item lines but not under them as heirarchy items
|
|
||||||
The gl key then woudl be a header-item combination and coudl have a debit credit off of each of those
|
|
||||||
|
|
||||||
based on inital experience with manually loading receipts, may be good to setup a receipt module that automatically sets up the offset and reverses the sign, maybe a preview of the json
|
|
6
rec.json
6
rec.json
@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"party":"Lowe's",
|
|
||||||
"reason":"ceiling paint",
|
|
||||||
"reason":"rollers",
|
|
||||||
"reason":"plastic sheet"
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
[core]
|
|
||||||
engine = pg
|
|
||||||
# plan_file = sqitch.plan
|
|
||||||
# top_dir = .
|
|
||||||
# [engine "pg"]
|
|
||||||
# target = db:pg:
|
|
||||||
# registry = sqitch
|
|
||||||
# client = psql
|
|
@ -1,4 +0,0 @@
|
|||||||
%syntax-version=1.0.0
|
|
||||||
%project=tps_etl
|
|
||||||
%uri=https://github.com/fleetside72/tps_etl
|
|
||||||
|
|
BIN
summary.xlsx
BIN
summary.xlsx
Binary file not shown.
@ -1,16 +0,0 @@
|
|||||||
SELECT
|
|
||||||
jsonb_pretty(
|
|
||||||
$$
|
|
||||||
{
|
|
||||||
"path":"C:\\users\\ptrowbridge\\downloads\\transsearchcsv.csv"
|
|
||||||
,"srce":"PNCC"
|
|
||||||
,"stamp":"2017-10-24 08:32:06.599067-04"
|
|
||||||
,"inserted":{
|
|
||||||
"keys":[
|
|
||||||
1,2,3,4,5,6,7
|
|
||||||
]
|
|
||||||
,"summary":""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$$::jsonb
|
|
||||||
)
|
|
3241
ubm_data.sql
3241
ubm_data.sql
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user