특징 뷰 작업하기

참고

Snowflake Feature Store API는 Snowpark ML Python 패키지(snowflake-ml-python) v1.5.0 이상에서 사용할 수 있습니다.

기능 뷰 는 원시 데이터를 하나 이상의 관련 기능 으로 변환하는 과정을 캡슐화합니다. 기능 뷰의 모든 기능은 동일한 일정에 따라 새로 고쳐집니다. 기능 스토어는 기능을 저장하는 기능 테이블 에 의해 지원됩니다.

Snowflake Feature Store는 다음 두 가지 종류의 기능 뷰를 지원합니다.

  • Snowflake 관리 기능 뷰: Snowflake는 사용자가 지정한 일정에 따라 원시 데이터를 사용하여 기능 테이블을 자동으로 새로 고칩니다. 사용자가 새로 고침 일정을 제공하는 경우, 기능 뷰는 Snowflake에서 관리되는 것으로 간주됩니다.

  • 외부 기능 뷰: 사용자가 기능 뷰를 새로 고치기 위한 일정을 제공하지 않으면 외부로 간주됩니다. 사용자는 기능 테이블을 유지 관리하고 필요에 따라 원시 데이터에서 기능을 업데이트할 책임이 있습니다(예: dbt 같은 도구 사용).

snowflake.ml.feature_store.FeatureView 클래스는 기능 뷰와 상호 작용하기 위한 Python API입니다. FeatureView 구조체는 기능 생성 논리가 포함된 Snowpark DataFrame을 받습니다. 제공되는 DataFrame에는 기능 뷰와 연결된 엔터티에 지정된 join_keys 열도 포함되어야 합니다. 피처 뷰에 시계열 피처가 포함된 경우 타임스탬프 열 이름이 필요합니다.

Python API에 대한 자세한 내용은 Feature Store API 참조 를 참조하십시오.

Snowflake 관리 기능 뷰 만들기

Snowflake 관리 기능 뷰는 동적 테이블 을 기능 테이블로 사용합니다. 사용자가 지정한 일정에 따라 소스 데이터에서 기능을 추출하여 새로운 데이터를 효율적이고 점진적으로 처리합니다. 아래 그림은 소스에서 시작하여 기능 변환을 거쳐 기능 테이블로 데이터가 흐르는 과정을 보여줍니다.

Snowflake Feature Store의 관리되는 기능 뷰

Snowflake 관리 기능 뷰를 만들려면 다음 Python 블록과 같은 코드를 사용합니다. 여기서 entity 는 기능이 연결된 엔터티 이고 my_df 는 소스 데이터를 기반으로 기능 변환 논리가 포함된 Snowpark DataFrame입니다.

매개 변수를 refresh_freq 로 설정하면 기능 뷰가 Snowflake 관리로 지정됩니다. 값은 시간 델타(최소값 1 minute)이거나 타임존(예: * * * * * America/Los_Angeles)이 있는 cron 식일 수 있습니다.

from snowflake.ml.feature_store import FeatureView

managed_fv = FeatureView(
    name="MY_MANAGED_FV",
    entities=[entity],
    feature_df=my_df,                   # Snowpark DataFrame containing feature transformations
    timestamp_col="ts",                 # optional timestamp column name in the dataframe
    refresh_freq="5 minutes",           # how often feature data refreshes
    desc="my managed feature view"      # optional description
)
Copy

Snowpark Python 또는 SQL을 사용하여 기능 변환을 작성할 수 있습니다. Snowpark Python API는 윈도우 집계와 같은 일반적인 기능 유형을 정의하기 위한 유틸리티 함수 를 제공합니다. 이러한 함수의 사용 예제는 공통적인 특징 및 쿼리 패턴 섹션을 참조하십시오.

