Sql语言的进化砖:Ansi标准默认情况下,从数据仓库容易迁移
2021年11月16日, 在bob体育客户端下载平台的博客
今天,我们兴奋地宣布,砖SQL将默认使用标准ANSI SQL方言。这是在本月早些时候宣布砖SQL的创纪录的表现和一个主要的里程碑寻求支持的开放标准。这篇文章讨论了如何更新更容易你的数据仓库的工作负载迁移到砖lakehouse平台。bob体育客户端下载此外,我们很高兴地宣布提高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特性,删除重写查询的需要。
例如,一个新的资格条款简化过滤窗口功能使它容易从Teradata迁移。下面的查询发现在每天五喜欢高消费的顾客:
选择跨度><跨度>< /跨度>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语法。
让我们看一看是多么容易更新客户表,合并在新数据到达:
合并跨度><跨度>< /跨度>< span风格="color:#a71d5d">成跨度><跨度>客户跨度><跨度class="hljs-operator"><跨度><跨度>跨风格跨度><跨度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 >跨度><跨度>< /跨度><跨度>< /跨度>在跨度><跨度>customers.customer_id跨度><跨度class="hljs-operator">=跨度><跨度>customer_updates.customer_id跨度><跨度>< /跨度>< span风格="color:#a71d5d">当跨度><跨度>匹配跨度>< span风格="color:#a71d5d">然后跨度><跨度>< /跨度><跨度>更新跨度>< span风格="color:#a71d5d">集跨度><跨度>customers.address跨度><跨度class="hljs-operator">=跨度><跨度>customer_updates.address跨度>< /code>
不用说,你不牺牲性能与此功能表更新超快。你可以找到更多关于更新的能力,合并和删除表中的数据在这里。
把它旋转
我们理解语言方言可以颠覆性的变化。为了便于推广,我们很高兴宣布一项新的功能,安全通道,帮助客户预览即将到来的变化。
当您创建或编辑一个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平台从数据仓库。bob体育客户端下载
请了解更多关于BOB低频彩变化包括在ANSI SQL方言。注意,ANSI方言还没有启用默认值为现有或新集群在砖数据科学与工程工作区。我们正在做下一个。