国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

StarRocks 生成列:百倍提速半結(jié)構(gòu)化數(shù)據(jù)分析

這篇具有很好參考價(jià)值的文章主要介紹了StarRocks 生成列:百倍提速半結(jié)構(gòu)化數(shù)據(jù)分析。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

半結(jié)構(gòu)化分析主要是指對(duì) MAP,STRUCT,JSON,ARRAY 等復(fù)雜數(shù)據(jù)類(lèi)型的查詢(xún)分析。這些數(shù)據(jù)類(lèi)型表達(dá)能力強(qiáng),因此被廣泛應(yīng)用到 OLAP 分析的各種場(chǎng)景中,但由于其實(shí)現(xiàn)的復(fù)雜性,對(duì)這些復(fù)雜類(lèi)型分析將會(huì)比一般簡(jiǎn)單類(lèi)型要更困難和耗時(shí),例如:

  • 需要對(duì) MAP,STRUCT,JSON 等數(shù)據(jù)類(lèi)型中的某個(gè)字段進(jìn)行查詢(xún)分析。由于這些復(fù)雜類(lèi)型會(huì)被存儲(chǔ)為一個(gè)整體,因此需要先將整個(gè)半結(jié)構(gòu)化類(lèi)型的字段先從存儲(chǔ)層讀取上來(lái),然后再對(duì)其中的某些字段進(jìn)行分析,IO效率較低。
  • 對(duì)復(fù)雜類(lèi)型進(jìn)行較為耗時(shí)的分析計(jì)算(聚合,排序等等),查詢(xún)的實(shí)時(shí)CPU 開(kāi)銷(xiāo)可能也是一個(gè)不可忽略的性能影響因素。

面對(duì)上述的挑戰(zhàn),StarRocks在3.1 版本正式推出生成列(Generated Column)特性,提供一種透明加速的解決方案,能有效提升半結(jié)構(gòu)化數(shù)據(jù)的分析效率,令用戶(hù)擁有更極速的分析體驗(yàn)。

生成列介紹

生成列是一種特殊的列,可以在建表語(yǔ)句或 Schema Change 語(yǔ)句中指定,生成列綁定到一個(gè)標(biāo)量表達(dá)式上,當(dāng)數(shù)據(jù)導(dǎo)入時(shí),會(huì)自動(dòng)根據(jù)表達(dá)式定義進(jìn)行計(jì)算,并且將其計(jì)算結(jié)果寫(xiě)入到生成列中。

StarRocks 生成列:百倍提速半結(jié)構(gòu)化數(shù)據(jù)分析,后端

在半結(jié)構(gòu)化分析的場(chǎng)景中,可以將復(fù)雜耗時(shí)的標(biāo)量表達(dá)式綁定在某個(gè)生成列上,在數(shù)據(jù)導(dǎo)入階段提前將結(jié)果計(jì)算好并且持久化到磁盤(pán)中。當(dāng)需要進(jìn)行查詢(xún)分析時(shí),即可馬上獲得表達(dá)式計(jì)算的結(jié)果。

生成列的查詢(xún)改寫(xiě)

當(dāng)希望查詢(xún)生成列保存的表達(dá)式計(jì)算結(jié)果時(shí),可以直接在 SQL 中指定生成列的列名,但是這種方法意味著需要調(diào)整已有業(yè)務(wù) SQL,很難完全做到無(wú)縫對(duì)接。

為了進(jìn)一步提升功能的使用體驗(yàn),簡(jiǎn)化使用流程,StarRocks 支持生成列自動(dòng)查詢(xún)改寫(xiě)。在生成執(zhí)行計(jì)劃時(shí),SQL 優(yōu)化器將會(huì)檢查 SQL 中所有的表達(dá)式,并且將那些已經(jīng)綁定到生成列上的表達(dá)式,改寫(xiě)成查詢(xún)生成列列值。

例如,上述例子中,如果在某個(gè)查詢(xún)中需要獲取 colc 中的 a 字段,則執(zhí)行查詢(xún)SELECT get_json_string(json_string(tbl.colc), '$.a') FROM tbl,執(zhí)行過(guò)程大致如下:

StarRocks 生成列:百倍提速半結(jié)構(gòu)化數(shù)據(jù)分析,后端

可見(jiàn),優(yōu)化器自動(dòng)將表達(dá)式改寫(xiě)為查詢(xún)生成列的值,實(shí)現(xiàn)透明加速。

高效的生成列加列

在實(shí)際應(yīng)用生成列的使用場(chǎng)景中,在已有的表添加生成列可能是一個(gè)高頻操作。例如,可能在任意時(shí)間點(diǎn)發(fā)現(xiàn)某個(gè)表達(dá)式計(jì)算存在性能瓶頸,因此希望添加生成列以進(jìn)行查詢(xún)加速。

