All tables
The following query retrieves all materialized views in the ClickHouse database along with their target and source tables:
SELECT
mv.database AS view_database,
mv.name AS view_name,
extract(mv.create_table_query, 'FROM\\s+([a-zA-Z0-9_\\.]+)') AS source_table_name,
st.engine AS source_table_engine,
extract(mv.create_table_query, 'TO\\s+([a-zA-Z0-9_\\.]+)') AS target_table
FROM
system.tables AS mv
LEFT JOIN
system.tables AS st
ON
extract(mv.create_table_query, 'FROM\\s+([a-zA-Z0-9_\\.]+)') = concat(st.database, '.', st.name)
WHERE
mv.engine = 'MaterializedView'
AND mv.create_table_query LIKE '% TO %'
AND mv.create_table_query LIKE '% FROM %'
ORDER BY
view_database,
view_name;Exclude Kafka source tables
To exclude materialized views that populate data from Kafka streams, you can modify the query as follows:
SELECT
mv.database AS view_database,
mv.name AS view_name,
extract(mv.create_table_query, 'FROM\\s+([a-zA-Z0-9_\\.]+)') AS source_table_name,
st.engine AS source_table_engine,
extract(mv.create_table_query, 'TO\\s+([a-zA-Z0-9_\\.]+)') AS target_table
FROM
system.tables AS mv
LEFT JOIN
system.tables AS st
ON
extract(mv.create_table_query, 'FROM\\s+([a-zA-Z0-9_\\.]+)') = concat(st.database, '.', st.name)
WHERE
mv.engine = 'MaterializedView'
AND mv.create_table_query LIKE '% TO %'
AND mv.create_table_query LIKE '% FROM %'
AND st.engine != 'Kafka'
ORDER BY
view_database,
view_name;Kafka source tables only
SELECT
mv.database AS view_database,
mv.name AS view_name,
extract(mv.create_table_query, 'FROM\\s+([a-zA-Z0-9_\\.]+)') AS source_table_name,
st.engine AS source_table_engine,
extract(mv.create_table_query, 'TO\\s+([a-zA-Z0-9_\\.]+)') AS target_table
FROM
system.tables AS mv
LEFT JOIN
system.tables AS st
ON
extract(mv.create_table_query, 'FROM\\s+([a-zA-Z0-9_\\.]+)') = concat(st.database, '.', st.name)
WHERE
mv.engine = 'MaterializedView'
AND mv.create_table_query LIKE '% TO %'
AND mv.create_table_query LIKE '% FROM %'
AND st.engine = 'Kafka'
ORDER BY
view_database,
view_name;