Snowpark(Scala)에서 저장 프로시저 작성하기

이 미리 보기 기능을 사용하여 Scala에서 저장 프로시저를 작성할 수 있습니다. 저장 프로시저 내에서 Snowpark 라이브러리를 사용하여 Snowflake의 테이블에 대한 쿼리, 업데이트 및 기타 작업을 수행할 수 있습니다.

이 항목에서는 Scala에서 저장 프로시저를 작성하는 방법에 대해 설명합니다.

이 항목의 내용:

소개

Snowpark 저장 프로시저를 사용하면 Snowflake 웨어하우스를 컴퓨팅 프레임워크로 사용하여 Snowflake 내에서 데이터 파이프라인을 구축하고 실행할 수 있습니다. 데이터 파이프라인용 코드의 경우, Scala용 Snowpark API를 사용하여 저장 프로시저를 작성합니다. 이러한 저장 프로시저의 실행을 예약하려면 작업 을 사용합니다.

제한 사항

Snowpark 저장 프로시저에는 다음과 같은 제한 사항이 있습니다.

  • 동시성은 지원되지 않습니다. 예를 들어 코드 내에서 여러 스레드의 쿼리를 제출할 수 없습니다. 여러 쿼리를 동시에 실행하는 코드는 오류를 일으킵니다.

  • 작업에서 저장 프로시저를 실행하는 경우, 작업을 만들 때 웨어하우스를 지정해야 합니다. (사용자는 Snowflake가 관리하는 컴퓨팅 리소스를 사용하여 작업을 실행할 수 없습니다.)

  • Reading and writing files from stored procedure handler code in Scala is not yet fully supported. Reading and writing files may result in unstable behavior. This includes receiving an InputStream as an argument and using methods available from the FileOperation class (which you typically access via the Session.file method), including put and get.

  • 저장 프로시저에서 일부 Snowpark API를 사용할 때 다음 제한 사항이 있습니다.

    • PUT 및 GET 명령을 실행하는 API (Session.sql("PUT ...")Session.sql("GET ...") 포함)를 사용할 때 프로시저를 호출하는 쿼리에 대해 제공된 메모리 지원 파일 시스템의 /tmp 디렉터리에만 쓸 수 있습니다.

    • 비동기 작업용 API 를 사용하지 마십시오.

    • 새 세션을 만드는 API (예: Session.builder().configs(...).create())를 사용하지 마십시오.

    • session.jdbcConnection 과 이를 통해 반환되는 연결을 사용하면 안전하지 않은 동작이 발생할 수 있으므로 이 기능은 지원되지 않습니다.

전제 조건

버전 1.1.0 또는 최신 버전의 Snowpark 라이브러리를 사용해야 합니다.

미리 컴파일된 저장 프로시저를 작성하는 경우, Java 버전 11.x에서 실행되도록 클래스를 컴파일해야 합니다.

Snowpark를 위한 개발 환경 설정

다음으로, Snowpark 라이브러리를 사용하기 위한 개발 환경을 설정합니다. Snowpark Scala를 위한 개발 환경 설정하기 섹션을 참조하십시오.

인라인 또는 미리 컴파일된 저장 프로시저를 만들도록 선택하기

Java UDF의 경우와 마찬가지로 인라인 저장 프로시저 또는 미리 컴파일된 저장 프로시저를 작성할 수 있습니다.

  • 인라인 저장 프로시저에서 사용자는 CREATE PROCEDURE 문의 AS 절에 Scala 코드를 작성합니다. 예:

    CREATE OR REPLACE PROCEDURE MYPROC(fromTable STRING, toTable STRING, count INT)
      RETURNS STRING
      LANGUAGE SCALA
      RUNTIME_VERSION = '2.12'
      PACKAGES = ('com.snowflake:snowpark:latest')
      HANDLER = 'MyScalaObject.run'
      AS
      $$
        object MyScalaObject {
          def run(session: com.snowflake.snowpark.Session, fromTable: String, toTable: String, count: Int): String = {
            session.table(fromTable).limit(count).write.saveAsTable(toTable)
            return "SUCCESS"
          }
        }
      $$;
    

    참고

    반복 호출에서 더 빠르게 실행하기 위해 사용자는 Snowflake가 컴파일된 클래스를 저장해야 하는 JAR 파일의 위치로 TARGET_PATH를 설정할 수 있습니다. 저장 프로시저 만들기 섹션을 참조하십시오.

  • 미리 컴파일된 저장 프로시저에서 Scala 코드를 .scala 소스 파일에 작성합니다.

    예:

    object MyScalaObject {
      def run(session: com.snowflake.snowpark.Session, fromTable: String, toTable: String, count: Int): String = {
        session.table(fromTable).limit(count).write.saveAsTable(toTable)
        return "SUCCESS"
      }
    }
    

    그런 다음 코드를 컴파일하고, 클래스를 JAR 파일로 패키징하고, JAR 파일을 스테이지에 업로드하고, 스테이지의 JAR 파일을 가리키는 CREATE PROCEDURE 명령을 실행합니다. 예:

    CREATE OR REPLACE PROCEDURE MYPROC(value INT, fromTable STRING, toTable STRING, count INT)
      RETURNS INT
      LANGUAGE SCALA
      RUNTIME_VERSION = '2.12'
      PACKAGES = ('com.snowflake:snowpark:latest')
      IMPORTS = ('@mystage/MyCompiledScalaCode.jar')
      HANDLER = 'MyScalaObject.run';
    

