From 91318a9bf8f44e4baa1b79d8574c81e144d1137c Mon Sep 17 00:00:00 2001 From: supergi0 Date: Sun, 29 Oct 2023 22:20:11 +0530 Subject: [PATCH 1/2] added ttl sample --- README.md | 1 + sql/README.md | 29 ++++++----- sql/images/ttl_graph.png | Bin 0 -> 75741 bytes sql/ttl/README.md | 107 ++++++++++++++++++++++++++++++++++++++ sql/ttl/dozer-config.yaml | 46 ++++++++++++++++ 5 files changed, 169 insertions(+), 14 deletions(-) create mode 100644 sql/images/ttl_graph.png create mode 100644 sql/ttl/README.md create mode 100644 sql/ttl/dozer-config.yaml diff --git a/README.md b/README.md index fceba015..42b771b0 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,7 @@ Refer to the [Installation section](https://getdozer.io/docs/installation) for i | | [Using Sub queries](./sql/sub-queries) | How to use sub queries in Dozer | | | [Using UNIONs](./sql/union) | How to combine data using `UNION` in Dozer | | | [Using Window Functions](./sql/window-functions) | Use `Hop` and `Tumble` Windows | +| | [Using TTL](./sql/ttl) | Use `TTL` to manage memory usage | | | | | | Use Cases | [Flight Microservices](./usecases/pg-flights) | Build APIs over multiple microservices. | | | [Scaling Ecommerce](./usecases/scaling-ecommerce) | Profile and benchmark Dozer using an ecommerce data set | diff --git a/sql/README.md b/sql/README.md index abb2bd40..8a8b449f 100644 --- a/sql/README.md +++ b/sql/README.md @@ -2,7 +2,7 @@ This is a comprehensive guide showcasing different types of queries possible with Dozer SQL. -## Dataset +## Dataset We will be using two tables throughout this guide. These tables are from [NYC - TLC Trip Record Data](https://www.nyc.gov/site/tlc/about/tlc-trip-record-data.page). To download these run the command, @@ -16,8 +16,7 @@ This table is contained in a parquet file under `data/trips/fhvhv_tripdata_2022- ![table_1_image](/sql/images/table_1.png) - -### Table 2: taxi_zone_lookup +### Table 2: taxi_zone_lookup This table is contained in a csv file under `data/zones/taxi_zone_lookup.csv`. @@ -36,20 +35,22 @@ Hence, the basic statement structure is, ```sql SELECT A INTO C FROM B; ``` + The datatypes and casting compatible with Dozer SQL are described in the [documentation for datatypes and casting](https://getdozer.io/docs/transforming-data/data-types). Dozer SQL also supports primitive scalar function described in [documentation for scalar functions](https://getdozer.io/docs/transforming-data/scalar-functions). ## Table of contents -Let us start with basic Dozer SQL queries and move towards more complex queries. - -| Sr.no | Query type | Description | -| ----- | ---------- | -------------------------------------------------------------------- | -| 1 | [Filtering](./filtering/README.md) | A simple select operation with a `WHERE` clause | -| 2 | [Aggregation](./aggregation/README.md) | Multiple queries each describing a specifc aggregation on the data | -| 3 | [JOIN](./join/README.md) | Query to JOIN the tables based on `LocationID` | -| 4 | [CTEs](./cte/README.md) | Query with two CTE tables JOINed after filtering | -| 5 | [Sub queries](./sub-queries/README.md) | Multiple queries describing nested `SELECT` statements | -| 6 | [UNION](./union/README.md) | A `UNION` peformed inside a CTE, followed by a `JOIN` | -| 7 | [Window functions](./window-functions/README.md) | Queries describing the use of `TUMBLE` and `HOP` | \ No newline at end of file +Let us start with basic Dozer SQL queries and move towards more complex queries. + +| Sr.no | Query type | Description | +| ----- | ------------------------------------------------ | ------------------------------------------------------------------ | +| 1 | [Filtering](./filtering/README.md) | A simple select operation with a `WHERE` clause | +| 2 | [Aggregation](./aggregation/README.md) | Multiple queries each describing a specifc aggregation on the data | +| 3 | [JOIN](./join/README.md) | Query to JOIN the tables based on `LocationID` | +| 4 | [CTEs](./cte/README.md) | Query with two CTE tables JOINed after filtering | +| 5 | [Sub queries](./sub-queries/README.md) | Multiple queries describing nested `SELECT` statements | +| 6 | [UNION](./union/README.md) | A `UNION` peformed inside a CTE, followed by a `JOIN` | +| 7 | [Window functions](./window-functions/README.md) | Queries describing the use of `TUMBLE` and `HOP` | +| 8 | [TTL](./ttl/README.md) | Queries describing the use of `TTL` | diff --git a/sql/images/ttl_graph.png b/sql/images/ttl_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1272c86dc22b1f49ecd64a3b422ec37489d47eb3 GIT binary patch literal 75741 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 Date: Mon, 30 Oct 2023 10:44:29 +0530 Subject: [PATCH 2/2] modify time windows --- sql/ttl/README.md | 20 ++++++++++---------- sql/ttl/dozer-config.yaml | 8 ++++---- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/sql/ttl/README.md b/sql/ttl/README.md index dec1fc8a..d15c0ba2 100644 --- a/sql/ttl/README.md +++ b/sql/ttl/README.md @@ -2,28 +2,28 @@ This example shows how to use the Time To Live(TTL) function using Dozer SQL. -The TTL function provides a way to manage the memory usage in Dozer, particularly when dealing with vast streams of data. By setting a TTL, it ensures that only relevant (or recent) data is held in memory, providing a balance between data retention and memory efficiency. The TTL is based on the record's timestamp, ensuring that data eviction is contextually relevant. +The TTL function provides a way to manage the memory usage in Dozer, particularly when dealing with vast streams of data. By setting up a TTL, it ensures that only relevant (or recent) data is held in memory, providing a balance between data retention and memory efficiency. TTL is based on the record's timestamp, ensuring that data eviction is contextually relevant. To read more about window functions read the [documentation](https://getdozer.io/docs/transforming-data/windowing#ttl). -Here we describe two queries that will only use fresh data obtained over a 10 minute window, +Here we describe two queries that will only use fresh data obtained over a 5 minute window, -- Query to calculate the sum of tips obtained for a particular Pickup location over a 5 minutes window. +- Query to calculate the sum of tips obtained for a particular Pickup location over a 2 minutes window. -- Query to calculate the sum of tips obtained for a particular Pickup location over a 5 minutes window but the windows overlap by 2 minutes. - i.e. the 5 minutes is divided into, - - 2 minutes overlapping with past window +- Query to calculate the sum of tips obtained for a particular Pickup location over a 3 minutes window but the windows overlap by 1 minutes. + i.e. the 3 minutes is divided into, + - 1 minutes overlapping with past window - 1 minute non overlapping - - 2 minutes overlapping with next window + - 1 minutes overlapping with next window ## SQL Query and Structure ### Query 1 ```sql - SELECT t.PULocationID as location, SUM(t.tips) AS total_tips, t.window_start as start, t.window_end AS end + SELECT t.PULocationID as location, SUM(t.tips) AS total_tips, t.window_start as start, t.window_end AS end INTO table1 - FROM TTL(TUMBLE(trips, pickup_datetime, '5 MINUTES'), pickup_datetime, '10 MINUTES') t + FROM TTL(TUMBLE(trips, pickup_datetime, '2 MINUTES'), pickup_datetime, '5 MINUTES') t GROUP BY t.PULocationID, t.window_start, t.window_end; ``` @@ -32,7 +32,7 @@ Here we describe two queries that will only use fresh data obtained over a 10 mi ```sql SELECT t.PULocationID as location, SUM(t.tips) AS total_tips, t.window_start as start, t.window_end AS end INTO table2 - FROM TTL(HOP(trips, pickup_datetime, '2 MINUTE', '5 MINUTES'), pickup_datetime, '10 MINUTES') t + FROM TTL(HOP(trips, pickup_datetime, '1 MINUTE', '3 MINUTES'), pickup_datetime, '5 MINUTES') t GROUP BY t.PULocationID, t.window_start, t.window_end; ``` diff --git a/sql/ttl/dozer-config.yaml b/sql/ttl/dozer-config.yaml index 2e37cab1..ed4bcca4 100644 --- a/sql/ttl/dozer-config.yaml +++ b/sql/ttl/dozer-config.yaml @@ -20,18 +20,18 @@ sources: sql: | - -- get the total tips for each location in a 5 minute window + -- get the total tips for each location in a 2 minute window SELECT t.PULocationID as location, SUM(t.tips) AS total_tips, t.window_start as start, t.window_end AS end INTO table1 - FROM TTL(TUMBLE(trips, pickup_datetime, '5 MINUTES'), pickup_datetime, '10 MINUTES') t + FROM TTL(TUMBLE(trips, pickup_datetime, '2 MINUTES'), pickup_datetime, '5 MINUTES') t GROUP BY t.PULocationID, t.window_start, t.window_end; - -- get the total tips for each location where every window of 5 minutes overlaps by 2 minutes + -- get the total tips for each location where every window of 3 minutes overlaps by 1 minutes SELECT t.PULocationID as location, SUM(t.tips) AS total_tips, t.window_start as start, t.window_end AS end INTO table2 - FROM TTL(HOP(trips, pickup_datetime, '2 MINUTE', '5 MINUTES'), pickup_datetime, '10 MINUTES') t + FROM TTL(HOP(trips, pickup_datetime, '1 MINUTE', '3 MINUTES'), pickup_datetime, '5 MINUTES') t GROUP BY t.PULocationID, t.window_start, t.window_end; endpoints: