ct_transform.slt 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. mode cockroach
  10. # Stream Table Join
  11. statement ok
  12. CREATE TABLE small (pk INT, val STRING)
  13. statement ok
  14. INSERT INTO small VALUES (1, 'v0')
  15. statement ok
  16. CREATE TABLE big (fk INT)
  17. statement ok
  18. CREATE CONTINUAL TASK stj
  19. FROM TRANSFORM big USING
  20. (SELECT big.fk, small.val FROM big JOIN small ON big.fk = small.pk)
  21. statement ok
  22. INSERT INTO big VALUES (1)
  23. statement ok
  24. UPDATE small SET val = 'v1'
  25. statement ok
  26. INSERT INTO big VALUES (1)
  27. query IT
  28. SELECT * FROM stj
  29. ----
  30. 1 v0
  31. 1 v1
  32. # Audit Log
  33. statement ok
  34. CREATE TABLE anomalies (a INT);
  35. statement ok
  36. CREATE MATERIALIZED VIEW anomalies_mv AS SELECT * FROM anomalies
  37. statement ok
  38. CREATE CONTINUAL TASK audit_log
  39. FROM TRANSFORM anomalies_mv USING
  40. (TABLE anomalies_mv)
  41. statement ok
  42. INSERT INTO anomalies VALUES (1)
  43. statement ok
  44. DELETE FROM anomalies
  45. query I
  46. SELECT * FROM anomalies_mv
  47. ----
  48. query I
  49. SELECT * FROM audit_log
  50. ----
  51. 1
  52. # Stateless Source Transformation
  53. statement ok
  54. CREATE TABLE source_raw (ts STRING);
  55. statement ok
  56. CREATE CONTINUAL TASK source_cleaned
  57. FROM TRANSFORM source_raw USING
  58. (SELECT ts::timestamptz FROM source_raw)
  59. query T
  60. SELECT try_parse_monotonic_iso8601_timestamp('2024-10-11T15:28:01')
  61. ----
  62. NULL
  63. statement ok
  64. INSERT INTO source_raw VALUES ('2024-10-11T15:28:01')
  65. query T
  66. SELECT * FROM source_cleaned
  67. ----
  68. 2024-10-11 15:28:01+00
  69. # Idempotency Keys
  70. statement ok
  71. CREATE TABLE maybe_dup (val STRING, idem_key INT)
  72. statement ok
  73. CREATE CONTINUAL TASK deduped
  74. FROM TRANSFORM maybe_dup USING
  75. (SELECT * FROM maybe_dup WHERE idem_key NOT IN (SELECT idem_key FROM deduped))
  76. statement ok
  77. INSERT INTO maybe_dup VALUES ('orig-1', 1), ('orig-2', 2)
  78. statement ok
  79. INSERT INTO maybe_dup VALUES ('nope', 1), ('yep', 3)
  80. query T
  81. SELECT val FROM deduped ORDER BY val
  82. ----
  83. orig-1
  84. orig-2
  85. yep
  86. # Demultiplexing Webhook Sources
  87. statement ok
  88. CREATE TABLE events (data JSONB)
  89. statement ok
  90. CREATE CONTINUAL TASK events_load
  91. FROM TRANSFORM events USING
  92. (SELECT data->>'user' FROM events WHERE data->>'type' = 'load')
  93. statement ok
  94. CREATE CONTINUAL TASK events_click
  95. FROM TRANSFORM events USING
  96. (SELECT data->>'foo' FROM events WHERE data->>'type' = 'click')
  97. statement ok
  98. INSERT INTO events VALUES ('{"type": "load", "user": "alice"}')
  99. statement ok
  100. INSERT INTO events VALUES ('{"type": "click", "foo": "bar"}')
  101. query T
  102. SELECT * FROM events_load
  103. ----
  104. alice
  105. query T
  106. SELECT * FROM events_click
  107. ----
  108. bar