【发布时间】:2020-04-07 10:35:41
【问题描述】:
我想在 PST 时区的每天午夜查看表格。这些表非常小,平均每天只有 300 个条目。
我想根据表的 id 跟踪行中的变化,并每天拍摄它们的状态快照,其中每个新表视图都将具有“日期”状态。
挑战在于原始表格正在增长,因此每个新的“快照”都会有不同的大小。
这是我的数据示例:
第 1 天
Id Article Title Genre views date
1, "I Know Why the Caged Bird Sings", 10, 01-26-2019
2, "In the Cold", "Non-Fiction", 20, 01-26-2019
第 2 天
Id Article Title Genre views date
1, "I Know Why the Caged Bird Sings", "Non-Fiction", 20, 02-27-2019
2, "In the Cold", "Non-Fiction", 40, 02-27-2019
3, "Bury My Heart At Wounded Knee", "Non-Fiction", 100, 02-27-2019
我想创建一个存储过程来复制当前表的状态。但是不建议在存储过程中创建表,所以我正在尝试创建一个管理表创建和存储过程调用的任务:
USE WAREHOUSE "TEST";
CREATE DATABASE "Snapshots";
USE DATABASE "Snapshots";
Create or Replace Table ArticleLibrary (id int, Title string, Genre string, Viewed number, date_captured timestamp );
INSERT INTO ArticleLibrary Values
(1, 'The man who walked the moon', 'Non-Fiction', 10, CURRENT_DATE() ),
(2, 'The girl who went to Vegas', 'Fiction', 20 , CURRENT_DATE())
;
SELECT * FROM ArticleLibrary;
//CREATE Stored Procedure
create procedure Capture_daily()
Returns string
LANGUAGE JAVASCRIPT
AS
$$
var rs = snowflake.execute({sqlText: "})
var rs = snowflake.execute( {sqlText: "COPY INTO "ARTICLELIBRARY"+CURRENT_DATE() * FROM ArticleLibrary; "} ); );
return 'success';
$$
;
CREATE OR REPLACE TASK IF NOT EXISTS Snapshot_ArticleLibrary_Task
WAREHOUSE = 'TEST'
SCHEDULE = '{ 1440 MINUTE | USING CRON 0 America/Los_Angeles }'
AS
CREATE TABLE "ARTICLELIBRARY"+"CURRENT_DATE()";
CALL Capture_daily();
//Run tomorrow
INSERT INTO ArticleLibrary Values
(3, 'The Best Burger in Town', 'News', 100, CURRENT_DATE());
我需要一些帮助来改进我设置的存储过程和任务,我不确定如何在任务结束时调用多个 sql 语句。
我愿意就如何更好地实现这一目标提出建议,因为这只是少量数据,只是一个小规模展示计算成本的实验。我还在考虑在一个大表中使用带有窗口框架的窗口函数,该表插入来自每个新一天的数据,其中日期是状态,然后 id 将不是唯一的。
【问题讨论】:
-
你不能用时间旅行来做这个吗?
-
时间旅行的时间可能不够长。
标签: snowflake-cloud-data-platform