저장 프로시저에 대한 Scala 코드 작성하기

저장 프로시저에 대한 코드의 경우 Scala 메서드 또는 함수를 작성해야 합니다. 다음 섹션에서는 코드 작성에 대한 지침을 제공합니다.

저장 프로시저 작성 계획하기

저장 프로시저에 대한 Scala 코드에는 Java UDF에 대한 코드와 동일한 제약 조건이 있습니다. 저장 프로시저 작성을 계획할 때 이러한 제약 조건을 고려해야 합니다.

사용되는 메모리 양 제한

Java UDF 의 경우와 마찬가지로 Snowflake는 필요한 메모리 양 측면에서 메서드 또는 함수에 제한을 둡니다.

메서드나 함수에서 너무 많은 메모리를 사용하지 않아야 합니다.

스레드로부터 안전한 코드 작성하기

유사하게, Java UDF의 경우와 마찬가지로 메서드 또는 함수가 스레드로부터 안전한지 확인해야 합니다.

보안 제한 이해하기

메서드 또는 함수는 제한된 엔진 내에서 실행되므로 Java UDF에 대해 문서화된 것과 동일한 규칙을 따라야 합니다.

소유자의 권한 또는 호출자의 권한 사용 결정하기

또한, 저장 프로시저를 작성하려고 계획할 때 저장 프로시저를 호출자의 권한으로 실행할지 소유자의 권한으로 실행할지 여부를 고려하십시오.

저장 프로시저의 시간 초과 동작을 염두에 두십시오.

코드 활동으로 타이머가 재설정되지 않는 한 저장 프로시저 실행 시간이 초과됩니다. 특히 시간 제한 타이머는 파일 작업, 쿼리, 결과 세트를 통한 반복을 포함하여, 코드와 데이터의 상호 작용에 의해 재설정됩니다.

클래스 또는 오브젝트 작성하기

정의하는 메서드나 함수는 클래스나 오브젝트의 일부여야 합니다.

클래스나 오브젝트를 작성할 때 다음 사항에 유의하십시오.

  • 클래스(또는 오브젝트) 및 메서드는 보호되거나 비공개여서는 안 됩니다.

  • 메서드가 정적이 아니고 사용자가 생성자를 정의하려는 경우, 클래스에 대해 인자 없는 생성자를 정의합니다. Snowflake는 초기화 시 이 인자 없는 생성자를 호출하여 클래스의 인스턴스를 만듭니다.

  • 동일한 클래스 또는 오브젝트에서 서로 다른 저장 프로시저에 대해 서로 다른 메서드를 정의할 수 있습니다.

메서드 또는 함수 작성하기

저장 프로시저에 대한 메서드 또는 함수를 작성할 때 다음 사항에 유의하십시오.

  • Snowpark Session 오브젝트를 메서드 또는 함수의 첫 번째 인자로 지정합니다.

    저장 프로시저를 호출하면 Snowflake는 자동으로 Session 오브젝트를 생성하여 저장 프로시저에 전달합니다. (Session Session 오브젝트를 직접 만들 수는 없습니다.)

  • 나머지 인자와 반환 값의 경우, Snowflake 데이터 타입 에 해당하는 Scala 타입 을 사용합니다.

  • 메서드 또는 함수는 값을 반환해야 합니다. Scala의 저장 프로시저의 경우 반환 값이 필요합니다.

