即使我只使用来自流数据集的一条记录,我也会看到该流数据集变为空。我认为这是不正确的。
这就是我所做的步骤。-创建一个表来存储健身房成员支付的姓名和费用,创建或替换表成员( id号(8)不为空,name varchar(255)默认值为空,收费号(3)为空);
-创建一个流,跟踪成员表中迄今发生的更改,在表成员上创建或替换流member_check;
-创建一个表来存储健身房成员加入时的日期,创建或替换表格注册( id号(8),dt日期);
在成员中插入(id,name,fee)值(1,'Joe',0),(2,'Jane',0),(3,'George',0),(4,‘贝蒂’,0),(5,'Sally',0);
在注册值中插入(1,'2018-01-01'),(2,'2018-02-15'),(3,'2018-05-01'),(4,'2018-07-16'),(5,'2018-08-21');
-流记录插入的行select *来自member_check;
+----+--------+-----+-----------------+-------------------+------------------------------------------+
| ID | NAME | FEE | METADATA$ACTION | METADATA$ISUPDATE | METADATA$ROW_ID |
|----+--------+-----+-----------------+-------------------+------------------------------------------|
| 1 | Joe | 0 | INSERT | False | d200504bf3049a7d515214408d9a804fd03b46cd |
| 2 | Jane | 0 | INSERT | False | d0a551cecbee0f9ad2b8a9e81bcc33b15a525a1e |
| 3 | George | 0 | INSERT | False | b98ad609fffdd6f00369485a896c52ca93b92b1f |
| 4 | Betty | 0 | INSERT | False | e554e6e68293a51d8e69d68e9b6be991453cc901 |
| 5 | Sally | 0 | INSERT | False | c94366cf8a4270cf299b049af68a04401c13976d |
+----+--------+-----+-----------------+-------------------+------------------------------------------+-向在免费试用期结束后加入健身房的会员收取90美元的费用:在m.id = s.id上的m.id=s.id上,当匹配并更新set m.fee =90时,将其合并为用户m(选择id,dt从注册地点datediff(day,‘2018-08-15::date,-30) s on m.id=s.id;
从成员中选择*;
+----+--------+-----+
| ID | NAME | FEE |
|----+--------+-----|
| 1 | Joe | 90 |
| 2 | Jane | 90 |
| 3 | George | 90 |
| 4 | Betty | 0 |
| 5 | Sally | 0 |
+----+--------+-----+-流将更新后的费用列记录为一组插入--而不是删除和插入,因为流内容尚未使用--尚未从member_check中选择*;
+----+--------+-----+-----------------+-------------------+------------------------------------------+
| ID | NAME | FEE | METADATA$ACTION | METADATA$ISUPDATE | METADATA$ROW_ID |
|----+--------+-----+-----------------+-------------------+------------------------------------------|
| 1 | Joe | 90 | INSERT | False | 957e84b34ef0f3d957470e02bddccb027810892c |
| 2 | Jane | 90 | INSERT | False | b00168a4edb9fb399dd5cc015e5f78cbea158956 |
| 3 | George | 90 | INSERT | False | 75206259362a7c89126b7cb039371a39d821f76a |
| 4 | Betty | 0 | INSERT | False | 9b225bc2612d5e57b775feea01dd04a32ce2ad18 |
| 5 | Sally | 0 | INSERT | False | 5a68f6296c975980fbbc569ce01033c192168eca |
+----+--------+-----+-----------------+-------------------+------------------------------------------+-创建一个表来存储生产中的成员详细信息--创建或替换表members_prod ( id号(8)不为空,name varchar(255)默认值为空,费用号(3)为空);
-将第一批流数据插入生产表,插入members_prod(id、name、members_prod),选择id、name、member_check,其中元数据$action=‘member_check’和id=1;
在上面的insert语句中,我只使用了一条记录,即来自流数据集(Member_check)的member_check,但在那之后,我的流数据集变得空了,准备好了新的偏移量。
这意味着雪花不检查从流数据集消费的记录,只要在流数据集上触发任何DML语句,雪花就会假设所有记录都已被消耗并清空流数据集。(原文!)
发布于 2022-01-14 10:40:27
可以用块处理流,但必须使用显式事务。
BEGIN WORK;
INSERT INTO table1 SELECT FROM your_stream WHERE <condition1>;
INSERT INTO table2 SELECT FROM your_stream WHERE <condition2>;
COMMIT;提交后流将被清空。
发布于 2020-11-12 01:38:03
流仍然是一个相当新的特性,这也让我感到惊讶,但是任何DML语句都会为流提供偏移量。我的发现涉及存储过程中一个失败的事务,它清空流。
现在最好的选择是要么在单个事务中一次性使用流中的所有更改,要么从时间旅行中使用变化特性。
https://stackoverflow.com/questions/63022381
复制相似问题