Skip to content

Commit 6c7391d

Browse files
authored
Added multiple pass parsing to dynamic JSONs
Update jsonextract-to-parse-many-attributes-at-a-time.md
1 parent 6e988c0 commit 6c7391d

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

content/en/altinity-kb-queries-and-syntax/jsonextract-to-parse-many-attributes-at-a-time.md

+32
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,35 @@ select extractKeyValuePairs(p['data'])['action'] as data ,
4040
format Vertical
4141
```
4242

43+
For very subnested dynamic JSON files, if you don't need all the keys, you could parse sublevels specifically. Still this will require several JSONExtract calls but each call will have less data to parse so complexity will be reduced for each pass: O(log n)
44+
45+
```sql
46+
CREATE TABLE better_parsing (json String) ENGINE = Memory;
47+
INSERT INTO better_parsing FORMAT JSONAsString {"timestamp":"2024-06-12T14:30:00.001Z","functionality":"DOCUMENT","flowId":"210abdee-6de5-474a-83da-748def0facc1","step":"BEGIN","env":"dev","successful":true,"data":{"action":"initiate_view","stats":{"total":1,"success":1,"failed":0},"client_ip":"192.168.1.100","client_port":"8080"}}
48+
49+
WITH parsed_content AS
50+
(
51+
SELECT
52+
JSONExtractKeysAndValues(json, 'String') AS 1st_level_arr,
53+
mapFromArrays(1st_level_arr.1, 1st_level_arr.2) AS 1st_level_map,
54+
JSONExtractKeysAndValues(1st_level_map['data'], 'String') AS 2nd_level_arr,
55+
mapFromArrays(2nd_level_arr.1, 2nd_level_arr.2) AS 2nd_level_map,
56+
JSONExtractKeysAndValues(2nd_level_map['stats'], 'String') AS 3rd_level_arr,
57+
mapFromArrays(3rd_level_arr.1, 3rd_level_arr.2) AS 3rd_level_map
58+
FROM json_tests.better_parsing
59+
)
60+
SELECT
61+
1st_level_map['timestamp'] AS timestamp,
62+
2nd_level_map['action'] AS action,
63+
3rd_level_map['total'] AS total
64+
3rd_level_map['nokey'] AS no_key_empty
65+
FROM parsed_content
66+
67+
/*
68+
┌─timestamp────────────────┬─action────────┬─total─┬─no_key_empty─┐
69+
1. │ 2024-06-12T14:30:00.001Z │ initiate_view │ 1 │ │
70+
└──────────────────────────┴───────────────┴───────┴──────────────┘
71+
72+
1 row in set. Elapsed: 0.003 sec.
73+
*/
74+
```

0 commit comments

Comments
 (0)