使用 Snowpark Java 分析查询和故障排除¶
本主题提供了一些有关在使用 Snowpark 库时分析查询和故障排除的指引。
本主题内容:
在 Snowpark 中查看查询的执行计划¶
要检查 DataFrame 的计算计划,请调用 DataFrame 的 explain
方法。此方法会打印用于计算 DataFrame 的 SQL 语句。如果只有一个 SQL 语句,此方法还会打印该语句的逻辑计划。
----------DATAFRAME EXECUTION PLAN----------
Query List:
0.
SELECT
"_1" AS "col %",
"_2" AS "col *"
FROM
(
SELECT
*
FROM
(
VALUES
(1 :: int, 2 :: int),
(3 :: int, 4 :: int) AS SN_TEMP_OBJECT_639016133("_1", "_2")
)
)
Logical Execution Plan:
GlobalStats:
partitionsTotal=0
partitionsAssigned=0
bytesAssigned=0
Operations:
1:0 ->Result SN_TEMP_OBJECT_639016133.COLUMN1, SN_TEMP_OBJECT_639016133.COLUMN2
1:1 ->ValuesClause (1, 2), (3, 4)
--------------------------------------------
触发 DataFrame 的执行后,可以在 Classic Console 的 History 页面中查看查询的进度。
在 Query Tag 列中,可以在触发此查询的代码中找到函数名称和行号。
更改日志记录设置¶
默认情况下,Snowpark 库会将 INFO
级别的消息记录到标准输出。若要更改日志记录设置,请创建一个 simplelogger.properties
文件,并在该文件中配置记录器属性。例如,将日志级别设置为 DEBUG
:
# simplelogger.properties file (a text file)
# Set the default log level for the SimpleLogger to DEBUG.
org.slf4j.simpleLogger.defaultLogLevel=debug
将此文件放在类路径中。如果您使用的是 Maven 目录布局,请将此文件放在 src/main/resources/
目录中。
java.lang.OutOfMemoryError 异常¶
如果引发 java.lang.OutOfMemoryError
异常,请为 JVM 增加最大堆大小(例如通过 -J-Xmxmaximum_size
标志)。
Java 17 上的未命名模块错误¶
在 Java 17 上执行 Snowpark Java 或 Scala 客户端时,您可能会看到以下错误:
java.base does not "opens java.nio" to unnamed module
这是因为 Snowpark 使用了 ` Apache Arrow 连接器 <https://arrow.apache.org/docs/java/install.html#id3 (https://arrow.apache.org/docs/java/install.html#id3)>`__,默认情况下依赖于 Java 9 之后不会公开的内部 Java APIs。
若要解决此错误,请在运行应用程序时或在系统的环境变量中将以下参数设置为命令行参数。
--add-opens=java.base/java.nio=ALL-UNNAMED
备注
Snowpark API 支持以下 Java 版本:
11.x
17.x(所有账户都可以使用此功能的预览支持。)
在运行应用程序时设置实参¶
您可以在运行应用程序时通过命令行设置此参数。
例如,当调用 java
命令时,您可以添加 --add-opens=java.base/java.nio=ALL-UNNAMED
,如下所示:
java --add-opens=java.base/java.nio=ALL-UNNAMED -jar my-snowpark-app.jar.
如果您还在使用 RSA 私钥身份验证,您还需要允许 sun.security.util
,如以下示例所示:
java --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.security.util=ALL-UNNAMED -jar my-snowpark-app.jar
将参数设置为环境变量¶
您可以在系统的环境变量中设置参数。有关设置环境变量的说明,请参阅操作系统文档。
创建或更新 JDK_JAVA_OPTIONS
环境变量,如以下基于 Unix 的示例所示:
export JDK_JAVA_OPTIONS="--add-opens=java.base/java.nio=ALL-UNNAMED"
如果您还在使用 RSA 私钥身份验证,您还需要允许 sun.security.util
,如以下示例所示:
export JDK_JAVA_OPTIONS="--add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.security.util=ALL-UNNAMED"