如何找到在雪花中创建表的用户

Posted

技术标签:

【中文标题】如何找到在雪花中创建表的用户【英文标题】:How to find the user who created a table in Snowflake 【发布时间】:2019-11-04 17:44:05 【问题描述】:

我正在尝试查找用户为 Snowflake 中的表创建的。 Information_Schema 表只显示拥有它的角色。

浏览 Query_History 很费力。

谢谢, 山姆

Information_Schema 和 Show tables 命令。

【问题讨论】:

【参考方案1】:

在 snowflake.account_usage.query_history 中进行随机搜索可能会很费力,但有针对性的搜索相当快速和简单,这应该适合您。

SET dbName='DATABASE NAME HERE';
SET schemaName='SCHEMA NAME HERE';
SET tableName='TABLE NAME HERE';
SET create_dt=(
    SELECT MIN(created) 
    FROM snowflake.account_usage.tables 
    WHERE table_catalog = $dbName 
    AND table_schema = $schemaName 
    AND table_name = $tableName 
    AND deleted is null);

SELECT  * 
FROM   snowflake.account_usage.query_history
WHERE  query_text iLike '%CREATE%TABLE%'||$tableName||'%'
AND    execution_status = 'SUCCESS'
AND    start_time = $create_dt;

【讨论】:

【参考方案2】:

发布我想出的查询,以查找为任何想要调整它的人创建表的人的用户/角色。

// anything older than 20 days ago
SET cutoff = current_date() - 20;

SELECT h.query_text,
       h.database_name,
       h.user_name,
       h.role_name,
       t.table_name,
       u.login_name
  FROM snowflake.account_usage.query_history h 
  LEFT JOIN snowflake.account_usage.users u
    ON u.name = h.user_name 
   AND u.disabled = FALSE 
   AND u.deleted_on IS NULL
  JOIN user_stage.information_schema.tables t
    ON t.created = h.start_time
 WHERE execution_status = 'SUCCESS' 
   AND start_time < $cutoff
   AND query_type LIKE '%CREATE_TABLE%'
   AND CONTAINS(UPPER(h.query_text), UPPER(t.table_name))
   AND t.created < $cutoff;

【讨论】:

以上是关于如何找到在雪花中创建表的用户的主要内容,如果未能解决你的问题,请参考以下文章

在雪花中创建具有动态日期范围的日历表

有没有办法知道上次在雪花中访问表的时间

雪花跟踪器由哪个用户更改

来自 S3(COPY) 的雪花负载数据与来自外部表的负载

如何在雪花中获取用户角色层次结构?

如何使用主键和分区列创建雪花表?示例 DDL?