StarRocks 支持高效的加列操作,對(duì)于添加普通列,存儲(chǔ)引擎并不會(huì)真正重寫(xiě)物理文件,而只是將物理文件重新 link 到新 Tablet 的路徑下,修改元數(shù)據(jù),完成加列操作。但是,如 MODIFY COLUMN 這類(lèi) Schema Change 操作,由于需要改變存量數(shù)據(jù)的內(nèi)容,因此會(huì)重寫(xiě)所有物理文件。類(lèi)似地,對(duì)于生成列加列來(lái)說(shuō),由于需要存儲(chǔ)新增的生成列表達(dá)式的計(jì)算結(jié)果,重寫(xiě)數(shù)據(jù)似乎也是不可避免的。但是,如果仍然采用全量重寫(xiě)物理文件的方案,將無(wú)法很好適應(yīng)頻繁加列的場(chǎng)景,加列的代價(jià)太大。

為了進(jìn)一步提高生成列加列的效率,StarRocks 針對(duì)生成列加列進(jìn)行了專(zhuān)門(mén)的優(yōu)化。當(dāng)添加一個(gè)生成列時(shí),不會(huì)改寫(xiě)存量的物理文件,而是為每一個(gè)存量的 segment 生成一個(gè)只包含生成列值的 cols 文件(物理格式和 segment 文件一樣,但只包含生成列一列數(shù)據(jù)),當(dāng)需要查詢(xún)這些存量數(shù)據(jù)時(shí),StarRocks 會(huì)自動(dòng)將 segment 和 cols 文件的內(nèi)容進(jìn)行合并,獲得正確的查詢(xún)結(jié)果。

總的來(lái)說(shuō),生成列加列優(yōu)化后,讀 I/O 只涉及到生成列表達(dá)式的引用列,寫(xiě) I/O 只涉及到生成列本身的表達(dá)式結(jié)果,整個(gè) Schema Change 的 I/O 效率相比完全重寫(xiě)有大幅提高,更好支持實(shí)時(shí)動(dòng)態(tài)生成列加列的用戶(hù)需求。

StarRocks 生成列:百倍提速半結(jié)構(gòu)化數(shù)據(jù)分析,后端

效果驗(yàn)證

為了更好驗(yàn)證生成列對(duì)半結(jié)構(gòu)化分析的加速效果,我們進(jìn)行了簡(jiǎn)單的測(cè)試驗(yàn)證。

集群信息:StarRocks v3.1 1FE1BE ,104C376GB

創(chuàng)建一張如下的數(shù)據(jù)表,

CREATE?TABLE?`t`?(
??`id`?bigint(20)?NOT?NULL?COMMENT?"",
??`array_int`?ARRAY<int(11)>?NOT?NULL?COMMENT?"",
??`json_data`?json?NOT?NULL?COMMENT?"",
??`gc_1`?double?NULL?AS?array_avg(`test`.`t`.`array_int`)?COMMENT?"",
??`gc_2`?ARRAY<int(11)>?NULL?AS?array_sort(`test`.`t`.`array_int`)?COMMENT?"",
??`gc_3`?varchar(65533)?NULL?AS?get_json_string(json_string(`test`.`t`.`json_data`),?'$.a')?COMMENT?""
)?ENGINE=OLAP?
PRIMARY?KEY(`id`)
COMMENT?"OLAP"
DISTRIBUTED?BY?HASH(`id`)?BUCKETS?48?
PROPERTIES?(
"replication_num"?=?"1",
"in_memory"?=?"false",
"storage_format"?=?"DEFAULT",
"enable_persistent_index"?=?"false",
"replicated_storage"?=?"true",
"compression"?=?"LZ4"
)

普通列數(shù)據(jù)創(chuàng)建方式: id,作為 primary key 列保證唯一。

array_int,長(zhǎng)度為 10000 的 ARRAY ,保存的都是隨機(jī)數(shù)。

json_data,包含兩個(gè) key,key "a" 對(duì)應(yīng)的 value 為整型 1,key "b" 對(duì)應(yīng)的value 是長(zhǎng)度為 100 個(gè) uuid 構(gòu)成的字符串 性能測(cè)試使用下面的 query:

q1:SELECT?get_json_string(json_string(json_data),?'$.a')?FROM?A
q2:SELECT?array_avg(array_int)?FROM?A;

測(cè)試結(jié)果:

StarRocks 生成列:百倍提速半結(jié)構(gòu)化數(shù)據(jù)分析,后端