저장 프로시저에서 Snowflake의 데이터에 액세스하기

Snowflake의 데이터에 액세스하려면 Snowpark 라이브러리 API를 사용합니다.

Scala 저장 프로시저에 대한 호출을 처리할 때 Snowflake는 Snowpark Session 오브젝트를 생성하고 저장 프로시저에 대한 메서드나 함수에 오브젝트를 전달합니다.

다른 언어의 저장 프로시저의 경우와 마찬가지로 세션의 컨텍스트(예: 권한, 현재 데이터베이스, 스키마 등)는 저장 프로시저가 호출자의 권한으로 실행되는지 소유자의 권한으로 실행되는지에 따라 결정됩니다. 자세한 내용은 세션 상태 섹션을 참조하십시오.

Session 오브젝트를 사용하여 Snowpark 라이브러리 에서 API를 호출할 수 있습니다. 예를 들어, 테이블에 대한 DataFrame을 만들거나 SQL 문을 실행할 수 있습니다.

자세한 내용은 Scala용 Snowpark 개발자 가이드 를 참조하십시오.

참고

데이터 액세스에 대한 제한 사항을 비롯하여, 제한 사항에 대한 자세한 내용은 제한 사항 섹션을 참조하십시오.

다음은 지정된 수의 행을 한 테이블에서 다른 테이블로 복사하는 Scala 메서드의 예입니다. 이 메서드는 다음 인자를 사용합니다.

  • Snowpark Session 오브젝트

  • 행을 복사할 출처가 되는 테이블의 이름

  • 행이 저장될 테이블의 이름

  • 복사할 행의 수

이 예의 메서드는 문자열을 반환합니다.

object MyObject
{
  def myProcedure(session: com.snowflake.snowpark.Session, fromTable: String, toTable: String, count: Int): String =
  {
    session.table(fromTable).limit(count).write.saveAsTable(toTable)
    return "Success"
  }
}

다음 예에서는 메서드가 아닌 함수를 정의합니다.

object MyObject
{
  val myProcedure = (session: com.snowflake.snowpark.Session, fromTable: String, toTable: String, count: Int): String =>
  {
    session.table(fromTable).limit(count).write.saveAsTable(toTable)
    "Success"
  }
}

다른 클래스 및 리소스 파일에 액세스하기

코드가 저장 프로시저 외부에 정의된 클래스(예: 별도 JAR 파일의 클래스) 또는 리소스 파일에 의존하는 경우, 저장 프로시저가 실행될 때 파일을 사용할 수 있도록 해당 파일을 스테이지에 업로드 해야 합니다.

나중에 CREATE PROCEDURE 문을 실행 할 때 IMPORTS 절을 사용하여 이러한 파일을 가리킵니다.

미리 컴파일된 저장 프로시저 준비하기

인라인 저장 프로시저가 아닌 미리 컴파일된 저장 프로시저를 만들려고 계획하는 경우 클래스를 JAR 파일로 컴파일 및 패키징해야 하며 JAR 파일을 스테이지에 업로드해야 합니다.

Scala 코드 컴파일 및 패키징하기

저장 프로시저를 더 쉽게 설정하려면 저장 프로시저에 필요한 모든 종속성을 포함하는 JAR 파일을 빌드합니다. 나중에 JAR 파일을 스테이지에 업로드하고 CREATE PROCEDURE 문에서 JAR 파일을 가리켜야 합니다. 업로드하고 가리킬 JAR 파일이 더 적은 경우에는 이 프로세스가 더 간단합니다.

다음 섹션에서는 모든 종속성을 포함하는 JAR 파일을 만드는 방법에 대한 몇 가지 팁을 제공합니다.

SBT를 사용하여 종속성이 있는 JAR 파일 빌드하기

