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

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

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

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

掃碼添加小助手

加入工程師交流群

簡介

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

場景介紹

多表關聯(lián)時表 A 關聯(lián)表 B, 表 A 具有pk1, field1, field2, field3字段,表 B 具有 pk2, field4, field5, field6 字段,表 A 通過 pk1 關聯(lián)表B pk2。使用 Flink SQL 會如下實現(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;

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

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

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

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

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

總結

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

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

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

審核編輯 黃宇

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

    關注

    1

    文章

    789

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

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

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

    達夢數(shù)據(jù)庫常用管理SQL命令詳解

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

    禾賽激光雷達成為理想汽車的安全新標配

    在節(jié)目中,李想提到一個關鍵認知:“過去,人們很容易陷入一個誤區(qū)。認為人類靠眼睛就能開車,所以車輛使用攝像頭就能達到人類開車的水平。但其實我們今天要解決的是人類解決不了的問題。因為大家對于車輛的安全要求不滿足于現(xiàn)狀?!?/div>
    的頭像 發(fā)表于 05-16 15:46 ?790次閱讀

    如何一眼定位SQL的代碼來源:一款SQL染色標記的簡易MyBatis插件

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

    DLPNIRNANOEVM固件如何編譯?

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

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

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

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

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

    Devart: dbForge Compare Bundle for SQL Server—比較SQL數(shù)據(jù)庫最簡單、最準確的方法

    ? dbForge Compare Bundle For SQL Server:包含兩個工具,可幫助您節(jié)省用于手動數(shù)據(jù)庫比較的 70% 的時間 dbForge數(shù)據(jù)比較 幫助檢測和分析實時SQL數(shù)據(jù)庫
    的頭像 發(fā)表于 01-17 11:35 ?862次閱讀

    dbForge Studio For SQL Server:用于有效開發(fā)的最佳SQL Server集成開發(fā)環(huán)境

    dbForge Studio For SQL Server:用于有效開發(fā)的最佳SQL Server集成開發(fā)環(huán)境 SQL編碼助手 SQL代碼分析 查詢分析器 可視化查詢生成器 數(shù)據(jù)和模式
    的頭像 發(fā)表于 01-16 10:36 ?1066次閱讀

    Devart::dbForge SQL Complete讓生產(chǎn)力上一個臺階

    SQL編碼助手,適用于SSMS 和VS 該工具提供上下文感知的代碼補全,使SQL開發(fā)人員和數(shù)據(jù)庫管理員能夠更快地編寫代碼。 SQL Complet包含許多實用的功能,這些功能是專門為提高開發(fā)團隊
    的頭像 發(fā)表于 01-14 11:09 ?936次閱讀
    Devart::dbForge <b class='flag-5'>SQL</b> Complete讓生產(chǎn)力上一個臺階

    云服務器 Flexus X 實例,Docker 集成搭建搭建 Flink

    Apache Flink 是一個分布式大數(shù)據(jù)計算引擎,專為處理無界和有界數(shù)據(jù)流上的有狀態(tài)計算而設計,以其高吞吐量、低延遲和高性能在實時流處理和批量計算領域脫穎而出,Flink 支持批流一體化,即能
    的頭像 發(fā)表于 01-13 18:17 ?702次閱讀
    云服務器 Flexus X 實例,Docker 集成搭建搭建 <b class='flag-5'>Flink</b>

    通過Skyvia Connect SQL終端節(jié)點訪問任何數(shù)據(jù)

    通過 Skyvia Connect SQL 終端節(jié)點訪問任何數(shù)據(jù) ? 通過 Skyvia Connect SQL 終端節(jié)點訪問任何數(shù)據(jù)ADO.NET 數(shù)據(jù)網(wǎng)關 使用 Skyvia Connect
    的頭像 發(fā)表于 01-02 09:31 ?587次閱讀
    通過Skyvia Connect <b class='flag-5'>SQL</b>終端節(jié)點訪問任何數(shù)據(jù)

    ISO3082和MAX3485E通訊,轉(zhuǎn)出來的串口數(shù)據(jù)總出問題,為什么?怎么解決?

    你好,我使用你們公司的ISO3082和MAX3485E 通訊,發(fā)現(xiàn)3082出來的數(shù)據(jù)到AB是對 的,MAX3485E 反回來的數(shù)據(jù)AB到3082的管腳上是對的,但是轉(zhuǎn)出來的串口數(shù)據(jù)總出問題,無論AB上的電阻怎么接 怎么改都是解決不了,請相關工程師答復下,謝謝!
    發(fā)表于 12-23 07:25

    AFE4490電路板讀寫寄存器的值一直是0x00,為什么?怎么解決?

    現(xiàn)在做一款關于AFE4490電路板,SPI通信問題一直解決不了,讀寫寄存器的值一直是0x00;我把我的SPI讀寫程序下載到其他開發(fā)板,讀取數(shù)值一直是0xFF,該問題如何解決?應該檢查什么方便問題?求指教
    發(fā)表于 12-17 07:41