代码之旅

I love Coding !

详细级别表达式(LOD Expression)是处理在一个可视化视图中包含多个级别粒度的问题的方法。

详细级别指的是数据不同粒度(聚合度),共有3种不同的详细级别:

  • 行级别表达式(聚合度最低)
  • 视图级别表达式
  • 表级别表达式(聚合度最高)

行级别表达式是直接引用基础表的未聚合数据列的表达式。此时,表达式的维度是行级别的(如果表有主键的话,维度即主键)。例如:

1
[Profit Ratio]=[Sales] / [Profit]

通过将每行的销量除以利润,可以得到利润率[ProfitRatio]的新列。

视图级别表达式是引用聚合数据源列的表达式。此时,表达式的维度是当前SQL视图的维度。例如:

1
SUM(Sales)/SUM(Profit)

表级别表达式是指不使用任何范围关键字的表达式。例如以下表达式返回整个表的最早订单日期:

1
{MIN([Order Date])}

在 Tableau 支持详细级别表达式之前,无法在视图级别以外的详细级别创建计算。例如,用户的意图是将每个商店的商店销售额与所有商店的平均销售额进行比较,如果您尝试保存以下表达式,Tableau 将显示错误消息:“无法使用此函数混合聚合和非聚合参数”:

1
[Sales] – AVG([Sales])

在这种情况下,详细级别表达式就派上了用场。详细级别表达式提供了对视图详细级别之外的数据计算聚合的简单方法,实现在可视化中以任意的方式组合这些数据。

阅读全文 »

本篇文章开始,我们将进行Trino的源码分析,一切还是从启动开始看起。

阅读全文 »

上一篇文章了解了 Trino 的基础 Airlift 框架。本篇将深入 Airlift 源码进行学习,Airlift中的服务都通过guice注入。

阅读全文 »

Airlift是Trino的系统基础,是一个用Java构建REST服务的轻量级框架。Airlift并不是像Spring一样的重量级框架,相反,它像是由一组开源工具组成的工具包,将来自 Java 生态系统的稳定、成熟的库汇集到一个简单、轻量级的包中,让您专注于完成工作,并包括对配置、指标、日志记录、依赖注入等的内置支持,使开发者能够在最短的时间内交付生产质量的 Web 服务。

Airlift包含以下标准开源库:

LibraryDomain
JettyIndustry standard HTTP server and client
JAX-RS/JerseyThe Java standard for REST servers
JacksonIndustry standard JSON serialization
GuavaSwiss army knife for Java
GuiceThe best dependency injection framework for Java
jmxutilsSimple library for exposing JMX endpoints
阅读全文 »

Apache Kafka 是一个开源的事件流平台,用户可以在其中创建 Kafka 主题作为数据传输单元,然后与生产者和消费者一起发布或订阅该主题。虽然大多数 Kafka 主题都在积极使用,但由于业务需求发生变化或主题本身是短暂的,因此不再需要一些主题。Kafka 本身没有自动检测未使用主题并删除它们的机制。这通常不是一个大问题,因为 Kafka 集群可以容纳相当多的主题,数百到数千个。但是,如果主题数量持续增长,最终会遇到一些瓶颈,并对整个 Kafka 集群产生破坏性影响。TopicGC服务的诞生就是为了解决这个确切的问题。事实证明,它通过删除~20%的主题来减轻Kafka的压力,并将Kafka的生产和消费性能提高了至少30%。

阅读全文 »

本文简单介绍了SIMD技术和SIMD在Java中的应用。SIMD(Single Instruction Multiple Data)即单指令流多数据流,是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。简单来说就是一个指令能够同时处理多个数据。

阅读全文 »

前面我们简单介绍过分布式锁,本篇文章会介绍如果基于数据库(Mysql)实现分布式锁。基于Mysql实现锁的一般场景是对性能要求不高,且不希望因为分布式锁而引入新的组件的。

阅读全文 »