스키마:

데이터 공유 사용

LISTING_ACCESS_HISTORY 뷰

DATA_SHARING_USAGE 스키마의 이 뷰는 컨슈머가 내 목록을 사용한 기록을 탐색하는 데 사용할 수 있습니다. LISTING_ACCESS_HISTORY는 목록에 연결된 데이터 공유나 Native App에 대해 실행되는 쿼리에 대한 오브젝트 수준 정보를 제공합니다. 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

컨슈머가 액세스한 데이터 공유의 이름입니다. IS_SHARE가 FALSE인 경우 값은 NULL입니다.

CONSUMER_ACCOUNT_LOCATOR

VARCHAR

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

CONSUMER_ACCOUNT_NAME

VARCHAR

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

CONSUMER_ACCOUNT_ORGANIZATION

VARCHAR

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

LISTING_OBJECTS_ACCESSED

ARRAY

SHARE_OBJECTS_ACCESSED는 동일한 데이터를 포함하고 있으므로 이를 사용합니다. IS_SHARE가 FALSE인 경우 값은 NULL입니다. 형식은 LISTING_OBJECTS_ACCESSED 배열 섹션을 참조하십시오.

REGION_GROUP

VARCHAR

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

CONSUMER_NAME

VARCHAR

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

IS_SHARE

BOOLEAN

공유를 통해 액세스할 경우 TRUE. TRUE인 경우 SHARE_OBJECTS_ACCESSED 열은 컨슈머 쿼리에서 액세스한 공유 오브젝트에 대한 세부 정보를 제공합니다.

IS_APPLICATION

BOOLEAN

애플리케이션을 통해 액세스할 경우 TRUE. TRUE인 경우, APPLICATION_OBJECTS_ACCESSED 열은 컨슈머 쿼리에서 액세스한 애플리케이션 오브젝트에 대한 세부 정보를 제공합니다.

SHARE_OBJECTS_ACCESSED

ARRAY

컨슈머 쿼리를 통해 액세스하는 공유 오브젝트를 자세히 설명합니다. IS_SHARE가 FALSE인 경우 값은 NULL입니다. 형식은 SHARE_OBJECTS_ACCESSED 배열 섹션을 참조하십시오.

APPLICATION_OBJECTS_ACCESSED

ARRAY

컨슈머 쿼리를 통해 액세스하는 애플리케이션 오브젝트를 자세히 설명합니다. IS_APPLICATION이 FALSE인 경우 값은 NULL입니다. APPLICATION_OBJECTS_ACCESSED 배열 섹션을 참조하십시오.

APPLICATION_PACKAGE_NAME

VARCHAR

애플리케이션이 설치된 애플리케이션 패키지의 현재 이름입니다. IS_APPLICATION이 FALSE인 경우 값은 NULL입니다.

APPLICATION_VERSION

VARCHAR

쿼리가 발생한 시점의 애플리케이션 버전입니다. IS_APPLICATION이 FALSE인 경우 값은 NULL입니다.

APPLICATION_PATCH_ID

INTEGER

쿼리가 발생한 시점의 애플리케이션 패치 번호입니다. IS_APPLICATION이 FALSE인 경우 값은 NULL입니다.

사용법 노트

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

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

SHARE_OBJECTS_ACCESSED 배열

SHARE_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

APPLICATION_OBJECTS_ACCESSED 배열

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

LISTING_OBJECTS_ACCESSED 열 배열 결과와 달리, 오브젝트 ID를 포함하는 APPLICATION_OBJECTS_ACCESSED 결과는 사용할 수 없으며 데이터베이스 이름이 마스킹됩니다.

함수:

{
  "argumentSignature": (function_signature varchar),
  "objectName": "23662386A408C571B77FDC53691793E4992D1C12.SCHEMA_NAME.FUNCTION_NAME",
  "objectDomain": "Function"
}
Copy

저장 프로시저:

{
  "argumentSignature": (function_signature varchar),
  "objectName": "23662386A408C571B77FDC53691793E4992D1C12.SCHEMA_NAME.PROCEDURE_NAME"
  "objectDomain":"Procedure"
}
Copy

테이블, 뷰, 열:

[
  {
    "Columns": [
      {
        "columnName": "column1_name"
      },
      {
        "columnName": "column2_name"
      }
    ],
    "objectDomain":"VIEW",
    "objectName": "5F3297829072D2E23B852D7787825FF762E74EF3.PUBLIC.VIEW_1"
  },
  {
    "Columns": [
      {
        "columnName": "column3_name"
      },
      {
        "columnName": "column4_name"
      }
    ],
    "objectDomain":"TABLE",
    "objectName": "D85A2CE1531C6C1E077FA701713047305BDF5A83.PUBLIC.TABLE1"
  }
]
Copy

LISTING_OBJECTS_ACCESSED 배열

대신 SHARE_OBJECTS_ACCESSED 배열 을 사용합니다.

이 섹션에는 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