從上述的測(cè)試結(jié)果可知:

q1:使用生成列提取大 JSON 字段中的某個(gè)子字段,在查詢(xún)階段大幅節(jié)省了讀取 JSON 字段的 I/O 消耗,查詢(xún)性能提升達(dá) 4 倍以上。

q2:使用生成列對(duì)大 ARRAY 字段進(jìn)行聚合計(jì)算(計(jì)算平均值),在查詢(xún)階段不僅節(jié)省讀取該半結(jié)構(gòu)化數(shù)據(jù)字段的 I/O 消耗,同時(shí)也大幅節(jié)省了 ARRAY 聚合計(jì)算所帶來(lái)的 CPU 消耗,獲得百倍的性能提升。

總結(jié)

生成列功能是一種加速半結(jié)構(gòu)化分析的有效手段,當(dāng)面對(duì)復(fù)雜的半結(jié)構(gòu)化表達(dá)式計(jì)算時(shí),可以為其添加對(duì)應(yīng)的生成列,在導(dǎo)入階段自動(dòng)完成表達(dá)式計(jì)算,并將結(jié)果持久化。在查詢(xún)階段通過(guò)優(yōu)化器的自動(dòng)改寫(xiě),直接從生成列中獲得表達(dá)式計(jì)算結(jié)果,避免實(shí)時(shí)的表達(dá)式計(jì)算,實(shí)現(xiàn)透明加速。 通過(guò)使用生成列,用戶(hù)能大幅減少查詢(xún)時(shí)復(fù)雜表達(dá)式的 I/O,CPU 等資源消耗,在不同的場(chǎng)景下獲得數(shù)倍甚至百倍的性能提升。

本文由 mdnice 多平臺(tái)發(fā)布文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-815956.html

