setup.td 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. $ postgres-execute connection=postgres://mz_system:materialize@${testdrive.materialize-internal-sql-addr}
  10. ALTER SYSTEM SET unsafe_enable_unorchestrated_cluster_replicas = true;
  11. > DROP CLUSTER IF EXISTS prod CASCADE
  12. > DROP CLUSTER IF EXISTS prod_deploy CASCADE
  13. > CREATE CLUSTER prod REPLICAS (replica1 (
  14. STORAGECTL ADDRESSES ['clusterd1:2100'],
  15. STORAGE ADDRESSES ['clusterd1:2103'],
  16. COMPUTECTL ADDRESSES ['clusterd1:2101'],
  17. COMPUTE ADDRESSES ['clusterd1:2102'],
  18. WORKERS 1))
  19. > CREATE CLUSTER prod_deploy REPLICAS (replica1 (
  20. STORAGECTL ADDRESSES ['clusterd2:2100', 'clusterd3:2100'],
  21. STORAGE ADDRESSES ['clusterd2:2103', 'clusterd3:2103'],
  22. COMPUTECTL ADDRESSES ['clusterd2:2101', 'clusterd3:2101'],
  23. COMPUTE ADDRESSES ['clusterd2:2102', 'clusterd3:2102'],
  24. WORKERS 2))
  25. > DROP SCHEMA IF EXISTS prod CASCADE
  26. > DROP SCHEMA IF EXISTS prod_deploy CASCADE
  27. # For now sources are not considered in blue-green deployments, so create them separately
  28. > DROP SOURCE IF EXISTS counter CASCADE
  29. > CREATE SOURCE counter FROM LOAD GENERATOR counter (TICK INTERVAL '1s')
  30. > DROP SOURCE IF EXISTS tpch CASCADE
  31. > CREATE SOURCE tpch
  32. FROM LOAD GENERATOR TPCH (SCALE FACTOR 0.1)
  33. > CREATE TABLE customer FROM SOURCE tpch (REFERENCE customer);
  34. > CREATE TABLE lineitem FROM SOURCE tpch (REFERENCE lineitem);
  35. > CREATE TABLE nation FROM SOURCE tpch (REFERENCE nation);
  36. > CREATE TABLE orders FROM SOURCE tpch (REFERENCE orders);
  37. > CREATE TABLE part FROM SOURCE tpch (REFERENCE part);
  38. > CREATE TABLE partsupp FROM SOURCE tpch (REFERENCE partsupp);
  39. > CREATE TABLE region FROM SOURCE tpch (REFERENCE region);
  40. > CREATE TABLE supplier FROM SOURCE tpch (REFERENCE supplier);
  41. > CREATE SCHEMA prod
  42. > CREATE MATERIALIZED VIEW prod.counter_mv IN CLUSTER prod AS SELECT count(*) FROM counter
  43. > CREATE MATERIALIZED VIEW prod.counter_mv2 IN CLUSTER prod_deploy WITH (REFRESH EVERY '60 seconds') AS SELECT count(*), 'some new value' FROM counter
  44. > CREATE DEFAULT INDEX IN CLUSTER prod ON counter
  45. > CREATE MATERIALIZED VIEW prod.tpch_mv
  46. IN CLUSTER prod AS
  47. SELECT
  48. l_returnflag,
  49. l_linestatus,
  50. sum(l_quantity) AS sum_qty,
  51. sum(l_extendedprice) AS sum_base_price,
  52. sum(l_extendedprice * (1 - l_discount)) AS sum_disc_price,
  53. sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge,
  54. avg(l_quantity) AS avg_qty,
  55. avg(l_extendedprice) AS avg_price,
  56. avg(l_discount) AS avg_disc,
  57. count(*) AS count_order,
  58. 'old' as state
  59. FROM
  60. lineitem
  61. WHERE
  62. l_shipdate <= date '1998-12-01' - interval '90' day
  63. GROUP BY
  64. l_returnflag,
  65. l_linestatus
  66. ORDER BY
  67. l_returnflag,
  68. l_linestatus
  69. > CREATE DEFAULT INDEX IN CLUSTER prod ON prod.tpch_mv
  70. > WITH
  71. dataflows AS (
  72. SELECT mz_indexes.id
  73. FROM mz_indexes
  74. JOIN mz_clusters ON mz_indexes.cluster_id = mz_clusters.id
  75. WHERE mz_clusters.name = 'prod'
  76. UNION ALL
  77. SELECT mz_materialized_views.id
  78. FROM mz_materialized_views
  79. JOIN mz_clusters ON mz_materialized_views.cluster_id = mz_clusters.id
  80. WHERE mz_clusters.name = 'prod'
  81. ),
  82. -- Collect ready dataflows.
  83. -- For a dataflow to be ready it must be hydrated and caught up.
  84. -- We define a dataflow to be caught up if its local lag is less than 4 seconds.
  85. ready_dataflows AS (
  86. SELECT id
  87. FROM dataflows d
  88. JOIN mz_internal.mz_compute_hydration_statuses h ON (h.object_id = d.id)
  89. -- Left join because some dataflows don't have dependencies and therefore
  90. -- don't have lag either.
  91. LEFT JOIN mz_internal.mz_materialization_lag l ON (l.object_id = d.id)
  92. WHERE
  93. h.hydrated AND
  94. (l.local_lag <= '4s' OR l.local_lag IS NULL)
  95. ),
  96. -- Collect dataflows that are not yet ready.
  97. pending_dataflows AS (
  98. SELECT id FROM dataflows
  99. EXCEPT
  100. SELECT id FROM ready_dataflows
  101. )
  102. SELECT * FROM pending_dataflows
  103. > SELECT state FROM prod.tpch_mv LIMIT 1
  104. old