首页
学习
活动
专区
圈层
工具
发布

CTE公用表表达式的可读性与性能优化

在复杂SQL查询开发中,开发者常面临两大痛点:嵌套地狱带来的可读性灾难和临时表滥用导致的性能损耗。CTE(Common Table Expression,公用表表达式)正是解决这些问题的利器。...二、递归CTE:处理层次结构的银弹2.1 递归查询实战场景当处理树状数据(如组织架构、分类目录)时,递归CTE展现独特价值:WITH RECURSIVE OrgTree AS ( -- 锚点成员:...:深层递归消耗内存指数级增长3.2 优化前瞻在下篇中,我们将深入探讨:CTE vs 临时表的性能基准测试优化器提示(如 MATERIALIZE/INLINE)的实战用法递归查询的深度剪枝策略分布式数据库下...TiDB/BigQuery 等分布式系统中,CTE面临新挑战:3.1 数据分片下的执行策略WITH GlobalStats AS ( SELECT region, AVG(sales) avg_sale...结果限定为分区键字段,减少网络传输在TiDB中设置 tidb_enable_parallel_apply 启用并行递归3.2 代价模型调整BigQuery:使用 CREATE TEMP FUNCTION

64521

20亿条记录的MySQL大表迁移实战

在这篇文章中,我将介绍我们的解决方案,但我还想提醒一下,这并不是一个建议:不同的情况需要不同的解决方案,不过也许有人可以从我们的解决方案中得到一些有价值的见解。 云解决方案会是解药吗?...我们之所以选择它,是因为我们的客户更喜欢谷歌的云解决方案,他们的数据具有结构化和可分析的特点,而且不要求低延迟,所以 BigQuery 似乎是一个完美的选择。...如果 BigQuery 引入失败(比如执行请求查询的成本太高或太困难),这个办法为我们提供了某种退路。这是一个重要的决定,它给我们带来了很多好处,而开销很小。...在我们的案例中,我们需要开发一个简单的 Kafka 生产者,它负责查询数据,并保证不丢失数据,然后将数据流到 Kafka,以及另一个消费者,它负责将数据发送到 BigQuery,如下图所示。...原文链接: https://blog.softwaremill.com/our-way-of-dealing-with-more-than-2-billion-records-in-sql-database

5.9K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ClickHouse 提升数据效能

    带着天真的热情,我提出了一系列我认为在 GA4 中回答起来微不足道的问题,例如“从发布之日起,每个博客的浏览量分布情况如何?”...我们的营销运营主管阿德里安(Adrian)的反应“礼貌地”表示这需要一些时间来制定。意识到我们需要每月报告一次,并且看到他忙于其他更重要的任务,我提供了自己的时间来协助。...虽然我们通常能够通过导出数据并使用clickhouse local查询文件或使用 GA4 的导入数据功能来克服这些挑战,但该过程缓慢且耗时。作为一个自认为半技术性的人,我渴望 SQL 的灵活性。...作为一个支持SQL的实时数据仓库,ClickHouse提供了我们所需要的查询灵活性。几乎我们所有的查询都可以轻松地表示为 SQL。...这些查询中的大多数都包含聚合,ClickHouse 作为面向列的数据库进行了优化,能够在不采样的情况下对数千亿行提供亚秒级响应时间 - 远远超出了我们在 GA4 中看到的规模。

    2.1K10

    ClickHouse 提升数据效能

    带着天真的热情,我提出了一系列我认为在 GA4 中回答起来微不足道的问题,例如“从发布之日起,每个博客的浏览量分布情况如何?”...我们的营销运营主管阿德里安(Adrian)的反应“礼貌地”表示这需要一些时间来制定。意识到我们需要每月报告一次,并且看到他忙于其他更重要的任务,我提供了自己的时间来协助。...虽然我们通常能够通过导出数据并使用clickhouse local查询文件或使用 GA4 的导入数据功能来克服这些挑战,但该过程缓慢且耗时。作为一个自认为半技术性的人,我渴望 SQL 的灵活性。...作为一个支持SQL的实时数据仓库,ClickHouse提供了我们所需要的查询灵活性。几乎我们所有的查询都可以轻松地表示为 SQL。...这些查询中的大多数都包含聚合,ClickHouse 作为面向列的数据库进行了优化,能够在不采样的情况下对数千亿行提供亚秒级响应时间 - 远远超出了我们在 GA4 中看到的规模。

    2K10

    ClickHouse 提升数据效能

    带着天真的热情,我提出了一系列我认为在 GA4 中回答起来微不足道的问题,例如“从发布之日起,每个博客的浏览量分布情况如何?”...我们的营销运营主管阿德里安(Adrian)的反应“礼貌地”表示这需要一些时间来制定。意识到我们需要每月报告一次,并且看到他忙于其他更重要的任务,我提供了自己的时间来协助。...虽然我们通常能够通过导出数据并使用clickhouse local查询文件或使用 GA4 的导入数据功能来克服这些挑战,但该过程缓慢且耗时。作为一个自认为半技术性的人,我渴望 SQL 的灵活性。...作为一个支持SQL的实时数据仓库,ClickHouse提供了我们所需要的查询灵活性。几乎我们所有的查询都可以轻松地表示为 SQL。...这些查询中的大多数都包含聚合,ClickHouse 作为面向列的数据库进行了优化,能够在不采样的情况下对数千亿行提供亚秒级响应时间 - 远远超出了我们在 GA4 中看到的规模。

    1.7K10

    什么数据库最适合数据分析师

    在Mode公司,分析师每天都会使用各种不同的语言编写几千个查询,运行在Mode编辑器里的查询超过百万个,而Benn Stancil就是从这些数据出发,对MySQL、PostgreSQL、Redshift...、SQL Server、BigQuery、Vertica、Hive和Impala这八款数据库进行了比较。...但是,对于该结果Benn Stancil认为可能有点不严谨,因为Impala、MySQL和Hive是开源的免费产品,而Vertica、SQL Server和BigQuery不是,后三者的用户通常是有充足分析预算的大型企业...这八种数据库查询长度的统计结果如下: ? 如果说单纯地比较最终的长度有失偏颇,那么可以看看随着分析的逐步深入,查询逐渐变复杂的过程中,其修改次数与长度之间的关系: ?...最后,Benn Stancil认为在分析的这8个数据库中,MySQL和PostgreSQL编写SQL最简单,应用也最广泛,但与Vertica和SQL Server相比它们的特性不够丰富,而且速度要慢。

    1.6K50

    主流云数仓性能对比分析

    最佳性能SQL的数量:横向比较22个场景,挑选出每个场景的最佳(执行时长最短)。Redshift有13条SQL执行时间最短,Synapse有8条,Snowflake只有1条,而BigQuery没有。...最佳性能SQL的数量:同样,还是Redshift在最多场景性能表现最好,Synapse是第二,但差距已经不大了。而Snowflake和BigQuery在22个场景中没有执行时长最短的。...本次测试采用的TPC-H模型可能是为了迁就Actian而选择,相对简单,无法完全反映真实环境中的各种复杂负载和ad-hoc查询,另外5并发也相对较低。...但它底层还需要依赖第三方云厂商的基础架构,比如AWS、GCP、Azure,随着这些厂商自身云数仓服务的发展,这种合作关系可能未来可能会变得越来越微妙。...未来云数仓或云数据库,更多的优化可能会与底层专有硬件或网络相结合,比如CPU、GPU、FPGA、专有协议等等,这些是云厂商自研产品的优势,而像Snowflake、Actian、ClickHouse等第三方平台是无法做到的

    4.8K10

    1年将超过15PB数据迁移到谷歌BigQuery,PayPal的经验有哪些可借鉴之处?

    BigQuery 使我们能够中心化我们的数据平台,而不会牺牲 SQL 访问、Spark 集成和高级 ML 训练等能力。...此外,系统扩展需要购买新的硬件,而漫长的交付周期会成为业务的瓶颈。...但要定期将源上的更改复制到 BigQuery,过程就变复杂了。这需要从源上跟踪更改,并在 BigQuery 中重放它们。为这些极端情况处理大量积压的自动数据加载过程是非常有挑战性的。...这包括行计数、分区计数、列聚合和抽样检查。 BigQuery 的细微差别:BigQuery 对单个查询可以触及的分区数量的限制,意味着我们需要根据分区拆分数据加载语句,并在我们接近限制时调整拆分。...我们正在计划将来自财务、人力资源、营销和第三方系统(如 Salesforce)以及站点活动的多个数据集整合到 BigQuery 中,以实现更快的业务建模和决策制定流程。

    6.5K20

    干货 ▏什么数据库最适合数据分析师?

    在Mode公司,分析师每天都会使用各种不同的语言编写几千个查询,运行在Mode编辑器里的查询超过百万个,而Benn Stancil就是从这些数据出发,对MySQL、PostgreSQL、Redshift...、SQL Server、BigQuery、Vertica、Hive和Impala这八款数据库进行了比较。...但是,对于该结果Benn Stancil认为可能有点不严谨,因为Impala、MySQL和Hive是开源的免费产品,而Vertica、SQL Server和BigQuery不是,后三者的用户通常是有充足分析预算的大型企业...这八种数据库查询 长度的统计结果如下: ? 如果说单纯地比较最终的长度有失偏颇,那么可以看看随着分析的逐步深入,查询逐渐变复杂的过程中,其修改次数与长度之间的关系: ?...最后,Benn Stancil认为在分析的这8个数据库中,MySQL和PostgreSQL编写SQL最简单,应用也最广泛,但与Vertica和SQL Server相比它们的特性不够丰富,而且速度要慢。

    2K30

    使用Kafka,如何成功迁移SQL数据库中超过20亿条记录?

    而且,这么大的表还存在其他问题:糟糕的查询性能、糟糕的模式设计,因为记录太多而找不到简单的方法来进行数据分析。...在这篇文章中,我将介绍我们的解决方案,但我还想提醒一下,这并不是一个建议:不同的情况需要不同的解决方案,不过也许有人可以从我们的解决方案中得到一些有价值的见解。 云解决方案会是解药吗?...我们之所以选择它,是因为我们的客户更喜欢谷歌的云解决方案,他们的数据具有结构化和可分析的特点,而且不要求低延迟,所以 BigQuery 似乎是一个完美的选择。...如果 BigQuery 引入失败(比如执行请求查询的成本太高或太困难),这个办法为我们提供了某种退路。这是一个重要的决定,它给我们带来了很多好处,而开销很小。...在我们的案例中,我们需要开发一个简单的 Kafka 生产者,它负责查询数据,并保证不丢失数据,然后将数据流到 Kafka,以及另一个消费者,它负责将数据发送到 BigQuery,如下图所示。 ?

    4.4K20

    学 SQL 必须了解的10个高级概念

    因此,Stratascratch的创始人Nathan Rosidi以及我觉得我认为10个最重要和相关的中级到高级SQL概念。...2.递归CTEs. 递归CTE是引用自己的CTE,就像Python中的递归函数一样。递归CTE尤其有用,它涉及查询组织结构图,文件系统,网页之间的链接图等的分层数据,尤其有用。...递归CTE有3个部分: 锚构件:返回CTE的基本结果的初始查询 递归成员:引用CTE的递归查询。...在许多现实生活中,数据存储在一个大型表中而不是许多较小的表中。在这种情况下,可能需要自我连接来解决独特的问题。 让我们来看看一个例子。...我希望这有助于您在面试准备中 - 我相信,如果您知道这10个内部概念,那么在那里大多数SQL问题时,你会做得很好。 一如既往,祝你学习努力最好!

    1.4K30

    学 SQL 必须了解的 10 个高级概念

    因此,Stratascratch的创始人Nathan Rosidi以及我觉得我认为10个最重要和相关的中级到高级SQL概念。...2.递归CTEs. 递归CTE是引用自己的CTE,就像Python中的递归函数一样。递归CTE尤其有用,它涉及查询组织结构图,文件系统,网页之间的链接图等的分层数据,尤其有用。...递归CTE有3个部分: 锚构件:返回CTE的基本结果的初始查询 递归成员:引用CTE的递归查询。...在许多现实生活中,数据存储在一个大型表中而不是许多较小的表中。在这种情况下,可能需要自我连接来解决独特的问题。 让我们来看看一个例子。...我希望这有助于您在面试准备中 - 我相信,如果您知道这10个内部概念,那么在那里大多数SQL问题时,你会做得很好。 一如既往,祝你学习努力最好!

    1.2K20

    学 SQL 必须了解的10个高级概念

    因此,Stratascratch的创始人Nathan Rosidi以及我觉得我认为10个最重要和相关的中级到高级SQL概念。 那个说,我们走了!...2.递归CTEs. 递归CTE是引用自己的CTE,就像Python中的递归函数一样。递归CTE尤其有用,它涉及查询组织结构图,文件系统,网页之间的链接图等的分层数据,尤其有用。...递归CTE有3个部分: 锚构件:返回CTE的基本结果的初始查询 递归成员:引用CTE的递归查询。...在许多现实生活中,数据存储在一个大型表中而不是许多较小的表中。在这种情况下,可能需要自我连接来解决独特的问题。 让我们来看看一个例子。...我希望这有助于您在面试准备中 - 我相信,如果您知道这10个内部概念,那么在那里大多数SQL问题时,你会做得很好。 一如既往,祝你学习努力最好!

    44210

    必须了解的十个高级 SQL 概念

    因此,Stratascratch的创始人Nathan Rosidi以及我觉得我认为10个最重要和相关的中级到高级SQL概念。 那个说,我们走了!...2.递归CTEs. 递归CTE是引用自己的CTE,就像Python中的递归函数一样。递归CTE尤其有用,它涉及查询组织结构图,文件系统,网页之间的链接图等的分层数据,尤其有用。...递归CTE有3个部分: 锚构件:返回CTE的基本结果的初始查询 递归成员:引用CTE的递归查询。...在许多现实生活中,数据存储在一个大型表中而不是许多较小的表中。在这种情况下,可能需要自我连接来解决独特的问题。 让我们来看看一个例子。...我希望这有助于您在面试准备中 - 我相信,如果您知道这10个内部概念,那么在那里大多数SQL问题时,你会做得很好。 一如既往,祝你学习努力最好!

    1.4K20

    必知必会的十个高级 SQL 概念

    递归 CTEs. 递归 CTE 是引用自己的 CTE,就像 Python 中的递归函数一样。递归 CTE 尤其有用,它涉及查询组织结构图,文件系统,网页之间的链接图等的分层数据,尤其有用。...递归 CTE 有 3 个部分: 锚构件:返回 CTE 的基本结果的初始查询 递归成员:引用 CTE 的递归查询。...自联结 一个 SQL 表自行连接自己。你可能会认为没有用,但你会感到惊讶的是这是多么常见。在许多现实生活中,数据存储在一个大型表中而不是许多较小的表中。...在这种情况下,可能需要自我连接来解决独特的问题。 让我们来看看一个例子。 示例问题:给定下面的员工表,写出一个 SQL 查询,了解员工的工资,这些员工比其管理人员工资更多。...我希望这有助于您在面试准备中 - 我相信,如果您知道这 10 个内部概念,那么在那里大多数 SQL 问题时,你会做得很好。 一如既往,祝你学习努力最好!

    1.3K00

    【观点】最适合数据分析师的数据库为什么不是MySQL?!

    在Mode公司,分析师每天都会使用各种不同的语言编写几千个查询,运行在Mode编辑器里的查询超过百万个,而Benn Stancil就是从这些数据出发,对MySQL、PostgreSQL、Redshift...、SQL Server、BigQuery、Vertica、Hive和Impala这八款数据库进行了比较。...,因为Impala、MySQL和Hive是开源的免费产品,而Vertica、SQL Server和BigQuery不是,后三者的用户通常是有充足分析预算的大型企业,其较高的错误率很有可能是由于使用更深入而不是语言...这八种数据库查询长度的统计结果如下: ? 如果说单纯地比较最终的长度有失偏颇,那么可以看看随着分析的逐步深入,查询逐渐变复杂的过程中,其修改次数与长度之间的关系: ?...最后,Benn Stancil认为在分析的这8个数据库中,MySQL和PostgreSQL编写SQL最简单,应用也最广泛,但与Vertica和SQL Server相比它们的特性不够丰富,而且速度要慢。

    3.3K50

    WrenAI:AI时代的数据分析利器深度剖析

    这意味着无论你是小团队还是大企业,都能轻松上手。 潜在争议:虽然它宣称能减少90%的SQL编写工作,但实际效果取决于模型质量和数据复杂度。...传统BI工具如Tableau需要手动拖拽,WrenAI则让你用聊天方式搞定一切。官网宣称,它能让分析时间缩短90%,每月节省20+小时。从我测试看,在中等数据集上确实高效。...SQL处理器:解析WrenSQL(ANSI标准),转译成特定方言,如BigQuery的SQL。 访问控制:支持RBAC、行级安全,确保企业级治理。...在Text-to-SQL流程中,用户问问题,LLM生成初步SQL,引擎重写加入关系和计算,再执行。举例:查询“订单”,它会根据MDL自动加CTE,计算如“Revenue = sum(price)”。...测试中,我用乱七八糟的列名,它也能基本推断正确路径。初次建模需要时间,但一旦设好,回报巨大。 功能全览:从查询到可视化 WrenAI不止Text-to-SQL,还覆盖全链路。

    1K10

    10 个高级 SQL 概念

    因此,Stratascratch的创始人Nathan Rosidi以及我觉得我认为10个最重要和相关的中级到高级SQL概念。...2.递归CTEs. 递归CTE是引用自己的CTE,就像Python中的递归函数一样。递归CTE尤其有用,它涉及查询组织结构图,文件系统,网页之间的链接图等的分层数据,尤其有用。...递归CTE有3个部分: 锚构件:返回CTE的基本结果的初始查询 递归成员:引用CTE的递归查询。...同样,除了在查询/表中相同数量的列,其中不再与每个查询/表比较单个列。 6.自联结 一个SQL表自行连接自己。你可能会认为没有用,但你会感到惊讶的是这是多么常见。...在许多现实生活中,数据存储在一个大型表中而不是许多较小的表中。在这种情况下,可能需要自我连接来解决独特的问题。 让我们来看看一个例子。

    1.3K10

    【学习】什么数据库最适合数据分析师

    在Mode公司,分析师每天都会使用各种不同的语言编写几千个查询,运行在Mode编辑器里的查询超过百万个,而Benn Stancil就是从这些数据出发,对MySQL、PostgreSQL、Redshift...、SQL Server、BigQuery、Vertica、Hive和Impala这八款数据库进行了比较。...但是,对于该结果Benn Stancil认为可能有点不严谨,因为Impala、MySQL和Hive是开源的免费产品,而Vertica、SQL Server和BigQuery不是,后三者的用户通常是有充足分析预算的大型企业...这八种数据库查询长度的统计结果如下: ? 如果说单纯地比较最终的长度有失偏颇,那么可以看看随着分析的逐步深入,查询逐渐变复杂的过程中,其修改次数与长度之间的关系: ?...最后,Benn Stancil认为在分析的这8个数据库中,MySQL和PostgreSQL编写SQL最简单,应用也最广泛,但与Vertica和SQL Server相比它们的特性不够丰富,而且速度要慢。

    1.4K40

    10 个高级的 SQL 查询技巧

    2.递归CTEs. 递归CTE是引用自己的CTE,就像Python中的递归函数一样。递归CTE尤其有用,它涉及查询组织结构图,文件系统,网页之间的链接图等的分层数据,尤其有用。...递归CTE有3个部分: 锚构件:返回CTE的基本结果的初始查询 递归成员:引用CTE的递归查询。...同样,除了在查询/表中相同数量的列,其中不再与每个查询/表比较单个列。 6.自联结 一个SQL表自行连接自己。你可能会认为没有用,但你会感到惊讶的是这是多么常见。...在许多现实生活中,数据存储在一个大型表中而不是许多较小的表中。在这种情况下,可能需要自我连接来解决独特的问题。 让我们来看看一个例子。...我希望这有助于您在面试准备中 - 我相信,如果您知道这10个内部概念,那么在那里大多数SQL问题时,你会做得很好。

    87310
    领券