Snowflake cloud data platform 根据Snowflake中另一个表中列出的日期和该日期的最大行数限制插入到表中的行数

Snowflake cloud data platform 根据Snowflake中另一个表中列出的日期和该日期的最大行数限制插入到表中的行数,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我有三张桌子。my_db.threshold_表包含我每天要插入my_db.daily_表的最大随机记录数,该表将在第二天插入之前删除并重新创建。cust_num的源表是my_db.customer_表 如何在Snowflake SQL中编写此代码 由我编辑:抱歉,我不知道如何在stackoverflow问题中发布表格并使其正确显示 my_db.threshold_表 +------+----+-----+ |运行| | |最大行数| +------+----+-----+ | 8/22/202

我有三张桌子。my_db.threshold_表包含我每天要插入my_db.daily_表的最大随机记录数,该表将在第二天插入之前删除并重新创建。cust_num的源表是my_db.customer_表

如何在Snowflake SQL中编写此代码

由我编辑:抱歉,我不知道如何在stackoverflow问题中发布表格并使其正确显示

my_db.threshold_表

+------+----+-----+ |运行| | |最大行数| +------+----+-----+ | 8/22/2020 | 348 | | | 8/23/2020 | 418 | | | 8/24/2020 | 523 | | | 8/25/2020 | 653 | | | 8/26/2020 | 816 | | | 8/27/2020 | 1,021 | | | 8/28/2020 | 1,276 | | | 8/29/2020 | 1,595 | | | 8/30/2020 | 1,993 | | | 8/31/2020 | 2,492 | | | 9/1/2020 | 3,115 | | | 9/2/2020 | 3,893 | | +------+----+-----+

my_db.daily_表

+-----+ |客户数量| +-----+ | 1111 | | 1222 | | 1333 | | 1444 | |等等| +-----+

My_db.customer_表

+-----+ |客户数量| +-----+ | 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构造,这通常比每天对目标表执行拖放+重新创建要好得多。但是你可以决定这是否适合你的情况。

@SteveMaritz:很高兴听到这对你有用。你没有接受这个答案有什么特别的原因吗?没有。再次感谢。