架构:

数据共享使用情况

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

使用者访问的数据共享名称。如果 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

详细说明使用者查询访问的应用程序对象。如果 FALSE 为 NULL,则值为 。请参阅 APPLICATION_OBJECTS_ACCESSED 数组

APPLICATION_PACKAGE_NAME

VARCHAR

安装应用程序的应用程序包的当前名称。如果 FALSE 为 NULL,则值为 。

APPLICATION_VERSION

VARCHAR

查询发生时的应用程序版本。如果 IS_APPLICATION 为 FALSE,则值为 NULL

APPLICATION_PATCH_ID

INTEGER

查询发生时的应用程序补丁号。如果 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 数组提供有关使用者查询访问的原生应用程序中的对象的详细信息。数组中项目的格式取决于所访问的对象的类型。

与 LISTING_OBJECTS_ACCESSED 列数组结果不同,包含对象 IDs 的 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
语言: 中文