chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是 Flink SQL 解決不了的問題?

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2024-07-09 20:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

簡(jiǎn)介

在實(shí)時(shí)數(shù)據(jù)開發(fā)過程中,大家經(jīng)常會(huì)用 Flink SQL 或者 Flink DataStream API 來做數(shù)據(jù)加工。通常情況下選用2者都能加工出想要的數(shù)據(jù),但是總會(huì)有 Flink SQL 覆蓋不了的問題,但 SQL 的易用性又難以讓人釋懷。所以有些場(chǎng)景在使用 FLink SQL 開始就與需要額外注意,下面就介紹一種多表關(guān)聯(lián)時(shí)存在部分列更新(partial Update)場(chǎng)景,在 DataStream API 和 Flink SQL 開發(fā)時(shí)都容易忽視的情況而導(dǎo)致的問題。為了簡(jiǎn)化問題描述,采用了Flink SQL 來闡述此類問題。

場(chǎng)景介紹

多表關(guān)聯(lián)時(shí)表 A 關(guān)聯(lián)表 B, 表 A 具有pk1, field1, field2, field3字段,表 B 具有 pk2, field4, field5, field6 字段,表 A 通過 pk1 關(guān)聯(lián)表B pk2。使用 Flink SQL 會(huì)如下實(shí)現(xiàn):

CREATE TABLE jdq_source(
pk1 INT,
field1 STIRNG,
field2 STIRNG,
field3 STIRNG,
PRIMARY KEY(pk1) NOT ENFORCED
) WITH(...);

CREATE TABLE sr_sink(
pk1 INT,
field1 STRING,
field2 STRING,
field3 STRING,
field4 STRING,
field5 STRING,
field6 STRING,
PRIMARY KEY(pk2) NOT ENFORCED
) WITH (...);

INSERT INTO C
SELECT A.pk1,A.field1,A.field2,A.field3,B.pk2,B.field4,B.field5,B.field6 FROM jdq_source A
INNER JOIN sr_sink B
ON A.pk1 = B.pk2;

上述實(shí)例中有明顯特征:使用了Join 關(guān)聯(lián), 且需要注意的是寫入的數(shù)據(jù)庫 sink 是 StarRocks。StarRocks 存在如下特性:當(dāng)表是主鍵表時(shí)是不支持部分列更新( Partial Update)的,實(shí)際上大部分時(shí)候大家都用的是主鍵表。

然后在一個(gè)SQL查詢數(shù)據(jù)的接口就遇到了如下問題:每次從接口查詢返回的結(jié)果都不穩(wěn)定,同樣的查詢條件不同時(shí)機(jī)返回的結(jié)果不一樣。SQL查詢語句如下:

select C.field1,C.field2,C.field3
FROM C group by field1,field2,field3;
為什么SQL查詢的結(jié)果會(huì)不一致呢?起初排查原因發(fā)現(xiàn) group by 返回結(jié)果有多條,而在SQL 中也沒有使用 order by 對(duì)數(shù)據(jù)進(jìn)行排序,所以導(dǎo)致了結(jié)果不穩(wěn)定。后又排查為什么會(huì)出現(xiàn)多條結(jié)果呢?于是懷疑 field1, field2, field3 有不符合預(yù)期的數(shù)據(jù)。如: 

20240530, 2, 3
20240530, 2, null
20240531, 2, 4

其中第2條是多余的,不應(yīng)該出現(xiàn)。結(jié)果發(fā)現(xiàn)可能是如下原因?qū)е碌模哼@3個(gè)字段 filed1, field2, filed3 在StarRocks數(shù)據(jù)庫中會(huì)一直在變化,不停的寫入新值。導(dǎo)致 SQL 查詢時(shí)可以查到 field3 為 null 的數(shù)據(jù)。
為什么field3為不斷變化呢?究其原因是:StarRocks 主鍵表不支持部分列更新(Partial Update)。當(dāng)field3 為null時(shí),同樣會(huì)被寫入 StarRocks。我們?cè)谕ㄟ^JDQ讀取表A field1, field2, field3 數(shù)據(jù)給表C寫入數(shù)據(jù)時(shí),當(dāng)JDQ 消息隊(duì)列中表A的記錄存在亂序場(chǎng)景且field3 字段可能為null時(shí),最終寫入StarRocks的field3 字段會(huì)出現(xiàn)時(shí)而為null,時(shí)而不為null。 所以SQL查詢接口中 group by的結(jié)果會(huì)出現(xiàn)不穩(wěn)定。

總結(jié)