SBT를 사용하여 코드를 빌드하고 패키지하는 경우 sbt-assembly 플러그인 을 사용하면 모든 종속성을 포함하는 JAR 파일을 만들 수 있습니다.

  1. build.sbt 파일이 포함된 디렉터리에서 project/ 하위 디렉터리에 plugins.sbt 라는 파일을 만듭니다.

    예를 들어 build.sbt 파일이 포함된 디렉터리가 hello-snowpark/ 인 경우 hello-snowpark/project/plugins.sbt 파일을 만듭니다.

    hello-snowpark/
                 |__ build.sbt
                 |__ project/
                           |__plugins.sbt
    
  2. plugins.sbt 파일에서 다음 줄을 추가합니다.

    addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.1.0")
    
  3. 동일한 라이브러리의 여러 버전이 프로젝트에 필요한 경우(예: 프로젝트가 세 번째 라이브러리의 다른 버전을 필요로 하는 두 라이브러리에 의존하는 경우) build.sbt 파일에서 병합 전략을 정의하여 종속성을 해결합니다. 자세한 내용은 병합 전략 을 참조하십시오.

  4. build.sbt 파일에서 Snowpark 라이브러리 버전을 필요한 최소 버전 이상으로 업데이트합니다.

    libraryDependencies += "com.snowflake" % "snowpark" % "1.1.0" % "provided"
    

    또한, 종속성이 "provided" (위에 표시됨)임을 지정하여 JAR 파일에서 Snowpark 라이브러리를 제외합니다.

  5. 프로젝트의 디렉터리(예: hello-snowpark)로 변경하고 다음 명령을 실행합니다.

    sbt assembly
    

    참고

    Not a valid command: assembly, Not a valid project ID: assembly 또는 Not a valid key: assembly 오류가 발생하는 경우 plugins.sbt 파일이 project/ 라는 하위 디렉터리(1단계에서 언급됨)에 있는지 확인하십시오.

    이 명령은 다음 위치에 JAR 파일을 만듭니다.

    target/scala-<version>/<project-name>-assembly-1.0.jar
    

Maven을 사용하여 종속성이 있는 JAR 파일 빌드하기

Maven을 사용하여 코드를 빌드하고 패키지하는 경우 Maven Assembly Plugin 을 사용하면 모든 종속성을 포함하는 JAR 파일을 만들 수 있습니다.

  1. 프로젝트 디렉터리(예: hello-snowpark/)에서 assembly/ 라는 하위 디렉터리를 만듭니다.

  2. 해당 디렉터리에서, JAR 파일에 종속성을 포함하도록 지정하는 어셈블리 설명자 파일 을 만듭니다.

    예는 jar-with-dependencies 를 참조하십시오.

  3. 어셈블리 설명자에서, JAR 파일에서 Snowpark 라이브러리를 제외하는 <dependencySet> 요소를 추가합니다.

    예:

    <assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
      <id>jar-with-dependencies</id>
      <formats>
         <format>jar</format>
      </formats>
      <includeBaseDirectory>false</includeBaseDirectory>
      <dependencySets>
        <dependencySet>
          <outputDirectory>/</outputDirectory>
          <useProjectArtifact>false</useProjectArtifact>
          <unpack>true</unpack>
          <scope>provided</scope>
          <excludes>
            <exclude>com.snowflake:snowpark</exclude>
          </excludes>
        </dependencySet>
      </dependencySets>
    </assembly>
    

    어셈블리 설명자의 요소에 대한 자세한 내용은 어셈블리 설명자 형식 을 참조하십시오.

  4. pom.xml 파일의 <project> » <build> » <plugins> 아래에 Maven Assembly Plugin용 <plugin> 요소를 추가합니다.

    또한, <configuration> » <descriptors> 아래에 이전 단계에서 만든 어셈블리 설명자 파일을 가리키는 <descriptor> 를 추가합니다.

    예:

    <project>
      [...]
      <build>
        [...]
        <plugins>
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.3.0</version>
            <configuration>
              <descriptors>
                <descriptor>src/assembly/jar-with-dependencies.xml</descriptor>
              </descriptors>
            </configuration>
            [...]
          </plugin>
          [...]
        </plugins>
        [...]
      </build>
      [...]
    </project>
    

다른 도구를 사용하여 종속성이 있는 JAR 파일 빌드하기

SBT 또는 Maven을 사용하지 않는 경우, 모든 종속성을 사용하여 JAR 파일을 빌드하는 방법에 대한 지침은 해당 빌드 도구의 설명서를 참조하십시오.

예를 들어 IntelliJ IDEA 프로젝트(IntelliJ의 SBT 프로젝트가 아님)를 사용하는 경우 아티팩트 구성 설정에 대한 지침 을 참조하십시오.

스테이지에 파일 업로드하기