到了這里,關(guān)于StarRocks 生成列:百倍提速半結(jié)構(gòu)化數(shù)據(jù)分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • elasticsearch結(jié)構(gòu)化查詢(xún)

    elasticsearch結(jié)構(gòu)化查詢(xún)

    在上一篇中我們介紹了DSL相關(guān)的知識(shí),接下來(lái)我們將會(huì)學(xué)習(xí)elasticsearch的結(jié)構(gòu)化查詢(xún),同時(shí)也實(shí)踐一下上一篇的DSL的查詢(xún)用法 從《Elasticsearch權(quán)威指南》上摘取部分解釋如下: 從上面的定義我們可以看出來(lái)結(jié)構(gòu)化查詢(xún)最重要的就是是否匹配么人并不是很關(guān)心相關(guān)性和分值計(jì)算。

    2024年02月01日
    瀏覽(30)
  • 第五章 結(jié)構(gòu)化設(shè)計(jì)

    第五章 結(jié)構(gòu)化設(shè)計(jì)

    一種軟件開(kāi)發(fā)活動(dòng),定義實(shí)現(xiàn)需求規(guī)約所需的軟件結(jié)構(gòu)。 結(jié)構(gòu)化設(shè)計(jì)分為: (1)總體設(shè)計(jì):確定系統(tǒng)的整體模塊結(jié)構(gòu),即系統(tǒng)實(shí)現(xiàn)所需要的軟件模塊以及這些模塊之間的調(diào)用關(guān)系。 (2)詳細(xì)設(shè)計(jì):詳細(xì)描述模塊。 體系結(jié)構(gòu)設(shè)計(jì)(MSD) 接口設(shè)計(jì) 數(shù)據(jù)設(shè)計(jì) 實(shí)現(xiàn)軟件設(shè)計(jì)的目標(biāo)對(duì)結(jié)

    2024年02月08日
    瀏覽(29)
  • 【numpy基礎(chǔ)】--結(jié)構(gòu)化

    目前為止,介紹的 numpy 數(shù)組基本都是關(guān)于數(shù)值的,其實(shí), numpy 本身就是一個(gè)用于數(shù)值計(jì)算的基礎(chǔ)庫(kù)。 不過(guò),除了數(shù)值計(jì)算之外, numpy 也能夠支持 結(jié)構(gòu)化數(shù)組 。 numpy 的數(shù)組為了提高計(jì)算性能,要求數(shù)組的數(shù)據(jù)類(lèi)型要一致。 但是現(xiàn)實(shí)情況下,我們經(jīng)常遇到不是純數(shù)值的數(shù)組

    2024年02月12日
    瀏覽(29)
  • WPF 界面結(jié)構(gòu)化處理

    WPF 界面結(jié)構(gòu)化處理

    WPF 框架是開(kāi)源的,但是不能跨平臺(tái),可以使用MAUI,這個(gè)框架可以跨平臺(tái),WPF源碼可以在github上下載,下載地址:https://gitbub.com/dotnet/wpf。 框架結(jié)構(gòu) 如圖 XAML:eXtensible Application Markup Language的英文縮寫(xiě),相應(yīng)的中文名稱(chēng)為:可擴(kuò)展應(yīng)用程序標(biāo)記語(yǔ)言。 命名空間 默認(rèn) 映射:x/

    2024年02月13日
    瀏覽(32)
  • SQL:結(jié)構(gòu)化查詢(xún)語(yǔ)言

    SQL:結(jié)構(gòu)化查詢(xún)語(yǔ)言

    創(chuàng)建一張表并插入數(shù)據(jù): 以下常用函數(shù)以MySQL為例,其它數(shù)據(jù)庫(kù)類(lèi)似

    2024年02月06日
    瀏覽(30)
  • 結(jié)構(gòu)化流的介紹

    結(jié)構(gòu)化流的介紹

    目錄 有界數(shù)據(jù)和無(wú)界數(shù)據(jù) 有界數(shù)據(jù) ?無(wú)界數(shù)據(jù) ?結(jié)構(gòu)化流 基本介紹 入門(mén)案例 結(jié)構(gòu)化流的編程模型 數(shù)據(jù)結(jié)構(gòu) 數(shù)據(jù)源(Source) File Source Kafka Source(Spark 和 Kafka 整合) 整合Kafka準(zhǔn)備工作 從kafka中讀取數(shù)據(jù) 流式處理 批處理 ?數(shù)據(jù)寫(xiě)入Kafka中 流式處理 批處理 有界數(shù)據(jù) 數(shù)據(jù)有固定的開(kāi)

    2024年01月15日
    瀏覽(29)
  • elasticsearch結(jié)構(gòu)化查詢(xún)(一)

    elasticsearch結(jié)構(gòu)化查詢(xún)(一)

    在上一篇中我們介紹了DSL相關(guān)的知識(shí),接下來(lái)我們將會(huì)學(xué)習(xí)elasticsearch的結(jié)構(gòu)化查詢(xún),同時(shí)也實(shí)踐一下上一篇的DSL的查詢(xún)用法 從《Elasticsearch權(quán)威指南》上摘取部分解釋如下: 從上面的定義我們可以看出來(lái)結(jié)構(gòu)化查詢(xún)最重要的就是是否匹配么人并不是很關(guān)心相關(guān)性和分值計(jì)算。

    2024年02月05日
    瀏覽(29)
  • 結(jié)構(gòu)化流(Structured Streaming)

    結(jié)構(gòu)化流(Structured Streaming)

    有界數(shù)據(jù): 無(wú)界數(shù)據(jù): 結(jié)構(gòu)化流是構(gòu)建在Spark SQL處理引擎之上的一個(gè)流式的處理引擎,主要是針對(duì)無(wú)界數(shù)據(jù)的處理操作。對(duì)于結(jié)構(gòu)化流同樣也支持多種語(yǔ)言操作的API:比如 Python Java Scala SQL … Spark的核心是RDD。RDD出現(xiàn)主要的目的就是提供更加高效的離線的迭代計(jì)算操作,RDD是針

    2024年01月17日
    瀏覽(23)
  • Structured Concurrency:結(jié)構(gòu)化并發(fā)

    https://ericniebler.com/2020/11/08/structured-concurrency/ 是什么:一種確保子操作在父操作之前完成的方式,類(lèi)似函數(shù)在調(diào)用函數(shù)之前完成。 最典型的結(jié)構(gòu)化并發(fā):C++20的協(xié)程 意義:它通過(guò)使異步生存期與普通C++詞法作用域相對(duì)應(yīng),為異步程序帶來(lái)了現(xiàn)代C++風(fēng)格,并且不需要引用計(jì)數(shù)(

    2024年02月05日
    瀏覽(24)
  • 【案例】--非結(jié)構(gòu)化數(shù)據(jù)中臺(tái)案例

    最近接觸一個(gè)平臺(tái)架構(gòu)的討論,公司需要一個(gè)非結(jié)構(gòu)化數(shù)據(jù)中臺(tái),理念是能夠滿(mǎn)足存儲(chǔ)隨時(shí)變換的非結(jié)構(gòu)化數(shù)據(jù),另外引入低代碼思想。由于非結(jié)構(gòu)化數(shù)據(jù)是未知的,不同業(yè)務(wù)的數(shù)據(jù)是不同,為了更好的使用,低代碼就需要一種方案,在盡量不開(kāi)發(fā)代碼下滿(mǎn)足相關(guān)需求變化,

    2024年02月10日
    瀏覽(28)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包