Как отметил Сахадж в своем ответе, нет прямого способа выбрать имена всех представлений, используя таблицу. Вы можете создать хранимую процедуру для извлечения этой информации, используя GET_OBJECT_REFERENCES
, однако с оговоркой, что это будет довольно медленно, если у вас есть значительное количество объектов в вашей базе данных:
-- Finds all references to the table with the provided name in the
-- active database. Returns them as a comma-separated list.
CREATE OR REPLACE PROCEDURE GetTableReferences(DATABASE_NAME VARCHAR, SCHEMA_NAME VARCHAR, TABLE_NAME VARCHAR)
RETURNS VARCHAR LANGUAGE JAVASCRIPT AS $$
var query = "SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_CATALOG = '" + DATABASE_NAME + "'";
var statement = snowflake.createStatement( {sqlText: query} );
var result_set = statement.execute();
var matches = '';
while (result_set.next()) {
var schema = result_set.getColumnValue(1);
var table = result_set.getColumnValue(2);
var object_references_query =
"SELECT 1 FROM TABLE(GET_OBJECT_REFERENCES(DATABASE_NAME => '" + DATABASE_NAME
+ "', SCHEMA_NAME => '" + schema + "', OBJECT_NAME => '" + table + "')) WHERE REFERENCED_SCHEMA_NAME = '"
+ SCHEMA_NAME + "' AND REFERENCED_OBJECT_NAME = '" + TABLE_NAME + "'";
var object_references_statement = snowflake.createStatement( {sqlText: object_references_query} );
try {
if (object_references_statement.execute().next()) {
// This is a match
if (matches.length !== 0) {
matches += ",";
}
matches += schema + "." + table;
}
} catch (err) {
// Ignore invalid views.
}
}
return matches;
$$;
CALL GetTableReferences('MY_DATABASE_NAME', 'MY_SCHEMA_NAME', 'MY_TABLE_NAME');