스키마:

데이터 공유 사용

LISTING_ACCESS_HISTORY 뷰

DATA_SHARING_USAGE 스키마의 이 뷰를 사용해 자신의 계정이 소유한 데이터 공유를 게시하는 목록에 대한 액세스 기록을 탐색할 수 있습니다. LISTING_ACCESS_HISTORY는 목록에서 제공된 데이터 공유에 대해 실행된 쿼리에 대해 세부적인 정보를 제공합니다. LISTING_ACCESS_HISTORY 뷰에서 제공하는 데이터에 대한 자세한 내용은 섹션을 참조하십시오.

LISTING_ACCESS_HISTORY에서 반환된 각각의 행은 컨슈머 쿼리에서 데이터 공유에 액세스할 때의 단일 인스턴스를 나타냅니다. 주어진 기간 동안 공유에 액세스한 각 쿼리에 대해 한 행씩 여러 번 똑같은 데이터 공유가 나타날 가능성이 큽니다.

참고

이 뷰에는 애플리케이션 패키지를 데이터 제품으로 포함하는 목록이 표시되지 않습니다.

단일 컨슈머 쿼리가 여러 공유에 액세스할 수 있습니다. QUERY_TOKEN은 목록 액세스 기록에서 행을 생성한 쿼리를 식별합니다. 단일 컨슈머 쿼리에서 다룬 공유 모음을 식별하려면 QUERY_TOKEN을 사용하십시오.

LISTING_ACCESS_HISTORY 뷰에서는 공급자가 실제 쿼리 텍스트와 같은 비공개 컨슈머 정보를 얻을 수 없습니다. 또한 이 뷰에서는 공급자 계정이 소유하지 않은 오브젝트도 모두 제외됩니다. 예를 들어, 컨슈머가 목록의 데이터를 자신의 데이터 또는 다른 공급자의 데이터와 조인하는 경우 LISTING_ACCESS_HISTORY 뷰에서 자신이 소유한 공유만 반환됩니다.

열 이름

데이터 타입

설명

QUERY_TOKEN

VARCHAR

컨슈머가 실행하는 각 쿼리의 고유 ID입니다. QUERY_TOKEN은 컨슈머 측의 실제 쿼리 식별자와 상관관계가 없습니다.

QUERY_DATE

DATE

쿼리가 실행된 날짜입니다.

EXCHANGE_NAME

VARCHAR

Snowflake Marketplace 또는 목록이 제공되는 데이터 교환입니다.

SNOWFLAKE_REGION

VARCHAR

소비가 발생한 Snowflake 리전입니다.

LISTING_GLOBAL_NAME

VARCHAR

Snowflake Marketplace 또는 공유를 제공하는 데이터 교환에 있는 목록의 전역 이름입니다.

PROVIDER_ACCOUNT_LOCATOR

VARCHAR

공유 소유자의 계정 로케이터입니다.

PROVIDER_ACCOUNT_NAME

VARCHAR

공유 소유자의 계정 이름입니다.

SHARE_NAME

VARCHAR

컨슈머가 액세스한 데이터 공유의 이름입니다.

CONSUMER_ACCOUNT_LOCATOR

VARCHAR

컨슈머의 계정 로케이터입니다.

CONSUMER_ACCOUNT_NAME

VARCHAR

컨슈머의 계정 이름입니다.

CONSUMER_ACCOUNT_ORGANIZATION

VARCHAR

컨슈머 계정의 조직 이름입니다.

LISTING_OBJECTS_ACCESSED

ARRAY

형식은 LISTING_OBJECTS_ACCESSED 배열 섹션을 참조하십시오.

REGION_GROUP

VARCHAR

컨슈머 계정이 있는 리전 그룹 입니다.

CONSUMER_NAME

VARCHAR

목록에 액세스하거나 목록을 사용 또는 요청한 컨슈머 계정의 이름을 포함합니다. 평가판 계정과 같이 사용할 수 있는 이름이 없는 경우 값은 NULL입니다.

사용법 노트

  • 이 뷰에는 애플리케이션 패키지를 데이터 제품으로 포함하는 목록이 표시되지 않습니다.

  • 뷰의 지연 시간은 최대 2일입니다.

  • 데이터는 365일(1년) 동안 보관됩니다.

LISTING_OBJECTS_ACCESSED 배열

LISTING_OBJECTS_ACCESSED 배열은 컨슈머 쿼리가 액세스하는 공유의 오브젝트에 대한 세부 정보를 제공합니다. 배열에 있는 항목의 형식은 액세스한 오브젝트의 유형에 따라 다릅니다.

함수:

{
  "argumentSignature": (function_signature varchar),
  "objectName": "DATABASE_NAME.SCHEMA_NAME.FUNCTION_NAME",
  "objectID": "12345",
  "objectDomain": "Function"
}
Copy

저장 프로시저:

{
  "argumentSignature": (function_signature varchar),
  "objectName": "DATABASE_NAME.SCHEMA_NAME.PROCEDURE_NAME"
  "objectID":"12345"
  "objectDomain":"Procedure"
}
Copy

테이블, 뷰, 열:

[
  {
    "Columns": [
      {
        "columnId": ######,
        "columnName": "column1_name"
      },
      {
        "columnId": ######,
        "columnName": "column2_name"
      }
    ],
    "objectDomain":"VIEW",
    "objectId": ##view_id##,
    "objectName": "DATABASE_1.PUBLIC.VIEW_1"
  },
  {
    "Columns": [
      {
        "columnId": ######,
        "columnName": "column3_name"
      },
      {
        "columnId": ######,
        "columnName": "column4_name"
      }
    ],
    "objectDomain":"TABLE",
    "objectId": ##table_id##,
    "objectName": "DATABASE_2.PUBLIC.TABLE1"
  }
]
Copy

이 섹션에는 LISTING_ACCESS_HISTORY 뷰에 대한 SQL 쿼리 예제가 수록되어 있습니다.

예:

시간 경과에 따른 액세스 집계 뷰

(특정 기간에 걸쳐) 액세스한 함수, 저장 프로시저, 테이블, 뷰, 열 그리고 총 횟수에 대한 집계 뷰입니다.

select
  lah.exchange_name,
  lah.listing_global_name,
  lah.share_name,
  los.value:"objectName"::string as object_name,
  coalesce(los.value:"objectDomain"::string, los.value:"objectDomain"::string) as object_type,
  count(distinct lah.query_token) as n_queries,
  count(distinct lah.consumer_account_locator) as n_distinct_consumer_accounts
from SNOWFLAKE.DATA_SHARING_USAGE.LISTING_ACCESS_HISTORY as lah
join lateral flatten(input=>lah.listing_objects_accessed) as los
where true
  and query_date between '2022-03-01' and '2022-04-30'
group by 1,2,3,4,5
order by 1,2,3,4,5;
Copy

시간 경과에 따른 컨슈머별 액세스 집계 뷰

이 예는 컨슈머별로 분류된 시간 경과에 따른 액세스 집계 뷰 과 유사합니다.

select
  lah.exchange_name,
  lah.listing_global_name,
  lah.share_name,
  los.value:"objectName"::string as object_name,
  coalesce(los.value:"objectDomain"::string, los.value:"objectDomain"::string) as object_type,
  consumer_account_locator,
  count(distinct lah.query_token) as n_queries
from SNOWFLAKE.DATA_SHARING_USAGE.LISTING_ACCESS_HISTORY as lah
join lateral flatten(input=>lah.listing_objects_accessed) as los
where true
  and query_date between '2022-03-01' and '2022-04-30'
group by 1,2,3,4,5,6
order by 1,2,3,4,5,6;
Copy

열 기준 액세스 횟수

주어진 오브젝트(테이블, 뷰)의 경우, 각 열에 액세스한 횟수입니다.

select
  los.value:"objectDomain"::string as object_type,
  los.value:"objectName"::string as object_name,
  cols.value:"columnName"::string as column_name,
  count(distinct lah.query_token) as n_queries,
  count(distinct lah.consumer_account_locator) as n_distinct_consumer_accounts
from SNOWFLAKE.DATA_SHARING_USAGE.LISTING_ACCESS_HISTORY as lah
join lateral flatten(input=>lah.listing_objects_accessed) as los
join lateral flatten(input=>los.value, path=>'columns') as cols
where true
  and los.value:"objectDomain"::string in ('Table', 'View')
  and query_date between '2022-03-01' and '2022-04-30'
  and los.value:"objectName"::string = 'DATABASE_NAME.SCHEMA_NAME.TABLE_NAME'
  and lah.consumer_account_locator = 'CONSUMER_ACCOUNT_LOCATOR'
group by 1,2,3;
Copy

테이블 조인

함께 조인되고 있는 테이블 조합의 뷰입니다.

with
accesses as (
  select
    lah.query_token,
    array_agg(distinct los.value:"objectName"::string) as object_names
  from SNOWFLAKE.DATA_SHARING_USAGE.LISTING_ACCESS_HISTORY as lah
  join lateral flatten(input=>lah.listing_objects_accessed) as los
  where true
    and los.value:"objectDomain"::string in ('Table', 'View')
    and query_date between '2022-03-01' and '2022-04-30'
  group by 1
)
select
  object_names,
  sum(1) as n_queries
from accesses
group by 1
Copy

컨슈머별 테이블 조인

컨슈머별로 분류되어 함께 조인되고 있는 테이블(페어)의 뷰입니다.

with
accesses as (
  select distinct
    los.value:"objectDomain"::string as object_type,
    los.value:"objectName"::string as object_name,
    lah.query_token,
    lah.consumer_account_locator
  from SNOWFLAKE.DATA_SHARING_USAGE.LISTING_ACCESS_HISTORY as lah
  join lateral flatten(input=>lah.listing_objects_accessed) as los
  where true
    and los.value:"objectDomain"::string in ('Table', 'View')
    and query_date between '2022-03-01' and '2022-04-30'
)
select
  a1.object_name as object_name_1,
  a2.object_name as object_name_2,
  a1.consumer_account_locator as consumer_account_locator,
  count(distinct a1.query_token) as n_queries
from accesses as a1
join accesses as a2
  on a1.query_token = a2.query_token
  and a1.object_name < a2.object_name
group by 1,2,3;
Copy