Python UDF 제한 사항

이 항목에서는 Python으로 작성된 처리기에 적용되는 제한 사항에 대해 설명합니다.

이 항목의 내용:

일반 제한 사항

  • Python 함수는 표준 Python 패키지의 모듈과 함수를 사용할 수 있지만, Snowflake 보안 제약 조건으로 인해 파일에 쓰는 것과 같은 일부 기능이 비활성화됩니다. 자세한 내용은 우수한 보안 관행 따르기 섹션을 참조하십시오.

  • 스테이지를 통해 가져온 모든 UDF와 모듈은 플랫폼 독립적이어야 하고 기본 확장 프로그램을 포함하지 않아야 합니다.

    • 특정 CPU 아키텍처(예: x86)를 가정하는 코드를 피하십시오.

    • 특정 운영 체제를 가정하는 코드를 피하십시오.

  • Python UDF는 공유할 수 없습니다. Python UDF를 사용하는 데이터베이스 오브젝트도 공유할 수 없습니다. 예를 들어, 사용자는 다음을 수행할 수 없습니다.

    • Python UDF를 직접 공유합니다.

    • Python UDF를 호출하는 뷰를 공유합니다.

    • Python UDF를 호출하는 함수를 공유합니다.

    • Python UDF를 호출하는 마스킹 또는 행 액세스 정책으로 테이블을 공유합니다.

  • Python UDF에 USAGE 권한을 부여하는 경우, 수신자는 해당 UDF에서 가져온 파일의 내용을 볼 수 있습니다. Python UDF에 대한 USAGE 권한을 역할에 부여하고 해당 역할이 해당 Python UDF를 호출하는 문을 실행하는 경우, 동일한 문에 있는 모든 Python UDF는 USAGE 권한을 부여받은 Python UDF에서 가져온 모든 파일의 내용을 읽을 수 있습니다.

  • 데이터베이스 복제는 인라인 Python UDF에 대해 지원됩니다. 하지만 Python UDF가 스테이지(즉, IMPORTS 절을 사용하여 생성된 함수)의 파일에 대한 종속성이 있는 경우 복제가 차단됩니다. 이 제한은 향후 버전에서 제거될 수 있습니다.

  • Snowflake는 Python zipimport 모듈을 사용하여 스테이지에서 Python 코드를 가져옵니다. 결과적으로 UDF에서도 모든 zipimport 제한 사항이 있습니다. zipimport 에 대한 자세한 내용은 zipimport 참조 를 확인해 보십시오.

복제에 대한 제한 사항

Python UDF를 포함하는 데이터베이스 또는 스키마가 복제될 때 Python UDF를 복제할 수 있습니다. 복제하려면 Python UDF가 다음 조건을 충족해야 합니다.

  • Python UDF가 스테이지를 참조하는 경우, 해당 스테이지는 복제되는 스키마(또는 데이터베이스) 외부에 있어야 합니다.

    다음과 같은 방법으로 Python UDF 및 해당 참조 스테이지를 별도의 스키마(및/또는 별도의 데이터베이스)에 보관할 수 있습니다.

    • Python UDF가 스테이지를 참조할 때마다, Python UDF의 스키마 또는 데이터베이스와는 다른 정규화된 스테이지 이름(예: 《my_db.my_schema.my_stage()》)을 사용하십시오. 복제 작업이 데이터베이스를 복제하는 경우, 스테이지 참조에는 데이터베이스와 스키마가 포함되어야 합니다. 복제 작업이 스키마를 복제하는 경우, 스테이지 참조에는 스키마(및 필요에 따라 데이터베이스)가 포함되어야 합니다.

    • 정규화되지 않은 스테이지 이름(현재 세션의 활성 데이터베이스 및 스키마를 암시적으로 사용)을 사용하여 참조 스테이지를 만들고, 세션의 현재 데이터베이스 및 스키마와 일치하지 않는 정규화된 이름을 사용하여 Python UDF를 만듭니다.

    • 사용자의 스테이지를 참조 스테이지로 사용합니다(사용자의 스테이지는 데이터베이스의 스테이지 또는 스키마의 스테이지와는 별개입니다).

스키마 또는 데이터베이스에 있는 하나 이상의 Python UDF가 필수 조건을 충족하지 않는 경우, 스키마 또는 데이터베이스를 계속 복제할 수 있지만, 비호환 Python UDF는 오류 또는 경고 메시지 없이 복제본에서 생략됩니다.

복제된 각 Python UDF는 원본과 동일한 정의를 갖습니다. 해당 정의에는 스테이지에 대한 모든 참조가 포함됩니다. Python UDF의 스테이지 참조는 정규화되어야 하므로, 복제되는 스키마 또는 데이터베이스에 상대적이지 않고 절대적입니다. 원본과 복제본이 모두 동일 스테이지와 파일을 가리키기 때문에 다음과 같습니다.

  • 스테이지를 삭제하거나 스테이지에서 필수 파일을 제거하면 원본 UDF와 복제된 UDF가 모두 비활성화됩니다.

  • 스테이지 또는 스테이지의 파일을 변경하면 원본 UDF와 복제된 UDF 모두에 영향을 줍니다.