Snowpark Javaを使用したクエリの分析とトラブルシューティング

このトピックでは、Snowparkライブラリを使用する際のクエリの分析と、問題のトラブルシューティングに関するガイドラインをいくつか提供します。

このトピックの内容:

Snowparkにおけるクエリの実行プランの表示

DataFrame の評価計画を調べるには、 DataFrame の explain メソッドを呼び出します。これにより、 DataFrame の評価に使用される SQL ステートメントが出力されます。SQL ステートメントが1つしかない場合、メソッドはステートメントの論理プランも出力します。

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

DataFrame の実行がトリガーされた後、 Classic Console の History 履歴タブ ページでクエリの進行状況を確認できます。

Query Tag 列には、このクエリをトリガーしたコード内の関数の名前と行番号が表示されます。

従来のコンソール内における履歴ページでのSnowparkリクエスト

ログ設定の変更

デフォルトでは、Snowparkライブラリは INFO レベルのメッセージをstdoutにログします。ログ設定を変更するには、 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コネクタ を使用しており、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

環境変数としてのパラメーターの設定

パラメーターはシステムの環境変数で設定できます。環境変数の設定方法については、オペレーティングシステムの手順をご参照ください。

以下のUnixベースの例のように、 JDK_JAVA_OPTIONS 環境変数を作成または更新します。

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