雪花的系统表查询

时间:2021-02-12 16:08:18

标签: sql snowflake-cloud-data-platform

如何使用snowsql在snowflake中的存储过程\视图中查找表名?

SQL Sever 中等价的 SQL 语句是:

select distinct 
    [Table Name] = o.Name, [Found In] = sp.Name, sp.type_desc
from 
    sys.objects o 
inner join 
    sys.sql_expression_dependencies sd on o.object_id = sd.referenced_id
inner join 
    sys.objects sp on sd.referencing_id = sp.object_id
                   and sp.type in ('P', 'FN')
where
    o.name = 'YourTableName'
order by 
    sp.Name

2 个答案:

答案 0 :(得分:0)

Snowflake 存储过程定义存储在共享数据库 Snowfalke 的对象中、模式 Account_Usage 和表函数中。

选择* 从函数 其中 upper(function_definition) 像 '%TABLENAME%' 和 function_language = 'JAVASCRIPT';

这并不准确,但应该能让你接近你想去的地方。

答案 1 :(得分:0)

正如其他答案中提到的,没有直接的等价物。以下是实现类似目标的一种笨拙且容易出错的方法。

SELECT procedure_schema,procedure_name, procedure_definition

来自 information_schema.procedures where rlike(procedure_definition,'.\bTABLE_NAME\b.','si');

与之前的答案非常相似,但这里我使用的是 information_schema.procedures。我还使用正则表达式只匹配表名并避免部分匹配。还要注意 r 中的 s 和 i 参数,就像 s 用于允许 .在正则表达式中匹配新行,而 i 只是使模式不区分大小写。