Analyse des requêtes et dépannage avec Snowpark

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 :

Visualiser le 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 History tab de l’interface Web de Snowflake.

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.

Snowpark request in the History page in the Snowflake web interface

Dépannage

Modification des paramètres de journalisation

Par défaut, la bibliothèque Snowpark enregistre les messages de niveau INFO sur stdout. Si vous souhaitez modifier ces paramètres de journalisation, vous pouvez le faire de manière programmatique ou dans un fichier de propriétés.

Pour modifier le niveau de journalisation de manière programmatique, appelez org.apache.log4j.Logger.getLogger("com.snowflake.snowpark") pour obtenir l’objet Logger de la bibliothèque, puis appelez Logger.setLevel pour modifier le niveau à l’un des niveaux pris en charge. Par exemple :

import org.apache.log4j.{Level, Logger}
...
Logger.getLogger("com.snowflake.snowpark").setLevel(Level.DEBUG)

Comme alternative, si vous voulez spécifier le niveau dans un fichier de propriétés, créez un fichier log4j.properties et configurez votre propre outil de journalisation et définissez ses propriétés dans ce fichier. Par exemple :

# log4j.properties file (a text file)
log4j.rootLogger=DEBUG, STDOUT
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern=[%t] %5p (%F:%L) - %m%n

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.

Si vous utilisez Scala REPL et que vous devez augmenter la taille maximale du Leap, modifiez le script shell run.sh (fourni dans le fichier d’archive) et ajoutez l’indicateur -J-Xmxtaille_maximum à la commande scala. L’exemple suivant augmente la taille maximale du Heap à 4 GB :

scala -J-Xmx4G ...