UDF: 스테이지에서 파일을 읽는 처리기 코드가 있는 함수가 소유자의 컨텍스트에서 실행됨

주의

이 동작 변경 사항은 2023_03 번들에 있습니다.

번들의 현재 상태는 번들 기록 섹션을 참조하십시오.

스테이지에서 파일을 읽는 처리기 코드가 있는 UDF는 소유자의 컨텍스트에서 실행됩니다. 호출자는 처리기 코드가 UDF 또는 프로시저에 있는지 여부와 UDF나 프로시저가 호출자 권한 또는 소유자 권한으로 실행 중인지 여부에 관계없이 파일 위치를 범위가 지정된 URL로 전달해야 합니다.

이전

UDF 처리기의 Java 코드는 스테이지에서 파일을 읽을 때 호출자의 컨텍스트를 사용해 읽습니다.

호출자는 select my_function('@stage-name/filename.txt'). 와 같은 형식을 사용하여 파일의 위치를 함수에 전달할 수 있습니다.

처리기 코드는 스테이지 URL을 수신하고 SnowflakeFile.newInstanceSnowflakeFile.getInputStream 으로 파일을 읽거나 파일을 java.io.InputStream 으로 수신합니다.

SnowflakeFile sfFile = SnowflakeFile.newInstance(file_url);
InputStream is = sfFile.getInputStream();
Copy

처리기 코드에서 읽은 파일은 외부 스테이지나 사용자 또는 명명된 내부 스테이지에 있을 수 있습니다.

현재

UDF 처리기의 Java 코드가 스테이지에서 파일을 읽을 때 소유자의 컨텍스트를 사용해 읽습니다.

UDF와 프로시저 모두에 대해 호출자는 다음 함수 예제에서처럼 BUILD_SCOPED_FILE_URL 함수를 사용하여 범위가 지정된 URL에서 파일 위치를 전달해야 합니다.

select my_func(build_scoped_file_url(@my_stage, 'filename.txt'));

처리기 코드는 범위가 지정된 URL을 수신하고 이전과 같이 파일을 읽습니다.

SnowflakeFile sfFile = SnowflakeFile.newInstance(scopedFileUrl);
InputStream is = sfFile.getInputStream();
Copy

처리기 코드 내에서 (호출자가 전달한 범위가 지정된 URL로서가 아니라) 위치가 지정된 파일의 경우 두 가지 방법 중 하나로 스테이징된 파일을 읽을 수 있는데, 처리기 코드가 새 requireScopedUrl 매개 변수에 대해 부울 값으로 newInstance 메서드를 호출할 수 있거나 처리기 코드가 파일 경로에서 InputStream를 생성할 때 범위가 지정된 URL을 사용해야 합니다.

다음 예에서는 SnowflakeFile.newInstance 를 사용합니다.

String filename = “@my_stage/filename.txt”;
SnowflakeFile sfFile = SnowflakeFile.newInstance(filename, require_scoped_url = false).
Copy

또한 사용자 스테이지는 더 이상 처리기가 읽는 파일의 위치로 지원되지 않습니다. 처리기 코드에서 읽은 파일은 외부 스테이지 또는 명명된 내부 스테이지에 있어야 합니다.

참조: 1008