為什么在開發(fā)的時(shí)候當(dāng)時(shí)沒有發(fā)現(xiàn) StarRocks 主鍵表這個(gè)問題呢?原因:1. 大家所關(guān)注的部分列更新,多數(shù)是關(guān)注insert into table_C(field1, field2, field3) 中不包含的字段field4,field5...等被更新為null,而當(dāng)前場(chǎng)景是會(huì)把 field3 為null的值也寫入SR數(shù)據(jù)庫中,這不是我們期望的結(jié)果。2.表A作為主表,通常不會(huì)出現(xiàn)開始field3有值后來又沒有值(null)的場(chǎng)景。出現(xiàn)這個(gè)現(xiàn)象大概率是因?yàn)樯嫌蜫DQ消息隊(duì)列中的數(shù)據(jù)亂序了,導(dǎo)致field3 為null的后出現(xiàn)了。而這種問題又比較難發(fā)現(xiàn)。

什么情況下會(huì)出現(xiàn)此類問題呢?寫入的數(shù)據(jù)庫不支持部分列更新場(chǎng)景時(shí)會(huì)出現(xiàn)。如StarRocks, Doris。因?yàn)镸ySQL, ES,ClickHouse的部分表引擎支持部分列更新,所以在MySQL, ES,ClickHouse中不會(huì)出現(xiàn)。

