SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
Give Me My Damn Report: Making NoSQL Data Accessible to the Business
1. @slamdata @jdegoes
John A. De Goes — CTO SlamData Inc.
Give Me My Damn
Report: Making NoSQL
Data Accessible to the
Business
2. @slamdata @jdegoes
Agenda
1. The Rise of NoSQL
2. The Dark Side of NoSQL
3. Options for Reporting
a. Extract-Transform-Load
b. Fat Drivers
c. Code to NoSQL APIs
d. Native NoSQL Analytics
4. Why NoSQL Analytics is Hard
5. NoSQL Databases: Not Equal
6. Question & Answer
5. @slamdata @jdegoes
The Rise of NoSQL
● Massively scalable
● Operational Ease-of-Use
● Native support for rich data structures
● Native Support for heterogeneity
● Rapid Time-to-Deployment
9. @slamdata @jdegoes
The Dark Side of NoSQL
Give Me My Damn Report!
● Ad hoc analytics
● Exploratory analytics
● Operational analytics
● Analytics dashboards
● Batch reporting
● IoT / Event analytics
Need for Analytics
22. @slamdata @jdegoes
Fat Drivers
Report Card
✗ Slow
✗ Limited to Small Data
✗ Limited to Simple Analytics
✗ Limited to Simple Data
✓ Low Friction
✓ Flexibility in Analytics /
Reporting
31. @slamdata @jdegoes
CHaracteristics
2 Isomorphic Data Model
Data SQL²
{
"userId": 8927524,
"profile": {
"name": "Mary Jane",
"age": 29,
"gender": "female"
},
"comments": [{
"id": "F2372BAC",
"text": "I concur.",
"replyTo": [9817361, "F8ACD164F"],
"time": "2015-02-03"
}, {
"id": "GH732AFC",
"replyTo": [9654726, "A44124F"],
"time": "2015-03-01"
}]
}
SELECT comments[*].replyTo[*]
FROM data
32. @slamdata @jdegoes
CHaracteristics
3. Multidimensionality
Data SQL²
{"user_id": 928347234,
"email": null,
"events": [
{"impression":{
"ts": 912348934,
"page": "index.html"}}]}
SELECT user_id,
[events[_] WHERE
events[_].ts < 9347234 ...]
AS events
FROM visitors
33. @slamdata @jdegoes
CHaracteristics
4. Unified Schema/Data
Data SQL²
{"user_id": "mary@bigco.com",
"band_plays":{
"Squirrel Nut Zippers": 56,
"Red Hot Tomatoes": 19,
"Big Bad Voodoo Daddy": 102}}
SELECT band_plays{*:} AS artistName,
SUM(band_plays{*}) AS votes
FROM music
GROUP BY band_plays{*:}
34. @slamdata @jdegoes
CHaracteristics
5. Polymorphic Queries
Data SQL²
{"type": "click",
"link": "http://foo.com"
"timestamp": 123987172}
{"type": "impression",
"page": "index.html"
"timestamp": 92372}
SELECT COUNT(*) AS count, timestamp
FROM data
GROUP BY timestamp
35. @slamdata @jdegoes
CHaracteristics
6. Post-Relational
Data SQL²
{"name": "John Doe",
"blog_posts": [
{"post_id": "89934"},
{"post_id": "92371"}
]}
SELECT authors.name, posts.title
FROM authors
JOIN posts
ON authors.blog_posts[*].post_id =
posts._id
36. @slamdata @jdegoes
CHaracteristics
7. Runtime Type Id & ConverSION
Data SQL²
{"email": ["joe@gmail.com",
"joe@slamdata.com"]}
{"email": {
"home": "sarah@gmail.com",
"work": "sarah@slamdata.com"}}
SELECT
CASE TYPEOF email
-- old: email stored in 2nd el:
WHEN 'array' THEN email[1]
-- new format:
WHEN 'map' THEN email.work
ELSE email
END AS email
FROM users
37. @slamdata @jdegoes
CHaracteristics
8. Structural Pattern Matching
Data SQL²
{"user_id": "toby@bing.com",
"events": [{"type": "purchase",
"timestamp": 12392342,
"order_id": "2ffa34aa"},
{"type": "click",
"timestamp": 92327123,
"link": "http://foo.com"}]}
SELECT
CASE user_events
WHEN […, e1, e2, …] THEN
e1.timestamp - e2.timestamp
END AS delta
FROM users