Análise de consultas e solução de problemas com o Snowpark Java

Este tópico fornece algumas orientações sobre a análise de consultas e a solução de problemas ao trabalhar com a biblioteca do Snowpark.

Neste tópico:

Como visualizar o plano de execução de uma consulta no Snowpark

Para inspecionar o plano de avaliação de um DataFrame, chame o método explain do DataFrame. Isso imprime as instruções SQL usadas para avaliar o DataFrame. Se houver apenas uma instrução SQL, o método também imprime o plano lógico para a instrução.

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

Após a execução de um DataFrame ter sido acionada, você pode verificar o progresso da consulta na página History Guia Histórico na Classic Console.

Na coluna Query Tag, você pode encontrar o nome da função e o número da linha em seu código que acionou essa consulta.

Solicitação do Snowpark na página Histórico do Console clássico

Como mudar as configurações de registro em log

Por padrão, a biblioteca do Snowpark registra em log mensagens de nível INFO para o stdout. Para alterar as configurações de registro em log, crie um arquivo simplelogger.properties e configure as propriedades do agente de log nesse arquivo. Por exemplo, para definir o nível de log como DEBUG:

# simplelogger.properties file (a text file)
# Set the default log level for the SimpleLogger to DEBUG.
org.slf4j.simpleLogger.defaultLogLevel=debug
Copy

Coloque esse arquivo no seu classpath. Se você estiver usando um layout de diretório do Maven, coloque o arquivo no diretório src/main/resources/.

Exceções java.lang.OutOfMemoryError

Se uma exceção java.lang.OutOfMemoryError for gerada, aumente o tamanho máximo da pilha da JVM (usando o sinalizador -J-Xmxmaximum_size, por exemplo).

Erro de módulo sem nome em Java 17

Ao executar um cliente Snowpark Java ou Scala em Java 17, você poderá ver o seguinte erro:

java.base does not "opens java.nio" to unnamed module

Isso ocorre porque o Snowpark usa o conector Apache Arrow, que depende das APIs de Java internas que não é exposto por padrão após o Java 9.

Para contornar esse erro, defina o parâmetro a seguir como um argumento de linha de comando ao executar seu aplicativo ou nas variáveis de ambiente do sistema.

--add-opens=java.base/java.nio=ALL-UNNAMED
Copy

Nota

A API do Snowpark oferece suporte para as seguintes versões de Java:

  • 11.x

  • 17.x (O suporte em versão preliminar para esse recurso está disponível para todas as contas.)

Configuração do argumento ao executar o aplicativo

Você pode definir esse argumento na linha de comando ao executar seu aplicativo.

Por exemplo, ao chamar o comando java, você pode adicionar --add-opens=java.base/java.nio=ALL-UNNAMED, como a seguir:

java --add-opens=java.base/java.nio=ALL-UNNAMED -jar my-snowpark-app.jar.
Copy

Se você também estiver usando a autenticação de chave privada RSA, também precisará permitir sun.security.util, como no exemplo a seguir:

java --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.security.util=ALL-UNNAMED -jar my-snowpark-app.jar
Copy

Configuração do parâmetro como uma variável de ambiente

Você pode definir o parâmetro nas variáveis de ambiente do seu sistema. Consulte a documentação do seu sistema operacional para obter instruções sobre como configurar variáveis de ambiente.

Crie ou atualize uma variável de ambiente JDK_JAVA_OPTIONS, como no seguinte exemplo baseado em Unix:

export JDK_JAVA_OPTIONS="--add-opens=java.base/java.nio=ALL-UNNAMED"
Copy

Se você também estiver usando a autenticação de chave privada RSA, também precisará permitir sun.security.util, como no exemplo a seguir:

export JDK_JAVA_OPTIONS="--add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.security.util=ALL-UNNAMED"
Copy