From 60debba53e18094d724d3bcdd332b558fd54ba7d Mon Sep 17 00:00:00 2001 From: Lujein Date: Thu, 21 Nov 2024 16:15:43 +0100 Subject: [PATCH 01/16] adding my notes of lab1 --- .../docker-compose.yml | 2 +- .../lecture-lab/analytical_query.sql | 9 -- .../lecture-lab/lab1_1_players.sql | 36 +++++ .../lecture-lab/lab1_2_my_notes.sql | 129 +++++++++++++++ .../lecture-lab/lab1_3_unnest_query.sql | 9 ++ .../lecture-lab/lab1_4_my_notes.sql | 34 ++++ .../lecture-lab/lab1_5_my_notes.sql | 150 ++++++++++++++++++ .../lecture-lab/lab1_6_pipeline_query.sql | 47 ++++++ .../lecture-lab/lab1_7_analytical_query.sql | 21 +++ .../lecture-lab/pipeline_query.sql | 43 ----- .../lecture-lab/players.sql | 29 ---- .../lecture-lab/unnest_query.sql | 6 - 12 files changed, 427 insertions(+), 88 deletions(-) delete mode 100644 bootcamp/materials/1-dimensional-data-modeling/lecture-lab/analytical_query.sql create mode 100644 bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_1_players.sql create mode 100644 bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_2_my_notes.sql create mode 100644 bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_3_unnest_query.sql create mode 100644 bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_4_my_notes.sql create mode 100644 bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_5_my_notes.sql create mode 100644 bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_6_pipeline_query.sql create mode 100644 bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_7_analytical_query.sql delete mode 100644 bootcamp/materials/1-dimensional-data-modeling/lecture-lab/pipeline_query.sql delete mode 100644 bootcamp/materials/1-dimensional-data-modeling/lecture-lab/players.sql delete mode 100644 bootcamp/materials/1-dimensional-data-modeling/lecture-lab/unnest_query.sql diff --git a/bootcamp/materials/1-dimensional-data-modeling/docker-compose.yml b/bootcamp/materials/1-dimensional-data-modeling/docker-compose.yml index a5828d94..78bcadb6 100644 --- a/bootcamp/materials/1-dimensional-data-modeling/docker-compose.yml +++ b/bootcamp/materials/1-dimensional-data-modeling/docker-compose.yml @@ -16,7 +16,7 @@ services: - ./:/bootcamp/ - ./data.dump:/docker-entrypoint-initdb.d/data.dump - ./scripts/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh - - postgres-data:/var/lib/postgresql/data + - ./postgres-data:/var/lib/postgresql/data volumes: postgres-data: diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/analytical_query.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/analytical_query.sql deleted file mode 100644 index e2c9bbc3..00000000 --- a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/analytical_query.sql +++ /dev/null @@ -1,9 +0,0 @@ - SELECT player_name, - (seasons[cardinality(seasons)]::season_stats).pts/ - CASE WHEN (seasons[1]::season_stats).pts = 0 THEN 1 - ELSE (seasons[1]::season_stats).pts END - AS ratio_most_recent_to_first - FROM players - WHERE current_season = 1998; - - diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_1_players.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_1_players.sql new file mode 100644 index 00000000..fc19f793 --- /dev/null +++ b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_1_players.sql @@ -0,0 +1,36 @@ +/* Here we create the type season_stats and the players table. + Have a look at the player_seasons table already provided */ +CREATE TYPE season_stats AS ( + season Integer, + gp REAL, + pts REAL, + reb REAL, + ast REAL, + weight INTEGER +); +-- CREATE TYPE scoring_class AS ENUM ('bad', 'average', 'good', 'star'); +CREATE TABLE players ( + player_name TEXT, + height TEXT, + college TEXT, + country TEXT, + draft_year TEXT, + draft_round TEXT, + draft_number TEXT, + seasons season_stats [], + --scorer_class scoring_class, + --is_active BOOLEAN, + current_season INTEGER, + PRIMARY KEY (player_name, current_season) +); +/* + The player_seasons table has the attributes: player_name, + const_info (height, college, country, draft_year, draft_round, draft_number), + season_dependent_info (like gp, pts, reb, ast, weight, and season). + The players table has: + player_name, const_info, seasons which is an array of struct season_stats, and + current_season. Basically, for each player we have their history from previous + seasons. + There are attributes in player_seasons that we don't care much about like age + and other season-dependent values like netrtg, oreb-pct,...etc + */ \ No newline at end of file diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_2_my_notes.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_2_my_notes.sql new file mode 100644 index 00000000..54ec7656 --- /dev/null +++ b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_2_my_notes.sql @@ -0,0 +1,129 @@ +/* STEP 0: The skeleton is this outer join query that joins NULL player data from 1995 + with today's season data. Both tables don't have duplicate players */ +-- WITH yesterday AS ( +-- SELECT * +-- FROM players +-- WHERE current_season = 1995 +-- ), +-- today AS ( +-- SELECT * +-- FROM player_seasons +-- WHERE season = 1996 +-- ) +-- SELECT * +-- FROM today t +-- FULL OUTER JOIN yesterday y ON t.player_name = y.player_name; +/*------------------------------------------------------------------------------*/ +/* STEP 1: populate the players table with data of 1996 */ +INSERT into players WITH yesterday AS ( + SELECT * + FROM players + WHERE current_season = 1995 + ), + today AS ( + SELECT * + FROM player_seasons + WHERE season = 1996 + ) +SELECT -- we don't need to repeat the constant info twice + COALESCE (t.player_name, y.player_name) AS player_name, + COALESCE (t.height, y.height) AS height, + COALESCE (t.college, y.college) AS college, + COALESCE (t.country, y.country) AS country, + COALESCE(t.draft_year, y.draft_year) AS draft_year, + COALESCE(t.draft_round, y.draft_round) AS draft_round, + COALESCE(t.draft_number, y.draft_number) AS draft_number, + CASE + /* create a season_stats column in the final query result using CASE + and y.seasons and t.season values.*/ + WHEN y.seasons IS NULL THEN ARRAY [ROW( + t.season, + t.gp, + t.pts, + t.reb, + t.ast, + t.weight + )::season_stats] + WHEN t.season IS NOT NULL THEN y.seasons || ARRAY [ROW( + t.season, + t.gp, + t.pts, + t.reb, + t.ast, + t.weight + )::season_stats] + ELSE y.seasons + END AS season_stats, + COALESCE(t.season, y.current_season + 1) as current_season +FROM today t + FULL OUTER JOIN yesterday y ON t.player_name = y.player_name; +/* ---------------------------------------------------------------------------------*/ +/* STEP 2: we repeat the previous code with today data of 1997 */ +INSERT into players WITH yesterday AS ( + SELECT * + FROM players + WHERE current_season = 2000 + ), + today AS ( + SELECT * + FROM player_seasons + WHERE season = 2001 + ) +SELECT -- we don't need to repeat the constant info twice + COALESCE (t.player_name, y.player_name) AS player_name, + COALESCE (t.height, y.height) AS height, + COALESCE (t.college, y.college) AS college, + COALESCE (t.country, y.country) AS country, + COALESCE(t.draft_year, y.draft_year) AS draft_year, + COALESCE(t.draft_round, y.draft_round) AS draft_round, + COALESCE(t.draft_number, y.draft_number) AS draft_number, + CASE + /* create a season_stats column in the final query result using CASE + and y.seasons and t.season values.*/ + WHEN y.seasons IS NULL THEN ARRAY [ROW( + t.season, + t.gp, + t.pts, + t.reb, + t.ast, + t.weight + )::season_stats] + WHEN t.season IS NOT NULL THEN y.seasons || ARRAY [ROW( + t.season, + t.gp, + t.pts, + t.reb, + t.ast, + t.weight + )::season_stats] + ELSE y.seasons + END AS season_stats, + COALESCE(t.season, y.current_season + 1) as current_season +FROM today t + FULL OUTER JOIN yesterday y ON t.player_name = y.player_name; +/* Very important note: The previous query ADDS to the players table new rows + generated by the outer join. It doesn't assign to the players table those new + rows. This is why after executing the query, we will have duplicated rows for + players who played in both 1996 and 1997. Example: The player Andrew Lang. This + player has two rows now: + one with seasons value: {"(1996,52,5.3,5.3,0.5,275)"} and current_season 1996 + another with seasons value: {"(1996,52,5.3,5.3,0.5,275)", "(1997,57,2.7,2.7,0.3,270)"} + and current_season 1997. + This is why you might get an error complaining about duplicated keys when executing + the previous query. Because there will be repeated (player_name,current_season) + values. + This is also why in the yesterday table you specify the current_season value. + Now it makes sense! + I saved the results of the "inside" query into a table called players_till_1997 + This table has 527 rows. Whereas, when we insert those new rows to the players + table, the players table now has 968 rows which makes sense because the players + table which had only data from the season 1996 had 441 rows (441+527=968). + */ +/* STEP3: Execute the previous query with: + yesterday 1997 and today 1998 + yesterday 1998 and today 1999 + yesterday 1999 and today 2000 + yesterday 2000 and today 2001 + Now we have the players table with highest current_season value + of 2001*/ +/*-------------------------------------------------------------*/ \ No newline at end of file diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_3_unnest_query.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_3_unnest_query.sql new file mode 100644 index 00000000..c7f06219 --- /dev/null +++ b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_3_unnest_query.sql @@ -0,0 +1,9 @@ +SELECT player_name, + UNNEST(seasons) -- CROSS JOIN UNNEST + -- / LATERAL VIEW EXPLODE +FROM players +WHERE current_season = 1998 + AND player_name = 'Michael Jordan'; +/* This returns two rows: one for 1996 and one for 1997 + Recall that when we specify current_season = 1998, in the seasons + array we have info untill 1998 (including 1998) */ \ No newline at end of file diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_4_my_notes.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_4_my_notes.sql new file mode 100644 index 00000000..fb600186 --- /dev/null +++ b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_4_my_notes.sql @@ -0,0 +1,34 @@ +/* STEP1: */ +-- SELECT player_name, +-- UNNEST (seasons)::season_stats as season_info +-- /* ::season_stats is a type cast */ +-- FROM players +-- where current_season = 2001 +-- and player_name = 'Michael Jordan' +/* ------------------------------------------------------------*/ +/* STEP2: */ +-- WITH unnested AS ( +-- SELECT player_name, +-- UNNEST (seasons)::season_stats as seasons_info +-- /* ::season_stats is a type cast */ +-- FROM players +-- where current_season = 2001 +-- and player_name = 'Michael Jordan' +-- ) +-- SELECT player_name, +-- (seasons_info::season_stats).* +-- from unnested +-- /* ---------------------------------------------------------*/ +-- /* STEP3: same query as before but querying for all players instead */ +WITH unnested AS ( + SELECT player_name, + UNNEST (seasons)::season_stats as seasons_info + /* ::season_stats is a type cast */ + FROM players + where current_season = 2001 +) +SELECT player_name, + (seasons_info::season_stats).* +from unnested + /* Notice that the players' names are sorted. + This helps us apply the run-length encoding data compression method. */ \ No newline at end of file diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_5_my_notes.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_5_my_notes.sql new file mode 100644 index 00000000..f7b2e0f7 --- /dev/null +++ b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_5_my_notes.sql @@ -0,0 +1,150 @@ +/* STEP 0: + So far so good. Now, we drop the players table and create + it again only adding two more attributes this time: + scoring_class and years_since_last_season */ +-- drop table players; +/* ---------------------------------------------------------------------------------------*/ +/* STEP 1: Create the players table. + Note that the season_stats struct is still defined. */ +-- CREATE TYPE scoring_class AS ENUM ('bad', 'average', 'good', 'star'); +-- CREATE TABLE players ( +-- player_name TEXT, +-- height TEXT, +-- college TEXT, +-- country TEXT, +-- draft_year TEXT, +-- draft_round TEXT, +-- draft_number TEXT, +-- seasons season_stats [], +-- scoring_class scoring_class, +-- years_since_last_season Integer, +-- current_season INTEGER, +-- PRIMARY KEY (player_name, current_season) +-- ); +/* ---------------------------------------------------------------------------------------*/ +/* STEP 2: Populate the players table using player_seasons 1996 data */ +-- INSERT into players WITH yesterday AS ( +-- SELECT * +-- FROM players +-- WHERE current_season = 1995 +-- ), +-- today AS ( +-- SELECT * +-- FROM player_seasons +-- WHERE season = 1996 +-- ) +-- SELECT -- we don't need to repeat the constant info twice +-- COALESCE (t.player_name, y.player_name) AS player_name, +-- COALESCE (t.height, y.height) AS height, +-- COALESCE (t.college, y.college) AS college, +-- COALESCE (t.country, y.country) AS country, +-- COALESCE(t.draft_year, y.draft_year) AS draft_year, +-- COALESCE(t.draft_round, y.draft_round) AS draft_round, +-- COALESCE(t.draft_number, y.draft_number) AS draft_number, +-- CASE +-- /* create a season_stats column in the final query result using CASE +-- and y.seasons and t.season values.*/ +-- WHEN y.seasons IS NULL THEN ARRAY [ROW( +-- t.season, +-- t.gp, +-- t.pts, +-- t.reb, +-- t.ast, +-- t.weight +-- )::season_stats] +-- WHEN t.season IS NOT NULL THEN y.seasons || ARRAY [ROW( +-- t.season, +-- t.gp, +-- t.pts, +-- t.reb, +-- t.ast, +-- t.weight +-- )::season_stats] +-- ELSE y.seasons +-- END AS season_stats, +-- CASE +-- WHEN t.season IS NOT NULL THEN CASE +-- WHEN t.pts > 20 then 'star' +-- when t.pts > 15 then 'good' +-- when t.pts > 10 then 'average' +-- else 'bad' +-- END::scoring_class +-- ELSE y.scoring_class +-- END AS scoring_class, +-- CASE +-- WHEN t.season IS NOT NULL then 0 +-- ELSE y.years_since_last_season + 1 +-- END AS years_since_last_season, +-- COALESCE(t.season, y.current_season + 1) as current_season +-- FROM today t +-- FULL OUTER JOIN yesterday y ON t.player_name = y.player_name; +/* note that years_since_last_season is 0 for all players */ +/* -----------------------------------------------------------------------*/ +/* STEP3: repeat the same query for: yesterday 1996 and today 1997 + until yesterday 2000 and today 2001 */ +-- INSERT into players WITH yesterday AS ( +-- SELECT * +-- FROM players +-- WHERE current_season = 2000 +-- ), +-- today AS ( +-- SELECT * +-- FROM player_seasons +-- WHERE season = 2001 +-- ) +-- SELECT -- we don't need to repeat the constant info twice +-- COALESCE (t.player_name, y.player_name) AS player_name, +-- COALESCE (t.height, y.height) AS height, +-- COALESCE (t.college, y.college) AS college, +-- COALESCE (t.country, y.country) AS country, +-- COALESCE(t.draft_year, y.draft_year) AS draft_year, +-- COALESCE(t.draft_round, y.draft_round) AS draft_round, +-- COALESCE(t.draft_number, y.draft_number) AS draft_number, +-- CASE +-- /* create a season_stats column in the final query result using CASE +-- and y.seasons and t.season values.*/ +-- WHEN y.seasons IS NULL THEN ARRAY [ROW( +-- t.season, +-- t.gp, +-- t.pts, +-- t.reb, +-- t.ast, +-- t.weight +-- )::season_stats] +-- WHEN t.season IS NOT NULL THEN y.seasons || ARRAY [ROW( +-- t.season, +-- t.gp, +-- t.pts, +-- t.reb, +-- t.ast, +-- t.weight +-- )::season_stats] +-- ELSE y.seasons +-- END AS season_stats, +-- CASE +-- WHEN t.season IS NOT NULL THEN CASE +-- WHEN t.pts > 20 then 'star' +-- when t.pts > 15 then 'good' +-- when t.pts > 10 then 'average' +-- else 'bad' +-- END::scoring_class +-- ELSE y.scoring_class +-- END AS scoring_class, +-- CASE +-- WHEN t.season IS NOT NULL then 0 +-- ELSE y.years_since_last_season + 1 +-- END AS years_since_last_season, +-- COALESCE(t.season, y.current_season + 1) as current_season +-- FROM today t +-- FULL OUTER JOIN yesterday y ON t.player_name = y.player_name; +/* ----------------------------------------------------------------------*/ +/* STEP4: let us have a look at the result */ +select * +from players +where current_season = 2001; +/* --------------------------------------------------------------------------*/ +/* STEP5: Example of specific player */ +select * +from players +where player_name = 'Michael Jordan'; +/* --------------------------------------------------------------------------*/ \ No newline at end of file diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_6_pipeline_query.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_6_pipeline_query.sql new file mode 100644 index 00000000..c74e164d --- /dev/null +++ b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_6_pipeline_query.sql @@ -0,0 +1,47 @@ +/* In the lab, we didn't exactly use this query as + we used the attribute years_since_last_season which is more informative + than the is_active attribute defined here. */ +WITH last_season AS ( + SELECT * + FROM players + WHERE current_season = 1997 +), +this_season AS ( + SELECT * + FROM player_seasons + WHERE season = 1998 +) +INSERT INTO players +SELECT COALESCE(ls.player_name, ts.player_name) as player_name, + COALESCE(ls.height, ts.height) as height, + COALESCE(ls.college, ts.college) as college, + COALESCE(ls.country, ts.country) as country, + COALESCE(ls.draft_year, ts.draft_year) as draft_year, + COALESCE(ls.draft_round, ts.draft_round) as draft_round, + COALESCE(ls.draft_number, ts.draft_number) as draft_number, + COALESCE( + ls.seasons, + ARRAY []::season_stats [] + ) || CASE + WHEN ts.season IS NOT NULL THEN ARRAY [ROW( + ts.season, + ts.pts, + ts.ast, + ts.reb, ts.weight)::season_stats] + ELSE ARRAY []::season_stats [] + END as seasons, + CASE + WHEN ts.season IS NOT NULL THEN ( + CASE + WHEN ts.pts > 20 THEN 'star' + WHEN ts.pts > 15 THEN 'good' + WHEN ts.pts > 10 THEN 'average' + ELSE 'bad' + END + )::scoring_class + ELSE ls.scoring_class + END as scoring_class, + ts.season IS NOT NULL as is_active, + 1998 AS current_season +FROM last_season ls + FULL OUTER JOIN this_season ts ON ls.player_name = ts.player_name \ No newline at end of file diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_7_analytical_query.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_7_analytical_query.sql new file mode 100644 index 00000000..43e2439a --- /dev/null +++ b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_7_analytical_query.sql @@ -0,0 +1,21 @@ +SELECT player_name, + seasons, + (seasons [cardinality(seasons)]::season_stats).pts / CASE + WHEN (seasons [1]::season_stats).pts = 0 THEN 1 + ELSE (seasons [1]::season_stats).pts + END AS ratio_most_recent_to_first +FROM players +WHERE current_season = 1998; +/* Explanation: For each player we compare their points in their + last year to their first year to see how they developed. + Apparently, we start counting from 1 and not from 0. */ +/* Let us see the stars */ +SELECT player_name, + seasons, + (seasons [cardinality(seasons)]::season_stats).pts / CASE + WHEN (seasons [1]::season_stats).pts = 0 THEN 1 + ELSE (seasons [1]::season_stats).pts + END AS ratio_most_recent_to_first +FROM players +WHERE current_season = 2001 + and scoring_class = 'star'; \ No newline at end of file diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/pipeline_query.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/pipeline_query.sql deleted file mode 100644 index fa9f3c71..00000000 --- a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/pipeline_query.sql +++ /dev/null @@ -1,43 +0,0 @@ -WITH last_season AS ( - SELECT * FROM players - WHERE current_season = 1997 - -), this_season AS ( - SELECT * FROM player_seasons - WHERE season = 1998 -) -INSERT INTO players -SELECT - COALESCE(ls.player_name, ts.player_name) as player_name, - COALESCE(ls.height, ts.height) as height, - COALESCE(ls.college, ts.college) as college, - COALESCE(ls.country, ts.country) as country, - COALESCE(ls.draft_year, ts.draft_year) as draft_year, - COALESCE(ls.draft_round, ts.draft_round) as draft_round, - COALESCE(ls.draft_number, ts.draft_number) - as draft_number, - COALESCE(ls.seasons, - ARRAY[]::season_stats[] - ) || CASE WHEN ts.season IS NOT NULL THEN - ARRAY[ROW( - ts.season, - ts.pts, - ts.ast, - ts.reb, ts.weight)::season_stats] - ELSE ARRAY[]::season_stats[] END - as seasons, - CASE - WHEN ts.season IS NOT NULL THEN - (CASE WHEN ts.pts > 20 THEN 'star' - WHEN ts.pts > 15 THEN 'good' - WHEN ts.pts > 10 THEN 'average' - ELSE 'bad' END)::scoring_class - ELSE ls.scoring_class - END as scoring_class, - ts.season IS NOT NULL as is_active, - 1998 AS current_season - - FROM last_season ls - FULL OUTER JOIN this_season ts - ON ls.player_name = ts.player_name - diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/players.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/players.sql deleted file mode 100644 index 43545a11..00000000 --- a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/players.sql +++ /dev/null @@ -1,29 +0,0 @@ - CREATE TYPE season_stats AS ( - season Integer, - pts REAL, - ast REAL, - reb REAL, - weight INTEGER - ); - CREATE TYPE scoring_class AS - ENUM ('bad', 'average', 'good', 'star'); - - - CREATE TABLE players ( - player_name TEXT, - height TEXT, - college TEXT, - country TEXT, - draft_year TEXT, - draft_round TEXT, - draft_number TEXT, - seasons season_stats[], - scorer_class scoring_class, - years_since_last_active INTEGER, - is_active BOOLEAN, - current_season INTEGER, - PRIMARY KEY (player_name, current_season) - ); - - - diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/unnest_query.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/unnest_query.sql deleted file mode 100644 index 05ee67cc..00000000 --- a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/unnest_query.sql +++ /dev/null @@ -1,6 +0,0 @@ - SELECT player_name, - UNNEST(seasons) -- CROSS JOIN UNNEST - -- / LATERAL VIEW EXPLODE - FROM players - WHERE current_season = 1998 - AND player_name = 'Michael Jordan'; \ No newline at end of file From b9cb87d70035d9261c2e45a8f60b2ca568fa2aa3 Mon Sep 17 00:00:00 2001 From: Lujein Date: Thu, 21 Nov 2024 16:20:49 +0100 Subject: [PATCH 02/16] non local mounting --- .../materials/1-dimensional-data-modeling/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bootcamp/materials/1-dimensional-data-modeling/docker-compose.yml b/bootcamp/materials/1-dimensional-data-modeling/docker-compose.yml index 78bcadb6..a5828d94 100644 --- a/bootcamp/materials/1-dimensional-data-modeling/docker-compose.yml +++ b/bootcamp/materials/1-dimensional-data-modeling/docker-compose.yml @@ -16,7 +16,7 @@ services: - ./:/bootcamp/ - ./data.dump:/docker-entrypoint-initdb.d/data.dump - ./scripts/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh - - ./postgres-data:/var/lib/postgresql/data + - postgres-data:/var/lib/postgresql/data volumes: postgres-data: From 5cc8412ce2a48a439e6e59e68c1ecc63bf43b365 Mon Sep 17 00:00:00 2001 From: Lujein Date: Thu, 21 Nov 2024 16:26:03 +0100 Subject: [PATCH 03/16] more comments in lab1 --- .../lecture-lab/lab1_2_my_notes.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_2_my_notes.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_2_my_notes.sql index 54ec7656..5061acf8 100644 --- a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_2_my_notes.sql +++ b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab1_2_my_notes.sql @@ -25,8 +25,7 @@ INSERT into players WITH yesterday AS ( FROM player_seasons WHERE season = 1996 ) -SELECT -- we don't need to repeat the constant info twice - COALESCE (t.player_name, y.player_name) AS player_name, +SELECT COALESCE (t.player_name, y.player_name) AS player_name, COALESCE (t.height, y.height) AS height, COALESCE (t.college, y.college) AS college, COALESCE (t.country, y.country) AS country, @@ -69,7 +68,8 @@ INSERT into players WITH yesterday AS ( FROM player_seasons WHERE season = 2001 ) -SELECT -- we don't need to repeat the constant info twice +SELECT -- we don't need to repeat the constant info in two columns in case the player played + -- in the previous season and today's season COALESCE (t.player_name, y.player_name) AS player_name, COALESCE (t.height, y.height) AS height, COALESCE (t.college, y.college) AS college, From 1cdb6ea14f3b0816d211f2650cb9e70e7e1525cf Mon Sep 17 00:00:00 2001 From: Lujein Date: Thu, 21 Nov 2024 22:25:30 +0100 Subject: [PATCH 04/16] first comments of lab2 --- .../lecture-lab/lab2_1_my_notes.sql | 127 ++++++++++++++++ ...table.sql => lab2_2_players_scd_table.sql} | 0 .../sql/load_players_table_day2.sql | 136 ++++++++++-------- 3 files changed, 206 insertions(+), 57 deletions(-) create mode 100644 bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_1_my_notes.sql rename bootcamp/materials/1-dimensional-data-modeling/lecture-lab/{players_scd_table.sql => lab2_2_players_scd_table.sql} (100%) diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_1_my_notes.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_1_my_notes.sql new file mode 100644 index 00000000..5668c5a3 --- /dev/null +++ b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_1_my_notes.sql @@ -0,0 +1,127 @@ +/* In this lab, we work with the players table from lab1. Only that we need to add the + attribute is_active */ +/* STEP1: Creating the types and the players table */ +-- CREATE TYPE season_stats AS ( +-- season Integer, +-- gp REAL, +-- pts REAL, +-- reb REAL, +-- ast REAL +-- -- weight INTEGER +-- ); +-- CREATE TYPE scoring_class AS ENUM ('bad', 'average', 'good', 'star'); +-- CREATE TABLE players ( +-- player_name TEXT, +-- height TEXT, +-- college TEXT, +-- country TEXT, +-- draft_year TEXT, +-- draft_round TEXT, +-- draft_number TEXT, +-- season_stats season_stats [], +-- scoring_class scoring_class, +-- years_since_last_season INTEGER, +-- is_active BOOLEAN, +-- current_season INTEGER, +-- PRIMARY KEY (player_name, current_season) +-- ); +/* -----------------------------------------------------------------------*/ +/* STEP2: Populating the players table using the load_players_table_day2.sql file + found in the sql folder. + Let us see what each piece of that code does. */ +/* FIRST PIECE: the years table: */ +WITH years AS ( + SELECT * + FROM GENERATE_SERIES(1996, 2022) AS season +) +/*This creates a table called years with one column called season with values ranging from + 1996 to 2022 */ +/* -----------------------------------*/ +/* SECOND PIECE: the p table */ +p AS ( + SELECT player_name, + MIN(season) AS first_season + FROM player_seasons + GROUP BY player_name +) +/*This creates a table with the first season a player started playing. */ +/* -----------------------------------*/ +/* THIRD PIECES: the players_and_seasons table */ +SELECT * +FROM p + JOIN years y ON p.first_season <= y.season + /* This creates a table with multiple rows for each player, where the + repeated info is the player_name and first_season and the new info in each + row is the season. Basically, for a fixed player, we have a row for each + season they played AFTER (and including) their first season. Example: + check for the player Eldridge Recasner: */ + WITH years AS ( + SELECT * + FROM GENERATE_SERIES(1996, 2022) AS season + ), + p AS ( + SELECT player_name, + MIN(season) AS first_season + FROM player_seasons + GROUP BY player_name + ) +SELECT * +FROM p + JOIN years y ON p.first_season <= y.season +where player_name = 'Eldridge Recasner'; +/* The player, of course, doesn't necessarily have to have played all seasons + after their first season. */ +/* -----------------------------------*/ +/* FOURTH PIECE: */ +/* first, let us understand the left join: + FROM players_and_seasons pas + LEFT JOIN player_seasons ps + ON pas.player_name = ps.player_name + AND pas.season = ps.season + ORDER BY pas.player_name, pas.season + + The query in other words: for each player: for each season after (and including) + their first season, we now have constant info about them and season-dependent + info retrieved from the player_seasons table. */ +/* Now let us see which attributes we want from the result of the left join: + Basically, the seasons attribute. Understand this code: */ +ARRAY_REMOVE( + ARRAY_AGG( + CASE + WHEN ps.season IS NOT NULL THEN ROW( + ps.season, + ps.gp, + ps.pts, + ps.reb, + ps.ast + )::season_stats + END + ) OVER ( + PARTITION BY pas.player_name + ORDER BY COALESCE(pas.season, ps.season) + ), + NULL +) AS seasons +/*ARRAY_REMOVE(ARRAY_AGG, NULL) removes NULL values from the array. + ARRAY_AGG: For the same player, for each season they DID play, we add that season's info + to the array and we cast it to type season_stats. + Attributes in the final table: player_name, season (which has values only of seasons + the player did play) and season_stats up till that season.*/ +/* -----------------------------------*/ +/* FIFTH PIECE: the static table */ +SELECT player_name, + MAX(height) AS height, + MAX(college) AS college, + MAX(country) AS country, + MAX(draft_year) AS draft_year, + MAX(draft_round) AS draft_round, + MAX(draft_number) AS draft_number +FROM player_seasons +GROUP BY player_name + /*This table gives the constant attributes about each player ever participated. */ + /* -----------------------------------*/ + /* SIXTH PIECE: the final result + Now, we inner join the windowed and static tables. Again, for each player, for each season after + the first season they played, we have their season_stats up till that season and their constant + info. The scoring_class and years_since_last_active are clear. is_active basically tells us + if they played in the season or not. */ \ No newline at end of file diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/players_scd_table.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_2_players_scd_table.sql similarity index 100% rename from bootcamp/materials/1-dimensional-data-modeling/lecture-lab/players_scd_table.sql rename to bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_2_players_scd_table.sql diff --git a/bootcamp/materials/1-dimensional-data-modeling/sql/load_players_table_day2.sql b/bootcamp/materials/1-dimensional-data-modeling/sql/load_players_table_day2.sql index 7754ec7a..3af447ca 100644 --- a/bootcamp/materials/1-dimensional-data-modeling/sql/load_players_table_day2.sql +++ b/bootcamp/materials/1-dimensional-data-modeling/sql/load_players_table_day2.sql @@ -1,72 +1,94 @@ -INSERT INTO players -WITH years AS ( - SELECT * - FROM GENERATE_SERIES(1996, 2022) AS season -), p AS ( - SELECT - player_name, - MIN(season) AS first_season - FROM player_seasons - GROUP BY player_name -), players_and_seasons AS ( - SELECT * - FROM p - JOIN years y - ON p.first_season <= y.season -), windowed AS ( - SELECT - pas.player_name, - pas.season, - ARRAY_REMOVE( - ARRAY_AGG( - CASE - WHEN ps.season IS NOT NULL - THEN ROW( +CREATE TYPE season_stats AS ( + season Integer, + gp REAL, + pts REAL, + reb REAL, + ast REAL -- weight INTEGER +); +CREATE TYPE scoring_class AS ENUM ('bad', 'average', 'good', 'star'); +CREATE TABLE players ( + player_name TEXT, + height TEXT, + college TEXT, + country TEXT, + draft_year TEXT, + draft_round TEXT, + draft_number TEXT, + season_stats season_stats [], + scoring_class scoring_class, + years_since_last_season INTEGER, + is_active BOOLEAN, + current_season INTEGER, + PRIMARY KEY (player_name, current_season) +); +INSERT INTO players WITH years AS ( + SELECT * + FROM GENERATE_SERIES(1996, 2022) AS season + ), + p AS ( + SELECT player_name, + MIN(season) AS first_season + FROM player_seasons + GROUP BY player_name + ), + players_and_seasons AS ( + SELECT * + FROM p + JOIN years y ON p.first_season <= y.season + ), + windowed AS ( + SELECT pas.player_name, + pas.season, + ARRAY_REMOVE( + ARRAY_AGG( + CASE + WHEN ps.season IS NOT NULL THEN ROW( ps.season, ps.gp, ps.pts, ps.reb, ps.ast )::season_stats - END) - OVER (PARTITION BY pas.player_name ORDER BY COALESCE(pas.season, ps.season)), - NULL - ) AS seasons - FROM players_and_seasons pas - LEFT JOIN player_seasons ps - ON pas.player_name = ps.player_name - AND pas.season = ps.season - ORDER BY pas.player_name, pas.season -), static AS ( - SELECT - player_name, - MAX(height) AS height, - MAX(college) AS college, - MAX(country) AS country, - MAX(draft_year) AS draft_year, - MAX(draft_round) AS draft_round, - MAX(draft_number) AS draft_number - FROM player_seasons - GROUP BY player_name -) -SELECT - w.player_name, + END + ) OVER ( + PARTITION BY pas.player_name + ORDER BY COALESCE(pas.season, ps.season) + ), + NULL + ) AS seasons + FROM players_and_seasons pas + LEFT JOIN player_seasons ps ON pas.player_name = ps.player_name + AND pas.season = ps.season + ORDER BY pas.player_name, + pas.season + ), + static AS ( + SELECT player_name, + MAX(height) AS height, + MAX(college) AS college, + MAX(country) AS country, + MAX(draft_year) AS draft_year, + MAX(draft_round) AS draft_round, + MAX(draft_number) AS draft_number + FROM player_seasons + GROUP BY player_name + ) +SELECT w.player_name, s.height, s.college, s.country, s.draft_year, s.draft_round, s.draft_number, - seasons AS season_stats, + w.seasons AS season_stats, CASE - WHEN (seasons[CARDINALITY(seasons)]::season_stats).pts > 20 THEN 'star' - WHEN (seasons[CARDINALITY(seasons)]::season_stats).pts > 15 THEN 'good' - WHEN (seasons[CARDINALITY(seasons)]::season_stats).pts > 10 THEN 'average' + WHEN (seasons [CARDINALITY(seasons)]::season_stats).pts > 20 THEN 'star' + WHEN (seasons [CARDINALITY(seasons)]::season_stats).pts > 15 THEN 'good' + WHEN (seasons [CARDINALITY(seasons)]::season_stats).pts > 10 THEN 'average' ELSE 'bad' - END::scorer_class AS scorer_class, - w.season - (seasons[CARDINALITY(seasons)]::season_stats).season as years_since_last_active, - w.season, - (seasons[CARDINALITY(seasons)]::season_stats).season = season AS is_active + END::scoring_class AS scoring_class, + w.season - (seasons [CARDINALITY(seasons)]::season_stats).season as years_since_last_active, + (seasons [CARDINALITY(seasons)]::season_stats).season = season AS is_active, + w.season FROM windowed w -JOIN static s - ON w.player_name = s.player_name; \ No newline at end of file + JOIN static s ON w.player_name = s.player_name; \ No newline at end of file From 986a7da6115092cc9a1fb820ca29745f89c61f1c Mon Sep 17 00:00:00 2001 From: Lujein Date: Sat, 23 Nov 2024 11:49:35 +0100 Subject: [PATCH 05/16] lab2 notes --- .../lecture-lab/incremental_scd_query.sql | 110 ------------ .../lecture-lab/lab2_1_my_notes.sql | 2 +- .../lecture-lab/lab2_3_my_notes.sql | 10 ++ ...ry.sql => lab2_4_scd_generation_query.sql} | 0 .../lecture-lab/lab2_5_my_notes.sql | 95 +++++++++++ .../lecture-lab/lab2_6_my_notes.sql | 161 ++++++++++++++++++ .../lab2_7_incremental_scd_query.sql | 118 +++++++++++++ 7 files changed, 385 insertions(+), 111 deletions(-) delete mode 100644 bootcamp/materials/1-dimensional-data-modeling/lecture-lab/incremental_scd_query.sql create mode 100644 bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_3_my_notes.sql rename bootcamp/materials/1-dimensional-data-modeling/lecture-lab/{scd_generation_query.sql => lab2_4_scd_generation_query.sql} (100%) create mode 100644 bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_5_my_notes.sql create mode 100644 bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_6_my_notes.sql create mode 100644 bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_7_incremental_scd_query.sql diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/incremental_scd_query.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/incremental_scd_query.sql deleted file mode 100644 index 2e70c1b6..00000000 --- a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/incremental_scd_query.sql +++ /dev/null @@ -1,110 +0,0 @@ - -CREATE TYPE scd_type AS ( - scoring_class scoring_class, - is_active boolean, - start_season INTEGER, - end_season INTEGER - ) - - -WITH last_season_scd AS ( - SELECT * FROM players_scd - WHERE current_season = 2021 - AND end_season = 2021 -), - historical_scd AS ( - SELECT - player_name, - scoring_class, - is_active, - start_season, - end_season - FROM players_scd - WHERE current_season = 2021 - AND end_season < 2021 - ), - this_season_data AS ( - SELECT * FROM players - WHERE current_season = 2022 - ), - unchanged_records AS ( - SELECT - ts.player_name, - ts.scoring_class, - ts.is_active, - ls.start_season, - ts.current_season as end_season - FROM this_season_data ts - JOIN last_season_scd ls - ON ls.player_name = ts.player_name - WHERE ts.scoring_class = ls.scoring_class - AND ts.is_active = ls.is_active - ), - changed_records AS ( - SELECT - ts.player_name, - UNNEST(ARRAY[ - ROW( - ls.scoring_class, - ls.is_active, - ls.start_season, - ls.end_season - - )::scd_type, - ROW( - ts.scoring_class, - ts.is_active, - ts.current_season, - ts.current_season - )::scd_type - ]) as records - FROM this_season_data ts - LEFT JOIN last_season_scd ls - ON ls.player_name = ts.player_name - WHERE (ts.scoring_class <> ls.scoring_class - OR ts.is_active <> ls.is_active) - ), - unnested_changed_records AS ( - - SELECT player_name, - (records::scd_type).scoring_class, - (records::scd_type).is_active, - (records::scd_type).start_season, - (records::scd_type).end_season - FROM changed_records - ), - new_records AS ( - - SELECT - ts.player_name, - ts.scoring_class, - ts.is_active, - ts.current_season AS start_season, - ts.current_season AS end_season - FROM this_season_data ts - LEFT JOIN last_season_scd ls - ON ts.player_name = ls.player_name - WHERE ls.player_name IS NULL - - ) - - -SELECT *, 2022 AS current_season FROM ( - SELECT * - FROM historical_scd - - UNION ALL - - SELECT * - FROM unchanged_records - - UNION ALL - - SELECT * - FROM unnested_changed_records - - UNION ALL - - SELECT * - FROM new_records - ) a \ No newline at end of file diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_1_my_notes.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_1_my_notes.sql index 5668c5a3..a3c389ee 100644 --- a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_1_my_notes.sql +++ b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_1_my_notes.sql @@ -1,5 +1,5 @@ /* In this lab, we work with the players table from lab1. Only that we need to add the - attribute is_active */ + attribute is_active.*/ /* STEP1: Creating the types and the players table */ -- CREATE TYPE season_stats AS ( -- season Integer, diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_3_my_notes.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_3_my_notes.sql new file mode 100644 index 00000000..4ac584e9 --- /dev/null +++ b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_3_my_notes.sql @@ -0,0 +1,10 @@ +/* In the lab, we created the players_scd_table like this: */ +create table players_scd ( + player_name text, + scoring_class scoring_class, + is_active boolean, + start_season integer, + end_season integer, + current_season INTEGER, + PRIMARY KEY(player_name, start_season) +); \ No newline at end of file diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/scd_generation_query.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_4_scd_generation_query.sql similarity index 100% rename from bootcamp/materials/1-dimensional-data-modeling/lecture-lab/scd_generation_query.sql rename to bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_4_scd_generation_query.sql diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_5_my_notes.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_5_my_notes.sql new file mode 100644 index 00000000..36fc536a --- /dev/null +++ b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_5_my_notes.sql @@ -0,0 +1,95 @@ +/* This is the scd generation query used in the lab*/ +WITH with_previous AS ( + select player_name, + current_season, + scoring_class, + is_active, + LAG(scoring_class, 1) OVER ( + PARTITION BY player_name + ORDER BY current_season + ) as previous_scoring_class, + LAG(is_active, 1) OVER ( + PARTITION BY player_name + ORDER BY current_season + ) as previous_is_active + from players +), +with_indicators AS ( + select *, + CASE + WHEN scoring_class <> previous_scoring_class THEN 1 + WHEN is_active <> previous_is_active THEN 1 + ELSE 0 + END AS change_indicator + from with_previous +), +with_streaks AS ( + select *, + SUM(change_indicator) OVER( + PARTITION BY player_name + ORDER BY current_season + ) AS streak_identifier + from with_indicators +) +select player_name, + scoring_class, + is_active, + --streak_identifier, + MIN(current_season) as start_season, + MAX(current_season) as end_season +from with_streaks +group by player_name, + streak_identifier, + is_active, + scoring_class +order by player_name, + streak_identifier; +/* In order to prepare for the incremental scd table, let us + filter this table with the condition: current_season <=2021 */ +INSERT into players_scd WITH with_previous AS ( + select player_name, + current_season, + scoring_class, + is_active, + LAG(scoring_class, 1) OVER ( + PARTITION BY player_name + ORDER BY current_season + ) as previous_scoring_class, + LAG(is_active, 1) OVER ( + PARTITION BY player_name + ORDER BY current_season + ) as previous_is_active + from players + where current_season <= 2021 + ), + with_indicators AS ( + select *, + CASE + WHEN scoring_class <> previous_scoring_class THEN 1 + WHEN is_active <> previous_is_active THEN 1 + ELSE 0 + END AS change_indicator + from with_previous + ), + with_streaks AS ( + select *, + SUM(change_indicator) OVER( + PARTITION BY player_name + ORDER BY current_season + ) AS streak_identifier + from with_indicators + ) +select player_name, + scoring_class, + is_active, + --streak_identifier, + MIN(current_season) as start_season, + MAX(current_season) as end_season, + 2021 AS current_season +from with_streaks +group by player_name, + streak_identifier, + is_active, + scoring_class +order by player_name, + streak_identifier; \ No newline at end of file diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_6_my_notes.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_6_my_notes.sql new file mode 100644 index 00000000..acf69d86 --- /dev/null +++ b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_6_my_notes.sql @@ -0,0 +1,161 @@ +/* let us understand the scd generation query */ +/* STEP1: Understanding the with_previous table */ +select player_name, + current_season, + scoring_class, + is_active, + LAG(scoring_class, 1) OVER ( + PARTITION BY player_name + ORDER BY current_season + ) as previous_scoring_class, + LAG(is_active, 1) OVER ( + PARTITION BY player_name + ORDER BY current_season + ) as previous_is_active +from players; +/* The result is the players table added to it two columns: previous_scoring_class + and previous_is_active */ +/*------------------------------------------------------*/ +/* STEP2: the with_indicator table: adding the change indicator columns*/ +WITH with_previous AS ( + select player_name, + current_season, + scoring_class, + is_active, + LAG(scoring_class, 1) OVER ( + PARTITION BY player_name + ORDER BY current_season + ) as previous_scoring_class, + LAG(is_active, 1) OVER ( + PARTITION BY player_name + ORDER BY current_season + ) as previous_is_active + from players +) +select *, + CASE + WHEN scoring_class <> previous_scoring_class THEN 1 + ELSE 0 + END AS scoring_class_change_indicator, + CASE + WHEN is_active <> previous_is_active THEN 1 + ELSE 0 + END AS is_active_change_indicator +from with_previous; +/* This query adds to the with_previous table two columns which tells us if there has been a + change in the is_active and scoring_class values. */ +/*----------------------------------------------------*/ +/* STEP3: simplifying the with_indicator table. It is easier to track the change of + only one variable so we update the with_indicator table as follows: */ +-- 1 in the LAG is offset to get the value from the previous row. +WITH with_previous AS ( + select player_name, + current_season, + scoring_class, + is_active, + LAG(scoring_class, 1) OVER ( + PARTITION BY player_name + ORDER BY current_season + ) as previous_scoring_class, + LAG(is_active, 1) OVER ( + PARTITION BY player_name + ORDER BY current_season + ) as previous_is_active + from players +) +select *, + CASE + WHEN scoring_class <> previous_scoring_class THEN 1 + WHEN is_active <> previous_is_active THEN 1 + ELSE 0 + END AS change_indicator +from with_previous; +/*----------------------------------------------------*/ +/*STEP4: Adding a streak_identifier */ +WITH with_previous AS ( + select player_name, + current_season, + scoring_class, + is_active, + LAG(scoring_class, 1) OVER ( + PARTITION BY player_name + ORDER BY current_season + ) as previous_scoring_class, + LAG(is_active, 1) OVER ( + PARTITION BY player_name + ORDER BY current_season + ) as previous_is_active + from players +), +with_indicators AS ( + select *, + CASE + WHEN scoring_class <> previous_scoring_class THEN 1 + WHEN is_active <> previous_is_active THEN 1 + ELSE 0 + END AS change_indicator + from with_previous +) +select *, + SUM(change_indicator) OVER( + PARTITION BY player_name + ORDER BY current_season + ) AS streak_identifier +from with_indicators; +/* Very important note about the SUM() function: it computes + the sums CUMULATIVELY up untill current_season. So streak_identifier tells us + how many times the player changes up untill current_season. */ +/*----------------------------------------------------*/ +/*STEP5: Grouping by the streak_identifier to get start_season + and end_season*/ +WITH with_previous AS ( + select player_name, + current_season, + scoring_class, + is_active, + LAG(scoring_class, 1) OVER ( + PARTITION BY player_name + ORDER BY current_season + ) as previous_scoring_class, + LAG(is_active, 1) OVER ( + PARTITION BY player_name + ORDER BY current_season + ) as previous_is_active + from players +), +with_indicators AS ( + select *, + CASE + WHEN scoring_class <> previous_scoring_class THEN 1 + WHEN is_active <> previous_is_active THEN 1 + ELSE 0 + END AS change_indicator + from with_previous +), +with_streaks AS ( + select *, + SUM(change_indicator) OVER( + PARTITION BY player_name + ORDER BY current_season + ) AS streak_identifier + from with_indicators +) +select player_name, + streak_identifier, + is_active, + scoring_class, + MIN(current_season) as start_season, + MAX(current_season) as end_season, + 2021 as current_season +from with_streaks +group by player_name, + streak_identifier, + is_active, + scoring_class; +/* For a player, in each streak_identifier group, the values of is_active and + scoring_class are the same since no change has been made (all rows had the + same streak_identifier). See players A.C. Green or Aaron Brooks as examples.*/ +/*STEP6: small remarks: + In the final query when we group by the streak identifier, we can + add 2021 as the value for the current_season. It will be a fixed value. + */ \ No newline at end of file diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_7_incremental_scd_query.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_7_incremental_scd_query.sql new file mode 100644 index 00000000..5ff89db7 --- /dev/null +++ b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab2_7_incremental_scd_query.sql @@ -0,0 +1,118 @@ +-- CREATE TYPE scd_type AS ( +-- scoring_class scoring_class, +-- is_active boolean, +-- start_season INTEGER, +-- end_season INTEGER +-- ); +WITH last_season_scd AS ( + SELECT * + FROM players_scd + WHERE current_season = 2021 + AND end_season = 2021 +), +/* this table has rows from players_scd where current_season = 2021 + where there are streaks that ended before 2021. We keep those records + as they are. Unlike the players_scd table, historical_scd doesn't have + a current_season column. current_season will be set to 2022 later.*/ +historical_scd AS ( + SELECT player_name, + scoring_class, + is_active, + start_season, + end_season + FROM players_scd + WHERE current_season = 2021 + AND end_season < 2021 +), +this_season_data AS ( + SELECT * + FROM players + WHERE current_season = 2022 +), +/* this_season_data might have players that already exist in last_season_scd + and it might as well have new players. Here, we focus on already existing + players whose status didn't change. */ +unchanged_records AS ( + SELECT ts.player_name, + ts.scoring_class, + ts.is_active, + ls.start_season, + ts.current_season as end_season -- which equals 2022 + FROM this_season_data ts + JOIN last_season_scd ls ON ls.player_name = ts.player_name + WHERE ts.scoring_class = ls.scoring_class + AND ts.is_active = ls.is_active +), +/* In this table and in the following table we will do a LEFT JOIN. + In this table, we focus on already existing players whose status DID change. */ +changed_records AS ( + SELECT ts.player_name, + UNNEST( + ARRAY [ -- those are the values from the last_season_scd + ROW( + ls.scoring_class, + ls.is_active, + ls.start_season, + ls.end_season + + )::scd_type, + ROW( -- those are the values from this season + ts.scoring_class, + ts.is_active, + ts.current_season, + ts.current_season + )::scd_type + ] + ) as records + FROM this_season_data ts + LEFT JOIN last_season_scd ls ON ls.player_name = ts.player_name + WHERE ( + ts.scoring_class <> ls.scoring_class + OR ts.is_active <> ls.is_active + ) + /* The result of the left join does NOT include players who didn't exist in the + last_season_scd table. The reason is, remembering that ls.scoring_class equals NULL, that + when comparing any value to NULL using <> (or any other operator), the result is NULL and + not TRUE or False. The condition inside the WHERE clause should be TRUE in order for the + rows to be included in the result. + */ + /* The UNNEST ARRAY operation expands the array into a set of rows. + The result of this query has two rows for each player; one with their previous + streak and one for their streak from 2022. + */ +), +unnested_changed_records AS ( + SELECT player_name, + (records::scd_type).scoring_class, + (records::scd_type).is_active, + (records::scd_type).start_season, + (records::scd_type).end_season + FROM changed_records +), +/* This table has info on new players that didn't exist in the last_season_scd table. + Example: Max Christie*/ +new_records AS ( + SELECT ts.player_name, + ts.scoring_class, + ts.is_active, + ts.current_season AS start_season, + ts.current_season AS end_season + FROM this_season_data ts + LEFT JOIN last_season_scd ls ON ts.player_name = ls.player_name + WHERE ls.player_name IS NULL +) +SELECT *, + 2022 AS current_season +FROM ( + SELECT * + FROM historical_scd + UNION ALL + SELECT * + FROM unchanged_records + UNION ALL + SELECT * + FROM unnested_changed_records + UNION ALL + SELECT * + FROM new_records + ) as final \ No newline at end of file From 4a54b855a81b4b143c5678ed20ae677ff7deb80a Mon Sep 17 00:00:00 2001 From: Lujein Date: Sun, 24 Nov 2024 19:13:34 +0100 Subject: [PATCH 06/16] first lab3 sql file --- .../lecture-lab/{graph_ddls.sql => lab3_1graph_ddls.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename bootcamp/materials/1-dimensional-data-modeling/lecture-lab/{graph_ddls.sql => lab3_1graph_ddls.sql} (100%) diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/graph_ddls.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab3_1graph_ddls.sql similarity index 100% rename from bootcamp/materials/1-dimensional-data-modeling/lecture-lab/graph_ddls.sql rename to bootcamp/materials/1-dimensional-data-modeling/lecture-lab/lab3_1graph_ddls.sql From a091398fd63ba6b4c3a34740ec27afc52a9d8205 Mon Sep 17 00:00:00 2001 From: Lujein Date: Fri, 29 Nov 2024 12:59:25 +0100 Subject: [PATCH 07/16] fact_data_modeling_notes --- .../lecture-lab/players.sql | 23 ---------------- .../lecture-lab/user_cumulated_populate.sql | 26 ------------------- 2 files changed, 49 deletions(-) delete mode 100644 bootcamp/materials/1-dimensional-data-modeling/lecture-lab/players.sql delete mode 100644 bootcamp/materials/2-fact-data-modeling/lecture-lab/user_cumulated_populate.sql diff --git a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/players.sql b/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/players.sql deleted file mode 100644 index a654596f..00000000 --- a/bootcamp/materials/1-dimensional-data-modeling/lecture-lab/players.sql +++ /dev/null @@ -1,23 +0,0 @@ -CREATE TYPE season_stats AS ( - season Integer, - pts REAL, - ast REAL, - reb REAL, - weight INTEGER -); -CREATE TYPE scoring_class AS ENUM ('bad', 'average', 'good', 'star'); -CREATE TABLE players ( - player_name TEXT, - height TEXT, - college TEXT, - country TEXT, - draft_year TEXT, - draft_round TEXT, - draft_number TEXT, - seasons season_stats [], - scorer_class scoring_class, - years_since_last_active INTEGER, - is_active BOOLEAN, - current_season INTEGER, - PRIMARY KEY (player_name, current_season) -); \ No newline at end of file diff --git a/bootcamp/materials/2-fact-data-modeling/lecture-lab/user_cumulated_populate.sql b/bootcamp/materials/2-fact-data-modeling/lecture-lab/user_cumulated_populate.sql deleted file mode 100644 index a3516329..00000000 --- a/bootcamp/materials/2-fact-data-modeling/lecture-lab/user_cumulated_populate.sql +++ /dev/null @@ -1,26 +0,0 @@ -WITH yesterday AS ( - SELECT * FROM users_cumulated - WHERE date = DATE('2023-03-30') -), - today AS ( - SELECT user_id, - DATE_TRUNC('day', event_time) AS today_date, - COUNT(1) AS num_events FROM events - WHERE DATE_TRUNC('day', event_time) = DATE('2023-03-31') - AND user_id IS NOT NULL - GROUP BY user_id, DATE_TRUNC('day', event_time) - ) -INSERT INTO users_cumulated -SELECT - COALESCE(t.user_id, y.user_id), - COALESCE(y.dates_active, - ARRAY[]::DATE[]) - || CASE WHEN - t.user_id IS NOT NULL - THEN ARRAY[t.today_date] - ELSE ARRAY[]::DATE[] - END AS date_list, - COALESCE(t.today_date, y.date + Interval '1 day') as date -FROm yesterday y - FULL OUTER JOIN - today t ON t.user_id = y.user_id; \ No newline at end of file From 4bdd5e4f7fe5f63ea4f80aafd80f977060f04bea Mon Sep 17 00:00:00 2001 From: Lujein Date: Fri, 29 Nov 2024 13:04:09 +0100 Subject: [PATCH 08/16] fact_data_modeling_notes --- .../lecture-lab/lab1_1_my_notes.sql | 207 ++++++++++++++++++ .../lecture-lab/lab2_2_my_notes.sql | 10 + .../lecture-lab/lab2_3_my_notes.sql | 52 +++++ .../lab2_4_user_cumulated_populate.sql | 25 +++ .../lecture-lab/lab2_5_my_notes.sql | 19 ++ 5 files changed, 313 insertions(+) create mode 100644 bootcamp/materials/2-fact-data-modeling/lecture-lab/lab1_1_my_notes.sql create mode 100644 bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_2_my_notes.sql create mode 100644 bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_3_my_notes.sql create mode 100644 bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_4_user_cumulated_populate.sql create mode 100644 bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_5_my_notes.sql diff --git a/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab1_1_my_notes.sql b/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab1_1_my_notes.sql new file mode 100644 index 00000000..ab24c6cb --- /dev/null +++ b/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab1_1_my_notes.sql @@ -0,0 +1,207 @@ +/* In this lab we look at the game_details table. What should be unique to every + row is the game_id, team_id, and player_id. Note that a player can play for more + than one team. */ +/* First, we check for duplicates. */ +-- select game_id, +-- team_id, +-- player_id, +-- count(1) +-- from game_details +-- group by 1, +-- 2, +-- 3 +-- HAVING count(1) > 1; +/* ---------------------------------------------------------------------------*/ +/* Second, get rid of them. */ +/* deduped adds to game_details a column which is the row_num. In case of a row + duplicated N times, the row_num will be 1 in the first row,..., and + N in the Nth row. */ +-- with deduped AS ( +-- SELECT *, +-- ROW_NUMBER() OVER ( +-- PARTITION BY game_id, +-- team_id, +-- player_id +-- ) as row_num +-- from game_details +-- ) +-- SELECT * -- here we get rid of duplicated rows +-- from deduped +-- where row_num = 1; +/* ---------------------------------------------------------------------------*/ +/* Third, we add the time of the games from the games table (the WHEN) + and choose the columns we are interested in. */ +-- with deduped AS ( +-- SELECT g.game_date_est, +-- g.season, +-- g.home_team_id, +-- gd.*, +-- ROW_NUMBER() OVER ( +-- PARTITION BY gd.game_id, +-- gd.team_id, +-- gd.player_id +-- ORDER BY g.game_date_est -- doesn't make sense here because each game has only ONE date. +-- ) as row_num +-- from game_details gd +-- join games g on gd.game_id = g.game_id +-- where g.game_date_est = '2016-10-04' -- this is just so the query doesn't take much time. +-- ) +-- SELECT game_date_est, +-- -- game_id, +-- season, +-- team_id, +-- team_id = home_team_id AS dim_is_playing_at_home, +-- player_id, +-- player_name, +-- start_position, +-- COALESCE(POSITION('DNP' in comment), 0) > 0 as dim_did_not_play, +-- COALESCE(POSITION('DND' in comment), 0) > 0 as dim_did_not_dress, +-- COALESCE(POSITION('NWT' in comment), 0) > 0 as dim_not_with_team, +-- -- comment, +-- CAST(SPLIT_PART(min, ':', 1) AS REAL) + CAST(SPLIT_PART(min, ':', 2) AS REAL) / 60 AS minutes, +-- -- min, +-- fgm, +-- fga, +-- fg3m, +-- fg3a, +-- ftm, +-- fta, +-- oreb, +-- dreb, +-- reb, +-- ast, +-- stl, +-- blk, +-- "TO" as turnovers, +-- pf, +-- pts, +-- plus_minus +-- from deduped +-- where row_num = 1; +/* ---------------------------------------------------------------------------*/ +/* Fourth, create the fct_game_details table */ +-- CREATE TABLE fct_game_details ( +-- dim_game_date DATE, +-- dim_season INTEGER, +-- dim_team_id INTEGER, +-- dim_player_id INTEGER, +-- dim_player_name TEXT, +-- dim_start_position TEXT, +-- dim_is_playing_at_home BOOLEAN, +-- dim_did_not_play BOOLEAN, +-- dim_did_not_dress BOOLEAN, +-- dim_not_with_team BOOLEAN, +-- m_minutes REAL, +-- -- m for measure +-- m_fgm INTEGER, +-- m_fga INTEGER, +-- m_fg3m INTEGER, +-- m_fg3a INTEGER, +-- m_ftm INTEGER, +-- m_fta INTEGER, +-- m_oreb INTEGER, +-- m_dreb INTEGER, +-- m_reb INTEGER, +-- m_ast INTEGER, +-- m_stl INTEGER, +-- m_blk INTEGER, +-- m_turnovers INTEGER, +-- m_pf INTEGER, +-- m_pts INTEGER, +-- m_plus_minus INTEGER, +-- PRIMARY KEY(dim_game_date, dim_team_id, dim_player_id) +-- ) +/* ---------------------------------------------------------------------------*/ +/* FIFTH STEP: populate the fct_game_details table using the deduped query. */ +-- INSERT INTO fct_game_details with deduped AS ( +-- SELECT g.game_date_est, +-- g.season, +-- g.home_team_id, +-- gd.*, +-- ROW_NUMBER() OVER ( +-- PARTITION BY gd.game_id, +-- gd.team_id, +-- gd.player_id +-- ORDER BY g.game_date_est -- doesn't make sense here because each game has only ONE date. +-- ) as row_num +-- from game_details gd +-- join games g on gd.game_id = g.game_id +-- ) +-- SELECT game_date_est AS dim_game_date, +-- season AS dim_season, +-- team_id AS dim_team_id, +-- player_id AS dim_player_id, +-- player_name AS dim_player_name, +-- start_position AS dim_start_position, +-- team_id = home_team_id AS dim_is_playing_at_home, +-- COALESCE(POSITION('DNP' in comment), 0) > 0 as dim_did_not_play, +-- COALESCE(POSITION('DND' in comment), 0) > 0 as dim_did_not_dress, +-- COALESCE(POSITION('NWT' in comment), 0) > 0 as dim_not_with_team, +-- CAST(SPLIT_PART(min, ':', 1) AS REAL) + CAST(SPLIT_PART(min, ':', 2) AS REAL) / 60 AS m_minutes, +-- fgm as m_fgm, +-- fga as m_fga, +-- fg3m as m_fg3m, +-- fg3a as m_fg3a, +-- ftm as m_ftm, +-- fta as m_fta, +-- oreb as m_oreb, +-- dreb as m_dreb, +-- reb as m_reb, +-- ast as m_ast, +-- stl as m_stl, +-- blk as m_blk, +-- "TO" as m_turnovers, +-- pf as m_pf, +-- pts as m_pts, +-- plus_minus as m_plus_minus +-- from deduped +-- where row_num = 1; +/* ---------------------------------------------------------------------------*/ +/* SIXTH STEP: Bring in infromation from the teams table by joining it with fct_game_details */ +-- select t.*, +-- gd.* +-- from fct_game_details gd +-- join teams t on t.team_id = gd.dim_team_id; +/* ---------------------------------------------------------------------------*/ +/* SEVENTH STEP: Let us find the player who bailed out on most games */ +-- select dim_player_name, +-- count(1) as num_games, +-- count( +-- case +-- when dim_not_with_team then 1 +-- END +-- ) as bailed_num, +-- CAST( +-- COUNT( +-- CASE +-- when dim_not_with_team then 1 +-- END +-- ) as REAL +-- ) / COUNT(1) as bail_pct -- percentage +-- from fct_game_details +-- GROUP BY 1 +-- ORDER BY 4 DESC; +/* ---------------------------------------------------------------------------*/ +/* EIGHTS STEP: Let us compare the number of points a player makes when they + play at home and not at home.*/ +select dim_player_name, + dim_is_playing_at_home, + count(1) as num_games, + SUM(m_pts) as total_points, + count( + case + when dim_not_with_team then 1 + END + ) as bailed_num, + CAST( + COUNT( + CASE + when dim_not_with_team then 1 + END + ) as REAL + ) / COUNT(1) as bail_pct -- percentage +from fct_game_details +GROUP BY 1, + 2 +ORDER BY 6 DESC; +/* Example player: Elliot Williams bailed out on all games played not at home.*/ \ No newline at end of file diff --git a/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_2_my_notes.sql b/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_2_my_notes.sql new file mode 100644 index 00000000..91bbb0cb --- /dev/null +++ b/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_2_my_notes.sql @@ -0,0 +1,10 @@ +-- We work with the events table. First, we create the users_cumulated table. +CREATE TABLE users_cumulated( + user_id TEXT, + --BIGINT, + -- the list of dates in the past where the user was active + dates_active TIMESTAMPTZ [], + -- the current date for the user + curr_date DATE, + PRIMARY KEY(user_id, curr_date) +); \ No newline at end of file diff --git a/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_3_my_notes.sql b/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_3_my_notes.sql new file mode 100644 index 00000000..6174d870 --- /dev/null +++ b/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_3_my_notes.sql @@ -0,0 +1,52 @@ +-- This query populates the users_cumulated table. We run it 31 times +-- starting with yesterday's table when date 2022-12-31 and today's table when date +-- is 2023-01-01 until +-- yesterday 2023-01-30 and today 2023-01-31 +INSERT into users_cumulated WITH yesterday AS ( + SELECT * + FROM users_cumulated + WHERE curr_date = DATE('2023-01-30') + ), + today AS ( + SELECT CAST(user_id AS TEXT) AS user_id, + DATE( + CAST(event_time AS TIMESTAMP) + ) AS date_active + FROM events + WHERE DATE( + CAST(event_time AS TIMESTAMP) + ) = DATE('2023-01-31') + AND user_id IS NOT NULL + GROUP BY user_id, + DATE( + CAST(event_time AS TIMESTAMP) + ) + ) +SELECT COALESCE(t.user_id, y.user_id) AS user_id, + CASE + WHEN y.dates_active IS NULL THEN ARRAY [CAST(t.date_active AS TIMESTAMPTZ)] + WHEN t.date_active IS NULL THEN y.dates_active + ELSE ARRAY [CAST(t.date_active AS TIMESTAMPTZ)] || y.dates_active + END AS dates_active, + DATE( + COALESCE(t.date_active, y.curr_date + INTERVAL '1 day') + ) AS curr_date +FROM today t + FULL OUTER JOIN yesterday y ON t.user_id = y.user_id + /* In the lab, dates_active was an array of DATE. This got me wrong values. + In the first insert into (when we full join users_cumulated when + curr_date is 2022-12-31 and today's table with date 2023-01-01), I got the value + ["2022-12-31T23:00:00.000Z"] instead of ["2023-01-01T00:00:00.000Z"]. + There is a quick fix which is when adding dates to the array, writing + -- ARRAY[ t.date_active +Interval '1 day']. + + Trying both ARRAY [CAST(t.date_active AS TIMESTAMP)] and + ARRAY [CAST(t.date_active AS TIMESTAMPTZ)AT TIME ZONE 'UTC' ] + gives: ["2022-12-31T23:00:00.000Z"] in both CTE result and insert into. + However, each of ARRAY [CAST(t.date_active AS TIMESTAMPTZ)] and + ARRAY [CAST(t.date_active AS TIMESTAMP)AT TIME ZONE 'UTC'] + gives correct output in the CTE (gives ["2023-01-01T00:00:00.000Z"]) + But, after inserting the result of the CTE (using insert into as the first line + of the query), the resulting users_cumulated table has the bad value again. + Note the time_event column in events is already in UTC. + */ \ No newline at end of file diff --git a/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_4_user_cumulated_populate.sql b/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_4_user_cumulated_populate.sql new file mode 100644 index 00000000..28a800a0 --- /dev/null +++ b/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_4_user_cumulated_populate.sql @@ -0,0 +1,25 @@ +WITH yesterday AS ( + SELECT * + FROM users_cumulated + WHERE date = DATE('2023-03-30') +), +today AS ( + SELECT user_id, + DATE_TRUNC('day', event_time) AS today_date, + COUNT(1) AS num_events + FROM events + WHERE DATE_TRUNC('day', event_time) = DATE('2023-03-31') + AND user_id IS NOT NULL + GROUP BY user_id, + DATE_TRUNC('day', event_time) +) +INSERT INTO users_cumulated +SELECT COALESCE(t.user_id, y.user_id), + COALESCE(y.dates_active, ARRAY []::DATE []) || CASE + WHEN -- || is array concatenation + t.user_id IS NOT NULL THEN ARRAY [t.today_date] + ELSE ARRAY []::DATE [] + END AS date_list, + COALESCE(t.today_date, y.date + Interval '1 day') as date +FROm yesterday y + FULL OUTER JOIN today t ON t.user_id = y.user_id; \ No newline at end of file diff --git a/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_5_my_notes.sql b/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_5_my_notes.sql new file mode 100644 index 00000000..91d159ae --- /dev/null +++ b/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_5_my_notes.sql @@ -0,0 +1,19 @@ +with users as ( + select * + from users_cumulated + where curr_date = '2023-01-31' +), +series as ( + SELECT * + from generate_series( + DATE('2023-01-01'), + DATE('2023-01-31'), + INTERVAL '1 day' + ) as series_date +) +select *, + ARRAY [series_date::TIMESTAMPTZ], + dates_active @> ARRAY [series_date::TIMESTAMPTZ] +from users + CROSS JOIN series +WHERE user_id = '137925124111668560'; \ No newline at end of file From ea845143561a698e90b0b08be08efc451a0c2cf7 Mon Sep 17 00:00:00 2001 From: Lujein Date: Mon, 2 Dec 2024 17:26:14 +0100 Subject: [PATCH 09/16] lab3 code --- .../lecture-lab/lab2_5_my_notes.sql | 39 +++++++++++++++---- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_5_my_notes.sql b/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_5_my_notes.sql index 91d159ae..9da301a8 100644 --- a/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_5_my_notes.sql +++ b/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_5_my_notes.sql @@ -10,10 +10,35 @@ series as ( DATE('2023-01-31'), INTERVAL '1 day' ) as series_date -) -select *, - ARRAY [series_date::TIMESTAMPTZ], - dates_active @> ARRAY [series_date::TIMESTAMPTZ] -from users - CROSS JOIN series -WHERE user_id = '137925124111668560'; \ No newline at end of file +), +placeholder_ints AS ( + select user_id, + dates_active, + curr_date, + DATE(series_date) as series_date, + dates_active @> ARRAY [series_date::TIMESTAMPTZ] as did_connect, + curr_date - DATE(series_date) as days_diff, + case + when dates_active @> ARRAY [series_date::TIMESTAMPTZ] then power(2, 32 - (curr_date - DATE(series_date))) + else 0 + end as power_of_two, + cast( + case + when dates_active @> ARRAY [series_date::TIMESTAMPTZ] then cast( + power(2, 32 - (curr_date - DATE(series_date))) as bigint + ) + else 0 + end as bit(32) + ) as placeholder_int_value + from users + CROSS JOIN series + WHERE user_id = '439578290726747300' +) -- select * +-- from placeholder_ints; +select user_id, + CAST(CAST(SUM(power_of_two) AS bigint) AS BIT(32)) +from placeholder_ints +group by user_id; +-- Some other users id to use as examples: +-- 137925124111668560 +--'406876712821807740' \ No newline at end of file From e7ba4c035a4b44f818612486badd245eba163683 Mon Sep 17 00:00:00 2001 From: Lujein Date: Mon, 2 Dec 2024 17:26:58 +0100 Subject: [PATCH 10/16] lab3 code --- .../lecture-lab/draft.sql | 23 +++++++ .../lecture-lab/lab2_6_my_notes | 50 +++++++++++++++ .../lecture-lab/lab3_1_my_notes.sql | 62 +++++++++++++++++++ .../lecture-lab/lab3_2_my_notes.sql | 18 ++++++ 4 files changed, 153 insertions(+) create mode 100644 bootcamp/materials/2-fact-data-modeling/lecture-lab/draft.sql create mode 100644 bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_6_my_notes create mode 100644 bootcamp/materials/2-fact-data-modeling/lecture-lab/lab3_1_my_notes.sql create mode 100644 bootcamp/materials/2-fact-data-modeling/lecture-lab/lab3_2_my_notes.sql diff --git a/bootcamp/materials/2-fact-data-modeling/lecture-lab/draft.sql b/bootcamp/materials/2-fact-data-modeling/lecture-lab/draft.sql new file mode 100644 index 00000000..18f4622e --- /dev/null +++ b/bootcamp/materials/2-fact-data-modeling/lecture-lab/draft.sql @@ -0,0 +1,23 @@ +-- SELECT ARRAY( +-- SELECT 0::REAL +-- FROM generate_series(1, ('2023-01-02'::DATE - '2023-01-01'::DATE)) +-- ); +-- drop table array_metrics; +-- CREATE TABLE array_metrics ( +-- user_id NUMERIC, +-- month_start DATE, +-- metric_name TEXT, +-- metric_array REAL [], +-- PRIMARY KEY(user_id, month_start, metric_name) +-- ) +-- SELECT DATE(event_time), +-- count(*) +-- from events +-- where user_id = '10060569187331700000' +-- GROUP BY DATE(event_time); +SELECT * +from array_metrics; +SELECT cardinality(metric_array), + count(1) +from array_metrics +GROUP BY 1; \ No newline at end of file diff --git a/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_6_my_notes b/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_6_my_notes new file mode 100644 index 00000000..46929820 --- /dev/null +++ b/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_6_my_notes @@ -0,0 +1,50 @@ +-- Here, we do: +-- 1. run the previous query for all users. +-- 2. we create the dimension dim_is_monthly_active using BIT COUNT. +-- 3. we do weekly active on the last 7 days. +with users as ( + select * + from users_cumulated + where curr_date = '2023-01-31' +), +series as ( + SELECT * + from generate_series( + DATE('2023-01-01'), + DATE('2023-01-31'), + INTERVAL '1 day' + ) as series_date +), +placeholder_ints AS ( + select user_id, + dates_active, + curr_date, + DATE(series_date) as series_date, + dates_active @> ARRAY [series_date::TIMESTAMPTZ] as did_connect, + curr_date - DATE(series_date) as days_diff, + case + when dates_active @> ARRAY [series_date::TIMESTAMPTZ] then power(2, 32 - (curr_date - DATE(series_date))) + else 0 + end as power_of_two, + cast( + case + when dates_active @> ARRAY [series_date::TIMESTAMPTZ] then cast( + power(2, 32 - (curr_date - DATE(series_date))) as bigint + ) + else 0 + end as bit(32) + ) as placeholder_int_value + from users + CROSS JOIN series -- WHERE user_id = '439578290726747300' +) -- select * +-- from placeholder_ints; +select user_id, + CAST(CAST(SUM(power_of_two) AS bigint) AS BIT(32)), + BIT_COUNT ( + CAST(CAST(SUM(power_of_two) AS bigint) AS BIT(32)) + ) > 0 as dim_is_monthly_active, + BIT_COUNT( + CAST('111111100000000000000000000000000' as BIT(32)) & CAST(CAST(SUM(power_of_two) AS bigint) AS BIT(32)) + ) > 0 as dim_is_weekly_active +from placeholder_ints +group by user_id; \ No newline at end of file diff --git a/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab3_1_my_notes.sql b/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab3_1_my_notes.sql new file mode 100644 index 00000000..6243eafa --- /dev/null +++ b/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab3_1_my_notes.sql @@ -0,0 +1,62 @@ +-- CREATE TABLE array_metrics ( +-- user_id NUMERIC, +-- month_start DATE, +-- metric_name TEXT, +-- metric_array REAL [], +-- PRIMARY KEY(user_id, month_start, metric_name) +-- ) +INSERT into array_metrics with daily_aggregate AS( + SELECT user_id, + DATE(event_time) as current_date, + COUNT(1) as num_site_hits + from events + where DATE(event_time) = DATE('2023-01-03') + AND user_id is not null + GROUP BY user_id, + DATE(event_time) + ), + yesterday_array AS( + SELECT * + from array_metrics + WHERE month_start = DATE('2023-01-01') -- This is a fixed date! + ) +SELECT COALESCE(da.user_id, ya.user_id) as user_id, + COALESCE( + ya.month_start, + MAKE_DATE( + EXTRACT( + YEAR + FROM da.current_date + )::INT, + EXTRACT( + MONTH + FROM da.current_date + )::INT, + 1 -- Set the day to 1 + ) + ) as month_start, + 'site_hits' as metric_name, + case + when ya.metric_array is not null then ya.metric_array || array [COALESCE(da.num_site_hits,0)] + when ya.metric_array is null then ARRAY( + SELECT 0::INTEGER + FROM generate_series( + 1, + COALESCE(da.current_date::DATE - DATE('2023-01-01'), 0) + ) + ) || array [COALESCE(da.num_site_hits,0)] + end as metric_array +from daily_aggregate da + FULL OUTER JOIN yesterday_array ya on da.user_id = ya.user_id ON CONFLICT (user_id, month_start, metric_name) DO +update +set metric_array = EXCLUDED.metric_array; +-- array_fill(0, current_date - month_start) doesn't work in postgres. I had to use: +-- when ya.metric_array is null then ARRAY( +-- SELECT 0::INTEGER +-- FROM generate_series( +-- 1, +-- COALESCE(da.current_date::DATE - DATE('2023-01-01'), 0) +-- ) +-- ) || array [COALESCE(da.num_site_hits,0)] +-- To check that all users have N values in their array, run this: +-- SELECT cardinality(metric_array), count(1) from array_metrics GROUP BY 1; \ No newline at end of file diff --git a/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab3_2_my_notes.sql b/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab3_2_my_notes.sql new file mode 100644 index 00000000..a4bc2b9a --- /dev/null +++ b/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab3_2_my_notes.sql @@ -0,0 +1,18 @@ +-- after creating the array_metrics table for 3 days, let us do +-- aggregation on it +with agg as ( + SELECT metric_name, + month_start, + ARRAY [SUM(metric_array[1] +), +SUM(metric_array [2]), +SUM(metric_array [3]) ] as summed_array +from array_metrics +GROUP BY metric_name, + month_start +) +SELECT metric_name, + month_start + CAST(CAST(index -1 AS TEXT) || 'day' as interval), + elem as value +from agg + cross join unnest(agg.summed_array) with ordinality as a(elem, index) \ No newline at end of file From 0059d4d256e3a92b9cab58cf05c83da55923e099 Mon Sep 17 00:00:00 2001 From: Lujein Date: Thu, 5 Dec 2024 18:10:03 +0100 Subject: [PATCH 11/16] playing with lab1 --- .../notebooks/event_data_pyspark.ipynb | 604 ++++++++++++++---- 1 file changed, 491 insertions(+), 113 deletions(-) diff --git a/bootcamp/materials/3-spark-fundamentals/notebooks/event_data_pyspark.ipynb b/bootcamp/materials/3-spark-fundamentals/notebooks/event_data_pyspark.ipynb index 1c496a66..98581e90 100644 --- a/bootcamp/materials/3-spark-fundamentals/notebooks/event_data_pyspark.ipynb +++ b/bootcamp/materials/3-spark-fundamentals/notebooks/event_data_pyspark.ipynb @@ -2,38 +2,45 @@ "cells": [ { "cell_type": "code", - "execution_count": 7, + "execution_count": 1, "id": "81cca085-dba2-42eb-a13b-fa64b6e86583", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "24/12/05 16:05:41 WARN SparkSession: Using an existing Spark session; only runtime SQL configurations will take effect.\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ - "+--------------------+--------------------+--------------+---------+-------------+-------------------+--------------------+-------------------+\n", - "| url| referrer|browser_family|os_family|device_family| host| event_time| event_date|\n", - "+--------------------+--------------------+--------------+---------+-------------+-------------------+--------------------+-------------------+\n", - "| /| null| Chrome| Mac OS X| Other| localhost:3000|2019-01-12 20:04:...|2019-01-12 00:00:00|\n", - "| /| null| Chrome| Mac OS X| Other|www.zachwilson.tech|2019-01-13 04:06:...|2019-01-13 00:00:00|\n", - "| /about|https://www.zachw...| Chrome| Mac OS X| Other|www.zachwilson.tech|2019-01-13 04:06:...|2019-01-13 00:00:00|\n", - "|/images/zach-prof...|https://www.zachw...| Chrome| Mac OS X| Other|www.zachwilson.tech|2019-01-13 04:06:...|2019-01-13 00:00:00|\n", - "| /about| null| Chrome| Mac OS X| Other|www.zachwilson.tech|2019-01-13 04:10:...|2019-01-13 00:00:00|\n", - "| /blog|https://www.zachw...| Chrome| Mac OS X| Other|www.zachwilson.tech|2019-01-13 04:10:...|2019-01-13 00:00:00|\n", - "| /about|https://www.zachw...| Chrome| Mac OS X| Other|www.zachwilson.tech|2019-01-13 04:11:...|2019-01-13 00:00:00|\n", - "| /| null| FacebookBot| Other| Spider|www.zachwilson.tech|2019-01-13 06:09:...|2019-01-13 00:00:00|\n", - "| /| null| FacebookBot| Other| Spider|www.zachwilson.tech|2019-01-13 06:09:...|2019-01-13 00:00:00|\n", - "| /blog|https://www.zachw...| Chrome| Mac OS X| Other|www.zachwilson.tech|2019-01-13 04:11:...|2019-01-13 00:00:00|\n", - "| /contact|https://www.zachw...| Chrome| Mac OS X| Other|www.zachwilson.tech|2019-01-13 04:13:...|2019-01-13 00:00:00|\n", - "| /contact|https://www.zachw...| Chrome| Mac OS X| Other|www.zachwilson.tech|2019-01-13 04:13:...|2019-01-13 00:00:00|\n", - "| /contact| null| Googlebot| Other| Spider|www.zachwilson.tech|2019-01-13 04:14:...|2019-01-13 00:00:00|\n", - "| /robots.txt| null| Googlebot| Other| Spider|www.zachwilson.tech|2019-01-13 04:14:...|2019-01-13 00:00:00|\n", - "| /robots.txt| null| Googlebot| Other| Spider| www.eczachly.com|2019-01-13 04:14:...|2019-01-13 00:00:00|\n", - "| /contact| null| Googlebot| Android| Spider|www.zachwilson.tech|2019-01-13 04:14:...|2019-01-13 00:00:00|\n", - "| /contact| null| Googlebot| Other| Spider|www.zachwilson.tech|2019-01-13 04:15:...|2019-01-13 00:00:00|\n", - "| /about|https://www.zachw...| Chrome| Mac OS X| Other|www.zachwilson.tech|2019-01-13 04:15:...|2019-01-13 00:00:00|\n", - "| /blog| null| Googlebot| Android| Spider|www.zachwilson.tech|2019-01-13 04:15:...|2019-01-13 00:00:00|\n", - "| /about| null| Googlebot| Android| Spider|www.zachwilson.tech|2019-01-13 04:15:...|2019-01-13 00:00:00|\n", - "+--------------------+--------------------+--------------+---------+-------------+-------------------+--------------------+-------------------+\n", + "+-----------+----------+--------+--------------------+----------+--------------------+-------------------+\n", + "| user_id| device_id|referrer| host| url| event_time| event_date|\n", + "+-----------+----------+--------+--------------------+----------+--------------------+-------------------+\n", + "| 1037710827| 532630305| NULL| www.zachwilson.tech| /|2021-03-08 17:27:...|2021-03-08 00:00:00|\n", + "| 925588856| 532630305| NULL| www.eczachly.com| /|2021-05-10 11:26:...|2021-05-10 00:00:00|\n", + "|-1180485268| 532630305| NULL|admin.zachwilson....| /|2021-02-17 16:19:...|2021-02-17 00:00:00|\n", + "|-1044833855| 532630305| NULL| www.zachwilson.tech| /|2021-09-24 15:53:...|2021-09-24 00:00:00|\n", + "| 747494706| 532630305| NULL| www.zachwilson.tech| /|2021-09-26 16:03:...|2021-09-26 00:00:00|\n", + "| 747494706| 532630305| NULL|admin.zachwilson....| /|2021-02-21 16:08:...|2021-02-21 00:00:00|\n", + "| -824540328| 532630305| NULL|admin.zachwilson....| /|2021-09-28 17:23:...|2021-09-28 00:00:00|\n", + "| -824540328| 532630305| NULL| www.eczachly.com| /|2021-09-29 01:22:...|2021-09-29 00:00:00|\n", + "| 1833036683| 532630305| NULL|admin.zachwilson....| /|2021-01-24 03:15:...|2021-01-24 00:00:00|\n", + "|-2134824313| 532630305| NULL| www.eczachly.com| /|2021-01-25 00:03:...|2021-01-25 00:00:00|\n", + "|-1809929467|-906264142| NULL|admin.zachwilson....|/.git/HEAD|2021-02-22 01:36:...|2021-02-22 00:00:00|\n", + "| 2002285749|-906264142| NULL| www.eczachly.com| /|2021-02-22 02:25:...|2021-02-22 00:00:00|\n", + "|-1562965412| 532630305| NULL| www.zachwilson.tech| /|2021-01-30 20:46:...|2021-01-30 00:00:00|\n", + "|-1099860451| 532630305| NULL| www.eczachly.com| /|2021-02-04 23:49:...|2021-02-04 00:00:00|\n", + "| 1246896869|-906264142| NULL| www.zachwilson.tech| /|2021-02-22 02:50:...|2021-02-22 00:00:00|\n", + "| -629331502|-906264142| NULL|admin.zachwilson....|/.git/HEAD|2021-02-22 23:51:...|2021-02-22 00:00:00|\n", + "|-1913422462|-906264142| NULL| www.eczachly.com| /|2021-02-23 00:17:...|2021-02-23 00:00:00|\n", + "| 50429624| 532630305| NULL| www.eczachly.com| /|2022-12-28 01:38:...|2022-12-28 00:00:00|\n", + "| 222389292| 532630305| NULL| www.zachwilson.tech| /|2022-12-28 05:23:...|2022-12-28 00:00:00|\n", + "| -779924777| 532630305| NULL| www.zachwilson.tech| /|2022-12-28 16:45:...|2022-12-28 00:00:00|\n", + "+-----------+----------+--------+--------------------+----------+--------------------+-------------------+\n", "only showing top 20 rows\n", "\n" ] @@ -41,66 +48,210 @@ ], "source": [ "from pyspark.sql import SparkSession\n", - "from pyspark.sql.functions import expr, col\n", + "from pyspark.sql.functions import expr, col,lit\n", "spark = SparkSession.builder.appName(\"Jupyter\").getOrCreate()\n", "\n", "spark\n", "\n", "df = spark.read.option(\"header\", \"true\").csv(\"/home/iceberg/data/events.csv\").withColumn(\"event_date\", expr(\"DATE_TRUNC('day', event_time)\"))\n", "\n", - "df.show()" + "df.show()\n", + "# df.join(df, lit(1)==lit(1)).take(5)" ] }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 2, "id": "dce068df-3e21-429a-8716-abdd13e9406c", - "metadata": {}, + "metadata": { + "scrolled": true + }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Stage 2:=============================> (4 + 4) / 8]\r" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ - "+--------------------+--------+----------------+---------+-------------+-------------------+--------------------+-------------------+\n", - "| url|referrer| browser_family|os_family|device_family| host| event_time| event_date|\n", - "+--------------------+--------+----------------+---------+-------------+-------------------+--------------------+-------------------+\n", - "| /| null| Chrome| Mac OS X| Other| www.eczachly.com|2019-01-14 11:23:...|2019-01-14 00:00:00|\n", - "| /blog| null| FacebookBot| Other| Spider| www.eczachly.com|2019-01-14 04:41:...|2019-01-14 00:00:00|\n", - "| /blog| null| FacebookBot| Other| Spider| www.eczachly.com|2019-01-14 04:41:...|2019-01-14 00:00:00|\n", - "| /robots.txt| null| Googlebot| Other| Spider| www.eczachly.com|2019-01-14 01:10:...|2019-01-14 00:00:00|\n", - "| /sitemap.xml| null| Googlebot| Other| Spider| www.eczachly.com|2019-01-14 01:10:...|2019-01-14 00:00:00|\n", - "| /robots.txt| null| Googlebot| Other| Spider| www.eczachly.com|2019-01-14 05:03:...|2019-01-14 00:00:00|\n", - "| /| null| Googlebot| Android| Spider| www.eczachly.com|2019-01-14 05:03:...|2019-01-14 00:00:00|\n", - "| /robots.txt| null| Googlebot| Other| Spider| www.eczachly.com|2019-01-14 18:17:...|2019-01-14 00:00:00|\n", - "| /| null| Googlebot| Android| Spider| www.eczachly.com|2019-01-14 18:17:...|2019-01-14 00:00:00|\n", - "| /contact| null| Googlebot| Android| Spider| www.eczachly.com|2019-01-14 18:19:...|2019-01-14 00:00:00|\n", - "| /blog| null| Googlebot| Android| Spider| www.eczachly.com|2019-01-14 18:21:...|2019-01-14 00:00:00|\n", - "| /about| null| Googlebot| Android| Spider| www.eczachly.com|2019-01-14 18:21:...|2019-01-14 00:00:00|\n", - "|/blog/so-what-exa...| null| Googlebot| Android| Spider| www.eczachly.com|2019-01-14 18:23:...|2019-01-14 00:00:00|\n", - "| /| null|Nimbostratus-Bot| Other| Other| www.eczachly.com|2019-01-14 16:14:...|2019-01-14 00:00:00|\n", - "| /| null|Nimbostratus-Bot| Other| Other| www.eczachly.com|2019-01-14 21:08:...|2019-01-14 00:00:00|\n", - "| /| null| Other| Other| Other| www.eczachly.com|2019-01-14 10:51:...|2019-01-14 00:00:00|\n", - "| /| null| Other| Other| Other| www.eczachly.com|2019-01-14 19:50:...|2019-01-14 00:00:00|\n", - "| /robots.txt| null| YandexBot| Other| Spider| www.eczachly.com|2019-01-14 19:30:...|2019-01-14 00:00:00|\n", - "| /| null| YandexBot| Other| Spider| www.eczachly.com|2019-01-14 19:30:...|2019-01-14 00:00:00|\n", - "| /| null| Chrome| Mac OS X| Other|www.zachwilson.tech|2019-01-14 00:05:...|2019-01-14 00:00:00|\n", - "+--------------------+--------+----------------+---------+-------------+-------------------+--------------------+-------------------+\n", + "+-----------+-----------+--------------------+--------------------+-----------+--------------------+-------------------+\n", + "| user_id| device_id| referrer| host| url| event_time| event_date|\n", + "+-----------+-----------+--------------------+--------------------+-----------+--------------------+-------------------+\n", + "| -94037775|-2012543895| NULL|admin.zachwilson....|/robots.txt|2021-05-30 12:29:...|2021-05-30 00:00:00|\n", + "| 760642255|-1883465659| NULL|admin.zachwilson....| /|2021-05-30 12:29:...|2021-05-30 00:00:00|\n", + "| 1587120550| -290659081| NULL| www.eczachly.com| /|2021-05-30 00:00:...|2021-05-30 00:00:00|\n", + "| -664256598| -290659081| NULL| www.eczachly.com| /blog|2021-05-30 01:48:...|2021-05-30 00:00:00|\n", + "| 1896286514| 532630305| NULL| www.eczachly.com| /|2021-05-30 03:31:...|2021-05-30 00:00:00|\n", + "| 1896286514| 532630305| NULL| www.eczachly.com| /|2021-05-30 03:31:...|2021-05-30 00:00:00|\n", + "| 1896286514| 532630305| NULL| www.eczachly.com| /|2021-05-30 03:31:...|2021-05-30 00:00:00|\n", + "| 1896286514| 532630305| NULL| www.eczachly.com| /about|2021-05-30 03:32:...|2021-05-30 00:00:00|\n", + "| 1896286514| 532630305| NULL| www.eczachly.com| /blog|2021-05-30 03:32:...|2021-05-30 00:00:00|\n", + "| 1896286514| 532630305| NULL| www.eczachly.com| /graphs|2021-05-30 03:33:...|2021-05-30 00:00:00|\n", + "| 1896286514| 532630305| NULL| www.eczachly.com| /contact|2021-05-30 03:33:...|2021-05-30 00:00:00|\n", + "|-1591343055| 1088283544| NULL| www.eczachly.com| /graphs|2021-05-30 13:46:...|2021-05-30 00:00:00|\n", + "| 125169968| 1088283544| NULL| www.eczachly.com| /contact|2021-05-30 14:40:...|2021-05-30 00:00:00|\n", + "| 1489579620| 1797244070| NULL| www.zachwilson.tech| /about|2021-05-30 11:58:...|2021-05-30 00:00:00|\n", + "|-1292603375| 501573246|https://www.googl...| www.zachwilson.tech| /|2021-05-30 01:14:...|2021-05-30 00:00:00|\n", + "|-1292603375| 501573246|https://www.zachw...| www.zachwilson.tech| /blog|2021-05-30 01:15:...|2021-05-30 00:00:00|\n", + "| 1836258642|-1217993711| NULL| www.zachwilson.tech| /|2021-05-30 01:27:...|2021-05-30 00:00:00|\n", + "| -757032764| -290659081| NULL| www.zachwilson.tech| /blog|2021-05-30 01:35:...|2021-05-30 00:00:00|\n", + "| 2044522997| 378191395|https://www.googl...| www.zachwilson.tech| /|2021-05-30 02:47:...|2021-05-30 00:00:00|\n", + "| 2044522997| 378191395|https://www.zachw...| www.zachwilson.tech| /blog|2021-05-30 02:48:...|2021-05-30 00:00:00|\n", + "+-----------+-----------+--------------------+--------------------+-----------+--------------------+-------------------+\n", "only showing top 20 rows\n", "\n" ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] } ], "source": [ - "sorted = df.repartition(10, col(\"event_date\")) \\\n", - " .sortWithinPartitions(col(\"event_date\"), col(\"host\"), col(\"browser_family\")) \\\n", - " .withColumn(\"event_time\", col(\"event_time\").cast(\"timestamp\")) \\\n", + "sorted = df.repartition(100, col(\"event_date\")) \\\n", + " .sortWithinPartitions(col(\"event_date\"), col(\"host\")) \\\n", + " .withColumn(\"event_time\", col(\"event_time\").cast(\"timestamp\")) \\\n", "\n", - "sorted.show()" + "sorted.show()\n", + " # col(\"browser_family\")" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 4, + "id": "d7afa85d-b9b7-4f84-beaf-415fed905d56", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Stage 7:====================================> (65 + 9) / 100]\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+-----------+-----------+--------+--------------------+--------------------+--------------------+-------------------+\n", + "| user_id| device_id|referrer| host| url| event_time| event_date|\n", + "+-----------+-----------+--------+--------------------+--------------------+--------------------+-------------------+\n", + "| 1272828233| -643696601| NULL|admin.zachwilson....| /|2021-01-02 13:53:...|2021-01-02 00:00:00|\n", + "| 747494706| 532630305| NULL|admin.zachwilson....| /|2021-01-02 19:36:...|2021-01-02 00:00:00|\n", + "| 2110046626| 898871897| NULL|admin.zachwilson....| /wp-login.php|2021-01-02 19:57:...|2021-01-02 00:00:00|\n", + "| 1272828233| -643696601| NULL|admin.zachwilson....| /|2021-01-02 21:05:...|2021-01-02 00:00:00|\n", + "| 1272828233| -643696601| NULL|admin.zachwilson....| /|2021-01-02 21:37:...|2021-01-02 00:00:00|\n", + "| 1399665425|-2012543895| NULL| www.eczachly.com| /|2021-01-02 00:20:...|2021-01-02 00:00:00|\n", + "| 125243313| -290659081| NULL| www.eczachly.com| /|2021-01-02 02:06:...|2021-01-02 00:00:00|\n", + "| 632739597| -290659081| NULL| www.eczachly.com|/blog/what-exactl...|2021-01-02 02:58:...|2021-01-02 00:00:00|\n", + "|-1780827820| -290659081| NULL| www.eczachly.com| /|2021-01-02 04:45:...|2021-01-02 00:00:00|\n", + "| 632739597| -290659081| NULL| www.eczachly.com| /|2021-01-02 05:14:...|2021-01-02 00:00:00|\n", + "| 1047962242| -158310583| NULL| www.eczachly.com| /|2021-01-02 11:40:...|2021-01-02 00:00:00|\n", + "| 273700037| -290659081| NULL| www.eczachly.com| /|2021-01-02 07:51:...|2021-01-02 00:00:00|\n", + "| 1272828233| -643696601| NULL| www.eczachly.com| /|2021-01-02 08:14:...|2021-01-02 00:00:00|\n", + "| 210988258| 1088283544| NULL| www.eczachly.com| /contact|2021-01-02 11:11:...|2021-01-02 00:00:00|\n", + "| 273700037| -290659081| NULL| www.eczachly.com| /|2021-01-02 11:23:...|2021-01-02 00:00:00|\n", + "| 632739597| -290659081| NULL| www.eczachly.com| /sitemap.xml|2021-01-02 14:10:...|2021-01-02 00:00:00|\n", + "| 659201289| -290659081| NULL| www.eczachly.com|/blog/life-of-a-s...|2021-01-02 15:53:...|2021-01-02 00:00:00|\n", + "| 1746646422| 2038970862| NULL| www.zachwilson.tech| /about|2021-01-02 10:49:...|2021-01-02 00:00:00|\n", + "| 1150073567|-1883465659| NULL| www.zachwilson.tech| /blog|2021-01-02 00:14:...|2021-01-02 00:00:00|\n", + "| 1746646422| 2038970862| NULL| www.zachwilson.tech| /graphs|2021-01-02 10:49:...|2021-01-02 00:00:00|\n", + "+-----------+-----------+--------+--------------------+--------------------+--------------------+-------------------+\n", + "only showing top 20 rows\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "sortedTwo = df.repartition(100, col(\"event_date\")) \\\n", + " .sort(col(\"event_date\"), col(\"host\")) \\\n", + " .withColumn(\"event_time\", col(\"event_time\").cast(\"timestamp\")) \n", + "sortedTwo.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "8cbd3ad7-dfb1-4e60-9162-4f1e685d59c9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "== Physical Plan ==\n", + "AdaptiveSparkPlan isFinalPlan=false\n", + "+- Project [user_id#17, device_id#18, referrer#19, host#20, url#21, cast(event_time#22 as timestamp) AS event_time#73, event_date#29]\n", + " +- Sort [event_date#29 ASC NULLS FIRST, host#20 ASC NULLS FIRST], false, 0\n", + " +- Exchange hashpartitioning(event_date#29, 100), REPARTITION_BY_NUM, [plan_id=132]\n", + " +- Project [user_id#17, device_id#18, referrer#19, host#20, url#21, event_time#22, date_trunc(day, cast(event_time#22 as timestamp), Some(Etc/UTC)) AS event_date#29]\n", + " +- FileScan csv [user_id#17,device_id#18,referrer#19,host#20,url#21,event_time#22] Batched: false, DataFilters: [], Format: CSV, Location: InMemoryFileIndex(1 paths)[file:/home/iceberg/data/events.csv], PartitionFilters: [], PushedFilters: [], ReadSchema: struct\n", + "\n", + "\n" + ] + } + ], + "source": [ + "sorted.explain()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "6fd32c48-37b3-45f1-8961-65b33644e425", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "== Physical Plan ==\n", + "AdaptiveSparkPlan isFinalPlan=false\n", + "+- Project [user_id#17, device_id#18, referrer#19, host#20, url#21, cast(event_time#22 as timestamp) AS event_time#116, event_date#29]\n", + " +- Sort [event_date#29 ASC NULLS FIRST, host#20 ASC NULLS FIRST], true, 0\n", + " +- Exchange rangepartitioning(event_date#29 ASC NULLS FIRST, host#20 ASC NULLS FIRST, 200), ENSURE_REQUIREMENTS, [plan_id=154]\n", + " +- Exchange hashpartitioning(event_date#29, 100), REPARTITION_BY_NUM, [plan_id=150]\n", + " +- Project [user_id#17, device_id#18, referrer#19, host#20, url#21, event_time#22, date_trunc(day, cast(event_time#22 as timestamp), Some(Etc/UTC)) AS event_date#29]\n", + " +- FileScan csv [user_id#17,device_id#18,referrer#19,host#20,url#21,event_time#22] Batched: false, DataFilters: [], Format: CSV, Location: InMemoryFileIndex(1 paths)[file:/home/iceberg/data/events.csv], PartitionFilters: [], PushedFilters: [], ReadSchema: struct\n", + "\n", + "\n" + ] + } + ], + "source": [ + "sortedTwo.explain()" + ] + }, + { + "cell_type": "markdown", + "id": "5220c26e-ca50-4f85-90c3-e1950a472d10", + "metadata": {}, + "source": [ + "in the .explain:\n", + "Project and select mean the same thing.
\n", + "Exchange hashpartitioning does the partitioning.
\n", + "In the sort line, there is a boolean parameter which tells us if the sort is global or not.
\n", + "The Exchange rangepartitioning is the painful part (at scale).
\n", + "Exchange means shuffle!" + ] + }, + { + "cell_type": "code", + "execution_count": 2, "id": "d800dca7-2737-4192-b5c0-c1806c105e15", "metadata": {}, "outputs": [ @@ -108,8 +259,12 @@ "data": { "text/html": [ "\n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", "
" ], "text/plain": [ @@ -119,7 +274,7 @@ "++" ] }, - "execution_count": 9, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -132,16 +287,78 @@ }, { "cell_type": "code", - "execution_count": 55, - "id": "e83cd813-d5c0-4d67-8285-849b882b8bfa", + "execution_count": 4, + "id": "9abb6399-1ffe-4546-bcd1-160f483ff435", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namespacetableNameisTemporary
bootcampeventsFalse
bootcampevents_sortedFalse
bootcampevents_unsortedFalse
" + ], + "text/plain": [ + "+-----------+-----------------+-------------+\n", + "| namespace | tableName | isTemporary |\n", + "+-----------+-----------------+-------------+\n", + "| bootcamp | events | False |\n", + "| bootcamp | events_sorted | False |\n", + "| bootcamp | events_unsorted | False |\n", + "+-----------+-----------------+-------------+" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%sql \n", + "SHOW TABLES IN bootcamp;" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e83cd813-d5c0-4d67-8285-849b882b8bfa", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", "
" ], "text/plain": [ @@ -151,7 +368,7 @@ "++" ] }, - "execution_count": 55, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -159,12 +376,12 @@ "source": [ "%%sql\n", "\n", - "DROP TABLE IF EXISTS bootcamp.events" + "DROP TABLE IF EXISTS iceberg.bootcamp.events" ] }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 11, "id": "d1b197a9-1b63-4130-acbe-01418eede0e5", "metadata": { "scrolled": true @@ -174,8 +391,12 @@ "data": { "text/html": [ "\n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", "
" ], "text/plain": [ @@ -185,7 +406,55 @@ "++" ] }, - "execution_count": 56, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "-- %%sql\n", + "\n", + "-- CREATE TABLE IF NOT EXISTS bootcamp.events (\n", + "-- url STRING,\n", + "-- referrer STRING,\n", + "-- browser_family STRING,\n", + "-- os_family STRING,\n", + "-- device_family STRING,\n", + "-- host STRING,\n", + "-- event_time TIMESTAMP,\n", + "-- event_date DATE\n", + "-- )\n", + "-- USING iceberg\n", + "-- PARTITIONED BY (event_date);\n", + "-- PARTITIONED BY (years(event_date));\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "cf7ec899-d164-498d-bd09-3b6b7fe6abca", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
" + ], + "text/plain": [ + "++\n", + "||\n", + "++\n", + "++" + ] + }, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -193,23 +462,26 @@ "source": [ "%%sql\n", "\n", - "CREATE TABLE IF NOT EXISTS bootcamp.events (\n", - " url STRING,\n", + "CREATE TABLE IF NOT EXISTS iceberg.bootcamp.events (\n", + " user_id NUMERIC,\n", + " device_id NUMERIC,\n", " referrer STRING,\n", - " browser_family STRING,\n", - " os_family STRING,\n", - " device_family STRING,\n", " host STRING,\n", + " url STRING,\n", + "\n", " event_time TIMESTAMP,\n", " event_date DATE\n", + " --browser_family STRING,\n", + " --os_family STRING,\n", + " --device_family STRING,\n", ")\n", "USING iceberg\n", - "PARTITIONED BY (years(event_date));\n" + " PARTITIONED BY (event_date);" ] }, { "cell_type": "code", - "execution_count": 112, + "execution_count": 15, "id": "c40b143f-295e-4875-bd7f-12409312b800", "metadata": { "scrolled": true @@ -219,8 +491,12 @@ "data": { "text/html": [ "\n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", "
" ], "text/plain": [ @@ -230,7 +506,7 @@ "++" ] }, - "execution_count": 112, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -239,22 +515,30 @@ "%%sql\n", "\n", "\n", - "CREATE TABLE IF NOT EXISTS bootcamp.events_sorted (\n", - " url STRING,\n", + "CREATE TABLE IF NOT EXISTS iceberg.bootcamp.events_sorted (\n", + " user_id NUMERIC,\n", + " device_id NUMERIC,\n", " referrer STRING,\n", - " browser_family STRING,\n", - " os_family STRING,\n", - " device_family STRING,\n", " host STRING,\n", + " url STRING,\n", " event_time TIMESTAMP,\n", " event_date DATE\n", ")\n", - "USING iceberg;" + "USING iceberg\n", + " PARTITIONED BY (event_date);\n", + " -- url STRING,\n", + " -- referrer STRING,\n", + " -- browser_family STRING,\n", + " -- os_family STRING,\n", + " -- device_family STRING,\n", + " -- host STRING,\n", + " -- event_time TIMESTAMP,\n", + " -- event_date DATE" ] }, { "cell_type": "code", - "execution_count": 113, + "execution_count": 16, "id": "00c86e79-a911-464c-ad58-acc92859dcc6", "metadata": { "scrolled": true @@ -264,8 +548,12 @@ "data": { "text/html": [ "\n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", "
" ], "text/plain": [ @@ -275,7 +563,7 @@ "++" ] }, - "execution_count": 113, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -284,38 +572,124 @@ "%%sql\n", "\n", "\n", - "CREATE TABLE IF NOT EXISTS bootcamp.events_unsorted (\n", - " url STRING,\n", + "CREATE TABLE IF NOT EXISTS iceberg.bootcamp.events_unsorted (\n", + " user_id NUMERIC,\n", + " device_id NUMERIC,\n", " referrer STRING,\n", - " browser_family STRING,\n", - " os_family STRING,\n", - " device_family STRING,\n", " host STRING,\n", + " url STRING,\n", " event_time TIMESTAMP,\n", " event_date DATE\n", ")\n", - "USING iceberg;" + "USING iceberg\n", + " PARTITIONED BY (event_date);" ] }, { "cell_type": "code", - "execution_count": 120, + "execution_count": 21, "id": "2c1254bc-9ecf-4c86-bfd9-de81ecfbb78b", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "ERROR:root:Exception while sending command. (0 + 4) / 4]\n", + "Traceback (most recent call last):\n", + " File \"/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/clientserver.py\", line 516, in send_command\n", + " raise Py4JNetworkError(\"Answer from Java side is empty\")\n", + "py4j.protocol.Py4JNetworkError: Answer from Java side is empty\n", + "\n", + "During handling of the above exception, another exception occurred:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/java_gateway.py\", line 1038, in send_command\n", + " response = connection.send_command(command)\n", + " File \"/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/clientserver.py\", line 539, in send_command\n", + " raise Py4JNetworkError(\n", + "py4j.protocol.Py4JNetworkError: Error while sending or receiving\n" + ] + }, + { + "ename": "Py4JError", + "evalue": "An error occurred while calling o219.saveAsTable", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mPy4JError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[21], line 10\u001b[0m\n\u001b[1;32m 4\u001b[0m first_sort_df \u001b[38;5;241m=\u001b[39m start_df\u001b[38;5;241m.\u001b[39msortWithinPartitions(col(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mevent_date\u001b[39m\u001b[38;5;124m\"\u001b[39m), col(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhost\u001b[39m\u001b[38;5;124m\"\u001b[39m)) \u001b[38;5;66;03m#col(\"browser_family\"),\u001b[39;00m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;66;03m# sorted = df.repartition(10, col(\"event_date\")) \\\u001b[39;00m\n\u001b[1;32m 7\u001b[0m \u001b[38;5;66;03m# .sortWithinPartitions(col(\"event_date\")) \\\u001b[39;00m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;66;03m# .withColumn(\"event_time\", col(\"event_time\").cast(\"timestamp\")) \\\u001b[39;00m\n\u001b[0;32m---> 10\u001b[0m \u001b[43mstart_df\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwrite\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmode\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43moverwrite\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msaveAsTable\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43miceberg.bootcamp.events_unsorted\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 11\u001b[0m first_sort_df\u001b[38;5;241m.\u001b[39mwrite\u001b[38;5;241m.\u001b[39mmode(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124moverwrite\u001b[39m\u001b[38;5;124m\"\u001b[39m)\u001b[38;5;241m.\u001b[39msaveAsTable(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124miceberg.bootcamp.events_sorted\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "File \u001b[0;32m/opt/spark/python/pyspark/sql/readwriter.py:1586\u001b[0m, in \u001b[0;36mDataFrameWriter.saveAsTable\u001b[0;34m(self, name, format, mode, partitionBy, **options)\u001b[0m\n\u001b[1;32m 1584\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mformat\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1585\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mformat(\u001b[38;5;28mformat\u001b[39m)\n\u001b[0;32m-> 1586\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_jwrite\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msaveAsTable\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/java_gateway.py:1322\u001b[0m, in \u001b[0;36mJavaMember.__call__\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 1316\u001b[0m command \u001b[38;5;241m=\u001b[39m proto\u001b[38;5;241m.\u001b[39mCALL_COMMAND_NAME \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1317\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcommand_header \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1318\u001b[0m args_command \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1319\u001b[0m proto\u001b[38;5;241m.\u001b[39mEND_COMMAND_PART\n\u001b[1;32m 1321\u001b[0m answer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgateway_client\u001b[38;5;241m.\u001b[39msend_command(command)\n\u001b[0;32m-> 1322\u001b[0m return_value \u001b[38;5;241m=\u001b[39m \u001b[43mget_return_value\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1323\u001b[0m \u001b[43m \u001b[49m\u001b[43manswer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgateway_client\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtarget_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1325\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m temp_arg \u001b[38;5;129;01min\u001b[39;00m temp_args:\n\u001b[1;32m 1326\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(temp_arg, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_detach\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n", + "File \u001b[0;32m/opt/spark/python/pyspark/errors/exceptions/captured.py:179\u001b[0m, in \u001b[0;36mcapture_sql_exception..deco\u001b[0;34m(*a, **kw)\u001b[0m\n\u001b[1;32m 177\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdeco\u001b[39m(\u001b[38;5;241m*\u001b[39ma: Any, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkw: Any) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Any:\n\u001b[1;32m 178\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 179\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkw\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 180\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m Py4JJavaError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 181\u001b[0m converted \u001b[38;5;241m=\u001b[39m convert_exception(e\u001b[38;5;241m.\u001b[39mjava_exception)\n", + "File \u001b[0;32m/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/protocol.py:334\u001b[0m, in \u001b[0;36mget_return_value\u001b[0;34m(answer, gateway_client, target_id, name)\u001b[0m\n\u001b[1;32m 330\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m Py4JError(\n\u001b[1;32m 331\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAn error occurred while calling \u001b[39m\u001b[38;5;132;01m{0}\u001b[39;00m\u001b[38;5;132;01m{1}\u001b[39;00m\u001b[38;5;132;01m{2}\u001b[39;00m\u001b[38;5;124m. Trace:\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{3}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39m\n\u001b[1;32m 332\u001b[0m \u001b[38;5;28mformat\u001b[39m(target_id, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m, name, value))\n\u001b[1;32m 333\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 334\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m Py4JError(\n\u001b[1;32m 335\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAn error occurred while calling \u001b[39m\u001b[38;5;132;01m{0}\u001b[39;00m\u001b[38;5;132;01m{1}\u001b[39;00m\u001b[38;5;132;01m{2}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39m\n\u001b[1;32m 336\u001b[0m \u001b[38;5;28mformat\u001b[39m(target_id, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m, name))\n\u001b[1;32m 337\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 338\u001b[0m \u001b[38;5;28mtype\u001b[39m \u001b[38;5;241m=\u001b[39m answer[\u001b[38;5;241m1\u001b[39m]\n", + "\u001b[0;31mPy4JError\u001b[0m: An error occurred while calling o219.saveAsTable" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "ERROR:root:Exception while sending command.\n", + "Traceback (most recent call last):\n", + " File \"/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/clientserver.py\", line 516, in send_command\n", + " raise Py4JNetworkError(\"Answer from Java side is empty\")\n", + "py4j.protocol.Py4JNetworkError: Answer from Java side is empty\n", + "\n", + "During handling of the above exception, another exception occurred:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/java_gateway.py\", line 1038, in send_command\n", + " response = connection.send_command(command)\n", + " File \"/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/clientserver.py\", line 539, in send_command\n", + " raise Py4JNetworkError(\n", + "py4j.protocol.Py4JNetworkError: Error while sending or receiving\n" + ] + } + ], "source": [ "\n", "start_df = df.repartition(4, col(\"event_date\")).withColumn(\"event_time\", col(\"event_time\").cast(\"timestamp\")) \\\n", " \n", "\n", - "first_sort_df = start_df.sortWithinPartitions(col(\"event_date\"), col(\"browser_family\"), col(\"host\"))\n", + "first_sort_df = start_df.sortWithinPartitions(col(\"event_date\"), col(\"host\")) #col(\"browser_family\"),\n", "\n", - "sorted = df.repartition(10, col(\"event_date\")) \\\n", - " .sortWithinPartitions(col(\"event_date\")) \\\n", - " .withColumn(\"event_time\", col(\"event_time\").cast(\"timestamp\")) \\\n", + "# sorted = df.repartition(10, col(\"event_date\")) \\\n", + "# .sortWithinPartitions(col(\"event_date\")) \\\n", + "# .withColumn(\"event_time\", col(\"event_time\").cast(\"timestamp\")) \\\n", "\n", - "start_df.write.mode(\"overwrite\").saveAsTable(\"bootcamp.events_unsorted\")\n", - "first_sort_df.write.mode(\"overwrite\").saveAsTable(\"bootcamp.events_sorted\")" + "start_df.write.mode(\"overwrite\").saveAsTable(\"iceberg.bootcamp.events_unsorted\")\n", + "first_sort_df.write.mode(\"overwrite\").saveAsTable(\"iceberg.bootcamp.events_sorted\")" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "6349cb64-8e32-4360-bb65-2a7cf6f09c20", + "metadata": {}, + "outputs": [ + { + "ename": "ConnectionRefusedError", + "evalue": "[Errno 111] Connection refused", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mConnectionRefusedError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[22], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# Check a specific configuration\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m warehouse_path \u001b[38;5;241m=\u001b[39m \u001b[43mspark\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconf\u001b[49m\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mspark.sql.catalog.iceberg.warehouse\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNot Set\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWarehouse Path:\u001b[39m\u001b[38;5;124m\"\u001b[39m, warehouse_path)\n", + "File \u001b[0;32m/opt/spark/python/pyspark/sql/session.py:784\u001b[0m, in \u001b[0;36mSparkSession.conf\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 757\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Runtime configuration interface for Spark.\u001b[39;00m\n\u001b[1;32m 758\u001b[0m \n\u001b[1;32m 759\u001b[0m \u001b[38;5;124;03mThis is the interface through which the user can get and set all Spark and Hadoop\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 781\u001b[0m \u001b[38;5;124;03m'value'\u001b[39;00m\n\u001b[1;32m 782\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 783\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_conf\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[0;32m--> 784\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_conf \u001b[38;5;241m=\u001b[39m RuntimeConfig(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_jsparkSession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconf\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 785\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_conf\n", + "File \u001b[0;32m/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/java_gateway.py:1321\u001b[0m, in \u001b[0;36mJavaMember.__call__\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 1314\u001b[0m args_command, temp_args \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_build_args(\u001b[38;5;241m*\u001b[39margs)\n\u001b[1;32m 1316\u001b[0m command \u001b[38;5;241m=\u001b[39m proto\u001b[38;5;241m.\u001b[39mCALL_COMMAND_NAME \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1317\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcommand_header \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1318\u001b[0m args_command \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1319\u001b[0m proto\u001b[38;5;241m.\u001b[39mEND_COMMAND_PART\n\u001b[0;32m-> 1321\u001b[0m answer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgateway_client\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend_command\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcommand\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1322\u001b[0m return_value \u001b[38;5;241m=\u001b[39m get_return_value(\n\u001b[1;32m 1323\u001b[0m answer, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgateway_client, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtarget_id, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mname)\n\u001b[1;32m 1325\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m temp_arg \u001b[38;5;129;01min\u001b[39;00m temp_args:\n", + "File \u001b[0;32m/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/java_gateway.py:1036\u001b[0m, in \u001b[0;36mGatewayClient.send_command\u001b[0;34m(self, command, retry, binary)\u001b[0m\n\u001b[1;32m 1015\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21msend_command\u001b[39m(\u001b[38;5;28mself\u001b[39m, command, retry\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, binary\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[1;32m 1016\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Sends a command to the JVM. This method is not intended to be\u001b[39;00m\n\u001b[1;32m 1017\u001b[0m \u001b[38;5;124;03m called directly by Py4J users. It is usually called by\u001b[39;00m\n\u001b[1;32m 1018\u001b[0m \u001b[38;5;124;03m :class:`JavaMember` instances.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1034\u001b[0m \u001b[38;5;124;03m if `binary` is `True`.\u001b[39;00m\n\u001b[1;32m 1035\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m-> 1036\u001b[0m connection \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_connection\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1037\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1038\u001b[0m response \u001b[38;5;241m=\u001b[39m connection\u001b[38;5;241m.\u001b[39msend_command(command)\n", + "File \u001b[0;32m/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/clientserver.py:284\u001b[0m, in \u001b[0;36mJavaClient._get_connection\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 281\u001b[0m \u001b[38;5;28;01mpass\u001b[39;00m\n\u001b[1;32m 283\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m connection \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mor\u001b[39;00m connection\u001b[38;5;241m.\u001b[39msocket \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 284\u001b[0m connection \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_create_new_connection\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 285\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m connection\n", + "File \u001b[0;32m/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/clientserver.py:291\u001b[0m, in \u001b[0;36mJavaClient._create_new_connection\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 287\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_create_new_connection\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 288\u001b[0m connection \u001b[38;5;241m=\u001b[39m ClientServerConnection(\n\u001b[1;32m 289\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mjava_parameters, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpython_parameters,\n\u001b[1;32m 290\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgateway_property, \u001b[38;5;28mself\u001b[39m)\n\u001b[0;32m--> 291\u001b[0m \u001b[43mconnection\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect_to_java_server\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 292\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mset_thread_connection(connection)\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m connection\n", + "File \u001b[0;32m/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/clientserver.py:438\u001b[0m, in \u001b[0;36mClientServerConnection.connect_to_java_server\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 435\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mssl_context:\n\u001b[1;32m 436\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msocket \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mssl_context\u001b[38;5;241m.\u001b[39mwrap_socket(\n\u001b[1;32m 437\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msocket, server_hostname\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mjava_address)\n\u001b[0;32m--> 438\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mjava_address\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mjava_port\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 439\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstream \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msocket\u001b[38;5;241m.\u001b[39mmakefile(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrb\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 440\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mis_connected \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n", + "\u001b[0;31mConnectionRefusedError\u001b[0m: [Errno 111] Connection refused" + ] + } + ], + "source": [ + "# Check a specific configuration\n", + "warehouse_path = spark.conf.get(\"spark.sql.catalog.iceberg.warehouse\", \"Not Set\")\n", + "print(\"Warehouse Path:\", warehouse_path)" ] }, { @@ -414,17 +788,21 @@ { "cell_type": "code", "execution_count": null, - "outputs": [], - "source": [ - "%%sql \n", - "SELECT COUNT(1) FROM bootcamp.matches_bucketed.files" - ], + "id": "f755437c", "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%%\n" } - } + }, + "outputs": [], + "source": [ + "%%sql \n", + "SELECT COUNT(1) FROM bootcamp.matches_bucketed.files" + ] }, { "cell_type": "code", @@ -484,9 +862,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.17" + "version": "3.9.18" } }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} From 10fd7f596836357dfe7dcde686df67ddd4093067 Mon Sep 17 00:00:00 2001 From: Lujein Date: Thu, 12 Dec 2024 15:40:05 +0100 Subject: [PATCH 12/16] doing the lab along --- .../lecture-lab/draft.sql | 19 +- .../3-spark-fundamentals/docker-compose.yaml | 3 +- .../notebooks/Caching.ipynb | 4 +- .../notebooks/DatasetApi.ipynb | 486 +- .../notebooks/bucket-joins-in-iceberg.ipynb | 4407 ++++++++++++++++- .../notebooks/event_data_pyspark.ipynb | 466 +- .../src/jobs/monthly_user_site_hits_job.py | 5 - .../src/jobs/players_scd_job.py | 4 - .../src/jobs/team_vertex_job.py | 3 - 9 files changed, 4976 insertions(+), 421 deletions(-) diff --git a/bootcamp/materials/2-fact-data-modeling/lecture-lab/draft.sql b/bootcamp/materials/2-fact-data-modeling/lecture-lab/draft.sql index 18f4622e..49d91f83 100644 --- a/bootcamp/materials/2-fact-data-modeling/lecture-lab/draft.sql +++ b/bootcamp/materials/2-fact-data-modeling/lecture-lab/draft.sql @@ -15,9 +15,16 @@ -- from events -- where user_id = '10060569187331700000' -- GROUP BY DATE(event_time); -SELECT * -from array_metrics; -SELECT cardinality(metric_array), - count(1) -from array_metrics -GROUP BY 1; \ No newline at end of file +-- SELECT * +-- from array_metrics; +-- SELECT cardinality(metric_array), +-- count(1) +-- from array_metrics +-- GROUP BY 1; +SELECT user_id, + device_id, + COUNT(1) as event_counts, + COLLECT_LIST(DISTINCT host) as host_array +FROM events +GROUP BY 1, + 2; \ No newline at end of file diff --git a/bootcamp/materials/3-spark-fundamentals/docker-compose.yaml b/bootcamp/materials/3-spark-fundamentals/docker-compose.yaml index 64e65cd4..060a9940 100644 --- a/bootcamp/materials/3-spark-fundamentals/docker-compose.yaml +++ b/bootcamp/materials/3-spark-fundamentals/docker-compose.yaml @@ -66,8 +66,7 @@ services: entrypoint: > /bin/sh -c " until (/usr/bin/mc config host add minio http://minio:9000 admin password) do echo '...waiting...' && sleep 1; done; - /usr/bin/mc rm -r --force minio/warehouse; - /usr/bin/mc mb minio/warehouse; + /usr/bin/mc ls minio/warehouse || /usr/bin/mc mb minio/warehouse; /usr/bin/mc policy set public minio/warehouse; tail -f /dev/null " diff --git a/bootcamp/materials/3-spark-fundamentals/notebooks/Caching.ipynb b/bootcamp/materials/3-spark-fundamentals/notebooks/Caching.ipynb index d5d10b7d..80220e68 100644 --- a/bootcamp/materials/3-spark-fundamentals/notebooks/Caching.ipynb +++ b/bootcamp/materials/3-spark-fundamentals/notebooks/Caching.ipynb @@ -115,6 +115,8 @@ " FROM events\n", " GROUP BY 1,2\n", "\"\"\").cache()\n", + "// .cache(StorageLeve.MEMORY_ONLY) is the default\n", + "// .cache is the same thing as doing .persist(MEMORY_ONLY)\n", "\n", "// eventsAggregated.write.mode(\"overwrite\").saveAsTable(\"bootcamp.events_aggregated_staging\")\n", "\n", @@ -207,4 +209,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/bootcamp/materials/3-spark-fundamentals/notebooks/DatasetApi.ipynb b/bootcamp/materials/3-spark-fundamentals/notebooks/DatasetApi.ipynb index cb33f43f..0a07ae6e 100644 --- a/bootcamp/materials/3-spark-fundamentals/notebooks/DatasetApi.ipynb +++ b/bootcamp/materials/3-spark-fundamentals/notebooks/DatasetApi.ipynb @@ -2,17 +2,37 @@ "cells": [ { "cell_type": "code", - "execution_count": 14, + "execution_count": 1, "id": "22b842be-6a82-4127-b937-ead4103a92e8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "res13: org.apache.spark.sql.SparkSession = org.apache.spark.sql.SparkSession@7f9ff709\n" + "Intitializing Scala interpreter ..." + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "Spark Web UI available at http://88fd5f590760:4041\n", + "SparkContext available as 'sc' (version = 3.5.1, master = local[*], app id = local-1733507352003)\n", + "SparkSession available as 'spark'\n" ] }, - "execution_count": 14, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "res0: org.apache.spark.sql.SparkSession = org.apache.spark.sql.SparkSession@4e16c18c\n" + ] + }, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -23,42 +43,370 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 2, + "id": "3c60bff2-6115-4025-b92e-8789c9d9a074", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "import org.apache.spark.sql._\n", + "import org.apache.spark.sql.functions._\n" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import org.apache.spark.sql._\n", + "import org.apache.spark.sql.functions._" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "630e889b-123f-4c8a-8e23-68b9f9a77f5e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "import org.apache.spark.sql.SparkSession\n", + "sparkSession: org.apache.spark.sql.SparkSession = org.apache.spark.sql.SparkSession@4e16c18c\n", + "import sparkSession.implicits._\n" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import org.apache.spark.sql.SparkSession \n", + "val sparkSession = SparkSession.builder.appName(\"Juptyer\").getOrCreate()\n", + "import sparkSession.implicits._" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "2e024fa5-157a-46f8-855f-0592f7fc24cc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "defined class Event\n", + "defined class Device\n", + "defined class EventWithDeviceInfo\n" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "//TODO Illustrate how this fails if you change from Option[String] to String for referrer\n", + "case class Event (\n", + " //Option is a way to handle NULL more gracefully\n", + " user_id: Option[Integer],\n", + " device_id: Option[Integer],\n", + " referrer: Option[String],\n", + " host: String,\n", + " url: String,\n", + " event_time: String\n", + ")\n", + "case class Device (\n", + " device_id: Integer,\n", + " browser_type: String,\n", + " os_type: String,\n", + " device_type: String\n", + ")\n", + "\n", + "case class EventWithDeviceInfo (\n", + " user_id: Integer,\n", + " device_id: Integer,\n", + " browser_type: String,\n", + " os_type: String,\n", + " device_type: String,\n", + " referrer: String,\n", + " host: String,\n", + " url: String,\n", + " event_time: String\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "95d9f492-3697-4d26-90d2-db1ed9150655", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dummyData: List[Event] = List(Event(Some(1),Some(2),Some(linkedin),eczachly.com,/signup,2023-01-01), Event(Some(3),Some(7),Some(twitter),eczachly.com,/signup,2023-01-01))\n" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "val dummyData = List(\n", + " Event(Some(1), Some(2), Some(\"linkedin\"), \"eczachly.com\", \"/signup\", \"2023-01-01\"),\n", + " Event(Some(3), Some(7), Some(\"twitter\"), \"eczachly.com\", \"/signup\", \"2023-01-01\")\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "0711111d-2d28-4ffe-9b03-914410f125e3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "events: org.apache.spark.sql.Dataset[Event] = [user_id: int, device_id: int ... 4 more fields]\n", + "devices: org.apache.spark.sql.Dataset[Device] = [device_id: int, browser_type: string ... 2 more fields]\n" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "val events: Dataset[Event] = sparkSession.read.option(\"header\", \"true\")\n", + " .option(\"inferSchema\", \"true\")\n", + " .csv(\"/home/iceberg/data/events.csv\")\n", + " .as[Event]\n", + "\n", + "val devices: Dataset[Device] = sparkSession.read.option(\"header\", \"true\")\n", + " .option(\"inferSchema\", \"true\")\n", + " .csv(\"/home/iceberg/data/devices.csv\")\n", + " .as[Device]\n", + "\n", + "devices.createOrReplaceTempView(\"devices\")\n", + "events.createOrReplaceTempView(\"events\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "fe9b5e31-5157-4d20-ae68-66ed051a157f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "filteredViaDataset: org.apache.spark.sql.Dataset[Event] = [user_id: int, device_id: int ... 4 more fields]\n", + "filteredViaDataFrame: org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] = [user_id: int, device_id: int ... 4 more fields]\n", + "filteredViaSparkSql: org.apache.spark.sql.DataFrame = [user_id: int, device_id: int ... 4 more fields]\n" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "val filteredViaDataset = events.filter(event => event.user_id.isDefined && event.device_id.isDefined)\n", + "val filteredViaDataFrame = events.toDF().where($\"user_id\".isNotNull && $\"device_id\".isNotNull)\n", + "val filteredViaSparkSql = sparkSession.sql(\"SELECT * FROM events WHERE user_id IS NOT NULL AND device_id IS NOT NULL\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "4ae85949-690d-4af2-b6db-e5200ebc61b9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "toUpperCase: (s: String)String\n", + "combinedViaDatasets: org.apache.spark.sql.Dataset[EventWithDeviceInfo] = [user_id: int, device_id: int ... 7 more fields]\n" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def toUpperCase(s:String):String = {\n", + " return s.toUpperCase()\n", + "}\n", + "\n", + "// This will fail if user_id is None\n", + "val combinedViaDatasets = filteredViaDataset\n", + " .joinWith(devices, events(\"device_id\") === devices(\"device_id\"), \"inner\")\n", + " .map{ case (event: Event, device: Device) => EventWithDeviceInfo(\n", + " user_id=event.user_id.get,\n", + " device_id=device.device_id,\n", + " browser_type=device.browser_type,\n", + " os_type=device.os_type,\n", + " device_type=device.device_type,\n", + " referrer=event.referrer.getOrElse(\"default_referrer\"),\n", + " host=event.host,\n", + " url=event.url,\n", + " event_time=event.event_time\n", + " ) }\n", + "\n", + " // .map(row => {\n", + " // row.browser_type = toUpperCase(row.browser_type)\n", + " // row\n", + " // })\n", + "\n", + " .map(row => row.copy(browser_type = row.browser_type.toUpperCase))\n", + "\n", + " \n", + "// .map( case (row: EventWithDeviceInfo) => {\n", + "// row.browser_type = toUpperCase(row.browser_type)\n", + "// return row\n", + "//})" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "265fc825-921d-46d9-995d-3ee6002885f3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "res2: Array[EventWithDeviceInfo] = Array(EventWithDeviceInfo(1037710827,532630305,OTHER,Other,Other,default_referrer,www.zachwilson.tech,/,2021-03-08 17:27:24.241), EventWithDeviceInfo(925588856,532630305,OTHER,Other,Other,default_referrer,www.eczachly.com,/,2021-05-10 11:26:21.247), EventWithDeviceInfo(-1180485268,532630305,OTHER,Other,Other,default_referrer,admin.zachwilson.tech,/,2021-02-17 16:19:30.738), EventWithDeviceInfo(-1044833855,532630305,OTHER,Other,Other,default_referrer,www.zachwilson.tech,/,2021-09-24 15:53:14.466), EventWithDeviceInfo(747494706,532630305,OTHER,Other,Other,default_referrer,www.zachwilson.tech,/,2021-09-26 16:03:17.535))\n" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "combinedViaDatasets.take(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "b774804a-01e8-4905-970d-f60e7520fa45", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "toUpperCase: (s: String)String\n", + "toUpperCaseUdf: org.apache.spark.sql.expressions.UserDefinedFunction = SparkUserDefinedFunction($Lambda$5162/0x0000000841b7f840@3d38488f,StringType,List(Some(class[value[0]: string])),Some(class[value[0]: string]),None,true,true)\n", + "combinedViaDataFrames: org.apache.spark.sql.DataFrame = [user_id: int, device_id: int ... 7 more fields]\n" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def toUpperCase(s:String):String = {\n", + " return s.toUpperCase()\n", + "}\n", + "val toUpperCaseUdf = udf(toUpperCase(_))\n", + "\n", + "val combinedViaDataFrames = filteredViaDataFrame.as(\"e\")\n", + " //Make sure to use triple equals when using data frames\n", + " .join(devices.as(\"d\"), $\"e.device_id\" === $\"d.device_id\", \"inner\")\n", + " .select(\n", + " $\"e.user_id\",\n", + " $\"d.device_id\",\n", + " toUpperCaseUdf($\"d.browser_type\").as(\"browser_type\"),\n", + " $\"d.os_type\",\n", + " $\"d.device_type\",\n", + " $\"e.referrer\",\n", + " $\"e.host\",\n", + " $\"e.url\",\n", + " $\"e.event_time\"\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "fb3a0625-1248-4800-81d8-46da6232701a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "res3: Array[org.apache.spark.sql.Row] = Array([1037710827,532630305,OTHER,Other,Other,null,www.zachwilson.tech,/,2021-03-08 17:27:24.241], [925588856,532630305,OTHER,Other,Other,null,www.eczachly.com,/,2021-05-10 11:26:21.247], [-1180485268,532630305,OTHER,Other,Other,null,admin.zachwilson.tech,/,2021-02-17 16:19:30.738], [-1044833855,532630305,OTHER,Other,Other,null,www.zachwilson.tech,/,2021-09-24 15:53:14.466], [747494706,532630305,OTHER,Other,Other,null,www.zachwilson.tech,/,2021-09-26 16:03:17.535])\n" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "combinedViaDataFrames.take(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "ae4a9f80-5a60-4199-8eb4-c9f38ac6ef97", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "combinedViaSparkSQL: org.apache.spark.sql.DataFrame = [user_id: int, device_id: int ... 7 more fields]\n" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "filteredViaSparkSql.createOrReplaceTempView(\"filtered_events\")\n", + "val combinedViaSparkSQL = spark.sql(f\"\"\"\n", + " SELECT \n", + " fe.user_id,\n", + " d.device_id,\n", + " d.browser_type,\n", + " d.os_type,\n", + " d.device_type,\n", + " fe. referrer,\n", + " fe.host,\n", + " fe.url,\n", + " fe.event_time\n", + " FROM filtered_events fe \n", + " JOIN devices d ON fe.device_id = d.device_id\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, "id": "73b5384f-be28-49e3-9bcf-4b9783ba7d91", "metadata": {}, "outputs": [ { - "ename": "org.apache.spark.SparkRuntimeException", - "evalue": " Error while decoding: java.lang.NullPointerException", + "ename": "", + "evalue": "112: error: type mismatch;", "output_type": "error", "traceback": [ - "org.apache.spark.SparkRuntimeException: Error while decoding: java.lang.NullPointerException", - "newInstance(class Event).", - " at org.apache.spark.sql.errors.QueryExecutionErrors$.expressionDecodingError(QueryExecutionErrors.scala:1543)", - " at org.apache.spark.sql.catalyst.encoders.ExpressionEncoder$Deserializer.apply(ExpressionEncoder.scala:178)", - " at org.apache.spark.sql.catalyst.encoders.ExpressionEncoder$Deserializer.apply(ExpressionEncoder.scala:166)", - " at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:286)", - " at scala.collection.IndexedSeqOptimized.foreach(IndexedSeqOptimized.scala:36)", - " at scala.collection.IndexedSeqOptimized.foreach$(IndexedSeqOptimized.scala:33)", - " at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:198)", - " at scala.collection.TraversableLike.map(TraversableLike.scala:286)", - " at scala.collection.TraversableLike.map$(TraversableLike.scala:279)", - " at scala.collection.mutable.ArrayOps$ofRef.map(ArrayOps.scala:198)", - " at org.apache.spark.sql.Dataset.collectFromPlan(Dataset.scala:4177)", - " at org.apache.spark.sql.Dataset.$anonfun$head$1(Dataset.scala:3161)", - " at org.apache.spark.sql.Dataset.$anonfun$withAction$2(Dataset.scala:4167)", - " at org.apache.spark.sql.execution.QueryExecution$.withInternalError(QueryExecution.scala:526)", - " at org.apache.spark.sql.Dataset.$anonfun$withAction$1(Dataset.scala:4165)", - " at org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$6(SQLExecution.scala:118)", - " at org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:195)", - " at org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$1(SQLExecution.scala:103)", - " at org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:827)", - " at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:65)", - " at org.apache.spark.sql.Dataset.withAction(Dataset.scala:4165)", - " at org.apache.spark.sql.Dataset.head(Dataset.scala:3161)", - " at org.apache.spark.sql.Dataset.take(Dataset.scala:3382)", - " ... 49 elided", - "Caused by: java.lang.NullPointerException", + ":112: error: type mismatch;", + " found : Option[String]", + " required: String", + " referrer=event.referrer,", + " ^", "" ] } @@ -79,11 +427,16 @@ " event_time: String\n", ")\n", "\n", + "//val dummyData = List(\n", + "// Event(user_id=1, device_id=2, referrer=\"linkedin\", host=\"eczachly.com\", url=\"/signup\", event_time=\"2023-01-01\"),\n", + " // Event(user_id=3, device_id=7, referrer=\"twitter\", host=\"eczachly.com\", url=\"/signup\", event_time=\"2023-01-01\")\n", + " // )\n", + " \n", + "val dummyData = List(\n", + " Event(Some(1), Some(2), Some(\"linkedin\"), \"eczachly.com\", \"/signup\", \"2023-01-01\"),\n", + " Event(Some(3), Some(7), Some(\"twitter\"), \"eczachly.com\", \"/signup\", \"2023-01-01\")\n", + ")\n", "\n", - "dummyData = List(\n", - " Event(user_id=1, device_id=2, referrer=\"linkedin\", host=\"eczachly.com\", url=\"/signup\", event_time=\"2023-01-01\"),\n", - " Event(user_id=3, device_id=7, referrer=\"twitter\", host=\"eczachly.com\", url=\"/signup\", event_time=\"2023-01-01\")\n", - " )\n", "\n", "//TODO Illustrate how this fails if you change from Option[Long] to Long\n", "case class Device (\n", @@ -122,11 +475,15 @@ "devices.createOrReplaceTempView(\"devices\")\n", "events.createOrReplaceTempView(\"events\")\n", "\n", - "// For simple transformations, you can see that these approaches are very similar. Dataset is winning slightly because of the quality enforcement\n", + "// For simple transformations, you can see that these approaches are very similar. Dataset is winning slightly because of the quality\n", + "// enforcement\n", "val filteredViaDataset = events.filter(event => event.user_id.isDefined && event.device_id.isDefined)\n", "val filteredViaDataFrame = events.toDF().where($\"user_id\".isNotNull && $\"device_id\".isNotNull)\n", "val filteredViaSparkSql = sparkSession.sql(\"SELECT * FROM events WHERE user_id IS NOT NULL AND device_id IS NOT NULL\")\n", "\n", + "def toUpperCase(s:String):String = {\n", + " return s.toUpperCase()\n", + "}\n", "\n", "// This will fail if user_id is None\n", "val combinedViaDatasets = filteredViaDataset\n", @@ -142,11 +499,16 @@ " url=event.url,\n", " event_time=event.event_time\n", " ) }\n", - " .map( case (row: EventWithDeviceInfo) => {\n", - " row.browser_type = toUpperCase(row.browser_type)\n", - " return row\n", - " })\n", "\n", + " .map(row => {\n", + " row.browser_type = toUpperCase(row.browser_type)\n", + " row\n", + " })\n", + " \n", + "// .map( case (row: EventWithDeviceInfo) => {\n", + "// row.browser_type = toUpperCase(row.browser_type)\n", + "// return row\n", + "//})\n", "\n", "\n", "\n", @@ -188,42 +550,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "dd4b33aa-98c4-4f8d-8d38-f5674eb4d8ed", "metadata": {}, "outputs": [], "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "203ac70d-b0e5-474b-8c82-b1bae2624d51", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "spylon-kernel", - "language": "scala", - "name": "spylon-kernel" + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" }, "language_info": { - "codemirror_mode": "text/x-scala", - "file_extension": ".scala", - "help_links": [ - { - "text": "MetaKernel Magics", - "url": "https://metakernel.readthedocs.io/en/latest/source/README.html" - } - ], - "mimetype": "text/x-scala", - "name": "scala", - "pygments_lexer": "scala", - "version": "0.4.1" + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" } }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/bootcamp/materials/3-spark-fundamentals/notebooks/bucket-joins-in-iceberg.ipynb b/bootcamp/materials/3-spark-fundamentals/notebooks/bucket-joins-in-iceberg.ipynb index 92d9c5a5..8965c95f 100644 --- a/bootcamp/materials/3-spark-fundamentals/notebooks/bucket-joins-in-iceberg.ipynb +++ b/bootcamp/materials/3-spark-fundamentals/notebooks/bucket-joins-in-iceberg.ipynb @@ -1,145 +1,4238 @@ { "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "e42573e6-c3c5-4f91-9a5d-b1f2349bede9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "import org.apache.spark.sql.functions.{broadcast, split, lit}\n" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import org.apache.spark.sql.functions.{broadcast, split, lit}" + ] + }, { "cell_type": "code", "execution_count": 3, - "id": "22b48d10-7ddc-4d74-ad45-e1b033849cc0", + "id": "08500443-56f5-4223-9e37-e99b8954cab6", "metadata": {}, "outputs": [ { - "ename": "org.apache.spark.sql.catalyst.ExtendedAnalysisException", - "evalue": " [TABLE_OR_VIEW_NOT_FOUND] The table or view `bootcamp`.`match_details_bucketed` cannot be found. Verify the spelling and correctness of the schema and catalog.", - "output_type": "error", - "traceback": [ - "org.apache.spark.sql.catalyst.ExtendedAnalysisException: [TABLE_OR_VIEW_NOT_FOUND] The table or view `bootcamp`.`match_details_bucketed` cannot be found. Verify the spelling and correctness of the schema and catalog.", - "If you did not qualify the name with a schema, verify the current_schema() output, or qualify the name with the correct schema and catalog.", - "To tolerate the error on drop use DROP VIEW IF EXISTS or DROP TABLE IF EXISTS.; line 2 pos 18;", - "'Project [*]", - "+- 'Join Inner, (('mdb.match_id = 'md.match_id) AND ('md.completion_date = cast(2016-01-01 as date)))", - " :- 'SubqueryAlias mdb", - " : +- 'UnresolvedRelation [bootcamp, match_details_bucketed], [], false", - " +- 'SubqueryAlias md", - " +- 'UnresolvedRelation [bootcamp, matches_bucketed], [], false", - "", - " at org.apache.spark.sql.catalyst.analysis.package$AnalysisErrorAt.tableNotFound(package.scala:87)", - " at org.apache.spark.sql.catalyst.analysis.CheckAnalysis.$anonfun$checkAnalysis0$2(CheckAnalysis.scala:202)", - " at org.apache.spark.sql.catalyst.analysis.CheckAnalysis.$anonfun$checkAnalysis0$2$adapted(CheckAnalysis.scala:182)", - " at org.apache.spark.sql.catalyst.trees.TreeNode.foreachUp(TreeNode.scala:244)", - " at org.apache.spark.sql.catalyst.trees.TreeNode.$anonfun$foreachUp$1(TreeNode.scala:243)", - " at org.apache.spark.sql.catalyst.trees.TreeNode.$anonfun$foreachUp$1$adapted(TreeNode.scala:243)", - " at scala.collection.Iterator.foreach(Iterator.scala:943)", - " at scala.collection.Iterator.foreach$(Iterator.scala:943)", - " at scala.collection.AbstractIterator.foreach(Iterator.scala:1431)", - " at scala.collection.IterableLike.foreach(IterableLike.scala:74)", - " at scala.collection.IterableLike.foreach$(IterableLike.scala:73)", - " at scala.collection.AbstractIterable.foreach(Iterable.scala:56)", - " at org.apache.spark.sql.catalyst.trees.TreeNode.foreachUp(TreeNode.scala:243)", - " at org.apache.spark.sql.catalyst.trees.TreeNode.$anonfun$foreachUp$1(TreeNode.scala:243)", - " at org.apache.spark.sql.catalyst.trees.TreeNode.$anonfun$foreachUp$1$adapted(TreeNode.scala:243)", - " at scala.collection.Iterator.foreach(Iterator.scala:943)", - " at scala.collection.Iterator.foreach$(Iterator.scala:943)", - " at scala.collection.AbstractIterator.foreach(Iterator.scala:1431)", - " at scala.collection.IterableLike.foreach(IterableLike.scala:74)", - " at scala.collection.IterableLike.foreach$(IterableLike.scala:73)", - " at scala.collection.AbstractIterable.foreach(Iterable.scala:56)", - " at org.apache.spark.sql.catalyst.trees.TreeNode.foreachUp(TreeNode.scala:243)", - " at org.apache.spark.sql.catalyst.trees.TreeNode.$anonfun$foreachUp$1(TreeNode.scala:243)", - " at org.apache.spark.sql.catalyst.trees.TreeNode.$anonfun$foreachUp$1$adapted(TreeNode.scala:243)", - " at scala.collection.Iterator.foreach(Iterator.scala:943)", - " at scala.collection.Iterator.foreach$(Iterator.scala:943)", - " at scala.collection.AbstractIterator.foreach(Iterator.scala:1431)", - " at scala.collection.IterableLike.foreach(IterableLike.scala:74)", - " at scala.collection.IterableLike.foreach$(IterableLike.scala:73)", - " at scala.collection.AbstractIterable.foreach(Iterable.scala:56)", - " at org.apache.spark.sql.catalyst.trees.TreeNode.foreachUp(TreeNode.scala:243)", - " at org.apache.spark.sql.catalyst.analysis.CheckAnalysis.checkAnalysis0(CheckAnalysis.scala:182)", - " at org.apache.spark.sql.catalyst.analysis.CheckAnalysis.checkAnalysis0$(CheckAnalysis.scala:164)", - " at org.apache.spark.sql.catalyst.analysis.Analyzer.checkAnalysis0(Analyzer.scala:188)", - " at org.apache.spark.sql.catalyst.analysis.CheckAnalysis.checkAnalysis(CheckAnalysis.scala:160)", - " at org.apache.spark.sql.catalyst.analysis.CheckAnalysis.checkAnalysis$(CheckAnalysis.scala:150)", - " at org.apache.spark.sql.catalyst.analysis.Analyzer.checkAnalysis(Analyzer.scala:188)", - " at org.apache.spark.sql.catalyst.analysis.Analyzer.$anonfun$executeAndCheck$1(Analyzer.scala:211)", - " at org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper$.markInAnalyzer(AnalysisHelper.scala:330)", - " at org.apache.spark.sql.catalyst.analysis.Analyzer.executeAndCheck(Analyzer.scala:208)", - " at org.apache.spark.sql.execution.QueryExecution.$anonfun$analyzed$1(QueryExecution.scala:77)", - " at org.apache.spark.sql.catalyst.QueryPlanningTracker.measurePhase(QueryPlanningTracker.scala:138)", - " at org.apache.spark.sql.execution.QueryExecution.$anonfun$executePhase$2(QueryExecution.scala:219)", - " at org.apache.spark.sql.execution.QueryExecution$.withInternalError(QueryExecution.scala:546)", - " at org.apache.spark.sql.execution.QueryExecution.$anonfun$executePhase$1(QueryExecution.scala:219)", - " at org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:900)", - " at org.apache.spark.sql.execution.QueryExecution.executePhase(QueryExecution.scala:218)", - " at org.apache.spark.sql.execution.QueryExecution.analyzed$lzycompute(QueryExecution.scala:77)", - " at org.apache.spark.sql.execution.QueryExecution.analyzed(QueryExecution.scala:74)", - " at org.apache.spark.sql.execution.QueryExecution.assertAnalyzed(QueryExecution.scala:66)", - " at org.apache.spark.sql.Dataset$.$anonfun$ofRows$2(Dataset.scala:99)", - " at org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:900)", - " at org.apache.spark.sql.Dataset$.ofRows(Dataset.scala:97)", - " at org.apache.spark.sql.SparkSession.$anonfun$sql$4(SparkSession.scala:691)", - " at org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:900)", - " at org.apache.spark.sql.SparkSession.sql(SparkSession.scala:682)", - " at org.apache.spark.sql.SparkSession.sql(SparkSession.scala:713)", - " at org.apache.spark.sql.SparkSession.sql(SparkSession.scala:744)", - " ... 38 elided", - "" - ] + "data": { + "text/plain": [ + "import org.apache.spark.sql.SparkSession\n", + "import org.apache.spark.sql.functions.col\n", + "import org.apache.spark.storage.StorageLevel\n" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "\n", - "// In python use: from pyspark.sql.functions import broadcast, split, lit\n", - "import org.apache.spark.sql.functions.{broadcast, split, lit}\n", - "\n", - "\n", - "val matchesBucketed = spark.read.option(\"header\", \"true\")\n", + "import org.apache.spark.sql.SparkSession\n", + "import org.apache.spark.sql.functions.{col}\n", + "import org.apache.spark.storage.StorageLevel" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "9d890753-4167-4ca1-ae86-aa48cae081d0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "spark: org.apache.spark.sql.SparkSession = org.apache.spark.sql.SparkSession@28497b49\n" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "val spark = SparkSession.builder()\n", + " .appName(\"IcebergTableManagement\") \n", + " .config(\"spark.executor.memory\", \"4g\")\n", + " .config(\"spark.driver.memory\", \"4g\")\n", + " .config(\"spark.sql.shuffle.partitions\", \"200\") // Fine for large datasets\n", + " .config(\"spark.sql.files.maxPartitionBytes\", \"134217728\") // Optional: 128 MB is default\n", + " .config(\"spark.sql.autoBroadcastJoinThreshold\", \"-1\") // Optional: Disable broadcast join\n", + " .config(\"spark.dynamicAllocation.enabled\", \"true\") // Helps with resource allocation\n", + " .config(\"spark.dynamicAllocation.minExecutors\", \"1\") // Ensure minimum resources\n", + " .config(\"spark.dynamicAllocation.maxExecutors\", \"50\") // Scalable resource allocation\n", + " .getOrCreate()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "63787652-7f20-4ecc-b5b1-e7011a63d582", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "matchesBucketed: org.apache.spark.sql.DataFrame = [match_id: string, mapid: string ... 8 more fields]\n" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "val matchesBucketed = spark.read.option(\"header\", \"true\") \n", " .option(\"inferSchema\", \"true\")\n", " .csv(\"/home/iceberg/data/matches.csv\")\n", + "// matchesBucketed is of type org.apache.spark.sql.DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "4609f5fa-89ba-41f1-b3cd-6d9244fb3a5c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "bucketedDDL: String =\n", + "\"\n", + "CREATE TABLE IF NOT EXISTS bootcamp.matches_bucketed (\n", + " match_id STRING,\n", + " is_team_game BOOLEAN,\n", + " playlist_id STRING,\n", + " completion_date TIMESTAMP\n", + " )\n", + " USING iceberg\n", + " PARTITIONED BY (completion_date, bucket(16, match_id));\n", + " \"\n", + "res1: org.apache.spark.sql.DataFrame = []\n" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "spark.sql(\"\"\"DROP TABLE IF EXISTS bootcamp.matches_bucketed\"\"\") // bootcamp.matches_bucketed is an iceberg table\n", + "val bucketedDDL = \"\"\"\n", + "CREATE TABLE IF NOT EXISTS bootcamp.matches_bucketed (\n", + " match_id STRING,\n", + " is_team_game BOOLEAN,\n", + " playlist_id STRING,\n", + " completion_date TIMESTAMP\n", + " )\n", + " USING iceberg\n", + " PARTITIONED BY (completion_date, bucket(16, match_id));\n", + " \"\"\"\n", + "spark.sql(bucketedDDL) " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "d2a4e42a-bc9f-4dfa-883c-06a29b407ab5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "distinctDates: Array[org.apache.spark.sql.Row] = Array([2016-03-13 00:00:00.0], [2016-03-11 00:00:00.0], [2016-03-10 00:00:00.0], [2016-01-30 00:00:00.0], [2016-03-27 00:00:00.0], [2016-04-10 00:00:00.0], [2016-01-18 00:00:00.0], [2016-02-01 00:00:00.0], [2015-12-14 00:00:00.0], [2016-02-03 00:00:00.0], [2016-04-30 00:00:00.0], [2016-03-05 00:00:00.0], [2016-04-15 00:00:00.0], [2016-05-21 00:00:00.0], [2015-10-31 00:00:00.0], [2016-01-22 00:00:00.0], [2016-02-09 00:00:00.0], [2016-03-17 00:00:00.0], [2016-04-04 00:00:00.0], [2016-05-08 00:00:00.0], [2016-01-21 00:00:00.0], [2015-10-28 00:00:00.0], [2016-03-30 00:00:00.0], [2016-05-03 00:00:00.0], [2016-02-04 00:00:00.0], [2015-11-25 00:00:00.0], [2016-01-13 00:00:00.0], [2016-04-29 00:00:00.0], [2016-05-18 00:00:00.0], [2016-03-24 00:00...\n" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "// optimizing loading the data \n", + "// Get distinct completion dates\n", + "val distinctDates = matchesBucketed.select(\"completion_date\").distinct().collect()\n", + "// Process data in chunks based on completion_date\n", + "distinctDates.foreach { row =>\n", + " val date = row.getAs[java.sql.Timestamp](\"completion_date\")\n", + " val filteredMatches = matchesBucketed.filter(col(\"completion_date\") === date)\n", + " \n", + " // Repartition and persist the filtered data\n", + " val optimizedMatches = filteredMatches\n", + " .select($\"match_id\", $\"is_team_game\", $\"playlist_id\", $\"completion_date\")\n", + " .repartition(16, $\"match_id\")\n", + " .persist(StorageLevel.MEMORY_AND_DISK)\n", + " \n", + " optimizedMatches.write\n", + " .mode(\"append\")\n", + " .bucketBy(16, \"match_id\")\n", + " .partitionBy(\"completion_date\")\n", + " .saveAsTable(\"bootcamp.matches_bucketed\")\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "40b9d63c-faf1-46bb-ac24-8f6ebbffedc0", + "metadata": {}, + "outputs": [], + "source": [ + "// the following code takes ages:\n", + "// matchesBucketed.select(\n", + "// $\"match_id\", $\"is_team_game\", $\"playlist_id\", $\"completion_date\"\n", + " // )\n", + " // .write.mode(\"append\")\n", + "// .partitionBy(\"completion_date\")\n", + "// .bucketBy(16, \"match_id\").saveAsTable(\"bootcamp.matches_bucketed\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "271d7cc3-e76e-4c81-a7a9-77c1d0a9597c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+------------+--------------------+-------------------+\n", + "| match_id|is_team_game| playlist_id| completion_date|\n", + "+--------------------+------------+--------------------+-------------------+\n", + "|eb119803-e635-499...| true|c98949ae-60a8-43d...|2016-05-29 00:00:00|\n", + "|78a58006-c7fc-4c7...| true|f72e0ef0-7c4a-430...|2016-07-24 00:00:00|\n", + "|4ba179a4-f2ff-4b1...| true|f72e0ef0-7c4a-430...|2016-07-24 00:00:00|\n", + "|9527669f-a292-4f6...| true|c98949ae-60a8-43d...|2016-08-17 00:00:00|\n", + "|5e701faf-1462-48e...| true|f72e0ef0-7c4a-430...|2016-07-24 00:00:00|\n", + "|c8b5b039-4889-4e2...| true|f72e0ef0-7c4a-430...|2016-05-29 00:00:00|\n", + "|2c330fcd-c1dc-405...| true|f72e0ef0-7c4a-430...|2016-07-24 00:00:00|\n", + "|cc671941-8a2d-40e...| true|f72e0ef0-7c4a-430...|2016-07-24 00:00:00|\n", + "|d384060a-ea52-42b...| true|c98949ae-60a8-43d...|2016-05-29 00:00:00|\n", + "|1f1aed8d-9c52-458...| true|f72e0ef0-7c4a-430...|2016-05-29 00:00:00|\n", + "|49ce5b5b-0348-4aa...| true|f72e0ef0-7c4a-430...|2016-05-29 00:00:00|\n", + "|6b40e3aa-97ae-4e7...| true|f72e0ef0-7c4a-430...|2016-07-24 00:00:00|\n", + "|21e433f2-9703-474...| true|f72e0ef0-7c4a-430...|2016-05-29 00:00:00|\n", + "|ce4a0649-9566-42e...| true|f72e0ef0-7c4a-430...|2016-07-24 00:00:00|\n", + "|bb142e25-e6ee-49c...| true|f72e0ef0-7c4a-430...|2016-07-24 00:00:00|\n", + "|a27f6a3a-59c9-403...| true|355dc154-9809-4ed...|2016-05-29 00:00:00|\n", + "|05fb131f-4e4c-407...| true|355dc154-9809-4ed...|2016-05-29 00:00:00|\n", + "|35fdda94-0209-4db...| true|c98949ae-60a8-43d...|2016-05-29 00:00:00|\n", + "|8075fb97-0cb2-48d...| true|2323b76a-db98-4e0...|2016-07-24 00:00:00|\n", + "|3edda678-a09f-43c...| true|f72e0ef0-7c4a-430...|2016-05-29 00:00:00|\n", + "+--------------------+------------+--------------------+-------------------+\n", + "only showing top 20 rows\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "result: org.apache.spark.sql.DataFrame = [match_id: string, is_team_game: boolean ... 2 more fields]\n" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "// Verify the data in the table\n", + "val result = spark.sql(\"SELECT * FROM bootcamp.matches_bucketed\")\n", + "result.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "ce396eba-1b40-4931-9eb2-5138def46af8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "distinctDatesCount: Long = 269\n" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "// To know the number of distinct dates:\n", + "val distinctDatesCount = matchesBucketed.select(\"completion_date\").distinct().count()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "05d37eaf-c829-4a30-b3e9-335a56cbe794", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------+\n", + "|count(1)|\n", + "+--------+\n", + "| 3665|\n", + "+--------+\n", + "\n" + ] + } + ], + "source": [ + "spark.sql(\"select count(1) from bootcamp.matches_bucketed.partitions\").show()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "38c4a795-30dc-4a4f-985e-29c1ab8ea6be", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "partition, spec_id, record_count, file_count, total_data_file_size_in_bytes, position_delete_record_count, position_delete_file_count, equality_delete_record_count, equality_delete_file_count, last_updated_at, last_updated_snapshot_id\n", + "[2016-01-13 00:00:00.0,6], 0, 11, 1, 1930, 0, 0, 0, 0, 2024-12-09 12:44:11.326, 1307418336203784632\n", + "[2016-01-13 00:00:00.0,7], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:44:11.326, 1307418336203784632\n", + "[2016-01-13 00:00:00.0,8], 0, 9, 1, 1860, 0, 0, 0, 0, 2024-12-09 12:44:11.326, 1307418336203784632\n", + "[2016-01-13 00:00:00.0,9], 0, 7, 1, 1844, 0, 0, 0, 0, 2024-12-09 12:44:11.326, 1307418336203784632\n", + "[2016-09-09 00:00:00.0,3], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:46.507, 8849439159814292096\n", + "[2016-01-13 00:00:00.0,2], 0, 10, 1, 1930, 0, 0, 0, 0, 2024-12-09 12:44:11.326, 1307418336203784632\n", + "[2016-01-13 00:00:00.0,3], 0, 10, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:44:11.326, 1307418336203784632\n", + "[2016-01-13 00:00:00.0,4], 0, 5, 1, 1751, 0, 0, 0, 0, 2024-12-09 12:44:11.326, 1307418336203784632\n", + "[2016-01-13 00:00:00.0,5], 0, 10, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:44:11.326, 1307418336203784632\n", + "[2016-01-13 00:00:00.0,14], 0, 5, 1, 1754, 0, 0, 0, 0, 2024-12-09 12:44:11.326, 1307418336203784632\n", + "[2016-01-13 00:00:00.0,15], 0, 14, 1, 2010, 0, 0, 0, 0, 2024-12-09 12:44:11.326, 1307418336203784632\n", + "[2016-01-13 00:00:00.0,10], 0, 7, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:44:11.326, 1307418336203784632\n", + "[2016-01-13 00:00:00.0,11], 0, 4, 1, 1711, 0, 0, 0, 0, 2024-12-09 12:44:11.326, 1307418336203784632\n", + "[2016-01-13 00:00:00.0,12], 0, 11, 1, 1930, 0, 0, 0, 0, 2024-12-09 12:44:11.326, 1307418336203784632\n", + "[2016-01-13 00:00:00.0,13], 0, 13, 1, 1990, 0, 0, 0, 0, 2024-12-09 12:44:11.326, 1307418336203784632\n", + "[2016-02-12 00:00:00.0,9], 0, 8, 1, 1838, 0, 0, 0, 0, 2024-12-09 12:45:43.902, 1590713293886228452\n", + "[2016-02-12 00:00:00.0,8], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:45:43.902, 1590713293886228452\n", + "[2016-02-12 00:00:00.0,7], 0, 7, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:45:43.902, 1590713293886228452\n", + "[2016-02-12 00:00:00.0,6], 0, 6, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:45:43.902, 1590713293886228452\n", + "[2016-02-12 00:00:00.0,13], 0, 10, 1, 1909, 0, 0, 0, 0, 2024-12-09 12:45:43.902, 1590713293886228452\n", + "[2016-02-12 00:00:00.0,12], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:45:43.902, 1590713293886228452\n", + "[2016-02-12 00:00:00.0,11], 0, 9, 1, 1889, 0, 0, 0, 0, 2024-12-09 12:45:43.902, 1590713293886228452\n", + "[2016-02-12 00:00:00.0,10], 0, 9, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:45:43.902, 1590713293886228452\n", + "[2016-02-12 00:00:00.0,15], 0, 8, 1, 1857, 0, 0, 0, 0, 2024-12-09 12:45:43.902, 1590713293886228452\n", + "[2016-02-12 00:00:00.0,14], 0, 8, 1, 1838, 0, 0, 0, 0, 2024-12-09 12:45:43.902, 1590713293886228452\n", + "[2016-02-12 00:00:00.0,1], 0, 3, 1, 1665, 0, 0, 0, 0, 2024-12-09 12:45:43.902, 1590713293886228452\n", + "[2016-02-12 00:00:00.0,0], 0, 8, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:45:43.902, 1590713293886228452\n", + "[2016-02-12 00:00:00.0,5], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:45:43.902, 1590713293886228452\n", + "[2016-02-12 00:00:00.0,4], 0, 7, 1, 1777, 0, 0, 0, 0, 2024-12-09 12:45:43.902, 1590713293886228452\n", + "[2016-02-12 00:00:00.0,3], 0, 8, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:45:43.902, 1590713293886228452\n", + "[2016-02-12 00:00:00.0,2], 0, 3, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:45:43.902, 1590713293886228452\n", + "[2016-09-09 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:46.507, 8849439159814292096\n", + "[2016-01-13 00:00:00.0,0], 0, 11, 1, 1949, 0, 0, 0, 0, 2024-12-09 12:44:11.326, 1307418336203784632\n", + "[2016-01-13 00:00:00.0,1], 0, 10, 1, 1885, 0, 0, 0, 0, 2024-12-09 12:44:11.326, 1307418336203784632\n", + "[2016-06-11 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:48.809, 8801038936430459597\n", + "[2016-06-11 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:48.809, 8801038936430459597\n", + "[2016-06-11 00:00:00.0,0], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:48.809, 8801038936430459597\n", + "[2016-06-11 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:48.809, 8801038936430459597\n", + "[2015-11-14 00:00:00.0,0], 0, 8, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:44:28.047, 6748823044736155421\n", + "[2015-11-14 00:00:00.0,6], 0, 8, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:44:28.047, 6748823044736155421\n", + "[2015-11-14 00:00:00.0,5], 0, 7, 1, 1800, 0, 0, 0, 0, 2024-12-09 12:44:28.047, 6748823044736155421\n", + "[2015-11-14 00:00:00.0,8], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:44:28.047, 6748823044736155421\n", + "[2015-11-14 00:00:00.0,7], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:44:28.047, 6748823044736155421\n", + "[2015-11-14 00:00:00.0,2], 0, 5, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:44:28.047, 6748823044736155421\n", + "[2015-11-14 00:00:00.0,1], 0, 11, 1, 1882, 0, 0, 0, 0, 2024-12-09 12:44:28.047, 6748823044736155421\n", + "[2015-11-14 00:00:00.0,4], 0, 2, 1, 1710, 0, 0, 0, 0, 2024-12-09 12:44:28.047, 6748823044736155421\n", + "[2015-11-14 00:00:00.0,3], 0, 8, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:44:28.047, 6748823044736155421\n", + "[2015-11-14 00:00:00.0,14], 0, 11, 1, 1928, 0, 0, 0, 0, 2024-12-09 12:44:28.047, 6748823044736155421\n", + "[2015-11-14 00:00:00.0,13], 0, 7, 1, 1828, 0, 0, 0, 0, 2024-12-09 12:44:28.047, 6748823044736155421\n", + "[2015-11-14 00:00:00.0,15], 0, 7, 1, 1798, 0, 0, 0, 0, 2024-12-09 12:44:28.047, 6748823044736155421\n", + "[2015-11-14 00:00:00.0,10], 0, 9, 1, 1889, 0, 0, 0, 0, 2024-12-09 12:44:28.047, 6748823044736155421\n", + "[2015-11-14 00:00:00.0,9], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:44:28.047, 6748823044736155421\n", + "[2015-11-14 00:00:00.0,12], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:44:28.047, 6748823044736155421\n", + "[2015-11-14 00:00:00.0,11], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:44:28.047, 6748823044736155421\n", + "[2016-01-28 00:00:00.0,12], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:45:21.998, 6874686833659729620\n", + "[2016-01-28 00:00:00.0,13], 0, 3, 1, 1659, 0, 0, 0, 0, 2024-12-09 12:45:21.998, 6874686833659729620\n", + "[2016-01-28 00:00:00.0,14], 0, 3, 1, 1661, 0, 0, 0, 0, 2024-12-09 12:45:21.998, 6874686833659729620\n", + "[2016-01-28 00:00:00.0,15], 0, 3, 1, 1661, 0, 0, 0, 0, 2024-12-09 12:45:21.998, 6874686833659729620\n", + "[2015-11-29 00:00:00.0,0], 0, 8, 1, 1816, 0, 0, 0, 0, 2024-12-09 12:47:20.661, 3440335225162243964\n", + "[2015-11-29 00:00:00.0,2], 0, 5, 1, 1722, 0, 0, 0, 0, 2024-12-09 12:47:20.661, 3440335225162243964\n", + "[2015-11-29 00:00:00.0,1], 0, 7, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:47:20.661, 3440335225162243964\n", + "[2016-01-28 00:00:00.0,4], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:45:21.998, 6874686833659729620\n", + "[2016-01-28 00:00:00.0,5], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:45:21.998, 6874686833659729620\n", + "[2016-01-28 00:00:00.0,6], 0, 3, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:45:21.998, 6874686833659729620\n", + "[2016-01-28 00:00:00.0,7], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:45:21.998, 6874686833659729620\n", + "[2016-01-28 00:00:00.0,8], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:45:21.998, 6874686833659729620\n", + "[2016-01-28 00:00:00.0,9], 0, 9, 1, 1905, 0, 0, 0, 0, 2024-12-09 12:45:21.998, 6874686833659729620\n", + "[2016-01-28 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:21.998, 6874686833659729620\n", + "[2016-01-28 00:00:00.0,11], 0, 9, 1, 1909, 0, 0, 0, 0, 2024-12-09 12:45:21.998, 6874686833659729620\n", + "[2015-11-29 00:00:00.0,12], 0, 12, 1, 1925, 0, 0, 0, 0, 2024-12-09 12:47:20.661, 3440335225162243964\n", + "[2015-11-29 00:00:00.0,11], 0, 6, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:47:20.661, 3440335225162243964\n", + "[2015-11-29 00:00:00.0,14], 0, 6, 1, 1788, 0, 0, 0, 0, 2024-12-09 12:47:20.661, 3440335225162243964\n", + "[2015-11-29 00:00:00.0,13], 0, 3, 1, 1666, 0, 0, 0, 0, 2024-12-09 12:47:20.661, 3440335225162243964\n", + "[2015-11-29 00:00:00.0,15], 0, 5, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:47:20.661, 3440335225162243964\n", + "[2015-11-29 00:00:00.0,4], 0, 9, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:47:20.661, 3440335225162243964\n", + "[2015-11-29 00:00:00.0,3], 0, 5, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:47:20.661, 3440335225162243964\n", + "[2015-11-29 00:00:00.0,6], 0, 12, 1, 1928, 0, 0, 0, 0, 2024-12-09 12:47:20.661, 3440335225162243964\n", + "[2015-11-29 00:00:00.0,5], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:47:20.661, 3440335225162243964\n", + "[2015-11-29 00:00:00.0,8], 0, 7, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:47:20.661, 3440335225162243964\n", + "[2015-11-29 00:00:00.0,7], 0, 8, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:47:20.661, 3440335225162243964\n", + "[2015-11-29 00:00:00.0,10], 0, 9, 1, 1866, 0, 0, 0, 0, 2024-12-09 12:47:20.661, 3440335225162243964\n", + "[2015-11-29 00:00:00.0,9], 0, 10, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:47:20.661, 3440335225162243964\n", + "[2016-05-27 00:00:00.0,2], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:45:44.709, 1040321791402497455\n", + "[2016-05-27 00:00:00.0,3], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:45:44.709, 1040321791402497455\n", + "[2016-05-27 00:00:00.0,4], 0, 4, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:45:44.709, 1040321791402497455\n", + "[2016-05-27 00:00:00.0,5], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:45:44.709, 1040321791402497455\n", + "[2016-05-27 00:00:00.0,0], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:44.709, 1040321791402497455\n", + "[2016-05-27 00:00:00.0,1], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:45:44.709, 1040321791402497455\n", + "[2016-03-13 00:00:00.0,0], 0, 10, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:43:40.293, 8831273921336620145\n", + "[2016-03-13 00:00:00.0,2], 0, 16, 1, 2085, 0, 0, 0, 0, 2024-12-09 12:43:40.293, 8831273921336620145\n", + "[2016-03-13 00:00:00.0,1], 0, 9, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:43:40.293, 8831273921336620145\n", + "[2016-05-27 00:00:00.0,14], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:45:44.709, 1040321791402497455\n", + "[2016-05-27 00:00:00.0,15], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:44.709, 1040321791402497455\n", + "[2016-05-27 00:00:00.0,10], 0, 3, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:45:44.709, 1040321791402497455\n", + "[2016-05-27 00:00:00.0,11], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:45:44.709, 1040321791402497455\n", + "[2016-05-27 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:44.709, 1040321791402497455\n", + "[2016-05-27 00:00:00.0,13], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:45:44.709, 1040321791402497455\n", + "[2016-05-27 00:00:00.0,6], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:45:44.709, 1040321791402497455\n", + "[2016-05-27 00:00:00.0,7], 0, 4, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:45:44.709, 1040321791402497455\n", + "[2016-05-27 00:00:00.0,8], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:45:44.709, 1040321791402497455\n", + "[2016-05-27 00:00:00.0,9], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:45:44.709, 1040321791402497455\n", + "[2016-03-13 00:00:00.0,15], 0, 9, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:43:40.293, 8831273921336620145\n", + "[2016-03-13 00:00:00.0,12], 0, 9, 1, 1909, 0, 0, 0, 0, 2024-12-09 12:43:40.293, 8831273921336620145\n", + "[2016-03-13 00:00:00.0,11], 0, 13, 1, 1973, 0, 0, 0, 0, 2024-12-09 12:43:40.293, 8831273921336620145\n", + "[2016-03-13 00:00:00.0,14], 0, 14, 1, 2008, 0, 0, 0, 0, 2024-12-09 12:43:40.293, 8831273921336620145\n", + "[2016-03-13 00:00:00.0,13], 0, 17, 1, 2031, 0, 0, 0, 0, 2024-12-09 12:43:40.293, 8831273921336620145\n", + "[2016-03-13 00:00:00.0,8], 0, 15, 1, 1984, 0, 0, 0, 0, 2024-12-09 12:43:40.293, 8831273921336620145\n", + "[2016-03-13 00:00:00.0,7], 0, 14, 1, 1941, 0, 0, 0, 0, 2024-12-09 12:43:40.293, 8831273921336620145\n", + "[2016-03-13 00:00:00.0,10], 0, 14, 1, 1947, 0, 0, 0, 0, 2024-12-09 12:43:40.293, 8831273921336620145\n", + "[2016-03-13 00:00:00.0,9], 0, 12, 1, 1927, 0, 0, 0, 0, 2024-12-09 12:43:40.293, 8831273921336620145\n", + "[2016-03-13 00:00:00.0,4], 0, 10, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:43:40.293, 8831273921336620145\n", + "[2016-03-13 00:00:00.0,3], 0, 12, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:43:40.293, 8831273921336620145\n", + "[2016-03-13 00:00:00.0,6], 0, 10, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:43:40.293, 8831273921336620145\n", + "[2016-03-13 00:00:00.0,5], 0, 9, 1, 1866, 0, 0, 0, 0, 2024-12-09 12:43:40.293, 8831273921336620145\n", + "[2016-04-27 00:00:00.0,15], 0, 4, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:45:39.28, 3001781841592926802\n", + "[2016-04-27 00:00:00.0,14], 0, 5, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:45:39.28, 3001781841592926802\n", + "[2016-04-27 00:00:00.0,13], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:45:39.28, 3001781841592926802\n", + "[2016-04-27 00:00:00.0,12], 0, 8, 1, 1814, 0, 0, 0, 0, 2024-12-09 12:45:39.28, 3001781841592926802\n", + "[2016-04-27 00:00:00.0,11], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:45:39.28, 3001781841592926802\n", + "[2016-04-27 00:00:00.0,10], 0, 5, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:45:39.28, 3001781841592926802\n", + "[2016-04-27 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:39.28, 3001781841592926802\n", + "[2016-04-27 00:00:00.0,0], 0, 9, 1, 1910, 0, 0, 0, 0, 2024-12-09 12:45:39.28, 3001781841592926802\n", + "[2016-09-24 00:00:00.0,13], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:48:04.693, 6586998150163465274\n", + "[2016-09-24 00:00:00.0,12], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:48:04.693, 6586998150163465274\n", + "[2016-04-27 00:00:00.0,7], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:39.28, 3001781841592926802\n", + "[2016-04-27 00:00:00.0,6], 0, 4, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:45:39.28, 3001781841592926802\n", + "[2016-09-24 00:00:00.0,14], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:48:04.693, 6586998150163465274\n", + "[2016-04-27 00:00:00.0,5], 0, 6, 1, 1808, 0, 0, 0, 0, 2024-12-09 12:45:39.28, 3001781841592926802\n", + "[2016-04-27 00:00:00.0,4], 0, 5, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:45:39.28, 3001781841592926802\n", + "[2016-04-27 00:00:00.0,3], 0, 6, 1, 1786, 0, 0, 0, 0, 2024-12-09 12:45:39.28, 3001781841592926802\n", + "[2016-09-24 00:00:00.0,11], 0, 2, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:48:04.693, 6586998150163465274\n", + "[2016-04-27 00:00:00.0,2], 0, 7, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:45:39.28, 3001781841592926802\n", + "[2016-04-27 00:00:00.0,1], 0, 6, 1, 1812, 0, 0, 0, 0, 2024-12-09 12:45:39.28, 3001781841592926802\n", + "[2016-05-12 00:00:00.0,0], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:44:34.278, 8063266961703972570\n", + "[2016-05-12 00:00:00.0,1], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:44:34.278, 8063266961703972570\n", + "[2016-05-12 00:00:00.0,2], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:44:34.278, 8063266961703972570\n", + "[2016-05-12 00:00:00.0,3], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:44:34.278, 8063266961703972570\n", + "[2015-11-22 00:00:00.0,2], 0, 11, 1, 1932, 0, 0, 0, 0, 2024-12-09 12:46:57.183, 6262229064683288132\n", + "[2015-11-22 00:00:00.0,3], 0, 13, 1, 1953, 0, 0, 0, 0, 2024-12-09 12:46:57.183, 6262229064683288132\n", + "[2015-11-22 00:00:00.0,0], 0, 8, 1, 1837, 0, 0, 0, 0, 2024-12-09 12:46:57.183, 6262229064683288132\n", + "[2015-11-22 00:00:00.0,1], 0, 17, 1, 2039, 0, 0, 0, 0, 2024-12-09 12:46:57.183, 6262229064683288132\n", + "[2015-11-22 00:00:00.0,6], 0, 7, 1, 1798, 0, 0, 0, 0, 2024-12-09 12:46:57.183, 6262229064683288132\n", + "[2015-11-22 00:00:00.0,7], 0, 10, 1, 1903, 0, 0, 0, 0, 2024-12-09 12:46:57.183, 6262229064683288132\n", + "[2015-11-22 00:00:00.0,4], 0, 8, 1, 1795, 0, 0, 0, 0, 2024-12-09 12:46:57.183, 6262229064683288132\n", + "[2015-11-22 00:00:00.0,5], 0, 11, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:46:57.183, 6262229064683288132\n", + "[2015-11-22 00:00:00.0,10], 0, 11, 1, 1929, 0, 0, 0, 0, 2024-12-09 12:46:57.183, 6262229064683288132\n", + "[2016-03-28 00:00:00.0,2], 0, 10, 1, 1931, 0, 0, 0, 0, 2024-12-09 12:45:16.434, 7868756509620961083\n", + "[2015-11-22 00:00:00.0,11], 0, 12, 1, 1944, 0, 0, 0, 0, 2024-12-09 12:46:57.183, 6262229064683288132\n", + "[2016-03-28 00:00:00.0,1], 0, 4, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:45:16.434, 7868756509620961083\n", + "[2015-11-22 00:00:00.0,8], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:46:57.183, 6262229064683288132\n", + "[2016-03-28 00:00:00.0,4], 0, 5, 1, 1765, 0, 0, 0, 0, 2024-12-09 12:45:16.434, 7868756509620961083\n", + "[2015-11-22 00:00:00.0,9], 0, 15, 1, 2008, 0, 0, 0, 0, 2024-12-09 12:46:57.183, 6262229064683288132\n", + "[2016-03-28 00:00:00.0,3], 0, 8, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:45:16.434, 7868756509620961083\n", + "[2015-11-22 00:00:00.0,14], 0, 14, 1, 1994, 0, 0, 0, 0, 2024-12-09 12:46:57.183, 6262229064683288132\n", + "[2015-11-22 00:00:00.0,15], 0, 9, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:46:57.183, 6262229064683288132\n", + "[2015-11-22 00:00:00.0,12], 0, 15, 1, 2013, 0, 0, 0, 0, 2024-12-09 12:46:57.183, 6262229064683288132\n", + "[2016-03-28 00:00:00.0,0], 0, 4, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:45:16.434, 7868756509620961083\n", + "[2015-11-22 00:00:00.0,13], 0, 15, 1, 2034, 0, 0, 0, 0, 2024-12-09 12:46:57.183, 6262229064683288132\n", + "[2016-03-28 00:00:00.0,14], 0, 12, 1, 1950, 0, 0, 0, 0, 2024-12-09 12:45:16.434, 7868756509620961083\n", + "[2016-03-28 00:00:00.0,13], 0, 10, 1, 1929, 0, 0, 0, 0, 2024-12-09 12:45:16.434, 7868756509620961083\n", + "[2016-03-28 00:00:00.0,15], 0, 13, 1, 2021, 0, 0, 0, 0, 2024-12-09 12:45:16.434, 7868756509620961083\n", + "[2016-03-28 00:00:00.0,10], 0, 7, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:45:16.434, 7868756509620961083\n", + "[2016-03-28 00:00:00.0,9], 0, 5, 1, 1722, 0, 0, 0, 0, 2024-12-09 12:45:16.434, 7868756509620961083\n", + "[2016-03-28 00:00:00.0,12], 0, 8, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:45:16.434, 7868756509620961083\n", + "[2016-03-28 00:00:00.0,11], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:45:16.434, 7868756509620961083\n", + "[2016-03-28 00:00:00.0,6], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:45:16.434, 7868756509620961083\n", + "[2016-03-28 00:00:00.0,5], 0, 12, 1, 1971, 0, 0, 0, 0, 2024-12-09 12:45:16.434, 7868756509620961083\n", + "[2016-03-28 00:00:00.0,8], 0, 8, 1, 1837, 0, 0, 0, 0, 2024-12-09 12:45:16.434, 7868756509620961083\n", + "[2016-03-28 00:00:00.0,7], 0, 9, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:45:16.434, 7868756509620961083\n", + "[2016-02-20 00:00:00.0,14], 0, 10, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:46:17.211, 705227442567256803\n", + "[2016-02-20 00:00:00.0,13], 0, 17, 1, 2050, 0, 0, 0, 0, 2024-12-09 12:46:17.211, 705227442567256803\n", + "[2016-02-20 00:00:00.0,15], 0, 14, 1, 2013, 0, 0, 0, 0, 2024-12-09 12:46:17.211, 705227442567256803\n", + "[2016-02-20 00:00:00.0,0], 0, 12, 1, 1998, 0, 0, 0, 0, 2024-12-09 12:46:17.211, 705227442567256803\n", + "[2016-02-20 00:00:00.0,2], 0, 12, 1, 1925, 0, 0, 0, 0, 2024-12-09 12:46:17.211, 705227442567256803\n", + "[2016-02-20 00:00:00.0,1], 0, 9, 1, 1910, 0, 0, 0, 0, 2024-12-09 12:46:17.211, 705227442567256803\n", + "[2016-02-20 00:00:00.0,4], 0, 12, 1, 1949, 0, 0, 0, 0, 2024-12-09 12:46:17.211, 705227442567256803\n", + "[2016-02-20 00:00:00.0,3], 0, 9, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:46:17.211, 705227442567256803\n", + "[2016-02-20 00:00:00.0,6], 0, 8, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:46:17.211, 705227442567256803\n", + "[2016-02-20 00:00:00.0,5], 0, 12, 1, 1949, 0, 0, 0, 0, 2024-12-09 12:46:17.211, 705227442567256803\n", + "[2016-02-20 00:00:00.0,8], 0, 20, 1, 2168, 0, 0, 0, 0, 2024-12-09 12:46:17.211, 705227442567256803\n", + "[2016-02-20 00:00:00.0,7], 0, 13, 1, 1943, 0, 0, 0, 0, 2024-12-09 12:46:17.211, 705227442567256803\n", + "[2016-02-20 00:00:00.0,10], 0, 12, 1, 1944, 0, 0, 0, 0, 2024-12-09 12:46:17.211, 705227442567256803\n", + "[2016-02-20 00:00:00.0,9], 0, 8, 1, 1860, 0, 0, 0, 0, 2024-12-09 12:46:17.211, 705227442567256803\n", + "[2016-02-20 00:00:00.0,12], 0, 10, 1, 1928, 0, 0, 0, 0, 2024-12-09 12:46:17.211, 705227442567256803\n", + "[2016-02-20 00:00:00.0,11], 0, 9, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:46:17.211, 705227442567256803\n", + "[2016-05-12 00:00:00.0,8], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:34.278, 8063266961703972570\n", + "[2016-05-12 00:00:00.0,9], 0, 5, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:44:34.278, 8063266961703972570\n", + "[2016-05-12 00:00:00.0,10], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:44:34.278, 8063266961703972570\n", + "[2016-05-12 00:00:00.0,11], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:34.278, 8063266961703972570\n", + "[2016-05-12 00:00:00.0,4], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:44:34.278, 8063266961703972570\n", + "[2016-05-12 00:00:00.0,5], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:44:34.278, 8063266961703972570\n", + "[2016-05-12 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:34.278, 8063266961703972570\n", + "[2016-05-12 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:34.278, 8063266961703972570\n", + "[2016-05-12 00:00:00.0,13], 0, 3, 1, 1731, 0, 0, 0, 0, 2024-12-09 12:44:34.278, 8063266961703972570\n", + "[2016-05-12 00:00:00.0,14], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:44:34.278, 8063266961703972570\n", + "[2016-05-12 00:00:00.0,15], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:44:34.278, 8063266961703972570\n", + "[2016-03-20 00:00:00.0,14], 0, 7, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:46:27.399, 8281643825475977595\n", + "[2016-03-20 00:00:00.0,15], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:46:27.399, 8281643825475977595\n", + "[2016-03-20 00:00:00.0,2], 0, 10, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:46:27.399, 8281643825475977595\n", + "[2016-04-04 00:00:00.0,2], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:44:02.373, 8685258535627889054\n", + "[2016-09-01 00:00:00.0,0], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:47.075, 8113315984709295457\n", + "[2016-03-20 00:00:00.0,3], 0, 7, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:46:27.399, 8281643825475977595\n", + "[2016-04-04 00:00:00.0,3], 0, 9, 1, 1844, 0, 0, 0, 0, 2024-12-09 12:44:02.373, 8685258535627889054\n", + "[2016-03-20 00:00:00.0,4], 0, 7, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:46:27.399, 8281643825475977595\n", + "[2016-04-04 00:00:00.0,0], 0, 10, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:44:02.373, 8685258535627889054\n", + "[2016-03-20 00:00:00.0,5], 0, 12, 1, 1969, 0, 0, 0, 0, 2024-12-09 12:46:27.399, 8281643825475977595\n", + "[2016-04-04 00:00:00.0,1], 0, 8, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:44:02.373, 8685258535627889054\n", + "[2016-04-04 00:00:00.0,6], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:44:02.373, 8685258535627889054\n", + "[2016-04-04 00:00:00.0,7], 0, 10, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:44:02.373, 8685258535627889054\n", + "[2016-03-20 00:00:00.0,0], 0, 12, 1, 1970, 0, 0, 0, 0, 2024-12-09 12:46:27.399, 8281643825475977595\n", + "[2016-04-04 00:00:00.0,4], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:44:02.373, 8685258535627889054\n", + "[2016-03-20 00:00:00.0,1], 0, 4, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:46:27.399, 8281643825475977595\n", + "[2016-04-04 00:00:00.0,5], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:44:02.373, 8685258535627889054\n", + "[2016-09-01 00:00:00.0,7], 0, 2, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:47:47.075, 8113315984709295457\n", + "[2016-03-20 00:00:00.0,10], 0, 10, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:46:27.399, 8281643825475977595\n", + "[2016-04-04 00:00:00.0,10], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:44:02.373, 8685258535627889054\n", + "[2016-03-20 00:00:00.0,11], 0, 10, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:46:27.399, 8281643825475977595\n", + "[2016-04-04 00:00:00.0,11], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:44:02.373, 8685258535627889054\n", + "[2016-03-20 00:00:00.0,12], 0, 10, 1, 1907, 0, 0, 0, 0, 2024-12-09 12:46:27.399, 8281643825475977595\n", + "[2016-04-04 00:00:00.0,8], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:44:02.373, 8685258535627889054\n", + "[2016-03-20 00:00:00.0,13], 0, 9, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:46:27.399, 8281643825475977595\n", + "[2016-04-04 00:00:00.0,9], 0, 5, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:44:02.373, 8685258535627889054\n", + "[2016-03-20 00:00:00.0,6], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:46:27.399, 8281643825475977595\n", + "[2016-04-04 00:00:00.0,14], 0, 5, 1, 1774, 0, 0, 0, 0, 2024-12-09 12:44:02.373, 8685258535627889054\n", + "[2016-09-01 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:47.075, 8113315984709295457\n", + "[2016-03-20 00:00:00.0,7], 0, 7, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:46:27.399, 8281643825475977595\n", + "[2016-04-04 00:00:00.0,15], 0, 3, 1, 1730, 0, 0, 0, 0, 2024-12-09 12:44:02.373, 8685258535627889054\n", + "[2016-03-20 00:00:00.0,8], 0, 9, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:46:27.399, 8281643825475977595\n", + "[2016-04-04 00:00:00.0,12], 0, 9, 1, 1845, 0, 0, 0, 0, 2024-12-09 12:44:02.373, 8685258535627889054\n", + "[2016-09-01 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:47.075, 8113315984709295457\n", + "[2016-03-20 00:00:00.0,9], 0, 12, 1, 1950, 0, 0, 0, 0, 2024-12-09 12:46:27.399, 8281643825475977595\n", + "[2016-04-04 00:00:00.0,13], 0, 9, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:44:02.373, 8685258535627889054\n", + "[2016-06-11 00:00:00.0,10], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:47:48.809, 8801038936430459597\n", + "[2016-09-16 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:52.472, 1131319556635783290\n", + "[2016-09-16 00:00:00.0,5], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:52.472, 1131319556635783290\n", + "[2016-01-05 00:00:00.0,2], 0, 5, 1, 1775, 0, 0, 0, 0, 2024-12-09 12:45:47.349, 2363334721807912324\n", + "[2016-01-05 00:00:00.0,1], 0, 3, 1, 1732, 0, 0, 0, 0, 2024-12-09 12:45:47.349, 2363334721807912324\n", + "[2016-01-05 00:00:00.0,0], 0, 4, 1, 1704, 0, 0, 0, 0, 2024-12-09 12:45:47.349, 2363334721807912324\n", + "[2016-09-16 00:00:00.0,8], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:52.472, 1131319556635783290\n", + "[2016-01-05 00:00:00.0,6], 0, 5, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:45:47.349, 2363334721807912324\n", + "[2016-01-05 00:00:00.0,5], 0, 3, 1, 1733, 0, 0, 0, 0, 2024-12-09 12:45:47.349, 2363334721807912324\n", + "[2016-09-16 00:00:00.0,11], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:47:52.472, 1131319556635783290\n", + "[2016-01-05 00:00:00.0,4], 0, 7, 1, 1776, 0, 0, 0, 0, 2024-12-09 12:45:47.349, 2363334721807912324\n", + "[2016-01-05 00:00:00.0,3], 0, 4, 1, 1754, 0, 0, 0, 0, 2024-12-09 12:45:47.349, 2363334721807912324\n", + "[2016-09-16 00:00:00.0,13], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:52.472, 1131319556635783290\n", + "[2016-01-05 00:00:00.0,10], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:45:47.349, 2363334721807912324\n", + "[2016-01-05 00:00:00.0,9], 0, 5, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:45:47.349, 2363334721807912324\n", + "[2016-01-05 00:00:00.0,8], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:45:47.349, 2363334721807912324\n", + "[2016-01-05 00:00:00.0,7], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:45:47.349, 2363334721807912324\n", + "[2016-01-05 00:00:00.0,14], 0, 6, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:45:47.349, 2363334721807912324\n", + "[2016-01-05 00:00:00.0,13], 0, 6, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:45:47.349, 2363334721807912324\n", + "[2016-01-05 00:00:00.0,12], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:45:47.349, 2363334721807912324\n", + "[2016-01-05 00:00:00.0,11], 0, 9, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:45:47.349, 2363334721807912324\n", + "[2016-01-05 00:00:00.0,15], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:45:47.349, 2363334721807912324\n", + "[2016-08-17 00:00:00.0,0], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:48.2, 7042152964899984974\n", + "[2015-12-07 00:00:00.0,4], 0, 5, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:45:58.791, 5791797748637834724\n", + "[2015-12-22 00:00:00.0,3], 0, 7, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:44:29.132, 8485640146821725152\n", + "[2015-12-07 00:00:00.0,5], 0, 4, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:45:58.791, 5791797748637834724\n", + "[2015-12-22 00:00:00.0,2], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:44:29.132, 8485640146821725152\n", + "[2015-12-07 00:00:00.0,2], 0, 3, 1, 1665, 0, 0, 0, 0, 2024-12-09 12:45:58.791, 5791797748637834724\n", + "[2015-12-22 00:00:00.0,1], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:44:29.132, 8485640146821725152\n", + "[2015-12-07 00:00:00.0,3], 0, 7, 1, 1798, 0, 0, 0, 0, 2024-12-09 12:45:58.791, 5791797748637834724\n", + "[2015-12-22 00:00:00.0,0], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:44:29.132, 8485640146821725152\n", + "[2015-12-07 00:00:00.0,8], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:45:58.791, 5791797748637834724\n", + "[2015-12-07 00:00:00.0,9], 0, 6, 1, 1792, 0, 0, 0, 0, 2024-12-09 12:45:58.791, 5791797748637834724\n", + "[2015-12-07 00:00:00.0,6], 0, 8, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:45:58.791, 5791797748637834724\n", + "[2015-12-07 00:00:00.0,7], 0, 9, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:45:58.791, 5791797748637834724\n", + "[2015-12-22 00:00:00.0,11], 0, 9, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:44:29.132, 8485640146821725152\n", + "[2015-12-22 00:00:00.0,10], 0, 8, 1, 1816, 0, 0, 0, 0, 2024-12-09 12:44:29.132, 8485640146821725152\n", + "[2015-12-22 00:00:00.0,9], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:44:29.132, 8485640146821725152\n", + "[2015-12-22 00:00:00.0,8], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:44:29.132, 8485640146821725152\n", + "[2015-12-07 00:00:00.0,0], 0, 7, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:45:58.791, 5791797748637834724\n", + "[2015-12-22 00:00:00.0,7], 0, 3, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:44:29.132, 8485640146821725152\n", + "[2015-12-07 00:00:00.0,1], 0, 2, 1, 1620, 0, 0, 0, 0, 2024-12-09 12:45:58.791, 5791797748637834724\n", + "[2015-12-22 00:00:00.0,6], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:44:29.132, 8485640146821725152\n", + "[2015-12-22 00:00:00.0,5], 0, 7, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:44:29.132, 8485640146821725152\n", + "[2015-12-22 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:29.132, 8485640146821725152\n", + "[2015-12-22 00:00:00.0,15], 0, 7, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:44:29.132, 8485640146821725152\n", + "[2015-12-22 00:00:00.0,14], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:44:29.132, 8485640146821725152\n", + "[2015-12-22 00:00:00.0,13], 0, 9, 1, 1888, 0, 0, 0, 0, 2024-12-09 12:44:29.132, 8485640146821725152\n", + "[2015-12-22 00:00:00.0,12], 0, 10, 1, 1911, 0, 0, 0, 0, 2024-12-09 12:44:29.132, 8485640146821725152\n", + "[2016-08-17 00:00:00.0,13], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:48.2, 7042152964899984974\n", + "[2016-08-17 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:48.2, 7042152964899984974\n", + "[2016-08-17 00:00:00.0,5], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:48.2, 7042152964899984974\n", + "[2016-08-17 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:48.2, 7042152964899984974\n", + "[2016-03-05 00:00:00.0,12], 0, 9, 1, 1888, 0, 0, 0, 0, 2024-12-09 12:43:54.941, 6957305517767566949\n", + "[2016-03-05 00:00:00.0,13], 0, 4, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:43:54.941, 6957305517767566949\n", + "[2016-03-05 00:00:00.0,14], 0, 6, 1, 1789, 0, 0, 0, 0, 2024-12-09 12:43:54.941, 6957305517767566949\n", + "[2016-03-05 00:00:00.0,15], 0, 5, 1, 1753, 0, 0, 0, 0, 2024-12-09 12:43:54.941, 6957305517767566949\n", + "[2016-03-05 00:00:00.0,0], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:43:54.941, 6957305517767566949\n", + "[2016-03-05 00:00:00.0,1], 0, 8, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:43:54.941, 6957305517767566949\n", + "[2016-03-05 00:00:00.0,2], 0, 7, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:43:54.941, 6957305517767566949\n", + "[2016-03-05 00:00:00.0,3], 0, 5, 1, 1751, 0, 0, 0, 0, 2024-12-09 12:43:54.941, 6957305517767566949\n", + "[2016-03-05 00:00:00.0,4], 0, 9, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:43:54.941, 6957305517767566949\n", + "[2016-03-05 00:00:00.0,5], 0, 9, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:43:54.941, 6957305517767566949\n", + "[2016-03-05 00:00:00.0,6], 0, 10, 1, 1927, 0, 0, 0, 0, 2024-12-09 12:43:54.941, 6957305517767566949\n", + "[2016-03-05 00:00:00.0,7], 0, 3, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:43:54.941, 6957305517767566949\n", + "[2016-03-05 00:00:00.0,8], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:43:54.941, 6957305517767566949\n", + "[2016-03-05 00:00:00.0,9], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:43:54.941, 6957305517767566949\n", + "[2016-03-05 00:00:00.0,10], 0, 3, 1, 1665, 0, 0, 0, 0, 2024-12-09 12:43:54.941, 6957305517767566949\n", + "[2016-03-05 00:00:00.0,11], 0, 7, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:43:54.941, 6957305517767566949\n", + "[2015-12-29 00:00:00.0,15], 0, 11, 1, 1904, 0, 0, 0, 0, 2024-12-09 12:44:50.202, 508858553092308197\n", + "[2015-12-29 00:00:00.0,13], 0, 9, 1, 1909, 0, 0, 0, 0, 2024-12-09 12:44:50.202, 508858553092308197\n", + "[2015-12-29 00:00:00.0,14], 0, 13, 1, 2022, 0, 0, 0, 0, 2024-12-09 12:44:50.202, 508858553092308197\n", + "[2015-12-29 00:00:00.0,11], 0, 12, 1, 1969, 0, 0, 0, 0, 2024-12-09 12:44:50.202, 508858553092308197\n", + "[2015-12-29 00:00:00.0,12], 0, 11, 1, 1952, 0, 0, 0, 0, 2024-12-09 12:44:50.202, 508858553092308197\n", + "[2015-12-29 00:00:00.0,9], 0, 9, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:44:50.202, 508858553092308197\n", + "[2015-12-29 00:00:00.0,10], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:44:50.202, 508858553092308197\n", + "[2015-12-29 00:00:00.0,7], 0, 11, 1, 1946, 0, 0, 0, 0, 2024-12-09 12:44:50.202, 508858553092308197\n", + "[2015-12-29 00:00:00.0,8], 0, 10, 1, 1907, 0, 0, 0, 0, 2024-12-09 12:44:50.202, 508858553092308197\n", + "[2015-12-29 00:00:00.0,5], 0, 11, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:44:50.202, 508858553092308197\n", + "[2015-12-29 00:00:00.0,6], 0, 10, 1, 1860, 0, 0, 0, 0, 2024-12-09 12:44:50.202, 508858553092308197\n", + "[2015-12-29 00:00:00.0,3], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:44:50.202, 508858553092308197\n", + "[2015-12-29 00:00:00.0,4], 0, 13, 1, 1968, 0, 0, 0, 0, 2024-12-09 12:44:50.202, 508858553092308197\n", + "[2015-12-29 00:00:00.0,1], 0, 12, 1, 1924, 0, 0, 0, 0, 2024-12-09 12:44:50.202, 508858553092308197\n", + "[2015-12-29 00:00:00.0,2], 0, 10, 1, 1885, 0, 0, 0, 0, 2024-12-09 12:44:50.202, 508858553092308197\n", + "[2015-12-29 00:00:00.0,0], 0, 11, 1, 1926, 0, 0, 0, 0, 2024-12-09 12:44:50.202, 508858553092308197\n", + "[2016-01-06 00:00:00.0,9], 0, 8, 1, 1833, 0, 0, 0, 0, 2024-12-09 12:44:52.078, 7539300707430600737\n", + "[2016-01-06 00:00:00.0,8], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:44:52.078, 7539300707430600737\n", + "[2016-01-06 00:00:00.0,7], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:44:52.078, 7539300707430600737\n", + "[2016-01-06 00:00:00.0,6], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:44:52.078, 7539300707430600737\n", + "[2016-01-06 00:00:00.0,13], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:44:52.078, 7539300707430600737\n", + "[2016-01-06 00:00:00.0,12], 0, 10, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:44:52.078, 7539300707430600737\n", + "[2016-01-06 00:00:00.0,11], 0, 8, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:44:52.078, 7539300707430600737\n", + "[2016-01-06 00:00:00.0,10], 0, 9, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:44:52.078, 7539300707430600737\n", + "[2016-01-06 00:00:00.0,1], 0, 8, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:44:52.078, 7539300707430600737\n", + "[2016-01-06 00:00:00.0,0], 0, 2, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:44:52.078, 7539300707430600737\n", + "[2016-01-06 00:00:00.0,5], 0, 10, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:44:52.078, 7539300707430600737\n", + "[2016-01-06 00:00:00.0,4], 0, 3, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:44:52.078, 7539300707430600737\n", + "[2016-01-06 00:00:00.0,3], 0, 5, 1, 1776, 0, 0, 0, 0, 2024-12-09 12:44:52.078, 7539300707430600737\n", + "[2016-01-06 00:00:00.0,2], 0, 7, 1, 1777, 0, 0, 0, 0, 2024-12-09 12:44:52.078, 7539300707430600737\n", + "[2016-05-20 00:00:00.0,15], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:20.977, 24379327851026408\n", + "[2015-12-14 00:00:00.0,15], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:43:51.689, 5678478916106239561\n", + "[2016-05-20 00:00:00.0,11], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:20.977, 24379327851026408\n", + "[2016-05-20 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:20.977, 24379327851026408\n", + "[2015-12-14 00:00:00.0,13], 0, 6, 1, 1789, 0, 0, 0, 0, 2024-12-09 12:43:51.689, 5678478916106239561\n", + "[2016-05-20 00:00:00.0,13], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:20.977, 24379327851026408\n", + "[2015-12-14 00:00:00.0,14], 0, 6, 1, 1792, 0, 0, 0, 0, 2024-12-09 12:43:51.689, 5678478916106239561\n", + "[2015-12-14 00:00:00.0,11], 0, 4, 1, 1711, 0, 0, 0, 0, 2024-12-09 12:43:51.689, 5678478916106239561\n", + "[2015-12-14 00:00:00.0,12], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:43:51.689, 5678478916106239561\n", + "[2016-01-06 00:00:00.0,15], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:44:52.078, 7539300707430600737\n", + "[2015-12-14 00:00:00.0,9], 0, 2, 1, 1619, 0, 0, 0, 0, 2024-12-09 12:43:51.689, 5678478916106239561\n", + "[2016-01-06 00:00:00.0,14], 0, 2, 1, 1619, 0, 0, 0, 0, 2024-12-09 12:44:52.078, 7539300707430600737\n", + "[2015-12-14 00:00:00.0,10], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:43:51.689, 5678478916106239561\n", + "[2015-12-14 00:00:00.0,7], 0, 7, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:43:51.689, 5678478916106239561\n", + "[2015-12-14 00:00:00.0,8], 0, 2, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:43:51.689, 5678478916106239561\n", + "[2015-12-14 00:00:00.0,5], 0, 2, 1, 1619, 0, 0, 0, 0, 2024-12-09 12:43:51.689, 5678478916106239561\n", + "[2015-12-14 00:00:00.0,6], 0, 4, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:43:51.689, 5678478916106239561\n", + "[2015-12-14 00:00:00.0,3], 0, 4, 1, 1730, 0, 0, 0, 0, 2024-12-09 12:43:51.689, 5678478916106239561\n", + "[2015-12-14 00:00:00.0,4], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:43:51.689, 5678478916106239561\n", + "[2016-05-20 00:00:00.0,2], 0, 3, 1, 1682, 0, 0, 0, 0, 2024-12-09 12:45:20.977, 24379327851026408\n", + "[2015-12-14 00:00:00.0,1], 0, 10, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:43:51.689, 5678478916106239561\n", + "[2016-05-20 00:00:00.0,1], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:20.977, 24379327851026408\n", + "[2015-12-14 00:00:00.0,2], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:43:51.689, 5678478916106239561\n", + "[2015-12-14 00:00:00.0,0], 0, 3, 1, 1662, 0, 0, 0, 0, 2024-12-09 12:43:51.689, 5678478916106239561\n", + "[2016-05-20 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:20.977, 24379327851026408\n", + "[2016-05-20 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:20.977, 24379327851026408\n", + "[2016-05-20 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:20.977, 24379327851026408\n", + "[2016-05-20 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:20.977, 24379327851026408\n", + "[2016-05-20 00:00:00.0,5], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:20.977, 24379327851026408\n", + "[2015-12-07 00:00:00.0,12], 0, 6, 1, 1771, 0, 0, 0, 0, 2024-12-09 12:45:58.791, 5791797748637834724\n", + "[2015-12-07 00:00:00.0,13], 0, 5, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:45:58.791, 5791797748637834724\n", + "[2015-12-07 00:00:00.0,10], 0, 9, 1, 1867, 0, 0, 0, 0, 2024-12-09 12:45:58.791, 5791797748637834724\n", + "[2015-12-07 00:00:00.0,11], 0, 3, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:45:58.791, 5791797748637834724\n", + "[2015-12-07 00:00:00.0,14], 0, 8, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:45:58.791, 5791797748637834724\n", + "[2015-12-07 00:00:00.0,15], 0, 8, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:45:58.791, 5791797748637834724\n", + "[2016-02-05 00:00:00.0,0], 0, 5, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:47:22.631, 9008884706889619089\n", + "[2016-02-05 00:00:00.0,2], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:47:22.631, 9008884706889619089\n", + "[2016-02-05 00:00:00.0,1], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:47:22.631, 9008884706889619089\n", + "[2016-02-05 00:00:00.0,4], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:47:22.631, 9008884706889619089\n", + "[2016-02-05 00:00:00.0,3], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:22.631, 9008884706889619089\n", + "[2016-02-05 00:00:00.0,6], 0, 3, 1, 1661, 0, 0, 0, 0, 2024-12-09 12:47:22.631, 9008884706889619089\n", + "[2016-02-05 00:00:00.0,5], 0, 4, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:47:22.631, 9008884706889619089\n", + "[2016-02-05 00:00:00.0,8], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:47:22.631, 9008884706889619089\n", + "[2016-02-05 00:00:00.0,7], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:22.631, 9008884706889619089\n", + "[2016-02-05 00:00:00.0,10], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:47:22.631, 9008884706889619089\n", + "[2016-02-05 00:00:00.0,9], 0, 5, 1, 1749, 0, 0, 0, 0, 2024-12-09 12:47:22.631, 9008884706889619089\n", + "[2016-02-05 00:00:00.0,12], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:47:22.631, 9008884706889619089\n", + "[2016-02-05 00:00:00.0,11], 0, 3, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:47:22.631, 9008884706889619089\n", + "[2016-02-05 00:00:00.0,14], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:47:22.631, 9008884706889619089\n", + "[2016-02-05 00:00:00.0,13], 0, 3, 1, 1682, 0, 0, 0, 0, 2024-12-09 12:47:22.631, 9008884706889619089\n", + "[2016-02-05 00:00:00.0,15], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:47:22.631, 9008884706889619089\n", + "[2016-05-26 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:10.548, 3485581197280408783\n", + "[2016-05-26 00:00:00.0,15], 0, 2, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:48:10.548, 3485581197280408783\n", + "[2016-05-26 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:10.548, 3485581197280408783\n", + "[2016-05-26 00:00:00.0,13], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:10.548, 3485581197280408783\n", + "[2016-05-26 00:00:00.0,10], 0, 5, 1, 1776, 0, 0, 0, 0, 2024-12-09 12:48:10.548, 3485581197280408783\n", + "[2016-05-26 00:00:00.0,9], 0, 4, 1, 1755, 0, 0, 0, 0, 2024-12-09 12:48:10.548, 3485581197280408783\n", + "[2016-05-26 00:00:00.0,6], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:48:10.548, 3485581197280408783\n", + "[2016-05-26 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:10.548, 3485581197280408783\n", + "[2016-05-26 00:00:00.0,5], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:48:10.548, 3485581197280408783\n", + "[2016-05-26 00:00:00.0,2], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:48:10.548, 3485581197280408783\n", + "[2016-05-26 00:00:00.0,3], 0, 3, 1, 1729, 0, 0, 0, 0, 2024-12-09 12:48:10.548, 3485581197280408783\n", + "[2016-05-26 00:00:00.0,1], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:10.548, 3485581197280408783\n", + "[2016-04-12 00:00:00.0,10], 0, 8, 1, 1836, 0, 0, 0, 0, 2024-12-09 12:46:55.367, 1099113011337544503\n", + "[2016-03-14 00:00:00.0,3], 0, 3, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:44:47.585, 7312476949089176702\n", + "[2016-04-12 00:00:00.0,9], 0, 11, 1, 1928, 0, 0, 0, 0, 2024-12-09 12:46:55.367, 1099113011337544503\n", + "[2016-03-14 00:00:00.0,4], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:44:47.585, 7312476949089176702\n", + "[2016-04-12 00:00:00.0,8], 0, 6, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:46:55.367, 1099113011337544503\n", + "[2016-03-14 00:00:00.0,5], 0, 7, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:44:47.585, 7312476949089176702\n", + "[2016-04-12 00:00:00.0,7], 0, 10, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:46:55.367, 1099113011337544503\n", + "[2016-03-14 00:00:00.0,6], 0, 5, 1, 1722, 0, 0, 0, 0, 2024-12-09 12:44:47.585, 7312476949089176702\n", + "[2016-04-12 00:00:00.0,14], 0, 7, 1, 1801, 0, 0, 0, 0, 2024-12-09 12:46:55.367, 1099113011337544503\n", + "[2016-04-12 00:00:00.0,13], 0, 8, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:46:55.367, 1099113011337544503\n", + "[2016-03-14 00:00:00.0,0], 0, 3, 1, 1733, 0, 0, 0, 0, 2024-12-09 12:44:47.585, 7312476949089176702\n", + "[2016-04-12 00:00:00.0,12], 0, 4, 1, 1704, 0, 0, 0, 0, 2024-12-09 12:46:55.367, 1099113011337544503\n", + "[2016-03-14 00:00:00.0,1], 0, 3, 1, 1665, 0, 0, 0, 0, 2024-12-09 12:44:47.585, 7312476949089176702\n", + "[2016-04-12 00:00:00.0,11], 0, 7, 1, 1776, 0, 0, 0, 0, 2024-12-09 12:46:55.367, 1099113011337544503\n", + "[2016-03-14 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:47.585, 7312476949089176702\n", + "[2016-03-14 00:00:00.0,11], 0, 2, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:44:47.585, 7312476949089176702\n", + "[2016-03-14 00:00:00.0,12], 0, 4, 1, 1712, 0, 0, 0, 0, 2024-12-09 12:44:47.585, 7312476949089176702\n", + "[2016-03-14 00:00:00.0,13], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:47.585, 7312476949089176702\n", + "[2016-04-12 00:00:00.0,15], 0, 7, 1, 1801, 0, 0, 0, 0, 2024-12-09 12:46:55.367, 1099113011337544503\n", + "[2016-03-14 00:00:00.0,14], 0, 6, 1, 1765, 0, 0, 0, 0, 2024-12-09 12:44:47.585, 7312476949089176702\n", + "[2016-03-14 00:00:00.0,7], 0, 4, 1, 1710, 0, 0, 0, 0, 2024-12-09 12:44:47.585, 7312476949089176702\n", + "[2016-03-14 00:00:00.0,8], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:44:47.585, 7312476949089176702\n", + "[2016-03-14 00:00:00.0,9], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:44:47.585, 7312476949089176702\n", + "[2016-03-14 00:00:00.0,10], 0, 6, 1, 1788, 0, 0, 0, 0, 2024-12-09 12:44:47.585, 7312476949089176702\n", + "[2016-03-14 00:00:00.0,15], 0, 6, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:44:47.585, 7312476949089176702\n", + "[2016-04-12 00:00:00.0,2], 0, 11, 1, 1909, 0, 0, 0, 0, 2024-12-09 12:46:55.367, 1099113011337544503\n", + "[2016-04-12 00:00:00.0,1], 0, 10, 1, 1910, 0, 0, 0, 0, 2024-12-09 12:46:55.367, 1099113011337544503\n", + "[2016-04-12 00:00:00.0,0], 0, 7, 1, 1799, 0, 0, 0, 0, 2024-12-09 12:46:55.367, 1099113011337544503\n", + "[2016-04-12 00:00:00.0,6], 0, 11, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:46:55.367, 1099113011337544503\n", + "[2016-04-12 00:00:00.0,5], 0, 7, 1, 1798, 0, 0, 0, 0, 2024-12-09 12:46:55.367, 1099113011337544503\n", + "[2016-04-12 00:00:00.0,4], 0, 6, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:46:55.367, 1099113011337544503\n", + "[2016-04-12 00:00:00.0,3], 0, 11, 1, 1929, 0, 0, 0, 0, 2024-12-09 12:46:55.367, 1099113011337544503\n", + "[2016-01-21 00:00:00.0,0], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:44:04.396, 407905109805852735\n", + "[2016-01-21 00:00:00.0,2], 0, 3, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:44:04.396, 407905109805852735\n", + "[2016-01-21 00:00:00.0,1], 0, 7, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:44:04.396, 407905109805852735\n", + "[2016-01-21 00:00:00.0,4], 0, 7, 1, 1799, 0, 0, 0, 0, 2024-12-09 12:44:04.396, 407905109805852735\n", + "[2016-01-21 00:00:00.0,3], 0, 8, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:44:04.396, 407905109805852735\n", + "[2016-01-21 00:00:00.0,6], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:44:04.396, 407905109805852735\n", + "[2016-01-21 00:00:00.0,5], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:44:04.396, 407905109805852735\n", + "[2016-01-21 00:00:00.0,8], 0, 7, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:44:04.396, 407905109805852735\n", + "[2016-01-21 00:00:00.0,7], 0, 13, 1, 1943, 0, 0, 0, 0, 2024-12-09 12:44:04.396, 407905109805852735\n", + "[2016-07-04 00:00:00.0,0], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:39.875, 3465194044966942129\n", + "[2016-01-21 00:00:00.0,10], 0, 5, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:44:04.396, 407905109805852735\n", + "[2016-01-21 00:00:00.0,9], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:44:04.396, 407905109805852735\n", + "[2016-01-21 00:00:00.0,12], 0, 5, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:44:04.396, 407905109805852735\n", + "[2016-01-21 00:00:00.0,11], 0, 9, 1, 1887, 0, 0, 0, 0, 2024-12-09 12:44:04.396, 407905109805852735\n", + "[2016-01-21 00:00:00.0,14], 0, 4, 1, 1704, 0, 0, 0, 0, 2024-12-09 12:44:04.396, 407905109805852735\n", + "[2016-01-21 00:00:00.0,13], 0, 8, 1, 1836, 0, 0, 0, 0, 2024-12-09 12:44:04.396, 407905109805852735\n", + "[2016-01-21 00:00:00.0,15], 0, 5, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:44:04.396, 407905109805852735\n", + "[2015-10-30 00:00:00.0,10], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:45:02.895, 1652477433892501576\n", + "[2016-07-04 00:00:00.0,15], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:47:39.875, 3465194044966942129\n", + "[2016-07-04 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:39.875, 3465194044966942129\n", + "[2015-10-30 00:00:00.0,1], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:02.895, 1652477433892501576\n", + "[2016-07-04 00:00:00.0,13], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:39.875, 3465194044966942129\n", + "[2016-07-04 00:00:00.0,12], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:47:39.875, 3465194044966942129\n", + "[2016-07-04 00:00:00.0,11], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:39.875, 3465194044966942129\n", + "[2016-07-04 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:39.875, 3465194044966942129\n", + "[2015-10-30 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:02.895, 1652477433892501576\n", + "[2016-06-04 00:00:00.0,14], 0, 5, 1, 1774, 0, 0, 0, 0, 2024-12-09 12:47:56.402, 2485840766627045866\n", + "[2016-07-04 00:00:00.0,8], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:39.875, 3465194044966942129\n", + "[2016-06-04 00:00:00.0,13], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:47:56.402, 2485840766627045866\n", + "[2016-07-04 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:39.875, 3465194044966942129\n", + "[2016-06-04 00:00:00.0,15], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:56.402, 2485840766627045866\n", + "[2016-07-04 00:00:00.0,5], 0, 2, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:47:39.875, 3465194044966942129\n", + "[2016-07-04 00:00:00.0,2], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:47:39.875, 3465194044966942129\n", + "[2016-06-04 00:00:00.0,6], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:47:56.402, 2485840766627045866\n", + "[2016-06-04 00:00:00.0,5], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:47:56.402, 2485840766627045866\n", + "[2016-06-04 00:00:00.0,8], 0, 3, 1, 1731, 0, 0, 0, 0, 2024-12-09 12:47:56.402, 2485840766627045866\n", + "[2016-06-04 00:00:00.0,7], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:47:56.402, 2485840766627045866\n", + "[2016-06-04 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:56.402, 2485840766627045866\n", + "[2016-06-04 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:56.402, 2485840766627045866\n", + "[2016-06-04 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:56.402, 2485840766627045866\n", + "[2016-06-04 00:00:00.0,11], 0, 3, 1, 1730, 0, 0, 0, 0, 2024-12-09 12:47:56.402, 2485840766627045866\n", + "[2016-06-04 00:00:00.0,0], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:47:56.402, 2485840766627045866\n", + "[2016-06-04 00:00:00.0,2], 0, 4, 1, 1755, 0, 0, 0, 0, 2024-12-09 12:47:56.402, 2485840766627045866\n", + "[2016-06-04 00:00:00.0,1], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:56.402, 2485840766627045866\n", + "[2016-06-04 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:56.402, 2485840766627045866\n", + "[2016-06-04 00:00:00.0,3], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:47:56.402, 2485840766627045866\n", + "[2015-10-31 00:00:00.0,1], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:43:58.182, 1345770213480156932\n", + "[2015-10-31 00:00:00.0,15], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:43:58.182, 1345770213480156932\n", + "[2015-10-31 00:00:00.0,14], 0, 3, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:43:58.182, 1345770213480156932\n", + "[2015-10-31 00:00:00.0,11], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:43:58.182, 1345770213480156932\n", + "[2015-10-31 00:00:00.0,10], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:43:58.182, 1345770213480156932\n", + "[2015-10-31 00:00:00.0,13], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:43:58.182, 1345770213480156932\n", + "[2015-10-31 00:00:00.0,12], 0, 6, 1, 1751, 0, 0, 0, 0, 2024-12-09 12:43:58.182, 1345770213480156932\n", + "[2015-10-31 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:43:58.182, 1345770213480156932\n", + "[2015-10-31 00:00:00.0,9], 0, 2, 1, 1693, 0, 0, 0, 0, 2024-12-09 12:43:58.182, 1345770213480156932\n", + "[2015-10-31 00:00:00.0,8], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:43:58.182, 1345770213480156932\n", + "[2015-10-31 00:00:00.0,3], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:43:58.182, 1345770213480156932\n", + "[2015-10-31 00:00:00.0,2], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:43:58.182, 1345770213480156932\n", + "[2015-10-31 00:00:00.0,5], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:43:58.182, 1345770213480156932\n", + "[2015-10-31 00:00:00.0,4], 0, 3, 1, 1665, 0, 0, 0, 0, 2024-12-09 12:43:58.182, 1345770213480156932\n", + "[2016-01-27 00:00:00.0,5], 0, 7, 1, 1798, 0, 0, 0, 0, 2024-12-09 12:46:13.028, 1440235640953786985\n", + "[2016-01-27 00:00:00.0,4], 0, 7, 1, 1844, 0, 0, 0, 0, 2024-12-09 12:46:13.028, 1440235640953786985\n", + "[2016-01-27 00:00:00.0,7], 0, 5, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:46:13.028, 1440235640953786985\n", + "[2016-01-27 00:00:00.0,6], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:46:13.028, 1440235640953786985\n", + "[2016-01-27 00:00:00.0,1], 0, 11, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:46:13.028, 1440235640953786985\n", + "[2016-01-27 00:00:00.0,0], 0, 9, 1, 1889, 0, 0, 0, 0, 2024-12-09 12:46:13.028, 1440235640953786985\n", + "[2016-01-27 00:00:00.0,3], 0, 7, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:46:13.028, 1440235640953786985\n", + "[2016-01-27 00:00:00.0,2], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:46:13.028, 1440235640953786985\n", + "[2015-11-15 00:00:00.0,15], 0, 15, 1, 1986, 0, 0, 0, 0, 2024-12-09 12:45:43.059, 6062152497336804590\n", + "[2015-11-15 00:00:00.0,14], 0, 12, 1, 1951, 0, 0, 0, 0, 2024-12-09 12:45:43.059, 6062152497336804590\n", + "[2015-11-15 00:00:00.0,13], 0, 9, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:45:43.059, 6062152497336804590\n", + "[2015-11-15 00:00:00.0,12], 0, 10, 1, 1881, 0, 0, 0, 0, 2024-12-09 12:45:43.059, 6062152497336804590\n", + "[2015-11-15 00:00:00.0,11], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:45:43.059, 6062152497336804590\n", + "[2015-11-15 00:00:00.0,10], 0, 14, 1, 1967, 0, 0, 0, 0, 2024-12-09 12:45:43.059, 6062152497336804590\n", + "[2015-11-15 00:00:00.0,9], 0, 6, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:45:43.059, 6062152497336804590\n", + "[2015-11-15 00:00:00.0,8], 0, 15, 1, 2035, 0, 0, 0, 0, 2024-12-09 12:45:43.059, 6062152497336804590\n", + "[2015-11-15 00:00:00.0,7], 0, 12, 1, 1968, 0, 0, 0, 0, 2024-12-09 12:45:43.059, 6062152497336804590\n", + "[2015-11-15 00:00:00.0,6], 0, 15, 1, 1987, 0, 0, 0, 0, 2024-12-09 12:45:43.059, 6062152497336804590\n", + "[2015-11-15 00:00:00.0,5], 0, 10, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:45:43.059, 6062152497336804590\n", + "[2016-01-27 00:00:00.0,13], 0, 5, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:46:13.028, 1440235640953786985\n", + "[2015-11-15 00:00:00.0,4], 0, 7, 1, 1796, 0, 0, 0, 0, 2024-12-09 12:45:43.059, 6062152497336804590\n", + "[2016-01-27 00:00:00.0,12], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:46:13.028, 1440235640953786985\n", + "[2015-11-15 00:00:00.0,3], 0, 8, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:45:43.059, 6062152497336804590\n", + "[2016-01-27 00:00:00.0,15], 0, 7, 1, 1845, 0, 0, 0, 0, 2024-12-09 12:46:13.028, 1440235640953786985\n", + "[2015-11-15 00:00:00.0,2], 0, 8, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:45:43.059, 6062152497336804590\n", + "[2016-01-27 00:00:00.0,14], 0, 7, 1, 1800, 0, 0, 0, 0, 2024-12-09 12:46:13.028, 1440235640953786985\n", + "[2015-11-15 00:00:00.0,1], 0, 9, 1, 1905, 0, 0, 0, 0, 2024-12-09 12:45:43.059, 6062152497336804590\n", + "[2016-01-27 00:00:00.0,9], 0, 12, 1, 1923, 0, 0, 0, 0, 2024-12-09 12:46:13.028, 1440235640953786985\n", + "[2015-11-15 00:00:00.0,0], 0, 6, 1, 1765, 0, 0, 0, 0, 2024-12-09 12:45:43.059, 6062152497336804590\n", + "[2016-01-27 00:00:00.0,8], 0, 5, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:46:13.028, 1440235640953786985\n", + "[2016-01-27 00:00:00.0,11], 0, 11, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:46:13.028, 1440235640953786985\n", + "[2016-01-27 00:00:00.0,10], 0, 8, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:46:13.028, 1440235640953786985\n", + "[2016-05-11 00:00:00.0,6], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:46:06.634, 4944213311438698857\n", + "[2016-05-11 00:00:00.0,7], 0, 4, 1, 1704, 0, 0, 0, 0, 2024-12-09 12:46:06.634, 4944213311438698857\n", + "[2016-05-11 00:00:00.0,4], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:46:06.634, 4944213311438698857\n", + "[2016-05-11 00:00:00.0,5], 0, 3, 1, 1662, 0, 0, 0, 0, 2024-12-09 12:46:06.634, 4944213311438698857\n", + "[2016-05-11 00:00:00.0,3], 0, 4, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:46:06.634, 4944213311438698857\n", + "[2016-05-11 00:00:00.0,0], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:06.634, 4944213311438698857\n", + "[2016-05-11 00:00:00.0,1], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:06.634, 4944213311438698857\n", + "[2016-09-10 00:00:00.0,2], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:47:32.483, 3772561702567490231\n", + "[2016-09-10 00:00:00.0,8], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:32.483, 3772561702567490231\n", + "[2016-05-11 00:00:00.0,14], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:46:06.634, 4944213311438698857\n", + "[2016-05-11 00:00:00.0,15], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:46:06.634, 4944213311438698857\n", + "[2016-05-11 00:00:00.0,12], 0, 3, 1, 1730, 0, 0, 0, 0, 2024-12-09 12:46:06.634, 4944213311438698857\n", + "[2016-05-11 00:00:00.0,13], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:46:06.634, 4944213311438698857\n", + "[2016-05-11 00:00:00.0,10], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:46:06.634, 4944213311438698857\n", + "[2016-05-11 00:00:00.0,11], 0, 4, 1, 1728, 0, 0, 0, 0, 2024-12-09 12:46:06.634, 4944213311438698857\n", + "[2016-05-11 00:00:00.0,8], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:46:06.634, 4944213311438698857\n", + "[2016-05-11 00:00:00.0,9], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:46:06.634, 4944213311438698857\n", + "[2016-01-20 00:00:00.0,15], 0, 9, 1, 1869, 0, 0, 0, 0, 2024-12-09 12:46:18.828, 8232725088950640552\n", + "[2016-01-20 00:00:00.0,14], 0, 8, 1, 1793, 0, 0, 0, 0, 2024-12-09 12:46:18.828, 8232725088950640552\n", + "[2016-01-20 00:00:00.0,13], 0, 15, 1, 1988, 0, 0, 0, 0, 2024-12-09 12:46:18.828, 8232725088950640552\n", + "[2016-01-29 00:00:00.0,10], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:46:43.719, 771643624038685205\n", + "[2016-01-29 00:00:00.0,11], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:46:43.719, 771643624038685205\n", + "[2016-01-29 00:00:00.0,8], 0, 5, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:46:43.719, 771643624038685205\n", + "[2016-01-29 00:00:00.0,9], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:46:43.719, 771643624038685205\n", + "[2016-01-29 00:00:00.0,14], 0, 4, 1, 1710, 0, 0, 0, 0, 2024-12-09 12:46:43.719, 771643624038685205\n", + "[2016-01-29 00:00:00.0,15], 0, 2, 1, 1614, 0, 0, 0, 0, 2024-12-09 12:46:43.719, 771643624038685205\n", + "[2016-01-29 00:00:00.0,12], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:46:43.719, 771643624038685205\n", + "[2016-01-29 00:00:00.0,13], 0, 8, 1, 1860, 0, 0, 0, 0, 2024-12-09 12:46:43.719, 771643624038685205\n", + "[2016-01-29 00:00:00.0,2], 0, 7, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:46:43.719, 771643624038685205\n", + "[2016-01-29 00:00:00.0,3], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:46:43.719, 771643624038685205\n", + "[2016-01-29 00:00:00.0,0], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:46:43.719, 771643624038685205\n", + "[2016-01-29 00:00:00.0,1], 0, 4, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:46:43.719, 771643624038685205\n", + "[2016-01-29 00:00:00.0,6], 0, 3, 1, 1660, 0, 0, 0, 0, 2024-12-09 12:46:43.719, 771643624038685205\n", + "[2016-01-29 00:00:00.0,7], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:43.719, 771643624038685205\n", + "[2016-01-29 00:00:00.0,4], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:46:43.719, 771643624038685205\n", + "[2016-01-29 00:00:00.0,5], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:46:43.719, 771643624038685205\n", + "[2016-02-26 00:00:00.0,15], 0, 3, 1, 1665, 0, 0, 0, 0, 2024-12-09 12:44:57.45, 4703911270390992310\n", + "[2016-02-26 00:00:00.0,14], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:44:57.45, 4703911270390992310\n", + "[2016-02-26 00:00:00.0,13], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:44:57.45, 4703911270390992310\n", + "[2016-02-26 00:00:00.0,12], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:44:57.45, 4703911270390992310\n", + "[2016-02-26 00:00:00.0,11], 0, 2, 1, 1614, 0, 0, 0, 0, 2024-12-09 12:44:57.45, 4703911270390992310\n", + "[2016-02-26 00:00:00.0,10], 0, 3, 1, 1729, 0, 0, 0, 0, 2024-12-09 12:44:57.45, 4703911270390992310\n", + "[2016-02-26 00:00:00.0,7], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:44:57.45, 4703911270390992310\n", + "[2016-02-26 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:57.45, 4703911270390992310\n", + "[2016-02-26 00:00:00.0,5], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:44:57.45, 4703911270390992310\n", + "[2015-11-08 00:00:00.0,0], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:47:13.297, 1360838597826098453\n", + "[2015-11-08 00:00:00.0,7], 0, 8, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:47:13.297, 1360838597826098453\n", + "[2015-11-08 00:00:00.0,8], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:47:13.297, 1360838597826098453\n", + "[2015-11-08 00:00:00.0,5], 0, 11, 1, 1909, 0, 0, 0, 0, 2024-12-09 12:47:13.297, 1360838597826098453\n", + "[2015-11-08 00:00:00.0,6], 0, 6, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:47:13.297, 1360838597826098453\n", + "[2015-11-08 00:00:00.0,3], 0, 7, 1, 1823, 0, 0, 0, 0, 2024-12-09 12:47:13.297, 1360838597826098453\n", + "[2015-11-08 00:00:00.0,4], 0, 6, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:47:13.297, 1360838597826098453\n", + "[2015-11-08 00:00:00.0,1], 0, 11, 1, 1901, 0, 0, 0, 0, 2024-12-09 12:47:13.297, 1360838597826098453\n", + "[2015-11-08 00:00:00.0,2], 0, 7, 1, 1823, 0, 0, 0, 0, 2024-12-09 12:47:13.297, 1360838597826098453\n", + "[2015-11-08 00:00:00.0,15], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:47:13.297, 1360838597826098453\n", + "[2016-02-28 00:00:00.0,6], 0, 9, 1, 1885, 0, 0, 0, 0, 2024-12-09 12:46:21.461, 1093525346310739635\n", + "[2016-01-20 00:00:00.0,8], 0, 8, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:46:18.828, 8232725088950640552\n", + "[2016-02-28 00:00:00.0,7], 0, 15, 1, 2064, 0, 0, 0, 0, 2024-12-09 12:46:21.461, 1093525346310739635\n", + "[2016-01-20 00:00:00.0,7], 0, 7, 1, 1796, 0, 0, 0, 0, 2024-12-09 12:46:18.828, 8232725088950640552\n", + "[2015-11-08 00:00:00.0,13], 0, 10, 1, 1888, 0, 0, 0, 0, 2024-12-09 12:47:13.297, 1360838597826098453\n", + "[2016-02-28 00:00:00.0,4], 0, 6, 1, 1813, 0, 0, 0, 0, 2024-12-09 12:46:21.461, 1093525346310739635\n", + "[2016-01-20 00:00:00.0,6], 0, 6, 1, 1771, 0, 0, 0, 0, 2024-12-09 12:46:18.828, 8232725088950640552\n", + "[2015-11-08 00:00:00.0,14], 0, 8, 1, 1836, 0, 0, 0, 0, 2024-12-09 12:47:13.297, 1360838597826098453\n", + "[2016-02-28 00:00:00.0,5], 0, 15, 1, 2033, 0, 0, 0, 0, 2024-12-09 12:46:21.461, 1093525346310739635\n", + "[2016-01-20 00:00:00.0,5], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:46:18.828, 8232725088950640552\n", + "[2015-11-08 00:00:00.0,11], 0, 11, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:47:13.297, 1360838597826098453\n", + "[2016-02-28 00:00:00.0,10], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:46:21.461, 1093525346310739635\n", + "[2016-01-20 00:00:00.0,12], 0, 7, 1, 1799, 0, 0, 0, 0, 2024-12-09 12:46:18.828, 8232725088950640552\n", + "[2015-11-08 00:00:00.0,12], 0, 6, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:47:13.297, 1360838597826098453\n", + "[2016-02-28 00:00:00.0,11], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:46:21.461, 1093525346310739635\n", + "[2016-01-20 00:00:00.0,11], 0, 4, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:46:18.828, 8232725088950640552\n", + "[2015-11-08 00:00:00.0,9], 0, 6, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:47:13.297, 1360838597826098453\n", + "[2016-02-28 00:00:00.0,8], 0, 13, 1, 1989, 0, 0, 0, 0, 2024-12-09 12:46:21.461, 1093525346310739635\n", + "[2016-01-20 00:00:00.0,10], 0, 7, 1, 1846, 0, 0, 0, 0, 2024-12-09 12:46:18.828, 8232725088950640552\n", + "[2015-11-08 00:00:00.0,10], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:47:13.297, 1360838597826098453\n", + "[2016-02-28 00:00:00.0,9], 0, 11, 1, 1924, 0, 0, 0, 0, 2024-12-09 12:46:21.461, 1093525346310739635\n", + "[2016-01-20 00:00:00.0,9], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:46:18.828, 8232725088950640552\n", + "[2016-02-28 00:00:00.0,14], 0, 14, 1, 2044, 0, 0, 0, 0, 2024-12-09 12:46:21.461, 1093525346310739635\n", + "[2016-01-20 00:00:00.0,0], 0, 7, 1, 1800, 0, 0, 0, 0, 2024-12-09 12:46:18.828, 8232725088950640552\n", + "[2016-02-28 00:00:00.0,15], 0, 19, 1, 2149, 0, 0, 0, 0, 2024-12-09 12:46:21.461, 1093525346310739635\n", + "[2016-02-28 00:00:00.0,12], 0, 12, 1, 1998, 0, 0, 0, 0, 2024-12-09 12:46:21.461, 1093525346310739635\n", + "[2016-02-28 00:00:00.0,13], 0, 13, 1, 2017, 0, 0, 0, 0, 2024-12-09 12:46:21.461, 1093525346310739635\n", + "[2016-01-20 00:00:00.0,4], 0, 9, 1, 1844, 0, 0, 0, 0, 2024-12-09 12:46:18.828, 8232725088950640552\n", + "[2016-01-20 00:00:00.0,3], 0, 9, 1, 1844, 0, 0, 0, 0, 2024-12-09 12:46:18.828, 8232725088950640552\n", + "[2016-01-20 00:00:00.0,2], 0, 10, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:46:18.828, 8232725088950640552\n", + "[2016-01-20 00:00:00.0,1], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:46:18.828, 8232725088950640552\n", + "[2016-02-26 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:57.45, 4703911270390992310\n", + "[2016-02-26 00:00:00.0,3], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:44:57.45, 4703911270390992310\n", + "[2016-02-26 00:00:00.0,2], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:44:57.45, 4703911270390992310\n", + "[2016-02-26 00:00:00.0,1], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:44:57.45, 4703911270390992310\n", + "[2016-02-26 00:00:00.0,0], 0, 3, 1, 1662, 0, 0, 0, 0, 2024-12-09 12:44:57.45, 4703911270390992310\n", + "[2016-02-28 00:00:00.0,2], 0, 10, 1, 1925, 0, 0, 0, 0, 2024-12-09 12:46:21.461, 1093525346310739635\n", + "[2016-02-28 00:00:00.0,3], 0, 11, 1, 1955, 0, 0, 0, 0, 2024-12-09 12:46:21.461, 1093525346310739635\n", + "[2016-02-28 00:00:00.0,0], 0, 13, 1, 2019, 0, 0, 0, 0, 2024-12-09 12:46:21.461, 1093525346310739635\n", + "[2016-02-28 00:00:00.0,1], 0, 15, 1, 2061, 0, 0, 0, 0, 2024-12-09 12:46:21.461, 1093525346310739635\n", + "[2016-02-19 00:00:00.0,13], 0, 11, 1, 1949, 0, 0, 0, 0, 2024-12-09 12:46:11.475, 6713463714687144068\n", + "[2016-02-19 00:00:00.0,14], 0, 10, 1, 1881, 0, 0, 0, 0, 2024-12-09 12:46:11.475, 6713463714687144068\n", + "[2016-02-19 00:00:00.0,15], 0, 16, 1, 2058, 0, 0, 0, 0, 2024-12-09 12:46:11.475, 6713463714687144068\n", + "[2016-02-19 00:00:00.0,9], 0, 7, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:46:11.475, 6713463714687144068\n", + "[2016-02-19 00:00:00.0,10], 0, 14, 1, 1988, 0, 0, 0, 0, 2024-12-09 12:46:11.475, 6713463714687144068\n", + "[2016-02-19 00:00:00.0,11], 0, 13, 1, 1943, 0, 0, 0, 0, 2024-12-09 12:46:11.475, 6713463714687144068\n", + "[2016-02-19 00:00:00.0,12], 0, 8, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:46:11.475, 6713463714687144068\n", + "[2016-02-19 00:00:00.0,5], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:46:11.475, 6713463714687144068\n", + "[2016-02-19 00:00:00.0,6], 0, 13, 1, 1972, 0, 0, 0, 0, 2024-12-09 12:46:11.475, 6713463714687144068\n", + "[2016-02-19 00:00:00.0,7], 0, 6, 1, 1813, 0, 0, 0, 0, 2024-12-09 12:46:11.475, 6713463714687144068\n", + "[2016-02-19 00:00:00.0,8], 0, 12, 1, 1999, 0, 0, 0, 0, 2024-12-09 12:46:11.475, 6713463714687144068\n", + "[2016-02-19 00:00:00.0,1], 0, 8, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:46:11.475, 6713463714687144068\n", + "[2016-02-19 00:00:00.0,2], 0, 12, 1, 1881, 0, 0, 0, 0, 2024-12-09 12:46:11.475, 6713463714687144068\n", + "[2016-02-19 00:00:00.0,3], 0, 14, 1, 1966, 0, 0, 0, 0, 2024-12-09 12:46:11.475, 6713463714687144068\n", + "[2016-02-19 00:00:00.0,4], 0, 11, 1, 1953, 0, 0, 0, 0, 2024-12-09 12:46:11.475, 6713463714687144068\n", + "[2016-02-04 00:00:00.0,9], 0, 6, 1, 1787, 0, 0, 0, 0, 2024-12-09 12:44:08.921, 180878013830699517\n", + "[2016-02-04 00:00:00.0,10], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:44:08.921, 180878013830699517\n", + "[2016-02-04 00:00:00.0,7], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:44:08.921, 180878013830699517\n", + "[2016-02-19 00:00:00.0,0], 0, 7, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:46:11.475, 6713463714687144068\n", + "[2016-02-04 00:00:00.0,8], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:44:08.921, 180878013830699517\n", + "[2016-02-04 00:00:00.0,13], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:44:08.921, 180878013830699517\n", + "[2016-02-04 00:00:00.0,14], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:44:08.921, 180878013830699517\n", + "[2016-02-04 00:00:00.0,11], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:44:08.921, 180878013830699517\n", + "[2016-02-04 00:00:00.0,12], 0, 6, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:44:08.921, 180878013830699517\n", + "[2016-02-04 00:00:00.0,1], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:44:08.921, 180878013830699517\n", + "[2016-02-04 00:00:00.0,2], 0, 3, 1, 1731, 0, 0, 0, 0, 2024-12-09 12:44:08.921, 180878013830699517\n", + "[2016-02-04 00:00:00.0,0], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:44:08.921, 180878013830699517\n", + "[2016-02-04 00:00:00.0,5], 0, 6, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:44:08.921, 180878013830699517\n", + "[2016-02-04 00:00:00.0,6], 0, 8, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:44:08.921, 180878013830699517\n", + "[2016-02-04 00:00:00.0,3], 0, 6, 1, 1792, 0, 0, 0, 0, 2024-12-09 12:44:08.921, 180878013830699517\n", + "[2016-02-04 00:00:00.0,4], 0, 4, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:44:08.921, 180878013830699517\n", + "[2016-02-04 00:00:00.0,15], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:44:08.921, 180878013830699517\n", + "[2016-03-12 00:00:00.0,6], 0, 8, 1, 1838, 0, 0, 0, 0, 2024-12-09 12:46:05.686, 7057428660129552193\n", + "[2016-03-12 00:00:00.0,5], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:46:05.686, 7057428660129552193\n", + "[2016-03-12 00:00:00.0,4], 0, 22, 1, 2235, 0, 0, 0, 0, 2024-12-09 12:46:05.686, 7057428660129552193\n", + "[2016-03-12 00:00:00.0,3], 0, 5, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:46:05.686, 7057428660129552193\n", + "[2016-03-12 00:00:00.0,2], 0, 10, 1, 1931, 0, 0, 0, 0, 2024-12-09 12:46:05.686, 7057428660129552193\n", + "[2016-03-12 00:00:00.0,1], 0, 8, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:46:05.686, 7057428660129552193\n", + "[2016-03-12 00:00:00.0,0], 0, 8, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:46:05.686, 7057428660129552193\n", + "[2015-11-30 00:00:00.0,2], 0, 7, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:46:17.986, 1610533755248747680\n", + "[2016-03-12 00:00:00.0,14], 0, 13, 1, 1967, 0, 0, 0, 0, 2024-12-09 12:46:05.686, 7057428660129552193\n", + "[2015-11-30 00:00:00.0,1], 0, 6, 1, 1792, 0, 0, 0, 0, 2024-12-09 12:46:17.986, 1610533755248747680\n", + "[2016-03-12 00:00:00.0,13], 0, 18, 1, 2124, 0, 0, 0, 0, 2024-12-09 12:46:05.686, 7057428660129552193\n", + "[2015-11-30 00:00:00.0,0], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:46:17.986, 1610533755248747680\n", + "[2016-03-12 00:00:00.0,12], 0, 10, 1, 1904, 0, 0, 0, 0, 2024-12-09 12:46:05.686, 7057428660129552193\n", + "[2016-03-12 00:00:00.0,11], 0, 11, 1, 1979, 0, 0, 0, 0, 2024-12-09 12:46:05.686, 7057428660129552193\n", + "[2015-11-30 00:00:00.0,6], 0, 10, 1, 1907, 0, 0, 0, 0, 2024-12-09 12:46:17.986, 1610533755248747680\n", + "[2016-03-12 00:00:00.0,10], 0, 10, 1, 1933, 0, 0, 0, 0, 2024-12-09 12:46:05.686, 7057428660129552193\n", + "[2015-11-30 00:00:00.0,5], 0, 7, 1, 1845, 0, 0, 0, 0, 2024-12-09 12:46:17.986, 1610533755248747680\n", + "[2016-03-12 00:00:00.0,9], 0, 7, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:46:05.686, 7057428660129552193\n", + "[2015-11-30 00:00:00.0,4], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:46:17.986, 1610533755248747680\n", + "[2016-03-12 00:00:00.0,8], 0, 9, 1, 1844, 0, 0, 0, 0, 2024-12-09 12:46:05.686, 7057428660129552193\n", + "[2015-11-30 00:00:00.0,3], 0, 9, 1, 1907, 0, 0, 0, 0, 2024-12-09 12:46:17.986, 1610533755248747680\n", + "[2016-03-12 00:00:00.0,7], 0, 9, 1, 1911, 0, 0, 0, 0, 2024-12-09 12:46:05.686, 7057428660129552193\n", + "[2015-11-30 00:00:00.0,10], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:46:17.986, 1610533755248747680\n", + "[2015-11-30 00:00:00.0,9], 0, 13, 1, 1948, 0, 0, 0, 0, 2024-12-09 12:46:17.986, 1610533755248747680\n", + "[2015-11-30 00:00:00.0,8], 0, 6, 1, 1791, 0, 0, 0, 0, 2024-12-09 12:46:17.986, 1610533755248747680\n", + "[2015-11-30 00:00:00.0,7], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:46:17.986, 1610533755248747680\n", + "[2015-11-30 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:17.986, 1610533755248747680\n", + "[2015-11-30 00:00:00.0,13], 0, 7, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:46:17.986, 1610533755248747680\n", + "[2015-11-30 00:00:00.0,12], 0, 7, 1, 1824, 0, 0, 0, 0, 2024-12-09 12:46:17.986, 1610533755248747680\n", + "[2015-11-30 00:00:00.0,11], 0, 7, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:46:17.986, 1610533755248747680\n", + "[2016-03-12 00:00:00.0,15], 0, 13, 1, 2067, 0, 0, 0, 0, 2024-12-09 12:46:05.686, 7057428660129552193\n", + "[2016-08-31 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:12.626, 1736313652892833329\n", + "[2015-11-30 00:00:00.0,15], 0, 7, 1, 1815, 0, 0, 0, 0, 2024-12-09 12:46:17.986, 1610533755248747680\n", + "[2016-08-31 00:00:00.0,5], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:12.626, 1736313652892833329\n", + "[2016-08-31 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:12.626, 1736313652892833329\n", + "[2016-08-31 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:12.626, 1736313652892833329\n", + "[2015-11-06 00:00:00.0,13], 0, 4, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:44:25.111, 1970805376205974429\n", + "[2015-11-06 00:00:00.0,12], 0, 4, 1, 1728, 0, 0, 0, 0, 2024-12-09 12:44:25.111, 1970805376205974429\n", + "[2015-11-06 00:00:00.0,11], 0, 3, 1, 1732, 0, 0, 0, 0, 2024-12-09 12:44:25.111, 1970805376205974429\n", + "[2015-11-06 00:00:00.0,10], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:44:25.111, 1970805376205974429\n", + "[2015-11-06 00:00:00.0,15], 0, 3, 1, 1666, 0, 0, 0, 0, 2024-12-09 12:44:25.111, 1970805376205974429\n", + "[2015-11-06 00:00:00.0,14], 0, 4, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:44:25.111, 1970805376205974429\n", + "[2015-11-06 00:00:00.0,5], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:44:25.111, 1970805376205974429\n", + "[2015-11-06 00:00:00.0,4], 0, 4, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:44:25.111, 1970805376205974429\n", + "[2015-11-06 00:00:00.0,3], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:44:25.111, 1970805376205974429\n", + "[2015-11-06 00:00:00.0,2], 0, 6, 1, 1791, 0, 0, 0, 0, 2024-12-09 12:44:25.111, 1970805376205974429\n", + "[2015-11-06 00:00:00.0,9], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:44:25.111, 1970805376205974429\n", + "[2015-11-06 00:00:00.0,8], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:44:25.111, 1970805376205974429\n", + "[2015-11-06 00:00:00.0,7], 0, 2, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:44:25.111, 1970805376205974429\n", + "[2015-11-06 00:00:00.0,6], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:44:25.111, 1970805376205974429\n", + "[2015-11-06 00:00:00.0,1], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:44:25.111, 1970805376205974429\n", + "[2015-11-06 00:00:00.0,0], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:44:25.111, 1970805376205974429\n", + "[2016-06-02 00:00:00.0,0], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:46:12.23, 4346036433081552885\n", + "[2016-06-02 00:00:00.0,4], 0, 3, 1, 1731, 0, 0, 0, 0, 2024-12-09 12:46:12.23, 4346036433081552885\n", + "[2016-06-02 00:00:00.0,3], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:46:12.23, 4346036433081552885\n", + "[2016-06-02 00:00:00.0,2], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:46:12.23, 4346036433081552885\n", + "[2016-06-02 00:00:00.0,1], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:46:12.23, 4346036433081552885\n", + "[2015-11-21 00:00:00.0,15], 0, 8, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:45:14.83, 7783823436726522451\n", + "[2015-11-21 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:14.83, 7783823436726522451\n", + "[2015-11-21 00:00:00.0,13], 0, 4, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:45:14.83, 7783823436726522451\n", + "[2016-02-11 00:00:00.0,15], 0, 6, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:45:08.296, 2168234324443019627\n", + "[2015-11-21 00:00:00.0,12], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:45:14.83, 7783823436726522451\n", + "[2016-02-11 00:00:00.0,14], 0, 9, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:45:08.296, 2168234324443019627\n", + "[2016-01-14 00:00:00.0,14], 0, 5, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:46:50.22, 439822054068579338\n", + "[2016-02-11 00:00:00.0,13], 0, 7, 1, 1845, 0, 0, 0, 0, 2024-12-09 12:45:08.296, 2168234324443019627\n", + "[2016-01-14 00:00:00.0,15], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:46:50.22, 439822054068579338\n", + "[2016-02-11 00:00:00.0,12], 0, 11, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:45:08.296, 2168234324443019627\n", + "[2016-02-11 00:00:00.0,11], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:45:08.296, 2168234324443019627\n", + "[2016-02-11 00:00:00.0,10], 0, 8, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:45:08.296, 2168234324443019627\n", + "[2015-11-21 00:00:00.0,7], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:45:14.83, 7783823436726522451\n", + "[2016-02-11 00:00:00.0,9], 0, 5, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:45:08.296, 2168234324443019627\n", + "[2015-11-21 00:00:00.0,6], 0, 4, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:45:14.83, 7783823436726522451\n", + "[2016-02-11 00:00:00.0,8], 0, 6, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:45:08.296, 2168234324443019627\n", + "[2015-11-21 00:00:00.0,5], 0, 3, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:45:14.83, 7783823436726522451\n", + "[2016-02-11 00:00:00.0,7], 0, 9, 1, 1887, 0, 0, 0, 0, 2024-12-09 12:45:08.296, 2168234324443019627\n", + "[2016-02-11 00:00:00.0,6], 0, 5, 1, 1752, 0, 0, 0, 0, 2024-12-09 12:45:08.296, 2168234324443019627\n", + "[2015-11-21 00:00:00.0,11], 0, 6, 1, 1791, 0, 0, 0, 0, 2024-12-09 12:45:14.83, 7783823436726522451\n", + "[2016-02-11 00:00:00.0,5], 0, 5, 1, 1721, 0, 0, 0, 0, 2024-12-09 12:45:08.296, 2168234324443019627\n", + "[2015-11-21 00:00:00.0,10], 0, 8, 1, 1838, 0, 0, 0, 0, 2024-12-09 12:45:14.83, 7783823436726522451\n", + "[2016-02-11 00:00:00.0,4], 0, 10, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:45:08.296, 2168234324443019627\n", + "[2015-11-21 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:14.83, 7783823436726522451\n", + "[2016-02-11 00:00:00.0,3], 0, 5, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:45:08.296, 2168234324443019627\n", + "[2015-11-21 00:00:00.0,8], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:45:14.83, 7783823436726522451\n", + "[2016-02-11 00:00:00.0,2], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:08.296, 2168234324443019627\n", + "[2016-02-11 00:00:00.0,1], 0, 5, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:45:08.296, 2168234324443019627\n", + "[2016-02-11 00:00:00.0,0], 0, 7, 1, 1799, 0, 0, 0, 0, 2024-12-09 12:45:08.296, 2168234324443019627\n", + "[2015-11-21 00:00:00.0,3], 0, 6, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:45:14.83, 7783823436726522451\n", + "[2015-11-21 00:00:00.0,2], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:45:14.83, 7783823436726522451\n", + "[2015-11-21 00:00:00.0,1], 0, 2, 1, 1602, 0, 0, 0, 0, 2024-12-09 12:45:14.83, 7783823436726522451\n", + "[2015-11-21 00:00:00.0,0], 0, 3, 1, 1668, 0, 0, 0, 0, 2024-12-09 12:45:14.83, 7783823436726522451\n", + "[2016-04-26 00:00:00.0,4], 0, 7, 1, 1800, 0, 0, 0, 0, 2024-12-09 12:47:09.924, 2805788566248880544\n", + "[2016-04-26 00:00:00.0,5], 0, 12, 1, 1924, 0, 0, 0, 0, 2024-12-09 12:47:09.924, 2805788566248880544\n", + "[2016-04-26 00:00:00.0,2], 0, 6, 1, 1811, 0, 0, 0, 0, 2024-12-09 12:47:09.924, 2805788566248880544\n", + "[2016-04-26 00:00:00.0,3], 0, 11, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:47:09.924, 2805788566248880544\n", + "[2016-04-26 00:00:00.0,0], 0, 8, 1, 1857, 0, 0, 0, 0, 2024-12-09 12:47:09.924, 2805788566248880544\n", + "[2016-04-26 00:00:00.0,1], 0, 13, 1, 1943, 0, 0, 0, 0, 2024-12-09 12:47:09.924, 2805788566248880544\n", + "[2016-01-14 00:00:00.0,10], 0, 8, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:46:50.22, 439822054068579338\n", + "[2016-01-14 00:00:00.0,11], 0, 6, 1, 1788, 0, 0, 0, 0, 2024-12-09 12:46:50.22, 439822054068579338\n", + "[2016-01-14 00:00:00.0,12], 0, 6, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:46:50.22, 439822054068579338\n", + "[2016-01-14 00:00:00.0,13], 0, 11, 1, 1881, 0, 0, 0, 0, 2024-12-09 12:46:50.22, 439822054068579338\n", + "[2016-01-14 00:00:00.0,6], 0, 5, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:46:50.22, 439822054068579338\n", + "[2016-01-14 00:00:00.0,7], 0, 11, 1, 1904, 0, 0, 0, 0, 2024-12-09 12:46:50.22, 439822054068579338\n", + "[2016-04-26 00:00:00.0,14], 0, 8, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:47:09.924, 2805788566248880544\n", + "[2016-01-14 00:00:00.0,8], 0, 4, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:46:50.22, 439822054068579338\n", + "[2016-04-26 00:00:00.0,15], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:47:09.924, 2805788566248880544\n", + "[2016-01-14 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:50.22, 439822054068579338\n", + "[2016-04-26 00:00:00.0,12], 0, 11, 1, 1947, 0, 0, 0, 0, 2024-12-09 12:47:09.924, 2805788566248880544\n", + "[2016-01-14 00:00:00.0,2], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:46:50.22, 439822054068579338\n", + "[2016-04-26 00:00:00.0,13], 0, 8, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:47:09.924, 2805788566248880544\n", + "[2016-01-14 00:00:00.0,3], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:46:50.22, 439822054068579338\n", + "[2016-04-26 00:00:00.0,10], 0, 6, 1, 1813, 0, 0, 0, 0, 2024-12-09 12:47:09.924, 2805788566248880544\n", + "[2016-01-14 00:00:00.0,4], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:46:50.22, 439822054068579338\n", + "[2016-04-26 00:00:00.0,11], 0, 13, 1, 1943, 0, 0, 0, 0, 2024-12-09 12:47:09.924, 2805788566248880544\n", + "[2016-01-14 00:00:00.0,5], 0, 5, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:46:50.22, 439822054068579338\n", + "[2016-04-26 00:00:00.0,8], 0, 7, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:47:09.924, 2805788566248880544\n", + "[2016-04-26 00:00:00.0,9], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:47:09.924, 2805788566248880544\n", + "[2016-04-26 00:00:00.0,6], 0, 8, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:47:09.924, 2805788566248880544\n", + "[2016-01-14 00:00:00.0,0], 0, 14, 1, 2013, 0, 0, 0, 0, 2024-12-09 12:46:50.22, 439822054068579338\n", + "[2016-04-26 00:00:00.0,7], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:47:09.924, 2805788566248880544\n", + "[2016-01-14 00:00:00.0,1], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:46:50.22, 439822054068579338\n", + "[2015-12-21 00:00:00.0,5], 0, 11, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:45:34.305, 8701262626424921481\n", + "[2015-12-21 00:00:00.0,4], 0, 10, 1, 1881, 0, 0, 0, 0, 2024-12-09 12:45:34.305, 8701262626424921481\n", + "[2015-12-21 00:00:00.0,7], 0, 9, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:45:34.305, 8701262626424921481\n", + "[2015-12-21 00:00:00.0,6], 0, 10, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:45:34.305, 8701262626424921481\n", + "[2015-12-21 00:00:00.0,1], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:45:34.305, 8701262626424921481\n", + "[2015-12-21 00:00:00.0,0], 0, 11, 1, 1904, 0, 0, 0, 0, 2024-12-09 12:45:34.305, 8701262626424921481\n", + "[2015-12-21 00:00:00.0,3], 0, 11, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:45:34.305, 8701262626424921481\n", + "[2015-12-21 00:00:00.0,2], 0, 12, 1, 1970, 0, 0, 0, 0, 2024-12-09 12:45:34.305, 8701262626424921481\n", + "[2015-12-21 00:00:00.0,13], 0, 12, 1, 1951, 0, 0, 0, 0, 2024-12-09 12:45:34.305, 8701262626424921481\n", + "[2015-12-21 00:00:00.0,12], 0, 7, 1, 1777, 0, 0, 0, 0, 2024-12-09 12:45:34.305, 8701262626424921481\n", + "[2015-12-21 00:00:00.0,15], 0, 9, 1, 1888, 0, 0, 0, 0, 2024-12-09 12:45:34.305, 8701262626424921481\n", + "[2015-12-21 00:00:00.0,14], 0, 4, 1, 1704, 0, 0, 0, 0, 2024-12-09 12:45:34.305, 8701262626424921481\n", + "[2015-12-21 00:00:00.0,9], 0, 3, 1, 1730, 0, 0, 0, 0, 2024-12-09 12:45:34.305, 8701262626424921481\n", + "[2015-12-21 00:00:00.0,8], 0, 9, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:45:34.305, 8701262626424921481\n", + "[2015-12-21 00:00:00.0,11], 0, 11, 1, 1905, 0, 0, 0, 0, 2024-12-09 12:45:34.305, 8701262626424921481\n", + "[2015-12-21 00:00:00.0,10], 0, 5, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:45:34.305, 8701262626424921481\n", + "[2016-06-02 00:00:00.0,15], 0, 2, 1, 1710, 0, 0, 0, 0, 2024-12-09 12:46:12.23, 4346036433081552885\n", + "[2016-06-02 00:00:00.0,14], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:46:12.23, 4346036433081552885\n", + "[2016-06-02 00:00:00.0,13], 0, 3, 1, 1662, 0, 0, 0, 0, 2024-12-09 12:46:12.23, 4346036433081552885\n", + "[2016-06-02 00:00:00.0,8], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:46:12.23, 4346036433081552885\n", + "[2016-06-02 00:00:00.0,7], 0, 7, 1, 1779, 0, 0, 0, 0, 2024-12-09 12:46:12.23, 4346036433081552885\n", + "[2016-06-02 00:00:00.0,5], 0, 7, 1, 1822, 0, 0, 0, 0, 2024-12-09 12:46:12.23, 4346036433081552885\n", + "[2016-06-02 00:00:00.0,12], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:46:12.23, 4346036433081552885\n", + "[2016-06-02 00:00:00.0,11], 0, 4, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:46:12.23, 4346036433081552885\n", + "[2016-06-02 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:12.23, 4346036433081552885\n", + "[2016-06-02 00:00:00.0,9], 0, 3, 1, 1729, 0, 0, 0, 0, 2024-12-09 12:46:12.23, 4346036433081552885\n", + "[2016-04-20 00:00:00.0,0], 0, 6, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:46:04.842, 8642729434100240438\n", + "[2016-04-20 00:00:00.0,1], 0, 5, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:46:04.842, 8642729434100240438\n", + "[2016-04-20 00:00:00.0,2], 0, 8, 1, 1846, 0, 0, 0, 0, 2024-12-09 12:46:04.842, 8642729434100240438\n", + "[2016-04-20 00:00:00.0,3], 0, 4, 1, 1751, 0, 0, 0, 0, 2024-12-09 12:46:04.842, 8642729434100240438\n", + "[2016-04-20 00:00:00.0,4], 0, 6, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:46:04.842, 8642729434100240438\n", + "[2016-04-20 00:00:00.0,5], 0, 8, 1, 1846, 0, 0, 0, 0, 2024-12-09 12:46:04.842, 8642729434100240438\n", + "[2016-04-20 00:00:00.0,6], 0, 5, 1, 1774, 0, 0, 0, 0, 2024-12-09 12:46:04.842, 8642729434100240438\n", + "[2016-09-25 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:54.889, 3665764531842511060\n", + "[2016-04-20 00:00:00.0,7], 0, 3, 1, 1731, 0, 0, 0, 0, 2024-12-09 12:46:04.842, 8642729434100240438\n", + "[2016-09-25 00:00:00.0,1], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:47:54.889, 3665764531842511060\n", + "[2016-04-20 00:00:00.0,8], 0, 4, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:46:04.842, 8642729434100240438\n", + "[2016-04-20 00:00:00.0,9], 0, 4, 1, 1753, 0, 0, 0, 0, 2024-12-09 12:46:04.842, 8642729434100240438\n", + "[2016-04-20 00:00:00.0,10], 0, 7, 1, 1778, 0, 0, 0, 0, 2024-12-09 12:46:04.842, 8642729434100240438\n", + "[2016-04-20 00:00:00.0,11], 0, 5, 1, 1774, 0, 0, 0, 0, 2024-12-09 12:46:04.842, 8642729434100240438\n", + "[2016-04-20 00:00:00.0,12], 0, 7, 1, 1777, 0, 0, 0, 0, 2024-12-09 12:46:04.842, 8642729434100240438\n", + "[2016-04-20 00:00:00.0,13], 0, 4, 1, 1753, 0, 0, 0, 0, 2024-12-09 12:46:04.842, 8642729434100240438\n", + "[2016-09-25 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:54.889, 3665764531842511060\n", + "[2016-09-25 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:54.889, 3665764531842511060\n", + "[2016-09-25 00:00:00.0,13], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:47:54.889, 3665764531842511060\n", + "[2016-09-25 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:54.889, 3665764531842511060\n", + "[2016-04-20 00:00:00.0,14], 0, 7, 1, 1777, 0, 0, 0, 0, 2024-12-09 12:46:04.842, 8642729434100240438\n", + "[2016-04-20 00:00:00.0,15], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:46:04.842, 8642729434100240438\n", + "[2016-03-27 00:00:00.0,13], 0, 12, 1, 1972, 0, 0, 0, 0, 2024-12-09 12:43:46.36, 8224750783053908590\n", + "[2016-07-17 00:00:00.0,5], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:29.632, 7748760086950461784\n", + "[2016-03-27 00:00:00.0,14], 0, 5, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:43:46.36, 8224750783053908590\n", + "[2016-07-17 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:29.632, 7748760086950461784\n", + "[2016-03-27 00:00:00.0,15], 0, 10, 1, 1885, 0, 0, 0, 0, 2024-12-09 12:43:46.36, 8224750783053908590\n", + "[2016-07-17 00:00:00.0,8], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:29.632, 7748760086950461784\n", + "[2016-03-27 00:00:00.0,9], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:43:46.36, 8224750783053908590\n", + "[2016-03-27 00:00:00.0,10], 0, 21, 1, 2188, 0, 0, 0, 0, 2024-12-09 12:43:46.36, 8224750783053908590\n", + "[2016-07-17 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:29.632, 7748760086950461784\n", + "[2016-03-27 00:00:00.0,11], 0, 12, 1, 1966, 0, 0, 0, 0, 2024-12-09 12:43:46.36, 8224750783053908590\n", + "[2016-03-27 00:00:00.0,12], 0, 16, 1, 2054, 0, 0, 0, 0, 2024-12-09 12:43:46.36, 8224750783053908590\n", + "[2016-07-17 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:29.632, 7748760086950461784\n", + "[2016-07-17 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:29.632, 7748760086950461784\n", + "[2016-07-17 00:00:00.0,15], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:29.632, 7748760086950461784\n", + "[2016-04-05 00:00:00.0,14], 0, 17, 1, 2104, 0, 0, 0, 0, 2024-12-09 12:45:50.794, 4854258090863971735\n", + "[2016-04-05 00:00:00.0,15], 0, 6, 1, 1813, 0, 0, 0, 0, 2024-12-09 12:45:50.794, 4854258090863971735\n", + "[2016-04-05 00:00:00.0,12], 0, 11, 1, 1924, 0, 0, 0, 0, 2024-12-09 12:45:50.794, 4854258090863971735\n", + "[2016-04-05 00:00:00.0,13], 0, 8, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:45:50.794, 4854258090863971735\n", + "[2016-07-17 00:00:00.0,0], 0, 2, 1, 1613, 0, 0, 0, 0, 2024-12-09 12:47:29.632, 7748760086950461784\n", + "[2016-07-17 00:00:00.0,1], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:47:29.632, 7748760086950461784\n", + "[2016-07-17 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:29.632, 7748760086950461784\n", + "[2016-07-17 00:00:00.0,3], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:29.632, 7748760086950461784\n", + "[2016-08-16 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:53.187, 6505462017879646806\n", + "[2016-05-05 00:00:00.0,0], 0, 12, 1, 1927, 0, 0, 0, 0, 2024-12-09 12:46:24.03, 4347092245348612685\n", + "[2016-04-05 00:00:00.0,6], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:45:50.794, 4854258090863971735\n", + "[2016-05-05 00:00:00.0,1], 0, 4, 1, 1755, 0, 0, 0, 0, 2024-12-09 12:46:24.03, 4347092245348612685\n", + "[2016-04-05 00:00:00.0,7], 0, 12, 1, 1905, 0, 0, 0, 0, 2024-12-09 12:45:50.794, 4854258090863971735\n", + "[2016-08-16 00:00:00.0,11], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:53.187, 6505462017879646806\n", + "[2016-05-05 00:00:00.0,2], 0, 8, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:46:24.03, 4347092245348612685\n", + "[2016-04-05 00:00:00.0,4], 0, 13, 1, 1925, 0, 0, 0, 0, 2024-12-09 12:45:50.794, 4854258090863971735\n", + "[2016-08-16 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:53.187, 6505462017879646806\n", + "[2016-05-05 00:00:00.0,3], 0, 12, 1, 1948, 0, 0, 0, 0, 2024-12-09 12:46:24.03, 4347092245348612685\n", + "[2016-04-05 00:00:00.0,5], 0, 13, 1, 1926, 0, 0, 0, 0, 2024-12-09 12:45:50.794, 4854258090863971735\n", + "[2016-05-05 00:00:00.0,4], 0, 5, 1, 1743, 0, 0, 0, 0, 2024-12-09 12:46:24.03, 4347092245348612685\n", + "[2016-04-05 00:00:00.0,10], 0, 15, 1, 1943, 0, 0, 0, 0, 2024-12-09 12:45:50.794, 4854258090863971735\n", + "[2016-08-16 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:53.187, 6505462017879646806\n", + "[2016-05-05 00:00:00.0,5], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:46:24.03, 4347092245348612685\n", + "[2016-04-05 00:00:00.0,11], 0, 12, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:45:50.794, 4854258090863971735\n", + "[2016-05-05 00:00:00.0,6], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:46:24.03, 4347092245348612685\n", + "[2016-04-05 00:00:00.0,8], 0, 10, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:45:50.794, 4854258090863971735\n", + "[2016-05-05 00:00:00.0,7], 0, 5, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:46:24.03, 4347092245348612685\n", + "[2016-04-05 00:00:00.0,9], 0, 11, 1, 1931, 0, 0, 0, 0, 2024-12-09 12:45:50.794, 4854258090863971735\n", + "[2016-05-05 00:00:00.0,8], 0, 7, 1, 1844, 0, 0, 0, 0, 2024-12-09 12:46:24.03, 4347092245348612685\n", + "[2016-05-05 00:00:00.0,9], 0, 9, 1, 1887, 0, 0, 0, 0, 2024-12-09 12:46:24.03, 4347092245348612685\n", + "[2016-05-05 00:00:00.0,10], 0, 9, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:46:24.03, 4347092245348612685\n", + "[2016-05-05 00:00:00.0,11], 0, 12, 1, 1923, 0, 0, 0, 0, 2024-12-09 12:46:24.03, 4347092245348612685\n", + "[2016-05-05 00:00:00.0,12], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:46:24.03, 4347092245348612685\n", + "[2016-04-05 00:00:00.0,2], 0, 9, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:45:50.794, 4854258090863971735\n", + "[2016-05-05 00:00:00.0,13], 0, 15, 1, 1987, 0, 0, 0, 0, 2024-12-09 12:46:24.03, 4347092245348612685\n", + "[2016-04-05 00:00:00.0,3], 0, 10, 1, 1879, 0, 0, 0, 0, 2024-12-09 12:45:50.794, 4854258090863971735\n", + "[2016-05-05 00:00:00.0,14], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:46:24.03, 4347092245348612685\n", + "[2016-04-05 00:00:00.0,0], 0, 10, 1, 1887, 0, 0, 0, 0, 2024-12-09 12:45:50.794, 4854258090863971735\n", + "[2016-05-05 00:00:00.0,15], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:46:24.03, 4347092245348612685\n", + "[2016-04-05 00:00:00.0,1], 0, 8, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:45:50.794, 4854258090863971735\n", + "[2016-03-27 00:00:00.0,0], 0, 10, 1, 1928, 0, 0, 0, 0, 2024-12-09 12:43:46.36, 8224750783053908590\n", + "[2016-03-27 00:00:00.0,5], 0, 19, 1, 2097, 0, 0, 0, 0, 2024-12-09 12:43:46.36, 8224750783053908590\n", + "[2016-03-27 00:00:00.0,6], 0, 16, 1, 2082, 0, 0, 0, 0, 2024-12-09 12:43:46.36, 8224750783053908590\n", + "[2016-03-27 00:00:00.0,7], 0, 7, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:43:46.36, 8224750783053908590\n", + "[2016-03-27 00:00:00.0,8], 0, 12, 1, 1951, 0, 0, 0, 0, 2024-12-09 12:43:46.36, 8224750783053908590\n", + "[2016-03-27 00:00:00.0,1], 0, 9, 1, 1889, 0, 0, 0, 0, 2024-12-09 12:43:46.36, 8224750783053908590\n", + "[2016-03-27 00:00:00.0,2], 0, 9, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:43:46.36, 8224750783053908590\n", + "[2016-03-27 00:00:00.0,3], 0, 14, 1, 2039, 0, 0, 0, 0, 2024-12-09 12:43:46.36, 8224750783053908590\n", + "[2016-03-27 00:00:00.0,4], 0, 9, 1, 1885, 0, 0, 0, 0, 2024-12-09 12:43:46.36, 8224750783053908590\n", + "[2015-12-15 00:00:00.0,8], 0, 6, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:45:04.611, 8507343115563775721\n", + "[2015-12-15 00:00:00.0,7], 0, 10, 1, 1882, 0, 0, 0, 0, 2024-12-09 12:45:04.611, 8507343115563775721\n", + "[2015-12-15 00:00:00.0,6], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:45:04.611, 8507343115563775721\n", + "[2015-12-15 00:00:00.0,5], 0, 9, 1, 1912, 0, 0, 0, 0, 2024-12-09 12:45:04.611, 8507343115563775721\n", + "[2015-12-15 00:00:00.0,4], 0, 8, 1, 1815, 0, 0, 0, 0, 2024-12-09 12:45:04.611, 8507343115563775721\n", + "[2015-12-15 00:00:00.0,3], 0, 7, 1, 1803, 0, 0, 0, 0, 2024-12-09 12:45:04.611, 8507343115563775721\n", + "[2015-12-15 00:00:00.0,2], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:45:04.611, 8507343115563775721\n", + "[2015-12-15 00:00:00.0,1], 0, 8, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:45:04.611, 8507343115563775721\n", + "[2016-04-11 00:00:00.0,12], 0, 18, 1, 2127, 0, 0, 0, 0, 2024-12-09 12:46:40.449, 8531960802256177717\n", + "[2016-04-11 00:00:00.0,11], 0, 16, 1, 2028, 0, 0, 0, 0, 2024-12-09 12:46:40.449, 8531960802256177717\n", + "[2015-12-15 00:00:00.0,15], 0, 7, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:45:04.611, 8507343115563775721\n", + "[2016-04-11 00:00:00.0,14], 0, 16, 1, 2089, 0, 0, 0, 0, 2024-12-09 12:46:40.449, 8531960802256177717\n", + "[2015-12-15 00:00:00.0,14], 0, 8, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:45:04.611, 8507343115563775721\n", + "[2016-04-11 00:00:00.0,13], 0, 13, 1, 1970, 0, 0, 0, 0, 2024-12-09 12:46:40.449, 8531960802256177717\n", + "[2015-12-15 00:00:00.0,13], 0, 6, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:45:04.611, 8507343115563775721\n", + "[2015-12-15 00:00:00.0,12], 0, 5, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:45:04.611, 8507343115563775721\n", + "[2016-04-11 00:00:00.0,15], 0, 9, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:46:40.449, 8531960802256177717\n", + "[2015-12-15 00:00:00.0,11], 0, 10, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:45:04.611, 8507343115563775721\n", + "[2015-12-15 00:00:00.0,10], 0, 7, 1, 1798, 0, 0, 0, 0, 2024-12-09 12:45:04.611, 8507343115563775721\n", + "[2015-12-15 00:00:00.0,9], 0, 8, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:45:04.611, 8507343115563775721\n", + "[2015-12-15 00:00:00.0,0], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:45:04.611, 8507343115563775721\n", + "[2015-12-30 00:00:00.0,0], 0, 5, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:47:21.854, 235046426682264427\n", + "[2015-12-30 00:00:00.0,1], 0, 6, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:47:21.854, 235046426682264427\n", + "[2015-12-30 00:00:00.0,2], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:47:21.854, 235046426682264427\n", + "[2015-12-30 00:00:00.0,7], 0, 10, 1, 1882, 0, 0, 0, 0, 2024-12-09 12:47:21.854, 235046426682264427\n", + "[2015-12-30 00:00:00.0,8], 0, 7, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:47:21.854, 235046426682264427\n", + "[2015-12-30 00:00:00.0,9], 0, 4, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:47:21.854, 235046426682264427\n", + "[2015-12-30 00:00:00.0,10], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:47:21.854, 235046426682264427\n", + "[2015-12-30 00:00:00.0,3], 0, 7, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:47:21.854, 235046426682264427\n", + "[2015-12-30 00:00:00.0,4], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:47:21.854, 235046426682264427\n", + "[2015-12-30 00:00:00.0,5], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:47:21.854, 235046426682264427\n", + "[2015-12-30 00:00:00.0,6], 0, 7, 1, 1795, 0, 0, 0, 0, 2024-12-09 12:47:21.854, 235046426682264427\n", + "[2015-12-30 00:00:00.0,15], 0, 6, 1, 1743, 0, 0, 0, 0, 2024-12-09 12:47:21.854, 235046426682264427\n", + "[2015-12-30 00:00:00.0,11], 0, 7, 1, 1775, 0, 0, 0, 0, 2024-12-09 12:47:21.854, 235046426682264427\n", + "[2015-12-30 00:00:00.0,12], 0, 6, 1, 1789, 0, 0, 0, 0, 2024-12-09 12:47:21.854, 235046426682264427\n", + "[2015-12-30 00:00:00.0,13], 0, 7, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:47:21.854, 235046426682264427\n", + "[2015-12-30 00:00:00.0,14], 0, 6, 1, 1789, 0, 0, 0, 0, 2024-12-09 12:47:21.854, 235046426682264427\n", + "[2016-03-21 00:00:00.0,0], 0, 8, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:44:59.568, 4181534898336630886\n", + "[2016-03-21 00:00:00.0,1], 0, 9, 1, 1887, 0, 0, 0, 0, 2024-12-09 12:44:59.568, 4181534898336630886\n", + "[2016-03-21 00:00:00.0,8], 0, 5, 1, 1749, 0, 0, 0, 0, 2024-12-09 12:44:59.568, 4181534898336630886\n", + "[2016-03-21 00:00:00.0,9], 0, 7, 1, 1866, 0, 0, 0, 0, 2024-12-09 12:44:59.568, 4181534898336630886\n", + "[2016-03-21 00:00:00.0,6], 0, 5, 1, 1749, 0, 0, 0, 0, 2024-12-09 12:44:59.568, 4181534898336630886\n", + "[2016-03-21 00:00:00.0,7], 0, 9, 1, 1912, 0, 0, 0, 0, 2024-12-09 12:44:59.568, 4181534898336630886\n", + "[2016-07-02 00:00:00.0,8], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:36.656, 9105374029807989603\n", + "[2016-03-21 00:00:00.0,4], 0, 10, 1, 1928, 0, 0, 0, 0, 2024-12-09 12:44:59.568, 4181534898336630886\n", + "[2016-03-21 00:00:00.0,5], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:44:59.568, 4181534898336630886\n", + "[2016-07-02 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:36.656, 9105374029807989603\n", + "[2016-03-21 00:00:00.0,2], 0, 5, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:44:59.568, 4181534898336630886\n", + "[2016-03-21 00:00:00.0,3], 0, 6, 1, 1792, 0, 0, 0, 0, 2024-12-09 12:44:59.568, 4181534898336630886\n", + "[2016-03-06 00:00:00.0,10], 0, 15, 1, 2016, 0, 0, 0, 0, 2024-12-09 12:46:41.287, 1718391179661218807\n", + "[2016-03-06 00:00:00.0,9], 0, 13, 1, 1972, 0, 0, 0, 0, 2024-12-09 12:46:41.287, 1718391179661218807\n", + "[2015-12-06 00:00:00.0,1], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:47:26.949, 7872292594899260209\n", + "[2016-03-06 00:00:00.0,8], 0, 7, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:46:41.287, 1718391179661218807\n", + "[2015-12-06 00:00:00.0,0], 0, 6, 1, 1789, 0, 0, 0, 0, 2024-12-09 12:47:26.949, 7872292594899260209\n", + "[2016-03-06 00:00:00.0,7], 0, 16, 1, 2057, 0, 0, 0, 0, 2024-12-09 12:46:41.287, 1718391179661218807\n", + "[2015-12-06 00:00:00.0,3], 0, 8, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:47:26.949, 7872292594899260209\n", + "[2016-03-06 00:00:00.0,14], 0, 5, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:46:41.287, 1718391179661218807\n", + "[2015-12-06 00:00:00.0,2], 0, 14, 1, 1989, 0, 0, 0, 0, 2024-12-09 12:47:26.949, 7872292594899260209\n", + "[2016-03-06 00:00:00.0,13], 0, 7, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:46:41.287, 1718391179661218807\n", + "[2015-12-06 00:00:00.0,5], 0, 6, 1, 1789, 0, 0, 0, 0, 2024-12-09 12:47:26.949, 7872292594899260209\n", + "[2016-03-06 00:00:00.0,12], 0, 6, 1, 1812, 0, 0, 0, 0, 2024-12-09 12:46:41.287, 1718391179661218807\n", + "[2015-12-06 00:00:00.0,4], 0, 6, 1, 1810, 0, 0, 0, 0, 2024-12-09 12:47:26.949, 7872292594899260209\n", + "[2016-03-06 00:00:00.0,11], 0, 14, 1, 1965, 0, 0, 0, 0, 2024-12-09 12:46:41.287, 1718391179661218807\n", + "[2015-12-06 00:00:00.0,7], 0, 6, 1, 1791, 0, 0, 0, 0, 2024-12-09 12:47:26.949, 7872292594899260209\n", + "[2016-03-06 00:00:00.0,2], 0, 9, 1, 1881, 0, 0, 0, 0, 2024-12-09 12:46:41.287, 1718391179661218807\n", + "[2015-12-06 00:00:00.0,6], 0, 15, 1, 1988, 0, 0, 0, 0, 2024-12-09 12:47:26.949, 7872292594899260209\n", + "[2016-03-06 00:00:00.0,1], 0, 9, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:46:41.287, 1718391179661218807\n", + "[2015-12-06 00:00:00.0,9], 0, 6, 1, 1811, 0, 0, 0, 0, 2024-12-09 12:47:26.949, 7872292594899260209\n", + "[2016-03-06 00:00:00.0,0], 0, 11, 1, 1947, 0, 0, 0, 0, 2024-12-09 12:46:41.287, 1718391179661218807\n", + "[2015-12-06 00:00:00.0,8], 0, 8, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:47:26.949, 7872292594899260209\n", + "[2015-12-06 00:00:00.0,11], 0, 7, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:47:26.949, 7872292594899260209\n", + "[2016-03-06 00:00:00.0,6], 0, 3, 1, 1665, 0, 0, 0, 0, 2024-12-09 12:46:41.287, 1718391179661218807\n", + "[2015-12-06 00:00:00.0,10], 0, 10, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:47:26.949, 7872292594899260209\n", + "[2016-03-06 00:00:00.0,5], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:46:41.287, 1718391179661218807\n", + "[2015-12-06 00:00:00.0,13], 0, 11, 1, 1948, 0, 0, 0, 0, 2024-12-09 12:47:26.949, 7872292594899260209\n", + "[2016-03-06 00:00:00.0,4], 0, 17, 1, 2108, 0, 0, 0, 0, 2024-12-09 12:46:41.287, 1718391179661218807\n", + "[2015-12-06 00:00:00.0,12], 0, 11, 1, 1905, 0, 0, 0, 0, 2024-12-09 12:47:26.949, 7872292594899260209\n", + "[2016-03-06 00:00:00.0,3], 0, 13, 1, 1943, 0, 0, 0, 0, 2024-12-09 12:46:41.287, 1718391179661218807\n", + "[2015-12-06 00:00:00.0,15], 0, 12, 1, 1949, 0, 0, 0, 0, 2024-12-09 12:47:26.949, 7872292594899260209\n", + "[2015-12-06 00:00:00.0,14], 0, 10, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:47:26.949, 7872292594899260209\n", + "[2016-03-06 00:00:00.0,15], 0, 10, 1, 1907, 0, 0, 0, 0, 2024-12-09 12:46:41.287, 1718391179661218807\n", + "[2016-04-11 00:00:00.0,4], 0, 9, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:46:40.449, 8531960802256177717\n", + "[2016-04-11 00:00:00.0,3], 0, 12, 1, 1948, 0, 0, 0, 0, 2024-12-09 12:46:40.449, 8531960802256177717\n", + "[2016-04-11 00:00:00.0,6], 0, 8, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:46:40.449, 8531960802256177717\n", + "[2016-04-11 00:00:00.0,5], 0, 15, 1, 2010, 0, 0, 0, 0, 2024-12-09 12:46:40.449, 8531960802256177717\n", + "[2016-04-11 00:00:00.0,8], 0, 10, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:46:40.449, 8531960802256177717\n", + "[2016-04-11 00:00:00.0,7], 0, 16, 1, 2031, 0, 0, 0, 0, 2024-12-09 12:46:40.449, 8531960802256177717\n", + "[2016-04-11 00:00:00.0,10], 0, 11, 1, 1885, 0, 0, 0, 0, 2024-12-09 12:46:40.449, 8531960802256177717\n", + "[2016-04-11 00:00:00.0,9], 0, 11, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:46:40.449, 8531960802256177717\n", + "[2016-04-11 00:00:00.0,0], 0, 9, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:46:40.449, 8531960802256177717\n", + "[2016-04-11 00:00:00.0,2], 0, 13, 1, 1950, 0, 0, 0, 0, 2024-12-09 12:46:40.449, 8531960802256177717\n", + "[2016-04-11 00:00:00.0,1], 0, 10, 1, 1888, 0, 0, 0, 0, 2024-12-09 12:46:40.449, 8531960802256177717\n", + "[2016-03-21 00:00:00.0,14], 0, 9, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:44:59.568, 4181534898336630886\n", + "[2016-03-21 00:00:00.0,15], 0, 7, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:44:59.568, 4181534898336630886\n", + "[2016-03-21 00:00:00.0,12], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:59.568, 4181534898336630886\n", + "[2016-03-21 00:00:00.0,13], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:44:59.568, 4181534898336630886\n", + "[2016-03-21 00:00:00.0,10], 0, 11, 1, 1930, 0, 0, 0, 0, 2024-12-09 12:44:59.568, 4181534898336630886\n", + "[2016-03-21 00:00:00.0,11], 0, 4, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:44:59.568, 4181534898336630886\n", + "[2015-11-05 00:00:00.0,3], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:46:13.833, 6384715283234400758\n", + "[2015-11-05 00:00:00.0,2], 0, 5, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:46:13.833, 6384715283234400758\n", + "[2015-11-20 00:00:00.0,2], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:45:09.188, 2001435973886025605\n", + "[2015-11-05 00:00:00.0,5], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:46:13.833, 6384715283234400758\n", + "[2015-11-20 00:00:00.0,1], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:45:09.188, 2001435973886025605\n", + "[2015-11-20 00:00:00.0,7], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:45:09.188, 2001435973886025605\n", + "[2015-11-20 00:00:00.0,6], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:45:09.188, 2001435973886025605\n", + "[2015-11-05 00:00:00.0,1], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:13.833, 6384715283234400758\n", + "[2015-11-20 00:00:00.0,5], 0, 2, 1, 1619, 0, 0, 0, 0, 2024-12-09 12:45:09.188, 2001435973886025605\n", + "[2015-11-05 00:00:00.0,0], 0, 7, 1, 1798, 0, 0, 0, 0, 2024-12-09 12:46:13.833, 6384715283234400758\n", + "[2015-11-20 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:09.188, 2001435973886025605\n", + "[2015-11-05 00:00:00.0,11], 0, 2, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:46:13.833, 6384715283234400758\n", + "[2015-11-20 00:00:00.0,11], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:45:09.188, 2001435973886025605\n", + "[2015-11-05 00:00:00.0,10], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:46:13.833, 6384715283234400758\n", + "[2015-11-20 00:00:00.0,10], 0, 1, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:45:09.188, 2001435973886025605\n", + "[2015-11-05 00:00:00.0,13], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:46:13.833, 6384715283234400758\n", + "[2015-11-20 00:00:00.0,9], 0, 2, 1, 1600, 0, 0, 0, 0, 2024-12-09 12:45:09.188, 2001435973886025605\n", + "[2015-11-05 00:00:00.0,12], 0, 3, 1, 1682, 0, 0, 0, 0, 2024-12-09 12:46:13.833, 6384715283234400758\n", + "[2015-11-20 00:00:00.0,8], 0, 4, 1, 1712, 0, 0, 0, 0, 2024-12-09 12:45:09.188, 2001435973886025605\n", + "[2015-11-05 00:00:00.0,7], 0, 7, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:46:13.833, 6384715283234400758\n", + "[2015-11-05 00:00:00.0,6], 0, 6, 1, 1791, 0, 0, 0, 0, 2024-12-09 12:46:13.833, 6384715283234400758\n", + "[2015-11-20 00:00:00.0,14], 0, 3, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:45:09.188, 2001435973886025605\n", + "[2015-11-05 00:00:00.0,9], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:46:13.833, 6384715283234400758\n", + "[2015-11-20 00:00:00.0,13], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:45:09.188, 2001435973886025605\n", + "[2015-11-05 00:00:00.0,8], 0, 6, 1, 1772, 0, 0, 0, 0, 2024-12-09 12:46:13.833, 6384715283234400758\n", + "[2015-11-05 00:00:00.0,15], 0, 3, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:46:13.833, 6384715283234400758\n", + "[2015-11-05 00:00:00.0,14], 0, 3, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:46:13.833, 6384715283234400758\n", + "[2016-05-14 00:00:00.0,5], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:26.837, 7402756136764646099\n", + "[2016-05-14 00:00:00.0,4], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:44:26.837, 7402756136764646099\n", + "[2016-05-29 00:00:00.0,15], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:47:30.209, 8701062748488044628\n", + "[2016-05-29 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:30.209, 8701062748488044628\n", + "[2016-05-29 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:30.209, 8701062748488044628\n", + "[2016-05-29 00:00:00.0,13], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:47:30.209, 8701062748488044628\n", + "[2016-05-29 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:30.209, 8701062748488044628\n", + "[2016-05-29 00:00:00.0,1], 0, 3, 1, 1682, 0, 0, 0, 0, 2024-12-09 12:47:30.209, 8701062748488044628\n", + "[2016-05-29 00:00:00.0,0], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:47:30.209, 8701062748488044628\n", + "[2016-05-14 00:00:00.0,1], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:26.837, 7402756136764646099\n", + "[2016-05-29 00:00:00.0,3], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:47:30.209, 8701062748488044628\n", + "[2015-12-05 00:00:00.0,9], 0, 7, 1, 1775, 0, 0, 0, 0, 2024-12-09 12:45:36.829, 8236794114814888562\n", + "[2015-12-05 00:00:00.0,8], 0, 5, 1, 1749, 0, 0, 0, 0, 2024-12-09 12:45:36.829, 8236794114814888562\n", + "[2015-12-05 00:00:00.0,7], 0, 10, 1, 1881, 0, 0, 0, 0, 2024-12-09 12:45:36.829, 8236794114814888562\n", + "[2015-12-05 00:00:00.0,6], 0, 8, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:45:36.829, 8236794114814888562\n", + "[2015-12-05 00:00:00.0,5], 0, 11, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:45:36.829, 8236794114814888562\n", + "[2015-12-05 00:00:00.0,4], 0, 6, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:45:36.829, 8236794114814888562\n", + "[2015-12-05 00:00:00.0,3], 0, 10, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:45:36.829, 8236794114814888562\n", + "[2015-12-05 00:00:00.0,2], 0, 8, 1, 1837, 0, 0, 0, 0, 2024-12-09 12:45:36.829, 8236794114814888562\n", + "[2015-12-05 00:00:00.0,15], 0, 8, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:45:36.829, 8236794114814888562\n", + "[2015-12-05 00:00:00.0,14], 0, 6, 1, 1787, 0, 0, 0, 0, 2024-12-09 12:45:36.829, 8236794114814888562\n", + "[2015-12-05 00:00:00.0,13], 0, 8, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:45:36.829, 8236794114814888562\n", + "[2015-12-05 00:00:00.0,12], 0, 9, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:45:36.829, 8236794114814888562\n", + "[2015-12-05 00:00:00.0,11], 0, 7, 1, 1799, 0, 0, 0, 0, 2024-12-09 12:45:36.829, 8236794114814888562\n", + "[2015-12-05 00:00:00.0,10], 0, 12, 1, 1907, 0, 0, 0, 0, 2024-12-09 12:45:36.829, 8236794114814888562\n", + "[2015-12-05 00:00:00.0,1], 0, 8, 1, 1795, 0, 0, 0, 0, 2024-12-09 12:45:36.829, 8236794114814888562\n", + "[2015-12-05 00:00:00.0,0], 0, 8, 1, 1798, 0, 0, 0, 0, 2024-12-09 12:45:36.829, 8236794114814888562\n", + "[2015-11-12 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:18.898, 4970915846539780759\n", + "[2015-11-12 00:00:00.0,9], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:47:18.898, 4970915846539780759\n", + "[2015-11-12 00:00:00.0,10], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:47:18.898, 4970915846539780759\n", + "[2015-11-12 00:00:00.0,15], 0, 2, 1, 1620, 0, 0, 0, 0, 2024-12-09 12:47:18.898, 4970915846539780759\n", + "[2015-11-12 00:00:00.0,13], 0, 3, 1, 1665, 0, 0, 0, 0, 2024-12-09 12:47:18.898, 4970915846539780759\n", + "[2015-11-12 00:00:00.0,14], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:47:18.898, 4970915846539780759\n", + "[2015-11-12 00:00:00.0,3], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:47:18.898, 4970915846539780759\n", + "[2015-11-12 00:00:00.0,4], 0, 6, 1, 1811, 0, 0, 0, 0, 2024-12-09 12:47:18.898, 4970915846539780759\n", + "[2015-11-12 00:00:00.0,1], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:18.898, 4970915846539780759\n", + "[2015-11-12 00:00:00.0,2], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:47:18.898, 4970915846539780759\n", + "[2015-11-12 00:00:00.0,7], 0, 4, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:47:18.898, 4970915846539780759\n", + "[2015-11-12 00:00:00.0,8], 0, 3, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:47:18.898, 4970915846539780759\n", + "[2015-11-12 00:00:00.0,5], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:47:18.898, 4970915846539780759\n", + "[2015-11-12 00:00:00.0,6], 0, 4, 1, 1710, 0, 0, 0, 0, 2024-12-09 12:47:18.898, 4970915846539780759\n", + "[2015-11-12 00:00:00.0,0], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:18.898, 4970915846539780759\n", + "[2016-04-18 00:00:00.0,1], 0, 8, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:45:19.32, 3364007106383578970\n", + "[2016-04-18 00:00:00.0,0], 0, 11, 1, 1905, 0, 0, 0, 0, 2024-12-09 12:45:19.32, 3364007106383578970\n", + "[2016-04-18 00:00:00.0,3], 0, 8, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:45:19.32, 3364007106383578970\n", + "[2016-04-18 00:00:00.0,2], 0, 13, 1, 1971, 0, 0, 0, 0, 2024-12-09 12:45:19.32, 3364007106383578970\n", + "[2016-04-18 00:00:00.0,5], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:45:19.32, 3364007106383578970\n", + "[2016-04-18 00:00:00.0,4], 0, 11, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:45:19.32, 3364007106383578970\n", + "[2016-04-18 00:00:00.0,7], 0, 7, 1, 1796, 0, 0, 0, 0, 2024-12-09 12:45:19.32, 3364007106383578970\n", + "[2016-04-18 00:00:00.0,6], 0, 15, 1, 2033, 0, 0, 0, 0, 2024-12-09 12:45:19.32, 3364007106383578970\n", + "[2016-04-18 00:00:00.0,9], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:45:19.32, 3364007106383578970\n", + "[2016-04-18 00:00:00.0,8], 0, 8, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:45:19.32, 3364007106383578970\n", + "[2016-04-18 00:00:00.0,11], 0, 13, 1, 1940, 0, 0, 0, 0, 2024-12-09 12:45:19.32, 3364007106383578970\n", + "[2016-04-18 00:00:00.0,10], 0, 10, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:45:19.32, 3364007106383578970\n", + "[2016-04-18 00:00:00.0,13], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:45:19.32, 3364007106383578970\n", + "[2016-04-18 00:00:00.0,12], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:45:19.32, 3364007106383578970\n", + "[2016-04-18 00:00:00.0,15], 0, 8, 1, 1816, 0, 0, 0, 0, 2024-12-09 12:45:19.32, 3364007106383578970\n", + "[2016-04-18 00:00:00.0,14], 0, 9, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:45:19.32, 3364007106383578970\n", + "[2016-03-22 00:00:00.0,7], 0, 3, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:46:31.72, 7427535311825819859\n", + "[2016-03-22 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:31.72, 7427535311825819859\n", + "[2016-03-22 00:00:00.0,9], 0, 4, 1, 1710, 0, 0, 0, 0, 2024-12-09 12:46:31.72, 7427535311825819859\n", + "[2016-03-22 00:00:00.0,8], 0, 4, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:46:31.72, 7427535311825819859\n", + "[2016-03-22 00:00:00.0,11], 0, 2, 1, 1614, 0, 0, 0, 0, 2024-12-09 12:46:31.72, 7427535311825819859\n", + "[2016-03-22 00:00:00.0,10], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:46:31.72, 7427535311825819859\n", + "[2016-03-22 00:00:00.0,13], 0, 4, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:46:31.72, 7427535311825819859\n", + "[2016-03-22 00:00:00.0,12], 0, 4, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:46:31.72, 7427535311825819859\n", + "[2016-03-22 00:00:00.0,15], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:31.72, 7427535311825819859\n", + "[2016-03-22 00:00:00.0,14], 0, 6, 1, 1813, 0, 0, 0, 0, 2024-12-09 12:46:31.72, 7427535311825819859\n", + "[2016-03-22 00:00:00.0,1], 0, 3, 1, 1676, 0, 0, 0, 0, 2024-12-09 12:46:31.72, 7427535311825819859\n", + "[2016-03-22 00:00:00.0,0], 0, 4, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:46:31.72, 7427535311825819859\n", + "[2016-03-22 00:00:00.0,3], 0, 4, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:46:31.72, 7427535311825819859\n", + "[2016-03-22 00:00:00.0,2], 0, 3, 1, 1662, 0, 0, 0, 0, 2024-12-09 12:46:31.72, 7427535311825819859\n", + "[2016-03-22 00:00:00.0,5], 0, 2, 1, 1621, 0, 0, 0, 0, 2024-12-09 12:46:31.72, 7427535311825819859\n", + "[2016-03-22 00:00:00.0,4], 0, 11, 1, 1924, 0, 0, 0, 0, 2024-12-09 12:46:31.72, 7427535311825819859\n", + "[2016-05-21 00:00:00.0,15], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:43:57.219, 7509565781312956752\n", + "[2016-06-05 00:00:00.0,13], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:09.917, 5646141524378150550\n", + "[2016-05-21 00:00:00.0,13], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:43:57.219, 7509565781312956752\n", + "[2016-06-05 00:00:00.0,14], 0, 4, 1, 1753, 0, 0, 0, 0, 2024-12-09 12:48:09.917, 5646141524378150550\n", + "[2016-06-05 00:00:00.0,15], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:09.917, 5646141524378150550\n", + "[2016-05-21 00:00:00.0,11], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:43:57.219, 7509565781312956752\n", + "[2016-05-21 00:00:00.0,12], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:43:57.219, 7509565781312956752\n", + "[2016-06-05 00:00:00.0,9], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:48:09.917, 5646141524378150550\n", + "[2016-05-21 00:00:00.0,7], 0, 2, 1, 1710, 0, 0, 0, 0, 2024-12-09 12:43:57.219, 7509565781312956752\n", + "[2016-06-05 00:00:00.0,12], 0, 6, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:48:09.917, 5646141524378150550\n", + "[2016-05-21 00:00:00.0,8], 0, 3, 1, 1730, 0, 0, 0, 0, 2024-12-09 12:43:57.219, 7509565781312956752\n", + "[2016-06-05 00:00:00.0,5], 0, 2, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:48:09.917, 5646141524378150550\n", + "[2016-03-07 00:00:00.0,10], 0, 4, 1, 1728, 0, 0, 0, 0, 2024-12-09 12:45:10.773, 5119916354487760238\n", + "[2016-06-05 00:00:00.0,6], 0, 2, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:48:09.917, 5646141524378150550\n", + "[2016-03-07 00:00:00.0,9], 0, 6, 1, 1789, 0, 0, 0, 0, 2024-12-09 12:45:10.773, 5119916354487760238\n", + "[2016-06-05 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:09.917, 5646141524378150550\n", + "[2016-03-07 00:00:00.0,8], 0, 8, 1, 1878, 0, 0, 0, 0, 2024-12-09 12:45:10.773, 5119916354487760238\n", + "[2016-06-05 00:00:00.0,8], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:48:09.917, 5646141524378150550\n", + "[2016-03-07 00:00:00.0,7], 0, 5, 1, 1771, 0, 0, 0, 0, 2024-12-09 12:45:10.773, 5119916354487760238\n", + "[2016-03-07 00:00:00.0,6], 0, 4, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:45:10.773, 5119916354487760238\n", + "[2016-06-05 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:09.917, 5646141524378150550\n", + "[2016-03-07 00:00:00.0,5], 0, 9, 1, 1885, 0, 0, 0, 0, 2024-12-09 12:45:10.773, 5119916354487760238\n", + "[2016-06-05 00:00:00.0,3], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:48:09.917, 5646141524378150550\n", + "[2016-03-07 00:00:00.0,4], 0, 3, 1, 1668, 0, 0, 0, 0, 2024-12-09 12:45:10.773, 5119916354487760238\n", + "[2016-06-05 00:00:00.0,4], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:48:09.917, 5646141524378150550\n", + "[2016-03-07 00:00:00.0,3], 0, 5, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:45:10.773, 5119916354487760238\n", + "[2016-03-07 00:00:00.0,2], 0, 6, 1, 1788, 0, 0, 0, 0, 2024-12-09 12:45:10.773, 5119916354487760238\n", + "[2016-03-07 00:00:00.0,1], 0, 7, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:45:10.773, 5119916354487760238\n", + "[2016-03-07 00:00:00.0,0], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:10.773, 5119916354487760238\n", + "[2016-06-05 00:00:00.0,0], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:09.917, 5646141524378150550\n", + "[2016-04-14 00:00:00.0,15], 0, 12, 1, 1971, 0, 0, 0, 0, 2024-12-09 12:46:51.126, 1429726298667334745\n", + "[2016-03-07 00:00:00.0,15], 0, 4, 1, 1699, 0, 0, 0, 0, 2024-12-09 12:45:10.773, 5119916354487760238\n", + "[2016-03-07 00:00:00.0,14], 0, 8, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:45:10.773, 5119916354487760238\n", + "[2016-03-07 00:00:00.0,13], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:45:10.773, 5119916354487760238\n", + "[2016-03-07 00:00:00.0,12], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:45:10.773, 5119916354487760238\n", + "[2016-03-07 00:00:00.0,11], 0, 5, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:45:10.773, 5119916354487760238\n", + "[2016-05-21 00:00:00.0,5], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:43:57.219, 7509565781312956752\n", + "[2016-05-21 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:43:57.219, 7509565781312956752\n", + "[2016-05-21 00:00:00.0,3], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:43:57.219, 7509565781312956752\n", + "[2016-05-21 00:00:00.0,4], 0, 3, 1, 1730, 0, 0, 0, 0, 2024-12-09 12:43:57.219, 7509565781312956752\n", + "[2016-05-21 00:00:00.0,1], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:43:57.219, 7509565781312956752\n", + "[2016-05-21 00:00:00.0,2], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:43:57.219, 7509565781312956752\n", + "[2016-05-21 00:00:00.0,0], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:43:57.219, 7509565781312956752\n", + "[2016-04-14 00:00:00.0,0], 0, 6, 1, 1788, 0, 0, 0, 0, 2024-12-09 12:46:51.126, 1429726298667334745\n", + "[2016-04-14 00:00:00.0,2], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:46:51.126, 1429726298667334745\n", + "[2016-04-14 00:00:00.0,1], 0, 7, 1, 1800, 0, 0, 0, 0, 2024-12-09 12:46:51.126, 1429726298667334745\n", + "[2016-04-14 00:00:00.0,4], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:46:51.126, 1429726298667334745\n", + "[2016-04-14 00:00:00.0,3], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:46:51.126, 1429726298667334745\n", + "[2016-04-14 00:00:00.0,6], 0, 7, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:46:51.126, 1429726298667334745\n", + "[2016-04-14 00:00:00.0,5], 0, 8, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:46:51.126, 1429726298667334745\n", + "[2016-04-14 00:00:00.0,8], 0, 9, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:46:51.126, 1429726298667334745\n", + "[2016-04-14 00:00:00.0,7], 0, 12, 1, 1929, 0, 0, 0, 0, 2024-12-09 12:46:51.126, 1429726298667334745\n", + "[2016-04-14 00:00:00.0,10], 0, 6, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:46:51.126, 1429726298667334745\n", + "[2016-04-14 00:00:00.0,9], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:46:51.126, 1429726298667334745\n", + "[2016-04-14 00:00:00.0,12], 0, 6, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:46:51.126, 1429726298667334745\n", + "[2016-04-14 00:00:00.0,11], 0, 9, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:46:51.126, 1429726298667334745\n", + "[2016-04-14 00:00:00.0,14], 0, 9, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:46:51.126, 1429726298667334745\n", + "[2016-04-14 00:00:00.0,13], 0, 10, 1, 1885, 0, 0, 0, 0, 2024-12-09 12:46:51.126, 1429726298667334745\n", + "[2015-12-08 00:00:00.0,6], 0, 3, 1, 1666, 0, 0, 0, 0, 2024-12-09 12:45:55.413, 7313707201993160772\n", + "[2015-12-08 00:00:00.0,7], 0, 6, 1, 1809, 0, 0, 0, 0, 2024-12-09 12:45:55.413, 7313707201993160772\n", + "[2015-12-08 00:00:00.0,8], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:55.413, 7313707201993160772\n", + "[2015-12-08 00:00:00.0,9], 0, 6, 1, 1771, 0, 0, 0, 0, 2024-12-09 12:45:55.413, 7313707201993160772\n", + "[2015-12-08 00:00:00.0,10], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:45:55.413, 7313707201993160772\n", + "[2015-12-08 00:00:00.0,11], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:45:55.413, 7313707201993160772\n", + "[2015-12-08 00:00:00.0,12], 0, 4, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:45:55.413, 7313707201993160772\n", + "[2015-12-08 00:00:00.0,13], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:45:55.413, 7313707201993160772\n", + "[2015-12-08 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:55.413, 7313707201993160772\n", + "[2015-12-08 00:00:00.0,15], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:45:55.413, 7313707201993160772\n", + "[2016-07-16 00:00:00.0,11], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:47:54.34, 4000476089967621321\n", + "[2016-07-16 00:00:00.0,8], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:54.34, 4000476089967621321\n", + "[2015-12-08 00:00:00.0,0], 0, 6, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:45:55.413, 7313707201993160772\n", + "[2015-12-08 00:00:00.0,1], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:45:55.413, 7313707201993160772\n", + "[2015-12-08 00:00:00.0,2], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:45:55.413, 7313707201993160772\n", + "[2015-12-08 00:00:00.0,3], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:45:55.413, 7313707201993160772\n", + "[2015-12-08 00:00:00.0,4], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:45:55.413, 7313707201993160772\n", + "[2015-12-08 00:00:00.0,5], 0, 6, 1, 1788, 0, 0, 0, 0, 2024-12-09 12:45:55.413, 7313707201993160772\n", + "[2016-08-12 00:00:00.0,0], 0, 2, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:48:01.155, 4682187906999396852\n", + "[2016-08-12 00:00:00.0,5], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:01.155, 4682187906999396852\n", + "[2016-08-12 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:01.155, 4682187906999396852\n", + "[2016-08-12 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:01.155, 4682187906999396852\n", + "[2016-08-12 00:00:00.0,1], 0, 3, 1, 1731, 0, 0, 0, 0, 2024-12-09 12:48:01.155, 4682187906999396852\n", + "[2016-08-12 00:00:00.0,15], 0, 3, 1, 1730, 0, 0, 0, 0, 2024-12-09 12:48:01.155, 4682187906999396852\n", + "[2016-08-12 00:00:00.0,13], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:01.155, 4682187906999396852\n", + "[2016-08-12 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:01.155, 4682187906999396852\n", + "[2016-08-12 00:00:00.0,12], 0, 3, 1, 1662, 0, 0, 0, 0, 2024-12-09 12:48:01.155, 4682187906999396852\n", + "[2016-07-16 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:54.34, 4000476089967621321\n", + "[2016-07-16 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:54.34, 4000476089967621321\n", + "[2015-11-09 00:00:00.0,0], 0, 11, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:46:49.413, 2183418917936341069\n", + "[2016-07-16 00:00:00.0,5], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:47:54.34, 4000476089967621321\n", + "[2015-11-09 00:00:00.0,2], 0, 10, 1, 1927, 0, 0, 0, 0, 2024-12-09 12:46:49.413, 2183418917936341069\n", + "[2015-11-09 00:00:00.0,1], 0, 10, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:46:49.413, 2183418917936341069\n", + "[2016-04-29 00:00:00.0,0], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:44:12.349, 4065829978224518210\n", + "[2015-11-09 00:00:00.0,4], 0, 6, 1, 1788, 0, 0, 0, 0, 2024-12-09 12:46:49.413, 2183418917936341069\n", + "[2015-11-09 00:00:00.0,3], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:46:49.413, 2183418917936341069\n", + "[2015-11-09 00:00:00.0,6], 0, 14, 1, 1991, 0, 0, 0, 0, 2024-12-09 12:46:49.413, 2183418917936341069\n", + "[2016-04-29 00:00:00.0,3], 0, 4, 1, 1752, 0, 0, 0, 0, 2024-12-09 12:44:12.349, 4065829978224518210\n", + "[2015-11-09 00:00:00.0,5], 0, 13, 1, 2019, 0, 0, 0, 0, 2024-12-09 12:46:49.413, 2183418917936341069\n", + "[2016-04-29 00:00:00.0,4], 0, 11, 1, 1928, 0, 0, 0, 0, 2024-12-09 12:44:12.349, 4065829978224518210\n", + "[2015-11-09 00:00:00.0,8], 0, 3, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:46:49.413, 2183418917936341069\n", + "[2016-04-29 00:00:00.0,1], 0, 5, 1, 1771, 0, 0, 0, 0, 2024-12-09 12:44:12.349, 4065829978224518210\n", + "[2015-11-09 00:00:00.0,7], 0, 14, 1, 2009, 0, 0, 0, 0, 2024-12-09 12:46:49.413, 2183418917936341069\n", + "[2016-04-29 00:00:00.0,2], 0, 6, 1, 1789, 0, 0, 0, 0, 2024-12-09 12:44:12.349, 4065829978224518210\n", + "[2015-11-09 00:00:00.0,10], 0, 8, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:46:49.413, 2183418917936341069\n", + "[2016-04-29 00:00:00.0,7], 0, 8, 1, 1816, 0, 0, 0, 0, 2024-12-09 12:44:12.349, 4065829978224518210\n", + "[2015-11-09 00:00:00.0,9], 0, 12, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:46:49.413, 2183418917936341069\n", + "[2016-04-29 00:00:00.0,8], 0, 10, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:44:12.349, 4065829978224518210\n", + "[2015-11-09 00:00:00.0,12], 0, 15, 1, 2014, 0, 0, 0, 0, 2024-12-09 12:46:49.413, 2183418917936341069\n", + "[2016-04-29 00:00:00.0,5], 0, 7, 1, 1801, 0, 0, 0, 0, 2024-12-09 12:44:12.349, 4065829978224518210\n", + "[2015-11-09 00:00:00.0,11], 0, 10, 1, 1907, 0, 0, 0, 0, 2024-12-09 12:46:49.413, 2183418917936341069\n", + "[2016-04-29 00:00:00.0,6], 0, 7, 1, 1866, 0, 0, 0, 0, 2024-12-09 12:44:12.349, 4065829978224518210\n", + "[2015-11-09 00:00:00.0,14], 0, 8, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:46:49.413, 2183418917936341069\n", + "[2016-04-29 00:00:00.0,11], 0, 10, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:44:12.349, 4065829978224518210\n", + "[2015-11-09 00:00:00.0,13], 0, 7, 1, 1822, 0, 0, 0, 0, 2024-12-09 12:46:49.413, 2183418917936341069\n", + "[2016-04-29 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:12.349, 4065829978224518210\n", + "[2016-04-29 00:00:00.0,9], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:44:12.349, 4065829978224518210\n", + "[2015-11-09 00:00:00.0,15], 0, 8, 1, 1881, 0, 0, 0, 0, 2024-12-09 12:46:49.413, 2183418917936341069\n", + "[2016-04-29 00:00:00.0,10], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:44:12.349, 4065829978224518210\n", + "[2016-04-29 00:00:00.0,15], 0, 9, 1, 1888, 0, 0, 0, 0, 2024-12-09 12:44:12.349, 4065829978224518210\n", + "[2016-04-29 00:00:00.0,13], 0, 7, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:44:12.349, 4065829978224518210\n", + "[2016-04-29 00:00:00.0,14], 0, 6, 1, 1789, 0, 0, 0, 0, 2024-12-09 12:44:12.349, 4065829978224518210\n", + "[2016-04-03 00:00:00.0,3], 0, 12, 1, 1947, 0, 0, 0, 0, 2024-12-09 12:45:42.239, 4237846582884505861\n", + "[2016-04-03 00:00:00.0,2], 0, 19, 1, 2119, 0, 0, 0, 0, 2024-12-09 12:45:42.239, 4237846582884505861\n", + "[2016-04-03 00:00:00.0,1], 0, 9, 1, 1887, 0, 0, 0, 0, 2024-12-09 12:45:42.239, 4237846582884505861\n", + "[2016-04-03 00:00:00.0,0], 0, 10, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:45:42.239, 4237846582884505861\n", + "[2016-04-03 00:00:00.0,15], 0, 15, 1, 2014, 0, 0, 0, 0, 2024-12-09 12:45:42.239, 4237846582884505861\n", + "[2016-04-03 00:00:00.0,14], 0, 15, 1, 2033, 0, 0, 0, 0, 2024-12-09 12:45:42.239, 4237846582884505861\n", + "[2016-04-03 00:00:00.0,13], 0, 10, 1, 1910, 0, 0, 0, 0, 2024-12-09 12:45:42.239, 4237846582884505861\n", + "[2016-04-03 00:00:00.0,12], 0, 15, 1, 2088, 0, 0, 0, 0, 2024-12-09 12:45:42.239, 4237846582884505861\n", + "[2016-04-03 00:00:00.0,7], 0, 20, 1, 2141, 0, 0, 0, 0, 2024-12-09 12:45:42.239, 4237846582884505861\n", + "[2016-04-03 00:00:00.0,6], 0, 13, 1, 1973, 0, 0, 0, 0, 2024-12-09 12:45:42.239, 4237846582884505861\n", + "[2016-04-03 00:00:00.0,5], 0, 14, 1, 1992, 0, 0, 0, 0, 2024-12-09 12:45:42.239, 4237846582884505861\n", + "[2016-04-03 00:00:00.0,4], 0, 18, 1, 2079, 0, 0, 0, 0, 2024-12-09 12:45:42.239, 4237846582884505861\n", + "[2016-04-03 00:00:00.0,11], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:45:42.239, 4237846582884505861\n", + "[2016-04-03 00:00:00.0,10], 0, 15, 1, 2029, 0, 0, 0, 0, 2024-12-09 12:45:42.239, 4237846582884505861\n", + "[2016-04-03 00:00:00.0,9], 0, 14, 1, 1970, 0, 0, 0, 0, 2024-12-09 12:45:42.239, 4237846582884505861\n", + "[2016-04-03 00:00:00.0,8], 0, 21, 1, 2155, 0, 0, 0, 0, 2024-12-09 12:45:42.239, 4237846582884505861\n", + "[2015-10-28 00:00:00.0,12], 0, 2, 1, 1694, 0, 0, 0, 0, 2024-12-09 12:44:05.626, 1863412503018117910\n", + "[2015-10-28 00:00:00.0,13], 0, 2, 1, 1603, 0, 0, 0, 0, 2024-12-09 12:44:05.626, 1863412503018117910\n", + "[2015-10-28 00:00:00.0,14], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:05.626, 1863412503018117910\n", + "[2015-10-28 00:00:00.0,7], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:44:05.626, 1863412503018117910\n", + "[2015-10-28 00:00:00.0,8], 0, 2, 1, 1693, 0, 0, 0, 0, 2024-12-09 12:44:05.626, 1863412503018117910\n", + "[2016-04-21 00:00:00.0,10], 0, 7, 1, 1776, 0, 0, 0, 0, 2024-12-09 12:45:28.734, 371611433982503883\n", + "[2016-04-21 00:00:00.0,11], 0, 6, 1, 1788, 0, 0, 0, 0, 2024-12-09 12:45:28.734, 371611433982503883\n", + "[2016-04-21 00:00:00.0,12], 0, 7, 1, 1799, 0, 0, 0, 0, 2024-12-09 12:45:28.734, 371611433982503883\n", + "[2016-04-21 00:00:00.0,13], 0, 6, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:45:28.734, 371611433982503883\n", + "[2016-04-21 00:00:00.0,14], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:45:28.734, 371611433982503883\n", + "[2015-10-28 00:00:00.0,15], 0, 2, 1, 1693, 0, 0, 0, 0, 2024-12-09 12:44:05.626, 1863412503018117910\n", + "[2016-04-21 00:00:00.0,15], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:45:28.734, 371611433982503883\n", + "[2016-04-21 00:00:00.0,2], 0, 5, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:45:28.734, 371611433982503883\n", + "[2016-04-21 00:00:00.0,3], 0, 3, 1, 1662, 0, 0, 0, 0, 2024-12-09 12:45:28.734, 371611433982503883\n", + "[2016-04-21 00:00:00.0,4], 0, 5, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:45:28.734, 371611433982503883\n", + "[2016-04-21 00:00:00.0,5], 0, 8, 1, 1838, 0, 0, 0, 0, 2024-12-09 12:45:28.734, 371611433982503883\n", + "[2016-04-21 00:00:00.0,6], 0, 4, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:45:28.734, 371611433982503883\n", + "[2016-04-21 00:00:00.0,8], 0, 6, 1, 1765, 0, 0, 0, 0, 2024-12-09 12:45:28.734, 371611433982503883\n", + "[2016-04-21 00:00:00.0,9], 0, 13, 1, 1946, 0, 0, 0, 0, 2024-12-09 12:45:28.734, 371611433982503883\n", + "[2015-10-28 00:00:00.0,3], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:44:05.626, 1863412503018117910\n", + "[2015-10-28 00:00:00.0,4], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:44:05.626, 1863412503018117910\n", + "[2015-10-28 00:00:00.0,5], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:44:05.626, 1863412503018117910\n", + "[2015-10-28 00:00:00.0,6], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:44:05.626, 1863412503018117910\n", + "[2016-04-21 00:00:00.0,0], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:45:28.734, 371611433982503883\n", + "[2016-04-21 00:00:00.0,1], 0, 9, 1, 1859, 0, 0, 0, 0, 2024-12-09 12:45:28.734, 371611433982503883\n", + "[2015-10-28 00:00:00.0,2], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:44:05.626, 1863412503018117910\n", + "[2016-03-19 00:00:00.0,1], 0, 8, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:46:35.023, 3512947169732248924\n", + "[2016-03-19 00:00:00.0,0], 0, 4, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:46:35.023, 3512947169732248924\n", + "[2016-07-01 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:07.015, 5254418641174463494\n", + "[2015-11-23 00:00:00.0,0], 0, 5, 1, 1765, 0, 0, 0, 0, 2024-12-09 12:47:24.332, 9158797014713441611\n", + "[2015-11-23 00:00:00.0,1], 0, 8, 1, 1836, 0, 0, 0, 0, 2024-12-09 12:47:24.332, 9158797014713441611\n", + "[2015-11-23 00:00:00.0,2], 0, 6, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:47:24.332, 9158797014713441611\n", + "[2015-11-23 00:00:00.0,3], 0, 3, 1, 1729, 0, 0, 0, 0, 2024-12-09 12:47:24.332, 9158797014713441611\n", + "[2015-11-23 00:00:00.0,4], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:47:24.332, 9158797014713441611\n", + "[2016-03-19 00:00:00.0,13], 0, 7, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:46:35.023, 3512947169732248924\n", + "[2015-11-23 00:00:00.0,5], 0, 6, 1, 1772, 0, 0, 0, 0, 2024-12-09 12:47:24.332, 9158797014713441611\n", + "[2016-03-19 00:00:00.0,12], 0, 6, 1, 1815, 0, 0, 0, 0, 2024-12-09 12:46:35.023, 3512947169732248924\n", + "[2015-11-23 00:00:00.0,6], 0, 9, 1, 1887, 0, 0, 0, 0, 2024-12-09 12:47:24.332, 9158797014713441611\n", + "[2016-03-19 00:00:00.0,11], 0, 5, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:46:35.023, 3512947169732248924\n", + "[2015-11-23 00:00:00.0,7], 0, 7, 1, 1800, 0, 0, 0, 0, 2024-12-09 12:47:24.332, 9158797014713441611\n", + "[2016-03-19 00:00:00.0,10], 0, 10, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:46:35.023, 3512947169732248924\n", + "[2015-11-23 00:00:00.0,8], 0, 6, 1, 1792, 0, 0, 0, 0, 2024-12-09 12:47:24.332, 9158797014713441611\n", + "[2015-11-23 00:00:00.0,9], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:24.332, 9158797014713441611\n", + "[2015-11-23 00:00:00.0,10], 0, 9, 1, 1844, 0, 0, 0, 0, 2024-12-09 12:47:24.332, 9158797014713441611\n", + "[2016-03-19 00:00:00.0,15], 0, 12, 1, 2003, 0, 0, 0, 0, 2024-12-09 12:46:35.023, 3512947169732248924\n", + "[2015-11-23 00:00:00.0,11], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:47:24.332, 9158797014713441611\n", + "[2016-03-19 00:00:00.0,14], 0, 12, 1, 1998, 0, 0, 0, 0, 2024-12-09 12:46:35.023, 3512947169732248924\n", + "[2015-11-23 00:00:00.0,12], 0, 10, 1, 1904, 0, 0, 0, 0, 2024-12-09 12:47:24.332, 9158797014713441611\n", + "[2016-03-19 00:00:00.0,5], 0, 9, 1, 1907, 0, 0, 0, 0, 2024-12-09 12:46:35.023, 3512947169732248924\n", + "[2015-11-23 00:00:00.0,13], 0, 3, 1, 1731, 0, 0, 0, 0, 2024-12-09 12:47:24.332, 9158797014713441611\n", + "[2016-03-19 00:00:00.0,4], 0, 8, 1, 1885, 0, 0, 0, 0, 2024-12-09 12:46:35.023, 3512947169732248924\n", + "[2015-11-23 00:00:00.0,14], 0, 5, 1, 1750, 0, 0, 0, 0, 2024-12-09 12:47:24.332, 9158797014713441611\n", + "[2016-03-19 00:00:00.0,3], 0, 11, 1, 1953, 0, 0, 0, 0, 2024-12-09 12:46:35.023, 3512947169732248924\n", + "[2015-11-23 00:00:00.0,15], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:47:24.332, 9158797014713441611\n", + "[2016-03-19 00:00:00.0,2], 0, 7, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:46:35.023, 3512947169732248924\n", + "[2016-03-19 00:00:00.0,9], 0, 11, 1, 1949, 0, 0, 0, 0, 2024-12-09 12:46:35.023, 3512947169732248924\n", + "[2016-03-19 00:00:00.0,8], 0, 12, 1, 1998, 0, 0, 0, 0, 2024-12-09 12:46:35.023, 3512947169732248924\n", + "[2016-03-19 00:00:00.0,7], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:46:35.023, 3512947169732248924\n", + "[2016-03-19 00:00:00.0,6], 0, 8, 1, 1858, 0, 0, 0, 0, 2024-12-09 12:46:35.023, 3512947169732248924\n", + "[2016-05-18 00:00:00.0,0], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:44:13.232, 7387686282752080504\n", + "[2016-05-18 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:13.232, 7387686282752080504\n", + "[2016-05-18 00:00:00.0,4], 0, 4, 1, 1704, 0, 0, 0, 0, 2024-12-09 12:44:13.232, 7387686282752080504\n", + "[2016-05-18 00:00:00.0,3], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:44:13.232, 7387686282752080504\n", + "[2016-05-18 00:00:00.0,6], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:44:13.232, 7387686282752080504\n", + "[2016-05-18 00:00:00.0,8], 0, 3, 1, 1730, 0, 0, 0, 0, 2024-12-09 12:44:13.232, 7387686282752080504\n", + "[2016-05-18 00:00:00.0,7], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:44:13.232, 7387686282752080504\n", + "[2016-05-18 00:00:00.0,10], 0, 4, 1, 1753, 0, 0, 0, 0, 2024-12-09 12:44:13.232, 7387686282752080504\n", + "[2016-05-18 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:13.232, 7387686282752080504\n", + "[2016-05-18 00:00:00.0,12], 0, 2, 1, 1619, 0, 0, 0, 0, 2024-12-09 12:44:13.232, 7387686282752080504\n", + "[2016-05-18 00:00:00.0,11], 0, 6, 1, 1788, 0, 0, 0, 0, 2024-12-09 12:44:13.232, 7387686282752080504\n", + "[2016-05-18 00:00:00.0,14], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:13.232, 7387686282752080504\n", + "[2016-05-18 00:00:00.0,13], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:44:13.232, 7387686282752080504\n", + "[2016-05-18 00:00:00.0,15], 0, 5, 1, 1749, 0, 0, 0, 0, 2024-12-09 12:44:13.232, 7387686282752080504\n", + "[2015-11-17 00:00:00.0,2], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:46:03.062, 2089748217292609905\n", + "[2015-11-17 00:00:00.0,3], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:46:03.062, 2089748217292609905\n", + "[2015-11-17 00:00:00.0,0], 0, 4, 1, 1710, 0, 0, 0, 0, 2024-12-09 12:46:03.062, 2089748217292609905\n", + "[2015-11-17 00:00:00.0,1], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:03.062, 2089748217292609905\n", + "[2015-11-17 00:00:00.0,6], 0, 3, 1, 1666, 0, 0, 0, 0, 2024-12-09 12:46:03.062, 2089748217292609905\n", + "[2015-11-17 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:03.062, 2089748217292609905\n", + "[2015-11-17 00:00:00.0,4], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:46:03.062, 2089748217292609905\n", + "[2015-11-17 00:00:00.0,5], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:46:03.062, 2089748217292609905\n", + "[2015-11-17 00:00:00.0,10], 0, 7, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:46:03.062, 2089748217292609905\n", + "[2015-11-17 00:00:00.0,11], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:46:03.062, 2089748217292609905\n", + "[2015-11-17 00:00:00.0,8], 0, 3, 1, 1731, 0, 0, 0, 0, 2024-12-09 12:46:03.062, 2089748217292609905\n", + "[2015-11-17 00:00:00.0,9], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:46:03.062, 2089748217292609905\n", + "[2015-11-17 00:00:00.0,14], 0, 6, 1, 1742, 0, 0, 0, 0, 2024-12-09 12:46:03.062, 2089748217292609905\n", + "[2015-11-17 00:00:00.0,15], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:46:03.062, 2089748217292609905\n", + "[2015-11-17 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:03.062, 2089748217292609905\n", + "[2015-11-17 00:00:00.0,13], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:03.062, 2089748217292609905\n", + "[2015-12-02 00:00:00.0,9], 0, 4, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:46:47.023, 7573143293669993207\n", + "[2015-12-02 00:00:00.0,10], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:46:47.023, 7573143293669993207\n", + "[2015-12-02 00:00:00.0,7], 0, 5, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:46:47.023, 7573143293669993207\n", + "[2015-12-02 00:00:00.0,8], 0, 2, 1, 1614, 0, 0, 0, 0, 2024-12-09 12:46:47.023, 7573143293669993207\n", + "[2015-12-02 00:00:00.0,13], 0, 8, 1, 1858, 0, 0, 0, 0, 2024-12-09 12:46:47.023, 7573143293669993207\n", + "[2015-12-02 00:00:00.0,14], 0, 11, 1, 1903, 0, 0, 0, 0, 2024-12-09 12:46:47.023, 7573143293669993207\n", + "[2015-12-02 00:00:00.0,11], 0, 2, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:46:47.023, 7573143293669993207\n", + "[2015-12-02 00:00:00.0,12], 0, 2, 1, 1619, 0, 0, 0, 0, 2024-12-09 12:46:47.023, 7573143293669993207\n", + "[2015-12-02 00:00:00.0,15], 0, 7, 1, 1804, 0, 0, 0, 0, 2024-12-09 12:46:47.023, 7573143293669993207\n", + "[2015-12-02 00:00:00.0,1], 0, 5, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:46:47.023, 7573143293669993207\n", + "[2015-12-02 00:00:00.0,2], 0, 4, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:46:47.023, 7573143293669993207\n", + "[2016-05-03 00:00:00.0,0], 0, 9, 1, 1888, 0, 0, 0, 0, 2024-12-09 12:44:07.702, 6715961332665812248\n", + "[2015-12-02 00:00:00.0,0], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:46:47.023, 7573143293669993207\n", + "[2015-12-02 00:00:00.0,5], 0, 4, 1, 1711, 0, 0, 0, 0, 2024-12-09 12:46:47.023, 7573143293669993207\n", + "[2015-12-02 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:47.023, 7573143293669993207\n", + "[2015-12-02 00:00:00.0,3], 0, 7, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:46:47.023, 7573143293669993207\n", + "[2015-12-02 00:00:00.0,4], 0, 4, 1, 1721, 0, 0, 0, 0, 2024-12-09 12:46:47.023, 7573143293669993207\n", + "[2016-05-03 00:00:00.0,6], 0, 7, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:44:07.702, 6715961332665812248\n", + "[2016-05-03 00:00:00.0,5], 0, 10, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:44:07.702, 6715961332665812248\n", + "[2016-05-03 00:00:00.0,8], 0, 12, 1, 1948, 0, 0, 0, 0, 2024-12-09 12:44:07.702, 6715961332665812248\n", + "[2016-05-03 00:00:00.0,7], 0, 8, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:44:07.702, 6715961332665812248\n", + "[2016-05-03 00:00:00.0,2], 0, 9, 1, 1887, 0, 0, 0, 0, 2024-12-09 12:44:07.702, 6715961332665812248\n", + "[2016-05-03 00:00:00.0,1], 0, 7, 1, 1800, 0, 0, 0, 0, 2024-12-09 12:44:07.702, 6715961332665812248\n", + "[2016-05-03 00:00:00.0,4], 0, 10, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:44:07.702, 6715961332665812248\n", + "[2016-05-03 00:00:00.0,3], 0, 9, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:44:07.702, 6715961332665812248\n", + "[2016-05-03 00:00:00.0,14], 0, 14, 1, 1969, 0, 0, 0, 0, 2024-12-09 12:44:07.702, 6715961332665812248\n", + "[2016-06-16 00:00:00.0,1], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:07.473, 4801273187014505532\n", + "[2016-05-03 00:00:00.0,13], 0, 10, 1, 1909, 0, 0, 0, 0, 2024-12-09 12:44:07.702, 6715961332665812248\n", + "[2016-05-03 00:00:00.0,15], 0, 9, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:44:07.702, 6715961332665812248\n", + "[2016-05-03 00:00:00.0,10], 0, 15, 1, 2006, 0, 0, 0, 0, 2024-12-09 12:44:07.702, 6715961332665812248\n", + "[2016-05-03 00:00:00.0,9], 0, 11, 1, 1928, 0, 0, 0, 0, 2024-12-09 12:44:07.702, 6715961332665812248\n", + "[2016-05-03 00:00:00.0,12], 0, 15, 1, 2010, 0, 0, 0, 0, 2024-12-09 12:44:07.702, 6715961332665812248\n", + "[2016-05-03 00:00:00.0,11], 0, 11, 1, 1904, 0, 0, 0, 0, 2024-12-09 12:44:07.702, 6715961332665812248\n", + "[2016-05-06 00:00:00.0,14], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:45:23.707, 5447888573054114623\n", + "[2016-05-06 00:00:00.0,15], 0, 5, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:45:23.707, 5447888573054114623\n", + "[2016-05-06 00:00:00.0,12], 0, 5, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:45:23.707, 5447888573054114623\n", + "[2016-05-06 00:00:00.0,13], 0, 5, 1, 1771, 0, 0, 0, 0, 2024-12-09 12:45:23.707, 5447888573054114623\n", + "[2016-05-06 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:23.707, 5447888573054114623\n", + "[2016-05-06 00:00:00.0,3], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:23.707, 5447888573054114623\n", + "[2016-05-06 00:00:00.0,0], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:45:23.707, 5447888573054114623\n", + "[2016-05-06 00:00:00.0,1], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:23.707, 5447888573054114623\n", + "[2016-05-06 00:00:00.0,10], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:45:23.707, 5447888573054114623\n", + "[2016-05-06 00:00:00.0,11], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:23.707, 5447888573054114623\n", + "[2016-05-06 00:00:00.0,8], 0, 5, 1, 1752, 0, 0, 0, 0, 2024-12-09 12:45:23.707, 5447888573054114623\n", + "[2016-05-06 00:00:00.0,9], 0, 3, 1, 1730, 0, 0, 0, 0, 2024-12-09 12:45:23.707, 5447888573054114623\n", + "[2016-05-06 00:00:00.0,6], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:45:23.707, 5447888573054114623\n", + "[2016-05-06 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:23.707, 5447888573054114623\n", + "[2016-05-06 00:00:00.0,5], 0, 4, 1, 1704, 0, 0, 0, 0, 2024-12-09 12:45:23.707, 5447888573054114623\n", + "[2016-03-16 00:00:00.0,14], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:44:44.619, 5336953644276531960\n", + "[2016-03-16 00:00:00.0,15], 0, 3, 1, 1682, 0, 0, 0, 0, 2024-12-09 12:44:44.619, 5336953644276531960\n", + "[2016-03-10 00:00:00.0,15], 0, 17, 1, 2062, 0, 0, 0, 0, 2024-12-09 12:43:43.452, 5848550462408841703\n", + "[2016-02-15 00:00:00.0,1], 0, 19, 1, 2075, 0, 0, 0, 0, 2024-12-09 12:47:11.692, 5873928476549215263\n", + "[2016-02-15 00:00:00.0,0], 0, 8, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:47:11.692, 5873928476549215263\n", + "[2016-02-15 00:00:00.0,3], 0, 11, 1, 1904, 0, 0, 0, 0, 2024-12-09 12:47:11.692, 5873928476549215263\n", + "[2016-02-15 00:00:00.0,2], 0, 14, 1, 1943, 0, 0, 0, 0, 2024-12-09 12:47:11.692, 5873928476549215263\n", + "[2016-02-15 00:00:00.0,5], 0, 9, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:47:11.692, 5873928476549215263\n", + "[2016-02-15 00:00:00.0,4], 0, 8, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:47:11.692, 5873928476549215263\n", + "[2016-02-15 00:00:00.0,7], 0, 24, 1, 2222, 0, 0, 0, 0, 2024-12-09 12:47:11.692, 5873928476549215263\n", + "[2016-02-15 00:00:00.0,6], 0, 13, 1, 1968, 0, 0, 0, 0, 2024-12-09 12:47:11.692, 5873928476549215263\n", + "[2016-02-15 00:00:00.0,9], 0, 11, 1, 1946, 0, 0, 0, 0, 2024-12-09 12:47:11.692, 5873928476549215263\n", + "[2016-02-15 00:00:00.0,8], 0, 14, 1, 1965, 0, 0, 0, 0, 2024-12-09 12:47:11.692, 5873928476549215263\n", + "[2016-03-01 00:00:00.0,10], 0, 9, 1, 1888, 0, 0, 0, 0, 2024-12-09 12:46:37.277, 1676989322137013440\n", + "[2016-03-01 00:00:00.0,11], 0, 4, 1, 1700, 0, 0, 0, 0, 2024-12-09 12:46:37.277, 1676989322137013440\n", + "[2016-03-01 00:00:00.0,8], 0, 9, 1, 1910, 0, 0, 0, 0, 2024-12-09 12:46:37.277, 1676989322137013440\n", + "[2016-03-01 00:00:00.0,9], 0, 9, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:46:37.277, 1676989322137013440\n", + "[2016-03-01 00:00:00.0,6], 0, 9, 1, 1904, 0, 0, 0, 0, 2024-12-09 12:46:37.277, 1676989322137013440\n", + "[2016-03-01 00:00:00.0,7], 0, 10, 1, 1904, 0, 0, 0, 0, 2024-12-09 12:46:37.277, 1676989322137013440\n", + "[2016-03-01 00:00:00.0,4], 0, 3, 1, 1662, 0, 0, 0, 0, 2024-12-09 12:46:37.277, 1676989322137013440\n", + "[2016-03-01 00:00:00.0,5], 0, 11, 1, 1928, 0, 0, 0, 0, 2024-12-09 12:46:37.277, 1676989322137013440\n", + "[2016-03-01 00:00:00.0,2], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:46:37.277, 1676989322137013440\n", + "[2016-03-01 00:00:00.0,3], 0, 9, 1, 1887, 0, 0, 0, 0, 2024-12-09 12:46:37.277, 1676989322137013440\n", + "[2016-03-01 00:00:00.0,0], 0, 9, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:46:37.277, 1676989322137013440\n", + "[2016-03-01 00:00:00.0,1], 0, 11, 1, 1951, 0, 0, 0, 0, 2024-12-09 12:46:37.277, 1676989322137013440\n", + "[2016-03-16 00:00:00.0,0], 0, 5, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:44:44.619, 5336953644276531960\n", + "[2016-03-16 00:00:00.0,1], 0, 6, 1, 1792, 0, 0, 0, 0, 2024-12-09 12:44:44.619, 5336953644276531960\n", + "[2016-03-16 00:00:00.0,4], 0, 7, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:44:44.619, 5336953644276531960\n", + "[2016-03-16 00:00:00.0,5], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:44:44.619, 5336953644276531960\n", + "[2016-03-16 00:00:00.0,2], 0, 9, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:44:44.619, 5336953644276531960\n", + "[2016-09-02 00:00:00.0,1], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:40.587, 2554536802962441179\n", + "[2016-03-16 00:00:00.0,3], 0, 4, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:44:44.619, 5336953644276531960\n", + "[2016-03-16 00:00:00.0,8], 0, 9, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:44:44.619, 5336953644276531960\n", + "[2016-03-16 00:00:00.0,9], 0, 7, 1, 1773, 0, 0, 0, 0, 2024-12-09 12:44:44.619, 5336953644276531960\n", + "[2016-03-16 00:00:00.0,6], 0, 11, 1, 1928, 0, 0, 0, 0, 2024-12-09 12:44:44.619, 5336953644276531960\n", + "[2016-03-16 00:00:00.0,7], 0, 9, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:44:44.619, 5336953644276531960\n", + "[2016-03-01 00:00:00.0,14], 0, 11, 1, 1903, 0, 0, 0, 0, 2024-12-09 12:46:37.277, 1676989322137013440\n", + "[2016-03-16 00:00:00.0,12], 0, 9, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:44:44.619, 5336953644276531960\n", + "[2016-03-01 00:00:00.0,15], 0, 6, 1, 1812, 0, 0, 0, 0, 2024-12-09 12:46:37.277, 1676989322137013440\n", + "[2016-03-16 00:00:00.0,13], 0, 7, 1, 1822, 0, 0, 0, 0, 2024-12-09 12:44:44.619, 5336953644276531960\n", + "[2016-03-01 00:00:00.0,12], 0, 7, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:46:37.277, 1676989322137013440\n", + "[2016-03-16 00:00:00.0,10], 0, 9, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:44:44.619, 5336953644276531960\n", + "[2016-03-01 00:00:00.0,13], 0, 9, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:46:37.277, 1676989322137013440\n", + "[2016-03-16 00:00:00.0,11], 0, 5, 1, 1743, 0, 0, 0, 0, 2024-12-09 12:44:44.619, 5336953644276531960\n", + "[2016-09-02 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:40.587, 2554536802962441179\n", + "[2016-03-10 00:00:00.0,3], 0, 12, 1, 2020, 0, 0, 0, 0, 2024-12-09 12:43:43.452, 5848550462408841703\n", + "[2016-03-10 00:00:00.0,4], 0, 12, 1, 1929, 0, 0, 0, 0, 2024-12-09 12:43:43.452, 5848550462408841703\n", + "[2016-03-10 00:00:00.0,5], 0, 11, 1, 2024, 0, 0, 0, 0, 2024-12-09 12:43:43.452, 5848550462408841703\n", + "[2016-03-10 00:00:00.0,6], 0, 13, 1, 1970, 0, 0, 0, 0, 2024-12-09 12:43:43.452, 5848550462408841703\n", + "[2016-09-02 00:00:00.0,14], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:47:40.587, 2554536802962441179\n", + "[2016-09-02 00:00:00.0,15], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:47:40.587, 2554536802962441179\n", + "[2016-03-10 00:00:00.0,0], 0, 21, 1, 2189, 0, 0, 0, 0, 2024-12-09 12:43:43.452, 5848550462408841703\n", + "[2016-03-10 00:00:00.0,1], 0, 11, 1, 1926, 0, 0, 0, 0, 2024-12-09 12:43:43.452, 5848550462408841703\n", + "[2016-03-10 00:00:00.0,2], 0, 7, 1, 1799, 0, 0, 0, 0, 2024-12-09 12:43:43.452, 5848550462408841703\n", + "[2016-09-02 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:40.587, 2554536802962441179\n", + "[2016-03-10 00:00:00.0,11], 0, 14, 1, 1969, 0, 0, 0, 0, 2024-12-09 12:43:43.452, 5848550462408841703\n", + "[2016-09-02 00:00:00.0,3], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:40.587, 2554536802962441179\n", + "[2016-03-10 00:00:00.0,12], 0, 15, 1, 2034, 0, 0, 0, 0, 2024-12-09 12:43:43.452, 5848550462408841703\n", + "[2016-03-10 00:00:00.0,13], 0, 19, 1, 2095, 0, 0, 0, 0, 2024-12-09 12:43:43.452, 5848550462408841703\n", + "[2016-03-10 00:00:00.0,14], 0, 6, 1, 1791, 0, 0, 0, 0, 2024-12-09 12:43:43.452, 5848550462408841703\n", + "[2016-03-10 00:00:00.0,7], 0, 10, 1, 1905, 0, 0, 0, 0, 2024-12-09 12:43:43.452, 5848550462408841703\n", + "[2016-09-02 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:40.587, 2554536802962441179\n", + "[2016-03-10 00:00:00.0,8], 0, 16, 1, 2054, 0, 0, 0, 0, 2024-12-09 12:43:43.452, 5848550462408841703\n", + "[2016-09-02 00:00:00.0,8], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:40.587, 2554536802962441179\n", + "[2016-03-10 00:00:00.0,9], 0, 12, 1, 1952, 0, 0, 0, 0, 2024-12-09 12:43:43.452, 5848550462408841703\n", + "[2016-09-02 00:00:00.0,9], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:47:40.587, 2554536802962441179\n", + "[2016-03-10 00:00:00.0,10], 0, 19, 1, 2152, 0, 0, 0, 0, 2024-12-09 12:43:43.452, 5848550462408841703\n", + "[2016-02-24 00:00:00.0,0], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:45:41.335, 4858519548091467932\n", + "[2016-02-24 00:00:00.0,1], 0, 10, 1, 1866, 0, 0, 0, 0, 2024-12-09 12:45:41.335, 4858519548091467932\n", + "[2016-02-09 00:00:00.0,1], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:44:00.278, 3774616550584694367\n", + "[2016-02-24 00:00:00.0,2], 0, 4, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:45:41.335, 4858519548091467932\n", + "[2016-02-09 00:00:00.0,2], 0, 5, 1, 1720, 0, 0, 0, 0, 2024-12-09 12:44:00.278, 3774616550584694367\n", + "[2016-02-24 00:00:00.0,3], 0, 11, 1, 1928, 0, 0, 0, 0, 2024-12-09 12:45:41.335, 4858519548091467932\n", + "[2016-02-24 00:00:00.0,4], 0, 7, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:45:41.335, 4858519548091467932\n", + "[2016-02-09 00:00:00.0,0], 0, 4, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:44:00.278, 3774616550584694367\n", + "[2016-02-24 00:00:00.0,5], 0, 11, 1, 1951, 0, 0, 0, 0, 2024-12-09 12:45:41.335, 4858519548091467932\n", + "[2016-02-09 00:00:00.0,5], 0, 7, 1, 1796, 0, 0, 0, 0, 2024-12-09 12:44:00.278, 3774616550584694367\n", + "[2016-02-24 00:00:00.0,6], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:45:41.335, 4858519548091467932\n", + "[2016-02-09 00:00:00.0,6], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:44:00.278, 3774616550584694367\n", + "[2016-02-24 00:00:00.0,7], 0, 7, 1, 1846, 0, 0, 0, 0, 2024-12-09 12:45:41.335, 4858519548091467932\n", + "[2016-02-09 00:00:00.0,3], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:44:00.278, 3774616550584694367\n", + "[2016-02-24 00:00:00.0,8], 0, 6, 1, 1771, 0, 0, 0, 0, 2024-12-09 12:45:41.335, 4858519548091467932\n", + "[2016-02-09 00:00:00.0,4], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:44:00.278, 3774616550584694367\n", + "[2016-02-24 00:00:00.0,9], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:45:41.335, 4858519548091467932\n", + "[2016-02-09 00:00:00.0,9], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:44:00.278, 3774616550584694367\n", + "[2016-02-24 00:00:00.0,10], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:45:41.335, 4858519548091467932\n", + "[2016-02-09 00:00:00.0,10], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:44:00.278, 3774616550584694367\n", + "[2016-02-24 00:00:00.0,11], 0, 5, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:45:41.335, 4858519548091467932\n", + "[2016-02-09 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:00.278, 3774616550584694367\n", + "[2016-02-24 00:00:00.0,12], 0, 5, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:45:41.335, 4858519548091467932\n", + "[2016-02-09 00:00:00.0,8], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:44:00.278, 3774616550584694367\n", + "[2016-02-09 00:00:00.0,13], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:44:00.278, 3774616550584694367\n", + "[2016-02-09 00:00:00.0,14], 0, 4, 1, 1753, 0, 0, 0, 0, 2024-12-09 12:44:00.278, 3774616550584694367\n", + "[2016-02-09 00:00:00.0,11], 0, 4, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:44:00.278, 3774616550584694367\n", + "[2016-01-01 00:00:00.0,15], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:15.037, 1000245641563779308\n", + "[2016-02-09 00:00:00.0,12], 0, 5, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:44:00.278, 3774616550584694367\n", + "[2016-01-01 00:00:00.0,14], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:47:15.037, 1000245641563779308\n", + "[2016-01-01 00:00:00.0,13], 0, 5, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:47:15.037, 1000245641563779308\n", + "[2016-01-01 00:00:00.0,12], 0, 3, 1, 1662, 0, 0, 0, 0, 2024-12-09 12:47:15.037, 1000245641563779308\n", + "[2016-02-09 00:00:00.0,15], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:44:00.278, 3774616550584694367\n", + "[2016-01-01 00:00:00.0,11], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:15.037, 1000245641563779308\n", + "[2016-01-01 00:00:00.0,2], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:47:15.037, 1000245641563779308\n", + "[2016-01-01 00:00:00.0,1], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:15.037, 1000245641563779308\n", + "[2016-01-01 00:00:00.0,10], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:47:15.037, 1000245641563779308\n", + "[2016-01-01 00:00:00.0,9], 0, 5, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:47:15.037, 1000245641563779308\n", + "[2016-01-01 00:00:00.0,8], 0, 3, 1, 1666, 0, 0, 0, 0, 2024-12-09 12:47:15.037, 1000245641563779308\n", + "[2016-01-01 00:00:00.0,7], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:47:15.037, 1000245641563779308\n", + "[2016-01-01 00:00:00.0,6], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:47:15.037, 1000245641563779308\n", + "[2016-01-01 00:00:00.0,5], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:47:15.037, 1000245641563779308\n", + "[2016-01-01 00:00:00.0,4], 0, 3, 1, 1715, 0, 0, 0, 0, 2024-12-09 12:47:15.037, 1000245641563779308\n", + "[2016-01-01 00:00:00.0,3], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:47:15.037, 1000245641563779308\n", + "[2015-12-17 00:00:00.0,0], 0, 7, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:46:25.816, 8722343875470208466\n", + "[2016-09-17 00:00:00.0,11], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:42.539, 7446145457224811979\n", + "[2015-12-17 00:00:00.0,5], 0, 11, 1, 1982, 0, 0, 0, 0, 2024-12-09 12:46:25.816, 8722343875470208466\n", + "[2016-09-17 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:42.539, 7446145457224811979\n", + "[2015-12-17 00:00:00.0,6], 0, 10, 1, 1909, 0, 0, 0, 0, 2024-12-09 12:46:25.816, 8722343875470208466\n", + "[2015-12-17 00:00:00.0,7], 0, 7, 1, 1846, 0, 0, 0, 0, 2024-12-09 12:46:25.816, 8722343875470208466\n", + "[2016-08-09 00:00:00.0,3], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:42.0, 489658144344942029\n", + "[2015-12-17 00:00:00.0,8], 0, 6, 1, 1787, 0, 0, 0, 0, 2024-12-09 12:46:25.816, 8722343875470208466\n", + "[2016-09-17 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:42.539, 7446145457224811979\n", + "[2015-12-17 00:00:00.0,1], 0, 10, 1, 1931, 0, 0, 0, 0, 2024-12-09 12:46:25.816, 8722343875470208466\n", + "[2015-12-17 00:00:00.0,2], 0, 10, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:46:25.816, 8722343875470208466\n", + "[2015-12-17 00:00:00.0,3], 0, 12, 1, 1975, 0, 0, 0, 0, 2024-12-09 12:46:25.816, 8722343875470208466\n", + "[2015-12-17 00:00:00.0,4], 0, 11, 1, 1981, 0, 0, 0, 0, 2024-12-09 12:46:25.816, 8722343875470208466\n", + "[2015-12-17 00:00:00.0,13], 0, 8, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:46:25.816, 8722343875470208466\n", + "[2015-12-17 00:00:00.0,14], 0, 9, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:46:25.816, 8722343875470208466\n", + "[2015-12-17 00:00:00.0,15], 0, 13, 1, 1989, 0, 0, 0, 0, 2024-12-09 12:46:25.816, 8722343875470208466\n", + "[2015-12-17 00:00:00.0,9], 0, 10, 1, 1912, 0, 0, 0, 0, 2024-12-09 12:46:25.816, 8722343875470208466\n", + "[2015-12-17 00:00:00.0,10], 0, 8, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:46:25.816, 8722343875470208466\n", + "[2016-09-17 00:00:00.0,13], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:47:42.539, 7446145457224811979\n", + "[2015-12-17 00:00:00.0,11], 0, 9, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:46:25.816, 8722343875470208466\n", + "[2015-12-17 00:00:00.0,12], 0, 6, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:46:25.816, 8722343875470208466\n", + "[2016-01-07 00:00:00.0,1], 0, 6, 1, 1789, 0, 0, 0, 0, 2024-12-09 12:46:29.967, 7035360831436969818\n", + "[2016-01-07 00:00:00.0,0], 0, 12, 1, 1877, 0, 0, 0, 0, 2024-12-09 12:46:29.967, 7035360831436969818\n", + "[2016-01-07 00:00:00.0,7], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:46:29.967, 7035360831436969818\n", + "[2016-01-07 00:00:00.0,6], 0, 5, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:46:29.967, 7035360831436969818\n", + "[2016-01-07 00:00:00.0,9], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:46:29.967, 7035360831436969818\n", + "[2016-01-07 00:00:00.0,8], 0, 7, 1, 1799, 0, 0, 0, 0, 2024-12-09 12:46:29.967, 7035360831436969818\n", + "[2016-01-07 00:00:00.0,3], 0, 8, 1, 1796, 0, 0, 0, 0, 2024-12-09 12:46:29.967, 7035360831436969818\n", + "[2016-01-07 00:00:00.0,2], 0, 6, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:46:29.967, 7035360831436969818\n", + "[2016-01-07 00:00:00.0,5], 0, 9, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:46:29.967, 7035360831436969818\n", + "[2016-01-07 00:00:00.0,4], 0, 7, 1, 1778, 0, 0, 0, 0, 2024-12-09 12:46:29.967, 7035360831436969818\n", + "[2016-01-07 00:00:00.0,15], 0, 6, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:46:29.967, 7035360831436969818\n", + "[2016-01-07 00:00:00.0,14], 0, 8, 1, 1791, 0, 0, 0, 0, 2024-12-09 12:46:29.967, 7035360831436969818\n", + "[2016-01-07 00:00:00.0,11], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:46:29.967, 7035360831436969818\n", + "[2016-01-07 00:00:00.0,10], 0, 7, 1, 1771, 0, 0, 0, 0, 2024-12-09 12:46:29.967, 7035360831436969818\n", + "[2016-01-07 00:00:00.0,13], 0, 8, 1, 1795, 0, 0, 0, 0, 2024-12-09 12:46:29.967, 7035360831436969818\n", + "[2016-01-07 00:00:00.0,12], 0, 6, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:46:29.967, 7035360831436969818\n", + "[2016-02-24 00:00:00.0,13], 0, 6, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:45:41.335, 4858519548091467932\n", + "[2016-02-24 00:00:00.0,14], 0, 4, 1, 1700, 0, 0, 0, 0, 2024-12-09 12:45:41.335, 4858519548091467932\n", + "[2016-02-24 00:00:00.0,15], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:45:41.335, 4858519548091467932\n", + "[2016-04-06 00:00:00.0,12], 0, 11, 1, 1903, 0, 0, 0, 0, 2024-12-09 12:47:07.367, 148901060775556475\n", + "[2016-03-25 00:00:00.0,11], 0, 6, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:46:59.827, 2330283196444594284\n", + "[2016-04-06 00:00:00.0,13], 0, 12, 1, 1927, 0, 0, 0, 0, 2024-12-09 12:47:07.367, 148901060775556475\n", + "[2016-03-25 00:00:00.0,12], 0, 7, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:46:59.827, 2330283196444594284\n", + "[2016-04-06 00:00:00.0,14], 0, 12, 1, 1949, 0, 0, 0, 0, 2024-12-09 12:47:07.367, 148901060775556475\n", + "[2016-03-25 00:00:00.0,9], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:46:59.827, 2330283196444594284\n", + "[2016-04-06 00:00:00.0,15], 0, 8, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:47:07.367, 148901060775556475\n", + "[2016-03-25 00:00:00.0,10], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:46:59.827, 2330283196444594284\n", + "[2016-04-06 00:00:00.0,8], 0, 10, 1, 1838, 0, 0, 0, 0, 2024-12-09 12:47:07.367, 148901060775556475\n", + "[2016-03-25 00:00:00.0,15], 0, 11, 1, 1905, 0, 0, 0, 0, 2024-12-09 12:46:59.827, 2330283196444594284\n", + "[2016-04-06 00:00:00.0,9], 0, 12, 1, 1927, 0, 0, 0, 0, 2024-12-09 12:47:07.367, 148901060775556475\n", + "[2016-04-06 00:00:00.0,10], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:47:07.367, 148901060775556475\n", + "[2016-03-25 00:00:00.0,13], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:46:59.827, 2330283196444594284\n", + "[2016-04-06 00:00:00.0,11], 0, 10, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:47:07.367, 148901060775556475\n", + "[2016-03-25 00:00:00.0,14], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:46:59.827, 2330283196444594284\n", + "[2016-03-25 00:00:00.0,3], 0, 4, 1, 1728, 0, 0, 0, 0, 2024-12-09 12:46:59.827, 2330283196444594284\n", + "[2016-03-25 00:00:00.0,4], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:46:59.827, 2330283196444594284\n", + "[2016-03-25 00:00:00.0,1], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:46:59.827, 2330283196444594284\n", + "[2016-03-25 00:00:00.0,2], 0, 5, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:46:59.827, 2330283196444594284\n", + "[2016-03-25 00:00:00.0,7], 0, 6, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:46:59.827, 2330283196444594284\n", + "[2016-03-25 00:00:00.0,8], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:46:59.827, 2330283196444594284\n", + "[2016-03-25 00:00:00.0,5], 0, 8, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:46:59.827, 2330283196444594284\n", + "[2016-03-25 00:00:00.0,6], 0, 3, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:46:59.827, 2330283196444594284\n", + "[2016-03-25 00:00:00.0,0], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:46:59.827, 2330283196444594284\n", + "[2016-04-06 00:00:00.0,4], 0, 9, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:47:07.367, 148901060775556475\n", + "[2016-04-06 00:00:00.0,5], 0, 22, 1, 2136, 0, 0, 0, 0, 2024-12-09 12:47:07.367, 148901060775556475\n", + "[2016-04-06 00:00:00.0,6], 0, 5, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:47:07.367, 148901060775556475\n", + "[2016-04-06 00:00:00.0,7], 0, 10, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:47:07.367, 148901060775556475\n", + "[2016-04-06 00:00:00.0,0], 0, 11, 1, 1858, 0, 0, 0, 0, 2024-12-09 12:47:07.367, 148901060775556475\n", + "[2016-04-06 00:00:00.0,1], 0, 9, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:47:07.367, 148901060775556475\n", + "[2016-04-06 00:00:00.0,2], 0, 13, 1, 1922, 0, 0, 0, 0, 2024-12-09 12:47:07.367, 148901060775556475\n", + "[2016-04-06 00:00:00.0,3], 0, 12, 1, 1949, 0, 0, 0, 0, 2024-12-09 12:47:07.367, 148901060775556475\n", + "[2016-08-24 00:00:00.0,9], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:47:56.848, 841178877079658369\n", + "[2016-08-24 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:56.848, 841178877079658369\n", + "[2016-04-09 00:00:00.0,14], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:45:53.632, 2299825615002162369\n", + "[2016-04-09 00:00:00.0,15], 0, 9, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:45:53.632, 2299825615002162369\n", + "[2016-04-09 00:00:00.0,12], 0, 8, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:45:53.632, 2299825615002162369\n", + "[2016-04-09 00:00:00.0,13], 0, 5, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:45:53.632, 2299825615002162369\n", + "[2016-04-09 00:00:00.0,6], 0, 10, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:45:53.632, 2299825615002162369\n", + "[2016-04-09 00:00:00.0,7], 0, 5, 1, 1774, 0, 0, 0, 0, 2024-12-09 12:45:53.632, 2299825615002162369\n", + "[2016-04-09 00:00:00.0,4], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:45:53.632, 2299825615002162369\n", + "[2016-04-09 00:00:00.0,5], 0, 12, 1, 1880, 0, 0, 0, 0, 2024-12-09 12:45:53.632, 2299825615002162369\n", + "[2016-04-09 00:00:00.0,10], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:45:53.632, 2299825615002162369\n", + "[2016-04-09 00:00:00.0,11], 0, 8, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:45:53.632, 2299825615002162369\n", + "[2016-04-09 00:00:00.0,8], 0, 7, 1, 1801, 0, 0, 0, 0, 2024-12-09 12:45:53.632, 2299825615002162369\n", + "[2016-04-09 00:00:00.0,9], 0, 11, 1, 1907, 0, 0, 0, 0, 2024-12-09 12:45:53.632, 2299825615002162369\n", + "[2016-04-09 00:00:00.0,2], 0, 7, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:45:53.632, 2299825615002162369\n", + "[2016-04-09 00:00:00.0,3], 0, 9, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:45:53.632, 2299825615002162369\n", + "[2016-08-24 00:00:00.0,5], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:56.848, 841178877079658369\n", + "[2016-04-09 00:00:00.0,0], 0, 12, 1, 1928, 0, 0, 0, 0, 2024-12-09 12:45:53.632, 2299825615002162369\n", + "[2016-04-09 00:00:00.0,1], 0, 9, 1, 1844, 0, 0, 0, 0, 2024-12-09 12:45:53.632, 2299825615002162369\n", + "[2015-12-11 00:00:00.0,6], 0, 11, 1, 1926, 0, 0, 0, 0, 2024-12-09 12:46:07.463, 1932531668908463904\n", + "[2015-12-11 00:00:00.0,5], 0, 11, 1, 1927, 0, 0, 0, 0, 2024-12-09 12:46:07.463, 1932531668908463904\n", + "[2015-12-11 00:00:00.0,8], 0, 7, 1, 1822, 0, 0, 0, 0, 2024-12-09 12:46:07.463, 1932531668908463904\n", + "[2015-12-11 00:00:00.0,7], 0, 6, 1, 1791, 0, 0, 0, 0, 2024-12-09 12:46:07.463, 1932531668908463904\n", + "[2015-12-11 00:00:00.0,2], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:07.463, 1932531668908463904\n", + "[2015-12-11 00:00:00.0,1], 0, 10, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:46:07.463, 1932531668908463904\n", + "[2015-12-11 00:00:00.0,4], 0, 11, 1, 1954, 0, 0, 0, 0, 2024-12-09 12:46:07.463, 1932531668908463904\n", + "[2015-12-11 00:00:00.0,3], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:46:07.463, 1932531668908463904\n", + "[2015-12-11 00:00:00.0,14], 0, 13, 1, 1972, 0, 0, 0, 0, 2024-12-09 12:46:07.463, 1932531668908463904\n", + "[2015-12-11 00:00:00.0,13], 0, 5, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:46:07.463, 1932531668908463904\n", + "[2015-12-11 00:00:00.0,15], 0, 14, 1, 2009, 0, 0, 0, 0, 2024-12-09 12:46:07.463, 1932531668908463904\n", + "[2015-12-11 00:00:00.0,10], 0, 9, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:46:07.463, 1932531668908463904\n", + "[2015-12-11 00:00:00.0,9], 0, 18, 1, 2130, 0, 0, 0, 0, 2024-12-09 12:46:07.463, 1932531668908463904\n", + "[2015-12-11 00:00:00.0,12], 0, 11, 1, 1927, 0, 0, 0, 0, 2024-12-09 12:46:07.463, 1932531668908463904\n", + "[2015-12-11 00:00:00.0,11], 0, 11, 1, 1930, 0, 0, 0, 0, 2024-12-09 12:46:07.463, 1932531668908463904\n", + "[2015-12-11 00:00:00.0,0], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:46:07.463, 1932531668908463904\n", + "[2016-01-19 00:00:00.0,0], 0, 6, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:45:57.844, 5589905970656582286\n", + "[2016-09-26 00:00:00.0,1], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:00.14, 1084222146924852084\n", + "[2016-09-26 00:00:00.0,3], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:00.14, 1084222146924852084\n", + "[2016-09-26 00:00:00.0,7], 0, 3, 1, 1731, 0, 0, 0, 0, 2024-12-09 12:48:00.14, 1084222146924852084\n", + "[2016-09-26 00:00:00.0,8], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:48:00.14, 1084222146924852084\n", + "[2016-09-26 00:00:00.0,10], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:48:00.14, 1084222146924852084\n", + "[2016-09-26 00:00:00.0,13], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:48:00.14, 1084222146924852084\n", + "[2015-12-23 00:00:00.0,8], 0, 11, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:46:53.638, 8970551201414722978\n", + "[2015-12-23 00:00:00.0,9], 0, 6, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:46:53.638, 8970551201414722978\n", + "[2015-12-23 00:00:00.0,10], 0, 8, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:46:53.638, 8970551201414722978\n", + "[2015-12-23 00:00:00.0,11], 0, 7, 1, 1827, 0, 0, 0, 0, 2024-12-09 12:46:53.638, 8970551201414722978\n", + "[2015-12-23 00:00:00.0,12], 0, 6, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:46:53.638, 8970551201414722978\n", + "[2015-12-23 00:00:00.0,13], 0, 7, 1, 1800, 0, 0, 0, 0, 2024-12-09 12:46:53.638, 8970551201414722978\n", + "[2015-12-23 00:00:00.0,14], 0, 13, 1, 1947, 0, 0, 0, 0, 2024-12-09 12:46:53.638, 8970551201414722978\n", + "[2015-12-23 00:00:00.0,15], 0, 8, 1, 1837, 0, 0, 0, 0, 2024-12-09 12:46:53.638, 8970551201414722978\n", + "[2015-12-23 00:00:00.0,0], 0, 7, 1, 1778, 0, 0, 0, 0, 2024-12-09 12:46:53.638, 8970551201414722978\n", + "[2015-12-23 00:00:00.0,1], 0, 8, 1, 1846, 0, 0, 0, 0, 2024-12-09 12:46:53.638, 8970551201414722978\n", + "[2015-12-23 00:00:00.0,2], 0, 9, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:46:53.638, 8970551201414722978\n", + "[2015-12-23 00:00:00.0,3], 0, 7, 1, 1800, 0, 0, 0, 0, 2024-12-09 12:46:53.638, 8970551201414722978\n", + "[2015-12-23 00:00:00.0,4], 0, 8, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:46:53.638, 8970551201414722978\n", + "[2015-12-23 00:00:00.0,5], 0, 7, 1, 1799, 0, 0, 0, 0, 2024-12-09 12:46:53.638, 8970551201414722978\n", + "[2015-12-23 00:00:00.0,6], 0, 7, 1, 1779, 0, 0, 0, 0, 2024-12-09 12:46:53.638, 8970551201414722978\n", + "[2015-12-23 00:00:00.0,7], 0, 10, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:46:53.638, 8970551201414722978\n", + "[2015-12-20 00:00:00.0,12], 0, 8, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:46:15.45, 7067884774425305021\n", + "[2015-12-20 00:00:00.0,13], 0, 16, 1, 2034, 0, 0, 0, 0, 2024-12-09 12:46:15.45, 7067884774425305021\n", + "[2015-12-20 00:00:00.0,14], 0, 11, 1, 1905, 0, 0, 0, 0, 2024-12-09 12:46:15.45, 7067884774425305021\n", + "[2015-12-20 00:00:00.0,15], 0, 13, 1, 1945, 0, 0, 0, 0, 2024-12-09 12:46:15.45, 7067884774425305021\n", + "[2015-12-20 00:00:00.0,8], 0, 20, 1, 2090, 0, 0, 0, 0, 2024-12-09 12:46:15.45, 7067884774425305021\n", + "[2015-12-20 00:00:00.0,9], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:46:15.45, 7067884774425305021\n", + "[2015-12-20 00:00:00.0,10], 0, 9, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:46:15.45, 7067884774425305021\n", + "[2015-12-20 00:00:00.0,11], 0, 13, 1, 1944, 0, 0, 0, 0, 2024-12-09 12:46:15.45, 7067884774425305021\n", + "[2015-12-20 00:00:00.0,4], 0, 11, 1, 1949, 0, 0, 0, 0, 2024-12-09 12:46:15.45, 7067884774425305021\n", + "[2015-12-20 00:00:00.0,5], 0, 6, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:46:15.45, 7067884774425305021\n", + "[2015-12-20 00:00:00.0,6], 0, 10, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:46:15.45, 7067884774425305021\n", + "[2015-12-20 00:00:00.0,7], 0, 10, 1, 1910, 0, 0, 0, 0, 2024-12-09 12:46:15.45, 7067884774425305021\n", + "[2015-12-20 00:00:00.0,0], 0, 13, 1, 1946, 0, 0, 0, 0, 2024-12-09 12:46:15.45, 7067884774425305021\n", + "[2015-12-20 00:00:00.0,1], 0, 13, 1, 1944, 0, 0, 0, 0, 2024-12-09 12:46:15.45, 7067884774425305021\n", + "[2015-12-20 00:00:00.0,2], 0, 10, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:46:15.45, 7067884774425305021\n", + "[2015-12-20 00:00:00.0,3], 0, 13, 1, 1949, 0, 0, 0, 0, 2024-12-09 12:46:15.45, 7067884774425305021\n", + "[2016-02-06 00:00:00.0,6], 0, 4, 1, 1710, 0, 0, 0, 0, 2024-12-09 12:46:54.481, 1543223858918606188\n", + "[2016-02-06 00:00:00.0,5], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:54.481, 1543223858918606188\n", + "[2016-02-06 00:00:00.0,4], 0, 10, 1, 1910, 0, 0, 0, 0, 2024-12-09 12:46:54.481, 1543223858918606188\n", + "[2016-02-06 00:00:00.0,3], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:46:54.481, 1543223858918606188\n", + "[2016-02-06 00:00:00.0,2], 0, 11, 1, 1925, 0, 0, 0, 0, 2024-12-09 12:46:54.481, 1543223858918606188\n", + "[2016-02-06 00:00:00.0,1], 0, 7, 1, 1798, 0, 0, 0, 0, 2024-12-09 12:46:54.481, 1543223858918606188\n", + "[2016-02-06 00:00:00.0,0], 0, 7, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:46:54.481, 1543223858918606188\n", + "[2016-01-22 00:00:00.0,15], 0, 13, 1, 1966, 0, 0, 0, 0, 2024-12-09 12:43:59.27, 6824045976993006211\n", + "[2016-01-22 00:00:00.0,13], 0, 14, 1, 1970, 0, 0, 0, 0, 2024-12-09 12:43:59.27, 6824045976993006211\n", + "[2016-01-22 00:00:00.0,14], 0, 14, 1, 1988, 0, 0, 0, 0, 2024-12-09 12:43:59.27, 6824045976993006211\n", + "[2016-08-30 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:53.753, 1390019831531767923\n", + "[2016-01-22 00:00:00.0,7], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:43:59.27, 6824045976993006211\n", + "[2016-02-21 00:00:00.0,15], 0, 16, 1, 2055, 0, 0, 0, 0, 2024-12-09 12:47:26.091, 1338775164480773830\n", + "[2016-01-22 00:00:00.0,8], 0, 13, 1, 1972, 0, 0, 0, 0, 2024-12-09 12:43:59.27, 6824045976993006211\n", + "[2016-02-21 00:00:00.0,14], 0, 6, 1, 1789, 0, 0, 0, 0, 2024-12-09 12:47:26.091, 1338775164480773830\n", + "[2016-01-22 00:00:00.0,5], 0, 9, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:43:59.27, 6824045976993006211\n", + "[2016-02-21 00:00:00.0,13], 0, 7, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:47:26.091, 1338775164480773830\n", + "[2016-01-22 00:00:00.0,6], 0, 9, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:43:59.27, 6824045976993006211\n", + "[2016-08-30 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:53.753, 1390019831531767923\n", + "[2016-02-21 00:00:00.0,12], 0, 15, 1, 1964, 0, 0, 0, 0, 2024-12-09 12:47:26.091, 1338775164480773830\n", + "[2016-01-22 00:00:00.0,11], 0, 15, 1, 2008, 0, 0, 0, 0, 2024-12-09 12:43:59.27, 6824045976993006211\n", + "[2016-02-21 00:00:00.0,11], 0, 13, 1, 1925, 0, 0, 0, 0, 2024-12-09 12:47:26.091, 1338775164480773830\n", + "[2016-01-04 00:00:00.0,15], 0, 9, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:47:12.505, 8922521824868377110\n", + "[2016-01-22 00:00:00.0,12], 0, 15, 1, 2031, 0, 0, 0, 0, 2024-12-09 12:43:59.27, 6824045976993006211\n", + "[2016-02-21 00:00:00.0,10], 0, 11, 1, 1930, 0, 0, 0, 0, 2024-12-09 12:47:26.091, 1338775164480773830\n", + "[2016-01-22 00:00:00.0,9], 0, 10, 1, 1885, 0, 0, 0, 0, 2024-12-09 12:43:59.27, 6824045976993006211\n", + "[2016-02-21 00:00:00.0,9], 0, 10, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:47:26.091, 1338775164480773830\n", + "[2016-01-22 00:00:00.0,10], 0, 17, 1, 2081, 0, 0, 0, 0, 2024-12-09 12:43:59.27, 6824045976993006211\n", + "[2016-01-04 00:00:00.0,12], 0, 11, 1, 1885, 0, 0, 0, 0, 2024-12-09 12:47:12.505, 8922521824868377110\n", + "[2016-01-04 00:00:00.0,11], 0, 11, 1, 1930, 0, 0, 0, 0, 2024-12-09 12:47:12.505, 8922521824868377110\n", + "[2016-01-04 00:00:00.0,14], 0, 10, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:47:12.505, 8922521824868377110\n", + "[2016-01-04 00:00:00.0,13], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:47:12.505, 8922521824868377110\n", + "[2016-01-04 00:00:00.0,8], 0, 13, 1, 1950, 0, 0, 0, 0, 2024-12-09 12:47:12.505, 8922521824868377110\n", + "[2016-08-30 00:00:00.0,5], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:53.753, 1390019831531767923\n", + "[2016-01-04 00:00:00.0,7], 0, 10, 1, 1909, 0, 0, 0, 0, 2024-12-09 12:47:12.505, 8922521824868377110\n", + "[2016-08-30 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:53.753, 1390019831531767923\n", + "[2016-01-04 00:00:00.0,10], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:47:12.505, 8922521824868377110\n", + "[2016-01-04 00:00:00.0,9], 0, 8, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:47:12.505, 8922521824868377110\n", + "[2016-01-04 00:00:00.0,4], 0, 5, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:47:12.505, 8922521824868377110\n", + "[2016-01-04 00:00:00.0,3], 0, 8, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:47:12.505, 8922521824868377110\n", + "[2016-01-04 00:00:00.0,6], 0, 5, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:47:12.505, 8922521824868377110\n", + "[2016-01-04 00:00:00.0,5], 0, 11, 1, 1888, 0, 0, 0, 0, 2024-12-09 12:47:12.505, 8922521824868377110\n", + "[2016-01-04 00:00:00.0,0], 0, 11, 1, 1907, 0, 0, 0, 0, 2024-12-09 12:47:12.505, 8922521824868377110\n", + "[2016-01-04 00:00:00.0,2], 0, 14, 1, 2013, 0, 0, 0, 0, 2024-12-09 12:47:12.505, 8922521824868377110\n", + "[2016-01-04 00:00:00.0,1], 0, 11, 1, 1925, 0, 0, 0, 0, 2024-12-09 12:47:12.505, 8922521824868377110\n", + "[2016-02-21 00:00:00.0,8], 0, 13, 1, 1925, 0, 0, 0, 0, 2024-12-09 12:47:26.091, 1338775164480773830\n", + "[2016-02-21 00:00:00.0,7], 0, 17, 1, 2082, 0, 0, 0, 0, 2024-12-09 12:47:26.091, 1338775164480773830\n", + "[2016-01-22 00:00:00.0,0], 0, 17, 1, 2036, 0, 0, 0, 0, 2024-12-09 12:43:59.27, 6824045976993006211\n", + "[2016-02-21 00:00:00.0,6], 0, 16, 1, 2055, 0, 0, 0, 0, 2024-12-09 12:47:26.091, 1338775164480773830\n", + "[2016-02-21 00:00:00.0,5], 0, 9, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:47:26.091, 1338775164480773830\n", + "[2016-02-21 00:00:00.0,4], 0, 17, 1, 2076, 0, 0, 0, 0, 2024-12-09 12:47:26.091, 1338775164480773830\n", + "[2016-01-22 00:00:00.0,3], 0, 6, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:43:59.27, 6824045976993006211\n", + "[2016-02-21 00:00:00.0,3], 0, 19, 1, 2118, 0, 0, 0, 0, 2024-12-09 12:47:26.091, 1338775164480773830\n", + "[2016-01-22 00:00:00.0,4], 0, 12, 1, 1968, 0, 0, 0, 0, 2024-12-09 12:43:59.27, 6824045976993006211\n", + "[2016-02-21 00:00:00.0,2], 0, 11, 1, 1882, 0, 0, 0, 0, 2024-12-09 12:47:26.091, 1338775164480773830\n", + "[2016-01-22 00:00:00.0,1], 0, 8, 1, 1816, 0, 0, 0, 0, 2024-12-09 12:43:59.27, 6824045976993006211\n", + "[2016-02-21 00:00:00.0,1], 0, 20, 1, 2138, 0, 0, 0, 0, 2024-12-09 12:47:26.091, 1338775164480773830\n", + "[2016-01-22 00:00:00.0,2], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:43:59.27, 6824045976993006211\n", + "[2016-02-21 00:00:00.0,0], 0, 16, 1, 2006, 0, 0, 0, 0, 2024-12-09 12:47:26.091, 1338775164480773830\n", + "[2016-01-25 00:00:00.0,10], 0, 3, 1, 1662, 0, 0, 0, 0, 2024-12-09 12:45:46.346, 7663453954612414164\n", + "[2016-01-25 00:00:00.0,11], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:45:46.346, 7663453954612414164\n", + "[2016-01-25 00:00:00.0,8], 0, 6, 1, 1814, 0, 0, 0, 0, 2024-12-09 12:45:46.346, 7663453954612414164\n", + "[2016-01-25 00:00:00.0,9], 0, 5, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:45:46.346, 7663453954612414164\n", + "[2016-01-25 00:00:00.0,14], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:45:46.346, 7663453954612414164\n", + "[2016-01-25 00:00:00.0,15], 0, 5, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:45:46.346, 7663453954612414164\n", + "[2016-01-25 00:00:00.0,12], 0, 7, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:45:46.346, 7663453954612414164\n", + "[2016-01-25 00:00:00.0,13], 0, 3, 1, 1662, 0, 0, 0, 0, 2024-12-09 12:45:46.346, 7663453954612414164\n", + "[2016-01-25 00:00:00.0,2], 0, 5, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:45:46.346, 7663453954612414164\n", + "[2016-01-25 00:00:00.0,3], 0, 5, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:45:46.346, 7663453954612414164\n", + "[2016-01-25 00:00:00.0,0], 0, 3, 1, 1682, 0, 0, 0, 0, 2024-12-09 12:45:46.346, 7663453954612414164\n", + "[2016-01-25 00:00:00.0,1], 0, 3, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:45:46.346, 7663453954612414164\n", + "[2016-01-25 00:00:00.0,6], 0, 6, 1, 1793, 0, 0, 0, 0, 2024-12-09 12:45:46.346, 7663453954612414164\n", + "[2016-01-25 00:00:00.0,7], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:45:46.346, 7663453954612414164\n", + "[2016-01-25 00:00:00.0,4], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:45:46.346, 7663453954612414164\n", + "[2016-01-25 00:00:00.0,5], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:45:46.346, 7663453954612414164\n", + "[2016-01-16 00:00:00.0,15], 0, 14, 1, 1995, 0, 0, 0, 0, 2024-12-09 12:44:39.99, 5363997556335158843\n", + "[2016-01-16 00:00:00.0,14], 0, 15, 1, 1984, 0, 0, 0, 0, 2024-12-09 12:44:39.99, 5363997556335158843\n", + "[2016-01-16 00:00:00.0,13], 0, 10, 1, 1911, 0, 0, 0, 0, 2024-12-09 12:44:39.99, 5363997556335158843\n", + "[2016-03-04 00:00:00.0,6], 0, 7, 1, 1801, 0, 0, 0, 0, 2024-12-09 12:46:19.666, 5176222306101376433\n", + "[2016-01-16 00:00:00.0,8], 0, 6, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:44:39.99, 5363997556335158843\n", + "[2016-03-04 00:00:00.0,7], 0, 4, 1, 1753, 0, 0, 0, 0, 2024-12-09 12:46:19.666, 5176222306101376433\n", + "[2016-01-16 00:00:00.0,7], 0, 14, 1, 1941, 0, 0, 0, 0, 2024-12-09 12:44:39.99, 5363997556335158843\n", + "[2016-03-04 00:00:00.0,4], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:46:19.666, 5176222306101376433\n", + "[2016-01-16 00:00:00.0,6], 0, 11, 1, 1904, 0, 0, 0, 0, 2024-12-09 12:44:39.99, 5363997556335158843\n", + "[2016-03-04 00:00:00.0,5], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:46:19.666, 5176222306101376433\n", + "[2016-01-16 00:00:00.0,5], 0, 14, 1, 1987, 0, 0, 0, 0, 2024-12-09 12:44:39.99, 5363997556335158843\n", + "[2016-03-04 00:00:00.0,2], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:46:19.666, 5176222306101376433\n", + "[2016-01-16 00:00:00.0,12], 0, 12, 1, 1927, 0, 0, 0, 0, 2024-12-09 12:44:39.99, 5363997556335158843\n", + "[2016-03-04 00:00:00.0,3], 0, 2, 1, 1614, 0, 0, 0, 0, 2024-12-09 12:46:19.666, 5176222306101376433\n", + "[2016-01-16 00:00:00.0,11], 0, 12, 1, 1926, 0, 0, 0, 0, 2024-12-09 12:44:39.99, 5363997556335158843\n", + "[2016-03-04 00:00:00.0,0], 0, 5, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:46:19.666, 5176222306101376433\n", + "[2016-01-16 00:00:00.0,10], 0, 17, 1, 2106, 0, 0, 0, 0, 2024-12-09 12:44:39.99, 5363997556335158843\n", + "[2016-03-04 00:00:00.0,1], 0, 6, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:46:19.666, 5176222306101376433\n", + "[2016-01-16 00:00:00.0,9], 0, 8, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:44:39.99, 5363997556335158843\n", + "[2016-03-04 00:00:00.0,14], 0, 8, 1, 1815, 0, 0, 0, 0, 2024-12-09 12:46:19.666, 5176222306101376433\n", + "[2016-01-16 00:00:00.0,0], 0, 9, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:44:39.99, 5363997556335158843\n", + "[2016-03-04 00:00:00.0,15], 0, 5, 1, 1775, 0, 0, 0, 0, 2024-12-09 12:46:19.666, 5176222306101376433\n", + "[2016-03-04 00:00:00.0,12], 0, 6, 1, 1787, 0, 0, 0, 0, 2024-12-09 12:46:19.666, 5176222306101376433\n", + "[2016-03-04 00:00:00.0,13], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:19.666, 5176222306101376433\n", + "[2016-03-04 00:00:00.0,10], 0, 3, 1, 1731, 0, 0, 0, 0, 2024-12-09 12:46:19.666, 5176222306101376433\n", + "[2016-01-16 00:00:00.0,4], 0, 13, 1, 1969, 0, 0, 0, 0, 2024-12-09 12:44:39.99, 5363997556335158843\n", + "[2016-03-04 00:00:00.0,11], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:46:19.666, 5176222306101376433\n", + "[2016-01-16 00:00:00.0,3], 0, 11, 1, 1929, 0, 0, 0, 0, 2024-12-09 12:44:39.99, 5363997556335158843\n", + "[2016-03-04 00:00:00.0,8], 0, 4, 1, 1728, 0, 0, 0, 0, 2024-12-09 12:46:19.666, 5176222306101376433\n", + "[2016-01-16 00:00:00.0,2], 0, 14, 1, 2039, 0, 0, 0, 0, 2024-12-09 12:44:39.99, 5363997556335158843\n", + "[2016-03-04 00:00:00.0,9], 0, 5, 1, 1722, 0, 0, 0, 0, 2024-12-09 12:46:19.666, 5176222306101376433\n", + "[2016-01-16 00:00:00.0,1], 0, 12, 1, 1971, 0, 0, 0, 0, 2024-12-09 12:44:39.99, 5363997556335158843\n", + "[2016-02-27 00:00:00.0,5], 0, 10, 1, 1909, 0, 0, 0, 0, 2024-12-09 12:45:01.535, 4586150488957828764\n", + "[2016-02-27 00:00:00.0,4], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:45:01.535, 4586150488957828764\n", + "[2016-02-27 00:00:00.0,7], 0, 9, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:45:01.535, 4586150488957828764\n", + "[2016-02-27 00:00:00.0,6], 0, 4, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:45:01.535, 4586150488957828764\n", + "[2016-02-27 00:00:00.0,1], 0, 5, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:45:01.535, 4586150488957828764\n", + "[2016-02-27 00:00:00.0,0], 0, 10, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:45:01.535, 4586150488957828764\n", + "[2016-02-27 00:00:00.0,3], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:45:01.535, 4586150488957828764\n", + "[2016-02-27 00:00:00.0,2], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:45:01.535, 4586150488957828764\n", + "[2016-01-31 00:00:00.0,1], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:46:52.747, 2409855101226645120\n", + "[2016-01-31 00:00:00.0,0], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:46:52.747, 2409855101226645120\n", + "[2016-01-31 00:00:00.0,3], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:46:52.747, 2409855101226645120\n", + "[2016-01-31 00:00:00.0,2], 0, 4, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:46:52.747, 2409855101226645120\n", + "[2016-01-31 00:00:00.0,5], 0, 12, 1, 1948, 0, 0, 0, 0, 2024-12-09 12:46:52.747, 2409855101226645120\n", + "[2016-01-31 00:00:00.0,4], 0, 6, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:46:52.747, 2409855101226645120\n", + "[2016-01-31 00:00:00.0,7], 0, 8, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:46:52.747, 2409855101226645120\n", + "[2016-01-31 00:00:00.0,6], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:46:52.747, 2409855101226645120\n", + "[2016-02-03 00:00:00.0,1], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:43:52.695, 1468997755035645627\n", + "[2016-02-03 00:00:00.0,2], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:43:52.695, 1468997755035645627\n", + "[2016-02-03 00:00:00.0,0], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:43:52.695, 1468997755035645627\n", + "[2016-02-27 00:00:00.0,13], 0, 5, 1, 1749, 0, 0, 0, 0, 2024-12-09 12:45:01.535, 4586150488957828764\n", + "[2016-02-27 00:00:00.0,12], 0, 5, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:45:01.535, 4586150488957828764\n", + "[2016-02-27 00:00:00.0,15], 0, 5, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:45:01.535, 4586150488957828764\n", + "[2016-02-27 00:00:00.0,14], 0, 9, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:45:01.535, 4586150488957828764\n", + "[2016-02-27 00:00:00.0,9], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:45:01.535, 4586150488957828764\n", + "[2016-02-27 00:00:00.0,8], 0, 9, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:45:01.535, 4586150488957828764\n", + "[2016-02-27 00:00:00.0,11], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:45:01.535, 4586150488957828764\n", + "[2016-02-27 00:00:00.0,10], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:45:01.535, 4586150488957828764\n", + "[2016-02-03 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:43:52.695, 1468997755035645627\n", + "[2016-02-03 00:00:00.0,10], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:43:52.695, 1468997755035645627\n", + "[2016-02-03 00:00:00.0,8], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:43:52.695, 1468997755035645627\n", + "[2016-02-03 00:00:00.0,3], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:43:52.695, 1468997755035645627\n", + "[2016-02-03 00:00:00.0,4], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:43:52.695, 1468997755035645627\n", + "[2016-01-31 00:00:00.0,9], 0, 9, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:46:52.747, 2409855101226645120\n", + "[2016-01-31 00:00:00.0,8], 0, 7, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:46:52.747, 2409855101226645120\n", + "[2016-01-31 00:00:00.0,11], 0, 8, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:46:52.747, 2409855101226645120\n", + "[2016-02-03 00:00:00.0,15], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:43:52.695, 1468997755035645627\n", + "[2016-01-31 00:00:00.0,10], 0, 14, 1, 1989, 0, 0, 0, 0, 2024-12-09 12:46:52.747, 2409855101226645120\n", + "[2016-01-31 00:00:00.0,13], 0, 12, 1, 2001, 0, 0, 0, 0, 2024-12-09 12:46:52.747, 2409855101226645120\n", + "[2016-02-03 00:00:00.0,13], 0, 6, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:43:52.695, 1468997755035645627\n", + "[2016-01-31 00:00:00.0,12], 0, 8, 1, 1836, 0, 0, 0, 0, 2024-12-09 12:46:52.747, 2409855101226645120\n", + "[2016-02-03 00:00:00.0,14], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:43:52.695, 1468997755035645627\n", + "[2016-01-31 00:00:00.0,15], 0, 12, 1, 1924, 0, 0, 0, 0, 2024-12-09 12:46:52.747, 2409855101226645120\n", + "[2016-02-03 00:00:00.0,11], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:43:52.695, 1468997755035645627\n", + "[2016-01-31 00:00:00.0,14], 0, 4, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:46:52.747, 2409855101226645120\n", + "[2016-02-03 00:00:00.0,12], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:43:52.695, 1468997755035645627\n", + "[2016-02-06 00:00:00.0,14], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:46:54.481, 1543223858918606188\n", + "[2016-02-06 00:00:00.0,13], 0, 10, 1, 1926, 0, 0, 0, 0, 2024-12-09 12:46:54.481, 1543223858918606188\n", + "[2016-02-06 00:00:00.0,12], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:54.481, 1543223858918606188\n", + "[2016-02-06 00:00:00.0,11], 0, 9, 1, 1888, 0, 0, 0, 0, 2024-12-09 12:46:54.481, 1543223858918606188\n", + "[2016-02-06 00:00:00.0,10], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:46:54.481, 1543223858918606188\n", + "[2016-02-06 00:00:00.0,9], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:46:54.481, 1543223858918606188\n", + "[2016-02-06 00:00:00.0,8], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:46:54.481, 1543223858918606188\n", + "[2016-02-06 00:00:00.0,7], 0, 5, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:46:54.481, 1543223858918606188\n", + "[2016-02-06 00:00:00.0,15], 0, 4, 1, 1752, 0, 0, 0, 0, 2024-12-09 12:46:54.481, 1543223858918606188\n", + "[2016-01-28 00:00:00.0,0], 0, 6, 1, 1811, 0, 0, 0, 0, 2024-12-09 12:45:21.998, 6874686833659729620\n", + "[2016-01-28 00:00:00.0,1], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:45:21.998, 6874686833659729620\n", + "[2016-01-28 00:00:00.0,2], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:45:21.998, 6874686833659729620\n", + "[2016-01-28 00:00:00.0,3], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:45:21.998, 6874686833659729620\n", + "[2016-02-18 00:00:00.0,0], 0, 13, 1, 1993, 0, 0, 0, 0, 2024-12-09 12:45:25.793, 5901344402629239805\n", + "[2016-02-18 00:00:00.0,3], 0, 11, 1, 1952, 0, 0, 0, 0, 2024-12-09 12:45:25.793, 5901344402629239805\n", + "[2016-02-18 00:00:00.0,4], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:45:25.793, 5901344402629239805\n", + "[2016-02-18 00:00:00.0,1], 0, 13, 1, 1967, 0, 0, 0, 0, 2024-12-09 12:45:25.793, 5901344402629239805\n", + "[2016-02-18 00:00:00.0,2], 0, 15, 1, 2011, 0, 0, 0, 0, 2024-12-09 12:45:25.793, 5901344402629239805\n", + "[2016-02-15 00:00:00.0,11], 0, 9, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:47:11.692, 5873928476549215263\n", + "[2016-02-15 00:00:00.0,10], 0, 10, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:47:11.692, 5873928476549215263\n", + "[2016-02-15 00:00:00.0,13], 0, 14, 1, 1991, 0, 0, 0, 0, 2024-12-09 12:47:11.692, 5873928476549215263\n", + "[2016-02-15 00:00:00.0,12], 0, 17, 1, 2055, 0, 0, 0, 0, 2024-12-09 12:47:11.692, 5873928476549215263\n", + "[2016-02-15 00:00:00.0,15], 0, 10, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:47:11.692, 5873928476549215263\n", + "[2016-02-15 00:00:00.0,14], 0, 7, 1, 1774, 0, 0, 0, 0, 2024-12-09 12:47:11.692, 5873928476549215263\n", + "[2016-01-19 00:00:00.0,13], 0, 9, 1, 1885, 0, 0, 0, 0, 2024-12-09 12:45:57.844, 5589905970656582286\n", + "[2016-02-18 00:00:00.0,7], 0, 9, 1, 1844, 0, 0, 0, 0, 2024-12-09 12:45:25.793, 5901344402629239805\n", + "[2016-01-19 00:00:00.0,14], 0, 12, 1, 1949, 0, 0, 0, 0, 2024-12-09 12:45:57.844, 5589905970656582286\n", + "[2016-02-18 00:00:00.0,8], 0, 6, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:45:25.793, 5901344402629239805\n", + "[2016-01-19 00:00:00.0,15], 0, 16, 1, 2033, 0, 0, 0, 0, 2024-12-09 12:45:57.844, 5589905970656582286\n", + "[2016-02-18 00:00:00.0,5], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:45:25.793, 5901344402629239805\n", + "[2016-02-18 00:00:00.0,6], 0, 10, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:45:25.793, 5901344402629239805\n", + "[2016-01-19 00:00:00.0,9], 0, 8, 1, 1860, 0, 0, 0, 0, 2024-12-09 12:45:57.844, 5589905970656582286\n", + "[2016-02-18 00:00:00.0,11], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:45:25.793, 5901344402629239805\n", + "[2016-01-19 00:00:00.0,10], 0, 13, 1, 1973, 0, 0, 0, 0, 2024-12-09 12:45:57.844, 5589905970656582286\n", + "[2016-02-18 00:00:00.0,12], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:45:25.793, 5901344402629239805\n", + "[2016-01-19 00:00:00.0,11], 0, 7, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:45:57.844, 5589905970656582286\n", + "[2016-02-18 00:00:00.0,9], 0, 10, 1, 1879, 0, 0, 0, 0, 2024-12-09 12:45:25.793, 5901344402629239805\n", + "[2016-01-19 00:00:00.0,12], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:45:57.844, 5589905970656582286\n", + "[2016-02-18 00:00:00.0,10], 0, 8, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:45:25.793, 5901344402629239805\n", + "[2016-01-19 00:00:00.0,5], 0, 11, 1, 1907, 0, 0, 0, 0, 2024-12-09 12:45:57.844, 5589905970656582286\n", + "[2016-02-18 00:00:00.0,15], 0, 9, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:45:25.793, 5901344402629239805\n", + "[2016-01-19 00:00:00.0,6], 0, 7, 1, 1822, 0, 0, 0, 0, 2024-12-09 12:45:57.844, 5589905970656582286\n", + "[2016-01-19 00:00:00.0,7], 0, 12, 1, 1950, 0, 0, 0, 0, 2024-12-09 12:45:57.844, 5589905970656582286\n", + "[2016-02-18 00:00:00.0,13], 0, 10, 1, 1890, 0, 0, 0, 0, 2024-12-09 12:45:25.793, 5901344402629239805\n", + "[2016-01-19 00:00:00.0,8], 0, 9, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:45:57.844, 5589905970656582286\n", + "[2016-02-18 00:00:00.0,14], 0, 7, 1, 1800, 0, 0, 0, 0, 2024-12-09 12:45:25.793, 5901344402629239805\n", + "[2016-01-19 00:00:00.0,1], 0, 10, 1, 1907, 0, 0, 0, 0, 2024-12-09 12:45:57.844, 5589905970656582286\n", + "[2016-01-19 00:00:00.0,2], 0, 7, 1, 1799, 0, 0, 0, 0, 2024-12-09 12:45:57.844, 5589905970656582286\n", + "[2016-01-19 00:00:00.0,3], 0, 8, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:45:57.844, 5589905970656582286\n", + "[2016-01-19 00:00:00.0,4], 0, 7, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:45:57.844, 5589905970656582286\n", + "[2016-03-02 00:00:00.0,15], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:46:42.889, 8156841273051473522\n", + "[2016-03-02 00:00:00.0,14], 0, 5, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:46:42.889, 8156841273051473522\n", + "[2016-03-02 00:00:00.0,13], 0, 7, 1, 1844, 0, 0, 0, 0, 2024-12-09 12:46:42.889, 8156841273051473522\n", + "[2015-12-18 00:00:00.0,0], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:46:51.912, 3607478450924604867\n", + "[2016-03-02 00:00:00.0,12], 0, 8, 1, 1882, 0, 0, 0, 0, 2024-12-09 12:46:42.889, 8156841273051473522\n", + "[2015-12-18 00:00:00.0,1], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:46:51.912, 3607478450924604867\n", + "[2016-03-02 00:00:00.0,11], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:46:42.889, 8156841273051473522\n", + "[2015-12-18 00:00:00.0,2], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:46:51.912, 3607478450924604867\n", + "[2016-03-02 00:00:00.0,10], 0, 7, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:46:42.889, 8156841273051473522\n", + "[2015-12-18 00:00:00.0,3], 0, 5, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:46:51.912, 3607478450924604867\n", + "[2016-03-02 00:00:00.0,9], 0, 5, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:46:42.889, 8156841273051473522\n", + "[2015-12-18 00:00:00.0,4], 0, 10, 1, 1885, 0, 0, 0, 0, 2024-12-09 12:46:51.912, 3607478450924604867\n", + "[2016-03-02 00:00:00.0,8], 0, 6, 1, 1810, 0, 0, 0, 0, 2024-12-09 12:46:42.889, 8156841273051473522\n", + "[2016-06-07 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:11.524, 524119032376137387\n", + "[2016-03-02 00:00:00.0,7], 0, 10, 1, 1838, 0, 0, 0, 0, 2024-12-09 12:46:42.889, 8156841273051473522\n", + "[2016-03-02 00:00:00.0,6], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:46:42.889, 8156841273051473522\n", + "[2016-03-02 00:00:00.0,5], 0, 10, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:46:42.889, 8156841273051473522\n", + "[2016-03-02 00:00:00.0,4], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:46:42.889, 8156841273051473522\n", + "[2016-03-02 00:00:00.0,3], 0, 5, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:46:42.889, 8156841273051473522\n", + "[2016-03-02 00:00:00.0,2], 0, 3, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:46:42.889, 8156841273051473522\n", + "[2016-03-02 00:00:00.0,1], 0, 3, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:46:42.889, 8156841273051473522\n", + "[2016-03-02 00:00:00.0,0], 0, 5, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:46:42.889, 8156841273051473522\n", + "[2015-12-18 00:00:00.0,13], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:46:51.912, 3607478450924604867\n", + "[2015-12-18 00:00:00.0,14], 0, 9, 1, 1844, 0, 0, 0, 0, 2024-12-09 12:46:51.912, 3607478450924604867\n", + "[2015-12-18 00:00:00.0,15], 0, 7, 1, 1796, 0, 0, 0, 0, 2024-12-09 12:46:51.912, 3607478450924604867\n", + "[2015-12-18 00:00:00.0,5], 0, 3, 1, 1666, 0, 0, 0, 0, 2024-12-09 12:46:51.912, 3607478450924604867\n", + "[2015-12-18 00:00:00.0,6], 0, 9, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:46:51.912, 3607478450924604867\n", + "[2015-12-18 00:00:00.0,7], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:46:51.912, 3607478450924604867\n", + "[2015-12-18 00:00:00.0,8], 0, 4, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:46:51.912, 3607478450924604867\n", + "[2015-12-18 00:00:00.0,9], 0, 7, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:46:51.912, 3607478450924604867\n", + "[2015-12-18 00:00:00.0,10], 0, 6, 1, 1788, 0, 0, 0, 0, 2024-12-09 12:46:51.912, 3607478450924604867\n", + "[2015-12-18 00:00:00.0,11], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:46:51.912, 3607478450924604867\n", + "[2015-12-18 00:00:00.0,12], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:51.912, 3607478450924604867\n", + "[2016-02-16 00:00:00.0,13], 0, 12, 1, 1925, 0, 0, 0, 0, 2024-12-09 12:46:47.743, 5448262185671675529\n", + "[2015-11-18 00:00:00.0,0], 0, 8, 1, 1838, 0, 0, 0, 0, 2024-12-09 12:45:18.417, 4210838914778407765\n", + "[2016-02-16 00:00:00.0,12], 0, 12, 1, 1881, 0, 0, 0, 0, 2024-12-09 12:46:47.743, 5448262185671675529\n", + "[2015-11-18 00:00:00.0,1], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:45:18.417, 4210838914778407765\n", + "[2016-02-16 00:00:00.0,11], 0, 9, 1, 1889, 0, 0, 0, 0, 2024-12-09 12:46:47.743, 5448262185671675529\n", + "[2015-11-18 00:00:00.0,2], 0, 3, 1, 1665, 0, 0, 0, 0, 2024-12-09 12:45:18.417, 4210838914778407765\n", + "[2016-02-16 00:00:00.0,10], 0, 7, 1, 1846, 0, 0, 0, 0, 2024-12-09 12:46:47.743, 5448262185671675529\n", + "[2015-11-18 00:00:00.0,3], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:45:18.417, 4210838914778407765\n", + "[2016-02-16 00:00:00.0,9], 0, 10, 1, 1911, 0, 0, 0, 0, 2024-12-09 12:46:47.743, 5448262185671675529\n", + "[2015-11-18 00:00:00.0,4], 0, 9, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:45:18.417, 4210838914778407765\n", + "[2016-02-16 00:00:00.0,8], 0, 7, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:46:47.743, 5448262185671675529\n", + "[2015-11-18 00:00:00.0,5], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:45:18.417, 4210838914778407765\n", + "[2016-02-16 00:00:00.0,7], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:46:47.743, 5448262185671675529\n", + "[2015-11-18 00:00:00.0,6], 0, 5, 1, 1749, 0, 0, 0, 0, 2024-12-09 12:45:18.417, 4210838914778407765\n", + "[2016-02-16 00:00:00.0,6], 0, 5, 1, 1752, 0, 0, 0, 0, 2024-12-09 12:46:47.743, 5448262185671675529\n", + "[2015-11-18 00:00:00.0,7], 0, 7, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:45:18.417, 4210838914778407765\n", + "[2016-02-16 00:00:00.0,15], 0, 15, 1, 1988, 0, 0, 0, 0, 2024-12-09 12:46:47.743, 5448262185671675529\n", + "[2016-02-16 00:00:00.0,14], 0, 7, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:46:47.743, 5448262185671675529\n", + "[2016-02-16 00:00:00.0,5], 0, 8, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:46:47.743, 5448262185671675529\n", + "[2015-11-18 00:00:00.0,8], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:45:18.417, 4210838914778407765\n", + "[2016-02-16 00:00:00.0,4], 0, 6, 1, 1811, 0, 0, 0, 0, 2024-12-09 12:46:47.743, 5448262185671675529\n", + "[2015-11-18 00:00:00.0,9], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:45:18.417, 4210838914778407765\n", + "[2016-02-16 00:00:00.0,3], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:46:47.743, 5448262185671675529\n", + "[2015-11-18 00:00:00.0,10], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:45:18.417, 4210838914778407765\n", + "[2016-02-16 00:00:00.0,2], 0, 9, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:46:47.743, 5448262185671675529\n", + "[2015-11-18 00:00:00.0,11], 0, 9, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:45:18.417, 4210838914778407765\n", + "[2016-02-16 00:00:00.0,1], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:46:47.743, 5448262185671675529\n", + "[2015-11-18 00:00:00.0,12], 0, 4, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:45:18.417, 4210838914778407765\n", + "[2016-02-16 00:00:00.0,0], 0, 14, 1, 1990, 0, 0, 0, 0, 2024-12-09 12:46:47.743, 5448262185671675529\n", + "[2015-11-18 00:00:00.0,13], 0, 5, 1, 1772, 0, 0, 0, 0, 2024-12-09 12:45:18.417, 4210838914778407765\n", + "[2015-11-18 00:00:00.0,14], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:45:18.417, 4210838914778407765\n", + "[2015-11-18 00:00:00.0,15], 0, 2, 1, 1619, 0, 0, 0, 0, 2024-12-09 12:45:18.417, 4210838914778407765\n", + "[2016-05-23 00:00:00.0,3], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:20.44, 7992852081491731730\n", + "[2016-09-05 00:00:00.0,14], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:48:09.215, 3134052137995831760\n", + "[2016-05-23 00:00:00.0,2], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:46:20.44, 7992852081491731730\n", + "[2016-05-23 00:00:00.0,5], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:46:20.44, 7992852081491731730\n", + "[2016-05-23 00:00:00.0,4], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:46:20.44, 7992852081491731730\n", + "[2016-05-23 00:00:00.0,1], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:46:20.44, 7992852081491731730\n", + "[2016-09-05 00:00:00.0,6], 0, 3, 1, 1731, 0, 0, 0, 0, 2024-12-09 12:48:09.215, 3134052137995831760\n", + "[2016-09-05 00:00:00.0,9], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:48:09.215, 3134052137995831760\n", + "[2016-09-05 00:00:00.0,8], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:48:09.215, 3134052137995831760\n", + "[2016-09-05 00:00:00.0,11], 0, 4, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:48:09.215, 3134052137995831760\n", + "[2016-09-05 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:09.215, 3134052137995831760\n", + "[2016-09-05 00:00:00.0,13], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:48:09.215, 3134052137995831760\n", + "[2016-09-05 00:00:00.0,12], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:48:09.215, 3134052137995831760\n", + "[2016-09-05 00:00:00.0,1], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:09.215, 3134052137995831760\n", + "[2016-09-05 00:00:00.0,0], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:48:09.215, 3134052137995831760\n", + "[2016-09-05 00:00:00.0,3], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:48:09.215, 3134052137995831760\n", + "[2016-05-23 00:00:00.0,15], 0, 3, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:46:20.44, 7992852081491731730\n", + "[2016-09-05 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:09.215, 3134052137995831760\n", + "[2016-05-23 00:00:00.0,14], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:46:20.44, 7992852081491731730\n", + "[2016-09-05 00:00:00.0,5], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:48:09.215, 3134052137995831760\n", + "[2016-09-05 00:00:00.0,4], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:48:09.215, 3134052137995831760\n", + "[2016-05-23 00:00:00.0,11], 0, 2, 1, 1613, 0, 0, 0, 0, 2024-12-09 12:46:20.44, 7992852081491731730\n", + "[2016-05-23 00:00:00.0,10], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:46:20.44, 7992852081491731730\n", + "[2016-05-23 00:00:00.0,13], 0, 3, 1, 1677, 0, 0, 0, 0, 2024-12-09 12:46:20.44, 7992852081491731730\n", + "[2016-05-23 00:00:00.0,12], 0, 2, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:46:20.44, 7992852081491731730\n", + "[2016-05-23 00:00:00.0,7], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:46:20.44, 7992852081491731730\n", + "[2016-05-23 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:20.44, 7992852081491731730\n", + "[2016-05-23 00:00:00.0,9], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:46:20.44, 7992852081491731730\n", + "[2016-05-23 00:00:00.0,8], 0, 3, 1, 1677, 0, 0, 0, 0, 2024-12-09 12:46:20.44, 7992852081491731730\n", + "[2015-12-03 00:00:00.0,2], 0, 7, 1, 1799, 0, 0, 0, 0, 2024-12-09 12:45:35.112, 4494665636971899054\n", + "[2015-12-03 00:00:00.0,3], 0, 7, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:45:35.112, 4494665636971899054\n", + "[2016-02-23 00:00:00.0,0], 0, 6, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:44:24.038, 9138647892880209211\n", + "[2015-12-03 00:00:00.0,4], 0, 5, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:45:35.112, 4494665636971899054\n", + "[2015-12-03 00:00:00.0,5], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:35.112, 4494665636971899054\n", + "[2015-12-03 00:00:00.0,6], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:45:35.112, 4494665636971899054\n", + "[2015-12-03 00:00:00.0,7], 0, 8, 1, 1838, 0, 0, 0, 0, 2024-12-09 12:45:35.112, 4494665636971899054\n", + "[2015-12-03 00:00:00.0,8], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:35.112, 4494665636971899054\n", + "[2015-12-03 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:35.112, 4494665636971899054\n", + "[2015-12-03 00:00:00.0,0], 0, 6, 1, 1773, 0, 0, 0, 0, 2024-12-09 12:45:35.112, 4494665636971899054\n", + "[2015-12-03 00:00:00.0,1], 0, 9, 1, 1846, 0, 0, 0, 0, 2024-12-09 12:45:35.112, 4494665636971899054\n", + "[2015-12-03 00:00:00.0,10], 0, 14, 1, 2016, 0, 0, 0, 0, 2024-12-09 12:45:35.112, 4494665636971899054\n", + "[2015-12-03 00:00:00.0,11], 0, 5, 1, 1771, 0, 0, 0, 0, 2024-12-09 12:45:35.112, 4494665636971899054\n", + "[2015-12-03 00:00:00.0,12], 0, 7, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:45:35.112, 4494665636971899054\n", + "[2015-12-03 00:00:00.0,13], 0, 6, 1, 1791, 0, 0, 0, 0, 2024-12-09 12:45:35.112, 4494665636971899054\n", + "[2015-12-03 00:00:00.0,14], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:45:35.112, 4494665636971899054\n", + "[2015-12-03 00:00:00.0,15], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:45:35.112, 4494665636971899054\n", + "[2016-05-16 00:00:00.0,15], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:03.804, 1607327319252204888\n", + "[2016-05-16 00:00:00.0,13], 0, 3, 1, 1730, 0, 0, 0, 0, 2024-12-09 12:48:03.804, 1607327319252204888\n", + "[2016-05-16 00:00:00.0,14], 0, 3, 1, 1731, 0, 0, 0, 0, 2024-12-09 12:48:03.804, 1607327319252204888\n", + "[2016-05-16 00:00:00.0,11], 0, 6, 1, 1765, 0, 0, 0, 0, 2024-12-09 12:48:03.804, 1607327319252204888\n", + "[2016-05-16 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:03.804, 1607327319252204888\n", + "[2016-05-16 00:00:00.0,1], 0, 4, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:48:03.804, 1607327319252204888\n", + "[2016-05-16 00:00:00.0,2], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:48:03.804, 1607327319252204888\n", + "[2016-05-16 00:00:00.0,0], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:03.804, 1607327319252204888\n", + "[2016-05-16 00:00:00.0,9], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:48:03.804, 1607327319252204888\n", + "[2016-05-16 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:03.804, 1607327319252204888\n", + "[2016-05-16 00:00:00.0,7], 0, 2, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:48:03.804, 1607327319252204888\n", + "[2016-05-16 00:00:00.0,8], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:03.804, 1607327319252204888\n", + "[2016-05-16 00:00:00.0,6], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:48:03.804, 1607327319252204888\n", + "[2016-05-16 00:00:00.0,3], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:48:03.804, 1607327319252204888\n", + "[2016-05-16 00:00:00.0,4], 0, 4, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:48:03.804, 1607327319252204888\n", + "[2016-02-23 00:00:00.0,15], 0, 5, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:44:24.038, 9138647892880209211\n", + "[2016-02-23 00:00:00.0,13], 0, 2, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:44:24.038, 9138647892880209211\n", + "[2016-02-23 00:00:00.0,14], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:44:24.038, 9138647892880209211\n", + "[2016-02-23 00:00:00.0,11], 0, 7, 1, 1775, 0, 0, 0, 0, 2024-12-09 12:44:24.038, 9138647892880209211\n", + "[2016-02-23 00:00:00.0,12], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:44:24.038, 9138647892880209211\n", + "[2016-02-23 00:00:00.0,9], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:44:24.038, 9138647892880209211\n", + "[2016-02-23 00:00:00.0,10], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:44:24.038, 9138647892880209211\n", + "[2016-02-23 00:00:00.0,7], 0, 4, 1, 1752, 0, 0, 0, 0, 2024-12-09 12:44:24.038, 9138647892880209211\n", + "[2016-02-23 00:00:00.0,8], 0, 6, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:44:24.038, 9138647892880209211\n", + "[2016-02-23 00:00:00.0,5], 0, 5, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:44:24.038, 9138647892880209211\n", + "[2016-02-23 00:00:00.0,6], 0, 7, 1, 1798, 0, 0, 0, 0, 2024-12-09 12:44:24.038, 9138647892880209211\n", + "[2016-02-23 00:00:00.0,3], 0, 5, 1, 1774, 0, 0, 0, 0, 2024-12-09 12:44:24.038, 9138647892880209211\n", + "[2016-02-23 00:00:00.0,4], 0, 7, 1, 1795, 0, 0, 0, 0, 2024-12-09 12:44:24.038, 9138647892880209211\n", + "[2016-02-23 00:00:00.0,1], 0, 6, 1, 1791, 0, 0, 0, 0, 2024-12-09 12:44:24.038, 9138647892880209211\n", + "[2016-02-23 00:00:00.0,2], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:44:24.038, 9138647892880209211\n", + "[2015-11-03 00:00:00.0,9], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:46:42.077, 5140997795185551455\n", + "[2016-01-17 00:00:00.0,6], 0, 29, 1, 2365, 0, 0, 0, 0, 2024-12-09 12:44:49.313, 289449735807760357\n", + "[2015-11-03 00:00:00.0,8], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:46:42.077, 5140997795185551455\n", + "[2016-01-17 00:00:00.0,5], 0, 15, 1, 2035, 0, 0, 0, 0, 2024-12-09 12:44:49.313, 289449735807760357\n", + "[2015-11-03 00:00:00.0,7], 0, 4, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:46:42.077, 5140997795185551455\n", + "[2016-01-17 00:00:00.0,8], 0, 9, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:44:49.313, 289449735807760357\n", + "[2015-11-03 00:00:00.0,6], 0, 6, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:46:42.077, 5140997795185551455\n", + "[2016-01-17 00:00:00.0,7], 0, 15, 1, 1941, 0, 0, 0, 0, 2024-12-09 12:44:49.313, 289449735807760357\n", + "[2015-11-03 00:00:00.0,13], 0, 7, 1, 1776, 0, 0, 0, 0, 2024-12-09 12:46:42.077, 5140997795185551455\n", + "[2016-01-17 00:00:00.0,2], 0, 14, 1, 1921, 0, 0, 0, 0, 2024-12-09 12:44:49.313, 289449735807760357\n", + "[2015-11-03 00:00:00.0,12], 0, 3, 1, 1732, 0, 0, 0, 0, 2024-12-09 12:46:42.077, 5140997795185551455\n", + "[2016-01-17 00:00:00.0,1], 0, 8, 1, 1791, 0, 0, 0, 0, 2024-12-09 12:44:49.313, 289449735807760357\n", + "[2015-11-03 00:00:00.0,11], 0, 3, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:46:42.077, 5140997795185551455\n", + "[2016-01-17 00:00:00.0,4], 0, 12, 1, 1922, 0, 0, 0, 0, 2024-12-09 12:44:49.313, 289449735807760357\n", + "[2015-11-03 00:00:00.0,10], 0, 5, 1, 1771, 0, 0, 0, 0, 2024-12-09 12:46:42.077, 5140997795185551455\n", + "[2016-01-17 00:00:00.0,3], 0, 16, 1, 1981, 0, 0, 0, 0, 2024-12-09 12:44:49.313, 289449735807760357\n", + "[2015-11-03 00:00:00.0,15], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:46:42.077, 5140997795185551455\n", + "[2016-01-17 00:00:00.0,0], 0, 15, 1, 1987, 0, 0, 0, 0, 2024-12-09 12:44:49.313, 289449735807760357\n", + "[2016-02-08 00:00:00.0,15], 0, 8, 1, 1816, 0, 0, 0, 0, 2024-12-09 12:44:22.71, 6934084848132535395\n", + "[2015-11-03 00:00:00.0,14], 0, 4, 1, 1704, 0, 0, 0, 0, 2024-12-09 12:46:42.077, 5140997795185551455\n", + "[2016-02-08 00:00:00.0,9], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:44:22.71, 6934084848132535395\n", + "[2015-11-25 00:00:00.0,2], 0, 3, 1, 1730, 0, 0, 0, 0, 2024-12-09 12:44:10.167, 8469435230673381991\n", + "[2016-02-08 00:00:00.0,10], 0, 4, 1, 1710, 0, 0, 0, 0, 2024-12-09 12:44:22.71, 6934084848132535395\n", + "[2015-11-25 00:00:00.0,1], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:10.167, 8469435230673381991\n", + "[2016-02-08 00:00:00.0,7], 0, 6, 1, 1765, 0, 0, 0, 0, 2024-12-09 12:44:22.71, 6934084848132535395\n", + "[2015-11-25 00:00:00.0,0], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:44:10.167, 8469435230673381991\n", + "[2016-02-08 00:00:00.0,8], 0, 3, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:44:22.71, 6934084848132535395\n", + "[2016-02-08 00:00:00.0,13], 0, 2, 1, 1612, 0, 0, 0, 0, 2024-12-09 12:44:22.71, 6934084848132535395\n", + "[2016-02-08 00:00:00.0,14], 0, 5, 1, 1743, 0, 0, 0, 0, 2024-12-09 12:44:22.71, 6934084848132535395\n", + "[2016-02-08 00:00:00.0,11], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:22.71, 6934084848132535395\n", + "[2016-02-08 00:00:00.0,12], 0, 5, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:44:22.71, 6934084848132535395\n", + "[2015-11-03 00:00:00.0,1], 0, 5, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:46:42.077, 5140997795185551455\n", + "[2016-02-08 00:00:00.0,1], 0, 3, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:44:22.71, 6934084848132535395\n", + "[2015-11-03 00:00:00.0,0], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:46:42.077, 5140997795185551455\n", + "[2016-02-08 00:00:00.0,2], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:22.71, 6934084848132535395\n", + "[2016-02-08 00:00:00.0,0], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:44:22.71, 6934084848132535395\n", + "[2015-11-03 00:00:00.0,5], 0, 5, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:46:42.077, 5140997795185551455\n", + "[2016-02-08 00:00:00.0,5], 0, 3, 1, 1660, 0, 0, 0, 0, 2024-12-09 12:44:22.71, 6934084848132535395\n", + "[2015-11-03 00:00:00.0,4], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:46:42.077, 5140997795185551455\n", + "[2016-02-08 00:00:00.0,6], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:44:22.71, 6934084848132535395\n", + "[2015-11-03 00:00:00.0,3], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:46:42.077, 5140997795185551455\n", + "[2016-02-08 00:00:00.0,3], 0, 6, 1, 1764, 0, 0, 0, 0, 2024-12-09 12:44:22.71, 6934084848132535395\n", + "[2015-11-03 00:00:00.0,2], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:46:42.077, 5140997795185551455\n", + "[2016-02-08 00:00:00.0,4], 0, 6, 1, 1743, 0, 0, 0, 0, 2024-12-09 12:44:22.71, 6934084848132535395\n", + "[2015-11-25 00:00:00.0,15], 0, 2, 1, 1620, 0, 0, 0, 0, 2024-12-09 12:44:10.167, 8469435230673381991\n", + "[2015-11-25 00:00:00.0,14], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:44:10.167, 8469435230673381991\n", + "[2015-11-25 00:00:00.0,13], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:44:10.167, 8469435230673381991\n", + "[2015-11-25 00:00:00.0,12], 0, 3, 1, 1730, 0, 0, 0, 0, 2024-12-09 12:44:10.167, 8469435230673381991\n", + "[2015-11-25 00:00:00.0,11], 0, 7, 1, 1800, 0, 0, 0, 0, 2024-12-09 12:44:10.167, 8469435230673381991\n", + "[2015-11-25 00:00:00.0,10], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:44:10.167, 8469435230673381991\n", + "[2015-11-25 00:00:00.0,9], 0, 5, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:44:10.167, 8469435230673381991\n", + "[2015-11-25 00:00:00.0,8], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:44:10.167, 8469435230673381991\n", + "[2015-11-25 00:00:00.0,7], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:44:10.167, 8469435230673381991\n", + "[2015-11-25 00:00:00.0,6], 0, 9, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:44:10.167, 8469435230673381991\n", + "[2015-11-25 00:00:00.0,5], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:44:10.167, 8469435230673381991\n", + "[2015-11-25 00:00:00.0,4], 0, 7, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:44:10.167, 8469435230673381991\n", + "[2015-11-25 00:00:00.0,3], 0, 7, 1, 1775, 0, 0, 0, 0, 2024-12-09 12:44:10.167, 8469435230673381991\n", + "[2016-01-17 00:00:00.0,14], 0, 18, 1, 2034, 0, 0, 0, 0, 2024-12-09 12:44:49.313, 289449735807760357\n", + "[2016-01-17 00:00:00.0,13], 0, 14, 1, 1995, 0, 0, 0, 0, 2024-12-09 12:44:49.313, 289449735807760357\n", + "[2016-01-17 00:00:00.0,15], 0, 10, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:44:49.313, 289449735807760357\n", + "[2016-01-17 00:00:00.0,10], 0, 13, 1, 1903, 0, 0, 0, 0, 2024-12-09 12:44:49.313, 289449735807760357\n", + "[2016-01-17 00:00:00.0,9], 0, 12, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:44:49.313, 289449735807760357\n", + "[2016-01-17 00:00:00.0,12], 0, 11, 1, 1914, 0, 0, 0, 0, 2024-12-09 12:44:49.313, 289449735807760357\n", + "[2016-01-17 00:00:00.0,11], 0, 12, 1, 1909, 0, 0, 0, 0, 2024-12-09 12:44:49.313, 289449735807760357\n", + "[2015-11-10 00:00:00.0,0], 0, 2, 1, 1710, 0, 0, 0, 0, 2024-12-09 12:45:13.398, 5926583877576317223\n", + "[2015-11-10 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:13.398, 5926583877576317223\n", + "[2015-11-10 00:00:00.0,11], 0, 2, 1, 1619, 0, 0, 0, 0, 2024-12-09 12:45:13.398, 5926583877576317223\n", + "[2015-11-10 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:13.398, 5926583877576317223\n", + "[2015-11-10 00:00:00.0,9], 0, 3, 1, 1731, 0, 0, 0, 0, 2024-12-09 12:45:13.398, 5926583877576317223\n", + "[2016-05-08 00:00:00.0,1], 0, 7, 1, 1798, 0, 0, 0, 0, 2024-12-09 12:44:03.344, 3078016927228730700\n", + "[2015-11-10 00:00:00.0,15], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:45:13.398, 5926583877576317223\n", + "[2016-05-08 00:00:00.0,0], 0, 14, 1, 1949, 0, 0, 0, 0, 2024-12-09 12:44:03.344, 3078016927228730700\n", + "[2015-11-10 00:00:00.0,14], 0, 3, 1, 1659, 0, 0, 0, 0, 2024-12-09 12:45:13.398, 5926583877576317223\n", + "[2016-05-08 00:00:00.0,3], 0, 5, 1, 1775, 0, 0, 0, 0, 2024-12-09 12:44:03.344, 3078016927228730700\n", + "[2015-11-10 00:00:00.0,13], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:45:13.398, 5926583877576317223\n", + "[2016-05-08 00:00:00.0,2], 0, 9, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:44:03.344, 3078016927228730700\n", + "[2015-11-10 00:00:00.0,4], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:45:13.398, 5926583877576317223\n", + "[2015-11-10 00:00:00.0,3], 0, 5, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:45:13.398, 5926583877576317223\n", + "[2015-11-10 00:00:00.0,2], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:45:13.398, 5926583877576317223\n", + "[2015-11-10 00:00:00.0,1], 0, 5, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:45:13.398, 5926583877576317223\n", + "[2015-11-10 00:00:00.0,8], 0, 10, 1, 1910, 0, 0, 0, 0, 2024-12-09 12:45:13.398, 5926583877576317223\n", + "[2015-11-10 00:00:00.0,7], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:45:13.398, 5926583877576317223\n", + "[2015-11-10 00:00:00.0,6], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:45:13.398, 5926583877576317223\n", + "[2015-11-10 00:00:00.0,5], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:45:13.398, 5926583877576317223\n", + "[2016-05-08 00:00:00.0,13], 0, 7, 1, 1799, 0, 0, 0, 0, 2024-12-09 12:44:03.344, 3078016927228730700\n", + "[2016-05-08 00:00:00.0,12], 0, 16, 1, 2005, 0, 0, 0, 0, 2024-12-09 12:44:03.344, 3078016927228730700\n", + "[2016-05-08 00:00:00.0,15], 0, 8, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:44:03.344, 3078016927228730700\n", + "[2016-05-08 00:00:00.0,14], 0, 8, 1, 1813, 0, 0, 0, 0, 2024-12-09 12:44:03.344, 3078016927228730700\n", + "[2016-05-08 00:00:00.0,5], 0, 13, 1, 1904, 0, 0, 0, 0, 2024-12-09 12:44:03.344, 3078016927228730700\n", + "[2016-05-08 00:00:00.0,4], 0, 7, 1, 1826, 0, 0, 0, 0, 2024-12-09 12:44:03.344, 3078016927228730700\n", + "[2016-05-08 00:00:00.0,7], 0, 6, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:44:03.344, 3078016927228730700\n", + "[2016-05-08 00:00:00.0,6], 0, 12, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:44:03.344, 3078016927228730700\n", + "[2016-05-08 00:00:00.0,9], 0, 8, 1, 1816, 0, 0, 0, 0, 2024-12-09 12:44:03.344, 3078016927228730700\n", + "[2016-05-08 00:00:00.0,8], 0, 10, 1, 1880, 0, 0, 0, 0, 2024-12-09 12:44:03.344, 3078016927228730700\n", + "[2016-05-08 00:00:00.0,11], 0, 4, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:44:03.344, 3078016927228730700\n", + "[2016-05-08 00:00:00.0,10], 0, 14, 1, 1942, 0, 0, 0, 0, 2024-12-09 12:44:03.344, 3078016927228730700\n", + "[2016-01-02 00:00:00.0,1], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:46:48.595, 1710118508550312317\n", + "[2016-01-02 00:00:00.0,2], 0, 3, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:46:48.595, 1710118508550312317\n", + "[2016-01-02 00:00:00.0,0], 0, 5, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:46:48.595, 1710118508550312317\n", + "[2016-01-02 00:00:00.0,5], 0, 4, 1, 1687, 0, 0, 0, 0, 2024-12-09 12:46:48.595, 1710118508550312317\n", + "[2016-01-02 00:00:00.0,6], 0, 4, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:46:48.595, 1710118508550312317\n", + "[2016-01-02 00:00:00.0,3], 0, 4, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:46:48.595, 1710118508550312317\n", + "[2016-01-02 00:00:00.0,4], 0, 6, 1, 1793, 0, 0, 0, 0, 2024-12-09 12:46:48.595, 1710118508550312317\n", + "[2016-01-02 00:00:00.0,9], 0, 7, 1, 1829, 0, 0, 0, 0, 2024-12-09 12:46:48.595, 1710118508550312317\n", + "[2016-05-01 00:00:00.0,15], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:46:03.969, 3526535082828934333\n", + "[2016-01-02 00:00:00.0,10], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:46:48.595, 1710118508550312317\n", + "[2016-01-02 00:00:00.0,7], 0, 3, 1, 1667, 0, 0, 0, 0, 2024-12-09 12:46:48.595, 1710118508550312317\n", + "[2016-05-01 00:00:00.0,13], 0, 9, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:46:03.969, 3526535082828934333\n", + "[2016-01-02 00:00:00.0,8], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:46:48.595, 1710118508550312317\n", + "[2016-05-01 00:00:00.0,14], 0, 11, 1, 1903, 0, 0, 0, 0, 2024-12-09 12:46:03.969, 3526535082828934333\n", + "[2016-01-02 00:00:00.0,13], 0, 8, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:46:48.595, 1710118508550312317\n", + "[2016-05-01 00:00:00.0,11], 0, 13, 1, 1924, 0, 0, 0, 0, 2024-12-09 12:46:03.969, 3526535082828934333\n", + "[2016-01-02 00:00:00.0,14], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:46:48.595, 1710118508550312317\n", + "[2016-05-01 00:00:00.0,12], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:46:03.969, 3526535082828934333\n", + "[2016-01-02 00:00:00.0,11], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:46:48.595, 1710118508550312317\n", + "[2016-05-01 00:00:00.0,9], 0, 11, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:46:03.969, 3526535082828934333\n", + "[2016-01-02 00:00:00.0,12], 0, 5, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:46:48.595, 1710118508550312317\n", + "[2016-05-01 00:00:00.0,10], 0, 5, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:46:03.969, 3526535082828934333\n", + "[2016-01-02 00:00:00.0,15], 0, 5, 1, 1722, 0, 0, 0, 0, 2024-12-09 12:46:48.595, 1710118508550312317\n", + "[2016-01-10 00:00:00.0,9], 0, 12, 1, 1879, 0, 0, 0, 0, 2024-12-09 12:44:48.449, 5733348062885919247\n", + "[2016-05-01 00:00:00.0,0], 0, 9, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:46:03.969, 3526535082828934333\n", + "[2016-01-10 00:00:00.0,8], 0, 14, 1, 1965, 0, 0, 0, 0, 2024-12-09 12:44:48.449, 5733348062885919247\n", + "[2016-01-10 00:00:00.0,7], 0, 12, 1, 1899, 0, 0, 0, 0, 2024-12-09 12:44:48.449, 5733348062885919247\n", + "[2016-01-10 00:00:00.0,6], 0, 24, 1, 2223, 0, 0, 0, 0, 2024-12-09 12:44:48.449, 5733348062885919247\n", + "[2016-01-10 00:00:00.0,13], 0, 20, 1, 2095, 0, 0, 0, 0, 2024-12-09 12:44:48.449, 5733348062885919247\n", + "[2016-01-10 00:00:00.0,12], 0, 18, 1, 2076, 0, 0, 0, 0, 2024-12-09 12:44:48.449, 5733348062885919247\n", + "[2016-01-10 00:00:00.0,11], 0, 14, 1, 2011, 0, 0, 0, 0, 2024-12-09 12:44:48.449, 5733348062885919247\n", + "[2016-01-10 00:00:00.0,10], 0, 24, 1, 2220, 0, 0, 0, 0, 2024-12-09 12:44:48.449, 5733348062885919247\n", + "[2016-05-01 00:00:00.0,7], 0, 8, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:46:03.969, 3526535082828934333\n", + "[2016-01-10 00:00:00.0,1], 0, 16, 1, 2008, 0, 0, 0, 0, 2024-12-09 12:44:48.449, 5733348062885919247\n", + "[2016-05-01 00:00:00.0,8], 0, 6, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:46:03.969, 3526535082828934333\n", + "[2016-01-10 00:00:00.0,0], 0, 16, 1, 2057, 0, 0, 0, 0, 2024-12-09 12:44:48.449, 5733348062885919247\n", + "[2016-05-01 00:00:00.0,5], 0, 4, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:46:03.969, 3526535082828934333\n", + "[2016-05-01 00:00:00.0,6], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:46:03.969, 3526535082828934333\n", + "[2016-05-01 00:00:00.0,3], 0, 7, 1, 1798, 0, 0, 0, 0, 2024-12-09 12:46:03.969, 3526535082828934333\n", + "[2016-01-10 00:00:00.0,5], 0, 15, 1, 1992, 0, 0, 0, 0, 2024-12-09 12:44:48.449, 5733348062885919247\n", + "[2016-05-01 00:00:00.0,4], 0, 7, 1, 1800, 0, 0, 0, 0, 2024-12-09 12:46:03.969, 3526535082828934333\n", + "[2016-01-10 00:00:00.0,4], 0, 12, 1, 1924, 0, 0, 0, 0, 2024-12-09 12:44:48.449, 5733348062885919247\n", + "[2016-05-01 00:00:00.0,1], 0, 10, 1, 1887, 0, 0, 0, 0, 2024-12-09 12:46:03.969, 3526535082828934333\n", + "[2016-01-10 00:00:00.0,3], 0, 19, 1, 2052, 0, 0, 0, 0, 2024-12-09 12:44:48.449, 5733348062885919247\n", + "[2016-05-01 00:00:00.0,2], 0, 6, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:46:03.969, 3526535082828934333\n", + "[2016-01-10 00:00:00.0,2], 0, 12, 1, 1904, 0, 0, 0, 0, 2024-12-09 12:44:48.449, 5733348062885919247\n", + "[2016-01-10 00:00:00.0,15], 0, 12, 1, 1927, 0, 0, 0, 0, 2024-12-09 12:44:48.449, 5733348062885919247\n", + "[2016-01-10 00:00:00.0,14], 0, 14, 1, 1989, 0, 0, 0, 0, 2024-12-09 12:44:48.449, 5733348062885919247\n", + "[2015-10-27 00:00:00.0,11], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:43.05, 2257899871624651616\n", + "[2015-10-27 00:00:00.0,12], 0, 2, 1, 1619, 0, 0, 0, 0, 2024-12-09 12:44:43.05, 2257899871624651616\n", + "[2016-01-09 00:00:00.0,6], 0, 13, 1, 1993, 0, 0, 0, 0, 2024-12-09 12:47:09.218, 2769548754621760363\n", + "[2016-01-09 00:00:00.0,7], 0, 12, 1, 1924, 0, 0, 0, 0, 2024-12-09 12:47:09.218, 2769548754621760363\n", + "[2016-01-09 00:00:00.0,8], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:47:09.218, 2769548754621760363\n", + "[2016-01-09 00:00:00.0,9], 0, 10, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:47:09.218, 2769548754621760363\n", + "[2016-01-09 00:00:00.0,2], 0, 12, 1, 1929, 0, 0, 0, 0, 2024-12-09 12:47:09.218, 2769548754621760363\n", + "[2016-01-09 00:00:00.0,3], 0, 20, 1, 2094, 0, 0, 0, 0, 2024-12-09 12:47:09.218, 2769548754621760363\n", + "[2016-01-09 00:00:00.0,4], 0, 8, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:47:09.218, 2769548754621760363\n", + "[2016-01-09 00:00:00.0,5], 0, 10, 1, 1882, 0, 0, 0, 0, 2024-12-09 12:47:09.218, 2769548754621760363\n", + "[2016-01-09 00:00:00.0,14], 0, 9, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:47:09.218, 2769548754621760363\n", + "[2016-01-09 00:00:00.0,15], 0, 16, 1, 2055, 0, 0, 0, 0, 2024-12-09 12:47:09.218, 2769548754621760363\n", + "[2016-01-09 00:00:00.0,10], 0, 10, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:47:09.218, 2769548754621760363\n", + "[2016-01-09 00:00:00.0,11], 0, 10, 1, 1885, 0, 0, 0, 0, 2024-12-09 12:47:09.218, 2769548754621760363\n", + "[2016-01-09 00:00:00.0,12], 0, 13, 1, 1950, 0, 0, 0, 0, 2024-12-09 12:47:09.218, 2769548754621760363\n", + "[2016-01-09 00:00:00.0,13], 0, 9, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:47:09.218, 2769548754621760363\n", + "[2015-12-25 00:00:00.0,5], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:45:37.614, 5800535971938759778\n", + "[2015-12-25 00:00:00.0,4], 0, 4, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:45:37.614, 5800535971938759778\n", + "[2015-10-27 00:00:00.0,8], 0, 2, 1, 1710, 0, 0, 0, 0, 2024-12-09 12:44:43.05, 2257899871624651616\n", + "[2015-12-25 00:00:00.0,7], 0, 4, 1, 1704, 0, 0, 0, 0, 2024-12-09 12:45:37.614, 5800535971938759778\n", + "[2015-10-27 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:43.05, 2257899871624651616\n", + "[2015-12-25 00:00:00.0,6], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:45:37.614, 5800535971938759778\n", + "[2015-12-25 00:00:00.0,1], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:45:37.614, 5800535971938759778\n", + "[2015-12-25 00:00:00.0,0], 0, 6, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:45:37.614, 5800535971938759778\n", + "[2015-10-27 00:00:00.0,4], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:44:43.05, 2257899871624651616\n", + "[2015-12-25 00:00:00.0,3], 0, 5, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:45:37.614, 5800535971938759778\n", + "[2015-10-27 00:00:00.0,5], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:43.05, 2257899871624651616\n", + "[2015-12-25 00:00:00.0,2], 0, 7, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:45:37.614, 5800535971938759778\n", + "[2015-10-27 00:00:00.0,6], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:44:43.05, 2257899871624651616\n", + "[2015-12-25 00:00:00.0,13], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:45:37.614, 5800535971938759778\n", + "[2015-12-25 00:00:00.0,12], 0, 6, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:45:37.614, 5800535971938759778\n", + "[2016-01-09 00:00:00.0,0], 0, 16, 1, 2009, 0, 0, 0, 0, 2024-12-09 12:47:09.218, 2769548754621760363\n", + "[2015-12-25 00:00:00.0,15], 0, 9, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:45:37.614, 5800535971938759778\n", + "[2015-10-27 00:00:00.0,1], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:43.05, 2257899871624651616\n", + "[2016-01-09 00:00:00.0,1], 0, 9, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:47:09.218, 2769548754621760363\n", + "[2015-12-25 00:00:00.0,14], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:45:37.614, 5800535971938759778\n", + "[2015-10-27 00:00:00.0,2], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:44:43.05, 2257899871624651616\n", + "[2015-12-25 00:00:00.0,9], 0, 6, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:45:37.614, 5800535971938759778\n", + "[2015-12-25 00:00:00.0,8], 0, 8, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:45:37.614, 5800535971938759778\n", + "[2015-12-25 00:00:00.0,11], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:45:37.614, 5800535971938759778\n", + "[2015-12-25 00:00:00.0,10], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:45:37.614, 5800535971938759778\n", + "[2016-02-01 00:00:00.0,0], 0, 6, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:43:50.558, 892654583169823012\n", + "[2016-02-01 00:00:00.0,2], 0, 9, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:43:50.558, 892654583169823012\n", + "[2016-02-01 00:00:00.0,1], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:43:50.558, 892654583169823012\n", + "[2016-02-01 00:00:00.0,4], 0, 8, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:43:50.558, 892654583169823012\n", + "[2016-02-01 00:00:00.0,3], 0, 4, 1, 1729, 0, 0, 0, 0, 2024-12-09 12:43:50.558, 892654583169823012\n", + "[2016-02-01 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:43:50.558, 892654583169823012\n", + "[2016-02-01 00:00:00.0,5], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:43:50.558, 892654583169823012\n", + "[2016-02-01 00:00:00.0,8], 0, 6, 1, 1791, 0, 0, 0, 0, 2024-12-09 12:43:50.558, 892654583169823012\n", + "[2016-02-01 00:00:00.0,7], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:43:50.558, 892654583169823012\n", + "[2016-02-01 00:00:00.0,10], 0, 4, 1, 1712, 0, 0, 0, 0, 2024-12-09 12:43:50.558, 892654583169823012\n", + "[2016-02-01 00:00:00.0,9], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:43:50.558, 892654583169823012\n", + "[2015-12-10 00:00:00.0,9], 0, 4, 1, 1728, 0, 0, 0, 0, 2024-12-09 12:44:21.4, 4954972693343842130\n", + "[2016-03-31 00:00:00.0,0], 0, 6, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:45:48.277, 2782268846474121870\n", + "[2015-12-10 00:00:00.0,8], 0, 9, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:44:21.4, 4954972693343842130\n", + "[2015-12-10 00:00:00.0,7], 0, 7, 1, 1775, 0, 0, 0, 0, 2024-12-09 12:44:21.4, 4954972693343842130\n", + "[2015-12-10 00:00:00.0,6], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:44:21.4, 4954972693343842130\n", + "[2015-12-10 00:00:00.0,13], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:44:21.4, 4954972693343842130\n", + "[2015-12-10 00:00:00.0,12], 0, 7, 1, 1803, 0, 0, 0, 0, 2024-12-09 12:44:21.4, 4954972693343842130\n", + "[2015-12-10 00:00:00.0,11], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:21.4, 4954972693343842130\n", + "[2015-12-10 00:00:00.0,10], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:44:21.4, 4954972693343842130\n", + "[2015-12-26 00:00:00.0,13], 0, 8, 1, 1838, 0, 0, 0, 0, 2024-12-09 12:47:18.133, 8043752156086824420\n", + "[2016-03-31 00:00:00.0,7], 0, 4, 1, 1704, 0, 0, 0, 0, 2024-12-09 12:45:48.277, 2782268846474121870\n", + "[2015-12-10 00:00:00.0,1], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:21.4, 4954972693343842130\n", + "[2016-03-17 00:00:00.0,15], 0, 10, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:44:01.24, 4639764995484379043\n", + "[2015-12-26 00:00:00.0,12], 0, 6, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:47:18.133, 8043752156086824420\n", + "[2016-03-31 00:00:00.0,8], 0, 9, 1, 1939, 0, 0, 0, 0, 2024-12-09 12:45:48.277, 2782268846474121870\n", + "[2015-12-10 00:00:00.0,0], 0, 9, 1, 1866, 0, 0, 0, 0, 2024-12-09 12:44:21.4, 4954972693343842130\n", + "[2016-03-17 00:00:00.0,14], 0, 19, 1, 2171, 0, 0, 0, 0, 2024-12-09 12:44:01.24, 4639764995484379043\n", + "[2015-12-26 00:00:00.0,15], 0, 5, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:47:18.133, 8043752156086824420\n", + "[2016-03-31 00:00:00.0,5], 0, 7, 1, 1796, 0, 0, 0, 0, 2024-12-09 12:45:48.277, 2782268846474121870\n", + "[2015-12-26 00:00:00.0,14], 0, 6, 1, 1728, 0, 0, 0, 0, 2024-12-09 12:47:18.133, 8043752156086824420\n", + "[2016-03-31 00:00:00.0,6], 0, 3, 1, 1661, 0, 0, 0, 0, 2024-12-09 12:45:48.277, 2782268846474121870\n", + "[2016-03-31 00:00:00.0,3], 0, 8, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:45:48.277, 2782268846474121870\n", + "[2015-12-10 00:00:00.0,5], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:44:21.4, 4954972693343842130\n", + "[2016-03-17 00:00:00.0,11], 0, 12, 1, 1947, 0, 0, 0, 0, 2024-12-09 12:44:01.24, 4639764995484379043\n", + "[2016-03-31 00:00:00.0,4], 0, 3, 1, 1683, 0, 0, 0, 0, 2024-12-09 12:45:48.277, 2782268846474121870\n", + "[2015-12-10 00:00:00.0,4], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:44:21.4, 4954972693343842130\n", + "[2016-03-17 00:00:00.0,10], 0, 10, 1, 1931, 0, 0, 0, 0, 2024-12-09 12:44:01.24, 4639764995484379043\n", + "[2016-03-31 00:00:00.0,1], 0, 6, 1, 1791, 0, 0, 0, 0, 2024-12-09 12:45:48.277, 2782268846474121870\n", + "[2015-12-10 00:00:00.0,3], 0, 9, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:44:21.4, 4954972693343842130\n", + "[2016-03-17 00:00:00.0,13], 0, 13, 1, 1987, 0, 0, 0, 0, 2024-12-09 12:44:01.24, 4639764995484379043\n", + "[2016-03-31 00:00:00.0,2], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:45:48.277, 2782268846474121870\n", + "[2015-12-10 00:00:00.0,2], 0, 5, 1, 1776, 0, 0, 0, 0, 2024-12-09 12:44:21.4, 4954972693343842130\n", + "[2016-03-17 00:00:00.0,12], 0, 8, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:44:01.24, 4639764995484379043\n", + "[2015-12-26 00:00:00.0,5], 0, 2, 1, 1693, 0, 0, 0, 0, 2024-12-09 12:47:18.133, 8043752156086824420\n", + "[2016-03-31 00:00:00.0,15], 0, 4, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:45:48.277, 2782268846474121870\n", + "[2016-03-17 00:00:00.0,7], 0, 8, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:44:01.24, 4639764995484379043\n", + "[2015-12-26 00:00:00.0,4], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:47:18.133, 8043752156086824420\n", + "[2015-11-26 00:00:00.0,15], 0, 5, 1, 1765, 0, 0, 0, 0, 2024-12-09 12:46:33.287, 3484441033682989966\n", + "[2016-03-17 00:00:00.0,6], 0, 14, 1, 2014, 0, 0, 0, 0, 2024-12-09 12:44:01.24, 4639764995484379043\n", + "[2015-12-26 00:00:00.0,7], 0, 7, 1, 1800, 0, 0, 0, 0, 2024-12-09 12:47:18.133, 8043752156086824420\n", + "[2016-03-31 00:00:00.0,13], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:45:48.277, 2782268846474121870\n", + "[2016-03-17 00:00:00.0,9], 0, 11, 1, 1949, 0, 0, 0, 0, 2024-12-09 12:44:01.24, 4639764995484379043\n", + "[2015-12-26 00:00:00.0,6], 0, 4, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:47:18.133, 8043752156086824420\n", + "[2016-03-31 00:00:00.0,14], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:45:48.277, 2782268846474121870\n", + "[2016-03-17 00:00:00.0,8], 0, 14, 1, 2011, 0, 0, 0, 0, 2024-12-09 12:44:01.24, 4639764995484379043\n", + "[2015-12-26 00:00:00.0,9], 0, 10, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:47:18.133, 8043752156086824420\n", + "[2016-03-31 00:00:00.0,11], 0, 9, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:45:48.277, 2782268846474121870\n", + "[2016-03-17 00:00:00.0,3], 0, 13, 1, 2037, 0, 0, 0, 0, 2024-12-09 12:44:01.24, 4639764995484379043\n", + "[2015-12-26 00:00:00.0,8], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:47:18.133, 8043752156086824420\n", + "[2016-03-31 00:00:00.0,12], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:45:48.277, 2782268846474121870\n", + "[2016-03-17 00:00:00.0,2], 0, 4, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:44:01.24, 4639764995484379043\n", + "[2015-12-26 00:00:00.0,11], 0, 9, 1, 1911, 0, 0, 0, 0, 2024-12-09 12:47:18.133, 8043752156086824420\n", + "[2016-03-31 00:00:00.0,9], 0, 10, 1, 1860, 0, 0, 0, 0, 2024-12-09 12:45:48.277, 2782268846474121870\n", + "[2016-03-17 00:00:00.0,5], 0, 12, 1, 2003, 0, 0, 0, 0, 2024-12-09 12:44:01.24, 4639764995484379043\n", + "[2015-12-26 00:00:00.0,10], 0, 5, 1, 1722, 0, 0, 0, 0, 2024-12-09 12:47:18.133, 8043752156086824420\n", + "[2016-03-31 00:00:00.0,10], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:45:48.277, 2782268846474121870\n", + "[2016-03-17 00:00:00.0,4], 0, 5, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:44:01.24, 4639764995484379043\n", + "[2016-03-17 00:00:00.0,1], 0, 16, 1, 2103, 0, 0, 0, 0, 2024-12-09 12:44:01.24, 4639764995484379043\n", + "[2016-03-17 00:00:00.0,0], 0, 9, 1, 1860, 0, 0, 0, 0, 2024-12-09 12:44:01.24, 4639764995484379043\n", + "[2015-12-26 00:00:00.0,1], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:47:18.133, 8043752156086824420\n", + "[2015-12-26 00:00:00.0,0], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:47:18.133, 8043752156086824420\n", + "[2015-12-26 00:00:00.0,3], 0, 8, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:47:18.133, 8043752156086824420\n", + "[2015-12-26 00:00:00.0,2], 0, 7, 1, 1799, 0, 0, 0, 0, 2024-12-09 12:47:18.133, 8043752156086824420\n", + "[2015-11-26 00:00:00.0,0], 0, 10, 1, 1924, 0, 0, 0, 0, 2024-12-09 12:46:33.287, 3484441033682989966\n", + "[2016-04-30 00:00:00.0,5], 0, 8, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:43:53.794, 3369659897774881596\n", + "[2016-04-30 00:00:00.0,6], 0, 6, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:43:53.794, 3369659897774881596\n", + "[2015-11-26 00:00:00.0,2], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:46:33.287, 3484441033682989966\n", + "[2016-04-30 00:00:00.0,7], 0, 15, 1, 1966, 0, 0, 0, 0, 2024-12-09 12:43:53.794, 3369659897774881596\n", + "[2015-11-26 00:00:00.0,1], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:33.287, 3484441033682989966\n", + "[2016-04-30 00:00:00.0,8], 0, 8, 1, 1816, 0, 0, 0, 0, 2024-12-09 12:43:53.794, 3369659897774881596\n", + "[2015-11-26 00:00:00.0,4], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:46:33.287, 3484441033682989966\n", + "[2016-04-30 00:00:00.0,9], 0, 7, 1, 1801, 0, 0, 0, 0, 2024-12-09 12:43:53.794, 3369659897774881596\n", + "[2015-11-26 00:00:00.0,3], 0, 9, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:46:33.287, 3484441033682989966\n", + "[2016-04-30 00:00:00.0,10], 0, 6, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:43:53.794, 3369659897774881596\n", + "[2015-11-26 00:00:00.0,6], 0, 7, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:46:33.287, 3484441033682989966\n", + "[2016-04-30 00:00:00.0,11], 0, 11, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:43:53.794, 3369659897774881596\n", + "[2015-11-26 00:00:00.0,5], 0, 6, 1, 1786, 0, 0, 0, 0, 2024-12-09 12:46:33.287, 3484441033682989966\n", + "[2016-04-30 00:00:00.0,12], 0, 9, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:43:53.794, 3369659897774881596\n", + "[2015-11-26 00:00:00.0,8], 0, 5, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:46:33.287, 3484441033682989966\n", + "[2015-11-26 00:00:00.0,7], 0, 9, 1, 1888, 0, 0, 0, 0, 2024-12-09 12:46:33.287, 3484441033682989966\n", + "[2015-11-26 00:00:00.0,10], 0, 5, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:46:33.287, 3484441033682989966\n", + "[2015-11-26 00:00:00.0,9], 0, 5, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:46:33.287, 3484441033682989966\n", + "[2016-04-30 00:00:00.0,0], 0, 9, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:43:53.794, 3369659897774881596\n", + "[2015-11-26 00:00:00.0,12], 0, 6, 1, 1786, 0, 0, 0, 0, 2024-12-09 12:46:33.287, 3484441033682989966\n", + "[2016-04-30 00:00:00.0,1], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:43:53.794, 3369659897774881596\n", + "[2015-11-26 00:00:00.0,11], 0, 5, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:46:33.287, 3484441033682989966\n", + "[2016-04-30 00:00:00.0,2], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:43:53.794, 3369659897774881596\n", + "[2015-11-26 00:00:00.0,14], 0, 6, 1, 1788, 0, 0, 0, 0, 2024-12-09 12:46:33.287, 3484441033682989966\n", + "[2016-04-30 00:00:00.0,3], 0, 9, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:43:53.794, 3369659897774881596\n", + "[2015-11-26 00:00:00.0,13], 0, 7, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:46:33.287, 3484441033682989966\n", + "[2016-04-30 00:00:00.0,4], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:43:53.794, 3369659897774881596\n", + "[2016-04-30 00:00:00.0,13], 0, 6, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:43:53.794, 3369659897774881596\n", + "[2016-04-30 00:00:00.0,14], 0, 10, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:43:53.794, 3369659897774881596\n", + "[2015-12-10 00:00:00.0,15], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:44:21.4, 4954972693343842130\n", + "[2016-04-30 00:00:00.0,15], 0, 6, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:43:53.794, 3369659897774881596\n", + "[2015-12-10 00:00:00.0,14], 0, 6, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:44:21.4, 4954972693343842130\n", + "[2015-11-11 00:00:00.0,1], 0, 6, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:47:06.632, 2784761090322080717\n", + "[2015-11-11 00:00:00.0,2], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:47:06.632, 2784761090322080717\n", + "[2015-11-11 00:00:00.0,3], 0, 4, 1, 1752, 0, 0, 0, 0, 2024-12-09 12:47:06.632, 2784761090322080717\n", + "[2015-11-11 00:00:00.0,4], 0, 5, 1, 1772, 0, 0, 0, 0, 2024-12-09 12:47:06.632, 2784761090322080717\n", + "[2015-11-11 00:00:00.0,0], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:47:06.632, 2784761090322080717\n", + "[2015-11-11 00:00:00.0,9], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:47:06.632, 2784761090322080717\n", + "[2015-11-11 00:00:00.0,10], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:47:06.632, 2784761090322080717\n", + "[2015-11-11 00:00:00.0,12], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:47:06.632, 2784761090322080717\n", + "[2015-11-11 00:00:00.0,5], 0, 1, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:47:06.632, 2784761090322080717\n", + "[2015-11-11 00:00:00.0,6], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:47:06.632, 2784761090322080717\n", + "[2015-11-11 00:00:00.0,7], 0, 2, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:47:06.632, 2784761090322080717\n", + "[2015-11-11 00:00:00.0,8], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:47:06.632, 2784761090322080717\n", + "[2016-04-24 00:00:00.0,7], 0, 9, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:46:39.647, 7015663299007196627\n", + "[2016-04-24 00:00:00.0,6], 0, 8, 1, 1816, 0, 0, 0, 0, 2024-12-09 12:46:39.647, 7015663299007196627\n", + "[2016-04-24 00:00:00.0,9], 0, 13, 1, 1993, 0, 0, 0, 0, 2024-12-09 12:46:39.647, 7015663299007196627\n", + "[2016-04-24 00:00:00.0,8], 0, 10, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:46:39.647, 7015663299007196627\n", + "[2016-04-24 00:00:00.0,11], 0, 10, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:46:39.647, 7015663299007196627\n", + "[2016-04-24 00:00:00.0,10], 0, 14, 1, 1973, 0, 0, 0, 0, 2024-12-09 12:46:39.647, 7015663299007196627\n", + "[2016-04-24 00:00:00.0,13], 0, 9, 1, 1867, 0, 0, 0, 0, 2024-12-09 12:46:39.647, 7015663299007196627\n", + "[2016-04-24 00:00:00.0,12], 0, 8, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:46:39.647, 7015663299007196627\n", + "[2016-08-14 00:00:00.0,5], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:28.388, 4879174353150917920\n", + "[2016-08-14 00:00:00.0,8], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:47:28.388, 4879174353150917920\n", + "[2016-04-24 00:00:00.0,1], 0, 13, 1, 1927, 0, 0, 0, 0, 2024-12-09 12:46:39.647, 7015663299007196627\n", + "[2016-08-14 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:28.388, 4879174353150917920\n", + "[2016-04-24 00:00:00.0,0], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:46:39.647, 7015663299007196627\n", + "[2016-08-14 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:28.388, 4879174353150917920\n", + "[2016-04-24 00:00:00.0,3], 0, 7, 1, 1775, 0, 0, 0, 0, 2024-12-09 12:46:39.647, 7015663299007196627\n", + "[2016-04-24 00:00:00.0,2], 0, 9, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:46:39.647, 7015663299007196627\n", + "[2016-08-14 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:28.388, 4879174353150917920\n", + "[2016-04-24 00:00:00.0,5], 0, 11, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:46:39.647, 7015663299007196627\n", + "[2016-08-14 00:00:00.0,3], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:47:28.388, 4879174353150917920\n", + "[2016-04-24 00:00:00.0,4], 0, 5, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:46:39.647, 7015663299007196627\n", + "[2015-11-11 00:00:00.0,13], 0, 4, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:47:06.632, 2784761090322080717\n", + "[2015-11-11 00:00:00.0,14], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:47:06.632, 2784761090322080717\n", + "[2015-11-11 00:00:00.0,15], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:47:06.632, 2784761090322080717\n", + "[2016-04-24 00:00:00.0,15], 0, 8, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:46:39.647, 7015663299007196627\n", + "[2016-04-24 00:00:00.0,14], 0, 12, 1, 1905, 0, 0, 0, 0, 2024-12-09 12:46:39.647, 7015663299007196627\n", + "[2016-02-01 00:00:00.0,12], 0, 3, 1, 1661, 0, 0, 0, 0, 2024-12-09 12:43:50.558, 892654583169823012\n", + "[2016-02-01 00:00:00.0,11], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:43:50.558, 892654583169823012\n", + "[2016-02-01 00:00:00.0,14], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:43:50.558, 892654583169823012\n", + "[2016-02-01 00:00:00.0,13], 0, 6, 1, 1787, 0, 0, 0, 0, 2024-12-09 12:43:50.558, 892654583169823012\n", + "[2016-02-01 00:00:00.0,15], 0, 6, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:43:50.558, 892654583169823012\n", + "[2016-08-14 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:28.388, 4879174353150917920\n", + "[2016-08-14 00:00:00.0,13], 0, 2, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:47:28.388, 4879174353150917920\n", + "[2016-08-14 00:00:00.0,15], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:47:28.388, 4879174353150917920\n", + "[2016-08-14 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:28.388, 4879174353150917920\n", + "[2016-08-14 00:00:00.0,11], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:28.388, 4879174353150917920\n", + "[2016-09-27 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:49.509, 8958466863404561065\n", + "[2016-07-07 00:00:00.0,8], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:48:12.076, 4358281654084123110\n", + "[2016-07-07 00:00:00.0,9], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:48:12.076, 4358281654084123110\n", + "[2016-07-07 00:00:00.0,14], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:48:12.076, 4358281654084123110\n", + "[2016-09-27 00:00:00.0,11], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:49.509, 8958466863404561065\n", + "[2016-07-07 00:00:00.0,15], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:48:12.076, 4358281654084123110\n", + "[2016-09-27 00:00:00.0,9], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:47:49.509, 8958466863404561065\n", + "[2016-09-27 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:49.509, 8958466863404561065\n", + "[2016-09-27 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:49.509, 8958466863404561065\n", + "[2016-09-27 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:49.509, 8958466863404561065\n", + "[2015-11-02 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:59.553, 1806318138588645863\n", + "[2015-11-02 00:00:00.0,13], 0, 4, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:45:59.553, 1806318138588645863\n", + "[2015-11-02 00:00:00.0,10], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:45:59.553, 1806318138588645863\n", + "[2015-11-02 00:00:00.0,11], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:45:59.553, 1806318138588645863\n", + "[2015-11-02 00:00:00.0,14], 0, 4, 1, 1728, 0, 0, 0, 0, 2024-12-09 12:45:59.553, 1806318138588645863\n", + "[2015-11-02 00:00:00.0,15], 0, 2, 1, 1600, 0, 0, 0, 0, 2024-12-09 12:45:59.553, 1806318138588645863\n", + "[2016-09-27 00:00:00.0,12], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:47:49.509, 8958466863404561065\n", + "[2016-09-27 00:00:00.0,13], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:49.509, 8958466863404561065\n", + "[2016-04-15 00:00:00.0,11], 0, 5, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:43:56.219, 5239628887737151673\n", + "[2016-04-15 00:00:00.0,12], 0, 7, 1, 1777, 0, 0, 0, 0, 2024-12-09 12:43:56.219, 5239628887737151673\n", + "[2016-04-15 00:00:00.0,13], 0, 10, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:43:56.219, 5239628887737151673\n", + "[2016-04-15 00:00:00.0,14], 0, 15, 1, 1986, 0, 0, 0, 0, 2024-12-09 12:43:56.219, 5239628887737151673\n", + "[2016-04-15 00:00:00.0,15], 0, 8, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:43:56.219, 5239628887737151673\n", + "[2015-11-02 00:00:00.0,4], 0, 5, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:45:59.553, 1806318138588645863\n", + "[2016-04-15 00:00:00.0,3], 0, 7, 1, 1779, 0, 0, 0, 0, 2024-12-09 12:43:56.219, 5239628887737151673\n", + "[2015-11-02 00:00:00.0,5], 0, 2, 1, 1693, 0, 0, 0, 0, 2024-12-09 12:45:59.553, 1806318138588645863\n", + "[2016-04-15 00:00:00.0,4], 0, 5, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:43:56.219, 5239628887737151673\n", + "[2015-11-02 00:00:00.0,2], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:45:59.553, 1806318138588645863\n", + "[2016-04-15 00:00:00.0,5], 0, 5, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:43:56.219, 5239628887737151673\n", + "[2015-11-02 00:00:00.0,3], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:45:59.553, 1806318138588645863\n", + "[2016-04-15 00:00:00.0,6], 0, 17, 1, 2051, 0, 0, 0, 0, 2024-12-09 12:43:56.219, 5239628887737151673\n", + "[2015-11-02 00:00:00.0,8], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:45:59.553, 1806318138588645863\n", + "[2016-04-15 00:00:00.0,7], 0, 10, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:43:56.219, 5239628887737151673\n", + "[2015-11-02 00:00:00.0,9], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:45:59.553, 1806318138588645863\n", + "[2016-04-15 00:00:00.0,8], 0, 6, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:43:56.219, 5239628887737151673\n", + "[2015-11-02 00:00:00.0,6], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:45:59.553, 1806318138588645863\n", + "[2016-04-15 00:00:00.0,9], 0, 9, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:43:56.219, 5239628887737151673\n", + "[2016-04-15 00:00:00.0,10], 0, 6, 1, 1787, 0, 0, 0, 0, 2024-12-09 12:43:56.219, 5239628887737151673\n", + "[2015-11-02 00:00:00.0,0], 0, 3, 1, 1666, 0, 0, 0, 0, 2024-12-09 12:45:59.553, 1806318138588645863\n", + "[2015-11-02 00:00:00.0,1], 0, 4, 1, 1712, 0, 0, 0, 0, 2024-12-09 12:45:59.553, 1806318138588645863\n", + "[2016-04-15 00:00:00.0,0], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:43:56.219, 5239628887737151673\n", + "[2016-04-15 00:00:00.0,1], 0, 8, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:43:56.219, 5239628887737151673\n", + "[2016-04-15 00:00:00.0,2], 0, 6, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:43:56.219, 5239628887737151673\n", + "[2016-01-24 00:00:00.0,8], 0, 14, 1, 1992, 0, 0, 0, 0, 2024-12-09 12:46:00.47, 3423591139511526165\n", + "[2016-01-24 00:00:00.0,9], 0, 9, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:46:00.47, 3423591139511526165\n", + "[2016-01-24 00:00:00.0,10], 0, 11, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:46:00.47, 3423591139511526165\n", + "[2016-01-24 00:00:00.0,11], 0, 10, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:46:00.47, 3423591139511526165\n", + "[2016-01-24 00:00:00.0,4], 0, 11, 1, 1932, 0, 0, 0, 0, 2024-12-09 12:46:00.47, 3423591139511526165\n", + "[2016-01-24 00:00:00.0,5], 0, 10, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:46:00.47, 3423591139511526165\n", + "[2016-01-24 00:00:00.0,6], 0, 14, 1, 1964, 0, 0, 0, 0, 2024-12-09 12:46:00.47, 3423591139511526165\n", + "[2016-01-24 00:00:00.0,7], 0, 13, 1, 1944, 0, 0, 0, 0, 2024-12-09 12:46:00.47, 3423591139511526165\n", + "[2016-01-24 00:00:00.0,12], 0, 12, 1, 1925, 0, 0, 0, 0, 2024-12-09 12:46:00.47, 3423591139511526165\n", + "[2016-01-24 00:00:00.0,13], 0, 8, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:46:00.47, 3423591139511526165\n", + "[2016-01-24 00:00:00.0,14], 0, 11, 1, 1905, 0, 0, 0, 0, 2024-12-09 12:46:00.47, 3423591139511526165\n", + "[2016-01-24 00:00:00.0,15], 0, 14, 1, 1964, 0, 0, 0, 0, 2024-12-09 12:46:00.47, 3423591139511526165\n", + "[2016-06-07 00:00:00.0,0], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:11.524, 524119032376137387\n", + "[2016-01-24 00:00:00.0,0], 0, 15, 1, 1984, 0, 0, 0, 0, 2024-12-09 12:46:00.47, 3423591139511526165\n", + "[2016-01-24 00:00:00.0,1], 0, 11, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:46:00.47, 3423591139511526165\n", + "[2016-01-24 00:00:00.0,2], 0, 10, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:46:00.47, 3423591139511526165\n", + "[2016-01-24 00:00:00.0,3], 0, 12, 1, 1930, 0, 0, 0, 0, 2024-12-09 12:46:00.47, 3423591139511526165\n", + "[2016-07-07 00:00:00.0,2], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:48:12.076, 4358281654084123110\n", + "[2016-07-07 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:12.076, 4358281654084123110\n", + "[2016-02-02 00:00:00.0,15], 0, 4, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:45:06.263, 5761890123458448892\n", + "[2016-02-02 00:00:00.0,11], 0, 5, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:45:06.263, 5761890123458448892\n", + "[2016-02-02 00:00:00.0,12], 0, 3, 1, 1731, 0, 0, 0, 0, 2024-12-09 12:45:06.263, 5761890123458448892\n", + "[2016-02-02 00:00:00.0,13], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:45:06.263, 5761890123458448892\n", + "[2016-02-02 00:00:00.0,14], 0, 4, 1, 1751, 0, 0, 0, 0, 2024-12-09 12:45:06.263, 5761890123458448892\n", + "[2016-02-02 00:00:00.0,7], 0, 4, 1, 1700, 0, 0, 0, 0, 2024-12-09 12:45:06.263, 5761890123458448892\n", + "[2016-02-02 00:00:00.0,8], 0, 5, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:45:06.263, 5761890123458448892\n", + "[2016-02-02 00:00:00.0,9], 0, 6, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:45:06.263, 5761890123458448892\n", + "[2016-02-02 00:00:00.0,10], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:45:06.263, 5761890123458448892\n", + "[2016-02-02 00:00:00.0,3], 0, 9, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:45:06.263, 5761890123458448892\n", + "[2016-02-02 00:00:00.0,4], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:45:06.263, 5761890123458448892\n", + "[2016-02-02 00:00:00.0,5], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:45:06.263, 5761890123458448892\n", + "[2016-02-02 00:00:00.0,6], 0, 6, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:45:06.263, 5761890123458448892\n", + "[2016-02-02 00:00:00.0,0], 0, 4, 1, 1704, 0, 0, 0, 0, 2024-12-09 12:45:06.263, 5761890123458448892\n", + "[2016-02-02 00:00:00.0,1], 0, 6, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:45:06.263, 5761890123458448892\n", + "[2016-02-02 00:00:00.0,2], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:45:06.263, 5761890123458448892\n", + "[2016-05-15 00:00:00.0,0], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:45.987, 4722605470286656268\n", + "[2016-05-15 00:00:00.0,1], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:47:45.987, 4722605470286656268\n", + "[2016-07-23 00:00:00.0,0], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:47:50.919, 4303780949482845137\n", + "[2016-05-15 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:45.987, 4722605470286656268\n", + "[2016-05-15 00:00:00.0,3], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:47:45.987, 4722605470286656268\n", + "[2016-05-15 00:00:00.0,4], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:47:45.987, 4722605470286656268\n", + "[2016-05-15 00:00:00.0,5], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:47:45.987, 4722605470286656268\n", + "[2016-05-15 00:00:00.0,6], 0, 4, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:47:45.987, 4722605470286656268\n", + "[2016-05-15 00:00:00.0,7], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:47:45.987, 4722605470286656268\n", + "[2016-05-15 00:00:00.0,8], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:47:45.987, 4722605470286656268\n", + "[2016-05-15 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:45.987, 4722605470286656268\n", + "[2016-05-15 00:00:00.0,10], 0, 4, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:47:45.987, 4722605470286656268\n", + "[2016-05-15 00:00:00.0,11], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:45.987, 4722605470286656268\n", + "[2016-05-15 00:00:00.0,12], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:47:45.987, 4722605470286656268\n", + "[2016-05-15 00:00:00.0,13], 0, 3, 1, 1731, 0, 0, 0, 0, 2024-12-09 12:47:45.987, 4722605470286656268\n", + "[2016-05-15 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:45.987, 4722605470286656268\n", + "[2016-05-24 00:00:00.0,1], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:58.921, 9155122640017832993\n", + "[2016-05-15 00:00:00.0,15], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:47:45.987, 4722605470286656268\n", + "[2016-05-24 00:00:00.0,0], 0, 5, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:47:58.921, 9155122640017832993\n", + "[2016-07-23 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:50.919, 4303780949482845137\n", + "[2016-07-23 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:50.919, 4303780949482845137\n", + "[2016-05-30 00:00:00.0,15], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:09.926, 5097285234610080293\n", + "[2016-07-23 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:50.919, 4303780949482845137\n", + "[2016-05-30 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:09.926, 5097285234610080293\n", + "[2016-07-23 00:00:00.0,8], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:50.919, 4303780949482845137\n", + "[2016-05-30 00:00:00.0,11], 0, 3, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:45:09.926, 5097285234610080293\n", + "[2016-05-30 00:00:00.0,13], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:45:09.926, 5097285234610080293\n", + "[2016-07-23 00:00:00.0,4], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:47:50.919, 4303780949482845137\n", + "[2016-05-30 00:00:00.0,12], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:45:09.926, 5097285234610080293\n", + "[2016-05-30 00:00:00.0,7], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:45:09.926, 5097285234610080293\n", + "[2016-05-30 00:00:00.0,6], 0, 3, 1, 1662, 0, 0, 0, 0, 2024-12-09 12:45:09.926, 5097285234610080293\n", + "[2016-05-30 00:00:00.0,9], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:09.926, 5097285234610080293\n", + "[2016-05-30 00:00:00.0,8], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:09.926, 5097285234610080293\n", + "[2016-05-30 00:00:00.0,3], 0, 3, 1, 1731, 0, 0, 0, 0, 2024-12-09 12:45:09.926, 5097285234610080293\n", + "[2016-05-30 00:00:00.0,5], 0, 3, 1, 1683, 0, 0, 0, 0, 2024-12-09 12:45:09.926, 5097285234610080293\n", + "[2016-05-30 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:09.926, 5097285234610080293\n", + "[2016-05-30 00:00:00.0,1], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:45:09.926, 5097285234610080293\n", + "[2016-05-30 00:00:00.0,0], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:09.926, 5097285234610080293\n", + "[2016-05-09 00:00:00.0,3], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:45:56.173, 6548945466930480679\n", + "[2016-05-09 00:00:00.0,2], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:45:56.173, 6548945466930480679\n", + "[2016-05-09 00:00:00.0,1], 0, 10, 1, 1927, 0, 0, 0, 0, 2024-12-09 12:45:56.173, 6548945466930480679\n", + "[2016-05-09 00:00:00.0,0], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:45:56.173, 6548945466930480679\n", + "[2016-05-09 00:00:00.0,7], 0, 5, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:45:56.173, 6548945466930480679\n", + "[2016-05-09 00:00:00.0,6], 0, 3, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:45:56.173, 6548945466930480679\n", + "[2016-05-09 00:00:00.0,5], 0, 6, 1, 1788, 0, 0, 0, 0, 2024-12-09 12:45:56.173, 6548945466930480679\n", + "[2016-05-09 00:00:00.0,4], 0, 5, 1, 1754, 0, 0, 0, 0, 2024-12-09 12:45:56.173, 6548945466930480679\n", + "[2016-05-09 00:00:00.0,11], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:45:56.173, 6548945466930480679\n", + "[2016-05-09 00:00:00.0,10], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:45:56.173, 6548945466930480679\n", + "[2016-05-09 00:00:00.0,9], 0, 7, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:45:56.173, 6548945466930480679\n", + "[2016-05-09 00:00:00.0,8], 0, 6, 1, 1809, 0, 0, 0, 0, 2024-12-09 12:45:56.173, 6548945466930480679\n", + "[2016-05-09 00:00:00.0,15], 0, 4, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:45:56.173, 6548945466930480679\n", + "[2016-05-09 00:00:00.0,14], 0, 5, 1, 1749, 0, 0, 0, 0, 2024-12-09 12:45:56.173, 6548945466930480679\n", + "[2016-05-09 00:00:00.0,13], 0, 4, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:45:56.173, 6548945466930480679\n", + "[2016-05-09 00:00:00.0,12], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:45:56.173, 6548945466930480679\n", + "[2016-09-21 00:00:00.0,1], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:02.068, 2716028161322193495\n", + "[2016-08-28 00:00:00.0,11], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:11.109, 1370154615478855863\n", + "[2016-05-02 00:00:00.0,0], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:45:45.502, 7252664550212875274\n", + "[2016-08-28 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:11.109, 1370154615478855863\n", + "[2016-05-02 00:00:00.0,3], 0, 6, 1, 1795, 0, 0, 0, 0, 2024-12-09 12:45:45.502, 7252664550212875274\n", + "[2016-05-02 00:00:00.0,4], 0, 7, 1, 1777, 0, 0, 0, 0, 2024-12-09 12:45:45.502, 7252664550212875274\n", + "[2016-08-28 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:11.109, 1370154615478855863\n", + "[2016-05-02 00:00:00.0,1], 0, 5, 1, 1773, 0, 0, 0, 0, 2024-12-09 12:45:45.502, 7252664550212875274\n", + "[2016-05-02 00:00:00.0,2], 0, 5, 1, 1777, 0, 0, 0, 0, 2024-12-09 12:45:45.502, 7252664550212875274\n", + "[2016-08-28 00:00:00.0,3], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:11.109, 1370154615478855863\n", + "[2016-08-28 00:00:00.0,5], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:11.109, 1370154615478855863\n", + "[2016-08-28 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:11.109, 1370154615478855863\n", + "[2016-05-02 00:00:00.0,15], 0, 11, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:45:45.502, 7252664550212875274\n", + "[2016-09-21 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:02.068, 2716028161322193495\n", + "[2016-05-02 00:00:00.0,13], 0, 8, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:45:45.502, 7252664550212875274\n", + "[2016-05-02 00:00:00.0,14], 0, 9, 1, 1844, 0, 0, 0, 0, 2024-12-09 12:45:45.502, 7252664550212875274\n", + "[2016-05-02 00:00:00.0,7], 0, 4, 1, 1700, 0, 0, 0, 0, 2024-12-09 12:45:45.502, 7252664550212875274\n", + "[2016-05-02 00:00:00.0,8], 0, 6, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:45:45.502, 7252664550212875274\n", + "[2016-05-02 00:00:00.0,5], 0, 11, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:45:45.502, 7252664550212875274\n", + "[2016-05-02 00:00:00.0,6], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:45:45.502, 7252664550212875274\n", + "[2016-05-02 00:00:00.0,11], 0, 8, 1, 1795, 0, 0, 0, 0, 2024-12-09 12:45:45.502, 7252664550212875274\n", + "[2016-05-02 00:00:00.0,12], 0, 9, 1, 1845, 0, 0, 0, 0, 2024-12-09 12:45:45.502, 7252664550212875274\n", + "[2016-09-21 00:00:00.0,13], 0, 2, 1, 1710, 0, 0, 0, 0, 2024-12-09 12:48:02.068, 2716028161322193495\n", + "[2016-05-02 00:00:00.0,9], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:45:45.502, 7252664550212875274\n", + "[2016-09-21 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:02.068, 2716028161322193495\n", + "[2016-05-02 00:00:00.0,10], 0, 4, 1, 1704, 0, 0, 0, 0, 2024-12-09 12:45:45.502, 7252664550212875274\n", + "[2016-06-01 00:00:00.0,5], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:47:34.589, 7902399475625499108\n", + "[2016-06-01 00:00:00.0,7], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:47:34.589, 7902399475625499108\n", + "[2016-06-01 00:00:00.0,8], 0, 3, 1, 1730, 0, 0, 0, 0, 2024-12-09 12:47:34.589, 7902399475625499108\n", + "[2016-06-01 00:00:00.0,1], 0, 2, 1, 1619, 0, 0, 0, 0, 2024-12-09 12:47:34.589, 7902399475625499108\n", + "[2016-06-01 00:00:00.0,2], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:47:34.589, 7902399475625499108\n", + "[2016-06-01 00:00:00.0,3], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:47:34.589, 7902399475625499108\n", + "[2016-06-01 00:00:00.0,4], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:47:34.589, 7902399475625499108\n", + "[2016-06-01 00:00:00.0,15], 0, 3, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:47:34.589, 7902399475625499108\n", + "[2016-06-01 00:00:00.0,9], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:47:34.589, 7902399475625499108\n", + "[2016-06-01 00:00:00.0,12], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:47:34.589, 7902399475625499108\n", + "[2016-09-06 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:28.952, 6491803527399016830\n", + "[2016-09-06 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:28.952, 6491803527399016830\n", + "[2016-07-08 00:00:00.0,0], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:48:08.542, 2752807123710512001\n", + "[2015-12-24 00:00:00.0,2], 0, 10, 1, 1931, 0, 0, 0, 0, 2024-12-09 12:47:25.3, 3115683990024998978\n", + "[2015-12-24 00:00:00.0,3], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:47:25.3, 3115683990024998978\n", + "[2016-09-06 00:00:00.0,3], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:47:28.952, 6491803527399016830\n", + "[2015-12-24 00:00:00.0,0], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:47:25.3, 3115683990024998978\n", + "[2015-12-24 00:00:00.0,1], 0, 10, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:47:25.3, 3115683990024998978\n", + "[2016-09-06 00:00:00.0,5], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:28.952, 6491803527399016830\n", + "[2016-09-06 00:00:00.0,8], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:28.952, 6491803527399016830\n", + "[2016-07-08 00:00:00.0,12], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:48:08.542, 2752807123710512001\n", + "[2016-07-08 00:00:00.0,11], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:48:08.542, 2752807123710512001\n", + "[2016-07-08 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:08.542, 2752807123710512001\n", + "[2016-07-08 00:00:00.0,15], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:08.542, 2752807123710512001\n", + "[2016-07-08 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:08.542, 2752807123710512001\n", + "[2016-07-08 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:08.542, 2752807123710512001\n", + "[2015-12-24 00:00:00.0,10], 0, 9, 1, 1866, 0, 0, 0, 0, 2024-12-09 12:47:25.3, 3115683990024998978\n", + "[2015-12-24 00:00:00.0,11], 0, 8, 1, 1837, 0, 0, 0, 0, 2024-12-09 12:47:25.3, 3115683990024998978\n", + "[2015-12-24 00:00:00.0,8], 0, 3, 1, 1647, 0, 0, 0, 0, 2024-12-09 12:47:25.3, 3115683990024998978\n", + "[2015-12-24 00:00:00.0,9], 0, 4, 1, 1728, 0, 0, 0, 0, 2024-12-09 12:47:25.3, 3115683990024998978\n", + "[2015-12-24 00:00:00.0,6], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:47:25.3, 3115683990024998978\n", + "[2015-12-24 00:00:00.0,7], 0, 6, 1, 1788, 0, 0, 0, 0, 2024-12-09 12:47:25.3, 3115683990024998978\n", + "[2015-12-24 00:00:00.0,4], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:47:25.3, 3115683990024998978\n", + "[2015-12-24 00:00:00.0,5], 0, 6, 1, 1789, 0, 0, 0, 0, 2024-12-09 12:47:25.3, 3115683990024998978\n", + "[2015-12-24 00:00:00.0,14], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:47:25.3, 3115683990024998978\n", + "[2015-12-24 00:00:00.0,15], 0, 7, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:47:25.3, 3115683990024998978\n", + "[2015-12-24 00:00:00.0,12], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:47:25.3, 3115683990024998978\n", + "[2016-02-17 00:00:00.0,0], 0, 8, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:45:05.509, 1813748998566922066\n", + "[2015-12-24 00:00:00.0,13], 0, 7, 1, 1775, 0, 0, 0, 0, 2024-12-09 12:47:25.3, 3115683990024998978\n", + "[2016-02-17 00:00:00.0,1], 0, 11, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:45:05.509, 1813748998566922066\n", + "[2016-02-17 00:00:00.0,2], 0, 10, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:45:05.509, 1813748998566922066\n", + "[2016-02-17 00:00:00.0,3], 0, 9, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:45:05.509, 1813748998566922066\n", + "[2016-02-17 00:00:00.0,4], 0, 9, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:45:05.509, 1813748998566922066\n", + "[2016-02-17 00:00:00.0,5], 0, 9, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:45:05.509, 1813748998566922066\n", + "[2016-05-17 00:00:00.0,15], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:19.845, 6039503870534361948\n", + "[2016-02-17 00:00:00.0,6], 0, 9, 1, 1866, 0, 0, 0, 0, 2024-12-09 12:45:05.509, 1813748998566922066\n", + "[2016-02-17 00:00:00.0,7], 0, 7, 1, 1816, 0, 0, 0, 0, 2024-12-09 12:45:05.509, 1813748998566922066\n", + "[2016-02-17 00:00:00.0,8], 0, 14, 1, 1966, 0, 0, 0, 0, 2024-12-09 12:45:05.509, 1813748998566922066\n", + "[2016-02-17 00:00:00.0,9], 0, 4, 1, 1754, 0, 0, 0, 0, 2024-12-09 12:45:05.509, 1813748998566922066\n", + "[2016-05-17 00:00:00.0,11], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:47:19.845, 6039503870534361948\n", + "[2016-02-17 00:00:00.0,10], 0, 12, 1, 1926, 0, 0, 0, 0, 2024-12-09 12:45:05.509, 1813748998566922066\n", + "[2016-05-17 00:00:00.0,12], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:47:19.845, 6039503870534361948\n", + "[2016-02-17 00:00:00.0,11], 0, 11, 1, 1881, 0, 0, 0, 0, 2024-12-09 12:45:05.509, 1813748998566922066\n", + "[2016-05-17 00:00:00.0,13], 0, 3, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:47:19.845, 6039503870534361948\n", + "[2016-02-17 00:00:00.0,12], 0, 15, 1, 2030, 0, 0, 0, 0, 2024-12-09 12:45:05.509, 1813748998566922066\n", + "[2016-05-17 00:00:00.0,14], 0, 5, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:47:19.845, 6039503870534361948\n", + "[2016-02-17 00:00:00.0,13], 0, 15, 1, 2008, 0, 0, 0, 0, 2024-12-09 12:45:05.509, 1813748998566922066\n", + "[2016-05-17 00:00:00.0,7], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:47:19.845, 6039503870534361948\n", + "[2016-02-17 00:00:00.0,14], 0, 9, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:45:05.509, 1813748998566922066\n", + "[2016-05-17 00:00:00.0,8], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:19.845, 6039503870534361948\n", + "[2016-02-17 00:00:00.0,15], 0, 14, 1, 1991, 0, 0, 0, 0, 2024-12-09 12:45:05.509, 1813748998566922066\n", + "[2016-05-17 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:19.845, 6039503870534361948\n", + "[2016-05-17 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:19.845, 6039503870534361948\n", + "[2016-05-17 00:00:00.0,3], 0, 5, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:47:19.845, 6039503870534361948\n", + "[2016-05-17 00:00:00.0,4], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:47:19.845, 6039503870534361948\n", + "[2016-05-17 00:00:00.0,5], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:47:19.845, 6039503870534361948\n", + "[2016-05-17 00:00:00.0,6], 0, 3, 1, 1730, 0, 0, 0, 0, 2024-12-09 12:47:19.845, 6039503870534361948\n", + "[2016-05-17 00:00:00.0,0], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:47:19.845, 6039503870534361948\n", + "[2016-05-17 00:00:00.0,2], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:47:19.845, 6039503870534361948\n", + "[2016-03-03 00:00:00.0,13], 0, 3, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:45:11.78, 7459999830823899204\n", + "[2016-03-03 00:00:00.0,12], 0, 5, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:45:11.78, 7459999830823899204\n", + "[2016-03-03 00:00:00.0,15], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:45:11.78, 7459999830823899204\n", + "[2016-03-03 00:00:00.0,14], 0, 6, 1, 1791, 0, 0, 0, 0, 2024-12-09 12:45:11.78, 7459999830823899204\n", + "[2016-03-03 00:00:00.0,9], 0, 9, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:45:11.78, 7459999830823899204\n", + "[2016-03-03 00:00:00.0,8], 0, 7, 1, 1798, 0, 0, 0, 0, 2024-12-09 12:45:11.78, 7459999830823899204\n", + "[2016-03-03 00:00:00.0,11], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:45:11.78, 7459999830823899204\n", + "[2016-03-03 00:00:00.0,10], 0, 5, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:45:11.78, 7459999830823899204\n", + "[2016-03-03 00:00:00.0,5], 0, 6, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:45:11.78, 7459999830823899204\n", + "[2016-03-03 00:00:00.0,4], 0, 3, 1, 1682, 0, 0, 0, 0, 2024-12-09 12:45:11.78, 7459999830823899204\n", + "[2016-03-03 00:00:00.0,7], 0, 9, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:45:11.78, 7459999830823899204\n", + "[2016-03-03 00:00:00.0,6], 0, 6, 1, 1787, 0, 0, 0, 0, 2024-12-09 12:45:11.78, 7459999830823899204\n", + "[2016-08-07 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:45.157, 3400432628730649823\n", + "[2016-08-07 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:45.157, 3400432628730649823\n", + "[2016-08-07 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:45.157, 3400432628730649823\n", + "[2016-08-07 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:45.157, 3400432628730649823\n", + "[2016-05-24 00:00:00.0,15], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:58.921, 9155122640017832993\n", + "[2016-05-24 00:00:00.0,14], 0, 5, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:47:58.921, 9155122640017832993\n", + "[2016-05-24 00:00:00.0,13], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:47:58.921, 9155122640017832993\n", + "[2016-05-24 00:00:00.0,12], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:47:58.921, 9155122640017832993\n", + "[2016-05-24 00:00:00.0,11], 0, 3, 1, 1683, 0, 0, 0, 0, 2024-12-09 12:47:58.921, 9155122640017832993\n", + "[2016-05-24 00:00:00.0,10], 0, 4, 1, 1753, 0, 0, 0, 0, 2024-12-09 12:47:58.921, 9155122640017832993\n", + "[2016-05-24 00:00:00.0,9], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:47:58.921, 9155122640017832993\n", + "[2016-05-24 00:00:00.0,8], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:47:58.921, 9155122640017832993\n", + "[2016-05-24 00:00:00.0,7], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:47:58.921, 9155122640017832993\n", + "[2016-05-24 00:00:00.0,5], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:47:58.921, 9155122640017832993\n", + "[2016-05-24 00:00:00.0,4], 0, 4, 1, 1704, 0, 0, 0, 0, 2024-12-09 12:47:58.921, 9155122640017832993\n", + "[2016-05-24 00:00:00.0,3], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:47:58.921, 9155122640017832993\n", + "[2016-05-24 00:00:00.0,2], 0, 2, 1, 1619, 0, 0, 0, 0, 2024-12-09 12:47:58.921, 9155122640017832993\n", + "[2016-03-03 00:00:00.0,1], 0, 6, 1, 1787, 0, 0, 0, 0, 2024-12-09 12:45:11.78, 7459999830823899204\n", + "[2016-03-03 00:00:00.0,0], 0, 5, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:45:11.78, 7459999830823899204\n", + "[2016-03-03 00:00:00.0,3], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:11.78, 7459999830823899204\n", + "[2016-03-03 00:00:00.0,2], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:45:11.78, 7459999830823899204\n", + "[2016-03-24 00:00:00.0,1], 0, 5, 1, 1749, 0, 0, 0, 0, 2024-12-09 12:44:14.606, 344705997507041483\n", + "[2016-03-24 00:00:00.0,2], 0, 3, 1, 1730, 0, 0, 0, 0, 2024-12-09 12:44:14.606, 344705997507041483\n", + "[2016-03-24 00:00:00.0,3], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:44:14.606, 344705997507041483\n", + "[2016-03-24 00:00:00.0,4], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:44:14.606, 344705997507041483\n", + "[2016-03-24 00:00:00.0,0], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:14.606, 344705997507041483\n", + "[2016-06-29 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:41.556, 3288010687980514833\n", + "[2016-01-11 00:00:00.0,15], 0, 8, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:46:14.696, 2665604967325456399\n", + "[2016-01-11 00:00:00.0,14], 0, 13, 1, 1992, 0, 0, 0, 0, 2024-12-09 12:46:14.696, 2665604967325456399\n", + "[2016-01-11 00:00:00.0,13], 0, 7, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:46:14.696, 2665604967325456399\n", + "[2016-01-11 00:00:00.0,12], 0, 10, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:46:14.696, 2665604967325456399\n", + "[2016-01-11 00:00:00.0,11], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:46:14.696, 2665604967325456399\n", + "[2016-01-11 00:00:00.0,10], 0, 14, 1, 1988, 0, 0, 0, 0, 2024-12-09 12:46:14.696, 2665604967325456399\n", + "[2015-12-12 00:00:00.0,12], 0, 6, 1, 1772, 0, 0, 0, 0, 2024-12-09 12:46:38.102, 9020509415080605001\n", + "[2015-12-12 00:00:00.0,11], 0, 3, 1, 1662, 0, 0, 0, 0, 2024-12-09 12:46:38.102, 9020509415080605001\n", + "[2015-12-12 00:00:00.0,10], 0, 9, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:46:38.102, 9020509415080605001\n", + "[2015-12-12 00:00:00.0,9], 0, 6, 1, 1791, 0, 0, 0, 0, 2024-12-09 12:46:38.102, 9020509415080605001\n", + "[2015-12-12 00:00:00.0,8], 0, 4, 1, 1710, 0, 0, 0, 0, 2024-12-09 12:46:38.102, 9020509415080605001\n", + "[2015-12-12 00:00:00.0,7], 0, 6, 1, 1771, 0, 0, 0, 0, 2024-12-09 12:46:38.102, 9020509415080605001\n", + "[2015-12-12 00:00:00.0,6], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:46:38.102, 9020509415080605001\n", + "[2015-12-12 00:00:00.0,5], 0, 7, 1, 1800, 0, 0, 0, 0, 2024-12-09 12:46:38.102, 9020509415080605001\n", + "[2015-12-12 00:00:00.0,4], 0, 6, 1, 1772, 0, 0, 0, 0, 2024-12-09 12:46:38.102, 9020509415080605001\n", + "[2015-12-12 00:00:00.0,3], 0, 7, 1, 1802, 0, 0, 0, 0, 2024-12-09 12:46:38.102, 9020509415080605001\n", + "[2015-12-12 00:00:00.0,2], 0, 7, 1, 1822, 0, 0, 0, 0, 2024-12-09 12:46:38.102, 9020509415080605001\n", + "[2015-12-12 00:00:00.0,1], 0, 5, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:46:38.102, 9020509415080605001\n", + "[2015-12-12 00:00:00.0,0], 0, 14, 1, 1966, 0, 0, 0, 0, 2024-12-09 12:46:38.102, 9020509415080605001\n", + "[2015-12-12 00:00:00.0,15], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:46:38.102, 9020509415080605001\n", + "[2015-12-12 00:00:00.0,14], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:46:38.102, 9020509415080605001\n", + "[2015-12-12 00:00:00.0,13], 0, 7, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:46:38.102, 9020509415080605001\n", + "[2015-11-24 00:00:00.0,11], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:46:02.167, 784995189690928019\n", + "[2015-11-24 00:00:00.0,12], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:46:02.167, 784995189690928019\n", + "[2015-11-24 00:00:00.0,13], 0, 11, 1, 1929, 0, 0, 0, 0, 2024-12-09 12:46:02.167, 784995189690928019\n", + "[2015-11-24 00:00:00.0,14], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:46:02.167, 784995189690928019\n", + "[2015-11-24 00:00:00.0,7], 0, 7, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:46:02.167, 784995189690928019\n", + "[2015-11-24 00:00:00.0,8], 0, 9, 1, 1905, 0, 0, 0, 0, 2024-12-09 12:46:02.167, 784995189690928019\n", + "[2015-11-24 00:00:00.0,9], 0, 7, 1, 1823, 0, 0, 0, 0, 2024-12-09 12:46:02.167, 784995189690928019\n", + "[2015-11-24 00:00:00.0,10], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:46:02.167, 784995189690928019\n", + "[2016-04-17 00:00:00.0,2], 0, 11, 1, 1905, 0, 0, 0, 0, 2024-12-09 12:46:22.318, 7878186243108655307\n", + "[2016-04-17 00:00:00.0,1], 0, 16, 1, 2034, 0, 0, 0, 0, 2024-12-09 12:46:22.318, 7878186243108655307\n", + "[2016-04-17 00:00:00.0,0], 0, 22, 1, 2175, 0, 0, 0, 0, 2024-12-09 12:46:22.318, 7878186243108655307\n", + "[2015-11-24 00:00:00.0,15], 0, 8, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:46:02.167, 784995189690928019\n", + "[2016-07-14 00:00:00.0,7], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:48:07.976, 4272755888815951936\n", + "[2016-04-17 00:00:00.0,10], 0, 22, 1, 2162, 0, 0, 0, 0, 2024-12-09 12:46:22.318, 7878186243108655307\n", + "[2016-04-17 00:00:00.0,9], 0, 15, 1, 2030, 0, 0, 0, 0, 2024-12-09 12:46:22.318, 7878186243108655307\n", + "[2016-04-17 00:00:00.0,8], 0, 17, 1, 2079, 0, 0, 0, 0, 2024-12-09 12:46:22.318, 7878186243108655307\n", + "[2016-04-17 00:00:00.0,7], 0, 14, 1, 2015, 0, 0, 0, 0, 2024-12-09 12:46:22.318, 7878186243108655307\n", + "[2016-04-17 00:00:00.0,6], 0, 12, 1, 1947, 0, 0, 0, 0, 2024-12-09 12:46:22.318, 7878186243108655307\n", + "[2016-07-14 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:07.976, 4272755888815951936\n", + "[2016-04-17 00:00:00.0,5], 0, 11, 1, 1901, 0, 0, 0, 0, 2024-12-09 12:46:22.318, 7878186243108655307\n", + "[2016-04-17 00:00:00.0,4], 0, 24, 1, 2219, 0, 0, 0, 0, 2024-12-09 12:46:22.318, 7878186243108655307\n", + "[2016-04-17 00:00:00.0,3], 0, 19, 1, 2117, 0, 0, 0, 0, 2024-12-09 12:46:22.318, 7878186243108655307\n", + "[2015-11-24 00:00:00.0,3], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:46:02.167, 784995189690928019\n", + "[2016-04-02 00:00:00.0,3], 0, 12, 1, 1925, 0, 0, 0, 0, 2024-12-09 12:44:46.628, 1648060769368467105\n", + "[2015-11-24 00:00:00.0,4], 0, 8, 1, 1838, 0, 0, 0, 0, 2024-12-09 12:46:02.167, 784995189690928019\n", + "[2016-04-02 00:00:00.0,2], 0, 10, 1, 1901, 0, 0, 0, 0, 2024-12-09 12:44:46.628, 1648060769368467105\n", + "[2016-07-14 00:00:00.0,13], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:48:07.976, 4272755888815951936\n", + "[2015-11-24 00:00:00.0,5], 0, 4, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:46:02.167, 784995189690928019\n", + "[2016-04-02 00:00:00.0,1], 0, 15, 1, 2017, 0, 0, 0, 0, 2024-12-09 12:44:46.628, 1648060769368467105\n", + "[2016-04-17 00:00:00.0,15], 0, 10, 1, 1907, 0, 0, 0, 0, 2024-12-09 12:46:22.318, 7878186243108655307\n", + "[2015-11-24 00:00:00.0,6], 0, 6, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:46:02.167, 784995189690928019\n", + "[2016-04-02 00:00:00.0,0], 0, 12, 1, 1973, 0, 0, 0, 0, 2024-12-09 12:44:46.628, 1648060769368467105\n", + "[2016-04-17 00:00:00.0,14], 0, 10, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:46:22.318, 7878186243108655307\n", + "[2016-04-02 00:00:00.0,7], 0, 15, 1, 2035, 0, 0, 0, 0, 2024-12-09 12:44:46.628, 1648060769368467105\n", + "[2016-04-17 00:00:00.0,13], 0, 18, 1, 2129, 0, 0, 0, 0, 2024-12-09 12:46:22.318, 7878186243108655307\n", + "[2015-11-24 00:00:00.0,0], 0, 5, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:46:02.167, 784995189690928019\n", + "[2016-04-02 00:00:00.0,6], 0, 13, 1, 1941, 0, 0, 0, 0, 2024-12-09 12:44:46.628, 1648060769368467105\n", + "[2016-04-17 00:00:00.0,12], 0, 17, 1, 2028, 0, 0, 0, 0, 2024-12-09 12:46:22.318, 7878186243108655307\n", + "[2015-11-24 00:00:00.0,1], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:46:02.167, 784995189690928019\n", + "[2016-04-02 00:00:00.0,5], 0, 5, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:44:46.628, 1648060769368467105\n", + "[2016-04-17 00:00:00.0,11], 0, 15, 1, 2010, 0, 0, 0, 0, 2024-12-09 12:46:22.318, 7878186243108655307\n", + "[2015-11-24 00:00:00.0,2], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:46:02.167, 784995189690928019\n", + "[2016-04-02 00:00:00.0,4], 0, 15, 1, 1984, 0, 0, 0, 0, 2024-12-09 12:44:46.628, 1648060769368467105\n", + "[2016-01-11 00:00:00.0,9], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:14.696, 2665604967325456399\n", + "[2016-01-11 00:00:00.0,8], 0, 15, 1, 1986, 0, 0, 0, 0, 2024-12-09 12:46:14.696, 2665604967325456399\n", + "[2016-01-11 00:00:00.0,7], 0, 12, 1, 1951, 0, 0, 0, 0, 2024-12-09 12:46:14.696, 2665604967325456399\n", + "[2016-01-11 00:00:00.0,6], 0, 12, 1, 1928, 0, 0, 0, 0, 2024-12-09 12:46:14.696, 2665604967325456399\n", + "[2016-01-11 00:00:00.0,5], 0, 11, 1, 1903, 0, 0, 0, 0, 2024-12-09 12:46:14.696, 2665604967325456399\n", + "[2016-01-11 00:00:00.0,4], 0, 9, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:46:14.696, 2665604967325456399\n", + "[2016-01-11 00:00:00.0,3], 0, 13, 1, 1973, 0, 0, 0, 0, 2024-12-09 12:46:14.696, 2665604967325456399\n", + "[2016-01-11 00:00:00.0,2], 0, 9, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:46:14.696, 2665604967325456399\n", + "[2016-01-11 00:00:00.0,1], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:46:14.696, 2665604967325456399\n", + "[2016-01-11 00:00:00.0,0], 0, 9, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:46:14.696, 2665604967325456399\n", + "[2016-04-23 00:00:00.0,7], 0, 5, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:45:17.699, 8062714414009504512\n", + "[2016-04-23 00:00:00.0,6], 0, 15, 1, 1990, 0, 0, 0, 0, 2024-12-09 12:45:17.699, 8062714414009504512\n", + "[2016-04-23 00:00:00.0,9], 0, 12, 1, 1950, 0, 0, 0, 0, 2024-12-09 12:45:17.699, 8062714414009504512\n", + "[2016-04-23 00:00:00.0,8], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:45:17.699, 8062714414009504512\n", + "[2016-04-23 00:00:00.0,3], 0, 11, 1, 1903, 0, 0, 0, 0, 2024-12-09 12:45:17.699, 8062714414009504512\n", + "[2016-04-23 00:00:00.0,2], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:45:17.699, 8062714414009504512\n", + "[2016-04-23 00:00:00.0,5], 0, 9, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:45:17.699, 8062714414009504512\n", + "[2016-04-23 00:00:00.0,4], 0, 8, 1, 1814, 0, 0, 0, 0, 2024-12-09 12:45:17.699, 8062714414009504512\n", + "[2016-04-23 00:00:00.0,15], 0, 10, 1, 1860, 0, 0, 0, 0, 2024-12-09 12:45:17.699, 8062714414009504512\n", + "[2016-04-23 00:00:00.0,14], 0, 14, 1, 1966, 0, 0, 0, 0, 2024-12-09 12:45:17.699, 8062714414009504512\n", + "[2016-04-23 00:00:00.0,11], 0, 7, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:45:17.699, 8062714414009504512\n", + "[2016-04-23 00:00:00.0,10], 0, 9, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:45:17.699, 8062714414009504512\n", + "[2016-04-23 00:00:00.0,13], 0, 3, 1, 1661, 0, 0, 0, 0, 2024-12-09 12:45:17.699, 8062714414009504512\n", + "[2016-04-23 00:00:00.0,12], 0, 8, 1, 1815, 0, 0, 0, 0, 2024-12-09 12:45:17.699, 8062714414009504512\n", + "[2016-04-23 00:00:00.0,1], 0, 6, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:45:17.699, 8062714414009504512\n", + "[2016-04-23 00:00:00.0,0], 0, 18, 1, 2128, 0, 0, 0, 0, 2024-12-09 12:45:17.699, 8062714414009504512\n", + "[2016-04-02 00:00:00.0,11], 0, 16, 1, 2079, 0, 0, 0, 0, 2024-12-09 12:44:46.628, 1648060769368467105\n", + "[2016-04-02 00:00:00.0,10], 0, 19, 1, 2096, 0, 0, 0, 0, 2024-12-09 12:44:46.628, 1648060769368467105\n", + "[2016-04-02 00:00:00.0,9], 0, 8, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:44:46.628, 1648060769368467105\n", + "[2016-04-02 00:00:00.0,8], 0, 10, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:44:46.628, 1648060769368467105\n", + "[2016-04-02 00:00:00.0,15], 0, 12, 1, 1950, 0, 0, 0, 0, 2024-12-09 12:44:46.628, 1648060769368467105\n", + "[2016-04-02 00:00:00.0,14], 0, 12, 1, 1926, 0, 0, 0, 0, 2024-12-09 12:44:46.628, 1648060769368467105\n", + "[2016-04-02 00:00:00.0,13], 0, 16, 1, 2031, 0, 0, 0, 0, 2024-12-09 12:44:46.628, 1648060769368467105\n", + "[2016-04-02 00:00:00.0,12], 0, 10, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:44:46.628, 1648060769368467105\n", + "[2016-01-23 00:00:00.0,4], 0, 16, 1, 2039, 0, 0, 0, 0, 2024-12-09 12:46:45.388, 8713380278148685804\n", + "[2016-01-23 00:00:00.0,5], 0, 15, 1, 2033, 0, 0, 0, 0, 2024-12-09 12:46:45.388, 8713380278148685804\n", + "[2016-01-23 00:00:00.0,6], 0, 12, 1, 1924, 0, 0, 0, 0, 2024-12-09 12:46:45.388, 8713380278148685804\n", + "[2016-01-23 00:00:00.0,7], 0, 11, 1, 1887, 0, 0, 0, 0, 2024-12-09 12:46:45.388, 8713380278148685804\n", + "[2016-01-23 00:00:00.0,0], 0, 17, 1, 2010, 0, 0, 0, 0, 2024-12-09 12:46:45.388, 8713380278148685804\n", + "[2016-01-23 00:00:00.0,1], 0, 12, 1, 1924, 0, 0, 0, 0, 2024-12-09 12:46:45.388, 8713380278148685804\n", + "[2016-01-23 00:00:00.0,2], 0, 12, 1, 1903, 0, 0, 0, 0, 2024-12-09 12:46:45.388, 8713380278148685804\n", + "[2016-01-23 00:00:00.0,3], 0, 8, 1, 1860, 0, 0, 0, 0, 2024-12-09 12:46:45.388, 8713380278148685804\n", + "[2016-09-28 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:55.494, 2602849293607099409\n", + "[2016-09-28 00:00:00.0,11], 0, 2, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:47:55.494, 2602849293607099409\n", + "[2016-09-28 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:55.494, 2602849293607099409\n", + "[2016-09-28 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:55.494, 2602849293607099409\n", + "[2016-09-28 00:00:00.0,8], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:55.494, 2602849293607099409\n", + "[2016-09-28 00:00:00.0,0], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:55.494, 2602849293607099409\n", + "[2016-03-24 00:00:00.0,9], 0, 8, 1, 1859, 0, 0, 0, 0, 2024-12-09 12:44:14.606, 344705997507041483\n", + "[2016-03-24 00:00:00.0,10], 0, 3, 1, 1677, 0, 0, 0, 0, 2024-12-09 12:44:14.606, 344705997507041483\n", + "[2016-03-24 00:00:00.0,11], 0, 3, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:44:14.606, 344705997507041483\n", + "[2016-03-24 00:00:00.0,12], 0, 4, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:44:14.606, 344705997507041483\n", + "[2016-03-24 00:00:00.0,5], 0, 5, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:44:14.606, 344705997507041483\n", + "[2016-03-24 00:00:00.0,6], 0, 5, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:44:14.606, 344705997507041483\n", + "[2016-03-24 00:00:00.0,7], 0, 2, 1, 1614, 0, 0, 0, 0, 2024-12-09 12:44:14.606, 344705997507041483\n", + "[2016-03-24 00:00:00.0,8], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:44:14.606, 344705997507041483\n", + "[2016-03-24 00:00:00.0,13], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:44:14.606, 344705997507041483\n", + "[2016-03-24 00:00:00.0,14], 0, 8, 1, 1838, 0, 0, 0, 0, 2024-12-09 12:44:14.606, 344705997507041483\n", + "[2016-03-24 00:00:00.0,15], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:44:14.606, 344705997507041483\n", + "[2016-03-30 00:00:00.0,0], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:44:06.692, 4476523130793004427\n", + "[2016-03-30 00:00:00.0,3], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:44:06.692, 4476523130793004427\n", + "[2016-03-30 00:00:00.0,4], 0, 4, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:44:06.692, 4476523130793004427\n", + "[2016-03-30 00:00:00.0,1], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:44:06.692, 4476523130793004427\n", + "[2016-03-30 00:00:00.0,2], 0, 6, 1, 1792, 0, 0, 0, 0, 2024-12-09 12:44:06.692, 4476523130793004427\n", + "[2016-03-30 00:00:00.0,7], 0, 4, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:44:06.692, 4476523130793004427\n", + "[2016-03-30 00:00:00.0,8], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:44:06.692, 4476523130793004427\n", + "[2016-03-30 00:00:00.0,5], 0, 5, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:44:06.692, 4476523130793004427\n", + "[2016-03-30 00:00:00.0,6], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:44:06.692, 4476523130793004427\n", + "[2016-03-30 00:00:00.0,11], 0, 5, 1, 1753, 0, 0, 0, 0, 2024-12-09 12:44:06.692, 4476523130793004427\n", + "[2016-03-30 00:00:00.0,12], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:44:06.692, 4476523130793004427\n", + "[2016-08-13 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:38.491, 8612502180618040493\n", + "[2016-03-30 00:00:00.0,9], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:44:06.692, 4476523130793004427\n", + "[2016-03-30 00:00:00.0,10], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:06.692, 4476523130793004427\n", + "[2016-08-13 00:00:00.0,13], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:38.491, 8612502180618040493\n", + "[2015-11-27 00:00:00.0,13], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:30.119, 7916957391441472016\n", + "[2015-11-27 00:00:00.0,14], 0, 8, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:44:30.119, 7916957391441472016\n", + "[2015-11-27 00:00:00.0,11], 0, 3, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:44:30.119, 7916957391441472016\n", + "[2015-11-27 00:00:00.0,12], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:44:30.119, 7916957391441472016\n", + "[2015-11-27 00:00:00.0,15], 0, 2, 1, 1602, 0, 0, 0, 0, 2024-12-09 12:44:30.119, 7916957391441472016\n", + "[2015-11-27 00:00:00.0,5], 0, 7, 1, 1795, 0, 0, 0, 0, 2024-12-09 12:44:30.119, 7916957391441472016\n", + "[2015-11-27 00:00:00.0,6], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:44:30.119, 7916957391441472016\n", + "[2015-11-27 00:00:00.0,3], 0, 3, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:44:30.119, 7916957391441472016\n", + "[2015-11-27 00:00:00.0,4], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:44:30.119, 7916957391441472016\n", + "[2015-11-27 00:00:00.0,9], 0, 5, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:44:30.119, 7916957391441472016\n", + "[2015-11-27 00:00:00.0,10], 0, 8, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:44:30.119, 7916957391441472016\n", + "[2015-11-27 00:00:00.0,7], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:44:30.119, 7916957391441472016\n", + "[2015-11-27 00:00:00.0,8], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:44:30.119, 7916957391441472016\n", + "[2015-11-27 00:00:00.0,1], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:44:30.119, 7916957391441472016\n", + "[2015-11-27 00:00:00.0,2], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:44:30.119, 7916957391441472016\n", + "[2015-11-27 00:00:00.0,0], 0, 9, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:44:30.119, 7916957391441472016\n", + "[2016-01-08 00:00:00.0,14], 0, 20, 1, 2094, 0, 0, 0, 0, 2024-12-09 12:45:52.807, 1492536826487226684\n", + "[2016-01-08 00:00:00.0,15], 0, 12, 1, 1972, 0, 0, 0, 0, 2024-12-09 12:45:52.807, 1492536826487226684\n", + "[2016-01-08 00:00:00.0,12], 0, 13, 1, 1923, 0, 0, 0, 0, 2024-12-09 12:45:52.807, 1492536826487226684\n", + "[2016-01-08 00:00:00.0,13], 0, 5, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:45:52.807, 1492536826487226684\n", + "[2016-01-08 00:00:00.0,10], 0, 8, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:45:52.807, 1492536826487226684\n", + "[2016-01-08 00:00:00.0,11], 0, 15, 1, 2007, 0, 0, 0, 0, 2024-12-09 12:45:52.807, 1492536826487226684\n", + "[2016-01-08 00:00:00.0,8], 0, 13, 1, 1944, 0, 0, 0, 0, 2024-12-09 12:45:52.807, 1492536826487226684\n", + "[2016-01-08 00:00:00.0,9], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:45:52.807, 1492536826487226684\n", + "[2016-01-08 00:00:00.0,6], 0, 9, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:45:52.807, 1492536826487226684\n", + "[2016-01-08 00:00:00.0,7], 0, 15, 1, 1965, 0, 0, 0, 0, 2024-12-09 12:45:52.807, 1492536826487226684\n", + "[2016-01-08 00:00:00.0,4], 0, 12, 1, 1882, 0, 0, 0, 0, 2024-12-09 12:45:52.807, 1492536826487226684\n", + "[2016-03-30 00:00:00.0,15], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:44:06.692, 4476523130793004427\n", + "[2016-01-08 00:00:00.0,5], 0, 12, 1, 1903, 0, 0, 0, 0, 2024-12-09 12:45:52.807, 1492536826487226684\n", + "[2016-01-08 00:00:00.0,2], 0, 14, 1, 1961, 0, 0, 0, 0, 2024-12-09 12:45:52.807, 1492536826487226684\n", + "[2016-03-30 00:00:00.0,13], 0, 5, 1, 1751, 0, 0, 0, 0, 2024-12-09 12:44:06.692, 4476523130793004427\n", + "[2016-01-08 00:00:00.0,3], 0, 11, 1, 1952, 0, 0, 0, 0, 2024-12-09 12:45:52.807, 1492536826487226684\n", + "[2016-03-30 00:00:00.0,14], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:44:06.692, 4476523130793004427\n", + "[2016-01-08 00:00:00.0,0], 0, 7, 1, 1796, 0, 0, 0, 0, 2024-12-09 12:45:52.807, 1492536826487226684\n", + "[2016-01-08 00:00:00.0,1], 0, 7, 1, 1775, 0, 0, 0, 0, 2024-12-09 12:45:52.807, 1492536826487226684\n", + "[2015-12-09 00:00:00.0,8], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:47:10.759, 8701221319354358795\n", + "[2015-12-09 00:00:00.0,9], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:47:10.759, 8701221319354358795\n", + "[2015-12-09 00:00:00.0,6], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:47:10.759, 8701221319354358795\n", + "[2015-12-09 00:00:00.0,7], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:47:10.759, 8701221319354358795\n", + "[2015-12-09 00:00:00.0,4], 0, 5, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:47:10.759, 8701221319354358795\n", + "[2016-03-09 00:00:00.0,2], 0, 8, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:44:58.544, 5639314738539731948\n", + "[2015-12-09 00:00:00.0,5], 0, 5, 1, 1776, 0, 0, 0, 0, 2024-12-09 12:47:10.759, 8701221319354358795\n", + "[2016-03-09 00:00:00.0,1], 0, 5, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:44:58.544, 5639314738539731948\n", + "[2015-12-09 00:00:00.0,2], 0, 4, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:47:10.759, 8701221319354358795\n", + "[2016-03-09 00:00:00.0,0], 0, 10, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:44:58.544, 5639314738539731948\n", + "[2015-12-09 00:00:00.0,3], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:47:10.759, 8701221319354358795\n", + "[2015-12-27 00:00:00.0,3], 0, 12, 1, 1946, 0, 0, 0, 0, 2024-12-09 12:46:36.436, 7676832120117368214\n", + "[2015-12-27 00:00:00.0,2], 0, 11, 1, 1946, 0, 0, 0, 0, 2024-12-09 12:46:36.436, 7676832120117368214\n", + "[2015-12-09 00:00:00.0,14], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:47:10.759, 8701221319354358795\n", + "[2015-12-27 00:00:00.0,1], 0, 12, 1, 1966, 0, 0, 0, 0, 2024-12-09 12:46:36.436, 7676832120117368214\n", + "[2015-12-09 00:00:00.0,15], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:47:10.759, 8701221319354358795\n", + "[2015-12-27 00:00:00.0,0], 0, 12, 1, 1970, 0, 0, 0, 0, 2024-12-09 12:46:36.436, 7676832120117368214\n", + "[2015-12-09 00:00:00.0,12], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:47:10.759, 8701221319354358795\n", + "[2015-12-27 00:00:00.0,7], 0, 16, 1, 2053, 0, 0, 0, 0, 2024-12-09 12:46:36.436, 7676832120117368214\n", + "[2015-12-09 00:00:00.0,13], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:47:10.759, 8701221319354358795\n", + "[2015-12-27 00:00:00.0,6], 0, 14, 1, 1994, 0, 0, 0, 0, 2024-12-09 12:46:36.436, 7676832120117368214\n", + "[2015-12-09 00:00:00.0,10], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:47:10.759, 8701221319354358795\n", + "[2015-12-27 00:00:00.0,5], 0, 15, 1, 2033, 0, 0, 0, 0, 2024-12-09 12:46:36.436, 7676832120117368214\n", + "[2015-12-09 00:00:00.0,11], 0, 8, 1, 1845, 0, 0, 0, 0, 2024-12-09 12:47:10.759, 8701221319354358795\n", + "[2015-12-27 00:00:00.0,4], 0, 17, 1, 2106, 0, 0, 0, 0, 2024-12-09 12:46:36.436, 7676832120117368214\n", + "[2016-04-08 00:00:00.0,3], 0, 8, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:46:29.136, 1686945790522702972\n", + "[2016-04-08 00:00:00.0,2], 0, 7, 1, 1776, 0, 0, 0, 0, 2024-12-09 12:46:29.136, 1686945790522702972\n", + "[2016-04-08 00:00:00.0,1], 0, 9, 1, 1890, 0, 0, 0, 0, 2024-12-09 12:46:29.136, 1686945790522702972\n", + "[2016-04-08 00:00:00.0,0], 0, 9, 1, 1844, 0, 0, 0, 0, 2024-12-09 12:46:29.136, 1686945790522702972\n", + "[2016-04-08 00:00:00.0,7], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:29.136, 1686945790522702972\n", + "[2016-04-08 00:00:00.0,6], 0, 12, 1, 1951, 0, 0, 0, 0, 2024-12-09 12:46:29.136, 1686945790522702972\n", + "[2016-04-08 00:00:00.0,5], 0, 8, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:46:29.136, 1686945790522702972\n", + "[2016-04-08 00:00:00.0,4], 0, 12, 1, 1924, 0, 0, 0, 0, 2024-12-09 12:46:29.136, 1686945790522702972\n", + "[2016-04-08 00:00:00.0,11], 0, 16, 1, 1987, 0, 0, 0, 0, 2024-12-09 12:46:29.136, 1686945790522702972\n", + "[2016-04-08 00:00:00.0,10], 0, 5, 1, 1777, 0, 0, 0, 0, 2024-12-09 12:46:29.136, 1686945790522702972\n", + "[2016-04-08 00:00:00.0,9], 0, 6, 1, 1743, 0, 0, 0, 0, 2024-12-09 12:46:29.136, 1686945790522702972\n", + "[2016-04-08 00:00:00.0,8], 0, 12, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:46:29.136, 1686945790522702972\n", + "[2016-04-08 00:00:00.0,15], 0, 6, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:46:29.136, 1686945790522702972\n", + "[2016-04-08 00:00:00.0,14], 0, 6, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:46:29.136, 1686945790522702972\n", + "[2016-04-08 00:00:00.0,13], 0, 9, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:46:29.136, 1686945790522702972\n", + "[2016-04-08 00:00:00.0,12], 0, 8, 1, 1838, 0, 0, 0, 0, 2024-12-09 12:46:29.136, 1686945790522702972\n", + "[2015-12-27 00:00:00.0,11], 0, 16, 1, 2125, 0, 0, 0, 0, 2024-12-09 12:46:36.436, 7676832120117368214\n", + "[2016-03-09 00:00:00.0,14], 0, 11, 1, 1901, 0, 0, 0, 0, 2024-12-09 12:44:58.544, 5639314738539731948\n", + "[2015-12-27 00:00:00.0,10], 0, 16, 1, 2080, 0, 0, 0, 0, 2024-12-09 12:46:36.436, 7676832120117368214\n", + "[2016-03-09 00:00:00.0,13], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:44:58.544, 5639314738539731948\n", + "[2015-12-27 00:00:00.0,9], 0, 17, 1, 2079, 0, 0, 0, 0, 2024-12-09 12:46:36.436, 7676832120117368214\n", + "[2016-03-09 00:00:00.0,12], 0, 8, 1, 1838, 0, 0, 0, 0, 2024-12-09 12:44:58.544, 5639314738539731948\n", + "[2015-12-27 00:00:00.0,8], 0, 20, 1, 2190, 0, 0, 0, 0, 2024-12-09 12:46:36.436, 7676832120117368214\n", + "[2016-03-09 00:00:00.0,11], 0, 8, 1, 1795, 0, 0, 0, 0, 2024-12-09 12:44:58.544, 5639314738539731948\n", + "[2015-12-27 00:00:00.0,15], 0, 23, 1, 2180, 0, 0, 0, 0, 2024-12-09 12:46:36.436, 7676832120117368214\n", + "[2015-12-27 00:00:00.0,14], 0, 13, 1, 1969, 0, 0, 0, 0, 2024-12-09 12:46:36.436, 7676832120117368214\n", + "[2015-12-27 00:00:00.0,13], 0, 11, 1, 1905, 0, 0, 0, 0, 2024-12-09 12:46:36.436, 7676832120117368214\n", + "[2015-12-27 00:00:00.0,12], 0, 12, 1, 1925, 0, 0, 0, 0, 2024-12-09 12:46:36.436, 7676832120117368214\n", + "[2016-03-09 00:00:00.0,15], 0, 8, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:44:58.544, 5639314738539731948\n", + "[2015-12-09 00:00:00.0,0], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:47:10.759, 8701221319354358795\n", + "[2016-03-09 00:00:00.0,6], 0, 13, 1, 1965, 0, 0, 0, 0, 2024-12-09 12:44:58.544, 5639314738539731948\n", + "[2015-12-09 00:00:00.0,1], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:47:10.759, 8701221319354358795\n", + "[2016-03-09 00:00:00.0,5], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:44:58.544, 5639314738539731948\n", + "[2016-03-09 00:00:00.0,4], 0, 12, 1, 1902, 0, 0, 0, 0, 2024-12-09 12:44:58.544, 5639314738539731948\n", + "[2016-03-09 00:00:00.0,3], 0, 10, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:44:58.544, 5639314738539731948\n", + "[2016-03-09 00:00:00.0,10], 0, 12, 1, 1895, 0, 0, 0, 0, 2024-12-09 12:44:58.544, 5639314738539731948\n", + "[2016-03-09 00:00:00.0,9], 0, 5, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:44:58.544, 5639314738539731948\n", + "[2016-03-09 00:00:00.0,8], 0, 8, 1, 1795, 0, 0, 0, 0, 2024-12-09 12:44:58.544, 5639314738539731948\n", + "[2016-03-09 00:00:00.0,7], 0, 13, 1, 1949, 0, 0, 0, 0, 2024-12-09 12:44:58.544, 5639314738539731948\n", + "[2016-03-18 00:00:00.0,3], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:44:31.168, 5908202690872913132\n", + "[2016-03-18 00:00:00.0,2], 0, 13, 1, 1966, 0, 0, 0, 0, 2024-12-09 12:44:31.168, 5908202690872913132\n", + "[2016-03-18 00:00:00.0,5], 0, 14, 1, 2043, 0, 0, 0, 0, 2024-12-09 12:44:31.168, 5908202690872913132\n", + "[2016-03-18 00:00:00.0,4], 0, 4, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:44:31.168, 5908202690872913132\n", + "[2016-03-18 00:00:00.0,1], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:44:31.168, 5908202690872913132\n", + "[2016-03-18 00:00:00.0,0], 0, 7, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:44:31.168, 5908202690872913132\n", + "[2016-03-18 00:00:00.0,11], 0, 12, 1, 1950, 0, 0, 0, 0, 2024-12-09 12:44:31.168, 5908202690872913132\n", + "[2016-03-18 00:00:00.0,10], 0, 4, 1, 1710, 0, 0, 0, 0, 2024-12-09 12:44:31.168, 5908202690872913132\n", + "[2016-03-18 00:00:00.0,13], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:44:31.168, 5908202690872913132\n", + "[2016-03-18 00:00:00.0,12], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:44:31.168, 5908202690872913132\n", + "[2016-03-18 00:00:00.0,7], 0, 6, 1, 1812, 0, 0, 0, 0, 2024-12-09 12:44:31.168, 5908202690872913132\n", + "[2016-03-18 00:00:00.0,6], 0, 7, 1, 1800, 0, 0, 0, 0, 2024-12-09 12:44:31.168, 5908202690872913132\n", + "[2016-03-18 00:00:00.0,9], 0, 4, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:44:31.168, 5908202690872913132\n", + "[2016-03-18 00:00:00.0,8], 0, 11, 1, 1929, 0, 0, 0, 0, 2024-12-09 12:44:31.168, 5908202690872913132\n", + "[2016-03-18 00:00:00.0,15], 0, 7, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:44:31.168, 5908202690872913132\n", + "[2016-03-18 00:00:00.0,14], 0, 8, 1, 1858, 0, 0, 0, 0, 2024-12-09 12:44:31.168, 5908202690872913132\n", + "[2016-04-25 00:00:00.0,10], 0, 13, 1, 1988, 0, 0, 0, 0, 2024-12-09 12:45:40.283, 90158001609531684\n", + "[2016-04-25 00:00:00.0,11], 0, 9, 1, 1866, 0, 0, 0, 0, 2024-12-09 12:45:40.283, 90158001609531684\n", + "[2016-04-25 00:00:00.0,12], 0, 9, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:45:40.283, 90158001609531684\n", + "[2016-04-25 00:00:00.0,13], 0, 9, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:45:40.283, 90158001609531684\n", + "[2016-04-25 00:00:00.0,14], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:45:40.283, 90158001609531684\n", + "[2016-04-25 00:00:00.0,15], 0, 7, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:45:40.283, 90158001609531684\n", + "[2015-11-01 00:00:00.0,2], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:46:56.191, 4529752879268896752\n", + "[2015-11-01 00:00:00.0,3], 0, 6, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:46:56.191, 4529752879268896752\n", + "[2015-11-01 00:00:00.0,5], 0, 2, 1, 1599, 0, 0, 0, 0, 2024-12-09 12:46:56.191, 4529752879268896752\n", + "[2015-11-01 00:00:00.0,0], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:46:56.191, 4529752879268896752\n", + "[2015-11-01 00:00:00.0,10], 0, 2, 1, 1600, 0, 0, 0, 0, 2024-12-09 12:46:56.191, 4529752879268896752\n", + "[2015-11-01 00:00:00.0,11], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:46:56.191, 4529752879268896752\n", + "[2015-11-01 00:00:00.0,13], 0, 4, 1, 1704, 0, 0, 0, 0, 2024-12-09 12:46:56.191, 4529752879268896752\n", + "[2015-11-01 00:00:00.0,6], 0, 4, 1, 1684, 0, 0, 0, 0, 2024-12-09 12:46:56.191, 4529752879268896752\n", + "[2015-11-01 00:00:00.0,7], 0, 4, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:46:56.191, 4529752879268896752\n", + "[2015-11-01 00:00:00.0,8], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:46:56.191, 4529752879268896752\n", + "[2015-11-01 00:00:00.0,9], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:46:56.191, 4529752879268896752\n", + "[2016-02-10 00:00:00.0,7], 0, 3, 1, 1662, 0, 0, 0, 0, 2024-12-09 12:46:16.236, 3749133790979920604\n", + "[2016-02-10 00:00:00.0,6], 0, 8, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:46:16.236, 3749133790979920604\n", + "[2016-02-10 00:00:00.0,9], 0, 7, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:46:16.236, 3749133790979920604\n", + "[2016-02-10 00:00:00.0,8], 0, 8, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:46:16.236, 3749133790979920604\n", + "[2016-02-10 00:00:00.0,11], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:46:16.236, 3749133790979920604\n", + "[2016-02-10 00:00:00.0,10], 0, 3, 1, 1665, 0, 0, 0, 0, 2024-12-09 12:46:16.236, 3749133790979920604\n", + "[2016-02-10 00:00:00.0,13], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:46:16.236, 3749133790979920604\n", + "[2016-02-10 00:00:00.0,12], 0, 7, 1, 1774, 0, 0, 0, 0, 2024-12-09 12:46:16.236, 3749133790979920604\n", + "[2016-02-10 00:00:00.0,1], 0, 3, 1, 1660, 0, 0, 0, 0, 2024-12-09 12:46:16.236, 3749133790979920604\n", + "[2016-02-10 00:00:00.0,0], 0, 4, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:46:16.236, 3749133790979920604\n", + "[2016-02-10 00:00:00.0,3], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:46:16.236, 3749133790979920604\n", + "[2016-02-10 00:00:00.0,2], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:46:16.236, 3749133790979920604\n", + "[2016-02-10 00:00:00.0,5], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:16.236, 3749133790979920604\n", + "[2016-02-10 00:00:00.0,4], 0, 3, 1, 1661, 0, 0, 0, 0, 2024-12-09 12:46:16.236, 3749133790979920604\n", + "[2016-07-24 00:00:00.0,15], 0, 2, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:47:50.231, 712963143235923902\n", + "[2016-07-24 00:00:00.0,6], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:47:50.231, 712963143235923902\n", + "[2016-07-24 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:50.231, 712963143235923902\n", + "[2016-07-24 00:00:00.0,3], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:47:50.231, 712963143235923902\n", + "[2016-07-24 00:00:00.0,0], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:50.231, 712963143235923902\n", + "[2016-07-24 00:00:00.0,13], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:50.231, 712963143235923902\n", + "[2016-07-24 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:50.231, 712963143235923902\n", + "[2016-07-24 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:50.231, 712963143235923902\n", + "[2016-07-24 00:00:00.0,8], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:50.231, 712963143235923902\n", + "[2016-07-24 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:50.231, 712963143235923902\n", + "[2016-01-26 00:00:00.0,5], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:45:24.756, 2325311890996404081\n", + "[2016-09-03 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:35.028, 2557788218512487980\n", + "[2016-01-26 00:00:00.0,4], 0, 7, 1, 1845, 0, 0, 0, 0, 2024-12-09 12:45:24.756, 2325311890996404081\n", + "[2016-01-26 00:00:00.0,7], 0, 5, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:45:24.756, 2325311890996404081\n", + "[2016-01-26 00:00:00.0,6], 0, 9, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:45:24.756, 2325311890996404081\n", + "[2016-01-26 00:00:00.0,9], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:45:24.756, 2325311890996404081\n", + "[2016-01-26 00:00:00.0,8], 0, 10, 1, 1905, 0, 0, 0, 0, 2024-12-09 12:45:24.756, 2325311890996404081\n", + "[2016-01-26 00:00:00.0,11], 0, 9, 1, 1887, 0, 0, 0, 0, 2024-12-09 12:45:24.756, 2325311890996404081\n", + "[2016-01-26 00:00:00.0,10], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:45:24.756, 2325311890996404081\n", + "[2016-01-26 00:00:00.0,1], 0, 5, 1, 1752, 0, 0, 0, 0, 2024-12-09 12:45:24.756, 2325311890996404081\n", + "[2016-01-26 00:00:00.0,0], 0, 12, 1, 1927, 0, 0, 0, 0, 2024-12-09 12:45:24.756, 2325311890996404081\n", + "[2016-01-26 00:00:00.0,3], 0, 9, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:45:24.756, 2325311890996404081\n", + "[2016-01-26 00:00:00.0,2], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:45:24.756, 2325311890996404081\n", + "[2016-05-25 00:00:00.0,8], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:48:06.577, 7284098607115946884\n", + "[2015-12-31 00:00:00.0,12], 0, 9, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:45:26.678, 7900298292169359952\n", + "[2016-05-25 00:00:00.0,9], 0, 4, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:48:06.577, 7284098607115946884\n", + "[2016-09-22 00:00:00.0,15], 0, 2, 1, 1711, 0, 0, 0, 0, 2024-12-09 12:47:38.002, 7979575011497823448\n", + "[2015-12-31 00:00:00.0,11], 0, 11, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:45:26.678, 7900298292169359952\n", + "[2016-05-25 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:06.577, 7284098607115946884\n", + "[2015-12-31 00:00:00.0,14], 0, 8, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:45:26.678, 7900298292169359952\n", + "[2016-05-25 00:00:00.0,7], 0, 3, 1, 1661, 0, 0, 0, 0, 2024-12-09 12:48:06.577, 7284098607115946884\n", + "[2015-12-31 00:00:00.0,13], 0, 5, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:45:26.678, 7900298292169359952\n", + "[2016-05-25 00:00:00.0,12], 0, 2, 1, 1613, 0, 0, 0, 0, 2024-12-09 12:48:06.577, 7284098607115946884\n", + "[2016-09-22 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:38.002, 7979575011497823448\n", + "[2015-12-31 00:00:00.0,8], 0, 17, 1, 2074, 0, 0, 0, 0, 2024-12-09 12:45:26.678, 7900298292169359952\n", + "[2016-05-25 00:00:00.0,13], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:06.577, 7284098607115946884\n", + "[2015-12-31 00:00:00.0,7], 0, 4, 1, 1700, 0, 0, 0, 0, 2024-12-09 12:45:26.678, 7900298292169359952\n", + "[2016-05-25 00:00:00.0,10], 0, 2, 1, 1613, 0, 0, 0, 0, 2024-12-09 12:48:06.577, 7284098607115946884\n", + "[2015-12-31 00:00:00.0,10], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:45:26.678, 7900298292169359952\n", + "[2016-05-25 00:00:00.0,11], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:06.577, 7284098607115946884\n", + "[2015-12-31 00:00:00.0,9], 0, 8, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:45:26.678, 7900298292169359952\n", + "[2016-05-25 00:00:00.0,0], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:06.577, 7284098607115946884\n", + "[2015-12-31 00:00:00.0,4], 0, 6, 1, 1789, 0, 0, 0, 0, 2024-12-09 12:45:26.678, 7900298292169359952\n", + "[2016-09-22 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:38.002, 7979575011497823448\n", + "[2015-12-31 00:00:00.0,3], 0, 3, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:45:26.678, 7900298292169359952\n", + "[2015-12-31 00:00:00.0,6], 0, 8, 1, 1794, 0, 0, 0, 0, 2024-12-09 12:45:26.678, 7900298292169359952\n", + "[2016-09-22 00:00:00.0,5], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:38.002, 7979575011497823448\n", + "[2015-12-31 00:00:00.0,5], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:45:26.678, 7900298292169359952\n", + "[2016-05-25 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:06.577, 7284098607115946884\n", + "[2015-12-31 00:00:00.0,0], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:45:26.678, 7900298292169359952\n", + "[2016-05-25 00:00:00.0,5], 0, 2, 1, 1620, 0, 0, 0, 0, 2024-12-09 12:48:06.577, 7284098607115946884\n", + "[2016-09-22 00:00:00.0,3], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:38.002, 7979575011497823448\n", + "[2016-09-22 00:00:00.0,0], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:47:38.002, 7979575011497823448\n", + "[2015-12-31 00:00:00.0,2], 0, 10, 1, 1889, 0, 0, 0, 0, 2024-12-09 12:45:26.678, 7900298292169359952\n", + "[2016-05-25 00:00:00.0,3], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:48:06.577, 7284098607115946884\n", + "[2015-12-31 00:00:00.0,1], 0, 10, 1, 1910, 0, 0, 0, 0, 2024-12-09 12:45:26.678, 7900298292169359952\n", + "[2015-12-31 00:00:00.0,15], 0, 7, 1, 1800, 0, 0, 0, 0, 2024-12-09 12:45:26.678, 7900298292169359952\n", + "[2016-01-26 00:00:00.0,13], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:45:24.756, 2325311890996404081\n", + "[2016-01-26 00:00:00.0,12], 0, 8, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:45:24.756, 2325311890996404081\n", + "[2016-01-26 00:00:00.0,15], 0, 7, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:45:24.756, 2325311890996404081\n", + "[2016-01-26 00:00:00.0,14], 0, 8, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:45:24.756, 2325311890996404081\n", + "[2016-01-15 00:00:00.0,4], 0, 11, 1, 1907, 0, 0, 0, 0, 2024-12-09 12:46:28.34, 6598687266617039323\n", + "[2016-01-15 00:00:00.0,3], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:46:28.34, 6598687266617039323\n", + "[2016-01-15 00:00:00.0,2], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:46:28.34, 6598687266617039323\n", + "[2016-01-15 00:00:00.0,1], 0, 16, 1, 2031, 0, 0, 0, 0, 2024-12-09 12:46:28.34, 6598687266617039323\n", + "[2016-01-15 00:00:00.0,8], 0, 15, 1, 1990, 0, 0, 0, 0, 2024-12-09 12:46:28.34, 6598687266617039323\n", + "[2016-01-15 00:00:00.0,7], 0, 5, 1, 1775, 0, 0, 0, 0, 2024-12-09 12:46:28.34, 6598687266617039323\n", + "[2016-01-15 00:00:00.0,6], 0, 9, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:46:28.34, 6598687266617039323\n", + "[2016-01-15 00:00:00.0,5], 0, 9, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:46:28.34, 6598687266617039323\n", + "[2016-01-15 00:00:00.0,12], 0, 13, 1, 1949, 0, 0, 0, 0, 2024-12-09 12:46:28.34, 6598687266617039323\n", + "[2016-01-15 00:00:00.0,11], 0, 6, 1, 1789, 0, 0, 0, 0, 2024-12-09 12:46:28.34, 6598687266617039323\n", + "[2016-01-15 00:00:00.0,10], 0, 9, 1, 1891, 0, 0, 0, 0, 2024-12-09 12:46:28.34, 6598687266617039323\n", + "[2016-01-15 00:00:00.0,9], 0, 7, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:46:28.34, 6598687266617039323\n", + "[2016-01-15 00:00:00.0,15], 0, 16, 1, 2008, 0, 0, 0, 0, 2024-12-09 12:46:28.34, 6598687266617039323\n", + "[2016-01-15 00:00:00.0,14], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:46:28.34, 6598687266617039323\n", + "[2016-01-15 00:00:00.0,13], 0, 6, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:46:28.34, 6598687266617039323\n", + "[2016-01-15 00:00:00.0,0], 0, 8, 1, 1836, 0, 0, 0, 0, 2024-12-09 12:46:28.34, 6598687266617039323\n", + "[2016-02-14 00:00:00.0,6], 0, 8, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:44:53.024, 6733600814915930103\n", + "[2016-02-14 00:00:00.0,7], 0, 10, 1, 1910, 0, 0, 0, 0, 2024-12-09 12:44:53.024, 6733600814915930103\n", + "[2016-02-14 00:00:00.0,8], 0, 7, 1, 1798, 0, 0, 0, 0, 2024-12-09 12:44:53.024, 6733600814915930103\n", + "[2016-02-14 00:00:00.0,9], 0, 5, 1, 1775, 0, 0, 0, 0, 2024-12-09 12:44:53.024, 6733600814915930103\n", + "[2016-02-14 00:00:00.0,10], 0, 3, 1, 1665, 0, 0, 0, 0, 2024-12-09 12:44:53.024, 6733600814915930103\n", + "[2016-02-14 00:00:00.0,11], 0, 12, 1, 1928, 0, 0, 0, 0, 2024-12-09 12:44:53.024, 6733600814915930103\n", + "[2016-02-14 00:00:00.0,12], 0, 8, 1, 1838, 0, 0, 0, 0, 2024-12-09 12:44:53.024, 6733600814915930103\n", + "[2016-02-14 00:00:00.0,13], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:44:53.024, 6733600814915930103\n", + "[2016-05-25 00:00:00.0,14], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:48:06.577, 7284098607115946884\n", + "[2016-02-14 00:00:00.0,0], 0, 5, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:44:53.024, 6733600814915930103\n", + "[2016-02-14 00:00:00.0,1], 0, 7, 1, 1793, 0, 0, 0, 0, 2024-12-09 12:44:53.024, 6733600814915930103\n", + "[2016-02-14 00:00:00.0,2], 0, 9, 1, 1887, 0, 0, 0, 0, 2024-12-09 12:44:53.024, 6733600814915930103\n", + "[2016-02-14 00:00:00.0,3], 0, 7, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:44:53.024, 6733600814915930103\n", + "[2016-02-14 00:00:00.0,4], 0, 10, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:44:53.024, 6733600814915930103\n", + "[2016-02-14 00:00:00.0,5], 0, 3, 1, 1730, 0, 0, 0, 0, 2024-12-09 12:44:53.024, 6733600814915930103\n", + "[2016-04-25 00:00:00.0,2], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:45:40.283, 90158001609531684\n", + "[2016-04-25 00:00:00.0,3], 0, 14, 1, 2011, 0, 0, 0, 0, 2024-12-09 12:45:40.283, 90158001609531684\n", + "[2016-04-25 00:00:00.0,4], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:45:40.283, 90158001609531684\n", + "[2016-04-25 00:00:00.0,5], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:45:40.283, 90158001609531684\n", + "[2016-04-25 00:00:00.0,6], 0, 11, 1, 1928, 0, 0, 0, 0, 2024-12-09 12:45:40.283, 90158001609531684\n", + "[2016-04-25 00:00:00.0,7], 0, 9, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:45:40.283, 90158001609531684\n", + "[2016-04-25 00:00:00.0,8], 0, 10, 1, 1910, 0, 0, 0, 0, 2024-12-09 12:45:40.283, 90158001609531684\n", + "[2016-04-25 00:00:00.0,9], 0, 19, 1, 2098, 0, 0, 0, 0, 2024-12-09 12:45:40.283, 90158001609531684\n", + "[2016-02-14 00:00:00.0,14], 0, 7, 1, 1775, 0, 0, 0, 0, 2024-12-09 12:44:53.024, 6733600814915930103\n", + "[2016-02-14 00:00:00.0,15], 0, 9, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:44:53.024, 6733600814915930103\n", + "[2016-04-25 00:00:00.0,0], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:45:40.283, 90158001609531684\n", + "[2016-04-25 00:00:00.0,1], 0, 11, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:45:40.283, 90158001609531684\n", + "[2015-12-16 00:00:00.0,14], 0, 6, 1, 1813, 0, 0, 0, 0, 2024-12-09 12:46:58.002, 5330582367385044650\n", + "[2015-12-16 00:00:00.0,13], 0, 8, 1, 1859, 0, 0, 0, 0, 2024-12-09 12:46:58.002, 5330582367385044650\n", + "[2015-12-16 00:00:00.0,15], 0, 7, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:46:58.002, 5330582367385044650\n", + "[2016-01-23 00:00:00.0,12], 0, 18, 1, 2075, 0, 0, 0, 0, 2024-12-09 12:46:45.388, 8713380278148685804\n", + "[2016-01-23 00:00:00.0,13], 0, 12, 1, 1926, 0, 0, 0, 0, 2024-12-09 12:46:45.388, 8713380278148685804\n", + "[2016-01-23 00:00:00.0,14], 0, 16, 1, 2027, 0, 0, 0, 0, 2024-12-09 12:46:45.388, 8713380278148685804\n", + "[2016-01-23 00:00:00.0,15], 0, 17, 1, 2077, 0, 0, 0, 0, 2024-12-09 12:46:45.388, 8713380278148685804\n", + "[2016-01-23 00:00:00.0,8], 0, 11, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:46:45.388, 8713380278148685804\n", + "[2016-01-23 00:00:00.0,9], 0, 8, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:46:45.388, 8713380278148685804\n", + "[2016-01-23 00:00:00.0,10], 0, 13, 1, 1974, 0, 0, 0, 0, 2024-12-09 12:46:45.388, 8713380278148685804\n", + "[2016-01-23 00:00:00.0,11], 0, 13, 1, 1964, 0, 0, 0, 0, 2024-12-09 12:46:45.388, 8713380278148685804\n", + "[2015-12-01 00:00:00.0,15], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:45:51.967, 4437443502286024735\n", + "[2015-12-01 00:00:00.0,12], 0, 5, 1, 1751, 0, 0, 0, 0, 2024-12-09 12:45:51.967, 4437443502286024735\n", + "[2015-12-01 00:00:00.0,11], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:45:51.967, 4437443502286024735\n", + "[2015-12-01 00:00:00.0,14], 0, 5, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:45:51.967, 4437443502286024735\n", + "[2015-12-01 00:00:00.0,13], 0, 3, 1, 1666, 0, 0, 0, 0, 2024-12-09 12:45:51.967, 4437443502286024735\n", + "[2015-12-01 00:00:00.0,8], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:51.967, 4437443502286024735\n", + "[2016-01-30 00:00:00.0,15], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:43:44.824, 1612604338939849254\n", + "[2015-12-01 00:00:00.0,7], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:45:51.967, 4437443502286024735\n", + "[2016-04-10 00:00:00.0,0], 0, 24, 1, 2222, 0, 0, 0, 0, 2024-12-09 12:43:47.781, 3407943026538932749\n", + "[2016-01-30 00:00:00.0,14], 0, 8, 1, 1860, 0, 0, 0, 0, 2024-12-09 12:43:44.824, 1612604338939849254\n", + "[2015-12-01 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:51.967, 4437443502286024735\n", + "[2016-04-10 00:00:00.0,1], 0, 15, 1, 1982, 0, 0, 0, 0, 2024-12-09 12:43:47.781, 3407943026538932749\n", + "[2016-01-30 00:00:00.0,13], 0, 8, 1, 1817, 0, 0, 0, 0, 2024-12-09 12:43:44.824, 1612604338939849254\n", + "[2015-12-01 00:00:00.0,9], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:45:51.967, 4437443502286024735\n", + "[2016-04-10 00:00:00.0,2], 0, 14, 1, 1992, 0, 0, 0, 0, 2024-12-09 12:43:47.781, 3407943026538932749\n", + "[2016-01-30 00:00:00.0,12], 0, 13, 1, 1967, 0, 0, 0, 0, 2024-12-09 12:43:44.824, 1612604338939849254\n", + "[2016-04-10 00:00:00.0,3], 0, 16, 1, 2054, 0, 0, 0, 0, 2024-12-09 12:43:47.781, 3407943026538932749\n", + "[2015-12-01 00:00:00.0,3], 0, 7, 1, 1799, 0, 0, 0, 0, 2024-12-09 12:45:51.967, 4437443502286024735\n", + "[2016-04-10 00:00:00.0,4], 0, 10, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:43:47.781, 3407943026538932749\n", + "[2015-12-01 00:00:00.0,6], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:45:51.967, 4437443502286024735\n", + "[2016-04-10 00:00:00.0,5], 0, 18, 1, 2079, 0, 0, 0, 0, 2024-12-09 12:43:47.781, 3407943026538932749\n", + "[2015-12-01 00:00:00.0,5], 0, 5, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:45:51.967, 4437443502286024735\n", + "[2016-04-10 00:00:00.0,6], 0, 11, 1, 1882, 0, 0, 0, 0, 2024-12-09 12:43:47.781, 3407943026538932749\n", + "[2015-12-01 00:00:00.0,0], 0, 4, 1, 1704, 0, 0, 0, 0, 2024-12-09 12:45:51.967, 4437443502286024735\n", + "[2016-04-10 00:00:00.0,7], 0, 11, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:43:47.781, 3407943026538932749\n", + "[2016-04-10 00:00:00.0,8], 0, 10, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:43:47.781, 3407943026538932749\n", + "[2015-12-01 00:00:00.0,2], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:45:51.967, 4437443502286024735\n", + "[2016-04-10 00:00:00.0,9], 0, 11, 1, 1880, 0, 0, 0, 0, 2024-12-09 12:43:47.781, 3407943026538932749\n", + "[2015-12-01 00:00:00.0,1], 0, 9, 1, 1888, 0, 0, 0, 0, 2024-12-09 12:45:51.967, 4437443502286024735\n", + "[2016-04-10 00:00:00.0,10], 0, 13, 1, 1988, 0, 0, 0, 0, 2024-12-09 12:43:47.781, 3407943026538932749\n", + "[2016-04-10 00:00:00.0,11], 0, 18, 1, 2082, 0, 0, 0, 0, 2024-12-09 12:43:47.781, 3407943026538932749\n", + "[2016-04-10 00:00:00.0,12], 0, 11, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:43:47.781, 3407943026538932749\n", + "[2016-04-10 00:00:00.0,13], 0, 13, 1, 1971, 0, 0, 0, 0, 2024-12-09 12:43:47.781, 3407943026538932749\n", + "[2016-04-10 00:00:00.0,14], 0, 17, 1, 2059, 0, 0, 0, 0, 2024-12-09 12:43:47.781, 3407943026538932749\n", + "[2016-03-15 00:00:00.0,10], 0, 8, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:47:04.897, 6701824489855167095\n", + "[2016-04-10 00:00:00.0,15], 0, 13, 1, 1926, 0, 0, 0, 0, 2024-12-09 12:43:47.781, 3407943026538932749\n", + "[2016-03-15 00:00:00.0,11], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:47:04.897, 6701824489855167095\n", + "[2016-03-15 00:00:00.0,12], 0, 9, 1, 1867, 0, 0, 0, 0, 2024-12-09 12:47:04.897, 6701824489855167095\n", + "[2016-03-15 00:00:00.0,13], 0, 7, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:47:04.897, 6701824489855167095\n", + "[2016-03-15 00:00:00.0,14], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:47:04.897, 6701824489855167095\n", + "[2016-01-30 00:00:00.0,3], 0, 11, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:43:44.824, 1612604338939849254\n", + "[2016-03-15 00:00:00.0,15], 0, 9, 1, 1890, 0, 0, 0, 0, 2024-12-09 12:47:04.897, 6701824489855167095\n", + "[2016-01-30 00:00:00.0,2], 0, 11, 1, 1925, 0, 0, 0, 0, 2024-12-09 12:43:44.824, 1612604338939849254\n", + "[2016-01-30 00:00:00.0,1], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:43:44.824, 1612604338939849254\n", + "[2016-01-30 00:00:00.0,0], 0, 8, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:43:44.824, 1612604338939849254\n", + "[2016-03-15 00:00:00.0,2], 0, 4, 1, 1712, 0, 0, 0, 0, 2024-12-09 12:47:04.897, 6701824489855167095\n", + "[2016-01-30 00:00:00.0,7], 0, 8, 1, 1859, 0, 0, 0, 0, 2024-12-09 12:43:44.824, 1612604338939849254\n", + "[2016-03-15 00:00:00.0,3], 0, 9, 1, 1887, 0, 0, 0, 0, 2024-12-09 12:47:04.897, 6701824489855167095\n", + "[2016-01-30 00:00:00.0,6], 0, 7, 1, 1798, 0, 0, 0, 0, 2024-12-09 12:43:44.824, 1612604338939849254\n", + "[2016-03-15 00:00:00.0,4], 0, 5, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:47:04.897, 6701824489855167095\n", + "[2016-01-30 00:00:00.0,5], 0, 14, 1, 1988, 0, 0, 0, 0, 2024-12-09 12:43:44.824, 1612604338939849254\n", + "[2016-03-15 00:00:00.0,5], 0, 8, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:47:04.897, 6701824489855167095\n", + "[2016-01-30 00:00:00.0,4], 0, 10, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:43:44.824, 1612604338939849254\n", + "[2016-03-15 00:00:00.0,6], 0, 8, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:47:04.897, 6701824489855167095\n", + "[2016-01-30 00:00:00.0,11], 0, 15, 1, 2066, 0, 0, 0, 0, 2024-12-09 12:43:44.824, 1612604338939849254\n", + "[2016-03-15 00:00:00.0,7], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:47:04.897, 6701824489855167095\n", + "[2016-01-30 00:00:00.0,10], 0, 2, 1, 1622, 0, 0, 0, 0, 2024-12-09 12:43:44.824, 1612604338939849254\n", + "[2016-03-15 00:00:00.0,8], 0, 3, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:47:04.897, 6701824489855167095\n", + "[2016-01-30 00:00:00.0,9], 0, 12, 1, 1924, 0, 0, 0, 0, 2024-12-09 12:43:44.824, 1612604338939849254\n", + "[2016-03-15 00:00:00.0,9], 0, 8, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:47:04.897, 6701824489855167095\n", + "[2016-01-30 00:00:00.0,8], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:43:44.824, 1612604338939849254\n", + "[2016-03-15 00:00:00.0,0], 0, 11, 1, 1885, 0, 0, 0, 0, 2024-12-09 12:47:04.897, 6701824489855167095\n", + "[2016-03-15 00:00:00.0,1], 0, 8, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:47:04.897, 6701824489855167095\n", + "[2016-07-09 00:00:00.0,11], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:33.794, 2767557493890700867\n", + "[2016-07-09 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:33.794, 2767557493890700867\n", + "[2016-07-09 00:00:00.0,9], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:47:33.794, 2767557493890700867\n", + "[2016-07-09 00:00:00.0,8], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:47:33.794, 2767557493890700867\n", + "[2016-07-09 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:33.794, 2767557493890700867\n", + "[2016-07-09 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:33.794, 2767557493890700867\n", + "[2016-07-09 00:00:00.0,3], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:33.794, 2767557493890700867\n", + "[2015-11-16 00:00:00.0,3], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:45:57.064, 6508046935868040665\n", + "[2015-11-16 00:00:00.0,2], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:45:57.064, 6508046935868040665\n", + "[2015-11-16 00:00:00.0,1], 0, 4, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:45:57.064, 6508046935868040665\n", + "[2015-11-16 00:00:00.0,0], 0, 4, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:45:57.064, 6508046935868040665\n", + "[2015-11-16 00:00:00.0,7], 0, 3, 1, 1661, 0, 0, 0, 0, 2024-12-09 12:45:57.064, 6508046935868040665\n", + "[2015-11-16 00:00:00.0,6], 0, 4, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:45:57.064, 6508046935868040665\n", + "[2015-11-16 00:00:00.0,5], 0, 3, 1, 1677, 0, 0, 0, 0, 2024-12-09 12:45:57.064, 6508046935868040665\n", + "[2015-11-16 00:00:00.0,4], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:45:57.064, 6508046935868040665\n", + "[2015-11-16 00:00:00.0,11], 0, 3, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:45:57.064, 6508046935868040665\n", + "[2015-11-16 00:00:00.0,10], 0, 3, 1, 1731, 0, 0, 0, 0, 2024-12-09 12:45:57.064, 6508046935868040665\n", + "[2015-11-16 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:57.064, 6508046935868040665\n", + "[2015-11-16 00:00:00.0,8], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:45:57.064, 6508046935868040665\n", + "[2015-11-16 00:00:00.0,15], 0, 4, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:45:57.064, 6508046935868040665\n", + "[2015-11-16 00:00:00.0,14], 0, 5, 1, 1749, 0, 0, 0, 0, 2024-12-09 12:45:57.064, 6508046935868040665\n", + "[2015-11-16 00:00:00.0,13], 0, 5, 1, 1753, 0, 0, 0, 0, 2024-12-09 12:45:57.064, 6508046935868040665\n", + "[2015-11-16 00:00:00.0,12], 0, 4, 1, 1710, 0, 0, 0, 0, 2024-12-09 12:45:57.064, 6508046935868040665\n", + "[2016-02-29 00:00:00.0,12], 0, 6, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:46:44.482, 7771352390962051163\n", + "[2016-02-29 00:00:00.0,13], 0, 5, 1, 1742, 0, 0, 0, 0, 2024-12-09 12:46:44.482, 7771352390962051163\n", + "[2016-02-29 00:00:00.0,14], 0, 6, 1, 1743, 0, 0, 0, 0, 2024-12-09 12:46:44.482, 7771352390962051163\n", + "[2016-02-29 00:00:00.0,15], 0, 9, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:46:44.482, 7771352390962051163\n", + "[2016-02-29 00:00:00.0,8], 0, 12, 1, 1924, 0, 0, 0, 0, 2024-12-09 12:46:44.482, 7771352390962051163\n", + "[2016-02-29 00:00:00.0,9], 0, 4, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:46:44.482, 7771352390962051163\n", + "[2016-02-29 00:00:00.0,10], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:46:44.482, 7771352390962051163\n", + "[2016-02-29 00:00:00.0,11], 0, 6, 1, 1786, 0, 0, 0, 0, 2024-12-09 12:46:44.482, 7771352390962051163\n", + "[2016-02-29 00:00:00.0,4], 0, 6, 1, 1763, 0, 0, 0, 0, 2024-12-09 12:46:44.482, 7771352390962051163\n", + "[2016-02-29 00:00:00.0,5], 0, 7, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:46:44.482, 7771352390962051163\n", + "[2016-02-29 00:00:00.0,6], 0, 7, 1, 1796, 0, 0, 0, 0, 2024-12-09 12:46:44.482, 7771352390962051163\n", + "[2016-02-29 00:00:00.0,7], 0, 9, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:46:44.482, 7771352390962051163\n", + "[2016-02-29 00:00:00.0,0], 0, 7, 1, 1795, 0, 0, 0, 0, 2024-12-09 12:46:44.482, 7771352390962051163\n", + "[2016-02-29 00:00:00.0,1], 0, 4, 1, 1698, 0, 0, 0, 0, 2024-12-09 12:46:44.482, 7771352390962051163\n", + "[2016-02-29 00:00:00.0,2], 0, 9, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:46:44.482, 7771352390962051163\n", + "[2016-02-29 00:00:00.0,3], 0, 9, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:46:44.482, 7771352390962051163\n", + "[2015-12-16 00:00:00.0,6], 0, 2, 1, 1620, 0, 0, 0, 0, 2024-12-09 12:46:58.002, 5330582367385044650\n", + "[2015-12-16 00:00:00.0,5], 0, 6, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:46:58.002, 5330582367385044650\n", + "[2015-12-16 00:00:00.0,8], 0, 2, 1, 1620, 0, 0, 0, 0, 2024-12-09 12:46:58.002, 5330582367385044650\n", + "[2015-12-16 00:00:00.0,7], 0, 9, 1, 1889, 0, 0, 0, 0, 2024-12-09 12:46:58.002, 5330582367385044650\n", + "[2015-12-16 00:00:00.0,10], 0, 8, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:46:58.002, 5330582367385044650\n", + "[2015-12-16 00:00:00.0,9], 0, 5, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:46:58.002, 5330582367385044650\n", + "[2015-12-16 00:00:00.0,12], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:46:58.002, 5330582367385044650\n", + "[2015-12-16 00:00:00.0,11], 0, 5, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:46:58.002, 5330582367385044650\n", + "[2015-12-16 00:00:00.0,0], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:46:58.002, 5330582367385044650\n", + "[2015-12-16 00:00:00.0,2], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:46:58.002, 5330582367385044650\n", + "[2015-12-16 00:00:00.0,1], 0, 8, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:46:58.002, 5330582367385044650\n", + "[2015-12-16 00:00:00.0,4], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:46:58.002, 5330582367385044650\n", + "[2015-12-16 00:00:00.0,3], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:46:58.002, 5330582367385044650\n", + "[2016-02-07 00:00:00.0,3], 0, 6, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:44:36.075, 6883332980213500724\n", + "[2016-02-07 00:00:00.0,4], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:44:36.075, 6883332980213500724\n", + "[2016-02-07 00:00:00.0,5], 0, 4, 1, 1753, 0, 0, 0, 0, 2024-12-09 12:44:36.075, 6883332980213500724\n", + "[2016-02-07 00:00:00.0,6], 0, 9, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:44:36.075, 6883332980213500724\n", + "[2016-02-07 00:00:00.0,7], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:44:36.075, 6883332980213500724\n", + "[2016-04-07 00:00:00.0,15], 0, 7, 1, 1774, 0, 0, 0, 0, 2024-12-09 12:44:33.228, 4483434807016427265\n", + "[2016-02-07 00:00:00.0,8], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:44:36.075, 6883332980213500724\n", + "[2016-04-07 00:00:00.0,14], 0, 8, 1, 1795, 0, 0, 0, 0, 2024-12-09 12:44:33.228, 4483434807016427265\n", + "[2016-02-07 00:00:00.0,9], 0, 3, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:44:36.075, 6883332980213500724\n", + "[2016-04-07 00:00:00.0,13], 0, 7, 1, 1802, 0, 0, 0, 0, 2024-12-09 12:44:33.228, 4483434807016427265\n", + "[2016-02-07 00:00:00.0,10], 0, 7, 1, 1796, 0, 0, 0, 0, 2024-12-09 12:44:36.075, 6883332980213500724\n", + "[2016-04-07 00:00:00.0,12], 0, 12, 1, 1929, 0, 0, 0, 0, 2024-12-09 12:44:33.228, 4483434807016427265\n", + "[2016-02-07 00:00:00.0,11], 0, 3, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:44:36.075, 6883332980213500724\n", + "[2016-04-07 00:00:00.0,11], 0, 16, 1, 1966, 0, 0, 0, 0, 2024-12-09 12:44:33.228, 4483434807016427265\n", + "[2016-02-07 00:00:00.0,12], 0, 4, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:44:36.075, 6883332980213500724\n", + "[2016-04-07 00:00:00.0,10], 0, 13, 1, 1924, 0, 0, 0, 0, 2024-12-09 12:44:33.228, 4483434807016427265\n", + "[2016-02-07 00:00:00.0,13], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:36.075, 6883332980213500724\n", + "[2016-04-07 00:00:00.0,9], 0, 6, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:44:33.228, 4483434807016427265\n", + "[2016-02-07 00:00:00.0,14], 0, 3, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:44:36.075, 6883332980213500724\n", + "[2016-04-07 00:00:00.0,8], 0, 11, 1, 1860, 0, 0, 0, 0, 2024-12-09 12:44:33.228, 4483434807016427265\n", + "[2016-02-07 00:00:00.0,15], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:44:36.075, 6883332980213500724\n", + "[2016-04-07 00:00:00.0,7], 0, 8, 1, 1849, 0, 0, 0, 0, 2024-12-09 12:44:33.228, 4483434807016427265\n", + "[2016-04-07 00:00:00.0,6], 0, 5, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:44:33.228, 4483434807016427265\n", + "[2016-04-07 00:00:00.0,5], 0, 13, 1, 1948, 0, 0, 0, 0, 2024-12-09 12:44:33.228, 4483434807016427265\n", + "[2016-04-07 00:00:00.0,4], 0, 9, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:44:33.228, 4483434807016427265\n", + "[2016-02-07 00:00:00.0,0], 0, 4, 1, 1722, 0, 0, 0, 0, 2024-12-09 12:44:36.075, 6883332980213500724\n", + "[2016-02-07 00:00:00.0,1], 0, 8, 1, 1795, 0, 0, 0, 0, 2024-12-09 12:44:36.075, 6883332980213500724\n", + "[2016-02-07 00:00:00.0,2], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:44:36.075, 6883332980213500724\n", + "[2016-04-22 00:00:00.0,14], 0, 7, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:44:32.246, 774100299630734575\n", + "[2016-04-22 00:00:00.0,9], 0, 6, 1, 1812, 0, 0, 0, 0, 2024-12-09 12:44:32.246, 774100299630734575\n", + "[2016-04-22 00:00:00.0,8], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:44:32.246, 774100299630734575\n", + "[2016-04-22 00:00:00.0,7], 0, 3, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:44:32.246, 774100299630734575\n", + "[2016-04-22 00:00:00.0,6], 0, 3, 1, 1663, 0, 0, 0, 0, 2024-12-09 12:44:32.246, 774100299630734575\n", + "[2016-04-22 00:00:00.0,13], 0, 5, 1, 1753, 0, 0, 0, 0, 2024-12-09 12:44:32.246, 774100299630734575\n", + "[2016-04-22 00:00:00.0,12], 0, 3, 1, 1662, 0, 0, 0, 0, 2024-12-09 12:44:32.246, 774100299630734575\n", + "[2016-04-22 00:00:00.0,11], 0, 4, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:44:32.246, 774100299630734575\n", + "[2016-04-22 00:00:00.0,10], 0, 4, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:44:32.246, 774100299630734575\n", + "[2015-12-28 00:00:00.0,10], 0, 17, 1, 2106, 0, 0, 0, 0, 2024-12-09 12:46:01.247, 1790004577637329504\n", + "[2016-04-22 00:00:00.0,1], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:44:32.246, 774100299630734575\n", + "[2015-12-28 00:00:00.0,11], 0, 15, 1, 1986, 0, 0, 0, 0, 2024-12-09 12:46:01.247, 1790004577637329504\n", + "[2016-04-22 00:00:00.0,0], 0, 5, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:44:32.246, 774100299630734575\n", + "[2015-12-28 00:00:00.0,8], 0, 13, 1, 1992, 0, 0, 0, 0, 2024-12-09 12:46:01.247, 1790004577637329504\n", + "[2015-12-28 00:00:00.0,9], 0, 17, 1, 2053, 0, 0, 0, 0, 2024-12-09 12:46:01.247, 1790004577637329504\n", + "[2015-12-28 00:00:00.0,6], 0, 11, 1, 1950, 0, 0, 0, 0, 2024-12-09 12:46:01.247, 1790004577637329504\n", + "[2016-04-22 00:00:00.0,5], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:44:32.246, 774100299630734575\n", + "[2015-12-28 00:00:00.0,7], 0, 8, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:46:01.247, 1790004577637329504\n", + "[2016-04-22 00:00:00.0,4], 0, 8, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:44:32.246, 774100299630734575\n", + "[2015-12-28 00:00:00.0,4], 0, 12, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:46:01.247, 1790004577637329504\n", + "[2016-04-22 00:00:00.0,3], 0, 3, 1, 1731, 0, 0, 0, 0, 2024-12-09 12:44:32.246, 774100299630734575\n", + "[2015-12-28 00:00:00.0,5], 0, 12, 1, 1950, 0, 0, 0, 0, 2024-12-09 12:46:01.247, 1790004577637329504\n", + "[2016-04-22 00:00:00.0,2], 0, 7, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:44:32.246, 774100299630734575\n", + "[2016-01-03 00:00:00.0,1], 0, 9, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:45:20.22, 1224082906619431891\n", + "[2016-01-03 00:00:00.0,2], 0, 8, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:45:20.22, 1224082906619431891\n", + "[2016-03-11 00:00:00.0,15], 0, 11, 1, 1882, 0, 0, 0, 0, 2024-12-09 12:43:42.003, 7389972761248223673\n", + "[2016-01-03 00:00:00.0,0], 0, 12, 1, 1947, 0, 0, 0, 0, 2024-12-09 12:45:20.22, 1224082906619431891\n", + "[2015-12-28 00:00:00.0,14], 0, 17, 1, 2031, 0, 0, 0, 0, 2024-12-09 12:46:01.247, 1790004577637329504\n", + "[2016-03-11 00:00:00.0,13], 0, 13, 1, 1945, 0, 0, 0, 0, 2024-12-09 12:43:42.003, 7389972761248223673\n", + "[2015-12-28 00:00:00.0,15], 0, 8, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:46:01.247, 1790004577637329504\n", + "[2016-03-11 00:00:00.0,14], 0, 10, 1, 1885, 0, 0, 0, 0, 2024-12-09 12:43:42.003, 7389972761248223673\n", + "[2015-12-28 00:00:00.0,12], 0, 7, 1, 1799, 0, 0, 0, 0, 2024-12-09 12:46:01.247, 1790004577637329504\n", + "[2016-03-11 00:00:00.0,11], 0, 10, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:43:42.003, 7389972761248223673\n", + "[2015-12-28 00:00:00.0,13], 0, 7, 1, 1779, 0, 0, 0, 0, 2024-12-09 12:46:01.247, 1790004577637329504\n", + "[2016-03-11 00:00:00.0,12], 0, 14, 1, 1944, 0, 0, 0, 0, 2024-12-09 12:43:42.003, 7389972761248223673\n", + "[2016-01-03 00:00:00.0,9], 0, 12, 1, 1905, 0, 0, 0, 0, 2024-12-09 12:45:20.22, 1224082906619431891\n", + "[2016-03-11 00:00:00.0,9], 0, 17, 1, 2052, 0, 0, 0, 0, 2024-12-09 12:43:42.003, 7389972761248223673\n", + "[2016-01-03 00:00:00.0,10], 0, 15, 1, 1994, 0, 0, 0, 0, 2024-12-09 12:45:20.22, 1224082906619431891\n", + "[2016-03-11 00:00:00.0,10], 0, 9, 1, 1858, 0, 0, 0, 0, 2024-12-09 12:43:42.003, 7389972761248223673\n", + "[2016-01-03 00:00:00.0,7], 0, 10, 1, 1887, 0, 0, 0, 0, 2024-12-09 12:45:20.22, 1224082906619431891\n", + "[2016-03-11 00:00:00.0,7], 0, 14, 1, 1946, 0, 0, 0, 0, 2024-12-09 12:43:42.003, 7389972761248223673\n", + "[2016-01-03 00:00:00.0,8], 0, 8, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:45:20.22, 1224082906619431891\n", + "[2016-03-11 00:00:00.0,8], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:43:42.003, 7389972761248223673\n", + "[2016-01-03 00:00:00.0,5], 0, 10, 1, 1907, 0, 0, 0, 0, 2024-12-09 12:45:20.22, 1224082906619431891\n", + "[2016-03-11 00:00:00.0,5], 0, 12, 1, 2000, 0, 0, 0, 0, 2024-12-09 12:43:42.003, 7389972761248223673\n", + "[2016-01-03 00:00:00.0,6], 0, 11, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:45:20.22, 1224082906619431891\n", + "[2016-03-11 00:00:00.0,6], 0, 14, 1, 2008, 0, 0, 0, 0, 2024-12-09 12:43:42.003, 7389972761248223673\n", + "[2016-01-03 00:00:00.0,3], 0, 14, 1, 2046, 0, 0, 0, 0, 2024-12-09 12:45:20.22, 1224082906619431891\n", + "[2016-03-11 00:00:00.0,3], 0, 6, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:43:42.003, 7389972761248223673\n", + "[2016-01-03 00:00:00.0,4], 0, 5, 1, 1765, 0, 0, 0, 0, 2024-12-09 12:45:20.22, 1224082906619431891\n", + "[2016-03-11 00:00:00.0,4], 0, 22, 1, 2113, 0, 0, 0, 0, 2024-12-09 12:43:42.003, 7389972761248223673\n", + "[2015-12-28 00:00:00.0,2], 0, 8, 1, 1885, 0, 0, 0, 0, 2024-12-09 12:46:01.247, 1790004577637329504\n", + "[2016-03-11 00:00:00.0,1], 0, 14, 1, 1966, 0, 0, 0, 0, 2024-12-09 12:43:42.003, 7389972761248223673\n", + "[2015-12-28 00:00:00.0,3], 0, 7, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:46:01.247, 1790004577637329504\n", + "[2016-03-11 00:00:00.0,2], 0, 12, 1, 1924, 0, 0, 0, 0, 2024-12-09 12:43:42.003, 7389972761248223673\n", + "[2015-12-28 00:00:00.0,0], 0, 14, 1, 1994, 0, 0, 0, 0, 2024-12-09 12:46:01.247, 1790004577637329504\n", + "[2016-01-03 00:00:00.0,15], 0, 10, 1, 1911, 0, 0, 0, 0, 2024-12-09 12:45:20.22, 1224082906619431891\n", + "[2015-12-28 00:00:00.0,1], 0, 10, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:46:01.247, 1790004577637329504\n", + "[2016-03-11 00:00:00.0,0], 0, 10, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:43:42.003, 7389972761248223673\n", + "[2016-01-03 00:00:00.0,13], 0, 12, 1, 1949, 0, 0, 0, 0, 2024-12-09 12:45:20.22, 1224082906619431891\n", + "[2016-01-03 00:00:00.0,14], 0, 10, 1, 1862, 0, 0, 0, 0, 2024-12-09 12:45:20.22, 1224082906619431891\n", + "[2016-01-03 00:00:00.0,11], 0, 6, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:45:20.22, 1224082906619431891\n", + "[2016-01-03 00:00:00.0,12], 0, 4, 1, 1755, 0, 0, 0, 0, 2024-12-09 12:45:20.22, 1224082906619431891\n", + "[2016-01-18 00:00:00.0,13], 0, 13, 1, 1993, 0, 0, 0, 0, 2024-12-09 12:43:49.341, 1535571162732990141\n", + "[2016-01-18 00:00:00.0,14], 0, 15, 1, 2008, 0, 0, 0, 0, 2024-12-09 12:43:49.341, 1535571162732990141\n", + "[2016-01-18 00:00:00.0,15], 0, 8, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:43:49.341, 1535571162732990141\n", + "[2016-01-18 00:00:00.0,5], 0, 12, 1, 1973, 0, 0, 0, 0, 2024-12-09 12:43:49.341, 1535571162732990141\n", + "[2016-01-18 00:00:00.0,6], 0, 15, 1, 2012, 0, 0, 0, 0, 2024-12-09 12:43:49.341, 1535571162732990141\n", + "[2016-01-18 00:00:00.0,7], 0, 12, 1, 1952, 0, 0, 0, 0, 2024-12-09 12:43:49.341, 1535571162732990141\n", + "[2016-01-18 00:00:00.0,8], 0, 11, 1, 1928, 0, 0, 0, 0, 2024-12-09 12:43:49.341, 1535571162732990141\n", + "[2016-01-18 00:00:00.0,9], 0, 10, 1, 1930, 0, 0, 0, 0, 2024-12-09 12:43:49.341, 1535571162732990141\n", + "[2016-01-18 00:00:00.0,10], 0, 16, 1, 2030, 0, 0, 0, 0, 2024-12-09 12:43:49.341, 1535571162732990141\n", + "[2016-01-18 00:00:00.0,11], 0, 14, 1, 2012, 0, 0, 0, 0, 2024-12-09 12:43:49.341, 1535571162732990141\n", + "[2016-01-18 00:00:00.0,12], 0, 12, 1, 1924, 0, 0, 0, 0, 2024-12-09 12:43:49.341, 1535571162732990141\n", + "[2016-01-18 00:00:00.0,0], 0, 10, 1, 1910, 0, 0, 0, 0, 2024-12-09 12:43:49.341, 1535571162732990141\n", + "[2016-01-18 00:00:00.0,1], 0, 13, 1, 1993, 0, 0, 0, 0, 2024-12-09 12:43:49.341, 1535571162732990141\n", + "[2016-01-18 00:00:00.0,2], 0, 13, 1, 1971, 0, 0, 0, 0, 2024-12-09 12:43:49.341, 1535571162732990141\n", + "[2016-01-18 00:00:00.0,3], 0, 16, 1, 2051, 0, 0, 0, 0, 2024-12-09 12:43:49.341, 1535571162732990141\n", + "[2016-01-18 00:00:00.0,4], 0, 5, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:43:49.341, 1535571162732990141\n", + "[2016-04-07 00:00:00.0,3], 0, 10, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:44:33.228, 4483434807016427265\n", + "[2016-04-07 00:00:00.0,2], 0, 13, 1, 1927, 0, 0, 0, 0, 2024-12-09 12:44:33.228, 4483434807016427265\n", + "[2016-04-07 00:00:00.0,1], 0, 8, 1, 1795, 0, 0, 0, 0, 2024-12-09 12:44:33.228, 4483434807016427265\n", + "[2016-04-07 00:00:00.0,0], 0, 13, 1, 1927, 0, 0, 0, 0, 2024-12-09 12:44:33.228, 4483434807016427265\n", + "[2016-09-19 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:41.089, 269358450105578146\n", + "[2016-09-19 00:00:00.0,11], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:41.089, 269358450105578146\n", + "[2016-02-22 00:00:00.0,10], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:47:05.822, 8254111752777921113\n", + "[2016-03-08 00:00:00.0,12], 0, 7, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:46:23.117, 990381440169987861\n", + "[2016-02-22 00:00:00.0,9], 0, 3, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:47:05.822, 8254111752777921113\n", + "[2016-03-08 00:00:00.0,11], 0, 8, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:46:23.117, 990381440169987861\n", + "[2016-03-26 00:00:00.0,0], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:45:02.409, 6723516983185131191\n", + "[2016-02-22 00:00:00.0,12], 0, 8, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:47:05.822, 8254111752777921113\n", + "[2016-03-08 00:00:00.0,14], 0, 4, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:46:23.117, 990381440169987861\n", + "[2016-02-22 00:00:00.0,11], 0, 8, 1, 1860, 0, 0, 0, 0, 2024-12-09 12:47:05.822, 8254111752777921113\n", + "[2016-03-08 00:00:00.0,13], 0, 3, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:46:23.117, 990381440169987861\n", + "[2016-02-22 00:00:00.0,6], 0, 7, 1, 1777, 0, 0, 0, 0, 2024-12-09 12:47:05.822, 8254111752777921113\n", + "[2016-03-08 00:00:00.0,8], 0, 11, 1, 1901, 0, 0, 0, 0, 2024-12-09 12:46:23.117, 990381440169987861\n", + "[2016-03-26 00:00:00.0,3], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:45:02.409, 6723516983185131191\n", + "[2016-02-22 00:00:00.0,5], 0, 7, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:47:05.822, 8254111752777921113\n", + "[2016-03-08 00:00:00.0,7], 0, 12, 1, 1970, 0, 0, 0, 0, 2024-12-09 12:46:23.117, 990381440169987861\n", + "[2016-03-26 00:00:00.0,4], 0, 11, 1, 1907, 0, 0, 0, 0, 2024-12-09 12:45:02.409, 6723516983185131191\n", + "[2016-02-22 00:00:00.0,8], 0, 6, 1, 1789, 0, 0, 0, 0, 2024-12-09 12:47:05.822, 8254111752777921113\n", + "[2016-03-08 00:00:00.0,10], 0, 13, 1, 1968, 0, 0, 0, 0, 2024-12-09 12:46:23.117, 990381440169987861\n", + "[2016-03-26 00:00:00.0,1], 0, 12, 1, 1925, 0, 0, 0, 0, 2024-12-09 12:45:02.409, 6723516983185131191\n", + "[2016-02-22 00:00:00.0,7], 0, 7, 1, 1799, 0, 0, 0, 0, 2024-12-09 12:47:05.822, 8254111752777921113\n", + "[2016-03-08 00:00:00.0,9], 0, 13, 1, 2018, 0, 0, 0, 0, 2024-12-09 12:46:23.117, 990381440169987861\n", + "[2016-03-26 00:00:00.0,2], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:45:02.409, 6723516983185131191\n", + "[2016-03-26 00:00:00.0,7], 0, 9, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:45:02.409, 6723516983185131191\n", + "[2016-03-26 00:00:00.0,8], 0, 5, 1, 1722, 0, 0, 0, 0, 2024-12-09 12:45:02.409, 6723516983185131191\n", + "[2016-03-26 00:00:00.0,5], 0, 12, 1, 1880, 0, 0, 0, 0, 2024-12-09 12:45:02.409, 6723516983185131191\n", + "[2016-03-26 00:00:00.0,6], 0, 9, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:45:02.409, 6723516983185131191\n", + "[2016-02-22 00:00:00.0,14], 0, 11, 1, 1929, 0, 0, 0, 0, 2024-12-09 12:47:05.822, 8254111752777921113\n", + "[2016-03-26 00:00:00.0,11], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:45:02.409, 6723516983185131191\n", + "[2016-02-22 00:00:00.0,13], 0, 9, 1, 1845, 0, 0, 0, 0, 2024-12-09 12:47:05.822, 8254111752777921113\n", + "[2016-03-08 00:00:00.0,15], 0, 16, 1, 2080, 0, 0, 0, 0, 2024-12-09 12:46:23.117, 990381440169987861\n", + "[2016-03-26 00:00:00.0,12], 0, 8, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:45:02.409, 6723516983185131191\n", + "[2016-03-26 00:00:00.0,9], 0, 5, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:45:02.409, 6723516983185131191\n", + "[2016-02-22 00:00:00.0,15], 0, 8, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:47:05.822, 8254111752777921113\n", + "[2016-03-26 00:00:00.0,10], 0, 13, 1, 1970, 0, 0, 0, 0, 2024-12-09 12:45:02.409, 6723516983185131191\n", + "[2016-03-26 00:00:00.0,15], 0, 4, 1, 1700, 0, 0, 0, 0, 2024-12-09 12:45:02.409, 6723516983185131191\n", + "[2016-03-26 00:00:00.0,13], 0, 3, 1, 1676, 0, 0, 0, 0, 2024-12-09 12:45:02.409, 6723516983185131191\n", + "[2016-03-26 00:00:00.0,14], 0, 9, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:45:02.409, 6723516983185131191\n", + "[2016-02-22 00:00:00.0,2], 0, 10, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:47:05.822, 8254111752777921113\n", + "[2016-03-08 00:00:00.0,4], 0, 13, 1, 1987, 0, 0, 0, 0, 2024-12-09 12:46:23.117, 990381440169987861\n", + "[2016-02-22 00:00:00.0,1], 0, 7, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:47:05.822, 8254111752777921113\n", + "[2016-03-08 00:00:00.0,3], 0, 11, 1, 1947, 0, 0, 0, 0, 2024-12-09 12:46:23.117, 990381440169987861\n", + "[2016-02-22 00:00:00.0,4], 0, 10, 1, 1885, 0, 0, 0, 0, 2024-12-09 12:47:05.822, 8254111752777921113\n", + "[2016-03-08 00:00:00.0,6], 0, 12, 1, 1925, 0, 0, 0, 0, 2024-12-09 12:46:23.117, 990381440169987861\n", + "[2016-02-22 00:00:00.0,3], 0, 10, 1, 1904, 0, 0, 0, 0, 2024-12-09 12:47:05.822, 8254111752777921113\n", + "[2016-03-08 00:00:00.0,5], 0, 9, 1, 1890, 0, 0, 0, 0, 2024-12-09 12:46:23.117, 990381440169987861\n", + "[2016-03-08 00:00:00.0,0], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:46:23.117, 990381440169987861\n", + "[2016-02-22 00:00:00.0,0], 0, 9, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:47:05.822, 8254111752777921113\n", + "[2016-03-08 00:00:00.0,2], 0, 10, 1, 1960, 0, 0, 0, 0, 2024-12-09 12:46:23.117, 990381440169987861\n", + "[2016-03-08 00:00:00.0,1], 0, 5, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:46:23.117, 990381440169987861\n", + "[2015-12-19 00:00:00.0,7], 0, 6, 1, 1789, 0, 0, 0, 0, 2024-12-09 12:44:20.26, 7209239268339040741\n", + "[2015-12-19 00:00:00.0,8], 0, 6, 1, 1789, 0, 0, 0, 0, 2024-12-09 12:44:20.26, 7209239268339040741\n", + "[2016-01-12 00:00:00.0,14], 0, 9, 1, 1888, 0, 0, 0, 0, 2024-12-09 12:46:38.892, 1747857104077628377\n", + "[2015-12-19 00:00:00.0,5], 0, 6, 1, 1813, 0, 0, 0, 0, 2024-12-09 12:44:20.26, 7209239268339040741\n", + "[2016-01-12 00:00:00.0,15], 0, 9, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:46:38.892, 1747857104077628377\n", + "[2015-12-19 00:00:00.0,6], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:44:20.26, 7209239268339040741\n", + "[2015-12-19 00:00:00.0,3], 0, 7, 1, 1822, 0, 0, 0, 0, 2024-12-09 12:44:20.26, 7209239268339040741\n", + "[2015-12-19 00:00:00.0,4], 0, 10, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:44:20.26, 7209239268339040741\n", + "[2015-12-19 00:00:00.0,1], 0, 8, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:44:20.26, 7209239268339040741\n", + "[2015-12-19 00:00:00.0,2], 0, 7, 1, 1824, 0, 0, 0, 0, 2024-12-09 12:44:20.26, 7209239268339040741\n", + "[2016-01-12 00:00:00.0,8], 0, 6, 1, 1788, 0, 0, 0, 0, 2024-12-09 12:46:38.892, 1747857104077628377\n", + "[2015-12-19 00:00:00.0,15], 0, 8, 1, 1838, 0, 0, 0, 0, 2024-12-09 12:44:20.26, 7209239268339040741\n", + "[2016-01-12 00:00:00.0,9], 0, 13, 1, 1950, 0, 0, 0, 0, 2024-12-09 12:46:38.892, 1747857104077628377\n", + "[2016-01-12 00:00:00.0,6], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:46:38.892, 1747857104077628377\n", + "[2015-12-19 00:00:00.0,13], 0, 6, 1, 1786, 0, 0, 0, 0, 2024-12-09 12:44:20.26, 7209239268339040741\n", + "[2016-01-12 00:00:00.0,7], 0, 12, 1, 1952, 0, 0, 0, 0, 2024-12-09 12:46:38.892, 1747857104077628377\n", + "[2015-12-19 00:00:00.0,14], 0, 3, 1, 1665, 0, 0, 0, 0, 2024-12-09 12:44:20.26, 7209239268339040741\n", + "[2016-01-12 00:00:00.0,12], 0, 7, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:46:38.892, 1747857104077628377\n", + "[2015-12-19 00:00:00.0,11], 0, 8, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:44:20.26, 7209239268339040741\n", + "[2016-01-12 00:00:00.0,13], 0, 9, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:46:38.892, 1747857104077628377\n", + "[2015-12-19 00:00:00.0,12], 0, 9, 1, 1909, 0, 0, 0, 0, 2024-12-09 12:44:20.26, 7209239268339040741\n", + "[2016-01-12 00:00:00.0,10], 0, 13, 1, 1949, 0, 0, 0, 0, 2024-12-09 12:46:38.892, 1747857104077628377\n", + "[2015-12-19 00:00:00.0,9], 0, 6, 1, 1743, 0, 0, 0, 0, 2024-12-09 12:44:20.26, 7209239268339040741\n", + "[2016-01-12 00:00:00.0,11], 0, 6, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:46:38.892, 1747857104077628377\n", + "[2015-12-19 00:00:00.0,10], 0, 5, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:44:20.26, 7209239268339040741\n", + "[2016-01-12 00:00:00.0,0], 0, 12, 1, 1963, 0, 0, 0, 0, 2024-12-09 12:46:38.892, 1747857104077628377\n", + "[2016-01-12 00:00:00.0,1], 0, 9, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:46:38.892, 1747857104077628377\n", + "[2016-01-12 00:00:00.0,4], 0, 10, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:46:38.892, 1747857104077628377\n", + "[2016-01-12 00:00:00.0,5], 0, 21, 1, 2158, 0, 0, 0, 0, 2024-12-09 12:46:38.892, 1747857104077628377\n", + "[2016-01-12 00:00:00.0,2], 0, 9, 1, 1887, 0, 0, 0, 0, 2024-12-09 12:46:38.892, 1747857104077628377\n", + "[2016-01-12 00:00:00.0,3], 0, 8, 1, 1838, 0, 0, 0, 0, 2024-12-09 12:46:38.892, 1747857104077628377\n", + "[2015-12-19 00:00:00.0,0], 0, 8, 1, 1860, 0, 0, 0, 0, 2024-12-09 12:44:20.26, 7209239268339040741\n", + "[2016-08-08 00:00:00.0,0], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:33.232, 1244347352612000756\n", + "[2016-08-08 00:00:00.0,1], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:33.232, 1244347352612000756\n", + "[2016-08-08 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:33.232, 1244347352612000756\n", + "[2016-08-08 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:33.232, 1244347352612000756\n", + "[2016-08-08 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:33.232, 1244347352612000756\n", + "[2016-02-25 00:00:00.0,2], 0, 9, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:47:23.47, 5601843643712554414\n", + "[2016-02-13 00:00:00.0,0], 0, 4, 1, 1705, 0, 0, 0, 0, 2024-12-09 12:45:54.518, 2148641601713913583\n", + "[2016-02-25 00:00:00.0,1], 0, 8, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:47:23.47, 5601843643712554414\n", + "[2016-02-13 00:00:00.0,1], 0, 14, 1, 1947, 0, 0, 0, 0, 2024-12-09 12:45:54.518, 2148641601713913583\n", + "[2016-02-25 00:00:00.0,4], 0, 12, 1, 1904, 0, 0, 0, 0, 2024-12-09 12:47:23.47, 5601843643712554414\n", + "[2016-02-25 00:00:00.0,3], 0, 8, 1, 1859, 0, 0, 0, 0, 2024-12-09 12:47:23.47, 5601843643712554414\n", + "[2016-02-25 00:00:00.0,6], 0, 8, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:47:23.47, 5601843643712554414\n", + "[2016-02-25 00:00:00.0,5], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:47:23.47, 5601843643712554414\n", + "[2016-02-25 00:00:00.0,8], 0, 10, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:47:23.47, 5601843643712554414\n", + "[2016-02-25 00:00:00.0,7], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:47:23.47, 5601843643712554414\n", + "[2016-02-10 00:00:00.0,15], 0, 5, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:46:16.236, 3749133790979920604\n", + "[2016-02-10 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:16.236, 3749133790979920604\n", + "[2016-02-25 00:00:00.0,0], 0, 11, 1, 1947, 0, 0, 0, 0, 2024-12-09 12:47:23.47, 5601843643712554414\n", + "[2016-02-13 00:00:00.0,14], 0, 10, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:45:54.518, 2148641601713913583\n", + "[2016-02-13 00:00:00.0,15], 0, 12, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:45:54.518, 2148641601713913583\n", + "[2016-02-13 00:00:00.0,12], 0, 6, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:45:54.518, 2148641601713913583\n", + "[2016-02-13 00:00:00.0,13], 0, 18, 1, 2028, 0, 0, 0, 0, 2024-12-09 12:45:54.518, 2148641601713913583\n", + "[2016-02-13 00:00:00.0,10], 0, 13, 1, 1942, 0, 0, 0, 0, 2024-12-09 12:45:54.518, 2148641601713913583\n", + "[2016-02-13 00:00:00.0,11], 0, 10, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:45:54.518, 2148641601713913583\n", + "[2016-02-25 00:00:00.0,10], 0, 12, 1, 1948, 0, 0, 0, 0, 2024-12-09 12:47:23.47, 5601843643712554414\n", + "[2016-02-13 00:00:00.0,8], 0, 13, 1, 1992, 0, 0, 0, 0, 2024-12-09 12:45:54.518, 2148641601713913583\n", + "[2016-02-25 00:00:00.0,9], 0, 6, 1, 1790, 0, 0, 0, 0, 2024-12-09 12:47:23.47, 5601843643712554414\n", + "[2016-02-13 00:00:00.0,9], 0, 12, 1, 1922, 0, 0, 0, 0, 2024-12-09 12:45:54.518, 2148641601713913583\n", + "[2016-02-25 00:00:00.0,12], 0, 7, 1, 1819, 0, 0, 0, 0, 2024-12-09 12:47:23.47, 5601843643712554414\n", + "[2016-02-13 00:00:00.0,6], 0, 10, 1, 1882, 0, 0, 0, 0, 2024-12-09 12:45:54.518, 2148641601713913583\n", + "[2016-02-25 00:00:00.0,11], 0, 11, 1, 1860, 0, 0, 0, 0, 2024-12-09 12:47:23.47, 5601843643712554414\n", + "[2016-02-13 00:00:00.0,7], 0, 9, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:45:54.518, 2148641601713913583\n", + "[2016-02-25 00:00:00.0,14], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:47:23.47, 5601843643712554414\n", + "[2016-02-13 00:00:00.0,4], 0, 9, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:45:54.518, 2148641601713913583\n", + "[2016-02-25 00:00:00.0,13], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:47:23.47, 5601843643712554414\n", + "[2016-02-13 00:00:00.0,5], 0, 12, 1, 1907, 0, 0, 0, 0, 2024-12-09 12:45:54.518, 2148641601713913583\n", + "[2016-02-13 00:00:00.0,2], 0, 12, 1, 1949, 0, 0, 0, 0, 2024-12-09 12:45:54.518, 2148641601713913583\n", + "[2016-02-25 00:00:00.0,15], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:47:23.47, 5601843643712554414\n", + "[2016-02-13 00:00:00.0,3], 0, 9, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:45:54.518, 2148641601713913583\n", + "[2016-05-28 00:00:00.0,4], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:47:39.269, 6675909517015670727\n", + "[2016-05-28 00:00:00.0,5], 0, 2, 1, 1614, 0, 0, 0, 0, 2024-12-09 12:47:39.269, 6675909517015670727\n", + "[2016-05-28 00:00:00.0,2], 0, 4, 1, 1755, 0, 0, 0, 0, 2024-12-09 12:47:39.269, 6675909517015670727\n", + "[2016-05-28 00:00:00.0,3], 0, 6, 1, 1743, 0, 0, 0, 0, 2024-12-09 12:47:39.269, 6675909517015670727\n", + "[2016-05-28 00:00:00.0,8], 0, 2, 1, 1614, 0, 0, 0, 0, 2024-12-09 12:47:39.269, 6675909517015670727\n", + "[2016-05-28 00:00:00.0,9], 0, 2, 1, 1710, 0, 0, 0, 0, 2024-12-09 12:47:39.269, 6675909517015670727\n", + "[2015-12-04 00:00:00.0,14], 0, 6, 1, 1787, 0, 0, 0, 0, 2024-12-09 12:47:08.223, 8198116734836905912\n", + "[2016-05-28 00:00:00.0,7], 0, 3, 1, 1732, 0, 0, 0, 0, 2024-12-09 12:47:39.269, 6675909517015670727\n", + "[2015-12-04 00:00:00.0,15], 0, 7, 1, 1822, 0, 0, 0, 0, 2024-12-09 12:47:08.223, 8198116734836905912\n", + "[2016-05-28 00:00:00.0,12], 0, 3, 1, 1732, 0, 0, 0, 0, 2024-12-09 12:47:39.269, 6675909517015670727\n", + "[2015-12-04 00:00:00.0,12], 0, 12, 1, 1927, 0, 0, 0, 0, 2024-12-09 12:47:08.223, 8198116734836905912\n", + "[2016-05-28 00:00:00.0,13], 0, 2, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:47:39.269, 6675909517015670727\n", + "[2015-12-04 00:00:00.0,13], 0, 5, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:47:08.223, 8198116734836905912\n", + "[2016-05-28 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:39.269, 6675909517015670727\n", + "[2015-12-04 00:00:00.0,10], 0, 7, 1, 1822, 0, 0, 0, 0, 2024-12-09 12:47:08.223, 8198116734836905912\n", + "[2016-05-28 00:00:00.0,11], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:39.269, 6675909517015670727\n", + "[2015-12-04 00:00:00.0,11], 0, 10, 1, 1927, 0, 0, 0, 0, 2024-12-09 12:47:08.223, 8198116734836905912\n", + "[2015-12-04 00:00:00.0,8], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:47:08.223, 8198116734836905912\n", + "[2015-12-04 00:00:00.0,9], 0, 7, 1, 1801, 0, 0, 0, 0, 2024-12-09 12:47:08.223, 8198116734836905912\n", + "[2016-05-28 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:39.269, 6675909517015670727\n", + "[2015-12-04 00:00:00.0,6], 0, 7, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:47:08.223, 8198116734836905912\n", + "[2016-05-28 00:00:00.0,15], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:47:39.269, 6675909517015670727\n", + "[2015-12-04 00:00:00.0,7], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:47:08.223, 8198116734836905912\n", + "[2015-11-19 00:00:00.0,4], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:45:33.109, 102783218638552492\n", + "[2015-11-19 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:33.109, 102783218638552492\n", + "[2015-11-19 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:33.109, 102783218638552492\n", + "[2015-11-19 00:00:00.0,9], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:45:33.109, 102783218638552492\n", + "[2015-11-19 00:00:00.0,8], 0, 3, 1, 1682, 0, 0, 0, 0, 2024-12-09 12:45:33.109, 102783218638552492\n", + "[2015-11-19 00:00:00.0,11], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:33.109, 102783218638552492\n", + "[2015-11-19 00:00:00.0,10], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:45:33.109, 102783218638552492\n", + "[2015-11-19 00:00:00.0,13], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:33.109, 102783218638552492\n", + "[2015-11-19 00:00:00.0,12], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:45:33.109, 102783218638552492\n", + "[2016-05-28 00:00:00.0,0], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:47:39.269, 6675909517015670727\n", + "[2016-05-28 00:00:00.0,1], 0, 2, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:47:39.269, 6675909517015670727\n", + "[2015-12-04 00:00:00.0,4], 0, 2, 1, 1620, 0, 0, 0, 0, 2024-12-09 12:47:08.223, 8198116734836905912\n", + "[2015-12-04 00:00:00.0,5], 0, 6, 1, 1812, 0, 0, 0, 0, 2024-12-09 12:47:08.223, 8198116734836905912\n", + "[2015-12-04 00:00:00.0,2], 0, 7, 1, 1824, 0, 0, 0, 0, 2024-12-09 12:47:08.223, 8198116734836905912\n", + "[2015-12-04 00:00:00.0,3], 0, 9, 1, 1890, 0, 0, 0, 0, 2024-12-09 12:47:08.223, 8198116734836905912\n", + "[2015-12-04 00:00:00.0,0], 0, 6, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:47:08.223, 8198116734836905912\n", + "[2015-12-04 00:00:00.0,1], 0, 8, 1, 1842, 0, 0, 0, 0, 2024-12-09 12:47:08.223, 8198116734836905912\n", + "[2015-11-28 00:00:00.0,0], 0, 6, 1, 1813, 0, 0, 0, 0, 2024-12-09 12:46:26.539, 2551648968853595606\n", + "[2015-11-28 00:00:00.0,1], 0, 7, 1, 1844, 0, 0, 0, 0, 2024-12-09 12:46:26.539, 2551648968853595606\n", + "[2015-11-28 00:00:00.0,2], 0, 9, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:46:26.539, 2551648968853595606\n", + "[2015-11-28 00:00:00.0,3], 0, 10, 1, 1907, 0, 0, 0, 0, 2024-12-09 12:46:26.539, 2551648968853595606\n", + "[2015-11-28 00:00:00.0,4], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:46:26.539, 2551648968853595606\n", + "[2015-11-28 00:00:00.0,5], 0, 8, 1, 1863, 0, 0, 0, 0, 2024-12-09 12:46:26.539, 2551648968853595606\n", + "[2015-11-28 00:00:00.0,6], 0, 10, 1, 1909, 0, 0, 0, 0, 2024-12-09 12:46:26.539, 2551648968853595606\n", + "[2016-03-29 00:00:00.0,0], 0, 6, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:45:27.484, 8509329418267523093\n", + "[2016-05-22 00:00:00.0,14], 0, 5, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:44:35.144, 8162050796315667519\n", + "[2016-05-22 00:00:00.0,15], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:44:35.144, 8162050796315667519\n", + "[2016-05-22 00:00:00.0,10], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:44:35.144, 8162050796315667519\n", + "[2016-05-22 00:00:00.0,11], 0, 6, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:44:35.144, 8162050796315667519\n", + "[2016-05-22 00:00:00.0,12], 0, 8, 1, 1798, 0, 0, 0, 0, 2024-12-09 12:44:35.144, 8162050796315667519\n", + "[2016-05-22 00:00:00.0,13], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:44:35.144, 8162050796315667519\n", + "[2015-10-29 00:00:00.0,1], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:03.718, 9126210248501359946\n", + "[2015-10-29 00:00:00.0,2], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:45:03.718, 9126210248501359946\n", + "[2015-10-29 00:00:00.0,0], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:45:03.718, 9126210248501359946\n", + "[2016-03-29 00:00:00.0,4], 0, 6, 1, 1809, 0, 0, 0, 0, 2024-12-09 12:45:27.484, 8509329418267523093\n", + "[2016-04-28 00:00:00.0,14], 0, 9, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:44:26.085, 740006056512504631\n", + "[2016-03-29 00:00:00.0,3], 0, 9, 1, 1859, 0, 0, 0, 0, 2024-12-09 12:45:27.484, 8509329418267523093\n", + "[2016-04-28 00:00:00.0,13], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:44:26.085, 740006056512504631\n", + "[2016-03-29 00:00:00.0,2], 0, 12, 1, 1946, 0, 0, 0, 0, 2024-12-09 12:45:27.484, 8509329418267523093\n", + "[2016-05-22 00:00:00.0,0], 0, 4, 1, 1701, 0, 0, 0, 0, 2024-12-09 12:44:35.144, 8162050796315667519\n", + "[2016-03-29 00:00:00.0,1], 0, 4, 1, 1724, 0, 0, 0, 0, 2024-12-09 12:45:27.484, 8509329418267523093\n", + "[2016-05-22 00:00:00.0,1], 0, 6, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:44:35.144, 8162050796315667519\n", + "[2016-04-28 00:00:00.0,15], 0, 5, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:44:26.085, 740006056512504631\n", + "[2016-03-29 00:00:00.0,8], 0, 10, 1, 1910, 0, 0, 0, 0, 2024-12-09 12:45:27.484, 8509329418267523093\n", + "[2016-03-29 00:00:00.0,7], 0, 9, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:45:27.484, 8509329418267523093\n", + "[2016-03-29 00:00:00.0,6], 0, 7, 1, 1798, 0, 0, 0, 0, 2024-12-09 12:45:27.484, 8509329418267523093\n", + "[2016-03-29 00:00:00.0,5], 0, 6, 1, 1766, 0, 0, 0, 0, 2024-12-09 12:45:27.484, 8509329418267523093\n", + "[2016-03-29 00:00:00.0,12], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:45:27.484, 8509329418267523093\n", + "[2016-05-22 00:00:00.0,6], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:44:35.144, 8162050796315667519\n", + "[2016-04-28 00:00:00.0,6], 0, 9, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:44:26.085, 740006056512504631\n", + "[2016-03-29 00:00:00.0,11], 0, 6, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:45:27.484, 8509329418267523093\n", + "[2016-05-22 00:00:00.0,7], 0, 3, 1, 1683, 0, 0, 0, 0, 2024-12-09 12:44:35.144, 8162050796315667519\n", + "[2016-04-28 00:00:00.0,5], 0, 7, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:44:26.085, 740006056512504631\n", + "[2016-03-29 00:00:00.0,10], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:45:27.484, 8509329418267523093\n", + "[2016-05-22 00:00:00.0,8], 0, 8, 1, 1794, 0, 0, 0, 0, 2024-12-09 12:44:35.144, 8162050796315667519\n", + "[2016-04-28 00:00:00.0,8], 0, 7, 1, 1778, 0, 0, 0, 0, 2024-12-09 12:44:26.085, 740006056512504631\n", + "[2016-03-29 00:00:00.0,9], 0, 6, 1, 1798, 0, 0, 0, 0, 2024-12-09 12:45:27.484, 8509329418267523093\n", + "[2016-05-22 00:00:00.0,9], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:44:35.144, 8162050796315667519\n", + "[2016-04-28 00:00:00.0,7], 0, 7, 1, 1798, 0, 0, 0, 0, 2024-12-09 12:44:26.085, 740006056512504631\n", + "[2016-05-22 00:00:00.0,2], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:44:35.144, 8162050796315667519\n", + "[2016-04-28 00:00:00.0,10], 0, 8, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:44:26.085, 740006056512504631\n", + "[2016-03-29 00:00:00.0,15], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:45:27.484, 8509329418267523093\n", + "[2016-05-22 00:00:00.0,3], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:44:35.144, 8162050796315667519\n", + "[2016-04-28 00:00:00.0,9], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:44:26.085, 740006056512504631\n", + "[2016-03-29 00:00:00.0,14], 0, 9, 1, 1909, 0, 0, 0, 0, 2024-12-09 12:45:27.484, 8509329418267523093\n", + "[2016-05-22 00:00:00.0,4], 0, 6, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:44:35.144, 8162050796315667519\n", + "[2016-04-28 00:00:00.0,12], 0, 5, 1, 1772, 0, 0, 0, 0, 2024-12-09 12:44:26.085, 740006056512504631\n", + "[2016-03-29 00:00:00.0,13], 0, 7, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:45:27.484, 8509329418267523093\n", + "[2016-05-22 00:00:00.0,5], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:44:35.144, 8162050796315667519\n", + "[2016-04-28 00:00:00.0,11], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:44:26.085, 740006056512504631\n", + "[2015-11-28 00:00:00.0,7], 0, 9, 1, 1888, 0, 0, 0, 0, 2024-12-09 12:46:26.539, 2551648968853595606\n", + "[2015-11-28 00:00:00.0,8], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:46:26.539, 2551648968853595606\n", + "[2015-11-28 00:00:00.0,9], 0, 10, 1, 1931, 0, 0, 0, 0, 2024-12-09 12:46:26.539, 2551648968853595606\n", + "[2016-04-28 00:00:00.0,0], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:44:26.085, 740006056512504631\n", + "[2015-11-28 00:00:00.0,10], 0, 10, 1, 1901, 0, 0, 0, 0, 2024-12-09 12:46:26.539, 2551648968853595606\n", + "[2015-11-28 00:00:00.0,11], 0, 6, 1, 1793, 0, 0, 0, 0, 2024-12-09 12:46:26.539, 2551648968853595606\n", + "[2016-04-28 00:00:00.0,2], 0, 6, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:44:26.085, 740006056512504631\n", + "[2015-11-28 00:00:00.0,12], 0, 8, 1, 1844, 0, 0, 0, 0, 2024-12-09 12:46:26.539, 2551648968853595606\n", + "[2016-04-28 00:00:00.0,1], 0, 9, 1, 1816, 0, 0, 0, 0, 2024-12-09 12:44:26.085, 740006056512504631\n", + "[2015-11-28 00:00:00.0,13], 0, 10, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:46:26.539, 2551648968853595606\n", + "[2016-04-28 00:00:00.0,4], 0, 6, 1, 1788, 0, 0, 0, 0, 2024-12-09 12:44:26.085, 740006056512504631\n", + "[2015-11-28 00:00:00.0,14], 0, 8, 1, 1814, 0, 0, 0, 0, 2024-12-09 12:46:26.539, 2551648968853595606\n", + "[2016-04-28 00:00:00.0,3], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:44:26.085, 740006056512504631\n", + "[2015-11-28 00:00:00.0,15], 0, 6, 1, 1792, 0, 0, 0, 0, 2024-12-09 12:46:26.539, 2551648968853595606\n", + "[2015-10-29 00:00:00.0,15], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:03.718, 9126210248501359946\n", + "[2015-10-29 00:00:00.0,12], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:45:03.718, 9126210248501359946\n", + "[2015-10-29 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:03.718, 9126210248501359946\n", + "[2015-10-29 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:03.718, 9126210248501359946\n", + "[2015-10-29 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:03.718, 9126210248501359946\n", + "[2015-10-29 00:00:00.0,8], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:03.718, 9126210248501359946\n", + "[2015-10-29 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:03.718, 9126210248501359946\n", + "[2015-11-19 00:00:00.0,0], 0, 4, 1, 1728, 0, 0, 0, 0, 2024-12-09 12:45:33.109, 102783218638552492\n", + "[2015-11-19 00:00:00.0,3], 0, 5, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:45:33.109, 102783218638552492\n", + "[2015-11-19 00:00:00.0,2], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:45:33.109, 102783218638552492\n", + "[2016-04-19 00:00:00.0,12], 0, 10, 1, 1911, 0, 0, 0, 0, 2024-12-09 12:46:30.725, 4818094310536450689\n", + "[2016-04-19 00:00:00.0,13], 0, 6, 1, 1789, 0, 0, 0, 0, 2024-12-09 12:46:30.725, 4818094310536450689\n", + "[2016-04-19 00:00:00.0,10], 0, 8, 1, 1837, 0, 0, 0, 0, 2024-12-09 12:46:30.725, 4818094310536450689\n", + "[2016-04-19 00:00:00.0,11], 0, 8, 1, 1837, 0, 0, 0, 0, 2024-12-09 12:46:30.725, 4818094310536450689\n", + "[2016-04-19 00:00:00.0,14], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:46:30.725, 4818094310536450689\n", + "[2016-04-19 00:00:00.0,15], 0, 6, 1, 1769, 0, 0, 0, 0, 2024-12-09 12:46:30.725, 4818094310536450689\n", + "[2016-04-19 00:00:00.0,4], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:46:30.725, 4818094310536450689\n", + "[2016-04-19 00:00:00.0,5], 0, 14, 1, 2056, 0, 0, 0, 0, 2024-12-09 12:46:30.725, 4818094310536450689\n", + "[2016-04-19 00:00:00.0,2], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:46:30.725, 4818094310536450689\n", + "[2016-04-19 00:00:00.0,3], 0, 9, 1, 1866, 0, 0, 0, 0, 2024-12-09 12:46:30.725, 4818094310536450689\n", + "[2016-04-19 00:00:00.0,8], 0, 8, 1, 1816, 0, 0, 0, 0, 2024-12-09 12:46:30.725, 4818094310536450689\n", + "[2016-04-19 00:00:00.0,9], 0, 4, 1, 1728, 0, 0, 0, 0, 2024-12-09 12:46:30.725, 4818094310536450689\n", + "[2016-04-19 00:00:00.0,6], 0, 8, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:46:30.725, 4818094310536450689\n", + "[2016-04-19 00:00:00.0,7], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:46:30.725, 4818094310536450689\n", + "[2016-05-04 00:00:00.0,15], 0, 9, 1, 1885, 0, 0, 0, 0, 2024-12-09 12:45:07.356, 3847748022421993216\n", + "[2016-05-04 00:00:00.0,14], 0, 10, 1, 1909, 0, 0, 0, 0, 2024-12-09 12:45:07.356, 3847748022421993216\n", + "[2016-05-04 00:00:00.0,13], 0, 4, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:45:07.356, 3847748022421993216\n", + "[2016-04-13 00:00:00.0,2], 0, 15, 1, 2009, 0, 0, 0, 0, 2024-12-09 12:46:46.125, 995900223441361385\n", + "[2016-04-13 00:00:00.0,1], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:46:46.125, 995900223441361385\n", + "[2016-04-13 00:00:00.0,0], 0, 10, 1, 1835, 0, 0, 0, 0, 2024-12-09 12:46:46.125, 995900223441361385\n", + "[2016-04-13 00:00:00.0,14], 0, 10, 1, 1865, 0, 0, 0, 0, 2024-12-09 12:46:46.125, 995900223441361385\n", + "[2016-04-13 00:00:00.0,13], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:46:46.125, 995900223441361385\n", + "[2016-04-13 00:00:00.0,12], 0, 9, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:46:46.125, 995900223441361385\n", + "[2016-04-13 00:00:00.0,11], 0, 11, 1, 1860, 0, 0, 0, 0, 2024-12-09 12:46:46.125, 995900223441361385\n", + "[2016-04-19 00:00:00.0,0], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:46:30.725, 4818094310536450689\n", + "[2016-04-19 00:00:00.0,1], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:46:30.725, 4818094310536450689\n", + "[2016-04-13 00:00:00.0,15], 0, 6, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:46:46.125, 995900223441361385\n", + "[2016-04-13 00:00:00.0,6], 0, 11, 1, 1905, 0, 0, 0, 0, 2024-12-09 12:46:46.125, 995900223441361385\n", + "[2016-04-13 00:00:00.0,5], 0, 7, 1, 1777, 0, 0, 0, 0, 2024-12-09 12:46:46.125, 995900223441361385\n", + "[2016-04-13 00:00:00.0,4], 0, 10, 1, 1859, 0, 0, 0, 0, 2024-12-09 12:46:46.125, 995900223441361385\n", + "[2016-04-13 00:00:00.0,3], 0, 10, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:46:46.125, 995900223441361385\n", + "[2016-04-13 00:00:00.0,10], 0, 7, 1, 1778, 0, 0, 0, 0, 2024-12-09 12:46:46.125, 995900223441361385\n", + "[2016-04-13 00:00:00.0,9], 0, 13, 1, 1923, 0, 0, 0, 0, 2024-12-09 12:46:46.125, 995900223441361385\n", + "[2016-04-13 00:00:00.0,8], 0, 8, 1, 1814, 0, 0, 0, 0, 2024-12-09 12:46:46.125, 995900223441361385\n", + "[2016-04-13 00:00:00.0,7], 0, 10, 1, 1837, 0, 0, 0, 0, 2024-12-09 12:46:46.125, 995900223441361385\n", + "[2016-07-06 00:00:00.0,6], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:47:47.623, 6614537680991368769\n", + "[2015-12-13 00:00:00.0,1], 0, 6, 1, 1770, 0, 0, 0, 0, 2024-12-09 12:45:36.025, 3523256990847115207\n", + "[2015-11-13 00:00:00.0,7], 0, 7, 1, 1800, 0, 0, 0, 0, 2024-12-09 12:44:45.655, 6434082969613872993\n", + "[2015-12-13 00:00:00.0,2], 0, 9, 1, 1867, 0, 0, 0, 0, 2024-12-09 12:45:36.025, 3523256990847115207\n", + "[2015-11-13 00:00:00.0,8], 0, 5, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:44:45.655, 6434082969613872993\n", + "[2015-12-13 00:00:00.0,3], 0, 11, 1, 1951, 0, 0, 0, 0, 2024-12-09 12:45:36.025, 3523256990847115207\n", + "[2016-03-23 00:00:00.0,0], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:45:00.624, 6602271448495239051\n", + "[2015-11-13 00:00:00.0,5], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:44:45.655, 6434082969613872993\n", + "[2015-12-13 00:00:00.0,4], 0, 5, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:45:36.025, 3523256990847115207\n", + "[2015-11-13 00:00:00.0,6], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:44:45.655, 6434082969613872993\n", + "[2015-12-13 00:00:00.0,5], 0, 5, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:45:36.025, 3523256990847115207\n", + "[2015-11-13 00:00:00.0,11], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:44:45.655, 6434082969613872993\n", + "[2015-12-13 00:00:00.0,6], 0, 14, 1, 1990, 0, 0, 0, 0, 2024-12-09 12:45:36.025, 3523256990847115207\n", + "[2015-11-13 00:00:00.0,12], 0, 7, 1, 1821, 0, 0, 0, 0, 2024-12-09 12:44:45.655, 6434082969613872993\n", + "[2015-12-13 00:00:00.0,7], 0, 7, 1, 1799, 0, 0, 0, 0, 2024-12-09 12:45:36.025, 3523256990847115207\n", + "[2015-11-13 00:00:00.0,9], 0, 3, 1, 1662, 0, 0, 0, 0, 2024-12-09 12:44:45.655, 6434082969613872993\n", + "[2015-12-13 00:00:00.0,8], 0, 8, 1, 1837, 0, 0, 0, 0, 2024-12-09 12:45:36.025, 3523256990847115207\n", + "[2015-11-13 00:00:00.0,10], 0, 8, 1, 1818, 0, 0, 0, 0, 2024-12-09 12:44:45.655, 6434082969613872993\n", + "[2016-03-23 00:00:00.0,6], 0, 4, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:45:00.624, 6602271448495239051\n", + "[2015-11-13 00:00:00.0,15], 0, 5, 1, 1771, 0, 0, 0, 0, 2024-12-09 12:44:45.655, 6434082969613872993\n", + "[2016-03-23 00:00:00.0,5], 0, 3, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:45:00.624, 6602271448495239051\n", + "[2016-03-23 00:00:00.0,8], 0, 5, 1, 1765, 0, 0, 0, 0, 2024-12-09 12:45:00.624, 6602271448495239051\n", + "[2015-11-13 00:00:00.0,13], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:44:45.655, 6434082969613872993\n", + "[2016-03-23 00:00:00.0,7], 0, 4, 1, 1707, 0, 0, 0, 0, 2024-12-09 12:45:00.624, 6602271448495239051\n", + "[2015-11-13 00:00:00.0,14], 0, 9, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:44:45.655, 6434082969613872993\n", + "[2016-03-23 00:00:00.0,2], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:45:00.624, 6602271448495239051\n", + "[2016-03-23 00:00:00.0,1], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:45:00.624, 6602271448495239051\n", + "[2016-03-23 00:00:00.0,4], 0, 8, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:45:00.624, 6602271448495239051\n", + "[2015-12-13 00:00:00.0,0], 0, 4, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:45:36.025, 3523256990847115207\n", + "[2016-03-23 00:00:00.0,3], 0, 5, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:45:00.624, 6602271448495239051\n", + "[2016-05-04 00:00:00.0,4], 0, 10, 1, 1933, 0, 0, 0, 0, 2024-12-09 12:45:07.356, 3847748022421993216\n", + "[2016-03-23 00:00:00.0,14], 0, 2, 1, 1615, 0, 0, 0, 0, 2024-12-09 12:45:00.624, 6602271448495239051\n", + "[2016-05-04 00:00:00.0,3], 0, 8, 1, 1839, 0, 0, 0, 0, 2024-12-09 12:45:07.356, 3847748022421993216\n", + "[2016-03-23 00:00:00.0,13], 0, 7, 1, 1800, 0, 0, 0, 0, 2024-12-09 12:45:00.624, 6602271448495239051\n", + "[2016-05-04 00:00:00.0,2], 0, 6, 1, 1810, 0, 0, 0, 0, 2024-12-09 12:45:07.356, 3847748022421993216\n", + "[2016-05-04 00:00:00.0,1], 0, 6, 1, 1768, 0, 0, 0, 0, 2024-12-09 12:45:07.356, 3847748022421993216\n", + "[2016-03-23 00:00:00.0,15], 0, 3, 1, 1729, 0, 0, 0, 0, 2024-12-09 12:45:00.624, 6602271448495239051\n", + "[2016-05-04 00:00:00.0,0], 0, 11, 1, 1906, 0, 0, 0, 0, 2024-12-09 12:45:07.356, 3847748022421993216\n", + "[2016-03-23 00:00:00.0,10], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:00.624, 6602271448495239051\n", + "[2016-03-23 00:00:00.0,9], 0, 3, 1, 1732, 0, 0, 0, 0, 2024-12-09 12:45:00.624, 6602271448495239051\n", + "[2016-03-23 00:00:00.0,12], 0, 5, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:45:00.624, 6602271448495239051\n", + "[2016-03-23 00:00:00.0,11], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:45:00.624, 6602271448495239051\n", + "[2016-05-04 00:00:00.0,12], 0, 7, 1, 1841, 0, 0, 0, 0, 2024-12-09 12:45:07.356, 3847748022421993216\n", + "[2016-05-04 00:00:00.0,11], 0, 7, 1, 1822, 0, 0, 0, 0, 2024-12-09 12:45:07.356, 3847748022421993216\n", + "[2016-05-04 00:00:00.0,10], 0, 10, 1, 1881, 0, 0, 0, 0, 2024-12-09 12:45:07.356, 3847748022421993216\n", + "[2016-05-04 00:00:00.0,9], 0, 13, 1, 2022, 0, 0, 0, 0, 2024-12-09 12:45:07.356, 3847748022421993216\n", + "[2016-05-04 00:00:00.0,8], 0, 9, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:45:07.356, 3847748022421993216\n", + "[2016-05-04 00:00:00.0,7], 0, 9, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:45:07.356, 3847748022421993216\n", + "[2016-05-04 00:00:00.0,6], 0, 6, 1, 1791, 0, 0, 0, 0, 2024-12-09 12:45:07.356, 3847748022421993216\n", + "[2016-05-04 00:00:00.0,5], 0, 9, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:45:07.356, 3847748022421993216\n", + "[2015-12-13 00:00:00.0,9], 0, 10, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:45:36.025, 3523256990847115207\n", + "[2015-12-13 00:00:00.0,10], 0, 5, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:45:36.025, 3523256990847115207\n", + "[2015-11-13 00:00:00.0,0], 0, 3, 1, 1684, 0, 0, 0, 0, 2024-12-09 12:44:45.655, 6434082969613872993\n", + "[2015-12-13 00:00:00.0,11], 0, 6, 1, 1787, 0, 0, 0, 0, 2024-12-09 12:45:36.025, 3523256990847115207\n", + "[2015-12-13 00:00:00.0,12], 0, 7, 1, 1799, 0, 0, 0, 0, 2024-12-09 12:45:36.025, 3523256990847115207\n", + "[2015-12-13 00:00:00.0,13], 0, 8, 1, 1840, 0, 0, 0, 0, 2024-12-09 12:45:36.025, 3523256990847115207\n", + "[2015-11-13 00:00:00.0,3], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:44:45.655, 6434082969613872993\n", + "[2015-12-13 00:00:00.0,14], 0, 11, 1, 1952, 0, 0, 0, 0, 2024-12-09 12:45:36.025, 3523256990847115207\n", + "[2015-11-13 00:00:00.0,4], 0, 10, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:44:45.655, 6434082969613872993\n", + "[2015-12-13 00:00:00.0,15], 0, 14, 1, 1970, 0, 0, 0, 0, 2024-12-09 12:45:36.025, 3523256990847115207\n", + "[2015-11-13 00:00:00.0,1], 0, 5, 1, 1747, 0, 0, 0, 0, 2024-12-09 12:44:45.655, 6434082969613872993\n", + "[2015-11-13 00:00:00.0,2], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:44:45.655, 6434082969613872993\n", + "[2016-05-07 00:00:00.0,15], 0, 14, 1, 2010, 0, 0, 0, 0, 2024-12-09 12:44:54.192, 4797301438991071578\n", + "[2016-05-07 00:00:00.0,14], 0, 4, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:44:54.192, 4797301438991071578\n", + "[2016-05-07 00:00:00.0,13], 0, 14, 1, 2014, 0, 0, 0, 0, 2024-12-09 12:44:54.192, 4797301438991071578\n", + "[2016-05-07 00:00:00.0,12], 0, 10, 1, 1909, 0, 0, 0, 0, 2024-12-09 12:44:54.192, 4797301438991071578\n", + "[2016-05-07 00:00:00.0,11], 0, 8, 1, 1861, 0, 0, 0, 0, 2024-12-09 12:44:54.192, 4797301438991071578\n", + "[2016-05-07 00:00:00.0,10], 0, 7, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:44:54.192, 4797301438991071578\n", + "[2016-05-07 00:00:00.0,9], 0, 11, 1, 1931, 0, 0, 0, 0, 2024-12-09 12:44:54.192, 4797301438991071578\n", + "[2016-05-07 00:00:00.0,8], 0, 10, 1, 1881, 0, 0, 0, 0, 2024-12-09 12:44:54.192, 4797301438991071578\n", + "[2016-05-07 00:00:00.0,7], 0, 13, 1, 1966, 0, 0, 0, 0, 2024-12-09 12:44:54.192, 4797301438991071578\n", + "[2016-05-07 00:00:00.0,6], 0, 15, 1, 2065, 0, 0, 0, 0, 2024-12-09 12:44:54.192, 4797301438991071578\n", + "[2016-05-07 00:00:00.0,5], 0, 9, 1, 1887, 0, 0, 0, 0, 2024-12-09 12:44:54.192, 4797301438991071578\n", + "[2016-05-07 00:00:00.0,4], 0, 12, 1, 1970, 0, 0, 0, 0, 2024-12-09 12:44:54.192, 4797301438991071578\n", + "[2016-05-07 00:00:00.0,3], 0, 14, 1, 1991, 0, 0, 0, 0, 2024-12-09 12:44:54.192, 4797301438991071578\n", + "[2016-04-01 00:00:00.0,1], 0, 6, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:44:41.658, 9019626727314615440\n", + "[2016-05-07 00:00:00.0,2], 0, 18, 1, 2100, 0, 0, 0, 0, 2024-12-09 12:44:54.192, 4797301438991071578\n", + "[2016-04-01 00:00:00.0,0], 0, 7, 1, 1822, 0, 0, 0, 0, 2024-12-09 12:44:41.658, 9019626727314615440\n", + "[2016-05-07 00:00:00.0,1], 0, 8, 1, 1858, 0, 0, 0, 0, 2024-12-09 12:44:54.192, 4797301438991071578\n", + "[2016-04-01 00:00:00.0,3], 0, 7, 1, 1816, 0, 0, 0, 0, 2024-12-09 12:44:41.658, 9019626727314615440\n", + "[2016-05-07 00:00:00.0,0], 0, 8, 1, 1881, 0, 0, 0, 0, 2024-12-09 12:44:54.192, 4797301438991071578\n", + "[2016-04-01 00:00:00.0,2], 0, 11, 1, 1951, 0, 0, 0, 0, 2024-12-09 12:44:41.658, 9019626727314615440\n", + "[2016-04-01 00:00:00.0,5], 0, 11, 1, 1898, 0, 0, 0, 0, 2024-12-09 12:44:41.658, 9019626727314615440\n", + "[2016-04-01 00:00:00.0,4], 0, 7, 1, 1843, 0, 0, 0, 0, 2024-12-09 12:44:41.658, 9019626727314615440\n", + "[2016-04-01 00:00:00.0,7], 0, 14, 1, 2009, 0, 0, 0, 0, 2024-12-09 12:44:41.658, 9019626727314615440\n", + "[2016-04-01 00:00:00.0,6], 0, 6, 1, 1813, 0, 0, 0, 0, 2024-12-09 12:44:41.658, 9019626727314615440\n", + "[2016-04-01 00:00:00.0,9], 0, 9, 1, 1890, 0, 0, 0, 0, 2024-12-09 12:44:41.658, 9019626727314615440\n", + "[2016-04-01 00:00:00.0,8], 0, 5, 1, 1749, 0, 0, 0, 0, 2024-12-09 12:44:41.658, 9019626727314615440\n", + "[2016-04-01 00:00:00.0,11], 0, 10, 1, 1882, 0, 0, 0, 0, 2024-12-09 12:44:41.658, 9019626727314615440\n", + "[2016-04-01 00:00:00.0,10], 0, 9, 1, 1886, 0, 0, 0, 0, 2024-12-09 12:44:41.658, 9019626727314615440\n", + "[2016-04-01 00:00:00.0,13], 0, 8, 1, 1884, 0, 0, 0, 0, 2024-12-09 12:44:41.658, 9019626727314615440\n", + "[2016-04-01 00:00:00.0,12], 0, 9, 1, 1864, 0, 0, 0, 0, 2024-12-09 12:44:41.658, 9019626727314615440\n", + "[2016-04-01 00:00:00.0,15], 0, 10, 1, 1913, 0, 0, 0, 0, 2024-12-09 12:44:41.658, 9019626727314615440\n", + "[2016-04-01 00:00:00.0,14], 0, 8, 1, 1816, 0, 0, 0, 0, 2024-12-09 12:44:41.658, 9019626727314615440\n", + "[2016-04-16 00:00:00.0,3], 0, 12, 1, 1903, 0, 0, 0, 0, 2024-12-09 12:46:24.848, 5165995661084442112\n", + "[2016-04-16 00:00:00.0,4], 0, 11, 1, 1908, 0, 0, 0, 0, 2024-12-09 12:46:24.848, 5165995661084442112\n", + "[2016-04-16 00:00:00.0,5], 0, 14, 1, 2042, 0, 0, 0, 0, 2024-12-09 12:46:24.848, 5165995661084442112\n", + "[2016-04-16 00:00:00.0,6], 0, 13, 1, 1970, 0, 0, 0, 0, 2024-12-09 12:46:24.848, 5165995661084442112\n", + "[2016-04-16 00:00:00.0,0], 0, 12, 1, 1899, 0, 0, 0, 0, 2024-12-09 12:46:24.848, 5165995661084442112\n", + "[2016-04-16 00:00:00.0,1], 0, 11, 1, 1903, 0, 0, 0, 0, 2024-12-09 12:46:24.848, 5165995661084442112\n", + "[2016-04-16 00:00:00.0,2], 0, 11, 1, 1883, 0, 0, 0, 0, 2024-12-09 12:46:24.848, 5165995661084442112\n", + "[2016-06-03 00:00:00.0,15], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:36.147, 3801165837083121011\n", + "[2016-06-03 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:36.147, 3801165837083121011\n", + "[2016-06-03 00:00:00.0,13], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:36.147, 3801165837083121011\n", + "[2016-06-03 00:00:00.0,12], 0, 3, 1, 1729, 0, 0, 0, 0, 2024-12-09 12:47:36.147, 3801165837083121011\n", + "[2016-04-16 00:00:00.0,15], 0, 16, 1, 2007, 0, 0, 0, 0, 2024-12-09 12:46:24.848, 5165995661084442112\n", + "[2016-06-03 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:36.147, 3801165837083121011\n", + "[2016-06-03 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:36.147, 3801165837083121011\n", + "[2016-04-16 00:00:00.0,11], 0, 16, 1, 2037, 0, 0, 0, 0, 2024-12-09 12:46:24.848, 5165995661084442112\n", + "[2016-04-16 00:00:00.0,12], 0, 19, 1, 2099, 0, 0, 0, 0, 2024-12-09 12:46:24.848, 5165995661084442112\n", + "[2016-06-03 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:36.147, 3801165837083121011\n", + "[2016-04-16 00:00:00.0,13], 0, 17, 1, 2054, 0, 0, 0, 0, 2024-12-09 12:46:24.848, 5165995661084442112\n", + "[2016-04-16 00:00:00.0,14], 0, 9, 1, 1860, 0, 0, 0, 0, 2024-12-09 12:46:24.848, 5165995661084442112\n", + "[2016-05-19 00:00:00.0,15], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:46:08.253, 3801786254816917096\n", + "[2016-06-03 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:36.147, 3801165837083121011\n", + "[2016-04-16 00:00:00.0,7], 0, 20, 1, 2099, 0, 0, 0, 0, 2024-12-09 12:46:24.848, 5165995661084442112\n", + "[2016-06-03 00:00:00.0,3], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:47:36.147, 3801165837083121011\n", + "[2016-04-16 00:00:00.0,8], 0, 16, 1, 2053, 0, 0, 0, 0, 2024-12-09 12:46:24.848, 5165995661084442112\n", + "[2016-06-03 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:36.147, 3801165837083121011\n", + "[2016-04-16 00:00:00.0,9], 0, 19, 1, 2075, 0, 0, 0, 0, 2024-12-09 12:46:24.848, 5165995661084442112\n", + "[2016-04-16 00:00:00.0,10], 0, 16, 1, 2013, 0, 0, 0, 0, 2024-12-09 12:46:24.848, 5165995661084442112\n", + "[2016-06-03 00:00:00.0,0], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:36.147, 3801165837083121011\n", + "[2016-05-19 00:00:00.0,10], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:46:08.253, 3801786254816917096\n", + "[2016-05-19 00:00:00.0,9], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:46:08.253, 3801786254816917096\n", + "[2016-05-19 00:00:00.0,8], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:46:08.253, 3801786254816917096\n", + "[2016-05-19 00:00:00.0,7], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:46:08.253, 3801786254816917096\n", + "[2016-05-19 00:00:00.0,14], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:46:08.253, 3801786254816917096\n", + "[2016-05-19 00:00:00.0,13], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:46:08.253, 3801786254816917096\n", + "[2016-05-19 00:00:00.0,12], 0, 3, 1, 1660, 0, 0, 0, 0, 2024-12-09 12:46:08.253, 3801786254816917096\n", + "[2016-05-19 00:00:00.0,11], 0, 4, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:46:08.253, 3801786254816917096\n", + "[2016-05-19 00:00:00.0,2], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:46:08.253, 3801786254816917096\n", + "[2016-05-19 00:00:00.0,1], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:46:08.253, 3801786254816917096\n", + "[2016-05-19 00:00:00.0,0], 0, 1, 1, 1678, 0, 0, 0, 0, 2024-12-09 12:46:08.253, 3801786254816917096\n", + "[2016-05-19 00:00:00.0,6], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:08.253, 3801786254816917096\n", + "[2016-05-19 00:00:00.0,5], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:46:08.253, 3801786254816917096\n", + "[2016-05-19 00:00:00.0,4], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:46:08.253, 3801786254816917096\n", + "[2016-05-19 00:00:00.0,3], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:46:08.253, 3801786254816917096\n", + "[2016-05-31 00:00:00.0,3], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:27.708, 2665520731910563908\n", + "[2016-05-31 00:00:00.0,4], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:27.708, 2665520731910563908\n", + "[2016-05-31 00:00:00.0,1], 0, 2, 1, 1614, 0, 0, 0, 0, 2024-12-09 12:47:27.708, 2665520731910563908\n", + "[2016-05-31 00:00:00.0,0], 0, 4, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:47:27.708, 2665520731910563908\n", + "[2016-05-31 00:00:00.0,12], 0, 2, 1, 1619, 0, 0, 0, 0, 2024-12-09 12:47:27.708, 2665520731910563908\n", + "[2016-05-31 00:00:00.0,10], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:47:27.708, 2665520731910563908\n", + "[2016-05-31 00:00:00.0,7], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:27.708, 2665520731910563908\n", + "[2016-05-31 00:00:00.0,8], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:27.708, 2665520731910563908\n", + "[2016-05-31 00:00:00.0,6], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:27.708, 2665520731910563908\n", + "[2015-11-07 00:00:00.0,15], 0, 5, 1, 1726, 0, 0, 0, 0, 2024-12-09 12:47:02.458, 3010460496534652151\n", + "[2015-11-07 00:00:00.0,13], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:02.458, 3010460496534652151\n", + "[2015-11-07 00:00:00.0,14], 0, 1, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:47:02.458, 3010460496534652151\n", + "[2016-05-31 00:00:00.0,15], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:27.708, 2665520731910563908\n", + "[2016-05-31 00:00:00.0,13], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:27.708, 2665520731910563908\n", + "[2016-05-31 00:00:00.0,14], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:47:27.708, 2665520731910563908\n", + "[2015-11-07 00:00:00.0,0], 0, 9, 1, 1820, 0, 0, 0, 0, 2024-12-09 12:47:02.458, 3010460496534652151\n", + "[2015-11-07 00:00:00.0,3], 0, 8, 1, 1847, 0, 0, 0, 0, 2024-12-09 12:47:02.458, 3010460496534652151\n", + "[2015-11-07 00:00:00.0,4], 0, 3, 1, 1680, 0, 0, 0, 0, 2024-12-09 12:47:02.458, 3010460496534652151\n", + "[2015-11-07 00:00:00.0,1], 0, 6, 1, 1745, 0, 0, 0, 0, 2024-12-09 12:47:02.458, 3010460496534652151\n", + "[2015-11-07 00:00:00.0,2], 0, 5, 1, 1773, 0, 0, 0, 0, 2024-12-09 12:47:02.458, 3010460496534652151\n", + "[2015-11-07 00:00:00.0,7], 0, 4, 1, 1703, 0, 0, 0, 0, 2024-12-09 12:47:02.458, 3010460496534652151\n", + "[2015-11-07 00:00:00.0,8], 0, 6, 1, 1748, 0, 0, 0, 0, 2024-12-09 12:47:02.458, 3010460496534652151\n", + "[2015-11-07 00:00:00.0,5], 0, 3, 1, 1733, 0, 0, 0, 0, 2024-12-09 12:47:02.458, 3010460496534652151\n", + "[2015-11-07 00:00:00.0,6], 0, 2, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:47:02.458, 3010460496534652151\n", + "[2015-11-07 00:00:00.0,11], 0, 6, 1, 1797, 0, 0, 0, 0, 2024-12-09 12:47:02.458, 3010460496534652151\n", + "[2015-11-07 00:00:00.0,12], 0, 5, 1, 1723, 0, 0, 0, 0, 2024-12-09 12:47:02.458, 3010460496534652151\n", + "[2015-11-07 00:00:00.0,9], 0, 5, 1, 1774, 0, 0, 0, 0, 2024-12-09 12:47:02.458, 3010460496534652151\n", + "[2015-11-07 00:00:00.0,10], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:02.458, 3010460496534652151\n", + "[2016-05-13 00:00:00.0,13], 0, 3, 1, 1729, 0, 0, 0, 0, 2024-12-09 12:47:51.896, 3686877816134468192\n", + "[2016-05-13 00:00:00.0,12], 0, 3, 1, 1665, 0, 0, 0, 0, 2024-12-09 12:47:51.896, 3686877816134468192\n", + "[2016-06-12 00:00:00.0,5], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:37.391, 8220014399377785619\n", + "[2016-05-13 00:00:00.0,14], 0, 2, 1, 1619, 0, 0, 0, 0, 2024-12-09 12:47:51.896, 3686877816134468192\n", + "[2016-05-13 00:00:00.0,9], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:51.896, 3686877816134468192\n", + "[2016-05-13 00:00:00.0,8], 0, 2, 1, 1616, 0, 0, 0, 0, 2024-12-09 12:47:51.896, 3686877816134468192\n", + "[2016-05-13 00:00:00.0,10], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:47:51.896, 3686877816134468192\n", + "[2016-05-13 00:00:00.0,5], 0, 2, 1, 1619, 0, 0, 0, 0, 2024-12-09 12:47:51.896, 3686877816134468192\n", + "[2016-06-12 00:00:00.0,15], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:37.391, 8220014399377785619\n", + "[2016-06-12 00:00:00.0,14], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:37.391, 8220014399377785619\n", + "[2016-05-13 00:00:00.0,7], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:47:51.896, 3686877816134468192\n", + "[2016-06-12 00:00:00.0,13], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:37.391, 8220014399377785619\n", + "[2016-05-13 00:00:00.0,6], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:47:51.896, 3686877816134468192\n", + "[2016-05-13 00:00:00.0,1], 0, 3, 1, 1731, 0, 0, 0, 0, 2024-12-09 12:47:51.896, 3686877816134468192\n", + "[2016-05-13 00:00:00.0,0], 0, 3, 1, 1666, 0, 0, 0, 0, 2024-12-09 12:47:51.896, 3686877816134468192\n", + "[2016-05-13 00:00:00.0,3], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:47:51.896, 3686877816134468192\n", + "[2016-05-13 00:00:00.0,2], 0, 4, 1, 1702, 0, 0, 0, 0, 2024-12-09 12:47:51.896, 3686877816134468192\n", + "[2015-11-04 00:00:00.0,1], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:45:22.846, 2876880872721558109\n", + "[2015-11-04 00:00:00.0,0], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:45:22.846, 2876880872721558109\n", + "[2016-05-10 00:00:00.0,12], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:50.983, 5769487165182477672\n", + "[2016-05-10 00:00:00.0,13], 0, 3, 1, 1682, 0, 0, 0, 0, 2024-12-09 12:44:50.983, 5769487165182477672\n", + "[2016-05-10 00:00:00.0,14], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:44:50.983, 5769487165182477672\n", + "[2016-05-10 00:00:00.0,15], 0, 4, 1, 1727, 0, 0, 0, 0, 2024-12-09 12:44:50.983, 5769487165182477672\n", + "[2016-06-12 00:00:00.0,0], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:47:37.391, 8220014399377785619\n", + "[2015-11-04 00:00:00.0,15], 0, 5, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:45:22.846, 2876880872721558109\n", + "[2016-05-10 00:00:00.0,4], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:44:50.983, 5769487165182477672\n", + "[2015-11-04 00:00:00.0,14], 0, 3, 1, 1662, 0, 0, 0, 0, 2024-12-09 12:45:22.846, 2876880872721558109\n", + "[2016-05-10 00:00:00.0,6], 0, 3, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:50.983, 5769487165182477672\n", + "[2016-05-10 00:00:00.0,7], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:44:50.983, 5769487165182477672\n", + "[2015-11-04 00:00:00.0,11], 0, 3, 1, 1664, 0, 0, 0, 0, 2024-12-09 12:45:22.846, 2876880872721558109\n", + "[2016-05-10 00:00:00.0,8], 0, 2, 1, 1708, 0, 0, 0, 0, 2024-12-09 12:44:50.983, 5769487165182477672\n", + "[2015-11-04 00:00:00.0,10], 0, 6, 1, 1792, 0, 0, 0, 0, 2024-12-09 12:45:22.846, 2876880872721558109\n", + "[2016-05-10 00:00:00.0,9], 0, 3, 1, 1682, 0, 0, 0, 0, 2024-12-09 12:44:50.983, 5769487165182477672\n", + "[2015-11-04 00:00:00.0,13], 0, 2, 1, 1617, 0, 0, 0, 0, 2024-12-09 12:45:22.846, 2876880872721558109\n", + "[2015-11-04 00:00:00.0,12], 0, 2, 1, 1618, 0, 0, 0, 0, 2024-12-09 12:45:22.846, 2876880872721558109\n", + "[2016-05-10 00:00:00.0,11], 0, 3, 1, 1681, 0, 0, 0, 0, 2024-12-09 12:44:50.983, 5769487165182477672\n", + "[2015-11-04 00:00:00.0,7], 0, 4, 1, 1704, 0, 0, 0, 0, 2024-12-09 12:45:22.846, 2876880872721558109\n", + "[2015-11-04 00:00:00.0,6], 0, 11, 1, 1946, 0, 0, 0, 0, 2024-12-09 12:45:22.846, 2876880872721558109\n", + "[2015-11-04 00:00:00.0,9], 0, 2, 1, 1709, 0, 0, 0, 0, 2024-12-09 12:45:22.846, 2876880872721558109\n", + "[2015-11-04 00:00:00.0,8], 0, 4, 1, 1725, 0, 0, 0, 0, 2024-12-09 12:45:22.846, 2876880872721558109\n", + "[2015-11-04 00:00:00.0,3], 0, 3, 1, 1661, 0, 0, 0, 0, 2024-12-09 12:45:22.846, 2876880872721558109\n", + "[2016-05-10 00:00:00.0,0], 0, 3, 1, 1732, 0, 0, 0, 0, 2024-12-09 12:44:50.983, 5769487165182477672\n", + "[2015-11-04 00:00:00.0,2], 0, 4, 1, 1706, 0, 0, 0, 0, 2024-12-09 12:45:22.846, 2876880872721558109\n", + "[2016-05-10 00:00:00.0,1], 0, 6, 1, 1744, 0, 0, 0, 0, 2024-12-09 12:44:50.983, 5769487165182477672\n", + "[2015-11-04 00:00:00.0,5], 0, 5, 1, 1767, 0, 0, 0, 0, 2024-12-09 12:45:22.846, 2876880872721558109\n", + "[2016-05-10 00:00:00.0,2], 0, 1, 1, 1679, 0, 0, 0, 0, 2024-12-09 12:44:50.983, 5769487165182477672\n", + "[2015-11-04 00:00:00.0,4], 0, 5, 1, 1746, 0, 0, 0, 0, 2024-12-09 12:45:22.846, 2876880872721558109\n", + "[2016-05-10 00:00:00.0,3], 0, 6, 1, 1743, 0, 0, 0, 0, 2024-12-09 12:44:50.983, 5769487165182477672\n" + ] + }, + { + "data": { + "text/plain": [ + "df: org.apache.spark.sql.DataFrame = [partition: struct, spec_id: int ... 9 more fields]\n" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "val df = spark.sql(\"SELECT * FROM bootcamp.matches_bucketed.partitions\")\n", + "println(df.schema.fieldNames.mkString(\", \"))\n", + "df.collect().foreach { row =>\n", + " println(row.mkString(\", \"))\n", + "}\n", + "// spark.sql(\"select * from bootcamp.matches_bucketed.partitions\").show() gives difficult-to-read output" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "ebd05eb4-9663-4792-b0fd-5bd4a8e3c808", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+-------+--------------------+-----------+-------+--------------------+------------+------------------+--------------------+--------------------+--------------------+----------------+--------------------+--------------------+------------+-------------+------------+-------------+--------------------+\n", + "|content| file_path|file_format|spec_id| partition|record_count|file_size_in_bytes| column_sizes| value_counts| null_value_counts|nan_value_counts| lower_bounds| upper_bounds|key_metadata|split_offsets|equality_ids|sort_order_id| readable_metrics|\n", + "+-------+--------------------+-----------+-------+--------------------+------------+------------------+--------------------+--------------------+--------------------+----------------+--------------------+--------------------+------------+-------------+------------+-------------+--------------------+\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-08-31 00:00...| 1| 1679|{1 -> 78, 2 -> 39...|{1 -> 1, 2 -> 1, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [31 65 35 3...|{1 -> [31 65 35 3...| NULL| [4]| NULL| 0|{{46, 1, 0, NULL,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-08-31 00:00...| 1| 1679|{1 -> 78, 2 -> 39...|{1 -> 1, 2 -> 1, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [65 37 61 3...|{1 -> [65 37 61 3...| NULL| [4]| NULL| 0|{{46, 1, 0, NULL,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-08-31 00:00...| 1| 1679|{1 -> 78, 2 -> 39...|{1 -> 1, 2 -> 1, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [38 38 38 3...|{1 -> [38 38 38 3...| NULL| [4]| NULL| 0|{{46, 1, 0, NULL,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-08-31 00:00...| 1| 1679|{1 -> 78, 2 -> 39...|{1 -> 1, 2 -> 1, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 39 34 3...|{1 -> [30 39 34 3...| NULL| [4]| NULL| 0|{{46, 1, 0, NULL,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-07-07 00:00...| 1| 1678|{1 -> 77, 2 -> 39...|{1 -> 1, 2 -> 1, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [31 63 31 3...|{1 -> [31 63 31 3...| NULL| [4]| NULL| 0|{{46, 1, 0, NULL,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-07-07 00:00...| 2| 1617|{1 -> 102, 2 -> 3...|{1 -> 2, 2 -> 2, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [36 63 36 3...|{1 -> [39 66 63 3...| NULL| [4]| NULL| 0|{{76, 2, 0, NULL,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-07-07 00:00...| 1| 1678|{1 -> 77, 2 -> 39...|{1 -> 1, 2 -> 1, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [64 64 61 6...|{1 -> [64 64 61 6...| NULL| [4]| NULL| 0|{{46, 1, 0, NULL,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-07-07 00:00...| 3| 1681|{1 -> 126, 2 -> 3...|{1 -> 3, 2 -> 3, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [33 63 63 6...|{1 -> [63 61 31 3...| NULL| [4]| NULL| 0|{{76, 3, 0, NULL,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-07-07 00:00...| 2| 1708|{1 -> 103, 2 -> 3...|{1 -> 2, 2 -> 2, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 63 35 3...|{1 -> [65 34 62 3...| NULL| [4]| NULL| 0|{{76, 2, 0, NULL,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-07-07 00:00...| 1| 1679|{1 -> 78, 2 -> 39...|{1 -> 1, 2 -> 1, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [64 61 65 6...|{1 -> [64 61 65 6...| NULL| [4]| NULL| 0|{{46, 1, 0, NULL,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-06-07 00:00...| 1| 1679|{1 -> 78, 2 -> 39...|{1 -> 1, 2 -> 1, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [62 66 39 6...|{1 -> [62 66 39 6...| NULL| [4]| NULL| 0|{{46, 1, 0, NULL,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-06-07 00:00...| 1| 1679|{1 -> 78, 2 -> 39...|{1 -> 1, 2 -> 1, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [62 37 35 6...|{1 -> [62 37 35 6...| NULL| [4]| NULL| 0|{{46, 1, 0, NULL,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-08-28 00:00...| 1| 1679|{1 -> 78, 2 -> 39...|{1 -> 1, 2 -> 1, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [64 36 66 3...|{1 -> [64 36 66 3...| NULL| [4]| NULL| 0|{{46, 1, 0, NULL,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-08-28 00:00...| 1| 1679|{1 -> 78, 2 -> 39...|{1 -> 1, 2 -> 1, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [63 34 31 6...|{1 -> [63 34 31 6...| NULL| [4]| NULL| 0|{{46, 1, 0, NULL,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-08-28 00:00...| 1| 1679|{1 -> 78, 2 -> 39...|{1 -> 1, 2 -> 1, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [63 35 35 3...|{1 -> [63 35 35 3...| NULL| [4]| NULL| 0|{{46, 1, 0, NULL,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-08-28 00:00...| 1| 1679|{1 -> 78, 2 -> 39...|{1 -> 1, 2 -> 1, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [64 32 30 6...|{1 -> [64 32 30 6...| NULL| [4]| NULL| 0|{{46, 1, 0, NULL,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-08-28 00:00...| 1| 1679|{1 -> 78, 2 -> 39...|{1 -> 1, 2 -> 1, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [31 31 61 3...|{1 -> [31 31 61 3...| NULL| [4]| NULL| 0|{{46, 1, 0, NULL,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-08-28 00:00...| 1| 1679|{1 -> 78, 2 -> 39...|{1 -> 1, 2 -> 1, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [36 33 64 3...|{1 -> [36 33 64 3...| NULL| [4]| NULL| 0|{{46, 1, 0, NULL,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-05-26 00:00...| 4| 1755|{1 -> 150, 2 -> 3...|{1 -> 4, 2 -> 4, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 36 30 6...|{1 -> [66 36 38 6...| NULL| [4]| NULL| 0|{{76, 4, 0, NULL,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0|{2016-05-26 00:00...| 4| 1725|{1 -> 149, 2 -> 3...|{1 -> 4, 2 -> 4, ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 61 35 6...|{1 -> [63 31 64 3...| NULL| [4]| NULL| 0|{{76, 4, 0, NULL,...|\n", + "+-------+--------------------+-----------+-------+--------------------+------------+------------------+--------------------+--------------------+--------------------+----------------+--------------------+--------------------+------------+-------------+------------+-------------+--------------------+\n", + "only showing top 20 rows\n", + "\n" + ] + } + ], + "source": [ + "spark.sql(\"select * from bootcamp.matches_bucketed.files\").show()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "93e4fa6b-4af6-4ab6-b855-8dfee3bf52a7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+---------+\n", + "|num_files|\n", + "+---------+\n", + "| 3665|\n", + "+---------+\n", + "\n" + ] + } + ], + "source": [ + "spark.sql(\"SELECT COUNT(1) as num_files FROM bootcamp.matches_bucketed.files\").show()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "ef275226-56f8-4e6c-a132-f10f64def6cf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "matchDetailsBucketed: org.apache.spark.sql.DataFrame = [match_id: string, player_gamertag: string ... 34 more fields]\n", + "bucketedDetailsDDL: String =\n", + "\"\n", + " CREATE TABLE IF NOT EXISTS bootcamp.match_details_bucketed (\n", + " match_id STRING,\n", + " player_gamertag STRING,\n", + " player_total_kills INTEGER,\n", + " player_total_deaths INTEGER\n", + " )\n", + " USING iceberg\n", + " PARTITIONED BY (bucket(16, match_id));\n", + " \"\n", + "res9: org.apache.spark.sql.DataFrame = []\n" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ "val matchDetailsBucketed = spark.read.option(\"header\", \"true\")\n", " .option(\"inferSchema\", \"true\")\n", " .csv(\"/home/iceberg/data/match_details.csv\")\n", - "\n", - "\n", - "// spark.sql(\"\"\"DROP TABLE IF EXISTS bootcamp.matches_bucketed\"\"\")\n", - "// val bucketedDDL = \"\"\"\n", - "// CREATE TABLE IF NOT EXISTS bootcamp.matches_bucketed (\n", - "// match_id STRING,\n", - "// is_team_game BOOLEAN,\n", - "// playlist_id STRING,\n", - "// completion_date TIMESTAMP\n", - "// )\n", - "// USING iceberg\n", - "// PARTITIONED BY (completion_date, bucket(16, match_id));\n", - "// \"\"\"\n", - "// spark.sql(bucketedDDL)\n", - "\n", - "// matchesBucketed.select(\n", - "// $\"match_id\", $\"is_team_game\", $\"playlist_id\", $\"completion_date\"\n", - "// )\n", - "// .write.mode(\"append\")\n", - "// .partitionBy(\"completion_date\")\n", - "// .bucketBy(16, \"match_id\").saveAsTable(\"bootcamp.matches_bucketed\")\n", - "\n", - "\n", - "// val bucketedDetailsDDL = \"\"\"\n", - "// CREATE TABLE IF NOT EXISTS bootcamp.match_details_bucketed (\n", - "// match_id STRING,\n", - "// player_gamertag STRING,\n", - "// player_total_kills INTEGER,\n", - "// player_total_deaths INTEGER\n", - "// )\n", - "// USING iceberg\n", - "// PARTITIONED BY (bucket(16, match_id));\n", - "// \"\"\"\n", - "// spark.sql(bucketedDetailsDDL)\n", - "\n", - "// matchDetailsBucketed.select(\n", - "// $\"match_id\", $\"player_gamertag\", $\"player_total_kills\", $\"player_total_deaths\")\n", - "// .write.mode(\"append\")\n", - "// .bucketBy(16, \"match_id\").saveAsTable(\"bootcamp.match_details_bucketed\")\n", - "\n", + "spark.sql(\"\"\"DROP TABLE IF EXISTS bootcamp.match_details_bucketed\"\"\")\n", + "val bucketedDetailsDDL = \"\"\"\n", + " CREATE TABLE IF NOT EXISTS bootcamp.match_details_bucketed (\n", + " match_id STRING,\n", + " player_gamertag STRING,\n", + " player_total_kills INTEGER,\n", + " player_total_deaths INTEGER\n", + " )\n", + " USING iceberg\n", + " PARTITIONED BY (bucket(16, match_id));\n", + " \"\"\"\n", + " spark.sql(bucketedDetailsDDL)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "4d8e806b-6a46-4019-ac66-c029a91f7667", + "metadata": {}, + "outputs": [], + "source": [ + "matchDetailsBucketed.select(\n", + " $\"match_id\", $\"player_gamertag\", $\"player_total_kills\", $\"player_total_deaths\")\n", + " .write.mode(\"append\")\n", + " .bucketBy(16, \"match_id\").saveAsTable(\"bootcamp.match_details_bucketed\")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "3b7efec9-1f27-4063-8207-9d267227688c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+---------+\n", + "|num_files|\n", + "+---------+\n", + "| 16|\n", + "+---------+\n", + "\n" + ] + } + ], + "source": [ + "spark.sql(\"SELECT COUNT(1) as num_files FROM bootcamp.match_details_bucketed.files\").show()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "56601ce3-31b9-4e51-9ae5-66bc7756832d", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+-------+--------------------+-----------+-------+---------+------------+------------------+--------------------+--------------------+--------------------+----------------+--------------------+--------------------+------------+-------------+------------+-------------+--------------------+\n", + "|content| file_path|file_format|spec_id|partition|record_count|file_size_in_bytes| column_sizes| value_counts| null_value_counts|nan_value_counts| lower_bounds| upper_bounds|key_metadata|split_offsets|equality_ids|sort_order_id| readable_metrics|\n", + "+-------+--------------------+-----------+-------+---------+------------+------------------+--------------------+--------------------+--------------------+----------------+--------------------+--------------------+------------+-------------+------------+-------------+--------------------+\n", + "| 0|s3://warehouse/bo...| PARQUET| 0| {6}| 9377| 121547|{1 -> 29609, 2 ->...|{1 -> 9377, 2 -> ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 30 34 6...|{1 -> [66 66 32 3...| NULL| [4]| NULL| 0|{{29609, 9377, 0,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0| {12}| 9679| 124918|{1 -> 30490, 2 ->...|{1 -> 9679, 2 -> ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 30 35 3...|{1 -> [66 66 66 3...| NULL| [4]| NULL| 0|{{30490, 9679, 0,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0| {13}| 9785| 126062|{1 -> 30857, 2 ->...|{1 -> 9785, 2 -> ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 30 31 3...|{1 -> [66 66 64 6...| NULL| [4]| NULL| 0|{{30857, 9785, 0,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0| {1}| 9017| 116955|{1 -> 28681, 2 ->...|{1 -> 9017, 2 -> ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 30 32 3...|{1 -> [66 66 66 6...| NULL| [4]| NULL| 0|{{28681, 9017, 0,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0| {9}| 9405| 120833|{1 -> 29835, 2 ->...|{1 -> 9405, 2 -> ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 30 30 3...|{1 -> [66 66 65 6...| NULL| [4]| NULL| 0|{{29835, 9405, 0,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0| {15}| 9482| 123133|{1 -> 29746, 2 ->...|{1 -> 9482, 2 -> ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 30 30 6...|{1 -> [66 66 64 6...| NULL| [4]| NULL| 0|{{29746, 9482, 0,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0| {5}| 9435| 121747|{1 -> 30417, 2 ->...|{1 -> 9435, 2 -> ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 30 30 3...|{1 -> [66 66 66 3...| NULL| [4]| NULL| 0|{{30417, 9435, 0,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0| {3}| 9795| 125785|{1 -> 31228, 2 ->...|{1 -> 9795, 2 -> ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 30 35 6...|{1 -> [66 66 65 6...| NULL| [4]| NULL| 0|{{31228, 9795, 0,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0| {8}| 9302| 119729|{1 -> 29606, 2 ->...|{1 -> 9302, 2 -> ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 30 32 3...|{1 -> [66 66 38 3...| NULL| [4]| NULL| 0|{{29606, 9302, 0,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0| {7}| 9642| 123735|{1 -> 30589, 2 ->...|{1 -> 9642, 2 -> ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 30 64 6...|{1 -> [66 66 35 3...| NULL| [4]| NULL| 0|{{30589, 9642, 0,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0| {10}| 9675| 124493|{1 -> 30177, 2 ->...|{1 -> 9675, 2 -> ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 30 30 3...|{1 -> [66 66 61 6...| NULL| [4]| NULL| 0|{{30177, 9675, 0,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0| {4}| 9196| 118555|{1 -> 29207, 2 ->...|{1 -> 9196, 2 -> ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 30 31 3...|{1 -> [66 66 65 6...| NULL| [4]| NULL| 0|{{29207, 9196, 0,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0| {11}| 9496| 121977|{1 -> 30734, 2 ->...|{1 -> 9496, 2 -> ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 30 36 3...|{1 -> [66 66 39 6...| NULL| [4]| NULL| 0|{{30734, 9496, 0,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0| {0}| 9613| 122708|{1 -> 30443, 2 ->...|{1 -> 9613, 2 -> ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 30 35 3...|{1 -> [66 66 39 6...| NULL| [4]| NULL| 0|{{30443, 9613, 0,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0| {14}| 9593| 123957|{1 -> 30616, 2 ->...|{1 -> 9593, 2 -> ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 30 30 6...|{1 -> [66 66 65 6...| NULL| [4]| NULL| 0|{{30616, 9593, 0,...|\n", + "| 0|s3://warehouse/bo...| PARQUET| 0| {2}| 9269| 119483|{1 -> 29410, 2 ->...|{1 -> 9269, 2 -> ...|{1 -> 0, 2 -> 0, ...| {}|{1 -> [30 30 32 6...|{1 -> [66 66 62 6...| NULL| [4]| NULL| 0|{{29410, 9269, 0,...|\n", + "+-------+--------------------+-----------+-------+---------+------------+------------------+--------------------+--------------------+--------------------+----------------+--------------------+--------------------+------------+-------------+------------+-------------+--------------------+\n", + "\n" + ] + } + ], + "source": [ + "spark.sql(\"select * from bootcamp.match_details_bucketed.files\").show()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "3fcc0e68-f33c-40dc-aed8-fba19ffd27f6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "== Physical Plan ==\n", + "AdaptiveSparkPlan isFinalPlan=false\n", + "+- SortMergeJoin [match_id#37356], [match_id#37360], Inner\n", + " :- Sort [match_id#37356 ASC NULLS FIRST], false, 0\n", + " : +- Exchange hashpartitioning(match_id#37356, 200), ENSURE_REQUIREMENTS, [plan_id=16105]\n", + " : +- BatchScan demo.bootcamp.match_details_bucketed[match_id#37356, player_gamertag#37357, player_total_kills#37358, player_total_deaths#37359] demo.bootcamp.match_details_bucketed (branch=null) [filters=match_id IS NOT NULL, groupedBy=] RuntimeFilters: []\n", + " +- Sort [match_id#37360 ASC NULLS FIRST], false, 0\n", + " +- Exchange hashpartitioning(match_id#37360, 200), ENSURE_REQUIREMENTS, [plan_id=16106]\n", + " +- BatchScan demo.bootcamp.matches_bucketed[match_id#37360, is_team_game#37361, playlist_id#37362, completion_date#37363] demo.bootcamp.matches_bucketed (branch=null) [filters=completion_date IS NOT NULL, completion_date = 1451606400000000, match_id IS NOT NULL, groupedBy=] RuntimeFilters: []\n", + "\n", + "\n", + "== Physical Plan ==\n", + "AdaptiveSparkPlan isFinalPlan=false\n", + "+- SortMergeJoin [match_id#37106], [match_id#17], Inner\n", + " :- Sort [match_id#37106 ASC NULLS FIRST], false, 0\n", + " : +- Exchange hashpartitioning(match_id#37106, 200), ENSURE_REQUIREMENTS, [plan_id=16132]\n", + " : +- Filter isnotnull(match_id#37106)\n", + " : +- FileScan csv [match_id#37106,player_gamertag#37107,previous_spartan_rank#37108,spartan_rank#37109,previous_total_xp#37110,total_xp#37111,previous_csr_tier#37112,previous_csr_designation#37113,previous_csr#37114,previous_csr_percent_to_next_tier#37115,previous_csr_rank#37116,current_csr_tier#37117,current_csr_designation#37118,current_csr#37119,current_csr_percent_to_next_tier#37120,current_csr_rank#37121,player_rank_on_team#37122,player_finished#37123,player_average_life#37124,player_total_kills#37125,player_total_headshots#37126,player_total_weapon_damage#37127,player_total_shots_landed#37128,player_total_melee_kills#37129,... 12 more fields] Batched: false, DataFilters: [isnotnull(match_id#37106)], Format: CSV, Location: InMemoryFileIndex(1 paths)[file:/home/iceberg/data/match_details.csv], PartitionFilters: [], PushedFilters: [IsNotNull(match_id)], ReadSchema: struct", + "evalue": "2: error: ';' expected but '#' found.", + "output_type": "error", + "traceback": [ + ":2: error: ';' expected but '#' found.", + " # // we didnt do any of the following rest of code in the lab", + " ^", + "" + ] + } + ], + "source": [ + "# // we didnt do any of the following rest of code in the lab\n", + "# // spark.conf.set(\"spark.sql.autoBroadcastJoinThreshold\", \"1000000000000\")\n", "\n", - "// val broadcastFromThreshold = matches.as(\"m\").join(matchDetails.as(\"md\"), $\"m.match_id\" === $\"md.match_id\")\n", - "// .select($\"m.completion_date\", $\"md.player_gamertag\", $\"md.player_total_kills\")\n", - "// .take(5)\n", + "# // val broadcastFromThreshold = matches.as(\"m\").join(matchDetails.as(\"md\"), $\"m.match_id\" === $\"md.match_id\")\n", + "# // .select($\"m.completion_date\", $\"md.player_gamertag\", $\"md.player_total_kills\")\n", + "# // .take(5)\n", "\n", - "// val explicitBroadcast = matches.as(\"m\").join(broadcast(matchDetails).as(\"md\"), $\"m.match_id\" === $\"md.match_id\")\n", - "// .select($\"md.*\", split($\"completion_date\", \" \").getItem(0).as(\"ds\"))\n", + "# // val explicitBroadcast = matches.as(\"m\").join(broadcast(matchDetails).as(\"md\"), $\"m.match_id\" === $\"md.match_id\")\n", + "# // .select($\"md.*\", split($\"completion_date\", \" \").getItem(0).as(\"ds\"))\n", "\n", - "// val bucketedValues = matchDetailsBucketed.as(\"mdb\").join(matchesBucketed.as(\"mb\"), $\"mb.match_id\" === $\"mdb.match_id\").explain()\n", - "// // .take(5)\n", + "# // val bucketedValues = matchDetailsBucketed.as(\"mdb\").join(matchesBucketed.as(\"mb\"), $\"mb.match_id\" === $\"mdb.match_id\").explain()\n", + "# // // .take(5)\n", "\n", - "// val values = matchDetailsBucketed.as(\"m\").join(matchesBucketed.as(\"md\"), $\"m.match_id\" === $\"md.match_id\").explain()\n", + "# // val values = matchDetailsBucketed.as(\"m\").join(matchesBucketed.as(\"md\"), $\"m.match_id\" === $\"md.match_id\").explain()\n", "\n", - "// explicitBroadcast.write.mode(\"overwrite\").insertInto(\"match_details_bucketed\")\n", + "# // explicitBroadcast.write.mode(\"overwrite\").insertInto(\"match_details_bucketed\")\n", "\n", - "// matches.withColumn(\"ds\", split($\"completion_date\", \" \").getItem(0)).write.mode(\"overwrite\").insertInto(\"matches_bucketed\")\n", + "# // matches.withColumn(\"ds\", split($\"completion_date\", \" \").getItem(0)).write.mode(\"overwrite\").insertInto(\"matches_bucketed\")\n", "\n", - "// spark.sql(bucketedSQL)\n", - "\n" + "# // spark.sql(bucketedSQL)" ] }, { diff --git a/bootcamp/materials/3-spark-fundamentals/notebooks/event_data_pyspark.ipynb b/bootcamp/materials/3-spark-fundamentals/notebooks/event_data_pyspark.ipynb index 98581e90..c154ecd7 100644 --- a/bootcamp/materials/3-spark-fundamentals/notebooks/event_data_pyspark.ipynb +++ b/bootcamp/materials/3-spark-fundamentals/notebooks/event_data_pyspark.ipynb @@ -10,7 +10,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "24/12/05 16:05:41 WARN SparkSession: Using an existing Spark session; only runtime SQL configurations will take effect.\n" + "24/12/06 13:12:36 WARN SparkSession: Using an existing Spark session; only runtime SQL configurations will take effect.\n", + " \r" ] }, { @@ -63,45 +64,43 @@ "cell_type": "code", "execution_count": 2, "id": "dce068df-3e21-429a-8716-abdd13e9406c", - "metadata": { - "scrolled": true - }, + "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[Stage 2:=============================> (4 + 4) / 8]\r" + "[Stage 2:===================================================> (7 + 1) / 8]\r" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "+-----------+-----------+--------------------+--------------------+-----------+--------------------+-------------------+\n", - "| user_id| device_id| referrer| host| url| event_time| event_date|\n", - "+-----------+-----------+--------------------+--------------------+-----------+--------------------+-------------------+\n", - "| -94037775|-2012543895| NULL|admin.zachwilson....|/robots.txt|2021-05-30 12:29:...|2021-05-30 00:00:00|\n", - "| 760642255|-1883465659| NULL|admin.zachwilson....| /|2021-05-30 12:29:...|2021-05-30 00:00:00|\n", - "| 1587120550| -290659081| NULL| www.eczachly.com| /|2021-05-30 00:00:...|2021-05-30 00:00:00|\n", - "| -664256598| -290659081| NULL| www.eczachly.com| /blog|2021-05-30 01:48:...|2021-05-30 00:00:00|\n", - "| 1896286514| 532630305| NULL| www.eczachly.com| /|2021-05-30 03:31:...|2021-05-30 00:00:00|\n", - "| 1896286514| 532630305| NULL| www.eczachly.com| /|2021-05-30 03:31:...|2021-05-30 00:00:00|\n", - "| 1896286514| 532630305| NULL| www.eczachly.com| /|2021-05-30 03:31:...|2021-05-30 00:00:00|\n", - "| 1896286514| 532630305| NULL| www.eczachly.com| /about|2021-05-30 03:32:...|2021-05-30 00:00:00|\n", - "| 1896286514| 532630305| NULL| www.eczachly.com| /blog|2021-05-30 03:32:...|2021-05-30 00:00:00|\n", - "| 1896286514| 532630305| NULL| www.eczachly.com| /graphs|2021-05-30 03:33:...|2021-05-30 00:00:00|\n", - "| 1896286514| 532630305| NULL| www.eczachly.com| /contact|2021-05-30 03:33:...|2021-05-30 00:00:00|\n", - "|-1591343055| 1088283544| NULL| www.eczachly.com| /graphs|2021-05-30 13:46:...|2021-05-30 00:00:00|\n", - "| 125169968| 1088283544| NULL| www.eczachly.com| /contact|2021-05-30 14:40:...|2021-05-30 00:00:00|\n", - "| 1489579620| 1797244070| NULL| www.zachwilson.tech| /about|2021-05-30 11:58:...|2021-05-30 00:00:00|\n", - "|-1292603375| 501573246|https://www.googl...| www.zachwilson.tech| /|2021-05-30 01:14:...|2021-05-30 00:00:00|\n", - "|-1292603375| 501573246|https://www.zachw...| www.zachwilson.tech| /blog|2021-05-30 01:15:...|2021-05-30 00:00:00|\n", - "| 1836258642|-1217993711| NULL| www.zachwilson.tech| /|2021-05-30 01:27:...|2021-05-30 00:00:00|\n", - "| -757032764| -290659081| NULL| www.zachwilson.tech| /blog|2021-05-30 01:35:...|2021-05-30 00:00:00|\n", - "| 2044522997| 378191395|https://www.googl...| www.zachwilson.tech| /|2021-05-30 02:47:...|2021-05-30 00:00:00|\n", - "| 2044522997| 378191395|https://www.zachw...| www.zachwilson.tech| /blog|2021-05-30 02:48:...|2021-05-30 00:00:00|\n", - "+-----------+-----------+--------------------+--------------------+-----------+--------------------+-------------------+\n", + "+-----------+-----------+--------------------+--------------------+--------------------+--------------------+-------------------+\n", + "| user_id| device_id| referrer| host| url| event_time| event_date|\n", + "+-----------+-----------+--------------------+--------------------+--------------------+--------------------+-------------------+\n", + "| 1129583063| 532630305| NULL|admin.zachwilson....| /|2021-01-07 09:21:...|2021-01-07 00:00:00|\n", + "| -648945006| 1088283544| NULL| www.eczachly.com| /|2021-01-07 02:58:...|2021-01-07 00:00:00|\n", + "|-1871780024| -158310583| NULL| www.eczachly.com| /|2021-01-07 04:17:...|2021-01-07 00:00:00|\n", + "| 203689086| 1088283544| NULL| www.eczachly.com|/blog/what-exactl...|2021-01-07 10:03:...|2021-01-07 00:00:00|\n", + "|-1180485268| 532630305| NULL| www.eczachly.com| /|2021-01-07 18:45:...|2021-01-07 00:00:00|\n", + "| 1129583063| 532630305| NULL| www.eczachly.com| /|2021-01-07 21:57:...|2021-01-07 00:00:00|\n", + "|-1381834161| -158310583| NULL| www.eczachly.com| /|2021-01-07 23:07:...|2021-01-07 00:00:00|\n", + "|-1373330946| 532630305| NULL| www.zachwilson.tech| /api/v1/spark-post|2021-01-07 18:53:...|2021-01-07 00:00:00|\n", + "|-1180485268| 532630305| NULL| www.zachwilson.tech| /|2021-01-07 19:20:...|2021-01-07 00:00:00|\n", + "|-1617088793| 1957784035|https://www.zachw...| www.zachwilson.tech| /contact|2021-01-07 00:19:...|2021-01-07 00:00:00|\n", + "|-1617088793| 1957784035|https://www.zachw...| www.zachwilson.tech| /api/v1/contact|2021-01-07 00:19:...|2021-01-07 00:00:00|\n", + "|-1617088793| 1957784035|https://www.zachw...| www.zachwilson.tech| /contact|2021-01-07 00:19:...|2021-01-07 00:00:00|\n", + "| -267976675| 1141939293|https://www.zachw...| www.zachwilson.tech| /contact|2021-01-07 01:57:...|2021-01-07 00:00:00|\n", + "| -267976675| 1141939293|https://www.zachw...| www.zachwilson.tech| /api/v1/contact|2021-01-07 01:57:...|2021-01-07 00:00:00|\n", + "| -267976675| 1141939293|https://www.zachw...| www.zachwilson.tech| /contact|2021-01-07 01:57:...|2021-01-07 00:00:00|\n", + "| 604069040| 1800580819| NULL| www.zachwilson.tech| /|2021-01-07 02:24:...|2021-01-07 00:00:00|\n", + "|-2135898320| 2066336516|http://www.laurel...| www.zachwilson.tech| /|2021-01-07 04:57:...|2021-01-07 00:00:00|\n", + "| -43429336|-1217993711| NULL| www.zachwilson.tech| /contact|2021-01-07 04:57:...|2021-01-07 00:00:00|\n", + "| 1198758947|-1307168836| NULL| www.zachwilson.tech| /blog|2021-01-07 09:57:...|2021-01-07 00:00:00|\n", + "|-1894709267| 1141939293|https://www.zachw...| www.zachwilson.tech| /|2021-01-07 10:12:...|2021-01-07 00:00:00|\n", + "+-----------+-----------+--------------------+--------------------+--------------------+--------------------+-------------------+\n", "only showing top 20 rows\n", "\n" ] @@ -115,9 +114,9 @@ } ], "source": [ - "sorted = df.repartition(100, col(\"event_date\")) \\\n", + "sorted = df.repartition(10, col(\"event_date\")) \\\n", " .sortWithinPartitions(col(\"event_date\"), col(\"host\")) \\\n", - " .withColumn(\"event_time\", col(\"event_time\").cast(\"timestamp\")) \\\n", + " .withColumn(\"event_time\", col(\"event_time\").cast(\"timestamp\")) \n", "\n", "sorted.show()\n", " # col(\"browser_family\")" @@ -125,7 +124,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "id": "d7afa85d-b9b7-4f84-beaf-415fed905d56", "metadata": {}, "outputs": [ @@ -133,37 +132,37 @@ "name": "stderr", "output_type": "stream", "text": [ - "[Stage 7:====================================> (65 + 9) / 100]\r" + "[Stage 5:=======> (1 + 7) / 8]\r" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "+-----------+-----------+--------+--------------------+--------------------+--------------------+-------------------+\n", - "| user_id| device_id|referrer| host| url| event_time| event_date|\n", - "+-----------+-----------+--------+--------------------+--------------------+--------------------+-------------------+\n", - "| 1272828233| -643696601| NULL|admin.zachwilson....| /|2021-01-02 13:53:...|2021-01-02 00:00:00|\n", - "| 747494706| 532630305| NULL|admin.zachwilson....| /|2021-01-02 19:36:...|2021-01-02 00:00:00|\n", - "| 2110046626| 898871897| NULL|admin.zachwilson....| /wp-login.php|2021-01-02 19:57:...|2021-01-02 00:00:00|\n", - "| 1272828233| -643696601| NULL|admin.zachwilson....| /|2021-01-02 21:05:...|2021-01-02 00:00:00|\n", - "| 1272828233| -643696601| NULL|admin.zachwilson....| /|2021-01-02 21:37:...|2021-01-02 00:00:00|\n", - "| 1399665425|-2012543895| NULL| www.eczachly.com| /|2021-01-02 00:20:...|2021-01-02 00:00:00|\n", - "| 125243313| -290659081| NULL| www.eczachly.com| /|2021-01-02 02:06:...|2021-01-02 00:00:00|\n", - "| 632739597| -290659081| NULL| www.eczachly.com|/blog/what-exactl...|2021-01-02 02:58:...|2021-01-02 00:00:00|\n", - "|-1780827820| -290659081| NULL| www.eczachly.com| /|2021-01-02 04:45:...|2021-01-02 00:00:00|\n", - "| 632739597| -290659081| NULL| www.eczachly.com| /|2021-01-02 05:14:...|2021-01-02 00:00:00|\n", - "| 1047962242| -158310583| NULL| www.eczachly.com| /|2021-01-02 11:40:...|2021-01-02 00:00:00|\n", - "| 273700037| -290659081| NULL| www.eczachly.com| /|2021-01-02 07:51:...|2021-01-02 00:00:00|\n", - "| 1272828233| -643696601| NULL| www.eczachly.com| /|2021-01-02 08:14:...|2021-01-02 00:00:00|\n", - "| 210988258| 1088283544| NULL| www.eczachly.com| /contact|2021-01-02 11:11:...|2021-01-02 00:00:00|\n", - "| 273700037| -290659081| NULL| www.eczachly.com| /|2021-01-02 11:23:...|2021-01-02 00:00:00|\n", - "| 632739597| -290659081| NULL| www.eczachly.com| /sitemap.xml|2021-01-02 14:10:...|2021-01-02 00:00:00|\n", - "| 659201289| -290659081| NULL| www.eczachly.com|/blog/life-of-a-s...|2021-01-02 15:53:...|2021-01-02 00:00:00|\n", - "| 1746646422| 2038970862| NULL| www.zachwilson.tech| /about|2021-01-02 10:49:...|2021-01-02 00:00:00|\n", - "| 1150073567|-1883465659| NULL| www.zachwilson.tech| /blog|2021-01-02 00:14:...|2021-01-02 00:00:00|\n", - "| 1746646422| 2038970862| NULL| www.zachwilson.tech| /graphs|2021-01-02 10:49:...|2021-01-02 00:00:00|\n", - "+-----------+-----------+--------+--------------------+--------------------+--------------------+-------------------+\n", + "+-----------+-----------+--------------------+--------------------+--------------------+--------------------+-------------------+\n", + "| user_id| device_id| referrer| host| url| event_time| event_date|\n", + "+-----------+-----------+--------------------+--------------------+--------------------+--------------------+-------------------+\n", + "| 1272828233| -643696601| NULL|admin.zachwilson....| /|2021-01-02 13:53:...|2021-01-02 00:00:00|\n", + "| 747494706| 532630305| NULL|admin.zachwilson....| /|2021-01-02 19:36:...|2021-01-02 00:00:00|\n", + "| 2110046626| 898871897| NULL|admin.zachwilson....| /wp-login.php|2021-01-02 19:57:...|2021-01-02 00:00:00|\n", + "| 1272828233| -643696601| NULL|admin.zachwilson....| /|2021-01-02 21:05:...|2021-01-02 00:00:00|\n", + "| 1272828233| -643696601| NULL|admin.zachwilson....| /|2021-01-02 21:37:...|2021-01-02 00:00:00|\n", + "| 1399665425|-2012543895| NULL| www.eczachly.com| /|2021-01-02 00:20:...|2021-01-02 00:00:00|\n", + "| 125243313| -290659081| NULL| www.eczachly.com| /|2021-01-02 02:06:...|2021-01-02 00:00:00|\n", + "| 632739597| -290659081| NULL| www.eczachly.com|/blog/what-exactl...|2021-01-02 02:58:...|2021-01-02 00:00:00|\n", + "|-1780827820| -290659081| NULL| www.eczachly.com| /|2021-01-02 04:45:...|2021-01-02 00:00:00|\n", + "| 632739597| -290659081| NULL| www.eczachly.com| /|2021-01-02 05:14:...|2021-01-02 00:00:00|\n", + "| 1047962242| -158310583| NULL| www.eczachly.com| /|2021-01-02 11:40:...|2021-01-02 00:00:00|\n", + "| 273700037| -290659081| NULL| www.eczachly.com| /|2021-01-02 07:51:...|2021-01-02 00:00:00|\n", + "| 1272828233| -643696601| NULL| www.eczachly.com| /|2021-01-02 08:14:...|2021-01-02 00:00:00|\n", + "| 210988258| 1088283544| NULL| www.eczachly.com| /contact|2021-01-02 11:11:...|2021-01-02 00:00:00|\n", + "| 273700037| -290659081| NULL| www.eczachly.com| /|2021-01-02 11:23:...|2021-01-02 00:00:00|\n", + "| 632739597| -290659081| NULL| www.eczachly.com| /sitemap.xml|2021-01-02 14:10:...|2021-01-02 00:00:00|\n", + "| 659201289| -290659081| NULL| www.eczachly.com|/blog/life-of-a-s...|2021-01-02 15:53:...|2021-01-02 00:00:00|\n", + "| 1072106763| -784483831|https://www.zachw...| www.zachwilson.tech| /contact|2021-01-02 09:37:...|2021-01-02 00:00:00|\n", + "| 1744817842| -223216734| NULL| www.zachwilson.tech|/graph/stock-tick...|2021-01-02 00:23:...|2021-01-02 00:00:00|\n", + "| 1445055201| 1957784035|https://www.zachw...| www.zachwilson.tech| /contact|2021-01-02 10:17:...|2021-01-02 00:00:00|\n", + "+-----------+-----------+--------------------+--------------------+--------------------+--------------------+-------------------+\n", "only showing top 20 rows\n", "\n" ] @@ -177,7 +176,7 @@ } ], "source": [ - "sortedTwo = df.repartition(100, col(\"event_date\")) \\\n", + "sortedTwo = df.repartition(10, col(\"event_date\")) \\\n", " .sort(col(\"event_date\"), col(\"host\")) \\\n", " .withColumn(\"event_time\", col(\"event_time\").cast(\"timestamp\")) \n", "sortedTwo.show()" @@ -251,7 +250,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "d800dca7-2737-4192-b5c0-c1806c105e15", "metadata": {}, "outputs": [ @@ -274,7 +273,7 @@ "++" ] }, - "execution_count": 2, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -343,7 +342,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 5, "id": "e83cd813-d5c0-4d67-8285-849b882b8bfa", "metadata": { "scrolled": true @@ -368,15 +367,43 @@ "++" ] }, - "execution_count": 9, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%sql\n", - "\n", - "DROP TABLE IF EXISTS iceberg.bootcamp.events" + "DROP TABLE IF EXISTS bootcamp.events" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "53c63f17-a548-43e4-b72e-990d4638040e", + "metadata": {}, + "outputs": [ + { + "ename": "Py4JJavaError", + "evalue": "An error occurred while calling o36.sql.\n: org.apache.iceberg.exceptions.ServiceFailureException: Server error: NotFoundException: Location does not exist: s3://warehouse/bootcamp/events_sorted/metadata/00000-dd872742-0436-40c0-ae4d-05eed17b4355.metadata.json\n\tat org.apache.iceberg.rest.ErrorHandlers$DefaultErrorHandler.accept(ErrorHandlers.java:217)\n\tat org.apache.iceberg.rest.ErrorHandlers$TableErrorHandler.accept(ErrorHandlers.java:118)\n\tat org.apache.iceberg.rest.ErrorHandlers$TableErrorHandler.accept(ErrorHandlers.java:102)\n\tat org.apache.iceberg.rest.HTTPClient.throwFailure(HTTPClient.java:201)\n\tat org.apache.iceberg.rest.HTTPClient.execute(HTTPClient.java:313)\n\tat org.apache.iceberg.rest.HTTPClient.execute(HTTPClient.java:252)\n\tat org.apache.iceberg.rest.HTTPClient.get(HTTPClient.java:348)\n\tat org.apache.iceberg.rest.RESTClient.get(RESTClient.java:96)\n\tat org.apache.iceberg.rest.RESTSessionCatalog.loadInternal(RESTSessionCatalog.java:331)\n\tat org.apache.iceberg.rest.RESTSessionCatalog.loadTable(RESTSessionCatalog.java:347)\n\tat org.apache.iceberg.catalog.BaseSessionCatalog$AsCatalog.loadTable(BaseSessionCatalog.java:99)\n\tat org.apache.iceberg.rest.RESTCatalog.loadTable(RESTCatalog.java:102)\n\tat org.apache.iceberg.shaded.com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2406)\n\tat java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1908)\n\tat org.apache.iceberg.shaded.com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2404)\n\tat org.apache.iceberg.shaded.com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2387)\n\tat org.apache.iceberg.shaded.com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:108)\n\tat org.apache.iceberg.shaded.com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62)\n\tat org.apache.iceberg.CachingCatalog.loadTable(CachingCatalog.java:166)\n\tat org.apache.iceberg.spark.SparkCatalog.load(SparkCatalog.java:843)\n\tat org.apache.iceberg.spark.SparkCatalog.loadTable(SparkCatalog.java:170)\n\tat org.apache.spark.sql.connector.catalog.TableCatalog.tableExists(TableCatalog.java:164)\n\tat org.apache.spark.sql.execution.datasources.v2.DropTableExec.run(DropTableExec.scala:36)\n\tat org.apache.spark.sql.execution.datasources.v2.V2CommandExec.result$lzycompute(V2CommandExec.scala:43)\n\tat org.apache.spark.sql.execution.datasources.v2.V2CommandExec.result(V2CommandExec.scala:43)\n\tat org.apache.spark.sql.execution.datasources.v2.V2CommandExec.executeCollect(V2CommandExec.scala:49)\n\tat org.apache.spark.sql.execution.QueryExecution$$anonfun$eagerlyExecuteCommands$1.$anonfun$applyOrElse$1(QueryExecution.scala:107)\n\tat org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$6(SQLExecution.scala:125)\n\tat org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:201)\n\tat org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$1(SQLExecution.scala:108)\n\tat org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:900)\n\tat org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:66)\n\tat org.apache.spark.sql.execution.QueryExecution$$anonfun$eagerlyExecuteCommands$1.applyOrElse(QueryExecution.scala:107)\n\tat org.apache.spark.sql.execution.QueryExecution$$anonfun$eagerlyExecuteCommands$1.applyOrElse(QueryExecution.scala:98)\n\tat org.apache.spark.sql.catalyst.trees.TreeNode.$anonfun$transformDownWithPruning$1(TreeNode.scala:461)\n\tat org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(origin.scala:76)\n\tat org.apache.spark.sql.catalyst.trees.TreeNode.transformDownWithPruning(TreeNode.scala:461)\n\tat org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.org$apache$spark$sql$catalyst$plans$logical$AnalysisHelper$$super$transformDownWithPruning(LogicalPlan.scala:32)\n\tat org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper.transformDownWithPruning(AnalysisHelper.scala:267)\n\tat org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper.transformDownWithPruning$(AnalysisHelper.scala:263)\n\tat org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.transformDownWithPruning(LogicalPlan.scala:32)\n\tat org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.transformDownWithPruning(LogicalPlan.scala:32)\n\tat org.apache.spark.sql.catalyst.trees.TreeNode.transformDown(TreeNode.scala:437)\n\tat org.apache.spark.sql.execution.QueryExecution.eagerlyExecuteCommands(QueryExecution.scala:98)\n\tat org.apache.spark.sql.execution.QueryExecution.commandExecuted$lzycompute(QueryExecution.scala:85)\n\tat org.apache.spark.sql.execution.QueryExecution.commandExecuted(QueryExecution.scala:83)\n\tat org.apache.spark.sql.Dataset.(Dataset.scala:220)\n\tat org.apache.spark.sql.Dataset$.$anonfun$ofRows$2(Dataset.scala:100)\n\tat org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:900)\n\tat org.apache.spark.sql.Dataset$.ofRows(Dataset.scala:97)\n\tat org.apache.spark.sql.SparkSession.$anonfun$sql$1(SparkSession.scala:638)\n\tat org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:900)\n\tat org.apache.spark.sql.SparkSession.sql(SparkSession.scala:629)\n\tat org.apache.spark.sql.SparkSession.sql(SparkSession.scala:659)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)\n\tat py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)\n\tat py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:374)\n\tat py4j.Gateway.invoke(Gateway.java:282)\n\tat py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)\n\tat py4j.commands.CallCommand.execute(CallCommand.java:79)\n\tat py4j.ClientServerConnection.waitForCommands(ClientServerConnection.java:182)\n\tat py4j.ClientServerConnection.run(ClientServerConnection.java:106)\n\tat java.base/java.lang.Thread.run(Thread.java:829)\n", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mPy4JJavaError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[2], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mget_ipython\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun_cell_magic\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43msql\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mDROP TABLE IF EXISTS bootcamp.events_sorted\u001b[39;49m\u001b[38;5;130;43;01m\\n\u001b[39;49;00m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/usr/local/lib/python3.9/site-packages/IPython/core/interactiveshell.py:2517\u001b[0m, in \u001b[0;36mInteractiveShell.run_cell_magic\u001b[0;34m(self, magic_name, line, cell)\u001b[0m\n\u001b[1;32m 2515\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbuiltin_trap:\n\u001b[1;32m 2516\u001b[0m args \u001b[38;5;241m=\u001b[39m (magic_arg_s, cell)\n\u001b[0;32m-> 2517\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2519\u001b[0m \u001b[38;5;66;03m# The code below prevents the output from being displayed\u001b[39;00m\n\u001b[1;32m 2520\u001b[0m \u001b[38;5;66;03m# when using magics with decorator @output_can_be_silenced\u001b[39;00m\n\u001b[1;32m 2521\u001b[0m \u001b[38;5;66;03m# when the last Python token in the expression is a ';'.\u001b[39;00m\n\u001b[1;32m 2522\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(fn, magic\u001b[38;5;241m.\u001b[39mMAGIC_OUTPUT_CAN_BE_SILENCED, \u001b[38;5;28;01mFalse\u001b[39;00m):\n", + "File \u001b[0;32m~/.ipython/profile_default/startup/00-prettytables.py:81\u001b[0m, in \u001b[0;36msql\u001b[0;34m(line, cell)\u001b[0m\n\u001b[1;32m 79\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _to_table(df, num_rows\u001b[38;5;241m=\u001b[39margs\u001b[38;5;241m.\u001b[39mlimit)\n\u001b[1;32m 80\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m---> 81\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _to_table(\u001b[43mspark\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msql\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcell\u001b[49m\u001b[43m)\u001b[49m)\n", + "File \u001b[0;32m/opt/spark/python/pyspark/sql/session.py:1631\u001b[0m, in \u001b[0;36mSparkSession.sql\u001b[0;34m(self, sqlQuery, args, **kwargs)\u001b[0m\n\u001b[1;32m 1627\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jvm \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1628\u001b[0m litArgs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jvm\u001b[38;5;241m.\u001b[39mPythonUtils\u001b[38;5;241m.\u001b[39mtoArray(\n\u001b[1;32m 1629\u001b[0m [_to_java_column(lit(v)) \u001b[38;5;28;01mfor\u001b[39;00m v \u001b[38;5;129;01min\u001b[39;00m (args \u001b[38;5;129;01mor\u001b[39;00m [])]\n\u001b[1;32m 1630\u001b[0m )\n\u001b[0;32m-> 1631\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m DataFrame(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_jsparkSession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msql\u001b[49m\u001b[43m(\u001b[49m\u001b[43msqlQuery\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlitArgs\u001b[49m\u001b[43m)\u001b[49m, \u001b[38;5;28mself\u001b[39m)\n\u001b[1;32m 1632\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[1;32m 1633\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(kwargs) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m:\n", + "File \u001b[0;32m/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/java_gateway.py:1322\u001b[0m, in \u001b[0;36mJavaMember.__call__\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 1316\u001b[0m command \u001b[38;5;241m=\u001b[39m proto\u001b[38;5;241m.\u001b[39mCALL_COMMAND_NAME \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1317\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcommand_header \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1318\u001b[0m args_command \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1319\u001b[0m proto\u001b[38;5;241m.\u001b[39mEND_COMMAND_PART\n\u001b[1;32m 1321\u001b[0m answer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgateway_client\u001b[38;5;241m.\u001b[39msend_command(command)\n\u001b[0;32m-> 1322\u001b[0m return_value \u001b[38;5;241m=\u001b[39m \u001b[43mget_return_value\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1323\u001b[0m \u001b[43m \u001b[49m\u001b[43manswer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgateway_client\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtarget_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1325\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m temp_arg \u001b[38;5;129;01min\u001b[39;00m temp_args:\n\u001b[1;32m 1326\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(temp_arg, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_detach\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n", + "File \u001b[0;32m/opt/spark/python/pyspark/errors/exceptions/captured.py:179\u001b[0m, in \u001b[0;36mcapture_sql_exception..deco\u001b[0;34m(*a, **kw)\u001b[0m\n\u001b[1;32m 177\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdeco\u001b[39m(\u001b[38;5;241m*\u001b[39ma: Any, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkw: Any) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Any:\n\u001b[1;32m 178\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 179\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkw\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 180\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m Py4JJavaError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 181\u001b[0m converted \u001b[38;5;241m=\u001b[39m convert_exception(e\u001b[38;5;241m.\u001b[39mjava_exception)\n", + "File \u001b[0;32m/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/protocol.py:326\u001b[0m, in \u001b[0;36mget_return_value\u001b[0;34m(answer, gateway_client, target_id, name)\u001b[0m\n\u001b[1;32m 324\u001b[0m value \u001b[38;5;241m=\u001b[39m OUTPUT_CONVERTER[\u001b[38;5;28mtype\u001b[39m](answer[\u001b[38;5;241m2\u001b[39m:], gateway_client)\n\u001b[1;32m 325\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m answer[\u001b[38;5;241m1\u001b[39m] \u001b[38;5;241m==\u001b[39m REFERENCE_TYPE:\n\u001b[0;32m--> 326\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m Py4JJavaError(\n\u001b[1;32m 327\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAn error occurred while calling \u001b[39m\u001b[38;5;132;01m{0}\u001b[39;00m\u001b[38;5;132;01m{1}\u001b[39;00m\u001b[38;5;132;01m{2}\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39m\n\u001b[1;32m 328\u001b[0m \u001b[38;5;28mformat\u001b[39m(target_id, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m, name), value)\n\u001b[1;32m 329\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 330\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m Py4JError(\n\u001b[1;32m 331\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAn error occurred while calling \u001b[39m\u001b[38;5;132;01m{0}\u001b[39;00m\u001b[38;5;132;01m{1}\u001b[39;00m\u001b[38;5;132;01m{2}\u001b[39;00m\u001b[38;5;124m. Trace:\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{3}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39m\n\u001b[1;32m 332\u001b[0m \u001b[38;5;28mformat\u001b[39m(target_id, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m, name, value))\n", + "\u001b[0;31mPy4JJavaError\u001b[0m: An error occurred while calling o36.sql.\n: org.apache.iceberg.exceptions.ServiceFailureException: Server error: NotFoundException: Location does not exist: s3://warehouse/bootcamp/events_sorted/metadata/00000-dd872742-0436-40c0-ae4d-05eed17b4355.metadata.json\n\tat org.apache.iceberg.rest.ErrorHandlers$DefaultErrorHandler.accept(ErrorHandlers.java:217)\n\tat org.apache.iceberg.rest.ErrorHandlers$TableErrorHandler.accept(ErrorHandlers.java:118)\n\tat org.apache.iceberg.rest.ErrorHandlers$TableErrorHandler.accept(ErrorHandlers.java:102)\n\tat org.apache.iceberg.rest.HTTPClient.throwFailure(HTTPClient.java:201)\n\tat org.apache.iceberg.rest.HTTPClient.execute(HTTPClient.java:313)\n\tat org.apache.iceberg.rest.HTTPClient.execute(HTTPClient.java:252)\n\tat org.apache.iceberg.rest.HTTPClient.get(HTTPClient.java:348)\n\tat org.apache.iceberg.rest.RESTClient.get(RESTClient.java:96)\n\tat org.apache.iceberg.rest.RESTSessionCatalog.loadInternal(RESTSessionCatalog.java:331)\n\tat org.apache.iceberg.rest.RESTSessionCatalog.loadTable(RESTSessionCatalog.java:347)\n\tat org.apache.iceberg.catalog.BaseSessionCatalog$AsCatalog.loadTable(BaseSessionCatalog.java:99)\n\tat org.apache.iceberg.rest.RESTCatalog.loadTable(RESTCatalog.java:102)\n\tat org.apache.iceberg.shaded.com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2406)\n\tat java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1908)\n\tat org.apache.iceberg.shaded.com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2404)\n\tat org.apache.iceberg.shaded.com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2387)\n\tat org.apache.iceberg.shaded.com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:108)\n\tat org.apache.iceberg.shaded.com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62)\n\tat org.apache.iceberg.CachingCatalog.loadTable(CachingCatalog.java:166)\n\tat org.apache.iceberg.spark.SparkCatalog.load(SparkCatalog.java:843)\n\tat org.apache.iceberg.spark.SparkCatalog.loadTable(SparkCatalog.java:170)\n\tat org.apache.spark.sql.connector.catalog.TableCatalog.tableExists(TableCatalog.java:164)\n\tat org.apache.spark.sql.execution.datasources.v2.DropTableExec.run(DropTableExec.scala:36)\n\tat org.apache.spark.sql.execution.datasources.v2.V2CommandExec.result$lzycompute(V2CommandExec.scala:43)\n\tat org.apache.spark.sql.execution.datasources.v2.V2CommandExec.result(V2CommandExec.scala:43)\n\tat org.apache.spark.sql.execution.datasources.v2.V2CommandExec.executeCollect(V2CommandExec.scala:49)\n\tat org.apache.spark.sql.execution.QueryExecution$$anonfun$eagerlyExecuteCommands$1.$anonfun$applyOrElse$1(QueryExecution.scala:107)\n\tat org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$6(SQLExecution.scala:125)\n\tat org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:201)\n\tat org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$1(SQLExecution.scala:108)\n\tat org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:900)\n\tat org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:66)\n\tat org.apache.spark.sql.execution.QueryExecution$$anonfun$eagerlyExecuteCommands$1.applyOrElse(QueryExecution.scala:107)\n\tat org.apache.spark.sql.execution.QueryExecution$$anonfun$eagerlyExecuteCommands$1.applyOrElse(QueryExecution.scala:98)\n\tat org.apache.spark.sql.catalyst.trees.TreeNode.$anonfun$transformDownWithPruning$1(TreeNode.scala:461)\n\tat org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(origin.scala:76)\n\tat org.apache.spark.sql.catalyst.trees.TreeNode.transformDownWithPruning(TreeNode.scala:461)\n\tat org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.org$apache$spark$sql$catalyst$plans$logical$AnalysisHelper$$super$transformDownWithPruning(LogicalPlan.scala:32)\n\tat org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper.transformDownWithPruning(AnalysisHelper.scala:267)\n\tat org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper.transformDownWithPruning$(AnalysisHelper.scala:263)\n\tat org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.transformDownWithPruning(LogicalPlan.scala:32)\n\tat org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.transformDownWithPruning(LogicalPlan.scala:32)\n\tat org.apache.spark.sql.catalyst.trees.TreeNode.transformDown(TreeNode.scala:437)\n\tat org.apache.spark.sql.execution.QueryExecution.eagerlyExecuteCommands(QueryExecution.scala:98)\n\tat org.apache.spark.sql.execution.QueryExecution.commandExecuted$lzycompute(QueryExecution.scala:85)\n\tat org.apache.spark.sql.execution.QueryExecution.commandExecuted(QueryExecution.scala:83)\n\tat org.apache.spark.sql.Dataset.(Dataset.scala:220)\n\tat org.apache.spark.sql.Dataset$.$anonfun$ofRows$2(Dataset.scala:100)\n\tat org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:900)\n\tat org.apache.spark.sql.Dataset$.ofRows(Dataset.scala:97)\n\tat org.apache.spark.sql.SparkSession.$anonfun$sql$1(SparkSession.scala:638)\n\tat org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:900)\n\tat org.apache.spark.sql.SparkSession.sql(SparkSession.scala:629)\n\tat org.apache.spark.sql.SparkSession.sql(SparkSession.scala:659)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)\n\tat py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)\n\tat py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:374)\n\tat py4j.Gateway.invoke(Gateway.java:282)\n\tat py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)\n\tat py4j.commands.CallCommand.execute(CallCommand.java:79)\n\tat py4j.ClientServerConnection.waitForCommands(ClientServerConnection.java:182)\n\tat py4j.ClientServerConnection.run(ClientServerConnection.java:106)\n\tat java.base/java.lang.Thread.run(Thread.java:829)\n" + ] + } + ], + "source": [ + "%%sql\n", + "DROP TABLE IF EXISTS bootcamp.events_sorted" ] }, { @@ -431,7 +458,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 6, "id": "cf7ec899-d164-498d-bd09-3b6b7fe6abca", "metadata": {}, "outputs": [ @@ -454,7 +481,7 @@ "++" ] }, - "execution_count": 14, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -462,7 +489,7 @@ "source": [ "%%sql\n", "\n", - "CREATE TABLE IF NOT EXISTS iceberg.bootcamp.events (\n", + "CREATE TABLE IF NOT EXISTS bootcamp.events (\n", " user_id NUMERIC,\n", " device_id NUMERIC,\n", " referrer STRING,\n", @@ -481,7 +508,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 2, "id": "c40b143f-295e-4875-bd7f-12409312b800", "metadata": { "scrolled": true @@ -506,7 +533,7 @@ "++" ] }, - "execution_count": 15, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -515,7 +542,7 @@ "%%sql\n", "\n", "\n", - "CREATE TABLE IF NOT EXISTS iceberg.bootcamp.events_sorted (\n", + "CREATE TABLE IF NOT EXISTS bootcamp.events_sorted (\n", " user_id NUMERIC,\n", " device_id NUMERIC,\n", " referrer STRING,\n", @@ -538,7 +565,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 3, "id": "00c86e79-a911-464c-ad58-acc92859dcc6", "metadata": { "scrolled": true @@ -563,16 +590,14 @@ "++" ] }, - "execution_count": 16, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%sql\n", - "\n", - "\n", - "CREATE TABLE IF NOT EXISTS iceberg.bootcamp.events_unsorted (\n", + "CREATE TABLE IF NOT EXISTS bootcamp.events_unsorted (\n", " user_id NUMERIC,\n", " device_id NUMERIC,\n", " referrer STRING,\n", @@ -587,7 +612,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 4, "id": "2c1254bc-9ecf-4c86-bfd9-de81ecfbb78b", "metadata": {}, "outputs": [ @@ -595,106 +620,163 @@ "name": "stderr", "output_type": "stream", "text": [ - "ERROR:root:Exception while sending command. (0 + 4) / 4]\n", - "Traceback (most recent call last):\n", - " File \"/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/clientserver.py\", line 516, in send_command\n", - " raise Py4JNetworkError(\"Answer from Java side is empty\")\n", - "py4j.protocol.Py4JNetworkError: Answer from Java side is empty\n", - "\n", - "During handling of the above exception, another exception occurred:\n", - "\n", - "Traceback (most recent call last):\n", - " File \"/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/java_gateway.py\", line 1038, in send_command\n", - " response = connection.send_command(command)\n", - " File \"/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/clientserver.py\", line 539, in send_command\n", - " raise Py4JNetworkError(\n", - "py4j.protocol.Py4JNetworkError: Error while sending or receiving\n" - ] - }, - { - "ename": "Py4JError", - "evalue": "An error occurred while calling o219.saveAsTable", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mPy4JError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[21], line 10\u001b[0m\n\u001b[1;32m 4\u001b[0m first_sort_df \u001b[38;5;241m=\u001b[39m start_df\u001b[38;5;241m.\u001b[39msortWithinPartitions(col(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mevent_date\u001b[39m\u001b[38;5;124m\"\u001b[39m), col(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhost\u001b[39m\u001b[38;5;124m\"\u001b[39m)) \u001b[38;5;66;03m#col(\"browser_family\"),\u001b[39;00m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;66;03m# sorted = df.repartition(10, col(\"event_date\")) \\\u001b[39;00m\n\u001b[1;32m 7\u001b[0m \u001b[38;5;66;03m# .sortWithinPartitions(col(\"event_date\")) \\\u001b[39;00m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;66;03m# .withColumn(\"event_time\", col(\"event_time\").cast(\"timestamp\")) \\\u001b[39;00m\n\u001b[0;32m---> 10\u001b[0m \u001b[43mstart_df\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwrite\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmode\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43moverwrite\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msaveAsTable\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43miceberg.bootcamp.events_unsorted\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 11\u001b[0m first_sort_df\u001b[38;5;241m.\u001b[39mwrite\u001b[38;5;241m.\u001b[39mmode(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124moverwrite\u001b[39m\u001b[38;5;124m\"\u001b[39m)\u001b[38;5;241m.\u001b[39msaveAsTable(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124miceberg.bootcamp.events_sorted\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", - "File \u001b[0;32m/opt/spark/python/pyspark/sql/readwriter.py:1586\u001b[0m, in \u001b[0;36mDataFrameWriter.saveAsTable\u001b[0;34m(self, name, format, mode, partitionBy, **options)\u001b[0m\n\u001b[1;32m 1584\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mformat\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1585\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mformat(\u001b[38;5;28mformat\u001b[39m)\n\u001b[0;32m-> 1586\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_jwrite\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msaveAsTable\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/java_gateway.py:1322\u001b[0m, in \u001b[0;36mJavaMember.__call__\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 1316\u001b[0m command \u001b[38;5;241m=\u001b[39m proto\u001b[38;5;241m.\u001b[39mCALL_COMMAND_NAME \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1317\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcommand_header \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1318\u001b[0m args_command \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1319\u001b[0m proto\u001b[38;5;241m.\u001b[39mEND_COMMAND_PART\n\u001b[1;32m 1321\u001b[0m answer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgateway_client\u001b[38;5;241m.\u001b[39msend_command(command)\n\u001b[0;32m-> 1322\u001b[0m return_value \u001b[38;5;241m=\u001b[39m \u001b[43mget_return_value\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1323\u001b[0m \u001b[43m \u001b[49m\u001b[43manswer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgateway_client\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtarget_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1325\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m temp_arg \u001b[38;5;129;01min\u001b[39;00m temp_args:\n\u001b[1;32m 1326\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(temp_arg, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_detach\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n", - "File \u001b[0;32m/opt/spark/python/pyspark/errors/exceptions/captured.py:179\u001b[0m, in \u001b[0;36mcapture_sql_exception..deco\u001b[0;34m(*a, **kw)\u001b[0m\n\u001b[1;32m 177\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdeco\u001b[39m(\u001b[38;5;241m*\u001b[39ma: Any, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkw: Any) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Any:\n\u001b[1;32m 178\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 179\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkw\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 180\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m Py4JJavaError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 181\u001b[0m converted \u001b[38;5;241m=\u001b[39m convert_exception(e\u001b[38;5;241m.\u001b[39mjava_exception)\n", - "File \u001b[0;32m/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/protocol.py:334\u001b[0m, in \u001b[0;36mget_return_value\u001b[0;34m(answer, gateway_client, target_id, name)\u001b[0m\n\u001b[1;32m 330\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m Py4JError(\n\u001b[1;32m 331\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAn error occurred while calling \u001b[39m\u001b[38;5;132;01m{0}\u001b[39;00m\u001b[38;5;132;01m{1}\u001b[39;00m\u001b[38;5;132;01m{2}\u001b[39;00m\u001b[38;5;124m. Trace:\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{3}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39m\n\u001b[1;32m 332\u001b[0m \u001b[38;5;28mformat\u001b[39m(target_id, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m, name, value))\n\u001b[1;32m 333\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 334\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m Py4JError(\n\u001b[1;32m 335\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAn error occurred while calling \u001b[39m\u001b[38;5;132;01m{0}\u001b[39;00m\u001b[38;5;132;01m{1}\u001b[39;00m\u001b[38;5;132;01m{2}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39m\n\u001b[1;32m 336\u001b[0m \u001b[38;5;28mformat\u001b[39m(target_id, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m, name))\n\u001b[1;32m 337\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 338\u001b[0m \u001b[38;5;28mtype\u001b[39m \u001b[38;5;241m=\u001b[39m answer[\u001b[38;5;241m1\u001b[39m]\n", - "\u001b[0;31mPy4JError\u001b[0m: An error occurred while calling o219.saveAsTable" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "ERROR:root:Exception while sending command.\n", - "Traceback (most recent call last):\n", - " File \"/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/clientserver.py\", line 516, in send_command\n", - " raise Py4JNetworkError(\"Answer from Java side is empty\")\n", - "py4j.protocol.Py4JNetworkError: Answer from Java side is empty\n", - "\n", - "During handling of the above exception, another exception occurred:\n", - "\n", - "Traceback (most recent call last):\n", - " File \"/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/java_gateway.py\", line 1038, in send_command\n", - " response = connection.send_command(command)\n", - " File \"/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/clientserver.py\", line 539, in send_command\n", - " raise Py4JNetworkError(\n", - "py4j.protocol.Py4JNetworkError: Error while sending or receiving\n" + " \r" ] } ], "source": [ - "\n", - "start_df = df.repartition(4, col(\"event_date\")).withColumn(\"event_time\", col(\"event_time\").cast(\"timestamp\")) \\\n", - " \n", - "\n", + "start_df = df.repartition(4, col(\"event_date\")).withColumn(\"event_time\", col(\"event_time\").cast(\"timestamp\")) \n", "first_sort_df = start_df.sortWithinPartitions(col(\"event_date\"), col(\"host\")) #col(\"browser_family\"),\n", "\n", "# sorted = df.repartition(10, col(\"event_date\")) \\\n", "# .sortWithinPartitions(col(\"event_date\")) \\\n", "# .withColumn(\"event_time\", col(\"event_time\").cast(\"timestamp\")) \\\n", "\n", - "start_df.write.mode(\"overwrite\").saveAsTable(\"iceberg.bootcamp.events_unsorted\")\n", - "first_sort_df.write.mode(\"overwrite\").saveAsTable(\"iceberg.bootcamp.events_sorted\")" + "start_df.write.mode(\"overwrite\").saveAsTable(\"bootcamp.events_unsorted\")\n", + "first_sort_df.write.mode(\"overwrite\").saveAsTable(\"bootcamp.events_sorted\")" ] }, { "cell_type": "code", - "execution_count": 22, - "id": "6349cb64-8e32-4360-bb65-2a7cf6f09c20", + "execution_count": 5, + "id": "fd3f0c27-fcd4-4e48-9718-b38d27644bf6", "metadata": {}, "outputs": [ { - "ename": "ConnectionRefusedError", - "evalue": "[Errno 111] Connection refused", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mConnectionRefusedError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[22], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# Check a specific configuration\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m warehouse_path \u001b[38;5;241m=\u001b[39m \u001b[43mspark\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconf\u001b[49m\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mspark.sql.catalog.iceberg.warehouse\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNot Set\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWarehouse Path:\u001b[39m\u001b[38;5;124m\"\u001b[39m, warehouse_path)\n", - "File \u001b[0;32m/opt/spark/python/pyspark/sql/session.py:784\u001b[0m, in \u001b[0;36mSparkSession.conf\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 757\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Runtime configuration interface for Spark.\u001b[39;00m\n\u001b[1;32m 758\u001b[0m \n\u001b[1;32m 759\u001b[0m \u001b[38;5;124;03mThis is the interface through which the user can get and set all Spark and Hadoop\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 781\u001b[0m \u001b[38;5;124;03m'value'\u001b[39;00m\n\u001b[1;32m 782\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 783\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_conf\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[0;32m--> 784\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_conf \u001b[38;5;241m=\u001b[39m RuntimeConfig(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_jsparkSession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconf\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 785\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_conf\n", - "File \u001b[0;32m/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/java_gateway.py:1321\u001b[0m, in \u001b[0;36mJavaMember.__call__\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 1314\u001b[0m args_command, temp_args \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_build_args(\u001b[38;5;241m*\u001b[39margs)\n\u001b[1;32m 1316\u001b[0m command \u001b[38;5;241m=\u001b[39m proto\u001b[38;5;241m.\u001b[39mCALL_COMMAND_NAME \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1317\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcommand_header \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1318\u001b[0m args_command \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1319\u001b[0m proto\u001b[38;5;241m.\u001b[39mEND_COMMAND_PART\n\u001b[0;32m-> 1321\u001b[0m answer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgateway_client\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend_command\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcommand\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1322\u001b[0m return_value \u001b[38;5;241m=\u001b[39m get_return_value(\n\u001b[1;32m 1323\u001b[0m answer, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgateway_client, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtarget_id, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mname)\n\u001b[1;32m 1325\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m temp_arg \u001b[38;5;129;01min\u001b[39;00m temp_args:\n", - "File \u001b[0;32m/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/java_gateway.py:1036\u001b[0m, in \u001b[0;36mGatewayClient.send_command\u001b[0;34m(self, command, retry, binary)\u001b[0m\n\u001b[1;32m 1015\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21msend_command\u001b[39m(\u001b[38;5;28mself\u001b[39m, command, retry\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, binary\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[1;32m 1016\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Sends a command to the JVM. This method is not intended to be\u001b[39;00m\n\u001b[1;32m 1017\u001b[0m \u001b[38;5;124;03m called directly by Py4J users. It is usually called by\u001b[39;00m\n\u001b[1;32m 1018\u001b[0m \u001b[38;5;124;03m :class:`JavaMember` instances.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1034\u001b[0m \u001b[38;5;124;03m if `binary` is `True`.\u001b[39;00m\n\u001b[1;32m 1035\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m-> 1036\u001b[0m connection \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_connection\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1037\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1038\u001b[0m response \u001b[38;5;241m=\u001b[39m connection\u001b[38;5;241m.\u001b[39msend_command(command)\n", - "File \u001b[0;32m/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/clientserver.py:284\u001b[0m, in \u001b[0;36mJavaClient._get_connection\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 281\u001b[0m \u001b[38;5;28;01mpass\u001b[39;00m\n\u001b[1;32m 283\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m connection \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mor\u001b[39;00m connection\u001b[38;5;241m.\u001b[39msocket \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 284\u001b[0m connection \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_create_new_connection\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 285\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m connection\n", - "File \u001b[0;32m/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/clientserver.py:291\u001b[0m, in \u001b[0;36mJavaClient._create_new_connection\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 287\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_create_new_connection\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 288\u001b[0m connection \u001b[38;5;241m=\u001b[39m ClientServerConnection(\n\u001b[1;32m 289\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mjava_parameters, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpython_parameters,\n\u001b[1;32m 290\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgateway_property, \u001b[38;5;28mself\u001b[39m)\n\u001b[0;32m--> 291\u001b[0m \u001b[43mconnection\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect_to_java_server\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 292\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mset_thread_connection(connection)\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m connection\n", - "File \u001b[0;32m/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/clientserver.py:438\u001b[0m, in \u001b[0;36mClientServerConnection.connect_to_java_server\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 435\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mssl_context:\n\u001b[1;32m 436\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msocket \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mssl_context\u001b[38;5;241m.\u001b[39mwrap_socket(\n\u001b[1;32m 437\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msocket, server_hostname\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mjava_address)\n\u001b[0;32m--> 438\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mjava_address\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mjava_port\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 439\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstream \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msocket\u001b[38;5;241m.\u001b[39mmakefile(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrb\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 440\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mis_connected \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n", - "\u001b[0;31mConnectionRefusedError\u001b[0m: [Errno 111] Connection refused" - ] + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
contentfile_pathfile_formatspec_idpartitionrecord_countfile_size_in_bytescolumn_sizesvalue_countsnull_value_countsnan_value_countslower_boundsupper_boundskey_metadatasplit_offsetsequality_idssort_order_idreadable_metrics
0s3://warehouse/bootcamp/events_sorted/data/00000-22-dad7b32f-1d42-4e8d-a90d-792cb8eaba2c-0-00001.parquetPARQUET1Row(event_date=None)89391998079{1: 315033, 2: 103859, 3: 68766, 4: 2674, 5: 111517, 6: 390792, 7: 2274}{1: 89391, 2: 89391, 3: 89391, 4: 89391, 5: 89391, 6: 89391, 7: 89391}{1: 1, 2: 0, 3: 46359, 4: 0, 5: 0, 6: 0, 7: 0}{}{1: bytearray(b'-1000095488'), 2: bytearray(b'-100210680'), 3: bytearray(b'52.20.78.240'), 4: bytearray(b'aashish.techcrea'), 5: bytearray(b'/'), 6: bytearray(b' \\xba\\xe7\\xb8\\xa8\\xb8\\x05\\x00'), 7: bytearray(b'\\x00\\xa0&\\xb4\\xa8\\xb8\\x05\\x00')}{1: bytearray(b'999884938'), 2: bytearray(b'999535123'), 3: bytearray(b'zachwilson.tech'), 4: bytearray(b'zachwilson.techd'), 5: bytearray(b'/zzageqnf.php?Fp'), 6: bytearray(b'\\xe8\\xb0\\x1b\\x8ec\\x03\\x06\\x00'), 7: bytearray(b'\\x00\\xe0dqO\\x03\\x06\\x00')}None[4]None0Row(device_id=Row(column_size=103859, value_count=89391, null_value_count=0, nan_value_count=None, lower_bound='-100210680', upper_bound='999535123'), event_date=Row(column_size=2274, value_count=89391, null_value_count=0, nan_value_count=None, lower_bound=datetime.datetime(2021, 1, 12, 0, 0), upper_bound=datetime.datetime(2023, 8, 20, 0, 0)), event_time=Row(column_size=390792, value_count=89391, null_value_count=0, nan_value_count=None, lower_bound=datetime.datetime(2021, 1, 12, 0, 1, 19, 764000), upper_bound=datetime.datetime(2023, 8, 20, 23, 59, 41, 89000)), host=Row(column_size=2674, value_count=89391, null_value_count=0, nan_value_count=None, lower_bound='aashish.techcrea', upper_bound='zachwilson.techd'), referrer=Row(column_size=68766, value_count=89391, null_value_count=46359, nan_value_count=None, lower_bound='52.20.78.240', upper_bound='zachwilson.tech'), url=Row(column_size=111517, value_count=89391, null_value_count=0, nan_value_count=None, lower_bound='/', upper_bound='/zzageqnf.php?Fp'), user_id=Row(column_size=315033, value_count=89391, null_value_count=1, nan_value_count=None, lower_bound='-1000095488', upper_bound='999884938'))
0s3://warehouse/bootcamp/events_sorted/data/00001-23-dad7b32f-1d42-4e8d-a90d-792cb8eaba2c-0-00001.parquetPARQUET1Row(event_date=None)992321126501{1: 344927, 2: 117090, 3: 73756, 4: 3294, 5: 145848, 6: 435861, 7: 2355}{1: 99232, 2: 99232, 3: 99232, 4: 99232, 5: 99232, 6: 99232, 7: 99232}{1: 58, 2: 0, 3: 49299, 4: 0, 5: 0, 6: 0, 7: 0}{}{1: bytearray(b'-1000370060'), 2: bytearray(b'-100210680'), 3: bytearray(b'"https://www.goo'), 4: bytearray(b'abhishekanand.te'), 5: bytearray(b'"/?""<?=print(93'), 6: bytearray(b'(\\x83\\xb2EX\\xb8\\x05\\x00'), 7: bytearray(b'\\x00 \\xc9<X\\xb8\\x05\\x00')}{1: bytearray(b'999956796'), 2: bytearray(b'999535123'), 3: bytearray(b'zachwilson.tech'), 4: bytearray(b'zsavi524.techcrf'), 5: bytearray(b'/zz.php'), 6: bytearray(b'\\x88\\xb8\\x07P;\\x03\\x06\\x00'), 7: bytearray(b"\\x00 \\xb65\\'\\x03\\x06\\x00")}None[4]None0Row(device_id=Row(column_size=117090, value_count=99232, null_value_count=0, nan_value_count=None, lower_bound='-100210680', upper_bound='999535123'), event_date=Row(column_size=2355, value_count=99232, null_value_count=0, nan_value_count=None, lower_bound=datetime.datetime(2021, 1, 8, 0, 0), upper_bound=datetime.datetime(2023, 8, 18, 0, 0)), event_time=Row(column_size=435861, value_count=99232, null_value_count=0, nan_value_count=None, lower_bound=datetime.datetime(2021, 1, 8, 0, 2, 29, 513000), upper_bound=datetime.datetime(2023, 8, 18, 23, 59, 0, 901000)), host=Row(column_size=3294, value_count=99232, null_value_count=0, nan_value_count=None, lower_bound='abhishekanand.te', upper_bound='zsavi524.techcrf'), referrer=Row(column_size=73756, value_count=99232, null_value_count=49299, nan_value_count=None, lower_bound='"https://www.goo', upper_bound='zachwilson.tech'), url=Row(column_size=145848, value_count=99232, null_value_count=0, nan_value_count=None, lower_bound='"/?""<?=print(93', upper_bound='/zz.php'), user_id=Row(column_size=344927, value_count=99232, null_value_count=58, nan_value_count=None, lower_bound='-1000370060', upper_bound='999956796'))
0s3://warehouse/bootcamp/events_sorted/data/00002-24-dad7b32f-1d42-4e8d-a90d-792cb8eaba2c-0-00001.parquetPARQUET1Row(event_date=None)939561321754{1: 343502, 2: 115393, 3: 94518, 4: 3112, 5: 351330, 6: 408578, 7: 2019}{1: 93956, 2: 93956, 3: 93956, 4: 93956, 5: 93956, 6: 93956, 7: 93956}{1: 0, 2: 0, 3: 48227, 4: 0, 5: 0, 6: 0, 7: 0}{}{1: bytearray(b'-1000675882'), 2: bytearray(b'-1000866068'), 3: bytearray(b'"https://www.goo'), 4: bytearray(b'ablumhardt.techc'), 5: bytearray(b'"/?""<?=print(93'), 6: bytearray(b'\\x18\\xe8_\\xb2\\xf3\\xb7\\x05\\x00'), 7: bytearray(b'\\x00@\\x94\\xa7\\xf3\\xb7\\x05\\x00')}{1: bytearray(b'999956796'), 2: bytearray(b'998961543'), 3: bytearray(b'zachwilson.tech'), 4: bytearray(b'zzz.techcreator/'), 5: bytearray(b'/zz/address.php@'), 6: bytearray(b'HE\\xdbM\\xb3\\x03\\x06\\x00'), 7: bytearray(b'\\x00`\\xc2\\xe8\\x9f\\x03\\x06\\x00')}None[4]None0Row(device_id=Row(column_size=115393, value_count=93956, null_value_count=0, nan_value_count=None, lower_bound='-1000866068', upper_bound='998961543'), event_date=Row(column_size=2019, value_count=93956, null_value_count=0, nan_value_count=None, lower_bound=datetime.datetime(2021, 1, 3, 0, 0), upper_bound=datetime.datetime(2023, 8, 24, 0, 0)), event_time=Row(column_size=408578, value_count=93956, null_value_count=0, nan_value_count=None, lower_bound=datetime.datetime(2021, 1, 3, 0, 3, 1, 119000), upper_bound=datetime.datetime(2023, 8, 24, 23, 8, 20, 509000)), host=Row(column_size=3112, value_count=93956, null_value_count=0, nan_value_count=None, lower_bound='ablumhardt.techc', upper_bound='zzz.techcreator/'), referrer=Row(column_size=94518, value_count=93956, null_value_count=48227, nan_value_count=None, lower_bound='"https://www.goo', upper_bound='zachwilson.tech'), url=Row(column_size=351330, value_count=93956, null_value_count=0, nan_value_count=None, lower_bound='"/?""<?=print(93', upper_bound='/zz/address.php@'), user_id=Row(column_size=343502, value_count=93956, null_value_count=0, nan_value_count=None, lower_bound='-1000675882', upper_bound='999956796'))
0s3://warehouse/bootcamp/events_sorted/data/00003-25-dad7b32f-1d42-4e8d-a90d-792cb8eaba2c-0-00001.parquetPARQUET1Row(event_date=None)1222351509168{1: 450920, 2: 148134, 3: 98606, 4: 3551, 5: 290056, 6: 512117, 7: 2154}{1: 122235, 2: 122235, 3: 122235, 4: 122235, 5: 122235, 6: 122235, 7: 122235}{1: 8, 2: 0, 3: 53009, 4: 0, 5: 0, 6: 0, 7: 0}{}{1: bytearray(b'-1000015881'), 2: bytearray(b'-1001669954'), 3: bytearray(b'3.220.57.224'), 4: bytearray(b'accc.techcreator'), 5: bytearray(b'/'), 6: bytearray(b'@n.\\xbd\\xdf\\xb7\\x05\\x00'), 7: bytearray(b'\\x00\\xe0\\xbc\\x89\\xdf\\xb7\\x05\\x00')}{1: bytearray(b'999882344'), 2: bytearray(b'998766634'), 3: bytearray(b'zachwilson.tech'), 4: bytearray(b'zachwilson.techd'), 5: bytearray(b'/zz.php'), 6: bytearray(b'\\xd8\\xaf\\x9a\\xe8\\x9f\\x03\\x06\\x00'), 7: bytearray(b'\\x00\\x00\\xeb\\xca\\x8b\\x03\\x06\\x00')}None[4]None0Row(device_id=Row(column_size=148134, value_count=122235, null_value_count=0, nan_value_count=None, lower_bound='-1001669954', upper_bound='998766634'), event_date=Row(column_size=2154, value_count=122235, null_value_count=0, nan_value_count=None, lower_bound=datetime.datetime(2021, 1, 2, 0, 0), upper_bound=datetime.datetime(2023, 8, 23, 0, 0)), event_time=Row(column_size=512117, value_count=122235, null_value_count=0, nan_value_count=None, lower_bound=datetime.datetime(2021, 1, 2, 0, 14, 23, 80000), upper_bound=datetime.datetime(2023, 8, 23, 23, 59, 57, 399000)), host=Row(column_size=3551, value_count=122235, null_value_count=0, nan_value_count=None, lower_bound='accc.techcreator', upper_bound='zachwilson.techd'), referrer=Row(column_size=98606, value_count=122235, null_value_count=53009, nan_value_count=None, lower_bound='3.220.57.224', upper_bound='zachwilson.tech'), url=Row(column_size=290056, value_count=122235, null_value_count=0, nan_value_count=None, lower_bound='/', upper_bound='/zz.php'), user_id=Row(column_size=450920, value_count=122235, null_value_count=8, nan_value_count=None, lower_bound='-1000015881', upper_bound='999882344'))
" + ], + "text/plain": [ + "+---------+----------------------------------------------------------------------------------------------------------+-------------+---------+----------------------+--------------+--------------------+--------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------------------------------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+---------------+--------------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n", + "| content | file_path | file_format | spec_id | partition | record_count | file_size_in_bytes | column_sizes | value_counts | null_value_counts | nan_value_counts | lower_bounds | upper_bounds | key_metadata | split_offsets | equality_ids | sort_order_id | readable_metrics |\n", + "+---------+----------------------------------------------------------------------------------------------------------+-------------+---------+----------------------+--------------+--------------------+--------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------------------------------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+---------------+--------------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n", + "| 0 | s3://warehouse/bootcamp/events_sorted/data/00000-22-dad7b32f-1d42-4e8d-a90d-792cb8eaba2c-0-00001.parquet | PARQUET | 1 | Row(event_date=None) | 89391 | 998079 | {1: 315033, 2: 103859, 3: 68766, 4: 2674, 5: 111517, 6: 390792, 7: 2274} | {1: 89391, 2: 89391, 3: 89391, 4: 89391, 5: 89391, 6: 89391, 7: 89391} | {1: 1, 2: 0, 3: 46359, 4: 0, 5: 0, 6: 0, 7: 0} | {} | {1: bytearray(b'-1000095488'), 2: bytearray(b'-100210680'), 3: bytearray(b'52.20.78.240'), 4: bytearray(b'aashish.techcrea'), 5: bytearray(b'/'), 6: bytearray(b' \\xba\\xe7\\xb8\\xa8\\xb8\\x05\\x00'), 7: bytearray(b'\\x00\\xa0&\\xb4\\xa8\\xb8\\x05\\x00')} | {1: bytearray(b'999884938'), 2: bytearray(b'999535123'), 3: bytearray(b'zachwilson.tech'), 4: bytearray(b'zachwilson.techd'), 5: bytearray(b'/zzageqnf.php?Fp'), 6: bytearray(b'\\xe8\\xb0\\x1b\\x8ec\\x03\\x06\\x00'), 7: bytearray(b'\\x00\\xe0dqO\\x03\\x06\\x00')} | None | [4] | None | 0 | Row(device_id=Row(column_size=103859, value_count=89391, null_value_count=0, nan_value_count=None, lower_bound='-100210680', upper_bound='999535123'), event_date=Row(column_size=2274, value_count=89391, null_value_count=0, nan_value_count=None, lower_bound=datetime.datetime(2021, 1, 12, 0, 0), upper_bound=datetime.datetime(2023, 8, 20, 0, 0)), event_time=Row(column_size=390792, value_count=89391, null_value_count=0, nan_value_count=None, lower_bound=datetime.datetime(2021, 1, 12, 0, 1, 19, 764000), upper_bound=datetime.datetime(2023, 8, 20, 23, 59, 41, 89000)), host=Row(column_size=2674, value_count=89391, null_value_count=0, nan_value_count=None, lower_bound='aashish.techcrea', upper_bound='zachwilson.techd'), referrer=Row(column_size=68766, value_count=89391, null_value_count=46359, nan_value_count=None, lower_bound='52.20.78.240', upper_bound='zachwilson.tech'), url=Row(column_size=111517, value_count=89391, null_value_count=0, nan_value_count=None, lower_bound='/', upper_bound='/zzageqnf.php?Fp'), user_id=Row(column_size=315033, value_count=89391, null_value_count=1, nan_value_count=None, lower_bound='-1000095488', upper_bound='999884938')) |\n", + "| 0 | s3://warehouse/bootcamp/events_sorted/data/00001-23-dad7b32f-1d42-4e8d-a90d-792cb8eaba2c-0-00001.parquet | PARQUET | 1 | Row(event_date=None) | 99232 | 1126501 | {1: 344927, 2: 117090, 3: 73756, 4: 3294, 5: 145848, 6: 435861, 7: 2355} | {1: 99232, 2: 99232, 3: 99232, 4: 99232, 5: 99232, 6: 99232, 7: 99232} | {1: 58, 2: 0, 3: 49299, 4: 0, 5: 0, 6: 0, 7: 0} | {} | {1: bytearray(b'-1000370060'), 2: bytearray(b'-100210680'), 3: bytearray(b'\"https://www.goo'), 4: bytearray(b'abhishekanand.te'), 5: bytearray(b'\"/?\"\"\n", - " \n", - " size\n", - " num_files\n", - " sorted\n", - " \n", - " \n", - " 2896920\n", - " 4\n", - " sorted\n", - " \n", - " \n", - " 3211534\n", - " 4\n", - " unsorted\n", - " \n", + " \n", + " \n", + " size\n", + " num_files\n", + " sorted\n", + " \n", + " \n", + " \n", + " \n", + " 4955502\n", + " 4\n", + " sorted\n", + " \n", + " \n", + " 5050842\n", + " 4\n", + " unsorted\n", + " \n", + " \n", "" ], "text/plain": [ "+---------+-----------+----------+\n", "| size | num_files | sorted |\n", "+---------+-----------+----------+\n", - "| 2896920 | 4 | sorted |\n", - "| 3211534 | 4 | unsorted |\n", + "| 4955502 | 4 | sorted |\n", + "| 5050842 | 4 | unsorted |\n", "+---------+-----------+----------+" ] }, - "execution_count": 121, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -749,35 +835,25 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 7, "id": "a93db4d6-ac15-4d0e-83da-77b93ad618da", "metadata": {}, "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
sizenum_files
31457135
" - ], - "text/plain": [ - "+---------+-----------+\n", - "| size | num_files |\n", - "+---------+-----------+\n", - "| 3145713 | 5 |\n", - "+---------+-----------+" - ] - }, - "execution_count": 90, - "metadata": {}, - "output_type": "execute_result" + "ename": "AnalysisException", + "evalue": "[TABLE_OR_VIEW_NOT_FOUND] The table or view `demo`.`bootcamp`.`events`.`files` cannot be found. Verify the spelling and correctness of the schema and catalog.\nIf you did not qualify the name with a schema, verify the current_schema() output, or qualify the name with the correct schema and catalog.\nTo tolerate the error on drop use DROP VIEW IF EXISTS or DROP TABLE IF EXISTS.; line 1 pos 67;\n'Aggregate ['SUM('file_size_in_bytes) AS size#267, count(1) AS num_files#268L]\n+- 'UnresolvedRelation [demo, bootcamp, events, files], [], false\n", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAnalysisException\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[7], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mget_ipython\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun_cell_magic\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43msql\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mSELECT SUM(file_size_in_bytes) as size, COUNT(1) as num_files FROM demo.bootcamp.events.files;\u001b[39;49m\u001b[38;5;130;43;01m\\n\u001b[39;49;00m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/usr/local/lib/python3.9/site-packages/IPython/core/interactiveshell.py:2517\u001b[0m, in \u001b[0;36mInteractiveShell.run_cell_magic\u001b[0;34m(self, magic_name, line, cell)\u001b[0m\n\u001b[1;32m 2515\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbuiltin_trap:\n\u001b[1;32m 2516\u001b[0m args \u001b[38;5;241m=\u001b[39m (magic_arg_s, cell)\n\u001b[0;32m-> 2517\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2519\u001b[0m \u001b[38;5;66;03m# The code below prevents the output from being displayed\u001b[39;00m\n\u001b[1;32m 2520\u001b[0m \u001b[38;5;66;03m# when using magics with decorator @output_can_be_silenced\u001b[39;00m\n\u001b[1;32m 2521\u001b[0m \u001b[38;5;66;03m# when the last Python token in the expression is a ';'.\u001b[39;00m\n\u001b[1;32m 2522\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(fn, magic\u001b[38;5;241m.\u001b[39mMAGIC_OUTPUT_CAN_BE_SILENCED, \u001b[38;5;28;01mFalse\u001b[39;00m):\n", + "File \u001b[0;32m~/.ipython/profile_default/startup/00-prettytables.py:81\u001b[0m, in \u001b[0;36msql\u001b[0;34m(line, cell)\u001b[0m\n\u001b[1;32m 79\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _to_table(df, num_rows\u001b[38;5;241m=\u001b[39margs\u001b[38;5;241m.\u001b[39mlimit)\n\u001b[1;32m 80\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m---> 81\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _to_table(\u001b[43mspark\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msql\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcell\u001b[49m\u001b[43m)\u001b[49m)\n", + "File \u001b[0;32m/opt/spark/python/pyspark/sql/session.py:1631\u001b[0m, in \u001b[0;36mSparkSession.sql\u001b[0;34m(self, sqlQuery, args, **kwargs)\u001b[0m\n\u001b[1;32m 1627\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jvm \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1628\u001b[0m litArgs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jvm\u001b[38;5;241m.\u001b[39mPythonUtils\u001b[38;5;241m.\u001b[39mtoArray(\n\u001b[1;32m 1629\u001b[0m [_to_java_column(lit(v)) \u001b[38;5;28;01mfor\u001b[39;00m v \u001b[38;5;129;01min\u001b[39;00m (args \u001b[38;5;129;01mor\u001b[39;00m [])]\n\u001b[1;32m 1630\u001b[0m )\n\u001b[0;32m-> 1631\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m DataFrame(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_jsparkSession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msql\u001b[49m\u001b[43m(\u001b[49m\u001b[43msqlQuery\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlitArgs\u001b[49m\u001b[43m)\u001b[49m, \u001b[38;5;28mself\u001b[39m)\n\u001b[1;32m 1632\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[1;32m 1633\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(kwargs) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m:\n", + "File \u001b[0;32m/opt/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/java_gateway.py:1322\u001b[0m, in \u001b[0;36mJavaMember.__call__\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 1316\u001b[0m command \u001b[38;5;241m=\u001b[39m proto\u001b[38;5;241m.\u001b[39mCALL_COMMAND_NAME \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1317\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcommand_header \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1318\u001b[0m args_command \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1319\u001b[0m proto\u001b[38;5;241m.\u001b[39mEND_COMMAND_PART\n\u001b[1;32m 1321\u001b[0m answer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgateway_client\u001b[38;5;241m.\u001b[39msend_command(command)\n\u001b[0;32m-> 1322\u001b[0m return_value \u001b[38;5;241m=\u001b[39m \u001b[43mget_return_value\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1323\u001b[0m \u001b[43m \u001b[49m\u001b[43manswer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgateway_client\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtarget_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1325\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m temp_arg \u001b[38;5;129;01min\u001b[39;00m temp_args:\n\u001b[1;32m 1326\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(temp_arg, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_detach\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n", + "File \u001b[0;32m/opt/spark/python/pyspark/errors/exceptions/captured.py:185\u001b[0m, in \u001b[0;36mcapture_sql_exception..deco\u001b[0;34m(*a, **kw)\u001b[0m\n\u001b[1;32m 181\u001b[0m converted \u001b[38;5;241m=\u001b[39m convert_exception(e\u001b[38;5;241m.\u001b[39mjava_exception)\n\u001b[1;32m 182\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(converted, UnknownException):\n\u001b[1;32m 183\u001b[0m \u001b[38;5;66;03m# Hide where the exception came from that shows a non-Pythonic\u001b[39;00m\n\u001b[1;32m 184\u001b[0m \u001b[38;5;66;03m# JVM exception message.\u001b[39;00m\n\u001b[0;32m--> 185\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m converted \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 186\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 187\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m\n", + "\u001b[0;31mAnalysisException\u001b[0m: [TABLE_OR_VIEW_NOT_FOUND] The table or view `demo`.`bootcamp`.`events`.`files` cannot be found. Verify the spelling and correctness of the schema and catalog.\nIf you did not qualify the name with a schema, verify the current_schema() output, or qualify the name with the correct schema and catalog.\nTo tolerate the error on drop use DROP VIEW IF EXISTS or DROP TABLE IF EXISTS.; line 1 pos 67;\n'Aggregate ['SUM('file_size_in_bytes) AS size#267, count(1) AS num_files#268L]\n+- 'UnresolvedRelation [demo, bootcamp, events, files], [], false\n" + ] } ], "source": [ diff --git a/bootcamp/materials/3-spark-fundamentals/src/jobs/monthly_user_site_hits_job.py b/bootcamp/materials/3-spark-fundamentals/src/jobs/monthly_user_site_hits_job.py index f1bdd5ff..eefb504a 100644 --- a/bootcamp/materials/3-spark-fundamentals/src/jobs/monthly_user_site_hits_job.py +++ b/bootcamp/materials/3-spark-fundamentals/src/jobs/monthly_user_site_hits_job.py @@ -1,9 +1,5 @@ from pyspark.sql import SparkSession - - - - def do_monthly_user_site_hits_transformation(spark, dataframe, ds): query = f""" SELECT @@ -18,7 +14,6 @@ def do_monthly_user_site_hits_transformation(spark, dataframe, ds): dataframe.createOrReplaceTempView("monthly_user_site_hits") return spark.sql(query) - def main(): ds = '2023-01-01' spark = SparkSession.builder \ diff --git a/bootcamp/materials/3-spark-fundamentals/src/jobs/players_scd_job.py b/bootcamp/materials/3-spark-fundamentals/src/jobs/players_scd_job.py index 2690cae3..9d3b6992 100644 --- a/bootcamp/materials/3-spark-fundamentals/src/jobs/players_scd_job.py +++ b/bootcamp/materials/3-spark-fundamentals/src/jobs/players_scd_job.py @@ -1,7 +1,6 @@ from pyspark.sql import SparkSession query = """ - WITH streak_started AS ( SELECT player_name, current_season, @@ -35,15 +34,12 @@ SELECT player_name, scoring_class, start_date, end_date FROM aggregated - """ - def do_player_scd_transformation(spark, dataframe): dataframe.createOrReplaceTempView("players") return spark.sql(query) - def main(): spark = SparkSession.builder \ .master("local") \ diff --git a/bootcamp/materials/3-spark-fundamentals/src/jobs/team_vertex_job.py b/bootcamp/materials/3-spark-fundamentals/src/jobs/team_vertex_job.py index 92c9c28c..c3a13936 100644 --- a/bootcamp/materials/3-spark-fundamentals/src/jobs/team_vertex_job.py +++ b/bootcamp/materials/3-spark-fundamentals/src/jobs/team_vertex_job.py @@ -1,7 +1,6 @@ from pyspark.sql import SparkSession query = """ - WITH teams_deduped AS ( SELECT *, ROW_NUMBER() OVER(PARTITION BY team_id ORDER BY team_id) as row_num FROM teams @@ -18,10 +17,8 @@ ) AS properties FROM teams_deduped WHERE row_num = 1 - """ - def do_team_vertex_transformation(spark, dataframe): dataframe.createOrReplaceTempView("teams") return spark.sql(query) From 5d50f8001025f50e63065a056890bf54f083dc5a Mon Sep 17 00:00:00 2001 From: Lujein Date: Tue, 17 Dec 2024 15:45:08 +0100 Subject: [PATCH 13/16] spark homework --- .../3-spark-fundamentals/homework/hw3.py | 283 +++ .../3-spark-fundamentals/homework/hw3.zip | Bin 0 -> 2047 bytes .../notebooks/homework.ipynb | 1666 +++++++++++++++++ .../my_notes_load_matches_bucketed.ipynb | 214 +++ .../src/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 232 bytes .../jobs/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 237 bytes ...monthly_user_site_hits_job.cpython-311.pyc | Bin 0 -> 1750 bytes .../players_scd_job.cpython-311.pyc | Bin 0 -> 2379 bytes .../team_vertex_job.cpython-311.pyc | Bin 0 -> 1723 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 238 bytes .../conftest.cpython-311-pytest-7.4.4.pyc | Bin 0 -> 904 bytes ...ser_site_hits.cpython-311-pytest-7.4.4.pyc | Bin 0 -> 2005 bytes ...st_player_scd.cpython-311-pytest-7.4.4.pyc | Bin 0 -> 1695 bytes ...am_vertex_job.cpython-311-pytest-7.4.4.pyc | Bin 0 -> 1707 bytes 14 files changed, 2163 insertions(+) create mode 100644 bootcamp/materials/3-spark-fundamentals/homework/hw3.py create mode 100644 bootcamp/materials/3-spark-fundamentals/homework/hw3.zip create mode 100644 bootcamp/materials/3-spark-fundamentals/notebooks/homework.ipynb create mode 100644 bootcamp/materials/3-spark-fundamentals/notebooks/my_notes_load_matches_bucketed.ipynb create mode 100644 bootcamp/materials/3-spark-fundamentals/src/__pycache__/__init__.cpython-311.pyc create mode 100644 bootcamp/materials/3-spark-fundamentals/src/jobs/__pycache__/__init__.cpython-311.pyc create mode 100644 bootcamp/materials/3-spark-fundamentals/src/jobs/__pycache__/monthly_user_site_hits_job.cpython-311.pyc create mode 100644 bootcamp/materials/3-spark-fundamentals/src/jobs/__pycache__/players_scd_job.cpython-311.pyc create mode 100644 bootcamp/materials/3-spark-fundamentals/src/jobs/__pycache__/team_vertex_job.cpython-311.pyc create mode 100644 bootcamp/materials/3-spark-fundamentals/src/tests/__pycache__/__init__.cpython-311.pyc create mode 100644 bootcamp/materials/3-spark-fundamentals/src/tests/__pycache__/conftest.cpython-311-pytest-7.4.4.pyc create mode 100644 bootcamp/materials/3-spark-fundamentals/src/tests/__pycache__/test_monthly_user_site_hits.cpython-311-pytest-7.4.4.pyc create mode 100644 bootcamp/materials/3-spark-fundamentals/src/tests/__pycache__/test_player_scd.cpython-311-pytest-7.4.4.pyc create mode 100644 bootcamp/materials/3-spark-fundamentals/src/tests/__pycache__/test_team_vertex_job.cpython-311-pytest-7.4.4.pyc diff --git a/bootcamp/materials/3-spark-fundamentals/homework/hw3.py b/bootcamp/materials/3-spark-fundamentals/homework/hw3.py new file mode 100644 index 00000000..304404a8 --- /dev/null +++ b/bootcamp/materials/3-spark-fundamentals/homework/hw3.py @@ -0,0 +1,283 @@ +from pyspark.sql.functions import broadcast, split, lit +from pyspark.sql.functions import col +from pyspark import StorageLevel +from pyspark.sql import SparkSession +spark = SparkSession.builder \ + .appName("IcebergTableManagement") \ + .config("spark.executor.memory", "4g") \ + .config("spark.driver.memory", "4g") \ + .config("spark.sql.shuffle.partitions", "200") \ + .config("spark.sql.files.maxPartitionBytes", "134217728") \ + .config("spark.sql.autoBroadcastJoinThreshold", "-1") \ + .config("spark.dynamicAllocation.enabled", "true") \ + .config("spark.dynamicAllocation.minExecutors", "1") \ + .config("spark.dynamicAllocation.maxExecutors", "50") \ + .getOrCreate() +df_medals = spark.read.option("header", "true").option("inferSchema", "true").csv("/home/iceberg/data/medals.csv") +# maps data frame reading +df_maps = spark.read.option("header", "true").option("inferSchema", "true").csv("/home/iceberg/data/maps.csv") +df_1 = df_medals.join(broadcast(df_maps), on="name", how="outer") +df_1.show(5) +match_details_df = spark.read.option("header", "true").option("inferSchema", "true").csv("/home/iceberg/data/match_details.csv") +matches_df = spark.read.option("header", "true").option("inferSchema", "true").csv("/home/iceberg/data/matches.csv") +medals_matches_players_df = spark.read.option("header", "true").option("inferSchema", "true").csv("/home/iceberg/data/medals_matches_players.csv") +spark.sql("""DROP TABLE IF EXISTS bootcamp.hw3_matches""") +matches_ddl = """ +CREATE TABLE IF NOT EXISTS bootcamp.hw3_matches( + match_id STRING, + mapid STRING, + is_team_game BOOLEAN, + playlist_id STRING, + game_variant_id STRING, + is_match_over BOOLEAN, + completion_date TIMESTAMP, + match_duration STRING, + game_mode STRING, + map_variant_id STRING +) +USING iceberg +CLUSTERED BY (match_id) INTO 16 BUCKETS +""" +spark.sql(matches_ddl) +matches_df.select("*") \ + .write \ + .format("iceberg") \ + .mode("append") \ + .bucketBy(16, "match_id") \ + .saveAsTable("bootcamp.hw3_matches") +spark.sql("""DROP TABLE IF EXISTS bootcamp.hw3_medals_matches_players""") +medals_matches_players_ddl = """ +CREATE TABLE IF NOT EXISTS bootcamp.hw3_medals_matches_players( + match_id STRING, + player_gamertag STRING, + medal_id BIGINT, + count INTEGER +) +USING iceberg +CLUSTERED BY (match_id) INTO 16 BUCKETS +""" +spark.sql(medals_matches_players_ddl) +medals_matches_players_df.select("*") \ + .write \ + .format("iceberg") \ + .mode("append") \ + .bucketBy(16, "match_id") \ + .saveAsTable("bootcamp.hw3_medals_matches_players") +spark.sql("""DROP TABLE IF EXISTS bootcamp.hw3_match_details""") +match_details_ddl = """ +CREATE TABLE IF NOT EXISTS bootcamp.hw3_match_details( + match_id STRING, + player_gamertag STRING, + spartan_rank INTEGER, + player_total_kills INTEGER +) +USING iceberg +CLUSTERED BY (match_id) INTO 16 BUCKETS +""" +spark.sql(match_details_ddl) +match_details_df.select("match_id", "player_gamertag", "spartan_rank", "player_total_kills") \ + .write \ + .format("iceberg") \ + .mode("append") \ + .bucketBy(16, "match_id") \ + .saveAsTable("bootcamp.hw3_match_details") +def get_columns_without_match_id(table_name, alias): + all_columns = spark.table(table_name).columns + return [f"{alias}.{col}" for col in all_columns if col != "match_id"] +matches_columns = get_columns_without_match_id("bootcamp.hw3_matches", "m") +match_details_columns = get_columns_without_match_id("bootcamp.hw3_match_details", "md") +medals_columns = get_columns_without_match_id("bootcamp.hw3_medals_matches_players", "mp") +joining_query = f""" +SELECT + COALESCE(m.match_id, md.match_id) AS match_id, + {', '.join(matches_columns)}, + {', '.join(match_details_columns)}, + mp.player_gamertag AS medal_player_gamertag, + mp.medal_id, + mp.count +FROM bootcamp.hw3_matches AS m +FULL OUTER JOIN bootcamp.hw3_match_details AS md + ON m.match_id = md.match_id +FULL OUTER JOIN bootcamp.hw3_medals_matches_players AS mp + ON COALESCE(m.match_id, md.match_id) = mp.match_id +""" +joined_table_df = spark.sql(joining_query) +joined_table_df.createOrReplaceTempView("joined_table") +q1 = """ +WITH deduplicated_table AS ( + SELECT DISTINCT + match_id, + player_gamertag, + player_total_kills + FROM + joined_table +), +player_match_kills AS ( + SELECT + player_gamertag, + match_id, + SUM(player_total_kills) AS total_kills_per_match + FROM + deduplicated_table + GROUP BY + player_gamertag, match_id +), +player_avg_kills AS ( + SELECT + player_gamertag, + AVG(total_kills_per_match) AS avg_kills_per_match + FROM + player_match_kills + GROUP BY + player_gamertag +) +SELECT + player_gamertag, + avg_kills_per_match +FROM + player_avg_kills +ORDER BY + avg_kills_per_match DESC +LIMIT 1; +""" +spark.sql(q1).show() +q2 = """ +WITH deduplicated_table AS ( + SELECT DISTINCT + match_id, + playlist_id + FROM + joined_table +) +SELECT + playlist_id, + COUNT(*) AS times_played +FROM + deduplicated_table +GROUP BY + playlist_id +ORDER BY + times_played DESC +LIMIT 1; +""" +spark.sql(q2).show(truncate=False) +q3 = """ +WITH deduplicated_table AS ( + SELECT DISTINCT + match_id, + mapid + FROM + joined_table +) +SELECT + mapid, + COUNT(*) AS times_played +FROM + deduplicated_table +GROUP BY + mapid +ORDER BY + times_played DESC +LIMIT 1; +""" +spark.sql(q3).show(truncate=False) +df_medals.createOrReplaceTempView("medals") +q4=""" + WITH deduplicated_table AS ( + SELECT DISTINCT + jt.match_id, + jt.mapid, + jt.medal_player_gamertag, + jt.medal_id, + jt.count + FROM + joined_table jt + JOIN + medals m + ON + jt.medal_id = m.medal_id + WHERE + m.classification = 'KillingSpree' + ) + SELECT + mapid, + SUM(count) AS total_medals + FROM + deduplicated_table + GROUP BY + mapid + ORDER BY + total_medals DESC + LIMIT 1 +""" +spark.sql(q4).show(truncate=False) +spark.sql( +"""CREATE TABLE IF NOT EXISTS bootcamp.hw3_joined_table ( + match_id STRING, + mapid STRING, + is_team_game BOOLEAN, + playlist_id STRING, + game_variant_id STRING, + is_match_over BOOLEAN, + completion_date TIMESTAMP, + match_duration STRING, + game_mode STRING, + map_variant_id STRING, + player_gamertag STRING, + spartan_rank INTEGER, + player_total_kills INTEGER, + medal_player_gamertag STRING, + medal_id BIGINT, + count INTEGER +) +USING iceberg + PARTITIONED BY (match_id); + """ +) +spark.sql( +"""CREATE TABLE IF NOT EXISTS bootcamp.hw3_sorted_1 ( + match_id STRING, + mapid STRING, + is_team_game BOOLEAN, + playlist_id STRING, + game_variant_id STRING, + is_match_over BOOLEAN, + completion_date TIMESTAMP, + match_duration STRING, + game_mode STRING, + map_variant_id STRING, + player_gamertag STRING, + spartan_rank INTEGER, + player_total_kills INTEGER, + medal_player_gamertag STRING, + medal_id BIGINT, + count INTEGER +) +USING iceberg + PARTITIONED BY (match_id); + """ +) +start_df = joined_table_df.repartition(4, col("match_id")) +sorted_df_1 = start_df.sortWithinPartitions(col("match_id"), col("player_gamertag"), col("mapid")) +sorted_df_2 = start_df.sortWithinPartitions(col("match_id"), col("playlist_id"), col("mapid")) +sorted_df_3 = start_df.sortWithinPartitions(col("match_id"), col("mapid"), col("medal_id")) +start_df.write.mode("overwrite").saveAsTable("bootcamp.hw3_joined_table") +sorted_df_1.write.mode("overwrite").saveAsTable("bootcamp.hw3_sorted_1") +sorted_df_2.write.mode("overwrite").saveAsTable("bootcamp.hw3_sorted_2") +sorted_df_3.write.mode("overwrite").saveAsTable("bootcamp.hw3_sorted_3") + +%%sql +SELECT SUM(file_size_in_bytes) as size, COUNT(1) as num_files, 'unsorted' +FROM bootcamp.hw3_joined_table.files # size 8696598 + +UNION ALL +SELECT SUM(file_size_in_bytes) as size, COUNT(1) as num_files, 'sorted_1' +FROM bootcamp.hw3_sorted_1.files # size 8706875 + +UNION ALL +SELECT SUM(file_size_in_bytes) as size, COUNT(1) as num_files, 'sorted_2' +FROM bootcamp.hw3_sorted_2.files # size 8711281 + +UNION ALL +SELECT SUM(file_size_in_bytes) as size, COUNT(1) as num_files, 'sorted_3' +FROM bootcamp.hw3_sorted_3.files # size 16967862 diff --git a/bootcamp/materials/3-spark-fundamentals/homework/hw3.zip b/bootcamp/materials/3-spark-fundamentals/homework/hw3.zip new file mode 100644 index 0000000000000000000000000000000000000000..3c92d4dda5be8b03adc419b635d35b2a411ee1ef GIT binary patch literal 2047 zcma)-c{~#iAICSxOvqGnmbA?oiVpnzhB=D;XmVs`IZ7;JZZ>PnnOp9=oJ*EtC6!U3 zIa|UWIUdK5Mk0me>Z#}T{9e!V=kxizzQ^nJ{k&e^Ki_DSpwJ-z_?NN7WDMXxnmPsm zfB?q;KH+-W0VGEU34lm?3dZ~I3XKp00EPI10KmW7XUure_*uwJ?Uw>xDpz$Y1~cZc zg{v`yp|k^-uNNE!ZO3`9U}|Oa9GF)ZXKsoGh>(GgCryNnEh_Jint06emJz!ZQvS+} zhf|#4TPN4!IG9Z*q@b}SS1d-&G|%pqpIDcb7`qI`liYzCd|$*wVKaI=RjnXAIk`Iu zGumx)NP;_ZMiv4uqdLoRwPm7R%VVOmjU!x8^y;ZTB81^*E!T zRC;rNiTb0HR)~YX!2S56tI>R0e`S()ll4d%UxJjcb`^G4N3jboFAmGL?+7uhcdNG# zsz!NoI_~M{)>g1$12|#f_lG8@Rumr&bwN0Gxy@5nM`$&T@{ zIV!FIle(FLtjjeQ`x;=8zD2fXeA$+&*$lP_efs(zDXo4%Sg0g`@- zRFR3T5Ia8KYO(*B9$^uK0}4KXy4OiG1?_8`Qtr2YVVlD}@+3~+CmNI{I^7>LZf4*N zn@%#hwI%MKgLC{E;K{Kmg5@_e@qhFyTJ|{0ODaKWsrXEV58Q%+&+pjbFfvt1zLu{2 zf#ICt_2ZgRvx()3Pie)T`XFubVv1<9c=YS`E7cq#OAg$ftJaA7q7+{_%be6(6Y$X2 z9WGO&WF#)36>L%hX%WNLA{}GkR8FjWe=*Y{;IzEN+9di-!!1{N)lhL2{N!|kCk>xQ zr{n`e-fI*~N0gyt2UOmjzcXO`Ue$7Cr`$2<{T1_;$P)@{0!3Ui%m(sO)q>Do`Dy#X zRd>TvYfNf%8r9OeGcjq)>}u>-B;SX;V|q^IK*jTJjJoiL%wf-&1DbYomn}3|scJ%5 z2z^tbLG*=ovNF5n^0kqX1fonup4g`(*!ghlNXcHU;JWQW!rwPlT4zNojF`v z&5~yDSG`8SjdYDTA)Pk0w#PRLl^!S_ z;TYNtbCanKOX@|TRe#YsG~7*LBj=z?ZeFB%AGoQ2SC9ox-@+&m$L(;N^!ldJeGt^c zi0g>&waYfQe)03OqeBluQ9B`Ky5V}eusiPulZ47LP&9fYZf_-<(DN3q6^l!{x_;hY zkmXO$CbqjaRRXb$JJa$~R);gvseyAkihRa~F#TmOINDnVV!pdiBXpDh{dN_Y)>jnj z5m~#a`8bG+xUtz+_2SlmA0Tn*MAdmTruX zy}dc%#AeIxYsot5a<}EhkiuZ=2i9wwnh|U4*AO4Idh-E09bcue#Nv2)2EB60Cg+*% z47t-#{c6DadO=l(y$@b!^AkdZwsUq%fBsqTP@sy@NOtY=zNVz72AT>D`QEkRAMcdu zc6<+F<+|CrmY;c7+#ma)DKE8dGCZ$Rp36oQOE?TUUxasm3?^(p1k;ItRthAn&+$rw zjV`S_4$&I(_@-mm&Y_@fA)WF+zFdaoT8mfOr9L! zE9?$5P{(if-N*03opDP26C#WRE}rT_AZ6FEN$S(vt`jWYAI`3 zmY_-|?_$7%D(c>m6HYgJ)m?T=5(}}S&qW;`4g3Hp;GfsBSNs$1d3s&M*9b*`y4;p4 zb%@Tw-@GxnZ=Uop4^6vPpmS5Srb!7W%22v=dENvE$h`6*HZA+e)<|04i;BWiyD|CP zb2_7{4$?eXW`+}aAK{x6jaRT!;Vb5+MTvSIhwku=)-9R&LyO!79B7*?YMnSIGG#Rw z0!9h1gJOsq@YzU4TNa^ip1t>}HD-6hJD~h=XQJ&yVi+s<9TlY7>|4xtD)BKxY)Ebx zPFc|e&?pfwvc2xPsR#h@8@*^0P~ec@f3f_(x8GR)Ta8h_xBm~)Xp}JMcN+N14!>s3 JuU`PbzW~Xy#+d*B literal 0 HcmV?d00001 diff --git a/bootcamp/materials/3-spark-fundamentals/notebooks/homework.ipynb b/bootcamp/materials/3-spark-fundamentals/notebooks/homework.ipynb new file mode 100644 index 00000000..e4354c75 --- /dev/null +++ b/bootcamp/materials/3-spark-fundamentals/notebooks/homework.ipynb @@ -0,0 +1,1666 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "b7c7b347-c9ec-4d71-bbe0-d195d9988826", + "metadata": {}, + "outputs": [], + "source": [ + "from pyspark.sql.functions import broadcast, split, lit\n", + "from pyspark.sql.functions import col\n", + "from pyspark import StorageLevel\n", + "from pyspark.sql import SparkSession" + ] + }, + { + "cell_type": "markdown", + "id": "7311e586-7148-400d-86b7-e8620561d092", + "metadata": {}, + "source": [ + "**Question 1:** Disable automatic broadcast join" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a32eba64-7dda-4f38-8dda-878eb5ca940a", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "24/12/10 13:23:11 WARN SparkSession: Using an existing Spark session; only runtime SQL configurations will take effect.\n" + ] + } + ], + "source": [ + "spark = SparkSession.builder \\\n", + " .appName(\"IcebergTableManagement\") \\\n", + " .config(\"spark.executor.memory\", \"4g\") \\\n", + " .config(\"spark.driver.memory\", \"4g\") \\\n", + " .config(\"spark.sql.shuffle.partitions\", \"200\") \\\n", + " .config(\"spark.sql.files.maxPartitionBytes\", \"134217728\") \\\n", + " .config(\"spark.sql.autoBroadcastJoinThreshold\", \"-1\") \\\n", + " .config(\"spark.dynamicAllocation.enabled\", \"true\") \\\n", + " .config(\"spark.dynamicAllocation.minExecutors\", \"1\") \\\n", + " .config(\"spark.dynamicAllocation.maxExecutors\", \"50\") \\\n", + " .getOrCreate()" + ] + }, + { + "cell_type": "markdown", + "id": "df43c041-b100-41f7-acbd-5044dff86d2c", + "metadata": {}, + "source": [ + "**Question 2:** Explicitly broadcast JOINs `medals` and `maps`" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "d9c85f74-07da-42e8-8be3-e3e5e81977b8", + "metadata": {}, + "outputs": [], + "source": [ + "df_medals = spark.read.option(\"header\", \"true\").option(\"inferSchema\", \"true\").csv(\"/home/iceberg/data/medals.csv\")\n", + "df_maps = spark.read.option(\"header\", \"true\").option(\"inferSchema\", \"true\").csv(\"/home/iceberg/data/maps.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "1c22e496-e9a8-49b9-8e32-8b3a3ac3b811", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+----------+--------------------+-----------+----------+------------------+-------------------+------------+-------------+--------------+--------------------+--------------+----------+\n", + "| medal_id| sprite_uri|sprite_left|sprite_top|sprite_sheet_width|sprite_sheet_height|sprite_width|sprite_height|classification| description| name|difficulty|\n", + "+----------+--------------------+-----------+----------+------------------+-------------------+------------+-------------+--------------+--------------------+--------------+----------+\n", + "|2315448068| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL|\n", + "|3565441934| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL|\n", + "|4162659350|https://content.h...| 750| 750| 74| 74| 1125| 899| Breakout|Kill the last ene...| Buzzer Beater| 45|\n", + "|1573153198|https://content.h...| 0| 300| 74| 74| 1125| 899| Breakout|Survive a one-on-...| Vanquisher| 30|\n", + "| 298813630|https://content.h...| 0| 825| 74| 74| 1125| 899| Style|Kill an enemy wit...|Spartan Charge| 135|\n", + "+----------+--------------------+-----------+----------+------------------+-------------------+------------+-------------+--------------+--------------------+--------------+----------+\n", + "only showing top 5 rows\n", + "\n" + ] + } + ], + "source": [ + "df_medals.show(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "33a8e85c-0d49-436d-894d-4cee6e1513c9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "root\n", + " |-- medal_id: long (nullable = true)\n", + " |-- sprite_uri: string (nullable = true)\n", + " |-- sprite_left: integer (nullable = true)\n", + " |-- sprite_top: integer (nullable = true)\n", + " |-- sprite_sheet_width: integer (nullable = true)\n", + " |-- sprite_sheet_height: integer (nullable = true)\n", + " |-- sprite_width: integer (nullable = true)\n", + " |-- sprite_height: integer (nullable = true)\n", + " |-- classification: string (nullable = true)\n", + " |-- description: string (nullable = true)\n", + " |-- name: string (nullable = true)\n", + " |-- difficulty: integer (nullable = true)\n", + "\n" + ] + } + ], + "source": [ + "df_medals.printSchema()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "b9a474cd-661a-4258-bcf4-1f759d0b4daf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "183" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_medals.count()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "7253e85d-bb62-414f-ba70-d6b3202cb713", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+-------------------+--------------------+\n", + "| mapid| name| description|\n", + "+--------------------+-------------------+--------------------+\n", + "|c93d708f-f206-11e...| Urban|Andesia was the c...|\n", + "|cb251c51-f206-11e...| Raid on Apex 7|This unbroken rin...|\n", + "|c854e54f-f206-11e...|March on Stormbreak| NULL|\n", + "|c8d69870-f206-11e...| Escape from A.R.C.|Scientists flocke...|\n", + "|73ed1fd0-45e5-4bb...| Osiris| NULL|\n", + "+--------------------+-------------------+--------------------+\n", + "only showing top 5 rows\n", + "\n" + ] + } + ], + "source": [ + "df_maps.show(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "8b60a0f9-54d1-4051-978b-7fb7ae18e5d4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "root\n", + " |-- mapid: string (nullable = true)\n", + " |-- name: string (nullable = true)\n", + " |-- description: string (nullable = true)\n", + "\n" + ] + } + ], + "source": [ + "df_maps.printSchema()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "b04e0c70-8159-46bd-8a93-dfe4bbc9ac21", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "40" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_maps.count()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "c5029bab-f1da-4c49-ba2c-401418e8182a", + "metadata": {}, + "outputs": [], + "source": [ + "# df_maps.select(\"name\").distinct().show()\n", + "# df_medals.select(\"name\").distinct().show()\n", + "# common_names = df_maps.select(\"name\").distinct().intersect(df_medals.select(\"name\").distinct())\n", + "# common_names.show()\n", + "# common_descriptions = df_maps.select(\"description\").distinct().intersect(df_medals.select(\"description\").distinct())\n", + "# common_descriptions.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "0aa394bd-b2a9-41f7-8e78-b66cb89afe82", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "24/12/09 16:57:19 WARN HintErrorLogger: Hint (strategy=broadcast) is not supported in the query: build right for full outer join.\n", + "24/12/09 16:57:19 WARN HintErrorLogger: Hint (strategy=broadcast) is not supported in the query: build right for full outer join.\n", + "24/12/09 16:57:19 WARN HintErrorLogger: Hint (strategy=broadcast) is not supported in the query: build right for full outer join.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+----+----------+----------+-----------+----------+------------------+-------------------+------------+-------------+--------------+-----------+----------+--------------------+-----------+\n", + "|name| medal_id|sprite_uri|sprite_left|sprite_top|sprite_sheet_width|sprite_sheet_height|sprite_width|sprite_height|classification|description|difficulty| mapid|description|\n", + "+----+----------+----------+-----------+----------+------------------+-------------------+------------+-------------+--------------+-----------+----------+--------------------+-----------+\n", + "|NULL|2315448068| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL|\n", + "|NULL|3565441934| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL|\n", + "|NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL|cc74f4e1-f206-11e...| NULL|\n", + "|NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL|ce89a40f-f206-11e...| NULL|\n", + "|NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL| NULL|5e130537-2275-40b...| NULL|\n", + "+----+----------+----------+-----------+----------+------------------+-------------------+------------+-------------+--------------+-----------+----------+--------------------+-----------+\n", + "only showing top 5 rows\n", + "\n" + ] + } + ], + "source": [ + "df_1 = df_medals.join(broadcast(df_maps), on=\"name\", how=\"outer\")\n", + "df_1.show(5)" + ] + }, + { + "cell_type": "markdown", + "id": "8bd09782-7a97-44e3-9e02-a05b8c9cc9d6", + "metadata": {}, + "source": [ + "**Question 3:** Bucket join `match_details`, `matches`, and `medal_matches_players` on `match_id` with `16` buckets" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "5baeb68a-2f27-446a-8415-a0febeb6cf4a", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "match_details_df = spark.read.option(\"header\", \"true\").option(\"inferSchema\", \"true\").csv(\"/home/iceberg/data/match_details.csv\")\n", + "matches_df = spark.read.option(\"header\", \"true\").option(\"inferSchema\", \"true\").csv(\"/home/iceberg/data/matches.csv\")\n", + "medals_matches_players_df = spark.read.option(\"header\", \"true\").option(\"inferSchema\", \"true\").csv(\"/home/iceberg/data/medals_matches_players.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "7a8fc954-0325-41dd-b8f3-b6ce6d089d4d", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "root\n", + " |-- match_id: string (nullable = true)\n", + " |-- player_gamertag: string (nullable = true)\n", + " |-- previous_spartan_rank: integer (nullable = true)\n", + " |-- spartan_rank: integer (nullable = true)\n", + " |-- previous_total_xp: integer (nullable = true)\n", + " |-- total_xp: integer (nullable = true)\n", + " |-- previous_csr_tier: integer (nullable = true)\n", + " |-- previous_csr_designation: integer (nullable = true)\n", + " |-- previous_csr: integer (nullable = true)\n", + " |-- previous_csr_percent_to_next_tier: integer (nullable = true)\n", + " |-- previous_csr_rank: integer (nullable = true)\n", + " |-- current_csr_tier: integer (nullable = true)\n", + " |-- current_csr_designation: integer (nullable = true)\n", + " |-- current_csr: integer (nullable = true)\n", + " |-- current_csr_percent_to_next_tier: integer (nullable = true)\n", + " |-- current_csr_rank: integer (nullable = true)\n", + " |-- player_rank_on_team: integer (nullable = true)\n", + " |-- player_finished: boolean (nullable = true)\n", + " |-- player_average_life: string (nullable = true)\n", + " |-- player_total_kills: integer (nullable = true)\n", + " |-- player_total_headshots: integer (nullable = true)\n", + " |-- player_total_weapon_damage: double (nullable = true)\n", + " |-- player_total_shots_landed: integer (nullable = true)\n", + " |-- player_total_melee_kills: integer (nullable = true)\n", + " |-- player_total_melee_damage: double (nullable = true)\n", + " |-- player_total_assassinations: integer (nullable = true)\n", + " |-- player_total_ground_pound_kills: integer (nullable = true)\n", + " |-- player_total_shoulder_bash_kills: integer (nullable = true)\n", + " |-- player_total_grenade_damage: double (nullable = true)\n", + " |-- player_total_power_weapon_damage: double (nullable = true)\n", + " |-- player_total_power_weapon_grabs: integer (nullable = true)\n", + " |-- player_total_deaths: integer (nullable = true)\n", + " |-- player_total_assists: integer (nullable = true)\n", + " |-- player_total_grenade_kills: integer (nullable = true)\n", + " |-- did_win: integer (nullable = true)\n", + " |-- team_id: integer (nullable = true)\n", + "\n" + ] + } + ], + "source": [ + "match_details_df.printSchema()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "df75e122-8531-49b9-a331-19a49d051e8b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "root\n", + " |-- match_id: string (nullable = true)\n", + " |-- mapid: string (nullable = true)\n", + " |-- is_team_game: boolean (nullable = true)\n", + " |-- playlist_id: string (nullable = true)\n", + " |-- game_variant_id: string (nullable = true)\n", + " |-- is_match_over: boolean (nullable = true)\n", + " |-- completion_date: timestamp (nullable = true)\n", + " |-- match_duration: string (nullable = true)\n", + " |-- game_mode: string (nullable = true)\n", + " |-- map_variant_id: string (nullable = true)\n", + "\n" + ] + } + ], + "source": [ + "matches_df.printSchema()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "98725e25-5735-4d37-851f-2fe13ceb740f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "root\n", + " |-- match_id: string (nullable = true)\n", + " |-- player_gamertag: string (nullable = true)\n", + " |-- medal_id: long (nullable = true)\n", + " |-- count: integer (nullable = true)\n", + "\n" + ] + } + ], + "source": [ + "medals_matches_players_df.printSchema()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e734e379-1697-4b70-989d-f23e5014dbef", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "4a21a6bb-8df5-4664-b116-0d7cf91bd28c", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "spark.sql(\"\"\"DROP TABLE IF EXISTS bootcamp.hw3_matches\"\"\")\n", + "matches_ddl = \"\"\"\n", + "CREATE TABLE IF NOT EXISTS bootcamp.hw3_matches(\n", + " match_id STRING,\n", + " mapid STRING,\n", + " is_team_game BOOLEAN,\n", + " playlist_id STRING,\n", + " game_variant_id STRING,\n", + " is_match_over BOOLEAN,\n", + " completion_date TIMESTAMP,\n", + " match_duration STRING,\n", + " game_mode STRING,\n", + " map_variant_id STRING\n", + ")\n", + "USING iceberg\n", + "CLUSTERED BY (match_id) INTO 16 BUCKETS\n", + "\"\"\"\n", + "spark.sql(matches_ddl)\n", + "matches_df.select(\"*\") \\\n", + " .write \\\n", + " .format(\"iceberg\") \\\n", + " .mode(\"append\") \\\n", + " .bucketBy(16, \"match_id\") \\\n", + " .saveAsTable(\"bootcamp.hw3_matches\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "e2940444-6806-4290-9c2d-4049aa0b868e", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "spark.sql(\"\"\"DROP TABLE IF EXISTS bootcamp.hw3_medals_matches_players\"\"\")\n", + "medals_matches_players_ddl = \"\"\"\n", + "CREATE TABLE IF NOT EXISTS bootcamp.hw3_medals_matches_players(\n", + " match_id STRING,\n", + " player_gamertag STRING,\n", + " medal_id BIGINT,\n", + " count INTEGER\n", + ")\n", + "USING iceberg\n", + "CLUSTERED BY (match_id) INTO 16 BUCKETS\n", + "\"\"\"\n", + "spark.sql(medals_matches_players_ddl)\n", + "medals_matches_players_df.select(\"*\") \\\n", + " .write \\\n", + " .format(\"iceberg\") \\\n", + " .mode(\"append\") \\\n", + " .bucketBy(16, \"match_id\") \\\n", + " .saveAsTable(\"bootcamp.hw3_medals_matches_players\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "0d70a998-f585-48f7-b8d8-abde338d7111", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "spark.sql(\"\"\"DROP TABLE IF EXISTS bootcamp.hw3_match_details\"\"\")\n", + "match_details_ddl = \"\"\"\n", + "CREATE TABLE IF NOT EXISTS bootcamp.hw3_matche_details(\n", + " match_id STRING,\n", + " player_gamertag STRING,\n", + " spartan_rank INTEGER,\n", + " player_total_kills INTEGER\n", + ")\n", + "USING iceberg\n", + "CLUSTERED BY (match_id) INTO 16 BUCKETS\n", + "\"\"\"\n", + "spark.sql(match_details_ddl)\n", + "match_details_df.select(\"match_id\", \"player_gamertag\", \"spartan_rank\", \"player_total_kills\") \\\n", + " .write \\\n", + " .format(\"iceberg\") \\\n", + " .mode(\"append\") \\\n", + " .bucketBy(16, \"match_id\") \\\n", + " .saveAsTable(\"bootcamp.hw3_match_details\")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "e906851d-f647-4ef7-b124-00de0137bfdb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+---------------+----------+-----+\n", + "| match_id|player_gamertag| medal_id|count|\n", + "+--------------------+---------------+----------+-----+\n", + "|27d7c16b-b780-4f8...| EcZachly| 824733727| 1|\n", + "|27d7c16b-b780-4f8...| EcZachly|3261908037| 5|\n", + "|27d7c16b-b780-4f8...| EcZachly|2078758684| 1|\n", + "|27d7c16b-b780-4f8...| EcZachly|1573153198| 1|\n", + "|27d7c16b-b780-4f8...| EcZachly|2782465081| 1|\n", + "|27d7c16b-b780-4f8...| EcZachly|2287626681| 1|\n", + "|e39c1eac-a39b-4e0...| EcZachly| 250435527| 1|\n", + "|e39c1eac-a39b-4e0...| EcZachly|3261908037| 2|\n", + "|e39c1eac-a39b-4e0...| EcZachly|3400287617| 1|\n", + "|6128f58a-e42e-472...| EcZachly|3261908037| 8|\n", + "+--------------------+---------------+----------+-----+\n", + "only showing top 10 rows\n", + "\n" + ] + } + ], + "source": [ + "spark.sql(\"SELECT * FROM bootcamp.hw3_medals_matches_players\").show(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "60377b2a-18a1-40c2-8709-7941f973aaaa", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+--------------------+------------+--------------------+--------------------+-------------+-------------------+--------------+---------+--------------------+\n", + "| match_id| mapid|is_team_game| playlist_id| game_variant_id|is_match_over| completion_date|match_duration|game_mode| map_variant_id|\n", + "+--------------------+--------------------+------------+--------------------+--------------------+-------------+-------------------+--------------+---------+--------------------+\n", + "|f44c9997-eb6f-4d6...|ce1dc2de-f206-11e...| true|0504ca3c-de41-48f...|b0df8938-0fb6-42e...| true|2016-02-28 00:00:00| NULL| NULL|d5a6277a-96d5-499...|\n", + "|f0f2daf2-52f3-4ff...|cbcea2c0-f206-11e...| NULL|2323b76a-db98-4e0...|257a305e-4dd3-41f...| NULL|2016-02-04 00:00:00| NULL| NULL|7108c409-6d1e-41d...|\n", + "|8aec419e-2bfa-4fc...|c7edbf0f-f206-11e...| true|f72e0ef0-7c4a-430...|1e473914-46e4-408...| true|2016-01-07 00:00:00| NULL| NULL|ec3eef73-13e3-4d4...|\n", + "|c6f24b65-bb73-489...|cebd854f-f206-11e...| NULL|c98949ae-60a8-43d...|1e473914-46e4-408...| NULL|2016-01-26 00:00:00| NULL| NULL|7859337f-286d-4ee...|\n", + "|a868eb4e-8b58-4e6...|c7805740-f206-11e...| true|f72e0ef0-7c4a-430...|1e473914-46e4-408...| true|2016-02-02 00:00:00| NULL| NULL| NULL|\n", + "+--------------------+--------------------+------------+--------------------+--------------------+-------------+-------------------+--------------+---------+--------------------+\n", + "only showing top 5 rows\n", + "\n" + ] + } + ], + "source": [ + "spark.sql(\"SELECT * FROM bootcamp.hw3_matches\").show(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "c961d29c-b6bf-4fa6-9011-8d0d7ca556bb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+---------------+------------+------------------+\n", + "| match_id|player_gamertag|spartan_rank|player_total_kills|\n", + "+--------------------+---------------+------------+------------------+\n", + "|f8852913-2ccf-46f...| OneWingKing| 122| 7|\n", + "|155cfd23-4f97-4f1...| BigChubSmith| 8| 15|\n", + "|155cfd23-4f97-4f1...| JakeWilson801| 18| 18|\n", + "|155cfd23-4f97-4f1...| taterbase| 5| 1|\n", + "|155cfd23-4f97-4f1...| BeyondHumanx39| 24| 13|\n", + "+--------------------+---------------+------------+------------------+\n", + "only showing top 5 rows\n", + "\n" + ] + } + ], + "source": [ + "spark.sql(\"SELECT * FROM bootcamp.hw3_match_details\").show(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "aa3d6f86-1682-4982-903c-005617d43ba7", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "data": { + "text/plain": [ + "19050" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "match_details_df.select(\"match_id\").distinct().count()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "c79090b3-f0ee-4705-9da4-f65bd421736b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "24025" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "matches_df.select(\"match_id\").distinct().count()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "18411c67-1793-4ea0-a1e9-9ad7819a72e6", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "data": { + "text/plain": [ + "18942" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "medals_matches_players_df.select(\"match_id\").distinct().count()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "376c3499-2a86-48eb-b0b2-bea5a8805ac6", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Stage 36:==============> (1 + 3) / 4]\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+------------------------+\n", + "|count(DISTINCT match_id)|\n", + "+------------------------+\n", + "| 18942|\n", + "+------------------------+\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "spark.sql(\"SELECT count( distinct match_id) FROM bootcamp.hw3_medals_matches_players\").show()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "8a406a33-40b9-4c14-8ee9-ec8ed0bd1491", + "metadata": {}, + "outputs": [], + "source": [ + "def get_columns_without_match_id(table_name, alias):\n", + " all_columns = spark.table(table_name).columns\n", + " return [f\"{alias}.{col}\" for col in all_columns if col != \"match_id\"]\n", + "matches_columns = get_columns_without_match_id(\"bootcamp.hw3_matches\", \"m\")\n", + "match_details_columns = get_columns_without_match_id(\"bootcamp.hw3_match_details\", \"md\")\n", + "medals_columns = get_columns_without_match_id(\"bootcamp.hw3_medals_matches_players\", \"mp\") " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "1b7ee3f3-86fd-4bd1-a65b-e4777d5a7323", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "joining_query = f\"\"\"\n", + "SELECT\n", + " COALESCE(m.match_id, md.match_id) AS match_id,\n", + " {', '.join(matches_columns)}, \n", + " {', '.join(match_details_columns)}, \n", + " mp.player_gamertag AS medal_player_gamertag,\n", + " mp.medal_id,\n", + " mp.count\n", + "FROM bootcamp.hw3_matches AS m\n", + "FULL OUTER JOIN bootcamp.hw3_match_details AS md\n", + " ON m.match_id = md.match_id\n", + "FULL OUTER JOIN bootcamp.hw3_medals_matches_players AS mp\n", + " ON COALESCE(m.match_id, md.match_id) = mp.match_id\n", + "\"\"\"\n", + "joined_table_df = spark.sql(joining_query)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "46230276-9b90-4c8e-9170-4e3ac5cc788c", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " match_id \\\n", + "0 0012f42d-dfbc-44e8-ab2b-49b854a015d1 \n", + "1 00169217-cca6-4b47-8df0-559ee424143f \n", + "2 00169217-cca6-4b47-8df0-559ee424143f \n", + "3 00169217-cca6-4b47-8df0-559ee424143f \n", + "4 00169217-cca6-4b47-8df0-559ee424143f \n", + ".. ... \n", + "95 00169217-cca6-4b47-8df0-559ee424143f \n", + "96 00169217-cca6-4b47-8df0-559ee424143f \n", + "97 00169217-cca6-4b47-8df0-559ee424143f \n", + "98 00169217-cca6-4b47-8df0-559ee424143f \n", + "99 00169217-cca6-4b47-8df0-559ee424143f \n", + "\n", + " mapid is_team_game \\\n", + "0 cebd854f-f206-11e4-b46e-24be05e24f7e True \n", + "1 cc040aa1-f206-11e4-a3e0-24be05e24f7e True \n", + "2 cc040aa1-f206-11e4-a3e0-24be05e24f7e True \n", + "3 cc040aa1-f206-11e4-a3e0-24be05e24f7e True \n", + "4 cc040aa1-f206-11e4-a3e0-24be05e24f7e True \n", + ".. ... ... \n", + "95 cc040aa1-f206-11e4-a3e0-24be05e24f7e True \n", + "96 cc040aa1-f206-11e4-a3e0-24be05e24f7e True \n", + "97 cc040aa1-f206-11e4-a3e0-24be05e24f7e True \n", + "98 cc040aa1-f206-11e4-a3e0-24be05e24f7e True \n", + "99 cc040aa1-f206-11e4-a3e0-24be05e24f7e True \n", + "\n", + " playlist_id \\\n", + "0 892189e9-d712-4bdb-afa7-1ccab43fbed4 \n", + "1 2323b76a-db98-4e03-aa37-e171cfbdd1a4 \n", + "2 2323b76a-db98-4e03-aa37-e171cfbdd1a4 \n", + "3 2323b76a-db98-4e03-aa37-e171cfbdd1a4 \n", + "4 2323b76a-db98-4e03-aa37-e171cfbdd1a4 \n", + ".. ... \n", + "95 2323b76a-db98-4e03-aa37-e171cfbdd1a4 \n", + "96 2323b76a-db98-4e03-aa37-e171cfbdd1a4 \n", + "97 2323b76a-db98-4e03-aa37-e171cfbdd1a4 \n", + "98 2323b76a-db98-4e03-aa37-e171cfbdd1a4 \n", + "99 2323b76a-db98-4e03-aa37-e171cfbdd1a4 \n", + "\n", + " game_variant_id is_match_over completion_date \\\n", + "0 257a305e-4dd3-41f1-9824-dfe7e8bd59e1 True 2016-01-26 \n", + "1 257a305e-4dd3-41f1-9824-dfe7e8bd59e1 True 2016-03-13 \n", + "2 257a305e-4dd3-41f1-9824-dfe7e8bd59e1 True 2016-03-13 \n", + "3 257a305e-4dd3-41f1-9824-dfe7e8bd59e1 True 2016-03-13 \n", + "4 257a305e-4dd3-41f1-9824-dfe7e8bd59e1 True 2016-03-13 \n", + ".. ... ... ... \n", + "95 257a305e-4dd3-41f1-9824-dfe7e8bd59e1 True 2016-03-13 \n", + "96 257a305e-4dd3-41f1-9824-dfe7e8bd59e1 True 2016-03-13 \n", + "97 257a305e-4dd3-41f1-9824-dfe7e8bd59e1 True 2016-03-13 \n", + "98 257a305e-4dd3-41f1-9824-dfe7e8bd59e1 True 2016-03-13 \n", + "99 257a305e-4dd3-41f1-9824-dfe7e8bd59e1 True 2016-03-13 \n", + "\n", + " match_duration game_mode map_variant_id \\\n", + "0 None None 0f8526a7-4a95-4e8d-bec1-9eefe238cc22 \n", + "1 None None None \n", + "2 None None None \n", + "3 None None None \n", + "4 None None None \n", + ".. ... ... ... \n", + "95 None None None \n", + "96 None None None \n", + "97 None None None \n", + "98 None None None \n", + "99 None None None \n", + "\n", + " player_gamertag spartan_rank player_total_kills medal_player_gamertag \\\n", + "0 None NaN NaN None \n", + "1 King Terror V 68.0 14.0 King Terror V \n", + "2 King Terror V 68.0 14.0 King Terror V \n", + "3 King Terror V 68.0 14.0 King Terror V \n", + "4 King Terror V 68.0 14.0 King Terror V \n", + ".. ... ... ... ... \n", + "95 EXTREMENOVA 127.0 8.0 King Terror V \n", + "96 EXTREMENOVA 127.0 8.0 King Terror V \n", + "97 EXTREMENOVA 127.0 8.0 King Terror V \n", + "98 EXTREMENOVA 127.0 8.0 King Terror V \n", + "99 EXTREMENOVA 127.0 8.0 King Terror V \n", + "\n", + " medal_id count \n", + "0 NaN NaN \n", + "1 3.261908e+09 11.0 \n", + "2 3.001183e+09 1.0 \n", + "3 8.247337e+08 3.0 \n", + "4 2.078759e+09 3.0 \n", + ".. ... ... \n", + "95 3.001183e+09 1.0 \n", + "96 8.247337e+08 3.0 \n", + "97 2.078759e+09 3.0 \n", + "98 2.430243e+09 1.0 \n", + "99 4.660594e+08 1.0 \n", + "\n", + "[100 rows x 16 columns]\n" + ] + } + ], + "source": [ + "subset_df = joined_table_df.limit(100) \n", + "subset_pdf = subset_df.toPandas()\n", + "print(subset_pdf)" + ] + }, + { + "cell_type": "markdown", + "id": "c12229fc-23ef-40a5-9b9a-9b0473c9fbf4", + "metadata": {}, + "source": [ + "**Question4** Aggregate the joined data frame.
\n", + "**Q4.1** Which player averages the most kills per game?" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "032ec425-00d0-4db1-800a-8529c6dd0ca2", + "metadata": {}, + "outputs": [], + "source": [ + "joined_table_df.createOrReplaceTempView(\"joined_table\")" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "49c8e91e-cfc0-4292-96be-8730bf186363", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Stage 109:=======> (1 + 7) / 8]\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+---------------+-------------------+\n", + "|player_gamertag|avg_kills_per_match|\n", + "+---------------+-------------------+\n", + "| gimpinator14| 109.0|\n", + "+---------------+-------------------+\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "q1 = \"\"\" \n", + "WITH deduplicated_table AS (\n", + " SELECT DISTINCT \n", + " match_id, \n", + " player_gamertag, \n", + " player_total_kills\n", + " FROM \n", + " joined_table\n", + "),\n", + "player_match_kills AS (\n", + " SELECT \n", + " player_gamertag,\n", + " match_id,\n", + " SUM(player_total_kills) AS total_kills_per_match\n", + " FROM \n", + " deduplicated_table\n", + " GROUP BY \n", + " player_gamertag, match_id\n", + "),\n", + "player_avg_kills AS (\n", + " SELECT \n", + " player_gamertag,\n", + " AVG(total_kills_per_match) AS avg_kills_per_match\n", + " FROM \n", + " player_match_kills\n", + " GROUP BY \n", + " player_gamertag\n", + ")\n", + "SELECT \n", + " player_gamertag,\n", + " avg_kills_per_match\n", + "FROM \n", + " player_avg_kills\n", + "ORDER BY \n", + " avg_kills_per_match DESC\n", + "LIMIT 1;\n", + "\"\"\"\n", + "spark.sql(q1).show()" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "d35297a5-5715-4bc4-bab6-c18fbe0f7adb", + "metadata": {}, + "outputs": [], + "source": [ + "# spark.sql(\"\"\"select match_id, player_total_kills, medal_player_gamertag, medal_id,count from joined_table where player_gamertag == 'gimpinator14' \"\"\").show(truncate=False)" + ] + }, + { + "cell_type": "markdown", + "id": "7f662f21-eac1-49b9-b672-57566b845386", + "metadata": {}, + "source": [ + "**Q4.2** Which playlist gets played the most?" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "82468f5e-0ca3-49b7-81d6-9293c69018a9", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Stage 292:============================> (1 + 1) / 2]\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+------------------------------------+------------+\n", + "|playlist_id |times_played|\n", + "+------------------------------------+------------+\n", + "|f72e0ef0-7c4a-4307-af78-8e38dac3fdba|9350 |\n", + "+------------------------------------+------------+\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "q2 = \"\"\"\n", + "WITH deduplicated_table AS (\n", + " SELECT DISTINCT \n", + " match_id, \n", + " playlist_id\n", + " FROM \n", + " joined_table\n", + ")\n", + "SELECT \n", + " playlist_id,\n", + " COUNT(*) AS times_played\n", + "FROM \n", + " deduplicated_table\n", + "GROUP BY \n", + " playlist_id\n", + "ORDER BY \n", + " times_played DESC\n", + "LIMIT 1;\n", + "\"\"\"\n", + "spark.sql(q2).show(truncate=False)" + ] + }, + { + "cell_type": "markdown", + "id": "7b0f8d07-e391-44e4-bf2b-14b97afd8aa9", + "metadata": {}, + "source": [ + "**Q4.3** Which map gets played the most?" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "92fb3b0b-0acf-4730-95cf-9b3197bc5315", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Stage 316:============================> (1 + 1) / 2]\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+------------------------------------+------------+\n", + "|mapid |times_played|\n", + "+------------------------------------+------------+\n", + "|c7edbf0f-f206-11e4-aa52-24be05e24f7e|8587 |\n", + "+------------------------------------+------------+\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "q3 = \"\"\"\n", + "WITH deduplicated_table AS (\n", + " SELECT DISTINCT \n", + " match_id, \n", + " mapid\n", + " FROM \n", + " joined_table\n", + ")\n", + "SELECT \n", + " mapid,\n", + " COUNT(*) AS times_played\n", + "FROM \n", + " deduplicated_table\n", + "GROUP BY \n", + " mapid\n", + "ORDER BY \n", + " times_played DESC\n", + "LIMIT 1;\n", + "\"\"\"\n", + "spark.sql(q3).show(truncate=False)" + ] + }, + { + "cell_type": "markdown", + "id": "b4a7db98-2fee-4b50-b69f-f634c83bcafb", + "metadata": {}, + "source": [ + "**Q4.4**Which map do players get the most Killing Spree medals on?" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "c2bae5a0-a2fb-4adb-8248-19e564d85f19", + "metadata": {}, + "outputs": [], + "source": [ + "df_medals.createOrReplaceTempView(\"medals\")" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "e46e3d48-5a15-4e66-a1df-2833aba9adc6", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:28 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "24/12/10 16:57:29 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.\n", + "[Stage 273:==================================================> (10 + 1) / 11]\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+------------------------------------+------------+\n", + "|mapid |total_medals|\n", + "+------------------------------------+------------+\n", + "|c7edbf0f-f206-11e4-aa52-24be05e24f7e|6925 |\n", + "+------------------------------------+------------+\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "q4=\"\"\"\n", + " WITH deduplicated_table AS (\n", + " SELECT DISTINCT \n", + " jt.match_id, \n", + " jt.mapid,\n", + " jt.medal_player_gamertag,\n", + " jt.medal_id,\n", + " jt.count\n", + " FROM \n", + " joined_table jt\n", + " JOIN\n", + " medals m\n", + " ON \n", + " jt.medal_id = m.medal_id\n", + " WHERE \n", + " m.classification = 'KillingSpree'\n", + " )\n", + " SELECT \n", + " mapid, \n", + " SUM(count) AS total_medals\n", + " FROM \n", + " deduplicated_table\n", + " GROUP BY \n", + " mapid\n", + " ORDER BY \n", + " total_medals DESC\n", + " LIMIT 1\n", + "\"\"\"\n", + "spark.sql(q4).show(truncate=False)" + ] + }, + { + "cell_type": "markdown", + "id": "a84187ef-bb64-45e5-94c0-d7e85111b402", + "metadata": {}, + "source": [ + "**Q5** Try different `.sortWithinPartitions`" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "0ad96f2f-b72f-4e24-acbc-1d17ef5cb39a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "DataFrame[]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "spark.sql(\n", + "\"\"\"CREATE TABLE IF NOT EXISTS bootcamp.hw3_joined_table (\n", + " match_id STRING,\n", + " mapid STRING,\n", + " is_team_game BOOLEAN,\n", + " playlist_id STRING,\n", + " game_variant_id STRING,\n", + " is_match_over BOOLEAN,\n", + " completion_date TIMESTAMP,\n", + " match_duration STRING,\n", + " game_mode STRING,\n", + " map_variant_id STRING,\n", + " player_gamertag STRING,\n", + " spartan_rank INTEGER,\n", + " player_total_kills INTEGER,\n", + " medal_player_gamertag STRING,\n", + " medal_id BIGINT,\n", + " count INTEGER\n", + ")\n", + "USING iceberg\n", + " PARTITIONED BY (match_id);\n", + " \"\"\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "9c7d45fe-9888-45e8-aa9c-3aec27d512cb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "DataFrame[]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "spark.sql(\n", + "\"\"\"CREATE TABLE IF NOT EXISTS bootcamp.hw3_sorted_1 (\n", + " match_id STRING,\n", + " mapid STRING,\n", + " is_team_game BOOLEAN,\n", + " playlist_id STRING,\n", + " game_variant_id STRING,\n", + " is_match_over BOOLEAN,\n", + " completion_date TIMESTAMP,\n", + " match_duration STRING,\n", + " game_mode STRING,\n", + " map_variant_id STRING,\n", + " player_gamertag STRING,\n", + " spartan_rank INTEGER,\n", + " player_total_kills INTEGER,\n", + " medal_player_gamertag STRING,\n", + " medal_id BIGINT,\n", + " count INTEGER\n", + ")\n", + "USING iceberg\n", + " PARTITIONED BY (match_id);\n", + " \"\"\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "1be67f2c-930f-4e7f-99fa-afb97b9c47f1", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "start_df = joined_table_df.repartition(4, col(\"match_id\"))\n", + "sorted_df_1 = start_df.sortWithinPartitions(col(\"match_id\"), col(\"player_gamertag\"), col(\"mapid\")) \n", + "\n", + "start_df.write.mode(\"overwrite\").saveAsTable(\"bootcamp.hw3_joined_table\")\n", + "sorted_df_1.write.mode(\"overwrite\").saveAsTable(\"bootcamp.hw3_sorted_1\")" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "6f932d34-d310-4686-b27c-7891cf0ec963", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "24/12/10 18:08:10 WARN SparkSession: Using an existing Spark session; only runtime SQL configurations will take effect.\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
contentfile_pathfile_formatspec_idpartitionrecord_countfile_size_in_bytescolumn_sizesvalue_countsnull_value_countsnan_value_countslower_boundsupper_boundskey_metadatasplit_offsetsequality_idssort_order_idreadable_metrics
0s3://warehouse/bootcamp/hw3_joined_table/data/00000-445-32a73932-45f8-45e2-92be-b573265aac4a-0-00001.parquetPARQUET1Row(match_id=None)16901682147520{1: 153280, 2: 20332, 3: 8172, 4: 19550, 5: 15729, 6: 6488, 7: 24376, 8: 3570, 9: 3570, 10: 30346, 11: 315229, 12: 80511, 13: 67884, 14: 745234, 15: 244357, 16: 342208}{1: 1690168, 2: 1690168, 3: 1690168, 4: 1690168, 5: 1690168, 6: 1690168, 7: 1690168, 8: 1690168, 9: 1690168, 10: 1690168, 11: 1690168, 12: 1690168, 13: 1690168, 14: 1690168, 15: 1690168, 16: 1690168}{1: 0, 2: 0, 3: 113155, 4: 0, 5: 0, 6: 113155, 7: 0, 8: 1690168, 9: 1690168, 10: 886154, 11: 1204, 12: 1204, 13: 1204, 14: 1477, 15: 1477, 16: 1477}{}{1: bytearray(b'0000e3cf-727c-49'), 2: bytearray(b'5e130537-2275-40'), 3: bytearray(b'\\x00'), 4: bytearray(b'0504ca3c-de41-48'), 5: bytearray(b'1571fdac-e0b4-4e'), 6: bytearray(b'\\x01'), 7: bytearray(b'\\x00\\xa0L\\xc2\\n#\\x05\\x00'), 10: bytearray(b'00e24014-e0c7-44'), 11: bytearray(b'A 29 Delivery'), 12: bytearray(b'\\x01\\x00\\x00\\x00'), 13: bytearray(b'\\x00\\x00\\x00\\x00'), 14: bytearray(b'A 29 Delivery'), 15: bytearray(b'Uc\\x1e\\x02\\x00\\x00\\x00\\x00'), 16: bytearray(b'\\x01\\x00\\x00\\x00')}{1: bytearray(b'fff72374-8977-49'), 2: bytearray(b'cebd854f-f206-12'), 3: bytearray(b'\\x01'), 4: bytearray(b'fe2ad4e1-3def-47'), 5: bytearray(b'f6de5351-3797-42'), 6: bytearray(b'\\x01'), 7: bytearray(b'\\x00\\xa0\\xfa\\xecq=\\x05\\x00'), 10: bytearray(b'fffc437b-2fd9-47'), 11: bytearray(b'zztonii'), 12: bytearray(b'\\x97\\x00\\x00\\x00'), 13: bytearray(b'm\\x00\\x00\\x00'), 14: bytearray(b'zztonii'), 15: bytearray(b'*Sx\\xfd\\x00\\x00\\x00\\x00'), 16: bytearray(b"\\'\\x00\\x00\\x00")}None[4]None0Row(completion_date=Row(column_size=24376, value_count=1690168, null_value_count=0, nan_value_count=None, lower_bound=datetime.datetime(2015, 10, 27, 0, 0), upper_bound=datetime.datetime(2016, 9, 27, 0, 0)), count=Row(column_size=342208, value_count=1690168, null_value_count=1477, nan_value_count=None, lower_bound=1, upper_bound=39), game_mode=Row(column_size=3570, value_count=1690168, null_value_count=1690168, nan_value_count=None, lower_bound=None, upper_bound=None), game_variant_id=Row(column_size=15729, value_count=1690168, null_value_count=0, nan_value_count=None, lower_bound='1571fdac-e0b4-4e', upper_bound='f6de5351-3797-42'), is_match_over=Row(column_size=6488, value_count=1690168, null_value_count=113155, nan_value_count=None, lower_bound=True, upper_bound=True), is_team_game=Row(column_size=8172, value_count=1690168, null_value_count=113155, nan_value_count=None, lower_bound=False, upper_bound=True), map_variant_id=Row(column_size=30346, value_count=1690168, null_value_count=886154, nan_value_count=None, lower_bound='00e24014-e0c7-44', upper_bound='fffc437b-2fd9-47'), mapid=Row(column_size=20332, value_count=1690168, null_value_count=0, nan_value_count=None, lower_bound='5e130537-2275-40', upper_bound='cebd854f-f206-12'), match_duration=Row(column_size=3570, value_count=1690168, null_value_count=1690168, nan_value_count=None, lower_bound=None, upper_bound=None), match_id=Row(column_size=153280, value_count=1690168, null_value_count=0, nan_value_count=None, lower_bound='0000e3cf-727c-49', upper_bound='fff72374-8977-49'), medal_id=Row(column_size=244357, value_count=1690168, null_value_count=1477, nan_value_count=None, lower_bound=35545941, upper_bound=4252521258), medal_player_gamertag=Row(column_size=745234, value_count=1690168, null_value_count=1477, nan_value_count=None, lower_bound='A 29 Delivery', upper_bound='zztonii'), player_gamertag=Row(column_size=315229, value_count=1690168, null_value_count=1204, nan_value_count=None, lower_bound='A 29 Delivery', upper_bound='zztonii'), player_total_kills=Row(column_size=67884, value_count=1690168, null_value_count=1204, nan_value_count=None, lower_bound=0, upper_bound=109), playlist_id=Row(column_size=19550, value_count=1690168, null_value_count=0, nan_value_count=None, lower_bound='0504ca3c-de41-48', upper_bound='fe2ad4e1-3def-47'), spartan_rank=Row(column_size=80511, value_count=1690168, null_value_count=1204, nan_value_count=None, lower_bound=1, upper_bound=151))
0s3://warehouse/bootcamp/hw3_joined_table/data/00001-446-32a73932-45f8-45e2-92be-b573265aac4a-0-00001.parquetPARQUET1Row(match_id=None)17381162163731{1: 156735, 2: 20094, 3: 8403, 4: 19429, 5: 16002, 6: 6710, 7: 25383, 8: 3654, 9: 3654, 10: 31007, 11: 321218, 12: 82069, 13: 69397, 14: 757804, 15: 255876, 16: 318294}{1: 1738116, 2: 1738116, 3: 1738116, 4: 1738116, 5: 1738116, 6: 1738116, 7: 1738116, 8: 1738116, 9: 1738116, 10: 1738116, 11: 1738116, 12: 1738116, 13: 1738116, 14: 1738116, 15: 1738116, 16: 1738116}{1: 0, 2: 0, 3: 111426, 4: 0, 5: 0, 6: 111426, 7: 0, 8: 1738116, 9: 1738116, 10: 932732, 11: 1236, 12: 1236, 13: 1236, 14: 1566, 15: 1566, 16: 1566}{}{1: bytearray(b'000e3254-27b0-4c'), 2: bytearray(b'5e130537-2275-40'), 3: bytearray(b'\\x00'), 4: bytearray(b'0504ca3c-de41-48'), 5: bytearray(b'1571fdac-e0b4-4e'), 6: bytearray(b'\\x01'), 7: bytearray(b'\\x00\\xa0L\\xc2\\n#\\x05\\x00'), 10: bytearray(b'011eaa34-3f05-48'), 11: bytearray(b'A 2 tailed fox'), 12: bytearray(b'\\x01\\x00\\x00\\x00'), 13: bytearray(b'\\x00\\x00\\x00\\x00'), 14: bytearray(b'A 2 tailed fox'), 15: bytearray(b'Uc\\x1e\\x02\\x00\\x00\\x00\\x00'), 16: bytearray(b'\\x01\\x00\\x00\\x00')}{1: bytearray(b'fff59f47-2a37-4c'), 2: bytearray(b'cebd854f-f206-12'), 3: bytearray(b'\\x01'), 4: bytearray(b'f72e0ef0-7c4a-44'), 5: bytearray(b'f6de5351-3797-42'), 6: bytearray(b'\\x01'), 7: bytearray(b'\\x00\\x00\\xd2\\n\\x86=\\x05\\x00'), 10: bytearray(b'fffc437b-2fd9-47'), 11: bytearray(b'zzSOzz'), 12: bytearray(b'\\x97\\x00\\x00\\x00'), 13: bytearray(b'S\\x00\\x00\\x00'), 14: bytearray(b'zzSOzz'), 15: bytearray(b'*Sx\\xfd\\x00\\x00\\x00\\x00'), 16: bytearray(b':\\x00\\x00\\x00')}None[4]None0Row(completion_date=Row(column_size=25383, value_count=1738116, null_value_count=0, nan_value_count=None, lower_bound=datetime.datetime(2015, 10, 27, 0, 0), upper_bound=datetime.datetime(2016, 9, 28, 0, 0)), count=Row(column_size=318294, value_count=1738116, null_value_count=1566, nan_value_count=None, lower_bound=1, upper_bound=58), game_mode=Row(column_size=3654, value_count=1738116, null_value_count=1738116, nan_value_count=None, lower_bound=None, upper_bound=None), game_variant_id=Row(column_size=16002, value_count=1738116, null_value_count=0, nan_value_count=None, lower_bound='1571fdac-e0b4-4e', upper_bound='f6de5351-3797-42'), is_match_over=Row(column_size=6710, value_count=1738116, null_value_count=111426, nan_value_count=None, lower_bound=True, upper_bound=True), is_team_game=Row(column_size=8403, value_count=1738116, null_value_count=111426, nan_value_count=None, lower_bound=False, upper_bound=True), map_variant_id=Row(column_size=31007, value_count=1738116, null_value_count=932732, nan_value_count=None, lower_bound='011eaa34-3f05-48', upper_bound='fffc437b-2fd9-47'), mapid=Row(column_size=20094, value_count=1738116, null_value_count=0, nan_value_count=None, lower_bound='5e130537-2275-40', upper_bound='cebd854f-f206-12'), match_duration=Row(column_size=3654, value_count=1738116, null_value_count=1738116, nan_value_count=None, lower_bound=None, upper_bound=None), match_id=Row(column_size=156735, value_count=1738116, null_value_count=0, nan_value_count=None, lower_bound='000e3254-27b0-4c', upper_bound='fff59f47-2a37-4c'), medal_id=Row(column_size=255876, value_count=1738116, null_value_count=1566, nan_value_count=None, lower_bound=35545941, upper_bound=4252521258), medal_player_gamertag=Row(column_size=757804, value_count=1738116, null_value_count=1566, nan_value_count=None, lower_bound='A 2 tailed fox', upper_bound='zzSOzz'), player_gamertag=Row(column_size=321218, value_count=1738116, null_value_count=1236, nan_value_count=None, lower_bound='A 2 tailed fox', upper_bound='zzSOzz'), player_total_kills=Row(column_size=69397, value_count=1738116, null_value_count=1236, nan_value_count=None, lower_bound=0, upper_bound=83), playlist_id=Row(column_size=19429, value_count=1738116, null_value_count=0, nan_value_count=None, lower_bound='0504ca3c-de41-48', upper_bound='f72e0ef0-7c4a-44'), spartan_rank=Row(column_size=82069, value_count=1738116, null_value_count=1236, nan_value_count=None, lower_bound=1, upper_bound=151))
0s3://warehouse/bootcamp/hw3_joined_table/data/00002-447-32a73932-45f8-45e2-92be-b573265aac4a-0-00001.parquetPARQUET1Row(match_id=None)17247252184579{1: 155790, 2: 20750, 3: 8180, 4: 19687, 5: 15953, 6: 6716, 7: 26075, 8: 3652, 9: 3652, 10: 30882, 11: 317920, 12: 81985, 13: 68427, 14: 760188, 15: 235625, 16: 361001}{1: 1724725, 2: 1724725, 3: 1724725, 4: 1724725, 5: 1724725, 6: 1724725, 7: 1724725, 8: 1724725, 9: 1724725, 10: 1724725, 11: 1724725, 12: 1724725, 13: 1724725, 14: 1724725, 15: 1724725, 16: 1724725}{1: 0, 2: 0, 3: 136428, 4: 0, 5: 0, 6: 136428, 7: 0, 8: 1724725, 9: 1724725, 10: 896680, 11: 1265, 12: 1265, 13: 1265, 14: 1455, 15: 1455, 16: 1455}{}{1: bytearray(b'0001a1c4-83dc-4f'), 2: bytearray(b'5e130537-2275-40'), 3: bytearray(b'\\x00'), 4: bytearray(b'0504ca3c-de41-48'), 5: bytearray(b'1571fdac-e0b4-4e'), 6: bytearray(b'\\x01'), 7: bytearray(b'\\x00\\xa0L\\xc2\\n#\\x05\\x00'), 10: bytearray(b'011eaa34-3f05-48'), 11: bytearray(b'A 0 N Eclipse'), 12: bytearray(b'\\x01\\x00\\x00\\x00'), 13: bytearray(b'\\x00\\x00\\x00\\x00'), 14: bytearray(b'A 0 N Eclipse'), 15: bytearray(b'Uc\\x1e\\x02\\x00\\x00\\x00\\x00'), 16: bytearray(b'\\x01\\x00\\x00\\x00')}{1: bytearray(b'fffc65f4-bc88-41'), 2: bytearray(b'cebd854f-f206-12'), 3: bytearray(b'\\x01'), 4: bytearray(b'fe2ad4e1-3def-47'), 5: bytearray(b'f6de5351-3797-42'), 6: bytearray(b'\\x01'), 7: bytearray(b'\\x00\\x00\\xd2\\n\\x86=\\x05\\x00'), 10: bytearray(b'fffc437b-2fd9-47'), 11: bytearray(b'zzzgameszzz'), 12: bytearray(b'\\x96\\x00\\x00\\x00'), 13: bytearray(b'L\\x00\\x00\\x00'), 14: bytearray(b'zzzgameszzz'), 15: bytearray(b'*Sx\\xfd\\x00\\x00\\x00\\x00'), 16: bytearray(b'\\x1f\\x00\\x00\\x00')}None[4]None0Row(completion_date=Row(column_size=26075, value_count=1724725, null_value_count=0, nan_value_count=None, lower_bound=datetime.datetime(2015, 10, 27, 0, 0), upper_bound=datetime.datetime(2016, 9, 28, 0, 0)), count=Row(column_size=361001, value_count=1724725, null_value_count=1455, nan_value_count=None, lower_bound=1, upper_bound=31), game_mode=Row(column_size=3652, value_count=1724725, null_value_count=1724725, nan_value_count=None, lower_bound=None, upper_bound=None), game_variant_id=Row(column_size=15953, value_count=1724725, null_value_count=0, nan_value_count=None, lower_bound='1571fdac-e0b4-4e', upper_bound='f6de5351-3797-42'), is_match_over=Row(column_size=6716, value_count=1724725, null_value_count=136428, nan_value_count=None, lower_bound=True, upper_bound=True), is_team_game=Row(column_size=8180, value_count=1724725, null_value_count=136428, nan_value_count=None, lower_bound=False, upper_bound=True), map_variant_id=Row(column_size=30882, value_count=1724725, null_value_count=896680, nan_value_count=None, lower_bound='011eaa34-3f05-48', upper_bound='fffc437b-2fd9-47'), mapid=Row(column_size=20750, value_count=1724725, null_value_count=0, nan_value_count=None, lower_bound='5e130537-2275-40', upper_bound='cebd854f-f206-12'), match_duration=Row(column_size=3652, value_count=1724725, null_value_count=1724725, nan_value_count=None, lower_bound=None, upper_bound=None), match_id=Row(column_size=155790, value_count=1724725, null_value_count=0, nan_value_count=None, lower_bound='0001a1c4-83dc-4f', upper_bound='fffc65f4-bc88-41'), medal_id=Row(column_size=235625, value_count=1724725, null_value_count=1455, nan_value_count=None, lower_bound=35545941, upper_bound=4252521258), medal_player_gamertag=Row(column_size=760188, value_count=1724725, null_value_count=1455, nan_value_count=None, lower_bound='A 0 N Eclipse', upper_bound='zzzgameszzz'), player_gamertag=Row(column_size=317920, value_count=1724725, null_value_count=1265, nan_value_count=None, lower_bound='A 0 N Eclipse', upper_bound='zzzgameszzz'), player_total_kills=Row(column_size=68427, value_count=1724725, null_value_count=1265, nan_value_count=None, lower_bound=0, upper_bound=76), playlist_id=Row(column_size=19687, value_count=1724725, null_value_count=0, nan_value_count=None, lower_bound='0504ca3c-de41-48', upper_bound='fe2ad4e1-3def-47'), spartan_rank=Row(column_size=81985, value_count=1724725, null_value_count=1265, nan_value_count=None, lower_bound=1, upper_bound=150))
0s3://warehouse/bootcamp/hw3_joined_table/data/00003-448-32a73932-45f8-45e2-92be-b573265aac4a-0-00001.parquetPARQUET1Row(match_id=None)17389522200768{1: 156593, 2: 20507, 3: 8221, 4: 19717, 5: 16131, 6: 6663, 7: 24925, 8: 3654, 9: 3654, 10: 31160, 11: 321279, 12: 81921, 13: 69116, 14: 764244, 15: 258054, 16: 346814}{1: 1738952, 2: 1738952, 3: 1738952, 4: 1738952, 5: 1738952, 6: 1738952, 7: 1738952, 8: 1738952, 9: 1738952, 10: 1738952, 11: 1738952, 12: 1738952, 13: 1738952, 14: 1738952, 15: 1738952, 16: 1738952}{1: 0, 2: 0, 3: 115372, 4: 0, 5: 0, 6: 115372, 7: 0, 8: 1738952, 9: 1738952, 10: 925597, 11: 1270, 12: 1270, 13: 1270, 14: 1605, 15: 1605, 16: 1605}{}{1: bytearray(b'0000e589-e3a9-40'), 2: bytearray(b'5e130537-2275-40'), 3: bytearray(b'\\x00'), 4: bytearray(b'0504ca3c-de41-48'), 5: bytearray(b'1571fdac-e0b4-4e'), 6: bytearray(b'\\x01'), 7: bytearray(b'\\x00\\xa0L\\xc2\\n#\\x05\\x00'), 10: bytearray(b'011eaa34-3f05-48'), 11: bytearray(b'A 0 N Eclipse'), 12: bytearray(b'\\x01\\x00\\x00\\x00'), 13: bytearray(b'\\x00\\x00\\x00\\x00'), 14: bytearray(b'A 0 N Eclipse'), 15: bytearray(b'Uc\\x1e\\x02\\x00\\x00\\x00\\x00'), 16: bytearray(b'\\x01\\x00\\x00\\x00')}{1: bytearray(b'fffa2980-342d-46'), 2: bytearray(b'cebd854f-f206-12'), 3: bytearray(b'\\x01'), 4: bytearray(b'fe2ad4e1-3def-47'), 5: bytearray(b'f6de5351-3797-42'), 6: bytearray(b'\\x01'), 7: bytearray(b'\\x00\\x00\\xd2\\n\\x86=\\x05\\x00'), 10: bytearray(b'fffc437b-2fd9-47'), 11: bytearray(b'zzzKusohakokids'), 12: bytearray(b'\\x97\\x00\\x00\\x00'), 13: bytearray(b'Z\\x00\\x00\\x00'), 14: bytearray(b'zzzKusohakokids'), 15: bytearray(b'*Sx\\xfd\\x00\\x00\\x00\\x00'), 16: bytearray(b'$\\x00\\x00\\x00')}None[4]None0Row(completion_date=Row(column_size=24925, value_count=1738952, null_value_count=0, nan_value_count=None, lower_bound=datetime.datetime(2015, 10, 27, 0, 0), upper_bound=datetime.datetime(2016, 9, 28, 0, 0)), count=Row(column_size=346814, value_count=1738952, null_value_count=1605, nan_value_count=None, lower_bound=1, upper_bound=36), game_mode=Row(column_size=3654, value_count=1738952, null_value_count=1738952, nan_value_count=None, lower_bound=None, upper_bound=None), game_variant_id=Row(column_size=16131, value_count=1738952, null_value_count=0, nan_value_count=None, lower_bound='1571fdac-e0b4-4e', upper_bound='f6de5351-3797-42'), is_match_over=Row(column_size=6663, value_count=1738952, null_value_count=115372, nan_value_count=None, lower_bound=True, upper_bound=True), is_team_game=Row(column_size=8221, value_count=1738952, null_value_count=115372, nan_value_count=None, lower_bound=False, upper_bound=True), map_variant_id=Row(column_size=31160, value_count=1738952, null_value_count=925597, nan_value_count=None, lower_bound='011eaa34-3f05-48', upper_bound='fffc437b-2fd9-47'), mapid=Row(column_size=20507, value_count=1738952, null_value_count=0, nan_value_count=None, lower_bound='5e130537-2275-40', upper_bound='cebd854f-f206-12'), match_duration=Row(column_size=3654, value_count=1738952, null_value_count=1738952, nan_value_count=None, lower_bound=None, upper_bound=None), match_id=Row(column_size=156593, value_count=1738952, null_value_count=0, nan_value_count=None, lower_bound='0000e589-e3a9-40', upper_bound='fffa2980-342d-46'), medal_id=Row(column_size=258054, value_count=1738952, null_value_count=1605, nan_value_count=None, lower_bound=35545941, upper_bound=4252521258), medal_player_gamertag=Row(column_size=764244, value_count=1738952, null_value_count=1605, nan_value_count=None, lower_bound='A 0 N Eclipse', upper_bound='zzzKusohakokids'), player_gamertag=Row(column_size=321279, value_count=1738952, null_value_count=1270, nan_value_count=None, lower_bound='A 0 N Eclipse', upper_bound='zzzKusohakokids'), player_total_kills=Row(column_size=69116, value_count=1738952, null_value_count=1270, nan_value_count=None, lower_bound=0, upper_bound=90), playlist_id=Row(column_size=19717, value_count=1738952, null_value_count=0, nan_value_count=None, lower_bound='0504ca3c-de41-48', upper_bound='fe2ad4e1-3def-47'), spartan_rank=Row(column_size=81921, value_count=1738952, null_value_count=1270, nan_value_count=None, lower_bound=1, upper_bound=151))
" + ], + "text/plain": [ + "+---------+--------------------------------------------------------------------------------------------------------------+-------------+---------+--------------------+--------------+--------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+---------------+--------------+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n", + "| content | file_path | file_format | spec_id | partition | record_count | file_size_in_bytes | column_sizes | value_counts | null_value_counts | nan_value_counts | lower_bounds | upper_bounds | key_metadata | split_offsets | equality_ids | sort_order_id | readable_metrics |\n", + "+---------+--------------------------------------------------------------------------------------------------------------+-------------+---------+--------------------+--------------+--------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+---------------+--------------+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n", + "| 0 | s3://warehouse/bootcamp/hw3_joined_table/data/00000-445-32a73932-45f8-45e2-92be-b573265aac4a-0-00001.parquet | PARQUET | 1 | Row(match_id=None) | 1690168 | 2147520 | {1: 153280, 2: 20332, 3: 8172, 4: 19550, 5: 15729, 6: 6488, 7: 24376, 8: 3570, 9: 3570, 10: 30346, 11: 315229, 12: 80511, 13: 67884, 14: 745234, 15: 244357, 16: 342208} | {1: 1690168, 2: 1690168, 3: 1690168, 4: 1690168, 5: 1690168, 6: 1690168, 7: 1690168, 8: 1690168, 9: 1690168, 10: 1690168, 11: 1690168, 12: 1690168, 13: 1690168, 14: 1690168, 15: 1690168, 16: 1690168} | {1: 0, 2: 0, 3: 113155, 4: 0, 5: 0, 6: 113155, 7: 0, 8: 1690168, 9: 1690168, 10: 886154, 11: 1204, 12: 1204, 13: 1204, 14: 1477, 15: 1477, 16: 1477} | {} | {1: bytearray(b'0000e3cf-727c-49'), 2: bytearray(b'5e130537-2275-40'), 3: bytearray(b'\\x00'), 4: bytearray(b'0504ca3c-de41-48'), 5: bytearray(b'1571fdac-e0b4-4e'), 6: bytearray(b'\\x01'), 7: bytearray(b'\\x00\\xa0L\\xc2\\n#\\x05\\x00'), 10: bytearray(b'00e24014-e0c7-44'), 11: bytearray(b'A 29 Delivery'), 12: bytearray(b'\\x01\\x00\\x00\\x00'), 13: bytearray(b'\\x00\\x00\\x00\\x00'), 14: bytearray(b'A 29 Delivery'), 15: bytearray(b'Uc\\x1e\\x02\\x00\\x00\\x00\\x00'), 16: bytearray(b'\\x01\\x00\\x00\\x00')} | {1: bytearray(b'fff72374-8977-49'), 2: bytearray(b'cebd854f-f206-12'), 3: bytearray(b'\\x01'), 4: bytearray(b'fe2ad4e1-3def-47'), 5: bytearray(b'f6de5351-3797-42'), 6: bytearray(b'\\x01'), 7: bytearray(b'\\x00\\xa0\\xfa\\xecq=\\x05\\x00'), 10: bytearray(b'fffc437b-2fd9-47'), 11: bytearray(b'zztonii'), 12: bytearray(b'\\x97\\x00\\x00\\x00'), 13: bytearray(b'm\\x00\\x00\\x00'), 14: bytearray(b'zztonii'), 15: bytearray(b'*Sx\\xfd\\x00\\x00\\x00\\x00'), 16: bytearray(b\"\\'\\x00\\x00\\x00\")} | None | [4] | None | 0 | Row(completion_date=Row(column_size=24376, value_count=1690168, null_value_count=0, nan_value_count=None, lower_bound=datetime.datetime(2015, 10, 27, 0, 0), upper_bound=datetime.datetime(2016, 9, 27, 0, 0)), count=Row(column_size=342208, value_count=1690168, null_value_count=1477, nan_value_count=None, lower_bound=1, upper_bound=39), game_mode=Row(column_size=3570, value_count=1690168, null_value_count=1690168, nan_value_count=None, lower_bound=None, upper_bound=None), game_variant_id=Row(column_size=15729, value_count=1690168, null_value_count=0, nan_value_count=None, lower_bound='1571fdac-e0b4-4e', upper_bound='f6de5351-3797-42'), is_match_over=Row(column_size=6488, value_count=1690168, null_value_count=113155, nan_value_count=None, lower_bound=True, upper_bound=True), is_team_game=Row(column_size=8172, value_count=1690168, null_value_count=113155, nan_value_count=None, lower_bound=False, upper_bound=True), map_variant_id=Row(column_size=30346, value_count=1690168, null_value_count=886154, nan_value_count=None, lower_bound='00e24014-e0c7-44', upper_bound='fffc437b-2fd9-47'), mapid=Row(column_size=20332, value_count=1690168, null_value_count=0, nan_value_count=None, lower_bound='5e130537-2275-40', upper_bound='cebd854f-f206-12'), match_duration=Row(column_size=3570, value_count=1690168, null_value_count=1690168, nan_value_count=None, lower_bound=None, upper_bound=None), match_id=Row(column_size=153280, value_count=1690168, null_value_count=0, nan_value_count=None, lower_bound='0000e3cf-727c-49', upper_bound='fff72374-8977-49'), medal_id=Row(column_size=244357, value_count=1690168, null_value_count=1477, nan_value_count=None, lower_bound=35545941, upper_bound=4252521258), medal_player_gamertag=Row(column_size=745234, value_count=1690168, null_value_count=1477, nan_value_count=None, lower_bound='A 29 Delivery', upper_bound='zztonii'), player_gamertag=Row(column_size=315229, value_count=1690168, null_value_count=1204, nan_value_count=None, lower_bound='A 29 Delivery', upper_bound='zztonii'), player_total_kills=Row(column_size=67884, value_count=1690168, null_value_count=1204, nan_value_count=None, lower_bound=0, upper_bound=109), playlist_id=Row(column_size=19550, value_count=1690168, null_value_count=0, nan_value_count=None, lower_bound='0504ca3c-de41-48', upper_bound='fe2ad4e1-3def-47'), spartan_rank=Row(column_size=80511, value_count=1690168, null_value_count=1204, nan_value_count=None, lower_bound=1, upper_bound=151)) |\n", + "| 0 | s3://warehouse/bootcamp/hw3_joined_table/data/00001-446-32a73932-45f8-45e2-92be-b573265aac4a-0-00001.parquet | PARQUET | 1 | Row(match_id=None) | 1738116 | 2163731 | {1: 156735, 2: 20094, 3: 8403, 4: 19429, 5: 16002, 6: 6710, 7: 25383, 8: 3654, 9: 3654, 10: 31007, 11: 321218, 12: 82069, 13: 69397, 14: 757804, 15: 255876, 16: 318294} | {1: 1738116, 2: 1738116, 3: 1738116, 4: 1738116, 5: 1738116, 6: 1738116, 7: 1738116, 8: 1738116, 9: 1738116, 10: 1738116, 11: 1738116, 12: 1738116, 13: 1738116, 14: 1738116, 15: 1738116, 16: 1738116} | {1: 0, 2: 0, 3: 111426, 4: 0, 5: 0, 6: 111426, 7: 0, 8: 1738116, 9: 1738116, 10: 932732, 11: 1236, 12: 1236, 13: 1236, 14: 1566, 15: 1566, 16: 1566} | {} | {1: bytearray(b'000e3254-27b0-4c'), 2: bytearray(b'5e130537-2275-40'), 3: bytearray(b'\\x00'), 4: bytearray(b'0504ca3c-de41-48'), 5: bytearray(b'1571fdac-e0b4-4e'), 6: bytearray(b'\\x01'), 7: bytearray(b'\\x00\\xa0L\\xc2\\n#\\x05\\x00'), 10: bytearray(b'011eaa34-3f05-48'), 11: bytearray(b'A 2 tailed fox'), 12: bytearray(b'\\x01\\x00\\x00\\x00'), 13: bytearray(b'\\x00\\x00\\x00\\x00'), 14: bytearray(b'A 2 tailed fox'), 15: bytearray(b'Uc\\x1e\\x02\\x00\\x00\\x00\\x00'), 16: bytearray(b'\\x01\\x00\\x00\\x00')} | {1: bytearray(b'fff59f47-2a37-4c'), 2: bytearray(b'cebd854f-f206-12'), 3: bytearray(b'\\x01'), 4: bytearray(b'f72e0ef0-7c4a-44'), 5: bytearray(b'f6de5351-3797-42'), 6: bytearray(b'\\x01'), 7: bytearray(b'\\x00\\x00\\xd2\\n\\x86=\\x05\\x00'), 10: bytearray(b'fffc437b-2fd9-47'), 11: bytearray(b'zzSOzz'), 12: bytearray(b'\\x97\\x00\\x00\\x00'), 13: bytearray(b'S\\x00\\x00\\x00'), 14: bytearray(b'zzSOzz'), 15: bytearray(b'*Sx\\xfd\\x00\\x00\\x00\\x00'), 16: bytearray(b':\\x00\\x00\\x00')} | None | [4] | None | 0 | Row(completion_date=Row(column_size=25383, value_count=1738116, null_value_count=0, nan_value_count=None, lower_bound=datetime.datetime(2015, 10, 27, 0, 0), upper_bound=datetime.datetime(2016, 9, 28, 0, 0)), count=Row(column_size=318294, value_count=1738116, null_value_count=1566, nan_value_count=None, lower_bound=1, upper_bound=58), game_mode=Row(column_size=3654, value_count=1738116, null_value_count=1738116, nan_value_count=None, lower_bound=None, upper_bound=None), game_variant_id=Row(column_size=16002, value_count=1738116, null_value_count=0, nan_value_count=None, lower_bound='1571fdac-e0b4-4e', upper_bound='f6de5351-3797-42'), is_match_over=Row(column_size=6710, value_count=1738116, null_value_count=111426, nan_value_count=None, lower_bound=True, upper_bound=True), is_team_game=Row(column_size=8403, value_count=1738116, null_value_count=111426, nan_value_count=None, lower_bound=False, upper_bound=True), map_variant_id=Row(column_size=31007, value_count=1738116, null_value_count=932732, nan_value_count=None, lower_bound='011eaa34-3f05-48', upper_bound='fffc437b-2fd9-47'), mapid=Row(column_size=20094, value_count=1738116, null_value_count=0, nan_value_count=None, lower_bound='5e130537-2275-40', upper_bound='cebd854f-f206-12'), match_duration=Row(column_size=3654, value_count=1738116, null_value_count=1738116, nan_value_count=None, lower_bound=None, upper_bound=None), match_id=Row(column_size=156735, value_count=1738116, null_value_count=0, nan_value_count=None, lower_bound='000e3254-27b0-4c', upper_bound='fff59f47-2a37-4c'), medal_id=Row(column_size=255876, value_count=1738116, null_value_count=1566, nan_value_count=None, lower_bound=35545941, upper_bound=4252521258), medal_player_gamertag=Row(column_size=757804, value_count=1738116, null_value_count=1566, nan_value_count=None, lower_bound='A 2 tailed fox', upper_bound='zzSOzz'), player_gamertag=Row(column_size=321218, value_count=1738116, null_value_count=1236, nan_value_count=None, lower_bound='A 2 tailed fox', upper_bound='zzSOzz'), player_total_kills=Row(column_size=69397, value_count=1738116, null_value_count=1236, nan_value_count=None, lower_bound=0, upper_bound=83), playlist_id=Row(column_size=19429, value_count=1738116, null_value_count=0, nan_value_count=None, lower_bound='0504ca3c-de41-48', upper_bound='f72e0ef0-7c4a-44'), spartan_rank=Row(column_size=82069, value_count=1738116, null_value_count=1236, nan_value_count=None, lower_bound=1, upper_bound=151)) |\n", + "| 0 | s3://warehouse/bootcamp/hw3_joined_table/data/00002-447-32a73932-45f8-45e2-92be-b573265aac4a-0-00001.parquet | PARQUET | 1 | Row(match_id=None) | 1724725 | 2184579 | {1: 155790, 2: 20750, 3: 8180, 4: 19687, 5: 15953, 6: 6716, 7: 26075, 8: 3652, 9: 3652, 10: 30882, 11: 317920, 12: 81985, 13: 68427, 14: 760188, 15: 235625, 16: 361001} | {1: 1724725, 2: 1724725, 3: 1724725, 4: 1724725, 5: 1724725, 6: 1724725, 7: 1724725, 8: 1724725, 9: 1724725, 10: 1724725, 11: 1724725, 12: 1724725, 13: 1724725, 14: 1724725, 15: 1724725, 16: 1724725} | {1: 0, 2: 0, 3: 136428, 4: 0, 5: 0, 6: 136428, 7: 0, 8: 1724725, 9: 1724725, 10: 896680, 11: 1265, 12: 1265, 13: 1265, 14: 1455, 15: 1455, 16: 1455} | {} | {1: bytearray(b'0001a1c4-83dc-4f'), 2: bytearray(b'5e130537-2275-40'), 3: bytearray(b'\\x00'), 4: bytearray(b'0504ca3c-de41-48'), 5: bytearray(b'1571fdac-e0b4-4e'), 6: bytearray(b'\\x01'), 7: bytearray(b'\\x00\\xa0L\\xc2\\n#\\x05\\x00'), 10: bytearray(b'011eaa34-3f05-48'), 11: bytearray(b'A 0 N Eclipse'), 12: bytearray(b'\\x01\\x00\\x00\\x00'), 13: bytearray(b'\\x00\\x00\\x00\\x00'), 14: bytearray(b'A 0 N Eclipse'), 15: bytearray(b'Uc\\x1e\\x02\\x00\\x00\\x00\\x00'), 16: bytearray(b'\\x01\\x00\\x00\\x00')} | {1: bytearray(b'fffc65f4-bc88-41'), 2: bytearray(b'cebd854f-f206-12'), 3: bytearray(b'\\x01'), 4: bytearray(b'fe2ad4e1-3def-47'), 5: bytearray(b'f6de5351-3797-42'), 6: bytearray(b'\\x01'), 7: bytearray(b'\\x00\\x00\\xd2\\n\\x86=\\x05\\x00'), 10: bytearray(b'fffc437b-2fd9-47'), 11: bytearray(b'zzzgameszzz'), 12: bytearray(b'\\x96\\x00\\x00\\x00'), 13: bytearray(b'L\\x00\\x00\\x00'), 14: bytearray(b'zzzgameszzz'), 15: bytearray(b'*Sx\\xfd\\x00\\x00\\x00\\x00'), 16: bytearray(b'\\x1f\\x00\\x00\\x00')} | None | [4] | None | 0 | Row(completion_date=Row(column_size=26075, value_count=1724725, null_value_count=0, nan_value_count=None, lower_bound=datetime.datetime(2015, 10, 27, 0, 0), upper_bound=datetime.datetime(2016, 9, 28, 0, 0)), count=Row(column_size=361001, value_count=1724725, null_value_count=1455, nan_value_count=None, lower_bound=1, upper_bound=31), game_mode=Row(column_size=3652, value_count=1724725, null_value_count=1724725, nan_value_count=None, lower_bound=None, upper_bound=None), game_variant_id=Row(column_size=15953, value_count=1724725, null_value_count=0, nan_value_count=None, lower_bound='1571fdac-e0b4-4e', upper_bound='f6de5351-3797-42'), is_match_over=Row(column_size=6716, value_count=1724725, null_value_count=136428, nan_value_count=None, lower_bound=True, upper_bound=True), is_team_game=Row(column_size=8180, value_count=1724725, null_value_count=136428, nan_value_count=None, lower_bound=False, upper_bound=True), map_variant_id=Row(column_size=30882, value_count=1724725, null_value_count=896680, nan_value_count=None, lower_bound='011eaa34-3f05-48', upper_bound='fffc437b-2fd9-47'), mapid=Row(column_size=20750, value_count=1724725, null_value_count=0, nan_value_count=None, lower_bound='5e130537-2275-40', upper_bound='cebd854f-f206-12'), match_duration=Row(column_size=3652, value_count=1724725, null_value_count=1724725, nan_value_count=None, lower_bound=None, upper_bound=None), match_id=Row(column_size=155790, value_count=1724725, null_value_count=0, nan_value_count=None, lower_bound='0001a1c4-83dc-4f', upper_bound='fffc65f4-bc88-41'), medal_id=Row(column_size=235625, value_count=1724725, null_value_count=1455, nan_value_count=None, lower_bound=35545941, upper_bound=4252521258), medal_player_gamertag=Row(column_size=760188, value_count=1724725, null_value_count=1455, nan_value_count=None, lower_bound='A 0 N Eclipse', upper_bound='zzzgameszzz'), player_gamertag=Row(column_size=317920, value_count=1724725, null_value_count=1265, nan_value_count=None, lower_bound='A 0 N Eclipse', upper_bound='zzzgameszzz'), player_total_kills=Row(column_size=68427, value_count=1724725, null_value_count=1265, nan_value_count=None, lower_bound=0, upper_bound=76), playlist_id=Row(column_size=19687, value_count=1724725, null_value_count=0, nan_value_count=None, lower_bound='0504ca3c-de41-48', upper_bound='fe2ad4e1-3def-47'), spartan_rank=Row(column_size=81985, value_count=1724725, null_value_count=1265, nan_value_count=None, lower_bound=1, upper_bound=150)) |\n", + "| 0 | s3://warehouse/bootcamp/hw3_joined_table/data/00003-448-32a73932-45f8-45e2-92be-b573265aac4a-0-00001.parquet | PARQUET | 1 | Row(match_id=None) | 1738952 | 2200768 | {1: 156593, 2: 20507, 3: 8221, 4: 19717, 5: 16131, 6: 6663, 7: 24925, 8: 3654, 9: 3654, 10: 31160, 11: 321279, 12: 81921, 13: 69116, 14: 764244, 15: 258054, 16: 346814} | {1: 1738952, 2: 1738952, 3: 1738952, 4: 1738952, 5: 1738952, 6: 1738952, 7: 1738952, 8: 1738952, 9: 1738952, 10: 1738952, 11: 1738952, 12: 1738952, 13: 1738952, 14: 1738952, 15: 1738952, 16: 1738952} | {1: 0, 2: 0, 3: 115372, 4: 0, 5: 0, 6: 115372, 7: 0, 8: 1738952, 9: 1738952, 10: 925597, 11: 1270, 12: 1270, 13: 1270, 14: 1605, 15: 1605, 16: 1605} | {} | {1: bytearray(b'0000e589-e3a9-40'), 2: bytearray(b'5e130537-2275-40'), 3: bytearray(b'\\x00'), 4: bytearray(b'0504ca3c-de41-48'), 5: bytearray(b'1571fdac-e0b4-4e'), 6: bytearray(b'\\x01'), 7: bytearray(b'\\x00\\xa0L\\xc2\\n#\\x05\\x00'), 10: bytearray(b'011eaa34-3f05-48'), 11: bytearray(b'A 0 N Eclipse'), 12: bytearray(b'\\x01\\x00\\x00\\x00'), 13: bytearray(b'\\x00\\x00\\x00\\x00'), 14: bytearray(b'A 0 N Eclipse'), 15: bytearray(b'Uc\\x1e\\x02\\x00\\x00\\x00\\x00'), 16: bytearray(b'\\x01\\x00\\x00\\x00')} | {1: bytearray(b'fffa2980-342d-46'), 2: bytearray(b'cebd854f-f206-12'), 3: bytearray(b'\\x01'), 4: bytearray(b'fe2ad4e1-3def-47'), 5: bytearray(b'f6de5351-3797-42'), 6: bytearray(b'\\x01'), 7: bytearray(b'\\x00\\x00\\xd2\\n\\x86=\\x05\\x00'), 10: bytearray(b'fffc437b-2fd9-47'), 11: bytearray(b'zzzKusohakokids'), 12: bytearray(b'\\x97\\x00\\x00\\x00'), 13: bytearray(b'Z\\x00\\x00\\x00'), 14: bytearray(b'zzzKusohakokids'), 15: bytearray(b'*Sx\\xfd\\x00\\x00\\x00\\x00'), 16: bytearray(b'$\\x00\\x00\\x00')} | None | [4] | None | 0 | Row(completion_date=Row(column_size=24925, value_count=1738952, null_value_count=0, nan_value_count=None, lower_bound=datetime.datetime(2015, 10, 27, 0, 0), upper_bound=datetime.datetime(2016, 9, 28, 0, 0)), count=Row(column_size=346814, value_count=1738952, null_value_count=1605, nan_value_count=None, lower_bound=1, upper_bound=36), game_mode=Row(column_size=3654, value_count=1738952, null_value_count=1738952, nan_value_count=None, lower_bound=None, upper_bound=None), game_variant_id=Row(column_size=16131, value_count=1738952, null_value_count=0, nan_value_count=None, lower_bound='1571fdac-e0b4-4e', upper_bound='f6de5351-3797-42'), is_match_over=Row(column_size=6663, value_count=1738952, null_value_count=115372, nan_value_count=None, lower_bound=True, upper_bound=True), is_team_game=Row(column_size=8221, value_count=1738952, null_value_count=115372, nan_value_count=None, lower_bound=False, upper_bound=True), map_variant_id=Row(column_size=31160, value_count=1738952, null_value_count=925597, nan_value_count=None, lower_bound='011eaa34-3f05-48', upper_bound='fffc437b-2fd9-47'), mapid=Row(column_size=20507, value_count=1738952, null_value_count=0, nan_value_count=None, lower_bound='5e130537-2275-40', upper_bound='cebd854f-f206-12'), match_duration=Row(column_size=3654, value_count=1738952, null_value_count=1738952, nan_value_count=None, lower_bound=None, upper_bound=None), match_id=Row(column_size=156593, value_count=1738952, null_value_count=0, nan_value_count=None, lower_bound='0000e589-e3a9-40', upper_bound='fffa2980-342d-46'), medal_id=Row(column_size=258054, value_count=1738952, null_value_count=1605, nan_value_count=None, lower_bound=35545941, upper_bound=4252521258), medal_player_gamertag=Row(column_size=764244, value_count=1738952, null_value_count=1605, nan_value_count=None, lower_bound='A 0 N Eclipse', upper_bound='zzzKusohakokids'), player_gamertag=Row(column_size=321279, value_count=1738952, null_value_count=1270, nan_value_count=None, lower_bound='A 0 N Eclipse', upper_bound='zzzKusohakokids'), player_total_kills=Row(column_size=69116, value_count=1738952, null_value_count=1270, nan_value_count=None, lower_bound=0, upper_bound=90), playlist_id=Row(column_size=19717, value_count=1738952, null_value_count=0, nan_value_count=None, lower_bound='0504ca3c-de41-48', upper_bound='fe2ad4e1-3def-47'), spartan_rank=Row(column_size=81921, value_count=1738952, null_value_count=1270, nan_value_count=None, lower_bound=1, upper_bound=151)) |\n", + "+---------+--------------------------------------------------------------------------------------------------------------+-------------+---------+--------------------+--------------+--------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+---------------+--------------+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%sql\n", + "select * from bootcamp.hw3_joined_table.files" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "47b665ba-07ad-427c-9061-abcb157c35b3", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "sorted_df_2 = start_df.sortWithinPartitions(col(\"match_id\"), col(\"playlist_id\"), col(\"mapid\")) \n", + "sorted_df_3 = start_df.sortWithinPartitions(col(\"match_id\"), col(\"mapid\"), col(\"medal_id\")) \n", + "sorted_df_2.write.mode(\"overwrite\").saveAsTable(\"bootcamp.hw3_sorted_2\")\n", + "sorted_df_3.write.mode(\"overwrite\").saveAsTable(\"bootcamp.hw3_sorted_3\")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "7d50131c-38e0-46a3-b42f-8ed9e296cc7f", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "24/12/11 12:49:43 WARN SparkSession: Using an existing Spark session; only runtime SQL configurations will take effect.\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sizenum_filesunsorted
86965984unsorted
87068754sorted_1
87112814sorted_2
169678624sorted_3
" + ], + "text/plain": [ + "+----------+-----------+----------+\n", + "| size | num_files | unsorted |\n", + "+----------+-----------+----------+\n", + "| 8696598 | 4 | unsorted |\n", + "| 8706875 | 4 | sorted_1 |\n", + "| 8711281 | 4 | sorted_2 |\n", + "| 16967862 | 4 | sorted_3 |\n", + "+----------+-----------+----------+" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%sql\n", + "\n", + "SELECT SUM(file_size_in_bytes) as size, COUNT(1) as num_files, 'unsorted' \n", + "FROM bootcamp.hw3_joined_table.files\n", + "\n", + "UNION ALL\n", + "SELECT SUM(file_size_in_bytes) as size, COUNT(1) as num_files, 'sorted_1'\n", + "FROM bootcamp.hw3_sorted_1.files\n", + "UNION ALL\n", + "SELECT SUM(file_size_in_bytes) as size, COUNT(1) as num_files, 'sorted_2'\n", + "FROM bootcamp.hw3_sorted_2.files\n", + "UNION ALL\n", + "SELECT SUM(file_size_in_bytes) as size, COUNT(1) as num_files, 'sorted_3'\n", + "FROM bootcamp.hw3_sorted_3.files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c6bba48e-2a3b-4ff7-ab9d-7df9b60826f0", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/bootcamp/materials/3-spark-fundamentals/notebooks/my_notes_load_matches_bucketed.ipynb b/bootcamp/materials/3-spark-fundamentals/notebooks/my_notes_load_matches_bucketed.ipynb new file mode 100644 index 00000000..d6916bfb --- /dev/null +++ b/bootcamp/materials/3-spark-fundamentals/notebooks/my_notes_load_matches_bucketed.ipynb @@ -0,0 +1,214 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "f14381ed-8da4-4748-b1d1-03136979c65c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Intitializing Scala interpreter ..." + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "Spark Web UI available at http://88fd5f590760:4042\n", + "SparkContext available as 'sc' (version = 3.5.1, master = local[*], app id = local-1733674486493)\n", + "SparkSession available as 'spark'\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "res0: org.apache.spark.sql.DataFrame = []\n" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "spark.sql(\"DROP table bootcamp.matches_bucketed\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "9de6d13b-d7e4-4065-a0dd-27f4c8621d30", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+------------+--------------------+-------------------+\n", + "| match_id|is_team_game| playlist_id| completion_date|\n", + "+--------------------+------------+--------------------+-------------------+\n", + "|0df7e36f-9501-483...| true|2323b76a-db98-4e0...|2016-08-07 00:00:00|\n", + "|a582acd7-aea5-419...| NULL|f72e0ef0-7c4a-430...|2015-12-26 00:00:00|\n", + "|7d2b104b-af02-49b...| NULL|f72e0ef0-7c4a-430...|2015-12-26 00:00:00|\n", + "|fe41a901-7afe-408...| NULL|2323b76a-db98-4e0...|2015-12-26 00:00:00|\n", + "|0e05752a-10f2-493...| true|bc0f8ad6-31e6-4a1...|2015-12-26 00:00:00|\n", + "|ceeeefd4-ce81-49e...| NULL|2323b76a-db98-4e0...|2015-12-26 00:00:00|\n", + "|d7a45423-226b-47a...| NULL|d0766624-dbd7-453...|2015-12-26 00:00:00|\n", + "|7d72b72e-3864-403...| NULL|f72e0ef0-7c4a-430...|2015-12-26 00:00:00|\n", + "|340905d8-f5ce-45c...| true|bc0f8ad6-31e6-4a1...|2015-12-26 00:00:00|\n", + "|6e49636a-e9d1-4f1...| true|2323b76a-db98-4e0...|2016-08-07 00:00:00|\n", + "|45cd2847-3773-414...| NULL|d0766624-dbd7-453...|2015-12-26 00:00:00|\n", + "|2c4821c4-be79-4b5...| true|f72e0ef0-7c4a-430...|2015-12-26 00:00:00|\n", + "|be540db9-163e-47a...| true|f72e0ef0-7c4a-430...|2015-12-26 00:00:00|\n", + "|00592b3d-ae26-45b...| NULL|f72e0ef0-7c4a-430...|2015-12-26 00:00:00|\n", + "|ab7d172a-ede0-4b2...| NULL|f72e0ef0-7c4a-430...|2015-12-26 00:00:00|\n", + "|97c7e979-dcbc-48f...| NULL|f72e0ef0-7c4a-430...|2015-12-26 00:00:00|\n", + "|7e0388b2-1792-413...| true|f72e0ef0-7c4a-430...|2015-12-26 00:00:00|\n", + "|a87d7073-3b84-42c...| false|d0766624-dbd7-453...|2015-12-26 00:00:00|\n", + "|3e4fd2b3-8ab0-4d9...| NULL|2323b76a-db98-4e0...|2015-12-26 00:00:00|\n", + "|71e1391c-f6f7-436...| NULL|f72e0ef0-7c4a-430...|2015-12-26 00:00:00|\n", + "+--------------------+------------+--------------------+-------------------+\n", + "only showing top 20 rows\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "import org.apache.spark.sql.SparkSession\n", + "import org.apache.spark.sql.functions.col\n", + "import org.apache.spark.storage.StorageLevel\n", + "spark: org.apache.spark.sql.SparkSession = org.apache.spark.sql.SparkSession@7e56f5e9\n", + "matchesBucketedselect: org.apache.spark.sql.DataFrame = [match_id: string, mapid: string ... 8 more fields]\n", + "distinctDates: Array[org.apache.spark.sql.Row] = Array([2016-03-13 00:00:00.0], [2016-03-11 00:00:00.0], [2016-03-10 00:00:00.0], [2016-01-30 00:00:00.0], [2016-03-27 00:00:00.0], [2016-04-10 00:00:00.0], [2016-01-18 00:00:00.0], [2016-02-01 00:00:00.0], [2015-12-14 00:00:00.0], [2016-02-03 00:00:00.0], [2016-04-30 00:00:00.0], [2016-03-05 00:00:00.0], [2016-04-15 00:00:00.0], [2016-05-21 00:00:00.0], [2015-10-31 00:00:00.0], [2016-01-22 00:00:00.0], [2016-02-09 00:00:00...\n" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import org.apache.spark.sql.SparkSession\n", + "import org.apache.spark.sql.functions.{col}\n", + "import org.apache.spark.storage.StorageLevel\n", + "\n", + "val spark = SparkSession.builder()\n", + " .appName(\"IcebergTableManagement\") \n", + " .config(\"spark.executor.memory\", \"4g\")\n", + " .config(\"spark.driver.memory\", \"4g\")\n", + " .config(\"spark.sql.shuffle.partitions\", \"200\") // Fine for large datasets\n", + " .config(\"spark.sql.files.maxPartitionBytes\", \"134217728\") // Optional: 128 MB is default\n", + " .config(\"spark.sql.autoBroadcastJoinThreshold\", \"-1\") // Optional: Disable broadcast join\n", + " .config(\"spark.dynamicAllocation.enabled\", \"true\") // Helps with resource allocation\n", + " .config(\"spark.dynamicAllocation.minExecutors\", \"1\") // Ensure minimum resources\n", + " .config(\"spark.dynamicAllocation.maxExecutors\", \"50\") // Scalable resource allocation\n", + " .getOrCreate()\n", + "\n", + "\n", + "val matchesBucketedselect = spark.read.option(\"header\", \"true\")\n", + " .option(\"inferSchema\", \"true\")\n", + " .csv(\"/home/iceberg/data/matches.csv\")\n", + "\n", + "// Get distinct completion dates\n", + "val distinctDates = matchesBucketed.select(\"completion_date\").distinct().collect()\n", + "\n", + "// Create the Iceberg table if it doesn't exist\n", + "val bucketedDDL = \"\"\"\n", + "CREATE TABLE IF NOT EXISTS bootcamp.matches_bucketed (\n", + " match_id STRING,\n", + " is_team_game BOOLEAN,\n", + " playlist_id STRING,\n", + " completion_date TIMESTAMP\n", + ")\n", + "USING iceberg\n", + "PARTITIONED BY (completion_date, bucket(16, match_id))\n", + "\"\"\"\n", + "spark.sql(bucketedDDL)\n", + "\n", + "// Process data in chunks based on completion_date\n", + "distinctDates.foreach { row =>\n", + " val date = row.getAs[java.sql.Timestamp](\"completion_date\")\n", + " val filteredMatches = matchesBucketed.filter(col(\"completion_date\") === date)\n", + " \n", + " // Repartition and persist the filtered data\n", + " val optimizedMatches = filteredMatches\n", + " .select($\"match_id\", $\"is_team_game\", $\"playlist_id\", $\"completion_date\")\n", + " .repartition(16, $\"match_id\")\n", + " .persist(StorageLevel.MEMORY_AND_DISK)\n", + " \n", + " optimizedMatches.write\n", + " .mode(\"append\")\n", + " .bucketBy(16, \"match_id\")\n", + " .partitionBy(\"completion_date\")\n", + " .saveAsTable(\"bootcamp.matches_bucketed\")\n", + "}\n", + "\n", + "// Verify the data in the table\n", + "val result = spark.sql(\"SELECT * FROM bootcamp.matches_bucketed\")\n", + "result.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "b5325e4c-4322-40a1-af7c-e5cf71950901", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+---------+\n", + "|num_files|\n", + "+---------+\n", + "| 3665|\n", + "+---------+\n", + "\n" + ] + } + ], + "source": [ + "spark.sql(\"SELECT COUNT(1) as num_files FROM bootcamp.matches_bucketed.files\").show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ae6fdb50-a750-43e0-890e-95f4e19a7c8a", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "spylon-kernel", + "language": "scala", + "name": "spylon-kernel" + }, + "language_info": { + "codemirror_mode": "text/x-scala", + "file_extension": ".scala", + "help_links": [ + { + "text": "MetaKernel Magics", + "url": "https://metakernel.readthedocs.io/en/latest/source/README.html" + } + ], + "mimetype": "text/x-scala", + "name": "scala", + "pygments_lexer": "scala", + "version": "0.4.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/bootcamp/materials/3-spark-fundamentals/src/__pycache__/__init__.cpython-311.pyc b/bootcamp/materials/3-spark-fundamentals/src/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e854c328f09b2b0c539c08bd76d2e146e08d89eb GIT binary patch literal 232 zcmX|5K?=e!5KJtJ2*r1Js5y8QPxUH@4+ybY+oIW&Bt58C|KJnEFM0I?1#h0*fI5fS z*%@}3Tbhm-;qq9QaXuscz`x=(AaP}yZP~OsNp1XTeJo+ zc#*51fpsJ^Nn)*Y}cYz@m(~%D}3X+_0@IK=wu0;yuoQ0ywGW`x$_K@z?z|sR_Pe(fzv;LVNI@h=gjW z+5hW##kcm-NJt4M$$Kz1sDh*uD~YAMo+*AoOxtn_8g~eDt_=Fq>#MU%shcZ_^ipEB zU^p6Kj8wmje|1HTMHh&Z&Dxg!x(M@Uq~H_` z<^gym++Itqo)lK9Y86hI#tnyh$$IfGK25A8RGoki4#_bbI3o39_44Msm%aEWYpM0m z)LZukH^&ROZ+Y7_gc|X=Z)X_=z!Y1f-EVxJbx z9&ZPt2#9u?N=<<^Brg-LDNblecEPjP_tqsR)c-*>3CJvR9TFX%&Y*^NA&0$w9(7;M zS5$h_nxj2y@T<$GF`9wFXwTM1PLG273c-b-BsYWe@%d}f_#8a0T(YyIc+%GvU)&Z8VG2zE1F)TI> z=6QJe7N`a~3|wg3dNwxM8B>px@b;r8`Nvy3TSvd_uaxL@rov3o jxO^E@*Dp!ZA$q@c`sv~^>0%f4)kQ^0NnLcd_Ez~1WInQT literal 0 HcmV?d00001 diff --git a/bootcamp/materials/3-spark-fundamentals/src/jobs/__pycache__/players_scd_job.cpython-311.pyc b/bootcamp/materials/3-spark-fundamentals/src/jobs/__pycache__/players_scd_job.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..33a7adfadf951d4178f724c944d04379363cdba9 GIT binary patch literal 2379 zcmcIlO-vg{6rQzbG1ySiUW!DhR#8#CDqxf35-Cbb!3_?^j%<@OT-;@6Y!>WYXJ#El z3kpFOjx2#zsyOu2nE4 z%qKHx<>M#aMktx=Tp}wr{T8Uoox6%pw@?Grt2vWZ{#P@SIVHW6O7&g~xDtaD^i|C) zQJ48iHnZ4%84s&%oZ8+n2w-azjc$jyuQ~UMPx;?@$d&gY;`4>e_G9Sh=av?uvopDb z@_0Ux?lNA~nKVpl?bkvWiD)PxqtpWkFdc=7odi9ulk6Z5^T4#&tS5Twxl|Ymx)LR5<-X2 z&PhUBsNPw5yJEDVCVAvP19dErc0%Wo&efpvt`0@ZrWux{u&L8LtyCWwbi)bqr)5We zTBB@J4LC9vHP0CU?6o3;62`>?6y?pAu~n-=W5rd7JT?cyg#^^E z70a@9tx}DNu{G8UFhASGT`eYD7kxksk*8AvyeKKYDxe`=wWjpB8>x_<5jl>p}C@gU0Yeb9iAV36Zv!ImRQe z@yNHM4Lsh&BjyPWS|QM6V7m->YDijaz$P1 z-}K*s=hn*fE_)AzL=5s2bgiHyNhj$2BmdXJ*9Y*9+?tmH(zO=qbp3tOM^X!2-MhE_ E1%*#b9{>OV literal 0 HcmV?d00001 diff --git a/bootcamp/materials/3-spark-fundamentals/src/jobs/__pycache__/team_vertex_job.cpython-311.pyc b/bootcamp/materials/3-spark-fundamentals/src/jobs/__pycache__/team_vertex_job.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f2b0f602b55f996fa2e9129c0ea724a010a03c5e GIT binary patch literal 1723 zcmZux%}*Og6rZ)n7_UJkQk76Sh*ebzTY;Ub${|wQlz`h<5IeF>P{?5!?~Gx=`;pmo zs4F6Ih*SkdYAzK$`b1lCiF)a^e*#99Kr2-_^wdKoODLC|@@CB%6Z+(N^X9!b@4b2N zxBhi_SVlnq9X?!Jk0SJsID`~A6HY${VGmJ6r5ZA&6-h!gvJ#=uXJ{o#F>p*{C8Q4g zD=w&#KU8uE-z+iLHEfGCC4}VVT=}lzF=DzJWwh=vs?3&@DOmw3Wf!w^W#zMJrC3dl7bCUcQ?xX2XUlUn!r^4IW?lQGBceA2HWzZ z?&F#tdt7I{p+@|eEAZtfDDg;@L#tg;zM{PSF|%%)EK^-)+#=AkA2Rc{UN>RVZe|{w zwXC(KRczbSiRom-^%-WZ85U!FW*shoX*1Kan@|cjNX^ZBF%x8*slp&2o#hFo%k|8L zU2!u3s-8f*+4mYK(oVx4qqf$s_BgTJs?8xJV22MuxmRJiQ^0o62_8Pi6GwQWxz@tz zHclVn^ht8$r(3(XeqL%NQ|)Bx5T{PT7wLk9GysAa)@d5rzK6U}5Bo-M5Y7J4_B`Gn zUQ@)mL^N`7T+O~go;&Y@c+fjOMP9OZ07w8RM4gw2MlZ(RhdK{>wLX=$rHy!asW})* z{X4}MBQz8J)=+-`4e;lM0Cq8eUCq`>%})Z<8jQP|t5ZLIcJLE6OmvGI9#ds5n&ZbS zb)!ZZ_XkYk0y6wKahyEB!B4I+ufXR5>;|(1M3YL5`LQ5?k4>90Up6ckK$5dOTa9p0 zDWCicTkVX1JXBA2mL<} GlDz{N8)uB@;cSXO{D!brHVtxX#Z zCU~|LLGYc)`N`Ul3SBdaN&+TV2EZi+KA=^yzpq6Ar$pu1D)F^&Ws)^UiWnC~?@|`P lV>IW=sKEKMK6jI~wz8>U<3`vhcJ_0G&yZ63Aw9SuYG2JpLzw^o literal 0 HcmV?d00001 diff --git a/bootcamp/materials/3-spark-fundamentals/src/tests/__pycache__/conftest.cpython-311-pytest-7.4.4.pyc b/bootcamp/materials/3-spark-fundamentals/src/tests/__pycache__/conftest.cpython-311-pytest-7.4.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ee31dff8fb071fe8b24d3d1d5108b6c57a063267 GIT binary patch literal 904 zcmZ`%y>HV%6u+}$J58DvAr%S(1c@a>;(--al_+Zv%9bU%+Ly$Qzqq^522?ePGE_`# zT{{(_@~1GgQikf5ARz{}plqFZ=fqKi#M$>ge(&Rc@9ZyyLJq+i$+xZVpnobSUHZb9 zwZS+;E^@Jt>NwF_pgS5yL8fltdBm)n5Yc=q$kwwMX^5H!YiTQ2|CYJH2wlRSFV`5M z3otKJ0M&CYuA!3oTOrjFmg}{cuuhF~?nR-r_}qYi!JR0k&ax5=#Z~RuClF^yfK1oH z^2~EB#qMesuQEGN=f0Z+ll_yGSqU$k)rnvly($eqa)>WYr|t2Wlnkc&OKZRD`7UMB z3T0MQSpYoVw4E_70p!V+kxGV0%|wgl!YX8=?8l+a=HNx1-JKzAdS~y ztFa$N!XZIyyMUBw*z!V3S-A}b5bD^=cmSQ5M|^I-C<7(dDL1>J3ulKyft)$Epd4B| zQP@;gCGNqct4wwe=%~?o1w^~Si`RrZc;x#UgadE0;@YWQ8_@g83*$R@t37x-W>g7fN literal 0 HcmV?d00001 diff --git a/bootcamp/materials/3-spark-fundamentals/src/tests/__pycache__/test_monthly_user_site_hits.cpython-311-pytest-7.4.4.pyc b/bootcamp/materials/3-spark-fundamentals/src/tests/__pycache__/test_monthly_user_site_hits.cpython-311-pytest-7.4.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b15c10cc67210f3c45c3d9ce7e1b5815649f7814 GIT binary patch literal 2005 zcmah~&2Jk;6rZ)%U+a80uHvRmA*P}-ro?X2NaTPJpcYXoQlUZ)zN|JoV|&~EFf-#8 zM>h2#e}E52Tq6zvl>Px6IdZfsOSML-REbk=MrkkQ!kcxo*hxcXXP;+(@4cBf^L}sq z%k;E{pzVmSEB{0h`b&NsHTCu2@Bs{dLKtDiMkU4n4LM;mq##EvMHHzC+0kzh4rA4h zIq_25$0ByZ(MpDotbMF3Kklr13^x5z6}q z(iKMUVNZ8FmsjnEUT1{r%;H3^TAb;e8ZIk))G@f_xnQfghC?u~*K8tYz8X2*1@kW~ zzWuI0iO#q|c^2GtgHofB#Rkk)1I&_hi1efv`?ONozB%sc)}7JfWs5SdW0)d<7%@E; zPhz}kQ6Dmu(Lwk!4l)ey;SQj1*h)*mp;m~G*))|39P!UeQ+cfJf$hGu_uC1p$eC85 z3OZvRu)xvdD^=81xQTYhqB@EJp=Njw@cls7Qh8)di<)XvnT)#?;ju9b1;;SZ;jy*{ z)Z0IzADXZU;iP4O-g{$Hwm5ITWmZr^zsMTzr+g^PpCQpf68gT=RoF*Tw6jX=DR;-z+$!IW>18)O#V z;QfEfVQwKEZGSmjLvxv@sVh%XS9b69QY-z`O8eHc)cWu9exmI@?RH_tWd`+t1WY zr?GprrxyBZp?lO1;k;0OM#Q)3md!1fiK$O&4L$g}pw}AmxC!X)Z`wlqIiq({q5hgo>qm-WDtP1$pu>0(5=_h@|P+HZT=d zU{qF~UoL)O___WK(X2$@2JtHXk>laIO+Kbq;Zqhq>wp-B6-60HI=uPmqFm6Qqs{JQ zAE3+K$^Lw9v2(F|>4R?Z+uqz}e{QoqGnilMl)Blq?uS40<{$OvA9YcB7%eKrAv!7i Gi2nsuEhqB; literal 0 HcmV?d00001 diff --git a/bootcamp/materials/3-spark-fundamentals/src/tests/__pycache__/test_player_scd.cpython-311-pytest-7.4.4.pyc b/bootcamp/materials/3-spark-fundamentals/src/tests/__pycache__/test_player_scd.cpython-311-pytest-7.4.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..20a8058202e31f0b826c804a5f22b2cb24ed0eb1 GIT binary patch literal 1695 zcmah}%}*Og6rZ)%_S%@>m=6`H2R90$B*j(&C6|g;6{Jd{M6G}xeCTS}8JjKp;m(ZP z+6Bpn9Jo~CmL7eguDI~0c*#mZE1@2$9CEY7EvLL0V?LW?Jo`NF{odPsZ{Ba_@8RJL zg7G~1q55weq5q^Z82ahrQ)Nop^K&^|o6;cEI`qi3=Ff zNQ}hy0Ns}!YFxqfkKhTC{6Kt)T*IsSwzh@Z7qS?98KEt05A6GA*mg`LE}&>DcDYO2 zagjR5p_(|&_)8Ei^x7Efj!(5k=f}X94~_Zb_vveaF&7$hfbag) zUhRAt823WsUN4;(O}3u&vgqc-tK8IKZmPW*jW>b6<4U4ju)$#W1%Bs&TWM zztw)&Svt5K7!N|@!ExWR+?hWZ3yg)(SOCjzu|3rp>xh0jy_7zlY(4E|(C8CSMFUkLLHttZF&#BQT~H_(frUhEF$36zCqZbZg<-FAfS@hJOEtzn*NlV+_U_odip z1KdkRMt@_rpwMeY5HLllfh_~UY8x?&Canz{dQg--t4MO0mhS?4D2v8^_Sbo_e;sjk z_klriFB-CZ#{u5JYdMoVQAAagRL%GYu?cA%1M$}Q%JoUzp^NM@Q00;5e}d@6HBCE` z{rdl37fqkdBlLCm@;pMfx|iqC$mCA*uVVMkYA~`Ej;yt^N7;#;$Gd-YZ?6Q|)iAr- PO81gEt<*!;g-Z7w(zeID literal 0 HcmV?d00001 diff --git a/bootcamp/materials/3-spark-fundamentals/src/tests/__pycache__/test_team_vertex_job.cpython-311-pytest-7.4.4.pyc b/bootcamp/materials/3-spark-fundamentals/src/tests/__pycache__/test_team_vertex_job.cpython-311-pytest-7.4.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9568621d38ba1842c33436ad17b021df8eba2293 GIT binary patch literal 1707 zcmZ`(O=ufO6rPoKrPWHZ9ks|mq_7RtMm4fhT1X0|4YAzflsGXq3Fxwnc1H5n`=idT z+(_814mspfFukOQ9(;0LoI{SewZ|T%Acz<+7)lPlsko<{`etp(cIu91pLX8gy!qZY z`)fL_AsCPOa`l0X&|hLP7_bh<@do@oMFbJaMkOiyk2p~?A|XdEDUz^6?AR(IQ6k%M zM=hzLPO%e?R?;LCK~y6#65ov=v=7h8C?!L^N)m7BQ$%}=N@*gkpj`4uI4|WSE`4|; zLgDQ_;u!(OjmKpz(WPn1ch$bHPD#u|r8vui2DqtKj({bZkypgt~!Mu_)7n zMvdw<=GDMtQJ>4gulY%s*CIMDml@r#!i>6Wnd>5@ZdyS@$BepIZ&1uCUfm^>n9|9C zLMh;k!gH*H_9+U^*@#3U0wSW2*lrA#@ah3X@Z?ZID!!nQ9*#FZ7S=q6 z7Ak9$xfpoaEEGMn?f__hK~!ffxK*R`EVdt2KBwG@M@1Ds?FfFB5woDi)W-{~bgN zy;f6CmbaDd=FS(-m;NYr)Wxp4cyOxxe&>f5BY(;r^=?WBEP$+~|xgbjKE2i?7v8Z+xP6W&BY8pm%k;H!;(joayP){bX!n zq>qG%YYFXd1mYhd`q9*QtaYzHh2EKXm6>^&nb{ldWNvmdH(OsH$l2}2&g_ezEf+g- zu`3thWy4m+BN=P=vJONz=1!U<;)6nczl9#E_^V z@V_B;O=xuxZ`98mkJN4YIm^RR+(Z8-5dEkmNj=e<%YSV&Gn|L$R{P@Yp=<4n^DsUB ur1W#DJ$<{Ap6{mTTUsxErPbV?Zcp9s#FxAA<(Ax!Wu*nFk1m&C&Hn-`ed-wi literal 0 HcmV?d00001 From 7fbc02ecbe26b1dc2eee28e74e31039b49343da5 Mon Sep 17 00:00:00 2001 From: Lujein Date: Fri, 20 Dec 2024 20:18:23 +0100 Subject: [PATCH 14/16] flink_lab_notes --- .../4-apache-flink-training/example.env | 7 +++-- .../sql/creating_postgres_sink_tables.sql | 19 +++++++++++++ .../4-apache-flink-training/sql/draft.sql | 24 ++++++++++++++++ .../src/job/aggregation_job.py | 20 +++++++------ .../src/job/start_job.py | 28 +++++++++++++++---- 5 files changed, 81 insertions(+), 17 deletions(-) create mode 100644 bootcamp/materials/4-apache-flink-training/sql/creating_postgres_sink_tables.sql create mode 100644 bootcamp/materials/4-apache-flink-training/sql/draft.sql diff --git a/bootcamp/materials/4-apache-flink-training/example.env b/bootcamp/materials/4-apache-flink-training/example.env index 7a5bc5ce..0665d28c 100644 --- a/bootcamp/materials/4-apache-flink-training/example.env +++ b/bootcamp/materials/4-apache-flink-training/example.env @@ -1,6 +1,7 @@ -KAFKA_WEB_TRAFFIC_SECRET="" -KAFKA_WEB_TRAFFIC_KEY=" -IP_CODING_KEY="MAKE AN ACCOUNT AT https://www.ip2location.io/ TO GET KEY" +KAFKA_WEB_TRAFFIC_SECRET="Y05ZLtvCqopUbMkG2LcC24MUWocNuTYVKp1pf1U7YrkjJg9VBS1PBdGuSt3rx+mD" +KAFKA_WEB_TRAFFIC_KEY="CAKHHIO74VLR7LYK" +IP_CODING_KEY= "46F75799A183250B4C0C5B370911B524" +# "MAKE AN ACCOUNT AT https://www.ip2location.io/ TO GET KEY" KAFKA_GROUP=web-events KAFKA_TOPIC=bootcamp-events-prod diff --git a/bootcamp/materials/4-apache-flink-training/sql/creating_postgres_sink_tables.sql b/bootcamp/materials/4-apache-flink-training/sql/creating_postgres_sink_tables.sql new file mode 100644 index 00000000..4042c60e --- /dev/null +++ b/bootcamp/materials/4-apache-flink-training/sql/creating_postgres_sink_tables.sql @@ -0,0 +1,19 @@ +CREATE TABLE IF NOT EXISTS processed_events ( + ip VARCHAR, + event_timestamp TIMESTAMP(3), + referrer VARCHAR, + host VARCHAR, + url VARCHAR, + geodata VARCHAR +); +CREATE table IF NOT EXISTS processed_events_aggregated_source ( + event_hour TIMESTAMP(3), + host VARCHAR, + referrer VARCHAR, + num_hits bigint +); +CREATE table IF NOT EXISTs processed_events_aggregated ( + event_hour TIMESTAMP(3), + host VARCHAR, + num_hits bigint +); \ No newline at end of file diff --git a/bootcamp/materials/4-apache-flink-training/sql/draft.sql b/bootcamp/materials/4-apache-flink-training/sql/draft.sql new file mode 100644 index 00000000..e65a49d6 --- /dev/null +++ b/bootcamp/materials/4-apache-flink-training/sql/draft.sql @@ -0,0 +1,24 @@ +-- SELECT * +-- from processed_events; +-- SELECT MIN(event_timestamp) AS oldest_time, +-- MAX(event_timestamp) AS newest_time +-- FROM processed_events; +select * +from processed_events_aggregated; +select * +from processed_events_aggregated_source; +-- SELECT geodata::json->>'country', +-- COUNT(1) +-- from processed_events +-- GROUP BY 1; +-- SELECT MIN(event_timestamp) AS oldest_time, +-- MAX(event_timestamp) AS newest_time +-- FROM processed_events; +-- # ip VARCHAR, +-- # event_time VARCHAR, +-- # referrer VARCHAR, +-- # host VARCHAR, +-- # url VARCHAR, +-- # geodata VARCHAR, +-- # window_timestamp AS TO_TIMESTAMP(event_time, '{pattern}'), +-- # WATERMARK FOR window_timestamp AS window_timestamp - INTERVAL '15' SECOND \ No newline at end of file diff --git a/bootcamp/materials/4-apache-flink-training/src/job/aggregation_job.py b/bootcamp/materials/4-apache-flink-training/src/job/aggregation_job.py index a10d89a7..65a30b05 100644 --- a/bootcamp/materials/4-apache-flink-training/src/job/aggregation_job.py +++ b/bootcamp/materials/4-apache-flink-training/src/job/aggregation_job.py @@ -45,21 +45,23 @@ def create_aggregated_events_referrer_sink_postgres(t_env): t_env.execute_sql(sink_ddl) return table_name + def create_processed_events_source_kafka(t_env): kafka_key = os.environ.get("KAFKA_WEB_TRAFFIC_KEY", "") kafka_secret = os.environ.get("KAFKA_WEB_TRAFFIC_SECRET", "") - table_name = "process_events_kafka" + table_name = "events" pattern = "yyyy-MM-dd''T''HH:mm:ss.SSS''Z''" sink_ddl = f""" CREATE TABLE {table_name} ( - ip VARCHAR, - event_time VARCHAR, + url VARCHAR, referrer VARCHAR, + user_agent VARCHAR, host VARCHAR, - url VARCHAR, - geodata VARCHAR, - window_timestamp AS TO_TIMESTAMP(event_time, '{pattern}'), - WATERMARK FOR window_timestamp AS window_timestamp - INTERVAL '15' SECOND + ip VARCHAR, + headers VARCHAR, + event_time VARCHAR, + event_timestamp AS TO_TIMESTAMP(event_time, '{pattern}'), + WATERMARK FOR event_timestamp AS event_timestamp - INTERVAL '15' SECOND ) WITH ( 'connector' = 'kafka', 'properties.bootstrap.servers' = '{os.environ.get('KAFKA_URL')}', @@ -95,7 +97,7 @@ def log_aggregation(): aggregated_sink_table = create_aggregated_events_referrer_sink_postgres(t_env) t_env.from_path(source_table)\ .window( - Tumble.over(lit(5).minutes).on(col("window_timestamp")).alias("w") + Tumble.over(lit(5).minutes).on(col("event_timestamp")).alias("w") ).group_by( col("w"), col("host") @@ -108,7 +110,7 @@ def log_aggregation(): .execute_insert(aggregated_table) t_env.from_path(source_table).window( - Tumble.over(lit(5).minutes).on(col("window_timestamp")).alias("w") + Tumble.over(lit(5).minutes).on(col("event_timestamp")).alias("w") ).group_by( col("w"), col("host"), diff --git a/bootcamp/materials/4-apache-flink-training/src/job/start_job.py b/bootcamp/materials/4-apache-flink-training/src/job/start_job.py index 3a37d2b2..92f88dda 100644 --- a/bootcamp/materials/4-apache-flink-training/src/job/start_job.py +++ b/bootcamp/materials/4-apache-flink-training/src/job/start_job.py @@ -39,7 +39,7 @@ def create_processed_events_sink_postgres(t_env): sink_ddl = f""" CREATE TABLE {table_name} ( ip VARCHAR, - event_timestamp TIMESTAMP(3), + event_timestamp TIMESTAMP(3), referrer VARCHAR, host VARCHAR, url VARCHAR, @@ -76,7 +76,8 @@ def eval(self, ip_address): state = data.get('region_name', '') city = data.get('city_name', '') return json.dumps({'country': country, 'state': state, 'city': city}) - + +# udf: user-defined function get_location = udf(GetLocation(), result_type=DataTypes.STRING()) @@ -95,7 +96,8 @@ def create_events_source_kafka(t_env): ip VARCHAR, headers VARCHAR, event_time VARCHAR, - event_timestamp AS TO_TIMESTAMP(event_time, '{pattern}') + event_timestamp AS TO_TIMESTAMP(event_time, '{pattern}'), + WATERMARK FOR event_timestamp AS event_timestamp - INTERVAL '15' SECOND ) WITH ( 'connector' = 'kafka', 'properties.bootstrap.servers' = '{os.environ.get('KAFKA_URL')}', @@ -104,7 +106,7 @@ def create_events_source_kafka(t_env): 'properties.security.protocol' = 'SASL_SSL', 'properties.sasl.mechanism' = 'PLAIN', 'properties.sasl.jaas.config' = 'org.apache.flink.kafka.shaded.org.apache.kafka.common.security.plain.PlainLoginModule required username=\"{kafka_key}\" password=\"{kafka_secret}\";', - 'scan.startup.mode' = 'latest-offset', + 'scan.startup.mode' = 'earliest-offset', 'properties.auto.offset.reset' = 'latest', 'format' = 'json' ); @@ -116,9 +118,10 @@ def create_events_source_kafka(t_env): def log_processing(): print('Starting Job!') # Set up the execution environment + # Creates an execution environment that represents the context in which the program is currently executed. env = StreamExecutionEnvironment.get_execution_environment() print('got streaming environment') - env.enable_checkpointing(10 * 1000) + env.enable_checkpointing(10 * 1000) # every 10 seconds env.set_parallelism(1) # Set up the table environment @@ -129,6 +132,7 @@ def log_processing(): # Create Kafka table source_table = create_events_source_kafka(t_env) postgres_sink = create_processed_events_sink_postgres(t_env) + kafka_sink = create_processed_events_sink_kafka(t_env) print('loading into postgres') t_env.execute_sql( f""" @@ -142,6 +146,20 @@ def log_processing(): get_location(ip) as geodata FROM {source_table} """ + ) + print('loading into kafka') + t_env.execute_sql( + f""" + INSERT INTO {kafka_sink} + SELECT + ip, + CAST(event_timestamp AS STRING) AS event_timestamp, + referrer, + host, + url, + get_location(ip) as geodata + FROM {source_table} + """ ).wait() except Exception as e: print("Writing records from Kafka to JDBC failed:", str(e)) From a9e94ab9d61314793b79679ef702664f69228700 Mon Sep 17 00:00:00 2001 From: Lujein Date: Thu, 9 Jan 2025 12:25:24 +0100 Subject: [PATCH 15/16] analytical-patterns-lab1-notes --- .../lecture-lab/funnel_analysis.sql | 30 -------- .../lecture-lab/growth_accounting.sql | 46 ------------ .../lecture-lab/lab1_1_growth_accounting.sql | 45 ++++++++++++ .../lecture-lab/lab1_2_mynotes.sql | 71 +++++++++++++++++++ .../lecture-lab/lab1_3_mynotes.sql | 71 +++++++++++++++++++ ...ysis.sql => lab1_4_retention_analysis.sql} | 0 .../lecture-lab/lab1_draft.sql | 7 ++ .../lecture-lab/lab2_1_funnel_analysis.sql | 45 ++++++++++++ .../lecture-lab/lab2_2_mynotes.sql | 27 +++++++ .../tables/user_growth_accounting.sql | 21 +++--- 10 files changed, 277 insertions(+), 86 deletions(-) delete mode 100644 bootcamp/materials/4-applying-analytical-patterns/lecture-lab/funnel_analysis.sql delete mode 100644 bootcamp/materials/4-applying-analytical-patterns/lecture-lab/growth_accounting.sql create mode 100644 bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_1_growth_accounting.sql create mode 100644 bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_2_mynotes.sql create mode 100644 bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_3_mynotes.sql rename bootcamp/materials/4-applying-analytical-patterns/lecture-lab/{retention_analysis.sql => lab1_4_retention_analysis.sql} (100%) create mode 100644 bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_draft.sql create mode 100644 bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab2_1_funnel_analysis.sql create mode 100644 bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab2_2_mynotes.sql diff --git a/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/funnel_analysis.sql b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/funnel_analysis.sql deleted file mode 100644 index d3445b85..00000000 --- a/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/funnel_analysis.sql +++ /dev/null @@ -1,30 +0,0 @@ -WITH deduped_events AS ( - SELECT - url, host, user_id,event_time - FROM events - GROUP BY 1,2,3,4 -), - clean_events AS ( - SELECT *, DATE(event_time) as event_date FROM deduped_events -WHERE user_id IS NOT NULL -ORDER BY user_id, event_time - ), - converted AS ( - SELECT ce1.user_id, - ce1.event_time, - ce1.url, - COUNT(DISTINCT CASE WHEN ce2.url = '/api/v1/user' THEN ce2.url END) as converted - FROM clean_events ce1 - JOIN clean_events ce2 - ON ce2.user_id = ce1.user_id - AND ce2.event_date = ce1.event_date - AND ce2.event_time > ce1.event_time - - GROUP BY 1, 2,3 - ) - -SELECT url, COUNT(1), CAST(SUM(converted) AS REAL)/COUNT(1) -FROM converted -GROUP BY 1 -HAVING CAST(SUM(converted) AS REAL)/COUNT(1) > 0 -AND COUNT(1) > 100 diff --git a/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/growth_accounting.sql b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/growth_accounting.sql deleted file mode 100644 index 5176ecba..00000000 --- a/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/growth_accounting.sql +++ /dev/null @@ -1,46 +0,0 @@ -WITH yesterday AS ( - SELECT * FROM users_growth_accounting - WHERE date = DATE('2023-03-09') -), - today AS ( - SELECT - CAST(user_id AS TEXT) as user_id, - DATE_TRUNC('day', event_time::timestamp) as today_date, - COUNT(1) - FROM events - WHERE DATE_TRUNC('day', event_time::timestamp) = DATE('2023-03-10') - AND user_id IS NOT NULL - GROUP BY user_id, DATE_TRUNC('day', event_time::timestamp) - ) - - SELECT COALESCE(t.user_id, y.user_id) as user_id, - COALESCE(y.first_active_date, t.today_date) AS first_active_date, - COALESCE(t.today_date, y.last_active_date) AS last_active_date, - CASE - WHEN y.user_id IS NULL THEN 'New' - WHEN y.last_active_date = t.today_date - Interval '1 day' THEN 'Retained' - WHEN y.last_active_date < t.today_date - Interval '1 day' THEN 'Resurrected' - WHEN t.today_date IS NULL AND y.last_active_date = y.date THEN 'Churned' - ELSE 'Stale' - END as daily_active_state, - CASE - WHEN y.user_id IS NULL THEN 'New' - WHEN y.last_active_date < t.today_date - Interval '7 day' THEN 'Resurrected' - WHEN - t.today_date IS NULL - AND y.last_active_date = y.date - interval '7 day' THEN 'Churned' - WHEN COALESCE(t.today_date, y.last_active_date) + INTERVAL '7 day' >= y.date THEN 'Retained' - ELSE 'Stale' - END as weekly_active_state, - COALESCE(y.dates_active, - ARRAY []::DATE[]) - || CASE - WHEN - t.user_id IS NOT NULL - THEN ARRAY [t.today_date] - ELSE ARRAY []::DATE[] - END AS date_list, - COALESCE(t.today_date, y.date + Interval '1 day') as date - FROM today t - FULL OUTER JOIN yesterday y - ON t.user_id = y.user_id diff --git a/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_1_growth_accounting.sql b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_1_growth_accounting.sql new file mode 100644 index 00000000..5e348ea4 --- /dev/null +++ b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_1_growth_accounting.sql @@ -0,0 +1,45 @@ +-- Run this code cumutively as in week 1 +INSERT INTO users_growth_accounting WITH yesterday AS ( + SELECT * + FROM users_growth_accounting + WHERE date = DATE('2023-01-14') + ), + today AS ( + SELECT CAST(user_id AS TEXT) as user_id, + DATE_TRUNC('day', event_time::timestamptz) as today_date, + COUNT(1) + FROM events + WHERE DATE_TRUNC('day', event_time::timestamptz) = DATE('2023-01-15') + AND user_id IS NOT NULL + GROUP BY user_id, + DATE_TRUNC('day', event_time::timestamptz) + ) +SELECT COALESCE(t.user_id, y.user_id) as user_id, + COALESCE(y.first_active_date, t.today_date) AS first_active_date, + COALESCE(t.today_date, y.last_active_date) AS last_active_date, + CASE + WHEN y.user_id IS NULL THEN 'New' + WHEN y.last_active_date = t.today_date - Interval '1 day' THEN 'Retained' + WHEN y.last_active_date < t.today_date - Interval '1 day' THEN 'Resurrected' + WHEN t.today_date IS NULL + AND y.last_active_date = y.date THEN 'Churned' + ELSE 'Stale' + END as daily_active_state, + CASE + WHEN y.user_id IS NULL THEN 'New' + WHEN y.last_active_date >= y.date - INTERVAL '7 day' THEN 'Retained' + WHEN y.last_active_date < t.today_date - Interval '7 day' THEN 'Resurrected' -- resurrected means that their last active day was 7 days ago or more + WHEN t.today_date IS NULL + AND y.last_active_date = y.date - interval '7 day' THEN 'Churned' + ELSE 'Stale' + END as weekly_active_state, + COALESCE( + y.dates_active, + ARRAY []::TIMESTAMPTZ [] + ) || CASE + WHEN t.user_id IS NOT NULL THEN ARRAY [CAST(t.today_date as TIMESTAMPTZ)] + ELSE ARRAY []::TIMESTAMPTZ [] + END AS dates_active, + COALESCE(t.today_date, y.date + Interval '1 day') as date +FROM today t + FULL OUTER JOIN yesterday y ON t.user_id = y.user_id; \ No newline at end of file diff --git a/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_2_mynotes.sql b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_2_mynotes.sql new file mode 100644 index 00000000..fdc075fc --- /dev/null +++ b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_2_mynotes.sql @@ -0,0 +1,71 @@ +-- Each day, how many new, retained, churned, and resurrected users are there? +-- SELECT date, +-- daily_active_state, +-- COUNT(1) +-- from users_growth_accounting +-- GROUP BY date, +-- daily_active_state; +-- ====================================================================== +-- Let us check number of rows for each date +-- select date, +-- count(1) +-- FROM users_growth_accounting +-- GROUP BY date; +-- ===================================================================== +-- this slice of data has exactly 84 rows. +-- select * +-- from users_growth_accounting +-- where date = DATE('2023-01-02') +-- and first_active_date = DATE('2023-01-01'); +-- ===================================================================== +-- here there are 1260 rows = 84 x 15 (I filled in the first 15 days only) +-- SELECT * +-- from users_growth_accounting +-- where first_active_date = DATE('2023-01-01'); +-- ===================================================================== +-- For each date, the number of count is the same: 84. +-- This is a cohort of 84 users. +-- select date, +-- count(1) +-- from users_growth_accounting +-- where first_active_date = DATE('2023-01-01') +-- GROUP BY date; +-- ===================================================================== +-- The J-Curve +select date, + count( + CASE + when daily_active_state in ('Retained', 'Resurrected', 'New') then 1 + end + ) as number_active, + count(1) as num_users_in_cohort, + cast( + count( + CASE + when daily_active_state in ('Retained', 'Resurrected', 'New') then 1 + end + ) as real + ) / count(1) as pct_active +from users_growth_accounting +where first_active_date = DATE('2023-01-01') +GROUP BY date; +-- ===================================================================== +select date - first_active_date as days_since_first_active, + count( + CASE + when daily_active_state in ('Retained', 'Resurrected', 'New') then 1 + end + ) as number_active, + count(1) as num_users_in_cohort, + cast( + count( + CASE + when daily_active_state in ('Retained', 'Resurrected', 'New') then 1 + end + ) as real + ) / count(1) as pct_active +from users_growth_accounting +where first_active_date = DATE('2023-01-01') +GROUP BY date - first_active_date; +-- The previous two queries study only one cohort of users namely +-- the ones who started on 2023-01-01. \ No newline at end of file diff --git a/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_3_mynotes.sql b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_3_mynotes.sql new file mode 100644 index 00000000..9f3805bd --- /dev/null +++ b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_3_mynotes.sql @@ -0,0 +1,71 @@ +-- here we study all cohorts of users. +-- This query is more details. +-- select date, +-- first_active_date, +-- date - first_active_date as days_since_first_active, +-- count( +-- CASE +-- when daily_active_state in ('Retained', 'Resurrected', 'New') then 1 +-- end +-- ) as number_active, +-- cast( +-- count( +-- CASE +-- when daily_active_state in ('Retained', 'Resurrected', 'New') then 1 +-- end +-- ) as real +-- ) / count(1) as pct_active, +-- count(1) +-- from users_growth_accounting +-- GROUP BY date, +-- first_active_date +-- ORDER BY date ASC, +-- first_active_date ASC; +-- -- ===================================================================== +-- select date - first_active_date as days_since_first_active, +-- count( +-- CASE +-- when daily_active_state in ('Retained', 'Resurrected', 'New') then 1 +-- end +-- ) as number_active, +-- cast( +-- count( +-- CASE +-- when daily_active_state in ('Retained', 'Resurrected', 'New') then 1 +-- end +-- ) as real +-- ) / count(1) as pct_active, +-- count(1) +-- from users_growth_accounting +-- GROUP BY date - first_active_date; +-- ==================================================== +-- let us see which day of the week is the most active +select EXTRACT( + dow + from first_active_date + ) as day_of_week, + date - first_active_date as days_since_first_active, + count( + CASE + when daily_active_state in ('Retained', 'Resurrected', 'New') then 1 + end + ) as number_active, + cast( + count( + CASE + when daily_active_state in ('Retained', 'Resurrected', 'New') then 1 + end + ) as real + ) / count(1) as pct_active, + count(1) +from users_growth_accounting +GROUP BY EXTRACT( + dow + from first_active_date + ), + date - first_active_date +order by date - first_active_date asc, + EXTRACT( + dow + from first_active_date + ) asc; \ No newline at end of file diff --git a/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/retention_analysis.sql b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_4_retention_analysis.sql similarity index 100% rename from bootcamp/materials/4-applying-analytical-patterns/lecture-lab/retention_analysis.sql rename to bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_4_retention_analysis.sql diff --git a/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_draft.sql b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_draft.sql new file mode 100644 index 00000000..33e53da0 --- /dev/null +++ b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_draft.sql @@ -0,0 +1,7 @@ +SELECT * +FROM clean_events ce1 + JOIN clean_events ce2 ON ce2.user_id = ce1.user_id + AND ce2.event_date = ce1.event_date + AND ce2.event_time > ce1.event_time +ORDER BY ce1.user_id, + ce1.event_time; \ No newline at end of file diff --git a/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab2_1_funnel_analysis.sql b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab2_1_funnel_analysis.sql new file mode 100644 index 00000000..b5833b8c --- /dev/null +++ b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab2_1_funnel_analysis.sql @@ -0,0 +1,45 @@ +WITH deduped_events AS ( + SELECT url, + host, + user_id, + event_time + FROM events + GROUP BY 1, + 2, + 3, + 4 +), +clean_events AS ( + SELECT *, + DATE(event_time) as event_date + FROM deduped_events + WHERE user_id IS NOT NULL + ORDER BY user_id, + event_time +), +converted AS ( + SELECT ce1.user_id, + ce1.event_time, + ce1.url, + COUNT( + DISTINCT CASE + WHEN ce2.url = '/api/v1/login' THEN ce2.url + END + ) as converted + FROM clean_events ce1 + JOIN clean_events ce2 ON ce2.user_id = ce1.user_id + AND ce2.event_date = ce1.event_date + AND ce2.event_time > ce1.event_time + GROUP BY 1, + -- Refers to ce1.user_id + 2, + -- Refers to ce1.event_time + 3 -- Refers to ce1.url +) +SELECT url, + COUNT(1), + CAST(SUM(converted) AS REAL) / COUNT(1) +FROM converted +GROUP BY 1 +HAVING CAST(SUM(converted) AS REAL) / COUNT(1) > 0; +-- AND COUNT(1) > 100; \ No newline at end of file diff --git a/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab2_2_mynotes.sql b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab2_2_mynotes.sql new file mode 100644 index 00000000..d88eaf74 --- /dev/null +++ b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab2_2_mynotes.sql @@ -0,0 +1,27 @@ +-- Save the clean_events table +-- CREATE TABLE clean_events AS +-- WITH deduped_events AS ( +-- SELECT url, +-- host, +-- user_id, +-- event_time +-- FROM events +-- GROUP BY 1, 2, 3, 4 +-- ), +-- clean_events AS ( +-- SELECT *, +-- DATE(event_time) AS event_date +-- FROM deduped_events +-- WHERE user_id IS NOT NULL +-- ORDER BY user_id, event_time +-- ) +-- SELECT * FROM clean_events; +-- ======================================================= +-- to check the output of the self join +SELECT * +FROM clean_events ce1 + JOIN clean_events ce2 ON ce2.user_id = ce1.user_id + AND ce2.event_date = ce1.event_date + AND ce2.event_time > ce1.event_time +ORDER BY ce1.user_id, + ce1.event_time; \ No newline at end of file diff --git a/bootcamp/materials/4-applying-analytical-patterns/tables/user_growth_accounting.sql b/bootcamp/materials/4-applying-analytical-patterns/tables/user_growth_accounting.sql index c9ca9507..58a49c45 100644 --- a/bootcamp/materials/4-applying-analytical-patterns/tables/user_growth_accounting.sql +++ b/bootcamp/materials/4-applying-analytical-patterns/tables/user_growth_accounting.sql @@ -1,10 +1,11 @@ - CREATE TABLE users_growth_accounting ( - user_id TEXT, - first_active_date DATE, - last_active_date DATE, - daily_active_state TEXT, - weekly_active_state TEXT, - dates_active DATE[], - date DATE, - PRIMARY KEY (user_id, date) - ); \ No newline at end of file +drop table users_growth_accounting; +CREATE TABLE users_growth_accounting ( + user_id TEXT, + first_active_date DATE, + last_active_date DATE, + daily_active_state TEXT, + weekly_active_state TEXT, + dates_active TIMESTAMPTZ [], + date DATE, + PRIMARY KEY (user_id, date) +); \ No newline at end of file From 3d31fee458ef74e9afddcd4ab3c986dc7a29ef48 Mon Sep 17 00:00:00 2001 From: Lujein Date: Thu, 9 Jan 2025 18:04:41 +0100 Subject: [PATCH 16/16] funnel analysis notes --- .../4-apache-flink-training/example.env | 6 +-- .../lecture-lab/lab1_draft.sql | 7 --- .../lab2_3_funnel_analysis_video.sql | 48 +++++++++++++++++++ .../lab2_4_funnel_analysis_video2.sql | 44 +++++++++++++++++ 4 files changed, 95 insertions(+), 10 deletions(-) create mode 100644 bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab2_3_funnel_analysis_video.sql create mode 100644 bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab2_4_funnel_analysis_video2.sql diff --git a/bootcamp/materials/4-apache-flink-training/example.env b/bootcamp/materials/4-apache-flink-training/example.env index 0665d28c..599a123a 100644 --- a/bootcamp/materials/4-apache-flink-training/example.env +++ b/bootcamp/materials/4-apache-flink-training/example.env @@ -1,6 +1,6 @@ -KAFKA_WEB_TRAFFIC_SECRET="Y05ZLtvCqopUbMkG2LcC24MUWocNuTYVKp1pf1U7YrkjJg9VBS1PBdGuSt3rx+mD" -KAFKA_WEB_TRAFFIC_KEY="CAKHHIO74VLR7LYK" -IP_CODING_KEY= "46F75799A183250B4C0C5B370911B524" +KAFKA_WEB_TRAFFIC_SECRET="" +KAFKA_WEB_TRAFFIC_KEY="" +IP_CODING_KEY= "" # "MAKE AN ACCOUNT AT https://www.ip2location.io/ TO GET KEY" KAFKA_GROUP=web-events diff --git a/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_draft.sql b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_draft.sql index 33e53da0..e69de29b 100644 --- a/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_draft.sql +++ b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab1_draft.sql @@ -1,7 +0,0 @@ -SELECT * -FROM clean_events ce1 - JOIN clean_events ce2 ON ce2.user_id = ce1.user_id - AND ce2.event_date = ce1.event_date - AND ce2.event_time > ce1.event_time -ORDER BY ce1.user_id, - ce1.event_time; \ No newline at end of file diff --git a/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab2_3_funnel_analysis_video.sql b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab2_3_funnel_analysis_video.sql new file mode 100644 index 00000000..06c903bc --- /dev/null +++ b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab2_3_funnel_analysis_video.sql @@ -0,0 +1,48 @@ +-- here we care only about users that come from the signup page. +-- here the query is at the USER LEVEL. Here we study the PER USER CONVERSION. +with deduped_events as ( + SELECT user_id, + url, + event_time, + DATE(event_time) as event_date + from events + where user_id is not null + and url in ('/signup', '/api/v1/login') + group by user_id, + url, + event_time, + DATE(event_time) +), +selfjoined as ( + SELECT d1.user_id, + d1.url, + d2.url as destination_url, + d1.event_time, + d2.event_time + from deduped_events d1 + join deduped_events d2 ON d1.user_id = d2.user_id + and d1.event_date = d2.event_date + and d1.event_time < d2.event_time + where d1.url = '/signup' +), +-- the selfjoined table has 358 records and 6 distinct users only +-- one user '14434123505499000000' has 353 records +-- select user_id, +-- count(1) +-- from selfjoined +-- group by user_id; +userlevel as( + select user_id, + max( + case + when destination_url = '/api/v1/login' then 1 + else 0 + end + ) as converted + from selfjoined + GROUP BY user_id -- so we don't count the same user who converted more than once. +) +select count(1) as total_users, + sum(converted) as total_converted, + cast(sum(converted) as real) / count(1) as conversion_rate +from userlevel; \ No newline at end of file diff --git a/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab2_4_funnel_analysis_video2.sql b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab2_4_funnel_analysis_video2.sql new file mode 100644 index 00000000..b25904f5 --- /dev/null +++ b/bootcamp/materials/4-applying-analytical-patterns/lecture-lab/lab2_4_funnel_analysis_video2.sql @@ -0,0 +1,44 @@ +-- at url level +with deduped_events as ( + SELECT user_id, + url, + event_time, + DATE(event_time) as event_date + from events + where user_id is not null -- and url in ('/signup', '/api/v1/login') + group by user_id, + url, + event_time, + DATE(event_time) +), +selfjoined as ( + SELECT d1.user_id, + d1.url, + d2.url as destination_url, + d1.event_time, + d2.event_time + from deduped_events d1 + join deduped_events d2 ON d1.user_id = d2.user_id + and d1.event_date = d2.event_date + and d1.event_time < d2.event_time -- where d1.url = '/signup' +), +userlevel as( + select user_id, + url, + count(1) as num_of_hits, + sum( + case + when destination_url = '/api/v1/login' then 1 + else 0 + end + ) as converted + from selfjoined + GROUP BY user_id, + url +) +select url, + sum(num_of_hits) as num_hits, + sum(converted) as num_converted, + cast(sum(converted) as real) / sum(num_of_hits) as pct_converted +from userlevel +GROUP BY url; \ No newline at end of file