gpt4 book ai didi

snowflake-cloud-data-platform - Snowflake Stream 变空了,即使我们只从 Stream 数据中消费了很少的记录

转载 作者:行者123 更新时间:2023-12-05 06:14:07 24 4
gpt4 key购买 nike

即使我只使用流数据集中的一条记录,我也看到流数据集变空了。我认为这是不正确的。

这些是我做的步骤。-- 创建一个表来存储健身房成员的名字和支付的费用创建或替换表成员 (身份证号码(8)不为空,名称 varchar(255) 默认为空,费用编号(3) null);

-- 创建一个流来跟踪 MEMBERS 表中的最新变化在表成员上创建或替换流 member_check;

-- 创建一个表来存储健身房成员加入的日期创建或替换表格注册(身份证号码(8),日期);

插入成员(id,name,fee)值(value)观(1,'乔',0),(2,'简',0),(3,'乔治',0),(4,'贝蒂',0),(5,'莎莉',0);

插入注册值(value)观(1,'2018-01-01'),(2,'2018-02-15'),(3,'2018-05-01'),(4,'2018-07-16'),(5,'2018-08-21');

--流记录插入的行从 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 |
+----+--------+-----+-----------------+-------------------+------------------------------------------+

-- 向在免费试用期结束后加入健身房的成员(member)收取 90 美元的费用:合并到成员 m使用 (选择 id, dt来自注册其中 datediff(day, '2018-08-15'::date, s.dt::date) < -30) s在 m.id = s.id 上匹配时更新 set m.fee = 90;

从成员中选择*;

+----+--------+-----+
| ID | NAME | FEE |
|----+--------+-----|
| 1 | Joe | 90 |
| 2 | Jane | 90 |
| 3 | George | 90 |
| 4 | Betty | 0 |
| 5 | Sally | 0 |
+----+--------+-----+

-- 流将更新后的 FEE 列记录为一组插入-- 而不是删除和插入,因为流内容-- 还没有消费从 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 (身份证号码(8)不为空,名称 varchar(255) 默认为空,费用编号(3) null);

-- 将第一批流数据插入生产表插入 members_prod(id,name,fee) 从 member_check 中选择 id, name, fee where metadata$action = 'INSERT'和 id=1;

在上面的插入语句中,我只使用了一条记录,即来自流数据集(member_check)的 id=1但在那之后我的流数据集变空并准备好进行新的偏移。

这意味着 snowflake 不会检查从流数据集中消费了哪些记录,只要在流数据集上触发任何 DML 语句,Snowflake 就会假设所有记录都已被消费并清空流数据集。 (原文如此!!!)

最佳答案

可以分块处理流,但您必须使用显式事务。

BEGIN WORK;

INSERT INTO table1 SELECT FROM your_stream WHERE <condition1>;
INSERT INTO table2 SELECT FROM your_stream WHERE <condition2>;

COMMIT;

流将在提交后清空。

关于snowflake-cloud-data-platform - Snowflake Stream 变空了,即使我们只从 Stream 数据中消费了很少的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63022381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com