dataflow-dependencies.td 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  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. $ set-arg-default single-replica-cluster=quickstart
  10. # Test reporting of dataflow dependencies through
  11. # `mz_internal.mz_compute_dependencies` and
  12. # `mz_internal.mz_materialization_dependencies`.
  13. #
  14. # These tests rely on testdrive's retry feature, as the dataflow dependency
  15. # relations are asynchronously updated, so DDL commands are not immediately
  16. # reflected there.
  17. # There should be no materializations yet (except for system indexes).
  18. > SELECT * FROM mz_internal.mz_compute_dependencies WHERE object_id LIKE 'u%'
  19. > SELECT * FROM mz_internal.mz_materialization_dependencies WHERE object_id LIKE 'u%'
  20. # Test that creating objects causes dependency updates.
  21. > CREATE TABLE t1 (a int)
  22. > CREATE TABLE t2 (b int)
  23. > CREATE VIEW v1 AS SELECT * FROM t1, t2
  24. > CREATE MATERIALIZED VIEW mv1 AS SELECT * FROM v1
  25. > SELECT object.name, import.name
  26. FROM mz_internal.mz_compute_dependencies dep
  27. LEFT JOIN mz_objects object ON dep.object_id = object.id
  28. LEFT JOIN mz_objects import ON dep.dependency_id = import.id
  29. WHERE object_id LIKE 'u%'
  30. mv1 t1
  31. mv1 t2
  32. > SELECT object.name, import.name
  33. FROM mz_internal.mz_materialization_dependencies dep
  34. LEFT JOIN mz_objects object ON dep.object_id = object.id
  35. LEFT JOIN mz_objects import ON dep.dependency_id = import.id
  36. WHERE object_id LIKE 'u%'
  37. mv1 t1
  38. mv1 t2
  39. > CREATE DEFAULT INDEX ON mv1
  40. > SELECT object.name, import.name
  41. FROM mz_internal.mz_compute_dependencies dep
  42. LEFT JOIN mz_objects object ON dep.object_id = object.id
  43. LEFT JOIN mz_objects import ON dep.dependency_id = import.id
  44. WHERE object_id LIKE 'u%'
  45. mv1 t1
  46. mv1 t2
  47. mv1_primary_idx mv1
  48. > SELECT object.name, import.name
  49. FROM mz_internal.mz_materialization_dependencies dep
  50. LEFT JOIN mz_objects object ON dep.object_id = object.id
  51. LEFT JOIN mz_objects import ON dep.dependency_id = import.id
  52. WHERE object_id LIKE 'u%'
  53. mv1 t1
  54. mv1 t2
  55. mv1_primary_idx mv1
  56. > CREATE CONNECTION kafka_conn
  57. TO KAFKA (BROKER '${testdrive.kafka-addr}', SECURITY PROTOCOL PLAINTEXT)
  58. > CREATE CONNECTION csr_conn
  59. TO CONFLUENT SCHEMA REGISTRY (URL '${testdrive.schema-registry-url}')
  60. > CREATE SINK snk
  61. IN CLUSTER ${arg.single-replica-cluster}
  62. FROM mv1
  63. INTO KAFKA CONNECTION kafka_conn (TOPIC 'testdrive-sink1-${testdrive.seed}')
  64. FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION csr_conn
  65. ENVELOPE DEBEZIUM
  66. > SELECT object.name, import.name
  67. FROM mz_internal.mz_compute_dependencies dep
  68. LEFT JOIN mz_objects object ON dep.object_id = object.id
  69. LEFT JOIN mz_objects import ON dep.dependency_id = import.id
  70. WHERE object_id LIKE 'u%'
  71. mv1 t1
  72. mv1 t2
  73. mv1_primary_idx mv1
  74. > SELECT object.name, import.name
  75. FROM mz_internal.mz_materialization_dependencies dep
  76. LEFT JOIN mz_objects object ON dep.object_id = object.id
  77. LEFT JOIN mz_objects import ON dep.dependency_id = import.id
  78. WHERE object_id LIKE 'u%'
  79. mv1 t1
  80. mv1 t2
  81. mv1_primary_idx mv1
  82. snk mv1
  83. # Test that dropping objects causes dependency updates.
  84. > DROP SINK snk;
  85. > SELECT object.name, import.name
  86. FROM mz_internal.mz_compute_dependencies dep
  87. LEFT JOIN mz_objects object ON dep.object_id = object.id
  88. LEFT JOIN mz_objects import ON dep.dependency_id = import.id
  89. WHERE object_id LIKE 'u%'
  90. mv1 t1
  91. mv1 t2
  92. mv1_primary_idx mv1
  93. > SELECT object.name, import.name
  94. FROM mz_internal.mz_materialization_dependencies dep
  95. LEFT JOIN mz_objects object ON dep.object_id = object.id
  96. LEFT JOIN mz_objects import ON dep.dependency_id = import.id
  97. WHERE object_id LIKE 'u%'
  98. mv1 t1
  99. mv1 t2
  100. mv1_primary_idx mv1
  101. > DROP INDEX mv1_primary_idx
  102. > SELECT object.name, import.name
  103. FROM mz_internal.mz_compute_dependencies dep
  104. LEFT JOIN mz_objects object ON dep.object_id = object.id
  105. LEFT JOIN mz_objects import ON dep.dependency_id = import.id
  106. WHERE object_id LIKE 'u%'
  107. mv1 t1
  108. mv1 t2
  109. > SELECT object.name, import.name
  110. FROM mz_internal.mz_materialization_dependencies dep
  111. LEFT JOIN mz_objects object ON dep.object_id = object.id
  112. LEFT JOIN mz_objects import ON dep.dependency_id = import.id
  113. WHERE object_id LIKE 'u%'
  114. mv1 t1
  115. mv1 t2
  116. > DROP MATERIALIZED VIEW mv1
  117. > SELECT * FROM mz_internal.mz_compute_dependencies WHERE object_id LIKE 'u%'
  118. > SELECT * FROM mz_internal.mz_materialization_dependencies WHERE object_id LIKE 'u%'
  119. # Test that objects without dependencies don't show up in the
  120. # dependency relations.
  121. > CREATE MATERIALIZED VIEW mv2 AS SELECT 1;
  122. > SELECT * FROM mz_internal.mz_compute_dependencies WHERE object_id LIKE 'u%'
  123. > SELECT * FROM mz_internal.mz_materialization_dependencies WHERE object_id LIKE 'u%'
  124. # Test that system indexes show up in the dependency relations.
  125. > SELECT count(*) > 0 FROM mz_internal.mz_compute_dependencies WHERE object_id LIKE 's%'
  126. true
  127. > SELECT count(*) > 0 FROM mz_internal.mz_materialization_dependencies WHERE object_id LIKE 's%'
  128. true
  129. # Test that the dependency relations are cleaned up when a cluster is dropped.
  130. > CREATE CLUSTER cleanup SIZE '1'
  131. > CREATE INDEX idx_cleanup IN CLUSTER cleanup ON t1 (a)
  132. > CREATE MATERIALIZED VIEW mv_cleanup IN CLUSTER cleanup AS SELECT * FROM t2
  133. > CREATE SINK snk_cleanup IN CLUSTER cleanup FROM t1
  134. INTO KAFKA CONNECTION kafka_conn (TOPIC 'testdrive-sink1-${testdrive.seed}')
  135. FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION csr_conn
  136. ENVELOPE DEBEZIUM
  137. > SELECT object.name, import.name
  138. FROM mz_internal.mz_compute_dependencies dep
  139. LEFT JOIN mz_objects object ON dep.object_id = object.id
  140. LEFT JOIN mz_objects import ON dep.dependency_id = import.id
  141. WHERE object_id LIKE 'u%'
  142. idx_cleanup t1
  143. mv_cleanup t2
  144. > SELECT object.name, import.name
  145. FROM mz_internal.mz_materialization_dependencies dep
  146. LEFT JOIN mz_objects object ON dep.object_id = object.id
  147. LEFT JOIN mz_objects import ON dep.dependency_id = import.id
  148. WHERE object_id LIKE 'u%'
  149. idx_cleanup t1
  150. mv_cleanup t2
  151. snk_cleanup t1
  152. > DROP CLUSTER cleanup CASCADE
  153. > SELECT object.name, import.name
  154. FROM mz_internal.mz_compute_dependencies dep
  155. LEFT JOIN mz_objects object ON dep.object_id = object.id
  156. LEFT JOIN mz_objects import ON dep.dependency_id = import.id
  157. WHERE object_id LIKE 'u%'
  158. > SELECT object.name, import.name
  159. FROM mz_internal.mz_materialization_dependencies dep
  160. LEFT JOIN mz_objects object ON dep.object_id = object.id
  161. LEFT JOIN mz_objects import ON dep.dependency_id = import.id
  162. WHERE object_id LIKE 'u%'