다음으로, 저장 프로시저에 필요한 파일을 스테이지에 업로드합니다.

  1. 파일의 스테이지를 선택합니다.

    외부 또는 명명된 내부 스테이지를 사용할 수 있습니다. PUT 명령을 사용하여 파일을 업로드하려는 계획인 경우, 명명된 내부 스테이지를 사용합니다. (PUT 명령은 외부 스테이지에 파일을 업로드하는 것을 지원하지 않습니다.)

    기존 스테이지를 사용하거나 CREATE STAGE 를 실행하여 새 스테이지를 생성할 수 있습니다. 예를 들어 다음 명령은 mystage 라는 새 내부 스테이지를 만듭니다.

    CREATE STAGE mystage;
    

    참고

    저장 프로시저의 소유자는 스테이지에 대한 READ 권한 이 있어야 합니다.

  2. PUT 명령을 사용하여 해당 스테이지에 다음 파일을 업로드합니다.

    • 컴파일된 Scala 코드를 포함하는 JAR 파일.

    • 저장 프로시저가 의존하는 다른 모든 파일.

    예:

    PUT file:///Users/MyUserName/myjar.jar
            @mystage
            AUTO_COMPRESS = FALSE
            OVERWRITE = TRUE
            ;
    

    참고

    AUTO_COMPRESS = FALSE 를 생략하면 PUT 명령이 자동으로 파일을 압축합니다. 스테이지의 압축 파일 이름은 myjar.jar.gz 가 됩니다. 나중에 CREATE PROCEDURE 명령을 실행 할 때 사용자는 IMPORTS 절에서 이 .gz 확장자를 가진 파일 이름을 지정해야 합니다.

컴파일된 Scala 코드가 포함된 JAR 파일을 삭제하거나 이름을 바꾸면 더 이상 저장 프로시저를 호출할 수 없습니다.

JAR 파일을 업데이트해야 하는 경우:

  • 저장 프로시저를 호출할 수 없는 동안 업데이트합니다.

  • PUT 명령에 OVERWRITE=TRUE 절을 추가합니다.

저장 프로시저 만들기

그런 다음 CREATE PROCEDURE 문을 실행하여 메서드나 함수에 대한 저장 프로시저를 만듭니다. 아래 표에 나열된 매개 변수를 설정합니다.

매개 변수

설명

[ arg_name arg_data_type [, ... ] ]

  • Snowpark Session 오브젝트에 대한 인자를 생략합니다. 앞서 언급했듯이 이는 CREATE PROCEDURE 또는 CALL에서 지정하는 형식 매개 변수가 아닙니다. 저장 프로시저를 호출하면 Snowflake는 Session 오브젝트를 생성하여 저장 프로시저에 전달합니다.

  • 나머지 인자의 데이터 타입의 경우, 메서드 또는 함수에 있는 인자의 Scala 타입 에 해당하는 Snowflake 데이터 타입 을 사용합니다.

RETURNS result_data_type

반환 값의 Snowflake 데이터 타입으로 RETURNS를 지정합니다.

LANGUAGE SCALA

저장 프로시저 코드가 Scala로 작성되었음을 나타내려면 이를 지정해야 합니다.

RUNTIME_VERSION = '2.12'

저장 프로시저가 Scala 2.12를 사용함을 나타내려면 이를 지정해야 합니다.

PACKAGES = ( 'package_name' )

이 목록에서, 사용하려는 Snowpark 라이브러리 버전에 대한 패키지를 포함합니다.

Snowpark 라이브러리의 정규화된 패키지 이름을 다음 형식으로 지정합니다.

com.snowflake:snowpark:<version>

예:

  • 최신 버전의 Snowpark를 사용하려면 다음을 사용합니다.

    PACKAGES = ('com.snowflake:snowpark:latest')
    
  • 1.6.0 버전의 Snowpark를 사용하려면 다음을 사용합니다.

    PACKAGES = ('com.snowflake:snowpark:1.6.0')

참고

새 저장 프로시저를 만들 때 버전 1.1.0 이상을 지정하십시오.

Snowflake는 저장 프로시저에서 Snowpark 버전 0.9.0 이상 사용을 지원합니다. 그러나 이러한 버전에는 제한 사항이 있습니다. 예를 들어 1.1.0 이전 버전은 저장 프로시저에서 트랜잭션 사용을 지원하지 않습니다.

