概述
学习开源项目,另外一个重点就是看看测试用例,优秀的项目,一般会提供一些本地能跑,方便学习者深入 Debug 的测试方法。
由于 Delta Lake 刚刚开源,代码也在快速迭代,所以以下测试用例在后面的发布中未必还会存在的,各位读者请注意。
代码是在 da3734e62b6698045a4e2b07286aac7f24cee44b
这个 commit 上。
Delta Lake测试用例
目录结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
/Users/runzhliu/workspace/delta/src/test
├── resources
│ └── log4j.properties
└── scala
└── org
└── apache
└── spark
└── sql
└── delta
├── ActionSerializerSuite.scala
├── DeltaSinkSuite.scala
├── DeltaSourceSuite.scala
├── DeltaSuiteOSS.scala
├── DeltaTimeTravelSuite.scala
├── FileNamesSuite.scala
└── LogStoreSuite.scala
7 directories, 8 files
|
Delta Lake 代码量还很少,所以测试用例也相对比较少。下面挑选一些值得学习的测试用例简单分析一下。
ActionSerializerSuite
如命所示,这个测试用例就是用来测试 Action
方法序列化/反序列化 json 的一个类。所有的这些 Action
都继承了 Action
这个接口,提供了了一个 def json
的方法,用于把 Action
转化为 Json 格式记录在事务日志里。
1
2
3
4
5
6
7
8
9
|
/**
* Represents a single change to the state of a Delta table. An order sequence
* of actions can be replayed using [[InMemoryLogReplay]] to derive the state
* of the table at a given point in time.
*/
sealed trait Action {
def wrap: SingleAction
def json: String = JsonUtils.toJson(wrap)
}
|
关于 Action
类,提供了很多方法,封装了增删(改其实是一次增和一次删的操作)日志文件的一些操作。
关于 AddFile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
case class AddFile(
path: String,
partitionValues: Map[String, String],
size: Long,
modificationTime: Long,
dataChange: Boolean,
@JsonRawValue
stats: String = null,
tags: Map[String, String] = null) extends FileAction {
require(path.nonEmpty)
override def wrap: SingleAction = SingleAction(add = this)
def remove: RemoveFile = removeWithTimestamp()
def removeWithTimestamp(
timestamp: Long = System.currentTimeMillis(),
dataChange: Boolean = true): RemoveFile = {
// scalastyle:off
RemoveFile(path, Some(timestamp), dataChange)
// scalastyle:on
}
}
|
Delta Lake 写数据文件的时候标示为 add
,以下是事务日志中的增加文件的记录。
1
|
{"add":{"path":"part-00002-beed6b49-549c-4888-aa64-838d39cac0e8-c000.snappy.parquet","partitionValues":{},"size":423,"modificationTime":1557986707000,"dataChange":true}}
|
测试类中,有关于这个 json 的序列化和反序列化的测试,同学们可以自己跑跑看看。关于 RemoveFile
就不赘述了。
LogStoreSuite
总结
目前 Delta Lake 还是在 0.1.0 的版本,代码里有很多地方不完善,比如说 Optimize
的实现几乎是空的,因此目前版本的 Delta Lake 并不提供像商业版那样的一些优化操作,要上生产环境还需要继续等待,按照其 Road Map,在六月份和七月份都会有新的版本发布,大家一起期待一下吧!
警告
本文最后更新于 2017年2月1日,文中内容可能已过时,请谨慎参考。