使用 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)

--------------------------------------------
Copy

After the execution of a DataFrame has been triggered, you can check on the progress of the query in the Query History page in Snowsight.

Query Tag 列中,可以在触发此查询的代码中找到函数名称和行号。

Classic Console 中的 History 页面中的 Snowpark 请求

更改日志记录设置

默认情况下,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
Copy

将此文件放在类路径中。如果您使用的是 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
Copy

备注

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.
Copy

如果您还在使用 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
Copy

将参数设置为环境变量

您可以在系统的环境变量中设置参数。有关设置环境变量的说明,请参阅操作系统文档。

创建或更新 JDK_JAVA_OPTIONS 环境变量,如以下基于 Unix 的示例所示:

export JDK_JAVA_OPTIONS="--add-opens=java.base/java.nio=ALL-UNNAMED"
Copy

如果您还在使用 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"
Copy
语言: 中文