지원되는 패키지 및 버전 목록을 보려면 INFORMATION_SCHEMA.PACKAGES 뷰 에서 LANGUAGE = 'scala' 인 행을 쿼리하십시오. 예:

select * from information_schema.packages where language = 'scala';

IMPORTS = ( 'file' [, 'file' ... ] )

스테이지 위치 에 업로드한 JAR 파일에 저장 프로시저가 의존하는 경우 이 목록에 해당 파일을 포함합니다.

인라인 저장 프로시저를 작성하는 경우, 코드가 저장 프로시저 또는 리소스 파일 외부에 정의된 클래스에 종속되지 않는 한 이 절을 생략할 수 있습니다.

미리 컴파일된 저장 프로시저를 작성하는 경우 저장 프로시저의 정의가 포함된 JAR 파일도 포함해야 합니다.

HANDLER = 'method_name'

이를 Scala 메서드 또는 함수의 정규화된 이름으로 설정합니다.

TARGET_PATH = 'jar_file'

인라인 저장 프로시저를 작성 중이고, Snowflake가 호출할 때마다 코드를 다시 컴파일하지 않도록 하려면 이를 Snowflake가 컴파일된 코드에 대해 만들어야 하는 JAR 파일로 설정할 수 있습니다.

이는 WRITE 권한이 있는 스테이지의 경로여야 합니다.

EXECUTE AS CALLER

호출자의 권한 을 사용하도록 저장 프로시저를 설정하려는 계획인 경우 이 매개 변수를 추가합니다.

그렇지 않은 경우, 소유자 권한을 사용하려면 이 매개 변수를 생략합니다.

다음 예에서는 Scala에서 저장 프로시저를 만듭니다.

예 1: 인라인 저장 프로시저:

CREATE OR REPLACE PROCEDURE myProc(fromTable STRING, toTable STRING, count INT)
RETURNS STRING
LANGUAGE SCALA
RUNTIME_VERSION = '2.12'
PACKAGES = ('com.snowflake:snowpark:latest')
HANDLER = 'MyObject.myProcedure'
AS
$$
  object MyObject
  {
    def myProcedure(session: com.snowflake.snowpark.Session, fromTable: String, toTable: String, count: Int): String =
    {
      session.table(fromTable).limit(count).write.saveAsTable(toTable)
      return "Success"
    }
  }
$$;

예 2: 내부 스테이지 mystage 의 JAR 파일 myjar.jar 에서 컴파일된 코드를 사용하는 미리 컴파일된 저장 프로시저:

CREATE OR REPLACE PROCEDURE myProc(fromTable STRING, toTable STRING, count INT)
RETURNS STRING
LANGUAGE SCALA
RUNTIME_VERSION = '2.12'
PACKAGES = ('com.snowflake:snowpark:latest')
IMPORTS = ('@mystage/myjar.jar')
HANDLER = 'MyObject.myProcedure';

저장 프로시저 호출하기

사용자가 저장 프로시저를 호출하려면 사용자의 역할에 저장 프로시저에 대한 USAGE 권한 이 있어야 합니다.

저장 프로시저를 호출할 권한이 있으면 CALL 문을 사용하여 저장 프로시저를 호출할 수 있습니다. 예:

CALL myProc('table_a', 'table_b', 5);

부록: Scala 데이터 타입을 Snowflake 데이터 타입에 매핑하기

UDF의 인자 및 반환 값의 경우 Snowflake는 매개 변수 및 반환 형식에 대한 SQL-Java 데이터 타입 매핑 에 나열된 Java 타입 외에 다음 Scala 데이터 타입을 지원합니다.

SQL 데이터 타입

Scala 데이터 타입

참고

NUMBER

다음 타입이 지원됩니다.

  • Int 또는 Option[Int]

  • Long 또는 Option[Long]

FLOAT

Float 또는 Option[Float]

DOUBLE

Double 또는 Option[Double]

VARCHAR

String

BOOLEAN

Boolean 또는 Option[Boolean]

BINARY

Array[Byte]

VARIANT

String

표시되는 형식에 따라 값의 형식을 지정합니다. 베리언트 null 은 《null》 문자열로 형식이 지정됩니다.

ARRAY

Array[String]

OBJECT

Map[String, String]

DATETIMESTAMP 의 경우, 매개 변수 및 반환 형식에 대한 SQL-Java 데이터 타입 매핑 에 나열된 Java 타입을 사용합니다.

맨 위로 이동