Snowflake:如何找出哪些内部表阶段消耗最多的存储空间?
Posted
技术标签:
【中文标题】Snowflake:如何找出哪些内部表阶段消耗最多的存储空间?【英文标题】:Snowflake: How can I find out which internal table stages consumes most storage? 【发布时间】:2020-05-11 06:56:46 【问题描述】:在我的雪花帐户中,我可以看到阶段使用了大量存储空间。例如,我可以使用以下查询看到这一点:
select *
from table(information_schema.stage_storage_usage_history(dateadd('days',-10,current_date()),current_date()));
数据库中没有命名阶段。所有使用的存储必须处于内部阶段。 如何找出哪些内部阶段消耗的存储空间最多?
如果我知道表的名称,我可以使用以下方式列出表阶段中的所有文件:
list @SCHEMANAME.%TABLENAME;
我的问题是数据库中有数百个表,我不知道要查询哪些表。
【问题讨论】:
【参考方案1】:Snowflake 数据库/共享中有一个名为 STAGE_STORAGE_USAGE_HISTORY
的 ACCOUNT_USAGE
视图,它将为您提供一切,包括内部阶段。我会在 information_schema
视图上使用它,因为这仅限于您的角色当前可以访问的内容。
https://docs.snowflake.com/en/sql-reference/account-usage/stage_storage_usage_history.html
【讨论】:
此视图仅显示用于帐户中所有阶段的总存储空间。我正在寻找某种方法来找出导致此存储使用的内部表阶段。 STAGE_STORAGE_USAGE_HISTORY 只告诉我分阶段有 500 GB 数据,但它没有告诉我数据在哪里,所以我可以删除它。 是的,对不起。我误解了你的问题。我没有看到有这种细节的视图。【参考方案2】:您可以使用信息架构或帐户使用情况中的视图 STAGES 来获取阶段。请注意,帐户使用的保留期比信息模式更长,并且数据检索速度更快。你可以阅读更多here
【讨论】:
【参考方案3】:如果我理解正确,您想通过阶段来减少整体计费或存储大小
雪花阶段
-
“内部命名”和“外部”阶段:
这些是唯一可以由用户更改或删除和控制的阶段
用户阶段和表阶段是不能更改或删除的,
由雪花管理
因此,即使您可以识别那些特定于 Table 和 User 的阶段,您也不能删除它们。
Snowflake Storage 消耗包括以下三个计费组件
1. Databases size
2. Stages size
3. Fail Safe size
可以看到占用的存储空间大小(仅当您具有 Accountadmin 角色时 或 MONITOR privs) 在以下位置 webUI 选项卡下
Account Tab ---> Usage --> Average Storage Used
注意:在帐户选项卡上,没有可用的数据库对象存储计费详细信息
那么您如何查看关联表的存储消耗(包括它们的故障安全和时间旅行位)和阶段详细信息
select * from <DB Name>."INFORMATION_SCHEMA"."TABLE_STORAGE_METRICS"
select * from <DB Name>."INFORMATION_SCHEMA"."STAGES"
希望澄清有所帮助
谢谢
帕拉什查特吉
【讨论】:
我知道我有分阶段的数据需要付费。它在 Web 界面和视图 ACCOUNT_USAGE.STAGE_STORAGE_USAGE_HISTORY 中可见。我的问题是我无法找到包含所有这些数据的内部表阶段或默认用户阶段。我对删除实际阶段不感兴趣,我想删除某人上传的不必要的大文件。为此,我需要找到文件的位置。此外,视图 TABLE_STORAGE_METRICS 似乎不包括存储在表阶段中的数据。以上是关于Snowflake:如何找出哪些内部表阶段消耗最多的存储空间?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Airflow PUT 命令将 S3 文件移动到 Snowflake 阶段
Snowflake JavaScript程序如何从不在阶段的对象中更新字段?