Analysieren von Abfragen und Problembehandlung mit Snowpark

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 History tab der Snowflake-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 request in the History page in the Snowflake web interface

Problembehandlung

Ändern der Protokollierungseinstellungen

Standardmäßig protokolliert die Snowpark-Bibliothek Meldungen des Protokolliergrads INFO in stdout. Wenn Sie diese Protokollierungseinstellungen ändern möchten, können Sie dies programmgesteuert oder über eine Eigenschaftendatei tun.

Für die programmgesteuerte Änderung des Protokolliergrads rufen Sie org.apache.log4j.Logger.getLogger("com.snowflake.snowpark") auf, um das Logger-Objekt der Bibliothek zu erhalten. Rufen Sie danach Logger.setLevel auf, um den Protokolliergrad in einen der unterstützten Protokolliergrade zu ändern. Beispiel:

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

Wenn Sie den Protokolliergrad alternativ in einer Eigenschaftendatei angeben möchten, erstellen Sie eine log4j.properties-Datei. Konfigurieren Sie Ihre eigene Protokollierung, und legen Sie deren Eigenschaften in dieser Datei fest. Beispiel:

# 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

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.

Wenn Sie die Scala REPL verwenden und die maximale Heap-Größe erhöhen möchten, müssen Sie das Shell-Skript run.sh (ist in der Archivdatei enthalten) bearbeiten und das Flag -J-Xmxmaximale_Größe zum Befehl scala hinzufügen. Im folgenden Beispiel wird die maximale Heap-Größe auf 4 GB erhöht:

scala -J-Xmx4G ...