Home

当我谈论数据湖时,在谈些什么

最近由于工作原因,又重新接触了一番数据湖。如果按照英文直译,数据湖(DataLake)是一个非常早的概念,在 Data Lake Wiki1里引用的最早一篇文章是Pentaho 的创始人兼 CTO James Dixon 发表的这篇博客:《Pentaho, Hadoop, and Data Lakes》2,发表在 2010 年。 而最近两年数据湖的文章,明显多了起来。这篇文章记录下我对数据湖的理解。 1. 流批一体 提到数据湖,就不得不说流批一体。刚接触大数据的时候,常听到的一个名词就是「流批一体」。背景可以用这样一张图表示: 最传统的数仓架构,其实也是最简单、最经典的。 随着数据量变大、时效性需求不同,逐步衍生出了后续的几种架构,当然,链路也更加复杂。复杂的链路自身,在...

Read more

Flink - Row 里使用字符串的 ParseException

1. Row 里显式使用字符串的问题 在 20 年初最开始使用 Flink 1.9.1 时,有一些看似普通的 SQL 也会执行失败。比如下面这个: package cn.izualzhy import org.apache.flink.streaming.api.scala._ import org.apache.flink.table.api.bridge.scala.StreamTableEnvironment object LiteralInRowTest extends App { val env = StreamExecutionEnvironment.createLocalEnvironment(1) val tEnv = StreamTableEnviro...

Read more

Calcite-5:SQL解析

C 代码编译时要经过词法分析、语法分析:比如提取关键字(int/for/#define, ETC.),判断语法是否正确。 类似的,SQL 字符串解析为SqlNode也需要词法分析。 在 Calcite 中,这一过程借助于 javacc 完成。预配置的语法文件里,包含了需要的关键字以及对应的代码模板。随着解析字符串匹配到关键字,一步步生成需要的代码。 这篇笔记主要记录 javacc 以及 Calcite 里对应的源码分析。 1. javacc javacc1是一个 java 版本的语法解析库,我们可以用来定义自己的关键字,生成 java 代码。 举个例子,我们定义一个自解释的Explain关键字,输入形如: EXPLAIN javacc; 预期的输出是打印参数(java...

Read more