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)
--------------------------------------------
Nachdem die Ausführung eines DataFrame ausgelöst wurde, können Sie den Fortschritt der Abfrage auf der Seite History 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.
Ä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
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
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.
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
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"
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"