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)
--------------------------------------------
Após a execução de um DataFrame ter sido acionada, você pode verificar o progresso da consulta na página History 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.
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
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
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.
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
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"
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"