|
33 | 33 | import java.sql.Connection; |
34 | 34 | import java.sql.Statement; |
35 | 35 |
|
| 36 | +import static org.apache.iotdb.db.it.utils.TestUtils.tableAssertTestFail; |
36 | 37 | import static org.apache.iotdb.db.it.utils.TestUtils.tableResultSetEqualTest; |
37 | 38 | import static org.junit.Assert.fail; |
38 | 39 |
|
@@ -226,4 +227,108 @@ public void testCapacityFunction() { |
226 | 227 | retArray, |
227 | 228 | DATABASE_NAME); |
228 | 229 | } |
| 230 | + |
| 231 | + @Test |
| 232 | + public void testTumbleFunction() { |
| 233 | + // TUMBLE (10m) |
| 234 | + String[] expectedHeader = |
| 235 | + new String[] {"window_start", "window_end", "time", "stock_id", "price", "s1"}; |
| 236 | + String[] retArray = |
| 237 | + new String[] { |
| 238 | + "2021-01-01T09:00:00.000Z,2021-01-01T09:10:00.000Z,2021-01-01T09:05:00.000Z,AAPL,100.0,101.0,", |
| 239 | + "2021-01-01T09:00:00.000Z,2021-01-01T09:10:00.000Z,2021-01-01T09:07:00.000Z,AAPL,103.0,101.0,", |
| 240 | + "2021-01-01T09:00:00.000Z,2021-01-01T09:10:00.000Z,2021-01-01T09:09:00.000Z,AAPL,102.0,101.0,", |
| 241 | + "2021-01-01T09:00:00.000Z,2021-01-01T09:10:00.000Z,2021-01-01T09:06:00.000Z,TESL,200.0,102.0,", |
| 242 | + "2021-01-01T09:00:00.000Z,2021-01-01T09:10:00.000Z,2021-01-01T09:07:00.000Z,TESL,202.0,202.0,", |
| 243 | + "2021-01-01T09:10:00.000Z,2021-01-01T09:20:00.000Z,2021-01-01T09:15:00.000Z,TESL,195.0,332.0,", |
| 244 | + }; |
| 245 | + tableResultSetEqualTest( |
| 246 | + "SELECT * FROM TUMBLE(DATA => bid, TIMECOL => 'time', SIZE => 10m) ORDER BY stock_id, time", |
| 247 | + expectedHeader, |
| 248 | + retArray, |
| 249 | + DATABASE_NAME); |
| 250 | + |
| 251 | + // TUMBLE (10m) + GROUP BY |
| 252 | + expectedHeader = new String[] {"window_start", "window_end", "stock_id", "sum"}; |
| 253 | + retArray = |
| 254 | + new String[] { |
| 255 | + "2021-01-01T09:00:00.000Z,2021-01-01T09:10:00.000Z,AAPL,305.0,", |
| 256 | + "2021-01-01T09:00:00.000Z,2021-01-01T09:10:00.000Z,TESL,402.0,", |
| 257 | + "2021-01-01T09:10:00.000Z,2021-01-01T09:20:00.000Z,TESL,195.0,", |
| 258 | + }; |
| 259 | + tableResultSetEqualTest( |
| 260 | + "SELECT window_start, window_end, stock_id, sum(price) as sum FROM TUMBLE(DATA => bid, TIMECOL => 'time', SIZE => 10m) GROUP BY window_start, window_end, stock_id ORDER BY stock_id, window_start", |
| 261 | + expectedHeader, |
| 262 | + retArray, |
| 263 | + DATABASE_NAME); |
| 264 | + |
| 265 | + // TUMBLE (1h) + GROUP BY |
| 266 | + expectedHeader = new String[] {"window_start", "window_end", "stock_id", "sum"}; |
| 267 | + retArray = |
| 268 | + new String[] { |
| 269 | + "2021-01-01T09:00:00.000Z,2021-01-01T10:00:00.000Z,AAPL,305.0,", |
| 270 | + "2021-01-01T09:00:00.000Z,2021-01-01T10:00:00.000Z,TESL,597.0,", |
| 271 | + }; |
| 272 | + tableResultSetEqualTest( |
| 273 | + "SELECT window_start, window_end, stock_id, sum(price) as sum FROM TUMBLE(DATA => bid, TIMECOL => 'time', SIZE => 1h) GROUP BY window_start, window_end, stock_id ORDER BY stock_id, window_start", |
| 274 | + expectedHeader, |
| 275 | + retArray, |
| 276 | + DATABASE_NAME); |
| 277 | + } |
| 278 | + |
| 279 | + @Test |
| 280 | + public void testCumulateFunction() { |
| 281 | + String[] expectedHeader = |
| 282 | + new String[] {"window_start", "window_end", "time", "stock_id", "price", "s1"}; |
| 283 | + String[] retArray = |
| 284 | + new String[] { |
| 285 | + "2021-01-01T09:00:00.000Z,2021-01-01T09:06:00.000Z,2021-01-01T09:05:00.000Z,AAPL,100.0,101.0,", |
| 286 | + "2021-01-01T09:00:00.000Z,2021-01-01T09:12:00.000Z,2021-01-01T09:05:00.000Z,AAPL,100.0,101.0,", |
| 287 | + "2021-01-01T09:00:00.000Z,2021-01-01T09:12:00.000Z,2021-01-01T09:07:00.000Z,AAPL,103.0,101.0,", |
| 288 | + "2021-01-01T09:00:00.000Z,2021-01-01T09:12:00.000Z,2021-01-01T09:09:00.000Z,AAPL,102.0,101.0,", |
| 289 | + "2021-01-01T09:00:00.000Z,2021-01-01T09:12:00.000Z,2021-01-01T09:06:00.000Z,TESL,200.0,102.0,", |
| 290 | + "2021-01-01T09:00:00.000Z,2021-01-01T09:12:00.000Z,2021-01-01T09:07:00.000Z,TESL,202.0,202.0,", |
| 291 | + "2021-01-01T09:12:00.000Z,2021-01-01T09:18:00.000Z,2021-01-01T09:15:00.000Z,TESL,195.0,332.0,", |
| 292 | + "2021-01-01T09:12:00.000Z,2021-01-01T09:24:00.000Z,2021-01-01T09:15:00.000Z,TESL,195.0,332.0,", |
| 293 | + }; |
| 294 | + tableResultSetEqualTest( |
| 295 | + "SELECT * FROM CUMULATE(DATA => bid, TIMECOL => 'time', STEP => 6m, SIZE => 12m) ORDER BY stock_id, time", |
| 296 | + expectedHeader, |
| 297 | + retArray, |
| 298 | + DATABASE_NAME); |
| 299 | + |
| 300 | + expectedHeader = new String[] {"window_start", "window_end", "stock_id", "sum"}; |
| 301 | + retArray = |
| 302 | + new String[] { |
| 303 | + "2021-01-01T09:00:00.000Z,2021-01-01T09:06:00.000Z,AAPL,100.0,", |
| 304 | + "2021-01-01T09:00:00.000Z,2021-01-01T09:12:00.000Z,AAPL,305.0,", |
| 305 | + "2021-01-01T09:00:00.000Z,2021-01-01T09:12:00.000Z,TESL,402.0,", |
| 306 | + "2021-01-01T09:12:00.000Z,2021-01-01T09:18:00.000Z,TESL,195.0,", |
| 307 | + "2021-01-01T09:12:00.000Z,2021-01-01T09:24:00.000Z,TESL,195.0,", |
| 308 | + }; |
| 309 | + tableResultSetEqualTest( |
| 310 | + "SELECT window_start, window_end, stock_id, sum(price) as sum FROM CUMULATE(DATA => bid, TIMECOL => 'time', STEP => 6m, SIZE => 12m) GROUP BY window_start, window_end, stock_id ORDER BY stock_id, window_start", |
| 311 | + expectedHeader, |
| 312 | + retArray, |
| 313 | + DATABASE_NAME); |
| 314 | + |
| 315 | + expectedHeader = new String[] {"window_start", "window_end", "stock_id", "sum"}; |
| 316 | + retArray = |
| 317 | + new String[] { |
| 318 | + "2021-01-01T09:00:00.000Z,2021-01-01T10:00:00.000Z,AAPL,305.0,", |
| 319 | + "2021-01-01T09:00:00.000Z,2021-01-01T10:00:00.000Z,TESL,597.0,", |
| 320 | + }; |
| 321 | + tableResultSetEqualTest( |
| 322 | + "SELECT window_start, window_end, stock_id, sum(price) as sum FROM CUMULATE(DATA => bid, TIMECOL => 'time', STEP => 1h, SIZE => 1h) GROUP BY window_start, window_end, stock_id ORDER BY stock_id, window_start", |
| 323 | + expectedHeader, |
| 324 | + retArray, |
| 325 | + DATABASE_NAME); |
| 326 | + |
| 327 | + // test UDFException |
| 328 | + String errMsg = "Cumulative table function requires size must be an integral multiple of step."; |
| 329 | + tableAssertTestFail( |
| 330 | + "SELECT window_start, window_end, stock_id, sum(price) as sum FROM CUMULATE(DATA => bid, TIMECOL => 'time', STEP => 4m, SIZE => 10m) GROUP BY window_start, window_end, stock_id ORDER BY stock_id, window_start", |
| 331 | + errMsg, |
| 332 | + DATABASE_NAME); |
| 333 | + } |
229 | 334 | } |
0 commit comments