Spring 在 运行 任何查询之前启动更改会话
Spring boot alter session before running any query
我正在尝试将 Snowflake 连接到 Spring 基于引导的应用程序。一切正常,但是由于雪花中的一些疯狂默认值,我不得不处理以下错误:
https://community.snowflake.com/s/article/SAP-BW-Java-lang-NoClassDefFoundError-for-Apache-arrow
我可以通过 Spring 数据 JPA 触发查询,但根本无法映射结果。解决方案要求:
Customer can use this property (jdbc_query_result_format=json) in datasouce property of Application server or session property in application like
Statement = connection.createStatement();
Statement.executeQuery("ALTER SESSION SET JDBC_QUERY_RESULT_FORMAT='JSON'");
我只是想知道如何用 Spring 实现这一点,即。 运行以上sql在bootstrap期间。我正在使用 Spring 数据 JPA 查询。
参数 JDBC_QUERY_RESULT_FORMAT 可以根据 account/user/session 设置,因此如果您总是希望 JSON 对于该用户,您可以直接通过 Snowflake UI 设置一次:
ALTER USER <youruser> SET JDBC_QUERY_RESULT_FORMAT='JSON';
这只会影响您的用户,并且帐户仍会默认使用 ARROW。而且您不需要一直在会话级别设置它。
原来的问题可以通过调整应用程序中的一些内存设置轻松解决。
总结如下解决方案:
通过为您的应用程序设置 JAVA_OPTS
属性 来增加堆内存并设置 -XX:MaxDirectMemorySize
> 64M。
这背后的基本原理是 Arrow 格式固有地利用可用堆内存来优化大结果。没有足够的堆 space 将导致上述错误。
我仍然需要执行更多测试以找出堆内存、堆栈大小和此变量的理想值 → -XX:MaxDirectMemorySize。
我正在尝试将 Snowflake 连接到 Spring 基于引导的应用程序。一切正常,但是由于雪花中的一些疯狂默认值,我不得不处理以下错误: https://community.snowflake.com/s/article/SAP-BW-Java-lang-NoClassDefFoundError-for-Apache-arrow
我可以通过 Spring 数据 JPA 触发查询,但根本无法映射结果。解决方案要求:
Customer can use this property (jdbc_query_result_format=json) in datasouce property of Application server or session property in application like
Statement = connection.createStatement();
Statement.executeQuery("ALTER SESSION SET JDBC_QUERY_RESULT_FORMAT='JSON'");
我只是想知道如何用 Spring 实现这一点,即。 运行以上sql在bootstrap期间。我正在使用 Spring 数据 JPA 查询。
参数 JDBC_QUERY_RESULT_FORMAT 可以根据 account/user/session 设置,因此如果您总是希望 JSON 对于该用户,您可以直接通过 Snowflake UI 设置一次:
ALTER USER <youruser> SET JDBC_QUERY_RESULT_FORMAT='JSON';
这只会影响您的用户,并且帐户仍会默认使用 ARROW。而且您不需要一直在会话级别设置它。
原来的问题可以通过调整应用程序中的一些内存设置轻松解决。
总结如下解决方案:
通过为您的应用程序设置 JAVA_OPTS
属性 来增加堆内存并设置 -XX:MaxDirectMemorySize
> 64M。
这背后的基本原理是 Arrow 格式固有地利用可用堆内存来优化大结果。没有足够的堆 space 将导致上述错误。
我仍然需要执行更多测试以找出堆内存、堆栈大小和此变量的理想值 → -XX:MaxDirectMemorySize。