snowflake-cloud-data-platform - 如何查询雪花阶段元数据的最后修改列
问题描述
我们有一个 aws s3 存储桶,每天都会重写相同的文件。我们需要将该文件加载到今天才加载的雪花中。
复制命令工作正常。但是,当未加载新文件时,它只会加载不需要的前一个文件。相反,它应该抛出一个错误让团队知道。
我们可以查询 last_modified 日期:
ls @stage_name
或者我们可以获取阶段元数据信息。
通过查询
select metadata@filename from @stage_name
但是我找不到任何查询或过滤last_modified
阶段列的方法。
解决方案
ls 命令是元数据查询。虽然您无法对此进行过滤,但您可以过滤它生成的结果集:
ls @MYSTAGE;
-- You must run this immediately after the previous query in the same session
select * from table(result_scan(last_query_id()));
但是有两个并发症。首先,元数据列的名称是小写的,因此请确保在过滤器中使用小写名称并将它们用双引号引起来。第二个问题是日期字段的格式不适合在查询中过滤。为了解决这个问题,我编写了一个 UDF 来将 last_modified 字段转换为时间戳以便于过滤:
-- Convert the last modified value from the Snowflake LIST
-- command into a timestamp.
create or replace function LAST_MODIFIED_TO_TIMESTAMP(LAST_MODIFIED string)
returns timestamp_tz
as
$$
to_timestamp_tz(left(LAST_MODIFIED, len(LAST_MODIFIED) - 4) || ' ' || '00:00', 'DY, DD MON YYYY HH:MI:SS TZH:TZM')
$$;
然后你可以像这样过滤结果:
ls @TESTSTAGE;
select * from table(result_scan(last_query_id()))
where LAST_MODIFIED_TO_TIMESTAMP("last_modified") < '2020-11-01' ;
推荐阅读
- python - 将多个图像 URL 加载到 4D numpy 数组
- apache2 - apache2 - 在启用站点的 xml 配置中设置超时
- php - Wordpress - 如何显示作者最近两周的帖子?
- android - 如何使用反射为构造函数中具有参数的类创建对象实例?
- azure-devops - 如何获取合并到触发管道的目标分支的分支名称?
- google-sheets - 是否可以让用户在不同的会话中填写谷歌表单?
- python - 如何使用 Airflow 将 S3 中的 HDFS 文件作为 CSV 文件导出到本地机器
- python - 用日语将字典写入包含 TOML 格式数据的文件
- java - Android中的consumer-rules.pro和proguard-rules.pro有什么区别?
- javascript - Cookie 更改/切换/切换 CSS 类 jQuery 问题