我有一个雪花 Javascript 存储过程,它接受 2 个参数并根据从 UI 中选择的列执行运行时动态聚合
在下面添加更多上下文
从视图中获取数据并以这种方式检索结果
CREATE OR REPLACE PROCEDURE database.schema.sp_sample(dynamic_columns VARCHAR, dynamic_where_clause VARCHAR)
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
EXECUTE AS CALLER
AS
$$
rs="Success";
try {
retrieve_queries_sql = `SELECT COL_1, COL_2, ${DYNAMIC_COLUMNS} FROM view ${DYNAMIC_WHERE_CLAUSE} GROUP BY COL_1, COL_2, ${DYNAMIC_COLUMNS}`;
var stmt = snowflake.createStatement( {sqlText: retrieve_queries_sql, binds:[DYNAMIC_COLUMNS, DYNAMIC_WHERE_CLAUSE, DYNAMIC_COLUMNS]} );
var rs = stmt.execute();
}
catch(err) {
rs= "Failed Message: "+err.message;
}
return rs;
$$;
CALL "database"."schema"."sp_sample"('COL_3','WHERE COL_3\=\'somevalue\'');
SELECT * FROM TABLE(RESULT_SCAN(LAST_QUERY_ID(-2)));
注意:此时不需要显示特定用户的数据。同样忽略上面代码中的参数插值部分
问题:
是否担心这个雪花动态存储过程被这个 UI 应用程序调用(多个用户同时在 UI 上选择值,这个动态过程在内部会被调用多次)及其读取操作(仅选择只需获取用户选择的下拉层次结构/级别的聚合值)
是否存在数据完整性问题,不同用户将不会在 UI 上看到更新的值(以提供更多上下文数据是从此过程中的视图中获取的,并且此视图数据在应用程序实时运行期间不会更改) / 活动时间 - 所有批次将在用户访问应用程序之前完成)。因此,数据已准备就绪,当用户访问应用程序时,预计不会对数据进行任何更改
从某人那里得到了一个建议,即动态过程会导致数据完整性问题,用户将无法看到更新的数据并解决该数据完整性问题预聚合视图(意味着数据在特定时间进行预聚合)级别并保存在不同的视图中)会有所帮助,并且数据一致性会更好。
想了解这个预聚合视图的提议如何帮助解决数据完整性问题(首先为什么会有数据完整性问题),因为程序中所做的是获取来自视图的数据(动态聚合),即使在后一种方法中,我们仍在创建许多其他视图(预聚合),最终我们在这两种情况下都从视图获取数据,后者如何不会引起数据完整性问题?>
如果提供的要点有意义,请分享一些反馈。想知道更好的意见
答案 0 :(得分:0)
https://docs.snowflake.com/en/sql-reference/functions/last_query_id.html
https://docs.snowflake.com/en/sql-reference/transactions.html#isolation-level