증분 새로 고침을 사용하려면 각 소스 테이블에 변경 내용 추적이 활성화 되어 있어야 합니다. 소스 테이블에서 변경 추적이 아직 활성화되어 있지 않으면 Snowflake는 기능 뷰의 동적 테이블을 생성할 때 자동으로 변경 추적을 활성화하려고 시도합니다. 이를 위해서는 테이블의 OWNERSHIP 권한이 필요합니다. 테이블을 소유하지 않은 경우 소유자에게 변경 내용 추적을 사용하도록 요청하거나 새로 고칠 때마다 소스 테이블을 완전히 읽어오는 refresh_mode='FULL' 로 기능 뷰를 생성합니다.

외부 기능 뷰 만들기

Snowflake Feature Store 외부에서 생성된 기능은 생성할 때 refresh_freq 매개 변수를 None 으로 설정하여 등록할 수 있습니다. 이러한 상황에서는 기능 테이블을 직접 생성하고 유지관리해야 합니다. 기능 DataFrame은 원시 데이터 소스가 아닌 기능 테이블을 기반으로 하며, 일반적으로 변환 없이 이 테이블에서 간단한 프로젝션이 포함됩니다.

참고

기능 DataFrame에서 기능 변환을 수행할 수 있으며, 이러한 계산은 기능 뷰에서 데이터를 검색할 때 필요에 따라 수행됩니다. 그러나 외부 기능 뷰는 주로 기능 변환을 수행하기 위해 이미 사용 중인 dbt 같은 도구와 함께 사용하기 위한 것입니다. 일반적으로 Snowflake가 기능 변환을 수행하도록 하려면 Snowflake가 관리하는 기능 뷰 를 사용해야 합니다.

아래 그림은 소스에서 외부 도구(여기서는 dbt)에 의한 기능 변환을 거쳐 기능 테이블로 변환되는 데이터의 흐름을 보여줍니다.

Snowflake Feature Store의 관리되는 기능 뷰

외부 기능 뷰는 기능 테이블의 로 구현되므로 추가 저장소 비용이 발생하지 않습니다.

아래 코드는 외부 기능 뷰를 생성하는 방법을 보여줍니다.

external_fv = FeatureView(
    name="MY_EXTERNAL_FV",
    entities=[entity],
    feature_df=my_df,                   # Snowpark DataFrame referencing the feature table
    timestamp_col="ts",                 # optional timestamp column name in the dataframe
    refresh_freq=None,                  # None means the feature view is external
    desc="my external feature view"     # optional description
)
Copy

기능 뷰의 검색 가능성 높이기

FeatureView 에 기능별 설명을 추가하면 Snowsight Universal Search 를 사용하여 기능을 더 쉽게 찾을 수 있습니다. 다음 예제에서는 기능 뷰의 attach_feature_desc 메서드를 사용하여 Python 사전에 포함된 각 기능에 대한 간단한 설명을 제공합니다.

external_fv = external_fv.attach_feature_desc(
    {
        "SENDERID": "Sender account ID for the transaction",
        "RECEIVERID": "Receiver account ID for the transaction",
        "IBAN": "International Bank Identifier for the receiver bank",
        "AMOUNT": "Amount of the transaction"
    }
)
Copy

두 종류의 기능 뷰 모두 기능 설명으로 보강할 수 있습니다.

기능 뷰 등록하기

기능 뷰를 완전히 정의한 후에는 사용자 지정 이름과 버전을 사용하여 기능 스토어의 register_feature_view 메서드를 사용하여 기능 스토어에 등록할 수 있습니다. 지정된 새로 고침 빈도에 따라 증분 유지 관리(지원되는 쿼리 유형에 대해) 및 자동 새로 고침이 수행됩니다.

제공된 쿼리를 동적 테이블을 사용한 증분 유지 관리를 통해 유지 관리할 수 없는 경우, 테이블은 지정된 빈도로 쿼리에서 완전히 새로 고쳐집니다. 이로 인해 기능 업데이트가 더 지연되고 유지 관리 비용이 증가할 수 있습니다. 쿼리 논리를 변경하여 증분 유지 관리를 지원하는 여러 개의 작은 쿼리로 나누거나 동적 테이블 유지 관리를 위해 더 큰 가상 웨어하우스를 프로비저닝할 수 있습니다. 동적 테이블 제한에 대한 최신 정보는 일반 제한 사항 섹션을 참조하십시오.

