Snowpark Java로 쿼리를 분석하고 문제를 해결하기

이 항목에서는 Snowpark 라이브러리로 작업할 때의 쿼리 분석 및 문제 해결에 대한 몇 가지 지침을 제공합니다.

이 항목의 내용:

Snowpark에서 쿼리 실행 계획 보기

DataFrame의 평가 계획을 검사하려면 DataFrame의 explain 메서드를 호출하십시오. 이 작업은 DataFrame을 평가하는 데 사용되는 SQL 문을 출력합니다. SQL 문이 하나만 있는 경우, 이 메서드는 이 문에 대한 논리적 계획도 출력합니다.

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

DataFrame 실행이 트리거된 후 Classic Console 의 History 기록 탭 페이지에서 쿼리 진행 상황을 확인할 수 있습니다.

Query Tag 열에서는 이 쿼리를 트리거한 코드의 함수 이름과 줄 번호를 찾을 수 있습니다.

Classic Console 기록 페이지의 Snowpark 요청

로깅 설정 변경하기

기본적으로 Snowpark 라이브러리는 INFO 수준 메시지를 stdout에 로그합니다. 로깅 설정을 변경하려면 simplelogger.properties 파일을 만들고 해당 파일에서 로거 속성을 구성합니다. 예를 들어, 로그 수준을 DEBUG 로 설정하려면:

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

이 파일을 클래스 경로에 넣으십시오. Maven 디렉터리 레이아웃을 사용하는 경우, 파일을 src/main/resources/ 디렉터리에 넣으십시오.

java.lang.OutOfMemoryError 예외

java.lang.OutOfMemoryError 예외가 발생하면 JVM의 최대 힙 크기를 늘리십시오(예: -J-Xmxmaximum_size 플래그를 통해).

Java 17의 명명되지 않은 모듈 오류

Java 17에서 Snowpark Java 또는 Scala 클라이언트를 실행할 때 다음 오류가 표시될 수 있습니다.

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

이는 Snowpark가 Java 9 이후 기본적으로 노출되지 않는 내부 Java API를 사용하는 Apache Arrow 커넥터 를 사용하기 때문입니다.

이 오류를 해결하려면 애플리케이션을 실행할 때 또는 시스템의 환경 변수에서 다음 매개 변수를 명령줄 인자로 설정하십시오.

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

참고

Snowpark API는 다음 버전의 Java를 지원합니다.

  • 11.x

  • 17.x(이 함수에 대한 미리 보기 지원은 모든 계정에서 사용할 수 있습니다.)

애플리케이션 실행 시 인자 설정하기

애플리케이션을 실행할 때 명령줄에서 이 인자를 설정할 수 있습니다.

예를 들어, java 명령을 호출할 때 다음과 같이 --add-opens=java.base/java.nio=ALL-UNNAMED 를 추가할 수 있습니다.

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

RSA 개인 키 인증도 사용하는 경우 다음 예와 같이 sun.security.util 도 허용해야 합니다.

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

매개 변수를 환경 변수로 설정하기

시스템의 환경 변수에서 매개 변수를 설정할 수 있습니다. 환경 변수 설정에 대한 지침은 운영 체제 설명서를 참조하십시오.

다음 Unix 기반 예에서처럼 JDK_JAVA_OPTIONS 환경 변수를 생성하거나 업데이트합니다.

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

RSA 개인 키 인증도 사용하는 경우 다음 예와 같이 sun.security.util 도 허용해야 합니다.

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