同理在 DataStream API 中如果表 A,表 B 關(guān)聯(lián)后的數(shù)據(jù)直接寫入StarRocks 的話,也會(huì)出現(xiàn)此類問題。
以上這個(gè)問題在 Flink SQL 中無法解決,在 Flink DataStream API 中可以模擬部分列更新來避免此類問題。具體方法:在DatStream 任務(wù)中增加一個(gè)MapState, 用來在新數(shù)據(jù)到來時(shí)從MapState拿出緩存的數(shù)據(jù),并和新到來的數(shù)據(jù)進(jìn)行合并,來實(shí)現(xiàn)部分列更新功能,最后再寫入 StarRocks。
雖然問題不是Flink SQL導(dǎo)致的,但是上面的問題可以通過Flink DataStream API來規(guī)避。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    789

    瀏覽量

    46499
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    VSCODE+ESP-IDF運(yùn)行\(zhòng)'\'hello world\",partition-table進(jìn)程卡住

    變化,不知道是什么原因,軟件卸載重裝都試過,網(wǎng)上的好多方法都試過,就是解決不了,一直卡在這里,特別奔潰,請(qǐng)大佬指點(diǎn)一下!!!!
    發(fā)表于 12-28 22:09

    使用NVIDIA Nemotron RAG和Microsoft SQL Server 2025構(gòu)建高性能AI應(yīng)用

    在 Microsoft Ignite 2025 大會(huì)上,隨著 Microsoft SQL Server 2025 的發(fā)布,AI 就緒型企業(yè)數(shù)據(jù)庫愿景成為現(xiàn)實(shí),為開發(fā)者提供強(qiáng)大的新工具,例如內(nèi)置向量
    的頭像 發(fā)表于 12-01 09:31 ?655次閱讀
    使用NVIDIA Nemotron RAG和Microsoft <b class='flag-5'>SQL</b> Server 2025構(gòu)建高性能AI應(yīng)用

    使用env v2.0執(zhí)行scons --dist產(chǎn)生缺失依賴報(bào)錯(cuò)怎么解決?

    報(bào)錯(cuò);詳情請(qǐng)看圖片,我嘗試了從github上拉取最新的packages的包到本地bsp的工程中,但是依舊解決不了問題。
    發(fā)表于 09-11 08:28

    數(shù)據(jù)庫慢查詢分析與SQL優(yōu)化實(shí)戰(zhàn)技巧

    今天,我將分享我在處理數(shù)千次數(shù)據(jù)庫性能問題中積累的實(shí)戰(zhàn)經(jīng)驗(yàn),幫助你系統(tǒng)掌握慢查詢分析與SQL優(yōu)化的核心技巧。無論你是剛?cè)腴T的運(yùn)維新手,還是有一定經(jīng)驗(yàn)的工程師,這篇文章都將為你提供實(shí)用的解決方案。
    的頭像 發(fā)表于 09-08 09:34 ?810次閱讀

    SQL 通用數(shù)據(jù)類型

    SQL 通用數(shù)據(jù)類型 數(shù)據(jù)庫表中的每個(gè)列都要求有名稱和數(shù)據(jù)類型。Each column in a database table is required to have a name and a
    的頭像 發(fā)表于 08-18 09:46 ?657次閱讀

    Text2SQL準(zhǔn)確率暴漲22.6%!3大維度全拆

    摘要 技術(shù)背景:Text2SQL 是將自然語言查詢轉(zhuǎn)為 SQL 的任務(wù),經(jīng)歷了基于規(guī)則、神經(jīng)網(wǎng)絡(luò)、預(yù)訓(xùn)練語言模型、大語言模型四個(gè)階段。當(dāng)前面臨提示優(yōu)化、模型訓(xùn)練、推理時(shí)增強(qiáng)三大難題,研究
    的頭像 發(fā)表于 08-14 11:17 ?621次閱讀
    Text2<b class='flag-5'>SQL</b>準(zhǔn)確率暴漲22.6%!3大維度全拆

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫被加密如何恢復(fù)數(shù)據(jù)?

    SQL Server數(shù)據(jù)庫故障: SQL Server數(shù)據(jù)庫被加密,無法使用。 數(shù)據(jù)庫MDF、LDF、log日志文件名字被篡改。
    的頭像 發(fā)表于 06-25 13:54 ?584次閱讀
    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—<b class='flag-5'>SQL</b> Server數(shù)據(jù)庫被加密如何恢復(fù)數(shù)據(jù)?

    KT6368A 藍(lán)牙芯片通過 FCC、BQB、KC、CE 等認(rèn)證的操作指南

    固件 RF=7_20240718”,BQB 用 “KT6328A_F510_BQB_認(rèn)證固件_20220419.fw”。燒錄后替換原芯片即可測(cè)試,可參考相關(guān)文檔,認(rèn)證不通過多因硬件問題,解決不了可聯(lián)系協(xié)助解決
    的頭像 發(fā)表于 06-18 13:44 ?920次閱讀
    KT6368A 藍(lán)牙芯片通過 FCC、BQB、KC、CE 等認(rèn)證的操作指南

    達(dá)夢(mèng)數(shù)據(jù)庫常用管理SQL命令詳解

    達(dá)夢(mèng)數(shù)據(jù)庫常用管理SQL命令詳解
    的頭像 發(fā)表于 06-17 15:12 ?6875次閱讀
    達(dá)夢(mèng)數(shù)據(jù)庫常用管理<b class='flag-5'>SQL</b>命令詳解

    大促數(shù)據(jù)庫壓力激增,如何一眼定位 SQL 執(zhí)行來源?

    你是否曾經(jīng)遇到過這樣的情況:在大促活動(dòng)期間,用戶訪問量驟增,數(shù)據(jù)庫的壓力陡然加大,導(dǎo)致響應(yīng)變慢甚至服務(wù)中斷?更讓人頭疼的是,當(dāng)你試圖快速定位問題所在時(shí),卻發(fā)現(xiàn)難以確定究竟是哪個(gè)業(yè)務(wù)邏輯中的 SQL
    的頭像 發(fā)表于 06-10 11:32 ?489次閱讀
    大促數(shù)據(jù)庫壓力激增,如何一眼定位 <b class='flag-5'>SQL</b> 執(zhí)行來源?

    禾賽激光雷達(dá)成為理想汽車的安全新標(biāo)配

    在節(jié)目中,李想提到一個(gè)關(guān)鍵認(rèn)知:“過去,人們很容易陷入一個(gè)誤區(qū)。認(rèn)為人類靠眼睛就能開車,所以車輛使用攝像頭就能達(dá)到人類開車的水平。但其實(shí)我們今天要解決的是人類解決不了的問題。因?yàn)榇蠹覍?duì)于車輛的安全要求不滿足于現(xiàn)狀。”
    的頭像 發(fā)表于 05-16 15:46 ?884次閱讀

    如何一眼定位SQL的代碼來源:一款SQL染色標(biāo)記的簡(jiǎn)易MyBatis插件

    作者:京東物流 郭忠強(qiáng) 導(dǎo)語 本文分析了后端研發(fā)和運(yùn)維在日常工作中所面臨的線上SQL定位排查痛點(diǎn),基于姓名貼的靈感,設(shè)計(jì)和開發(fā)了一款SQL染色標(biāo)記的MyBatis插件。該插件輕量高效,對(duì)業(yè)務(wù)代碼無
    的頭像 發(fā)表于 03-05 11:36 ?860次閱讀
    如何一眼定位<b class='flag-5'>SQL</b>的代碼來源:一款<b class='flag-5'>SQL</b>染色標(biāo)記的簡(jiǎn)易MyBatis插件

    DLPNIRNANOEVM固件如何編譯?

    DLPNIRNANOEVM: 固件如何編譯我編譯的時(shí)候報(bào)錯(cuò)解決不了有沒有人可以叫我一下,或者一起學(xué)習(xí)交流
    發(fā)表于 02-24 08:25

    中軟國際談DeepSeek大模型帶來的影響

    “計(jì)算機(jī)技術(shù)的發(fā)展史告訴我們,當(dāng)更多的計(jì)算能力交到開發(fā)者手中時(shí),他們總能發(fā)掘出新的應(yīng)用場(chǎng)景和更多的任務(wù)去解決以前所解決不了的問題,或者是更高程度的優(yōu)化以前的Solution?!?/div>
    的頭像 發(fā)表于 02-18 10:18 ?1239次閱讀

    DAC7678怎樣才能完全輸出0電平?

    按照datasheet寫的驅(qū)動(dòng),現(xiàn)在有個(gè)問題一直解決不了,對(duì)DAC7678 使用軟件復(fù)位或CLR引腳清除都不能實(shí)現(xiàn)輸出完全是0電平,而是0.5mV-1.5V不等的電壓,幾個(gè)通道電壓值不一樣,但是都有; 求指點(diǎn),怎樣才能完全輸出0電平; 補(bǔ)充:使用的外部參考電壓;
    發(fā)表于 01-24 06:09