registered_fv: FeatureView = fs.register_feature_view(
    feature_view=managed_fv,    # feature view created above, could also use external_fv
    version="1",
    block=True,         # whether function call blocks until initial data is available
    overwrite=False,    # whether to replace existing feature view with same name/version
)
Copy

피처 뷰 파이프라인 정의는 등록된 후에는 변경할 수 없으므로 피처 뷰가 존재하는 한 일관적인 기능 계산이 제공됩니다.

기능 뷰 검색하기

기능 스토어에 기능 뷰를 등록한 후에는 필요할 때 기능 스토어의 get_feature_view 메서드를 사용하여 해당 기능 뷰를 검색할 수 있습니다.

retrieved_fv: FeatureView = fs.get_feature_view(
    name="MY_MANAGED_FV",
    version="1"
)
Copy

기능 뷰 찾기

list_feature_views 메서드를 사용하여 기능 스토어에 등록된 모든 피처 뷰를 나열할 수 있으며, 선택적으로 엔터티 이름 또는 피처 뷰 이름별로 필터링할 수 있습니다. 일치하는 기능에 대한 정보는 Snowpark DataFrame으로 반환됩니다. 다음 코드는 기능 뷰 목록을 가져오는 예제이며, fs 는 기능 스토어에 대한 참조입니다.

fs.list_feature_views(
    entity_name="<entity_name>",                # optional
    feature_view_name="<feature_view_name>",    # optional
).show()
Copy

Snowsight Feature Store UI 또는 Universal Search를 사용하여 기능을 검색할 수도 있습니다.

기능 뷰 업데이트하기

기능 스토어의 update_feature_view 메서드를 사용하여 기능 스토어에 등록한 기능 뷰의 일부 속성을 업데이트할 수 있습니다. 업데이트 가능한 속성은 다음과 같습니다.

  • 기능 뷰의 새로 고침 빈도

  • 기능 변환이 실행되는 웨어하우스

  • 기능 뷰의 설명

기능 정의 및 열은 수정할 수 없습니다. 기능 스토어의 기능을 변경하려면 기능 뷰의 새 버전을 생성합니다.

When you call update_feature_view, specify the feature view version to be updated by providing its name and version. The additional parameters specify the properties to be updated; you can specify just the ones you want to change. The following code shows an example of changing feature view properties; :code:fs is a reference to the feature store.

fs.update_feature_view(
    name="<name>",
    version="<version>",
    refresh_freq="<new_fresh_freq>",    # optional
    warehouse="<new_warehouse>",        # optional
    desc="<new_description>",           # optional
)
Copy

기능 뷰 삭제하기

You can delete a feature view from the feature store with the feature store’s delete_feature_view method. The following code shows an example of deleting a feature view; :code:fs is a reference to the feature store.

fs.delete_feature_view(
    feature_view="<name>",
    version="<version>",
)
Copy

경고

기능 뷰 버전을 삭제하면 해당 버전을 사용하는 모든 파이프라인이 손상됩니다. 삭제하기 전에 기능 뷰 버전이 사용 중이 아닌지 확인합니다.

비용 고려 사항

Snowflake 관리 기능 뷰는 Snowflake 동적 테이블을 사용합니다. 동적 테이블 모니터링에 대한 자세한 내용은 동적 테이블의 비용 이해하기 를 참조하고, 동적 테이블 비용에 대한 자세한 내용은 동적 테이블 모니터링 정보 를 참조하십시오. 외부 기능 뷰는 추가 저장 비용이 발생하지 않는 뷰를 사용합니다.

알려진 제한 사항