Analysieren von Abfragen und Problembehandlung mit Snowpark Java

Unter diesem Thema werden einige Richtlinien zur Analyse von Abfragen und zur Behandlung von Problemen bei Verwendung der Snowpark-Bibliothek bereitgestellt.

Unter diesem Thema:

Anzeigen des Ausführungsplans von Abfragen in Snowpark

Um den Evaluierungsplan eines DataFrame zu prüfen, rufen Sie die explain-Methode des DataFrame auf. Dadurch werden die SQL-Anweisungen ausgegeben, die zur Evaluierung des DataFrame verwendet werden. Wenn es nur eine SQL-Anweisung gibt, gibt die Methode auch den logischen Plan für die Anweisung aus.

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

Nachdem die Ausführung eines DataFrame ausgelöst wurde, können Sie den Fortschritt der Abfrage auf der Seite History Registerkarte „Verlauf“ der alten Weboberfläche überprüfen.

In der Spalte Query Tag finden Sie den Namen der Funktion und die Nummer der Codezeile, in der diese Abfrage ausgelöst wurde.

Snowpark-Anforderung auf der Seite „History“ der klassischen Konsole

Ändern der Protokollierungseinstellungen

Standardmäßig protokolliert die Snowpark-Bibliothek Meldungen des Protokolliergrads INFO in stdout. Um die Protokollierungseinstellungen zu ändern, erstellen Sie eine simplelogger.properties-Datei, und konfigurieren Sie die Logger-Eigenschaften in dieser Datei. Setzen Sie beispielsweise die Protokollstufe wie folgt auf DEBUG:

# simplelogger.properties file (a text file)
# Set the default log level for the SimpleLogger to DEBUG.
org.slf4j.simpleLogger.defaultLogLevel=debug
Copy

Speichern Sie diese Datei in Ihren Klassenpfad. Wenn Sie eine Maven-Verzeichnisstruktur verwenden, speichern Sie die Datei im Verzeichnis src/main/resources/.

„java.lang.OutOfMemoryError“-Ausnahmen

Wenn eine java.lang.OutOfMemoryError-Ausnahme ausgelöst wird, erhöhen Sie die maximale Heap-Größe der JVM (z. B. über das Flag -J-Xmxmaximum_size).

Fehler bei nicht benanntem Modul in Java 17

Wenn Sie einen Snowpark Java- oder Snowpark Scala-Client unter Java 17 ausführen, kann der folgende Fehler auftreten:

java.base does not "opens java.nio" to unnamed module

Das liegt daran, dass Snowpark den Apache Arrow-Konnektor verwendet, der von internen Java-APIs abhängt, die nach Java 9 nicht standardmäßig offengelegt werden.

Um diesen Fehler zu umgehen, legen Sie den folgenden Parameter entweder als Befehlszeilenargument beim Ausführen Ihrer Anwendung fest oder in den Umgebungsvariablen Ihres Systems.

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

Bemerkung

Die Snowpark-API unterstützt die folgenden Java-Versionen:

  • 11.x

  • 17.x (Dieses Feature steht allen Konten als Vorschau zur Verfügung.)

Einstellen des Arguments beim Ausführen der Anwendung

Sie können dieses Argument in der Befehlszeile festlegen, wenn Sie Ihre Anwendung ausführen.

Wenn Sie beispielsweise den Befehl java aufrufen, können Sie --add-opens=java.base/java.nio=ALL-UNNAMED hinzufügen, wie im Folgenden gezeigt:

java --add-opens=java.base/java.nio=ALL-UNNAMED -jar my-snowpark-app.jar.
Copy

Wenn Sie die Authentifizierung mit privaten RSA-Schlüsseln verwenden, müssen Sie außerdem sun.security.util zulassen, wie im folgenden Beispiel:

java --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.security.util=ALL-UNNAMED -jar my-snowpark-app.jar
Copy

Einstellen des Parameters als Umgebungsvariable

Sie können den Parameter in den Umgebungsvariablen Ihres Systems festlegen. Informationen zum Festlegen von Umgebungsvariablen finden Sie in der Dokumentation Ihres Betriebssystems.

Erstellen oder aktualisieren Sie eine JDK_JAVA_OPTIONS-Umgebungsvariable, wie im folgenden Unix-basierten Beispiel:

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

Wenn Sie die Authentifizierung mit privaten RSA-Schlüsseln verwenden, müssen Sie außerdem sun.security.util zulassen, wie im folgenden Beispiel:

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