Java로 DataFrames용 저장 프로시저 만들기

Snowpark API를 사용하면 Java로 사용자 지정 람다 식의 저장 프로시저를 만들 수 있습니다. 이러한 저장 프로시저를 호출하여 DataFrame 의 데이터를 처리할 수 있습니다.

다음을 생성할 수 있습니다.

임시 저장 프로시저 만들기

현재 세션 동안만 지속될 임시 프로시저를 생성할 수 있습니다. 임시 프로시저는 다음과 같을 수 있습니다.

  • 이를 나타내는 com.snowflake.snowpark_java.StoredProcedure 유형의 변수를 프로시저를 호출하는 코드에 전달하는 등 참조로 호출할 수 있는 익명 프로시저.

  • 사용자가 할당하는 이름을 가진 명명된 프로시저. 세션 내의 다른 코드에서 이름으로 프로시저를 호출할 수 있습니다.

임시 프로시저를 생성하려면 com.snowflake.snowpark_java.SProcRegistrationregisterTemporary 메서드 중 하나로 등록하십시오. 이 메서드는 다양한 수의 프로시저 인자를 지원하기 위해 여러 번 오버로드됩니다. SProcRegistration 인스턴스를 가져오려면 com.snowflake.snowpark_java.Session 클래스의 sproc 메서드를 호출하십시오.

registerTemporary 호출 시 다음을 인자로 전달할 수 있습니다.

  • 프로시저의 이름(명명된 프로시저인 경우).

  • 람다 식으로 표현되는 프로시저 자체.

  • 단일 com.snowflake.snowpark_java.types.DataType 클래스 또는 이 클래스로 구성된 배열인 매개 변수 데이터 타입. 생성 중인 프로시저에 매개 변수가 없으면 이 인자를 생략하십시오.

    이는 프로시저에 정의된 매개 변수 유형과 일치해야 합니다.

  • 데이터 타입을 com.snowflake.snowpark_java.types.DataType 클래스로 반환합니다.

com.snowflake.snowpark_java.Session 클래스의 storedProcedure 메서드로 프로시저를 호출할 수 있습니다.

익명의 임시 프로시저 만들기

익명의 임시 프로시저를 만들려면 이름을 지정하지 않고 임시 프로시저로 등록합니다. Snowflake는 자체적으로 사용할 숨겨진 이름을 만듭니다.

다음 예제의 코드는 SProcRegistration.registerTemporary 메서드를 호출하여 람다 식에서 익명 프로시저를 만듭니다. 프로시저는 Session 오브젝트와 정수를 인자로 사용합니다. 이 메서드는 DataTypes.IntegerType 을 단일 매개 변수 유형으로, DataTypes.IntegerType 을 반환 유형으로 등록합니다.

프로시저 자체는 Session 오브젝트와 정수를 인자로 사용합니다. Session 인자는 호출자가 인자로 전달할 필요가 없는 암시적 매개 변수를 나타냅니다.

Session session = Session.builder().configFile("my_config.properties").create();

StoredProcedure sp =
  session.sproc().registerTemporary(
    (Session spSession, Integer num) -> num + 1,
    DataTypes.IntegerType,
    DataTypes.IntegerType
  );
Copy

다음 예의 코드는 sp 변수와 1 을 인자로 전달하여 익명 프로시저를 호출합니다. Session 오브젝트는 프로시저 호출 시 전달할 필요가 없는 암시적 인자입니다.

session.storedProcedure(sp, 1).show();
Copy

명명된 임시 프로시저 만들기

명명된 임시 프로시저를 만들려면 임시 프로시저의 이름을 인자 중 하나로 전달하여 임시 프로시저로 등록합니다.

다음 예제의 코드는 registerTemporary 메서드를 호출하여 프로시저의 이름을 인자로 전달해 람다 식에서 increment 라는 명명된 임시 프로시저를 만듭니다. 이 메서드는 DataTypes.IntegerType 을 단일 매개 변수 유형으로, DataTypes.IntegerType 을 반환 유형으로 등록합니다.

