Skip to content

Commit

Permalink
Fixes bug in time_slices to work with large queries
Browse files Browse the repository at this point in the history
  • Loading branch information
sfc-gh-afedorov committed Oct 22, 2019
1 parent 058ea1d commit 72c72f1
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 4 deletions.
25 changes: 25 additions & 0 deletions migrations/v1_8_6-v1_8_8.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
## Bug fixes in data UDTF's

Time slices would be buggy when running as part of a large query. To fix them, please run —

~~~
USE SCHEMA data;
CREATE OR REPLACE FUNCTION time_slices (n NUMBER, s TIMESTAMP_NTZ, e TIMESTAMP_NTZ)
RETURNS TABLE ( slice_start TIMESTAMP_NTZ, slice_end TIMESTAMP_NTZ )
AS '
SELECT DATEADD(sec, DATEDIFF(sec, s, e) * ROW_NUMBER() OVER (ORDER BY SEQ4()) / n, s) AS slice_start
, DATEADD(sec, DATEDIFF(sec, s, e) * 1 / n, slice_start) AS slice_end
FROM TABLE(GENERATOR(ROWCOUNT => n))
'
;
CREATE OR REPLACE FUNCTION time_slices (n NUMBER, s TIMESTAMP_LTZ, e TIMESTAMP_LTZ)
RETURNS TABLE ( slice_start TIMESTAMP_LTZ, slice_end TIMESTAMP_LTZ )
AS '
SELECT DATEADD(sec, DATEDIFF(sec, s, e) * ROW_NUMBER() OVER (ORDER BY SEQ4()) / n, s) AS slice_start
, DATEADD(sec, DATEDIFF(sec, s, e) * 1 / n, slice_start) AS slice_end
FROM TABLE(GENERATOR(ROWCOUNT => n))
'
;
~~~
2 changes: 1 addition & 1 deletion src/runners/tests/run_alerts.py
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ def test_alert_runners_processor_and_dispatcher(
assert len(query_rule_run_record) == 7 # 3 from samples + 4 test alert queries

assert query_rule_run_record[0]['QUERY_NAME'] == 'ACTIVITY_BY_ADMIN_ALERT_QUERY'
queries_by_admin = 57
queries_by_admin = 58
assert query_rule_run_record[0]['NUM_ALERTS_CREATED'] == queries_by_admin

assert (
Expand Down
15 changes: 12 additions & 3 deletions src/scripts/installer-queries/create-udtfs.sql.fmt
Original file line number Diff line number Diff line change
@@ -1,9 +1,18 @@
USE SCHEMA data;

CREATE OR REPLACE FUNCTION time_slices (n NUMBER, s TIMESTAMP, e TIMESTAMP)
RETURNS TABLE ( slice_start TIMESTAMP, slice_end TIMESTAMP )
CREATE FUNCTION IF NOT EXISTS time_slices (n NUMBER, s TIMESTAMP_NTZ, e TIMESTAMP_NTZ)
RETURNS TABLE ( slice_start TIMESTAMP_NTZ, slice_end TIMESTAMP_NTZ )
AS '
SELECT DATEADD(sec, DATEDIFF(sec, s, e) * ROW_NUMBER() OVER (ORDER BY SEQ4()) / n, s) AS slice_start
, DATEADD(sec, DATEDIFF(sec, s, e) * 1 / n, slice_start) AS slice_end
FROM TABLE(GENERATOR(ROWCOUNT => n))
'
;

CREATE FUNCTION IF NOT EXISTS time_slices (n NUMBER, s TIMESTAMP_LTZ, e TIMESTAMP_LTZ)
RETURNS TABLE ( slice_start TIMESTAMP_LTZ, slice_end TIMESTAMP_LTZ )
AS '
SELECT DATEADD(sec, DATEDIFF(sec, s, e) * SEQ4() / n, s) AS slice_start
SELECT DATEADD(sec, DATEDIFF(sec, s, e) * ROW_NUMBER() OVER (ORDER BY SEQ4()) / n, s) AS slice_start
, DATEADD(sec, DATEDIFF(sec, s, e) * 1 / n, slice_start) AS slice_end
FROM TABLE(GENERATOR(ROWCOUNT => n))
'
Expand Down

0 comments on commit 72c72f1

Please sign in to comment.