Sql語言的進化磚:Ansi標準默認情況下,從數據倉庫容易遷移
2021年11月16日, 在Beplay体育安卓版本平台的博客
磚的SQL現在一般用於AWS和Azure。
今天,我們興奮地宣布,磚SQL將默認使用標準ANSI SQL方言。這是在本月早些時候宣布磚SQL的創紀錄的表現和一個主要的裏程碑尋求支持的開放標準。這篇文章討論了如何更新更容易你的數據倉庫的工作負載遷移到磚lakehouse平台。Beplay体育安卓版本此外,我們很高興地宣布提高SQL支持,便於查詢JSON並執行常見的任務更容易。
很容易遷移到磚SQL
我們相信磚SQL是最好的地方對於數據倉庫工作負載,它應該很容易遷移到。實際上,這意味著改變盡可能少的SQL代碼。我們通過切換默認SQL方言從火花SQL標準的SQL,增加添加兼容現有的數據倉庫,並添加為您的SQL查詢質量控製。
標準的SQL我們都能達成一致
SQL標準,沒有驚喜的行為或不熟悉的語法來查找和學習。
字符串連接是一種常見的操作,SQL標準的設計師給它自己的運營商。套管運營商比不得不執行一個簡單的concat()函數調用:
選擇<跨度>o_orderstatus | |跨度>< span風格="color:#183691">' '跨度><跨度>||o_shippriority跨度>< span風格="color:#a71d5d">作為跨度><跨度>order_info跨度><跨度>< /跨度>< span風格="color:#a71d5d">從跨度><跨度>< /跨度>訂單;
的過濾器在SQL標準條款,自2003年以來,限製行評估在聚合。大多數數據倉庫需要一個複雜的情況下表達嵌套在聚合:
選擇跨度><跨度>< /跨度><跨度>< /跨度>數跨度><跨度>(跨度>< span風格="color:#a71d5d">截然不同的跨度><跨度>o_orderkey)跨度>< span風格="color:#a71d5d">作為跨度><跨度>order_volume,跨度><跨度>< /跨度>< span風格="color:#0086b3">數跨度><跨度>(跨度>< span風格="color:#a71d5d">截然不同的跨度><跨度>o_orkerkey)跨度>< span風格="color:#a71d5d">過濾器跨度><跨度>(跨度>< span風格="color:#a71d5d">在哪裏跨度><跨度>o_totalprice跨度><跨度class="hljs-operator">>跨度><跨度>< /跨度>< span風格="color:#0086b3">100.0跨度><跨度>)跨度>< span風格="color:#a71d5d">作為跨度><跨度>big_orders跨度><跨度class="hljs-operator"><跨度><跨度>跨風格跨度><跨度class="hljs-operator">=跨度><跨度>”顏色:# a56319;“跨度><跨度class="hljs-operator">>跨度>< span風格="color:#408080;font-style:italic">——使用通過謂詞的行< / span >跨度><跨度>< /跨度><跨度>< /跨度>從跨度><跨度>訂單;跨度>< /code>
SQL用戶定義函數(udf)很容易擴展和模塊化的業務邏輯,而無需學習一種新的編程語言:
創建跨度><跨度>< /跨度>< span風格="color:#a71d5d">函數跨度><跨度>inch_to_cm (英寸跨度>< span風格="color:#a71d5d">雙跨度><跨度>)跨度><跨度>< /跨度>< span風格="color:#a71d5d">返回跨度><跨度>< /跨度>< span風格="color:#a71d5d">雙跨度><跨度>< /跨度>< span風格="color:#a71d5d">返回跨度><跨度>< /跨度>< span風格="color:#0086b3">2.54跨度><跨度>< /跨度><跨度class="hljs-operator">*跨度><跨度>英寸;跨度><跨度>< /跨度>< span風格="color:#a71d5d">選擇跨度><跨度>在ch_to_cm (跨度>< span風格="color:#0086b3">5跨度><跨度>);跨度><跨度class="hljs-operator"><跨度><跨度>跨風格跨度><跨度class="hljs-operator">=跨度><跨度>”顏色:# a56319;“跨度><跨度class="hljs-operator">>跨度>< span風格="color:#408080;font-style:italic">——返回12.70 < / span >跨度><跨度>< /跨度>< /code>
與其他數據倉庫的兼容性
在遷移期間,通常港口成百上千的磚SQL查詢。大部分的SQL中現有數據倉庫可以刪除,隻會在磚SQL的工作。為客戶使這個過程更簡單,我們繼續添加SQL特性,刪除重寫查詢的需要beplay体育app下载地址。
例如,一個新的資格條款簡化過濾窗口功能使它容易從Teradata遷移。下麵的查詢發現在每天五喜歡高消費的顧客:beplay体育app下载地址
選擇跨度><跨度>< /跨度>o_orderdate,o_custkey,<跨度>< /跨度>< span風格="color:#0086b3">排名跨度><跨度>(跨度>< span風格="color:#0086b3">總和跨度><跨度>(o_totalprice))跨度>< span風格="color:#a71d5d">在跨度><跨度>(跨度>< span風格="color:#a71d5d">分區跨度><跨度>< /跨度>< span風格="color:#a71d5d">通過跨度><跨度>o_orderdate跨度>< span風格="color:#a71d5d">訂單跨度><跨度>< /跨度>< span風格="color:#a71d5d">通過跨度><跨度>< /跨度>< span風格="color:#0086b3">總和跨度><跨度>(o_totalprice)跨度>< span風格="color:#a71d5d">DESC跨度><跨度>)跨度>< span風格="color:#a71d5d">作為跨度><跨度>排名跨度><跨度>< /跨度>< span風格="color:#a71d5d">從跨度><跨度>訂單跨度><跨度>< /跨度>< span風格="color:#a71d5d">集團跨度><跨度>< /跨度>< span風格="color:#a71d5d">通過跨度><跨度>o_orderdate, o_custkey跨度><跨度>資格等級跨度>< span風格="color:#408080;font-style:italic">——適用於在窗口函數跨度><跨度>< /跨度>< /code>
我們將繼續在未來幾個月增加兼容性特性。如果你想讓我們添加一個特定的SQL特性,不要猶豫地伸出。
質量控製對於SQL
采用ANSI SQL方言,磚SQL現在主動提醒分析師有問題的查詢。這些查詢是少見但它們最好的發現得早,這樣你就可以保持你的lakehouse新鮮和完整的高質量的數據。下麵是選擇這種變化的我們的文檔對於一個完整列表)。
- 無效的輸入值時,鑄造一個整數的字符串
- 算術運算,導致溢出
- 除零
輕鬆高效地查詢和轉換JSON
如果你是一個分析師或數據工程師,那麼你與非結構化數據的形式JSON。磚SQL原生支持的攝取、儲存和有效地查詢JSON。在這個版本中,我們很高興地宣布改進,使它比以往更容易為分析師查詢JSON。
讓我們看一看是多麼簡單的一個例子查詢JSON在一個現代的方式。在下麵的查詢中,原始列包含一個blob的JSON。作為演示,我們可以輕鬆地查詢和提取從一個數組嵌套域和項目在執行類型轉換:
選擇跨度><跨度>< /跨度><跨度>生:customer.full_name,跨度><跨度class="hljs-operator"><跨度><跨度>跨風格跨度><跨度class="hljs-operator">=跨度><跨度>”顏色:# a56319;“跨度><跨度class="hljs-operator">>跨度>< span風格="color:#408080;font-style:italic">——嵌套域< / span >跨度><跨度>< /跨度><跨度>生:customer.addresses (跨度>< span風格="color:#0086b3">0跨度><跨度>),跨度><跨度class="hljs-operator"><跨度><跨度>跨風格跨度><跨度class="hljs-operator">=跨度><跨度>”顏色:# a56319;“跨度><跨度class="hljs-operator">>跨度>< span風格="color:#408080;font-style:italic">——數組< / span >跨度><跨度>< /跨度><跨度>生:customer.age::跨度>< span風格="color:#0086b3">整數跨度><跨度>,跨度><跨度class="hljs-operator"><跨度><跨度>跨風格跨度><跨度class="hljs-operator">=跨度><跨度>”顏色:# a56319;“跨度><跨度class="hljs-operator">>跨度>< span風格="color:#408080;font-style:italic">——< / span >類型轉換跨度><跨度>< /跨度><跨度>< /跨度>從跨度><跨度>customer_data;跨度>< /code>
與磚SQL可以很容易地運行這些查詢在不犧牲性能或通過JSON的列提取到不同的表中。這是一種我們使生活更容易分析人士感到興奮。
簡單的、優雅的SQL,常見的任務
我們也花了時間做大掃除SQL支持讓其他常見的任務更容易。有太多的新特性在一篇博客文章中,但這裏有一些最喜歡的。
不區分大小寫的字符串比較現在更容易:
選擇跨度><跨度>< /跨度><跨度>< /跨度>*跨度><跨度>< /跨度><跨度>< /跨度>從跨度><跨度>< /跨度>訂單<跨度>< /跨度>< span風格="color:#a71d5d">在哪裏跨度><跨度>< /跨度><跨度>o_orderpriority我喜歡跨度>< span風格="color:#183691">%緊急的跨度><跨度>;跨度><跨度class="hljs-operator"><跨度><跨度>跨風格跨度><跨度class="hljs-operator">=跨度><跨度>”顏色:# a56319;“跨度><跨度class="hljs-operator">>跨度>< span風格="color:#408080;font-style:italic">——不區分大小寫的字符串比較< / span >跨度><跨度>< /跨度>< /code>
共享窗框節省你不必重複一個窗口條款。考慮下麵的例子我們重用贏得窗框計算統計數據表:
選擇跨度><跨度>< /跨度><跨度>圓(跨度>< span風格="color:#0086b3">avg跨度><跨度>(o_totalprice)跨度>< span風格="color:#a71d5d">在跨度><跨度>贏了,跨度>< span風格="color:#0086b3">1跨度><跨度>)跨度>< span風格="color:#a71d5d">作為跨度><跨度>價格,跨度><跨度>圓(跨度>< span風格="color:#0086b3">avg跨度><跨度>(o_totalprice)跨度>< span風格="color:#a71d5d">在跨度><跨度>贏了,跨度>< span風格="color:#0086b3">1跨度><跨度>)跨度>< span風格="color:#a71d5d">作為跨度><跨度>avg_price,跨度><跨度>< /跨度>< span風格="color:#0086b3">最小值跨度><跨度>(o_totalprice)跨度>< span風格="color:#a71d5d">在跨度><跨度>贏得跨度>< span風格="color:#a71d5d">作為跨度><跨度>min_price,跨度><跨度>< /跨度>< span風格="color:#0086b3">馬克斯跨度><跨度>(o_totalprice)跨度>< span風格="color:#a71d5d">在跨度><跨度>贏得跨度>< span風格="color:#a71d5d">作為跨度><跨度>max_price,跨度><跨度>< /跨度>< span風格="color:#0086b3">數跨度><跨度>(跨度>< span風格="color:#0086b3">1跨度><跨度>)跨度>< span風格="color:#a71d5d">在跨度><跨度>贏得跨度>< span風格="color:#a71d5d">作為跨度><跨度>order_count跨度><跨度>< /跨度>< span風格="color:#a71d5d">從跨度><跨度>訂單跨度><跨度>< /跨度><跨度class="hljs-operator"><跨度><跨度>跨風格跨度><跨度class="hljs-operator">=跨度><跨度>”顏色:# a56319;“跨度><跨度class="hljs-operator">>跨度>< span風格="color:#408080;font-style:italic">——這是一個共享的窗框< / span >跨度><跨度>< /跨度><跨度>< /跨度>窗口跨度><跨度>贏得跨度>< span風格="color:#a71d5d">作為跨度><跨度>(跨度>< span風格="color:#a71d5d">訂單跨度><跨度>< /跨度>< span風格="color:#a71d5d">通過跨度><跨度>o_orderdate跨度>< span風格="color:#a71d5d">行跨度><跨度>< /跨度>< span風格="color:#a71d5d">之間的跨度><跨度>< /跨度>< span風格="color:#0086b3">2跨度><跨度>前跨度>< span風格="color:#a71d5d">和跨度><跨度>< /跨度>< span風格="color:#0086b3">2跨度><跨度>後);跨度>< /code>
多值插入使它容易插入多個值表,而不必使用歐盟關鍵字,這是常見的其他數據倉庫:
創建跨度><跨度>< /跨度>< span風格="color:#a71d5d">表跨度><跨度>員工跨度><跨度>(名稱字符串,部門字符串,薪水跨度>< span風格="color:#0086b3">INT跨度><跨度>、年齡跨度>< span風格="color:#0086b3">INT跨度><跨度>);跨度><跨度>< /跨度><跨度class="hljs-operator"><跨度><跨度>跨風格跨度><跨度class="hljs-operator">=跨度><跨度>”顏色:# a56319;“跨度><跨度class="hljs-operator">>跨度>< span風格="color:#408080;font-style:italic">——這是一個多值插入< / span >跨度><跨度>< /跨度><跨度>< /跨度>插入跨度><跨度>< /跨度>< span風格="color:#a71d5d">成跨度><跨度>員工跨度><跨度>< /跨度>< span風格="color:#a71d5d">值跨度><跨度>(跨度>< span風格="color:#183691">“麗莎”跨度><跨度>,跨度>< span風格="color:#183691">“銷售”跨度><跨度>,跨度>< span風格="color:#0086b3">10000年跨度><跨度>,跨度>< span風格="color:#0086b3">35跨度><跨度>),跨度><跨度>(跨度>< span風格="color:#183691">“伊萬”跨度><跨度>,跨度>< span風格="color:#183691">“銷售”跨度><跨度>,跨度>< span風格="color:#0086b3">32000年跨度><跨度>,跨度>< span風格="color:#0086b3">38跨度><跨度>),跨度><跨度>(跨度>< span風格="color:#183691">“弗雷德”跨度><跨度>,跨度>< span風格="color:#183691">“工程”跨度><跨度>,跨度>< span風格="color:#0086b3">21000年跨度><跨度>,跨度>< span風格="color:#0086b3">28跨度><跨度>);跨度>< /code>
Lambda函數是參數化表達式,可以傳遞給特定的SQL函數來控製他們的行為。下麵的例子的λ變換函數,連接在一起的指數和值數組(自己在磚SQL結構化類型的一個例子)。
< span風格=跨度>< span風格="color:#183691">”顏色:# a56319;“跨度><跨度>>——跨度>< span風格="color:#0086b3">這跨度><跨度>查詢返回(跨度>< span風格="color:#183691">“0:“跨度><跨度>,跨度>< span風格="color:#183691">“1:b”跨度><跨度>,跨度>< span風格="color:#183691">“2:c”跨度><跨度>) span >跨度>選擇變換(<跨度>陣列(跨度>< span風格="color:#183691">“一個”跨度><跨度>,跨度>< span風格="color:#183691">“b”跨度><跨度>,跨度>< span風格="color:#183691">“c”跨度><跨度>),跨度><跨度>(x,我)- >我::字符串| |跨度>< span風格="color:#183691">“:”跨度><跨度>||=x <跨風格跨度>< span風格="color:#183691">”顏色:# a56319;“跨度><跨度>>——跨度>< span風格="color:#0086b3">這跨度><跨度>是一個λ跨度><跨度class="hljs-function" style="color:#a71d5d">函數跨度><跨度class="hljs-function">< /跨度><跨度class="hljs-function" style="color:#458;font-weight:bold">跨度跨度><跨度class="hljs-function">>跨度><跨度class="hljs-function">)跨度><跨度>;跨度>< /code>
很容易與標準SQL更新數據
很少是靜態數據,通常要更新一個表基於另一個表的變化。我們是方便用戶刪除處理數據表、創建不常更改的數據和更多的現代標準的SQL語法。
讓我們看一看是多麼容易更新客戶表,合並在新數據到達:beplay体育app下载地址
合並跨度><跨度>< /跨度>< span風格="color:#a71d5d">成跨度><跨度>beplay体育app下载地址<跨度><跨度>跨風格跨度><跨度class="hljs-operator">=跨度><跨度>”顏色:# a56319;“跨度><跨度class="hljs-operator">>跨度>< span風格="color:#408080;font-style:italic">——目標表< / span >跨度><跨度>< /跨度><跨度>< /跨度>使用跨度><跨度>customer_updates跨度><跨度class="hljs-operator"><跨度><跨度>跨風格跨度><跨度class="hljs-operator">=跨度><跨度>”顏色:# a56319;“跨度><跨度class="hljs-operator">>跨度>< span風格="color:#408080;font-style:italic">——源表更新< / span >跨度><跨度>< /跨度><跨度>< /跨度>在跨度><跨度>beplay体育app下载地址customers.customer_id跨度><跨度class="hljs-operator">=跨度><跨度>customer_updates.customer_id跨度><跨度>< /跨度>< span風格="color:#a71d5d">當跨度><跨度>匹配跨度>< span風格="color:#a71d5d">然後跨度><跨度>< /跨度><跨度>更新跨度>< span風格="color:#a71d5d">集跨度><跨度>beplay体育app下载地址customers.address跨度><跨度class="hljs-operator">=跨度><跨度>customer_updates.address跨度>< /code>
不用說,你不犧牲性能與此功能表更新超快。你可以找到更多關於更新的能力,合並和刪除表中的數據在這裏。
把它旋轉
我們理解語言方言可以顛覆性的變化。為了便於推廣,我們很高興宣布一項新的功能,安全通道,幫助客戶預覽即將到來的變化。beplay体育app下载地址
當您創建或編輯一個SQL端點,您現在可以選擇一個頻道。“當前”頻道包含通常可用的特性而預覽通道包含即將到來的ANSI SQL方言等功能。
測試ANSI SQL方言,單擊SQL端點在左側導航菜單,單擊端點和改變它的渠道。改變通道將重啟端點,以後你可以隨時恢複這一變化。現在,您可以測試您的查詢和儀表板在這個端點。
你也可以測試ANSI SQL方言通過使用SET命令,使它為當前會話:
集跨度><跨度>ansi_mode跨度><跨度class="hljs-operator">=跨度><跨度>< /跨度>< span風格="color:#954121">真正的跨度><跨度>;跨度><跨度class="hljs-operator"><跨度><跨度>跨風格跨度><跨度class="hljs-operator">=跨度><跨度>”顏色:# a56319;“跨度><跨度class="hljs-operator">>跨度>< span風格="color:#408080;font-style:italic">——隻使用這個設置用於測試< / span >跨度><跨度>< /跨度><跨度>< /跨度>選擇跨度><跨度>< /跨度>< span風格="color:#0086b3">投跨度><跨度>(跨度>< span風格="color:#183691">“一個”跨度><跨度>< /跨度>< span風格="color:#a71d5d">作為跨度><跨度>< /跨度>< span風格="color:#0086b3">整數跨度><跨度>);跨度>< /code>
請注意,我們不建議生產ANSI_MODE設置為false。這個參數將被刪除在未來,因此你應該隻對測試目的暫時設置為FALSE。
SQL在磚的未來是開放、包容和快速
磚SQL已經設置世界紀錄的性能和這些變化,這是標準兼容。我們興奮的裏程碑,因為它是極大地提高可用性和簡化的關鍵工作負載遷移lakehouse平台從數據倉庫。Beplay体育安卓版本
請了解更多關於變化包括在ANSI SQL方言。注意,ANSI方言還沒有啟用默認值為現有或新集群在磚數據科學與工程工作區。我們正在做下一個。