diff --git a/.gitignore b/.gitignore index f32e31af..acd5e6d2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .idea/ .DS_Store +*.pyc +__pycache__/ 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/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/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..5061acf8 --- /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 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 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, + 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/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..a3c389ee --- /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/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 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 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 759265c5..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[], - scoring_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 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 bb6e32d4..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::scoring_class AS scoring_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 + 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 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..49d91f83 --- /dev/null +++ b/bootcamp/materials/2-fact-data-modeling/lecture-lab/draft.sql @@ -0,0 +1,30 @@ +-- 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; +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/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..9da301a8 --- /dev/null +++ b/bootcamp/materials/2-fact-data-modeling/lecture-lab/lab2_5_my_notes.sql @@ -0,0 +1,44 @@ +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)) +from placeholder_ints +group by user_id; +-- Some other users id to use as examples: +-- 137925124111668560 +--'406876712821807740' \ 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 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 diff --git a/bootcamp/materials/3-spark-fundamentals/docker-compose.yaml b/bootcamp/materials/3-spark-fundamentals/docker-compose.yaml index 02959f42..abce178a 100644 --- a/bootcamp/materials/3-spark-fundamentals/docker-compose.yaml +++ b/bootcamp/materials/3-spark-fundamentals/docker-compose.yaml @@ -67,8 +67,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/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 00000000..3c92d4dd Binary files /dev/null and b/bootcamp/materials/3-spark-fundamentals/homework/hw3.zip differ diff --git a/bootcamp/materials/3-spark-fundamentals/notebooks/Caching.ipynb b/bootcamp/materials/3-spark-fundamentals/notebooks/Caching.ipynb index 96552736..1cd8ab35 100644 --- a/bootcamp/materials/3-spark-fundamentals/notebooks/Caching.ipynb +++ b/bootcamp/materials/3-spark-fundamentals/notebooks/Caching.ipynb @@ -118,6 +118,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", diff --git a/bootcamp/materials/3-spark-fundamentals/notebooks/DatasetApi.ipynb b/bootcamp/materials/3-spark-fundamentals/notebooks/DatasetApi.ipynb index 125aca5a..3e72e07a 100644 --- a/bootcamp/materials/3-spark-fundamentals/notebooks/DatasetApi.ipynb +++ b/bootcamp/materials/3-spark-fundamentals/notebooks/DatasetApi.ipynb @@ -1,371 +1,581 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "22b842be-6a82-4127-b937-ead4103a92e8", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Intitializing Scala interpreter ..." - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "Spark Web UI available at http://120fa5ac9a2d:4041\n", - "SparkContext available as 'sc' (version = 3.5.1, master = local[*], app id = local-1734316680820)\n", - "SparkSession available as 'spark'\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "res0: org.apache.spark.sql.SparkSession = org.apache.spark.sql.SparkSession@442b0b59\n" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "22b842be-6a82-4127-b937-ead4103a92e8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "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" + ] + }, + "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" + } + ], + "source": [ + "spark" + ] + }, + { + "cell_type": "code", + "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": "", + "evalue": "112: error: type mismatch;", + "output_type": "error", + "traceback": [ + ":112: error: type mismatch;", + " found : Option[String]", + " required: String", + " referrer=event.referrer,", + " ^", + "" + ] + } + ], + "source": [ + "import org.apache.spark.sql.SparkSession \n", + "\n", + "val sparkSession = SparkSession.builder.appName(\"Juptyer\").getOrCreate()\n", + "\n", + "//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", + "\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", + "\n", + "//TODO Illustrate how this fails if you change from Option[Long] to Long\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", + ")\n", + "\n", + "// When should you use each type?\n", + "import sparkSession.implicits._\n", + "\n", + "// Applying this case class before hand is very powerful, enforces Nullability/non-nullability at runtime!\n", + "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\")\n", + "\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", + " .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,\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( case (row: EventWithDeviceInfo) => {\n", + "// row.browser_type = toUpperCase(row.browser_type)\n", + "// return row\n", + "//})\n", + "\n", + "\n", + "\n", + "// DataFrames give up some of the intellisense because you no longer have static typing\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", + " $\"d.browser_type\",\n", + " $\"d.os_type\",\n", + " $\"d.device_type\",\n", + " $\"e.referrer\",\n", + " $\"e.host\",\n", + " $\"e.url\",\n", + " $\"e.event_time\"\n", + " )\n", + "\n", + "//Creating temp views is a good strategy if you're leveraging SparkSQL\n", + "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", + "\"\"\")\n", + "\n", + "combinedViaDatasets.take(5)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "dd4b33aa-98c4-4f8d-8d38-f5674eb4d8ed", + "metadata": {}, + "outputs": [], + "source": [] + } ], - "source": [ - "spark" - ] - }, - { - "cell_type": "markdown", - "id": "2295da8f-3623-43ba-af46-6fe19ec9ffca", - "metadata": {}, - "source": [ - "# If something is nullabe, you need to wrap the value type in Option[] - this helps enforce assumptions about the pipeline" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "73b5384f-be28-49e3-9bcf-4b9783ba7d91", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "import org.apache.spark.sql.SparkSession\n", - "sparkSession: org.apache.spark.sql.SparkSession = org.apache.spark.sql.SparkSession@442b0b59\n", - "defined class Event\n" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import org.apache.spark.sql.SparkSession \n", - "\n", - "val sparkSession = SparkSession.builder.appName(\"Juptyer\").getOrCreate()\n", - "\n", - "//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", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "25c3320b-03ab-4969-88a7-f7771534d70c", - "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": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "val dummyData = List(\n", - " Event(user_id=Some(1), device_id=Some(2), referrer=Some(\"linkedin\"), host=\"eczachly.com\", url=\"/signup\", event_time=\"2023-01-01\"),\n", - " Event(user_id=Some(3), device_id=Some(7), referrer=Some(\"twitter\"), host=\"eczachly.com\", url=\"/signup\", event_time=\"2023-01-01\")\n", - " )\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "f7190f95-33b1-4779-8f0d-40e9046e8157", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "defined class Device\n", - "defined class EventWithDeviceInfo\n" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "//TODO Illustrate how this fails if you change from Option[Long] to Long\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": "d045ae06-0f21-42f1-a271-f455e95b0879", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "import org.apache.spark.sql.Dataset\n", - "import sparkSession.implicits._\n", - "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", - "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": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "import org.apache.spark.sql.Dataset\n", - "\n", - "import sparkSession.implicits._\n", - "\n", - "// Applying this case class before hand is very powerful, enforces Nullability/non-nullability at runtime!\n", - "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\")\n", - "\n", - "// For simple transformations, you can see that these approaches are very similar. Dataset is winning slightly because of the quality 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" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "80517409-a26e-4aa3-b383-56b928f0c9d3", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "combinedViaDatasets: org.apache.spark.sql.Dataset[EventWithDeviceInfo] = [user_id: int, device_id: int ... 7 more fields]\n" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\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(\"unknow\"),\n", - " host=event.host,\n", - " url=event.url,\n", - " event_time=event.event_time\n", - " ) }\n", - " .map { eventWithDevice =>\n", - " // Convert browser_type to uppercase while maintaining immutability\n", - " eventWithDevice.copy(browser_type = eventWithDevice.browser_type.toUpperCase)\n", - " }\n" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "3ce150e3-e5b7-4ece-8803-8189762625ea", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "EventWithDeviceInfo(1037710827,532630305,OTHER,Other,Other,unknow,www.zachwilson.tech,/,2021-03-08 17:27:24.241)\n", - "EventWithDeviceInfo(925588856,532630305,OTHER,Other,Other,unknow,www.eczachly.com,/,2021-05-10 11:26:21.247)\n", - "EventWithDeviceInfo(-1180485268,532630305,OTHER,Other,Other,unknow,admin.zachwilson.tech,/,2021-02-17 16:19:30.738)\n", - "EventWithDeviceInfo(-1044833855,532630305,OTHER,Other,Other,unknow,www.zachwilson.tech,/,2021-09-24 15:53:14.466)\n", - "EventWithDeviceInfo(747494706,532630305,OTHER,Other,Other,unknow,www.zachwilson.tech,/,2021-09-26 16:03:17.535)\n", - "+-----------+---------+------------+-------+-----------+--------+--------------------+---+--------------------+\n", - "| user_id|device_id|browser_type|os_type|device_type|referrer| host|url| event_time|\n", - "+-----------+---------+------------+-------+-----------+--------+--------------------+---+--------------------+\n", - "| 1037710827|532630305| Other| Other| Other| NULL| www.zachwilson.tech| /|2021-03-08 17:27:...|\n", - "| 925588856|532630305| Other| Other| Other| NULL| www.eczachly.com| /|2021-05-10 11:26:...|\n", - "|-1180485268|532630305| Other| Other| Other| NULL|admin.zachwilson....| /|2021-02-17 16:19:...|\n", - "|-1044833855|532630305| Other| Other| Other| NULL| www.zachwilson.tech| /|2021-09-24 15:53:...|\n", - "| 747494706|532630305| Other| Other| Other| NULL| www.zachwilson.tech| /|2021-09-26 16:03:...|\n", - "+-----------+---------+------------+-------+-----------+--------+--------------------+---+--------------------+\n", - "only showing top 5 rows\n", - "\n", - "+-----------+---------+------------+-------+-----------+--------+--------------------+---+--------------------+\n", - "| user_id|device_id|browser_type|os_type|device_type|referrer| host|url| event_time|\n", - "+-----------+---------+------------+-------+-----------+--------+--------------------+---+--------------------+\n", - "| 1037710827|532630305| Other| Other| Other| NULL| www.zachwilson.tech| /|2021-03-08 17:27:...|\n", - "| 925588856|532630305| Other| Other| Other| NULL| www.eczachly.com| /|2021-05-10 11:26:...|\n", - "|-1180485268|532630305| Other| Other| Other| NULL|admin.zachwilson....| /|2021-02-17 16:19:...|\n", - "|-1044833855|532630305| Other| Other| Other| NULL| www.zachwilson.tech| /|2021-09-24 15:53:...|\n", - "| 747494706|532630305| Other| Other| Other| NULL| www.zachwilson.tech| /|2021-09-26 16:03:...|\n", - "+-----------+---------+------------+-------+-----------+--------+--------------------+---+--------------------+\n", - "only showing top 5 rows\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "combinedViaDataFrames: org.apache.spark.sql.DataFrame = [user_id: int, device_id: int ... 7 more fields]\n", - "combinedViaSparkSQL: org.apache.spark.sql.DataFrame = [user_id: int, device_id: int ... 7 more fields]\n", - "rows: Array[EventWithDeviceInfo] = Array(EventWithDeviceInfo(1037710827,532630305,OTHER,Other,Other,unknow,www.zachwilson.tech,/,2021-03-08 17:27:24.241), EventWithDeviceInfo(925588856,532630305,OTHER,Other,Other,unknow,www.eczachly.com,/,2021-05-10 11:26:21.247), EventWithDeviceInfo(-1180485268,532630305,OTHER,Other,Other,unknow,admin.zachwilson.tech,/,2021-02-17 16:19:30.738), EventWithDeviceInfo(-1044833855,532630305,OTHER,Other,Other,unknow,www.zachwilson.tech,/,2021-09-24 15:53:14.466), EventWithDeviceInfo(747494706,532630305,OTHER,Other,Other,unknow,www.zachwilson.tech,/,2021-...\n" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "// DataFrames give up some of the intellisense because you no longer have static typing\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", - " $\"d.browser_type\",\n", - " $\"d.os_type\",\n", - " $\"d.device_type\",\n", - " $\"e.referrer\",\n", - " $\"e.host\",\n", - " $\"e.url\",\n", - " $\"e.event_time\"\n", - " )\n", - "\n", - "//Creating temp views is a good strategy if you're leveraging SparkSQL\n", - "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", - "\"\"\")\n", - "\n", - "\n", - "val rows= combinedViaDatasets.take(5)\n", - "rows.foreach(println)\n", - "combinedViaDataFrames.show(5)\n", - "combinedViaSparkSQL.show(5)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1db45765-b3d1-4059-92f1-e0414f502eb7", - "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 -} + "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 +} \ 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 968c4b5b..38cf685d 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,141 +1,4350 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "374411c5-a48f-4739-9031-d638638633a3", - "metadata": {}, - "outputs": [], - "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", - " .option(\"inferSchema\", \"true\")\n", - " .csv(\"/home/iceberg/data/matches.csv\")\n", - "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.conf.set(\"spark.sql.autoBroadcastJoinThreshold\", \"-1\")\n", - "\n", - "matchesBucketed.createOrReplaceTempView(\"matches\")\n", - "matchDetailsBucketed.createOrReplaceTempView(\"match_details\")\n", - "\n", - "spark.sql(\"\"\"\n", - " SELECT * FROM bootcamp.match_details_bucketed mdb JOIN bootcamp.matches_bucketed md \n", - " ON mdb.match_id = md.match_id\n", - " AND md.completion_date = DATE('2016-01-01')\n", - " \n", - "\"\"\").explain()\n", - "\n", - "\n", - "spark.sql(\"\"\"\n", - " SELECT * FROM match_details mdb JOIN matches md ON mdb.match_id = md.match_id\n", - " \n", - "\"\"\").explain()\n", - "\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", - "\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", - "\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", - "\n", - "// matches.withColumn(\"ds\", split($\"completion_date\", \" \").getItem(0)).write.mode(\"overwrite\").insertInto(\"matches_bucketed\")\n", - "\n", - "// spark.sql(bucketedSQL)\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fc8adb02-d5bd-4e84-a671-48991772d233", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6f1eecb6-ca9a-4b5c-b046-b3a0dd1ff3bf", - "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" - } + "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": "08500443-56f5-4223-9e37-e99b8954cab6", + "metadata": {}, + "outputs": [ + { + "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": [ + "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", + "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", + "\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", + "\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", + "\n", + "# // matches.withColumn(\"ds\", split($\"completion_date\", \" \").getItem(0)).write.mode(\"overwrite\").insertInto(\"matches_bucketed\")\n", + "\n", + "# // spark.sql(bucketedSQL)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fc8adb02-d5bd-4e84-a671-48991772d233", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6f1eecb6-ca9a-4b5c-b046-b3a0dd1ff3bf", + "metadata": {}, + "outputs": [], + "source": [] + } ], - "mimetype": "text/x-scala", - "name": "scala", - "pygments_lexer": "scala", - "version": "0.4.1" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "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 +} \ No newline at end of file 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 299b4797..239f3dab 100644 --- a/bootcamp/materials/3-spark-fundamentals/notebooks/event_data_pyspark.ipynb +++ b/bootcamp/materials/3-spark-fundamentals/notebooks/event_data_pyspark.ipynb @@ -1,655 +1,946 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "81cca085-dba2-42eb-a13b-fa64b6e86583", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "24/12/11 15:50:40 WARN SparkSession: Using an existing Spark session; only runtime SQL configurations will take effect.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-----------+----------+--------+--------------------+----------+--------------------+-------------------+\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" - ] - } + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "81cca085-dba2-42eb-a13b-fa64b6e86583", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "24/12/06 13:12:36 WARN SparkSession: Using an existing Spark session; only runtime SQL configurations will take effect.\n", + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+-----------+----------+--------+--------------------+----------+--------------------+-------------------+\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" + ] + } + ], + "source": [ + "from pyspark.sql import SparkSession\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()\n", + "# df.join(df, lit(1)==lit(1)).take(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "dce068df-3e21-429a-8716-abdd13e9406c", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[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", + "| 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" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "sorted = df.repartition(10, col(\"event_date\")) \\\n", + " .sortWithinPartitions(col(\"event_date\"), col(\"host\")) \\\n", + " .withColumn(\"event_time\", col(\"event_time\").cast(\"timestamp\")) \n", + "\n", + "sorted.show()\n", + " # col(\"browser_family\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d7afa85d-b9b7-4f84-beaf-415fed905d56", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[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", + "| 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" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "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()" + ] + }, + { + "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": 3, + "id": "d800dca7-2737-4192-b5c0-c1806c105e15", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
" + ], + "text/plain": [ + "++\n", + "||\n", + "++\n", + "++" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%sql\n", + "\n", + "CREATE DATABASE IF NOT EXISTS bootcamp" + ] + }, + { + "cell_type": "code", + "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", + "
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": 5, + "id": "e83cd813-d5c0-4d67-8285-849b882b8bfa", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
" + ], + "text/plain": [ + "++\n", + "||\n", + "++\n", + "++" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%sql\n", + "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" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "d1b197a9-1b63-4130-acbe-01418eede0e5", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
" + ], + "text/plain": [ + "++\n", + "||\n", + "++\n", + "++" + ] + }, + "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": 6, + "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": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%sql\n", + "\n", + "CREATE TABLE IF NOT EXISTS bootcamp.events (\n", + " user_id NUMERIC,\n", + " device_id NUMERIC,\n", + " referrer 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 (event_date);" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "c40b143f-295e-4875-bd7f-12409312b800", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
" + ], + "text/plain": [ + "++\n", + "||\n", + "++\n", + "++" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%sql\n", + "\n", + "\n", + "CREATE TABLE IF NOT EXISTS bootcamp.events_sorted (\n", + " user_id NUMERIC,\n", + " device_id NUMERIC,\n", + " referrer STRING,\n", + " host STRING,\n", + " url STRING,\n", + " event_time TIMESTAMP,\n", + " event_date DATE\n", + ")\n", + "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": 3, + "id": "00c86e79-a911-464c-ad58-acc92859dcc6", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
" + ], + "text/plain": [ + "++\n", + "||\n", + "++\n", + "++" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%sql\n", + "CREATE TABLE IF NOT EXISTS bootcamp.events_unsorted (\n", + " user_id NUMERIC,\n", + " device_id NUMERIC,\n", + " referrer STRING,\n", + " host STRING,\n", + " url STRING,\n", + " event_time TIMESTAMP,\n", + " event_date DATE\n", + ")\n", + "USING iceberg\n", + " PARTITIONED BY (event_date);" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "2c1254bc-9ecf-4c86-bfd9-de81ecfbb78b", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "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(\"bootcamp.events_unsorted\")\n", + "first_sort_df.write.mode(\"overwrite\").saveAsTable(\"bootcamp.events_sorted\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "fd3f0c27-fcd4-4e48-9718-b38d27644bf6", + "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", + " \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", + " \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", + "| 4955502 | 4 | sorted |\n", + "| 5050842 | 4 | unsorted |\n", + "+---------+-----------+----------+" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%sql\n", + "\n", + "SELECT SUM(file_size_in_bytes) as size, COUNT(1) as num_files, 'sorted' \n", + "FROM demo.bootcamp.events_sorted.files\n", + "\n", + "UNION ALL\n", + "SELECT SUM(file_size_in_bytes) as size, COUNT(1) as num_files, 'unsorted' \n", + "FROM demo.bootcamp.events_unsorted.files\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "a93db4d6-ac15-4d0e-83da-77b93ad618da", + "metadata": {}, + "outputs": [ + { + "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": [ + "%%sql\n", + "SELECT SUM(file_size_in_bytes) as size, COUNT(1) as num_files FROM demo.bootcamp.events.files;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "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", + "execution_count": 4, + "id": "674f173d-86ca-4637-9332-37ce04a81451", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count(1)
3665
" + ], + "text/plain": [ + "+----------+\n", + "| count(1) |\n", + "+----------+\n", + "| 3665 |\n", + "+----------+" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "591ba0b7-2e6f-420a-960d-95e5734b0166", + "metadata": {}, + "outputs": [], + "source": [] + } ], - "source": [ - "from pyspark.sql import SparkSession\n", - "from pyspark.sql.functions import expr, col\n", - "spark = SparkSession.builder.appName(\"Jupyter\").getOrCreate()\n", - "\n", - "spark\n", - "\n", - "events = spark.read.option(\"header\", \"true\").csv(\"/home/iceberg/data/events.csv\").withColumn(\"event_date\", expr(\"DATE_TRUNC('day', event_time)\"))\n", - "devices = spark.read.option(\"header\",\"true\").csv(\"/home/iceberg/data/devices.csv\")\n", - "\n", - "df = events.join(devices,on=\"device_id\",how=\"left\")\n", - "df = df.withColumnsRenamed({'browser_type': 'browser_family', 'os_type': 'os_family'})\n", - "\n", - "df.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "dce068df-3e21-429a-8716-abdd13e9406c", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-----------+-----------+--------------------+--------------------+--------------------+--------------------+-------------------+\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", - "+-----------+-----------+--------------------+--------------------+--------------------+--------------------+-------------------+\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" - ] - } - ], - "source": [ - "sorted = df.repartition(10, col(\"event_date\"))\\\n", - " .sortWithinPartitions(col(\"event_date\"), col(\"host\"))\\\n", - " .withColumn(\"event_time\", col(\"event_time\").cast(\"timestamp\")) \n", - "\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", - "\n", - "sorted.show()\n", - "sortedTwo.show()\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e75099ce-0e80-4903-8d3e-e4842a9a99f7", - "metadata": {}, - "outputs": [], - "source": [ - "# .sortWithinPartitions() sorts within partitions, whereas .sort() is a global sort, which is very slow\n", - "\n", - "# Note - exchange is synonymous with Shuffle" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "5cc0bb63-2ef0-4a53-af25-881fbd785d55", - "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#288, event_date#29]\n", - " +- Sort [event_date#29 ASC NULLS FIRST, host#20 ASC NULLS FIRST], false, 0\n", - " +- Exchange hashpartitioning(event_date#29, 10), REPARTITION_BY_NUM, [plan_id=294]\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", - "== 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#296, 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=316]\n", - " +- Exchange hashpartitioning(event_date#29, 10), REPARTITION_BY_NUM, [plan_id=312]\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 = df.repartition(10, col(\"event_date\"))\\\n", - " .sortWithinPartitions(col(\"event_date\"), col(\"host\"))\\\n", - " .withColumn(\"event_time\", col(\"event_time\").cast(\"timestamp\")) \n", - "\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", - "\n", - "sorted.explain()\n", - "sortedTwo.explain()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "d800dca7-2737-4192-b5c0-c1806c105e15", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
" - ], - "text/plain": [ - "++\n", - "||\n", - "++\n", - "++" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "%%sql\n", - "\n", - "CREATE DATABASE IF NOT EXISTS bootcamp" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "e83cd813-d5c0-4d67-8285-849b882b8bfa", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
" - ], - "text/plain": [ - "++\n", - "||\n", - "++\n", - "++" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "%%sql\n", - "\n", - "DROP TABLE IF EXISTS bootcamp.events" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "b403139c-f342-426a-a6de-81cd86d1cd73", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
" - ], - "text/plain": [ - "++\n", - "||\n", - "++\n", - "++" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "%%sql\n", - "\n", - "DROP TABLE IF EXISTS bootcamp.events_sorted" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "d1b197a9-1b63-4130-acbe-01418eede0e5", "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
" - ], - "text/plain": [ - "++\n", - "||\n", - "++\n", - "++" - ] - }, - "execution_count": 22, - "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 (years(event_date));\n" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "c40b143f-295e-4875-bd7f-12409312b800", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
" - ], - "text/plain": [ - "++\n", - "||\n", - "++\n", - "++" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "%%sql\n", - "\n", - "\n", - "CREATE TABLE IF NOT EXISTS bootcamp.events_sorted (\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 (years(event_date));" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "00c86e79-a911-464c-ad58-acc92859dcc6", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
" - ], - "text/plain": [ - "++\n", - "||\n", - "++\n", - "++" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "%%sql\n", - "\n", - "\n", - "CREATE TABLE IF NOT EXISTS bootcamp.events_unsorted (\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 (year(event_date));" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "2c1254bc-9ecf-4c86-bfd9-de81ecfbb78b", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - } - ], - "source": [ - "\n", - "start_df = df.repartition(4, col(\"event_date\")).withColumn(\"event_time\", col(\"event_time\").cast(\"timestamp\")) \\\n", - " \n", - "first_sort_df = start_df.sortWithinPartitions(col(\"event_date\"), col(\"host\"))\n", - "\n", - "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": 121, - "id": "d207a11b-b0a4-4662-bbe9-747d8f67be7d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
sizenum_filessorted
28969204sorted
32115344unsorted
" - ], - "text/plain": [ - "+---------+-----------+----------+\n", - "| size | num_files | sorted |\n", - "+---------+-----------+----------+\n", - "| 2896920 | 4 | sorted |\n", - "| 3211534 | 4 | unsorted |\n", - "+---------+-----------+----------+" - ] - }, - "execution_count": 121, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "%%sql\n", - "\n", - "SELECT SUM(file_size_in_bytes) as size, COUNT(1) as num_files, 'sorted' \n", - "FROM demo.bootcamp.events_sorted.files\n", - "\n", - "UNION ALL\n", - "SELECT SUM(file_size_in_bytes) as size, COUNT(1) as num_files, 'unsorted' \n", - "FROM demo.bootcamp.events_unsorted.files\n", - "\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "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" - } - ], - "source": [ - "%%sql\n", - "SELECT SUM(file_size_in_bytes) as size, COUNT(1) as num_files FROM demo.bootcamp.events.files;" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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", - "execution_count": 4, - "id": "674f173d-86ca-4637-9332-37ce04a81451", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
count(1)
3665
" - ], - "text/plain": [ - "+----------+\n", - "| count(1) |\n", - "+----------+\n", - "| 3665 |\n", - "+----------+" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "591ba0b7-2e6f-420a-960d-95e5734b0166", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 + "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" + } }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.18" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file 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/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) diff --git a/bootcamp/materials/4-apache-flink-training/example.env b/bootcamp/materials/4-apache-flink-training/example.env index 7a5bc5ce..599a123a 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="" +KAFKA_WEB_TRAFFIC_KEY="" +IP_CODING_KEY= "" +# "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)) 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..e69de29b 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/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 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