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)

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

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 Onglet Historique 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.

Requête Snowpark dans la page Historique de la console classique

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
Copy

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
Copy

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

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
Copy

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

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