有没有办法在Snowflake上运行的Streamlit应用程序中显示所有仓库?

Is there a way to show all warehouses in a Streamlit application running on Snowflake?

提问人:Sam W 提问时间:11/16/2023 最后编辑:Sam W 更新时间:11/17/2023 访问量:29

问:

我有一个在 Snowflake 上运行的 Streamlit 原生应用程序,我想显示用户帐户中所有仓库的下拉菜单。

在我的 setup.sql 脚本中,我使用以下 Python 代码创建了一个存储过程 get_available_warehouses():

def get_available_warehouses(cls, session: Session):
        session.sql("SHOW WAREHOUSES").collect()
        return session.sql("SELECT * FROM table(RESULT_SCAN(LAST_QUERY_ID()))").collect()

然后,我的 Streamlit 应用程序调用此存储过程,如下所示:

session.sql("call public.get_available_warehouses()")

执行此操作时,存储过程失败,并显示以下消息:

query_id_place_holder_XYZ not found

这似乎是运行 LAST_QUERY_ID() 的问题。此问题的解决方案似乎是在定义存储过程时添加 EXECUTE AS CALLER

但是现在,当我这样做时,该应用程序甚至不会安装,因为我收到以下消息:

Procedure 'GET_AVAILABLE_WAREHOUSES' cannot be created/altered. Application can only own owner's rights stored procedures.

你有什么想法吗?最终,也许我甚至不需要这样做,我只想获取用户的仓库列表。

python 存储过程 snowflake-cloud-data-platform

评论

0赞 Sergiu 11/17/2023
您是否使用了可以实际运行这些 SQL 语句的正确角色?
0赞 Sam W 11/17/2023
@Sergiu这么认为,但通常运行 LAST_QUERY_ID() 不应该需要任何特定的角色,不是吗?

答: 暂无答案