deploy.td 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. > CREATE SCHEMA prod_deploy
  10. > CREATE MATERIALIZED VIEW prod_deploy.counter_mv IN CLUSTER prod_deploy AS SELECT count(*), 'some new value' FROM counter
  11. > CREATE MATERIALIZED VIEW prod_deploy.counter_mv2 IN CLUSTER prod_deploy WITH (REFRESH EVERY '60 seconds') AS SELECT count(*), 'some new value' FROM counter
  12. > CREATE DEFAULT INDEX IN CLUSTER prod_deploy ON counter
  13. > CREATE DEFAULT INDEX IN CLUSTER prod_deploy ON prod_deploy.counter_mv
  14. > CREATE MATERIALIZED VIEW prod_deploy.tpch_mv
  15. IN CLUSTER prod_deploy AS
  16. SELECT
  17. l_returnflag,
  18. l_linestatus,
  19. sum(l_quantity) AS sum_qty,
  20. sum(l_extendedprice) AS sum_base_price,
  21. sum(l_extendedprice * (1 - l_discount)) AS sum_disc_price,
  22. sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge,
  23. avg(l_quantity) AS avg_qty,
  24. avg(l_extendedprice) AS avg_price,
  25. avg(l_discount) AS avg_disc,
  26. count(*) AS count_order,
  27. 'new' as state
  28. FROM
  29. lineitem
  30. WHERE
  31. l_shipdate <= date '1998-12-01' - interval '100' day
  32. GROUP BY
  33. l_returnflag,
  34. l_linestatus
  35. ORDER BY
  36. l_returnflag,
  37. l_linestatus
  38. > CREATE DEFAULT INDEX IN CLUSTER prod_deploy ON prod_deploy.tpch_mv
  39. > WITH
  40. dataflows AS (
  41. SELECT mz_indexes.id
  42. FROM mz_indexes
  43. JOIN mz_clusters ON mz_indexes.cluster_id = mz_clusters.id
  44. WHERE mz_clusters.name = 'prod_deploy'
  45. UNION ALL
  46. SELECT mz_materialized_views.id
  47. FROM mz_materialized_views
  48. JOIN mz_clusters ON mz_materialized_views.cluster_id = mz_clusters.id
  49. WHERE mz_clusters.name = 'prod_deploy'
  50. ),
  51. -- Collect ready dataflows.
  52. -- For a dataflow to be ready it must be hydrated and caught up.
  53. -- We define a dataflow to be caught up if its local lag is less than 4 seconds.
  54. ready_dataflows AS (
  55. SELECT id
  56. FROM dataflows d
  57. JOIN mz_internal.mz_compute_hydration_statuses h ON (h.object_id = d.id)
  58. -- Left join because some dataflows don't have dependencies and therefore
  59. -- don't have lag either.
  60. LEFT JOIN mz_internal.mz_materialization_lag l ON (l.object_id = d.id)
  61. WHERE
  62. h.hydrated AND
  63. (l.local_lag <= '4s' OR l.local_lag IS NULL)
  64. ),
  65. -- Collect dataflows that are not yet ready.
  66. pending_dataflows AS (
  67. SELECT id FROM dataflows
  68. EXCEPT
  69. SELECT id FROM ready_dataflows
  70. )
  71. SELECT * FROM pending_dataflows
  72. > BEGIN
  73. > ALTER SCHEMA prod SWAP WITH prod_deploy
  74. > ALTER CLUSTER prod SWAP WITH prod_deploy
  75. > COMMIT
  76. # Give worker a chance to finish current query
  77. > SELECT mz_unsafe.mz_sleep(10)
  78. <null>
  79. > DROP CLUSTER prod_deploy CASCADE
  80. > DROP SCHEMA prod_deploy CASCADE
  81. > SELECT state FROM prod.tpch_mv LIMIT 1
  82. new