Analyse des requêtes et dépannage avec Snowpark Java¶
Cette rubrique fournit quelques lignes directrices sur l’analyse des requêtes et le dépannage des problèmes lorsque vous travaillez avec la bibliothèque Snowpark.
Dans ce chapitre :
Visualisation du plan d’exécution d’une requête dans Snowpark¶
Pour inspecter le plan d’évaluation d’une DataFrame, appelez la méthode explain
de la DataFrame. Ceci imprime les instructions SQL utilisées pour évaluer les DataFrame. S’il n’y a qu’une seule instruction SQL, la méthode imprime également le plan logique de l’instruction.
----------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)
--------------------------------------------
Une fois l’exécution d’une DataFrame déclenchée, vous pouvez vérifier la progression de la requête dans la page History de l”Classic Console.
Dans la colonne Query Tag, vous pouvez trouver le nom de la fonction et le numéro de ligne dans votre code qui a déclenché cette requête.
Modification des paramètres de journalisation¶
Par défaut, la bibliothèque Snowpark enregistre les messages de niveau INFO
sur stdout. Pour modifier les paramètres de journalisation, créez un fichier simplelogger.properties
et configurez les propriétés du journaliseur dans ce fichier. Par exemple, pour définir le niveau de la journalisation sur DEBUG
:
# simplelogger.properties file (a text file)
# Set the default log level for the SimpleLogger to DEBUG.
org.slf4j.simpleLogger.defaultLogLevel=debug
Mettez ce fichier dans votre classpath. Si vous utilisez une disposition de répertoire Maven, placez le fichier dans le répertoire src/main/resources/
.
Exceptions java.lang.OutOfMemoryError¶
Si une exception java.lang.OutOfMemoryError
est levée, augmentez la taille maximale du Heap pour le JVM (c’est-à-dire via l’indicateur -J-Xmxmaximum_size
).
Erreur de module non nommé sur Java 17¶
Lors de l’exécution d’un client Snowpark Java ou Scala sur Java 17, vous pouvez voir l’erreur suivante :
java.base does not "opens java.nio" to unnamed module
C’est parce que Snowpark utilise le connecteur Apache Arrow, qui dépend d’APIs Java internes qui ne sont pas exposées par défaut après Java 9.
Pour contourner cette erreur, définissez le paramètre suivant soit en tant qu’argument de ligne de commande lors de l’exécution de votre application, soit dans les variables d’environnement de votre système.
--add-opens=java.base/java.nio=ALL-UNNAMED
Note
L’API Snowpark prend en charge les versions suivantes de Java :
11.x
17.x (La prise en charge en avant-première de cette fonctionnalité est disponible pour tous les comptes.)
Définition de l’argument lors de l’exécution de l’application¶
Vous pouvez définir cet argument à partir de la ligne de commande lors de l’exécution de votre application.
Par exemple, lorsque vous appelez la commande java
, vous pouvez ajouter --add-opens=java.base/java.nio=ALL-UNNAMED
, comme dans l’exemple suivant :
java --add-opens=java.base/java.nio=ALL-UNNAMED -jar my-snowpark-app.jar.
Si vous utilisez également l’authentification par clé privée RSA, vous devrez également autoriser sun.security.util
, comme dans l’exemple suivant :
java --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.security.util=ALL-UNNAMED -jar my-snowpark-app.jar
Définition du paramètre en tant que variable d’environnement¶
Vous pouvez définir ce paramètre dans les variables d’environnement de votre système. Reportez-vous à la documentation de votre système d’exploitation pour savoir comment définir les variables d’environnement.
Créez ou mettez à jour une variable d’environnement JDK_JAVA_OPTIONS
, comme dans l’exemple suivant basé sur Unix :
export JDK_JAVA_OPTIONS="--add-opens=java.base/java.nio=ALL-UNNAMED"
Si vous utilisez également l’authentification par clé privée RSA, vous devrez également autoriser sun.security.util
, comme dans l’exemple suivant :
export JDK_JAVA_OPTIONS="--add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.security.util=ALL-UNNAMED"