snowflake-cloud-data-platform - 根据日期和在 Snowflake 中的另一个表中为该日期列出的最大行数限制插入到表中的行
问题描述
我有三张桌子。my_db.threshold_table 包含每天我想插入到 my_db.daily_table 中的最大随机记录数,这些记录将在第二天插入之前被删除并重新创建。cust_num 的源表是 my_db.customer_table
如何在 Snowflake SQL 中编写此代码?
(由我编辑:抱歉无法弄清楚如何在 stackoverflow 问题中发布表格并使其正确显示)
my_db.threshold_table
+-----------+--------+----------+ | 运行_DT | | 最大行数 | +-----------+--------+----------+ | 2020 年 8 月 22 日 | 348 | | | 2020 年 8 月 23 日 | 418 | | | 2020 年 8 月 24 日 | 第523章 | | 2020 年 8 月 25 日 | 第653章 | | 2020 年 8 月 26 日 | 816 | | | 2020 年 8 月 27 日 | 1,021 | | | 2020 年 8 月 28 日 | 1,276 | | | 2020 年 8 月 29 日 | 1,595 | | | 2020 年 8 月 30 日 | 1,993 | | | 2020 年 8 月 31 日 | 2,492 | | | 2020 年 9 月 1 日 | 3,115 | | | 2020 年 9 月 2 日 | 3,893 | | +-----------+--------+----------+
my_db.daily_table
+----------+ | 客户编号 | +----------+ | 1111 | | 第1222章 | 第1333章 | 第1444章 | 等等| +----------+
My_db.customer_table
+----------+ | 客户编号 | +----------+ | 1111 | | 2111 | | 第1222章 | 第1333章 | 第2222章 | 第1444章 | 第2333章 | 等等| +----------+
解决方案
如果您的情况允许您有多个 SQL 语句来实现结果,那么这种方法应该是简单有效的:
SET MAX_ROWS = (SELECT IFNULL(ANY_VALUE(MAX_ROWS), 0) AS MAX_ROWS FROM (SELECT MAX_ROWS FROM MY_DB.THRESHOLD_TABLE WHERE RUN_DT < CURRENT_DATE()))
;
INSERT OVERWRITE INTO MY_DB.DAILY_TABLE (
CUST_NUM
)
SELECT CUST_NUM
FROM MY_DB.CUSTOMER_TABLE SAMPLE ($MAX_ROWS ROWS)
;
如果您需要在单个 SQL 语句中执行此操作,则可以改用此方法:
INSERT OVERWRITE INTO MY_DB.DAILY_TABLE (
CUST_NUM
)
SELECT C.CUST_NUM
FROM MY_DB.CUSTOMER_TABLE C
CROSS JOIN MY_DB.THRESHOLD_TABLE T
WHERE T.RUN_DT = CURRENT_DATE()
QUALIFY ROW_NUMBER() OVER (ORDER BY RANDOM()) <= T.MAX_ROWS
;
注意:我选择在这里使用 INSERT OVERWRITE 构造,这通常比每天执行删除 + 重新创建目标表要好得多。但是您可以决定这是否适合您的情况。
推荐阅读
- javascript - 如何使用查询参数使路线具有准确的路径
- swift - 如何结合 Sprite-Kit 和 Gameplay-Kit 进行寻路?
- javascript - 与动态属性绑定时,VueJS v-model 在选择标签上不起作用
- python - 如何更准确地标记具有多种语言的单词数据列。?
- java - onbindviewholder 回收器视图的整数值
- react-native - React Native 中的 Csrf 令牌发布
- excel - 在另一个术语再次出现之后在 VBA 中查找第一次出现的术语
- renjin - 语法错误,意外的符号,在将列表转换为 R 中的 data.frame 时需要“,”
- angular - 填充嵌套数据的最佳方法
- r - 在 R 中使用 for 循环更新向量的问题