프로시저 자체는 Session 오브젝트와 정수를 인자로 사용합니다. Session 인자는 호출자가 인자로 전달할 필요가 없는 암시적 매개 변수를 나타냅니다.

Session session = Session.builder().configFile("my_config.properties").create();

String procName = "increment";

StoredProcedure tempSP =
  session.sproc().registerTemporary(
    procName,
    (Session session, Integer num) -> num + 1,
    DataTypes.IntegerType,
    DataTypes.IntegerType
  );
Copy

다음 예의 코드는 프로시저 이름과 1 을 인자로 전달하여 increment 프로시저를 호출합니다. Session 오브젝트는 프로시저 호출 시 전달할 필요가 없는 암시적 인자입니다.

session.storedProcedure(procName, 1).show();
Copy

영구 저장 프로시저 만들기

Snowflake 워크시트 내에서 호출하는 경우를 포함하여 어떤 세션에서든 호출할 수 있는 영구 저장 프로시저를 만들 수 있습니다.

영구 프로시저를 생성하려면 com.snowflake.snowpark_java.SProcRegistration 클래스의 registerPermanent 메서드로 등록합니다. 이 메서드는 다양한 수의 프로시저 인자를 지원하기 위해 여러 번 오버로드됩니다.

registerPermanent 호출 시 다음을 인자로 전달합니다.

  • 프로시저의 이름.

  • 람다 식으로 표현되는 프로시저 자체.

  • 단일 com.snowflake.snowpark_java.types.DataType 클래스 또는 이 클래스로 구성된 배열인 매개 변수 데이터 타입. 생성 중인 프로시저에 매개 변수가 없으면 이 인자를 생략하십시오.

    이는 프로시저에 정의된 매개 변수 유형과 일치해야 합니다.

  • com.snowflake.snowpark_java.types.DataType 클래스인 반환 데이터 타입.

  • Snowflake가 프로시저 컴파일 결과 파일을 복사해야 하는 기존 스테이지.

    Snowflake는 종속성 및 람다 함수를 포함한 모든 관련 데이터를 복사합니다. 이 저장 프로시저는 현재 세션 외부에서 호출할 수 있으므로 이는 영구 스테이지(임시 세션이 아님)여야 합니다. 프로시저가 나중에 삭제되면 스테이지에서 관련 파일을 수동으로 제거해야 합니다.

  • 이 프로시저를 호출자의 권한으로 실행해야 할지 나타내는 부울 값.

    호출자의 권한과 소유자의 권한에 대한 자세한 내용은 Understanding Caller’s Rights and Owner’s Rights Stored Procedures 섹션을 참조하십시오.

다음 예의 코드에서는 registerPermanent 메서드를 호출하여 람다 식에서 add_hundred 라는 영구 프로시저를 만듭니다.

이 메서드는 DataTypes.IntegerType 을 단일 매개 변수 유형으로, DataTypes.IntegerType 을 반환 유형으로 등록합니다. 이 메서드는 프로시저와 해당 종속성에 대해 sproc_libs 라는 스테이지를 지정합니다. 또한 호출자의 권한으로 프로시저를 실행해야 함을 지정합니다.

프로시저 자체는 Session 오브젝트와 정수를 인자로 사용합니다. Session 인자는 호출자가 인자로 전달할 필요가 없는 암시적 매개 변수를 나타냅니다.

Session session = Session.builder().configFile("my_config.properties").create();

String procName = "add_hundred";
String stageName = "sproc_libs";

StoredProcedure sp =
    session.sproc().registerPermanent(
        procName,
        (Session session, Integer num) -> num + 100,
        DataTypes.IntegerType,
        DataTypes.IntegerType,
        stageName,
        true
    );
Copy

다음 예의 코드는 com.snowflake.snowpark_java.Session 클래스의 storedProcedure 메서드를 사용하여 add_hundred 프로시저를 호출합니다. 이 호출은 프로시저 이름과 1 을 인자로 전달합니다. 처리기에서 인자로 사용되는 Session 오브젝트는 프로시저 호출 시 전달할 필요가 없는 암시적 인자입니다.

session.storedProcedure(procName, 1).show();
Copy