blob: 4cea6bbd3e94b2ba168dec78a9ca44fc6251db2a [file] [log] [blame]
(window.webpackJsonp=window.webpackJsonp||[]).push([[374],{947:function(t,e,a){"use strict";a.r(e);var n=a(70),s=Object(n.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"tsfile-文件格式"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tsfile-文件格式"}},[t._v("#")]),t._v(" TsFile 文件格式")]),t._v(" "),a("h2",{attrs:{id:"_1-tsfile-设计"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-tsfile-设计"}},[t._v("#")]),t._v(" 1. TsFile 设计")]),t._v(" "),a("p",[t._v("本章是关于 TsFile 的设计细节。")]),t._v(" "),a("h3",{attrs:{id:"_1-1-变量的存储"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-1-变量的存储"}},[t._v("#")]),t._v(" 1.1 变量的存储")]),t._v(" "),a("ul",[a("li",[a("strong",[t._v("大端存储")]),t._v(" "),a("ul",[a("li",[t._v("比如: "),a("code",[t._v("int")]),t._v(" "),a("code",[t._v("0x8")]),t._v(" 将会被存储为 "),a("code",[t._v("00 00 00 08")]),t._v(", 而不是 "),a("code",[t._v("08 00 00 00")])])])]),t._v(" "),a("li",[a("strong",[t._v("可变长的字符串类型")]),t._v(" "),a("ul",[a("li",[t._v("存储的方式是以一个 "),a("code",[t._v("int")]),t._v(" 类型的 "),a("code",[t._v("Size")]),t._v(" + 字符串组成。"),a("code",[t._v("Size")]),t._v(" 的值可以为 0。")]),t._v(" "),a("li",[a("code",[t._v("Size")]),t._v(" 指的是字符串所占的字节数,它并不一定等于字符串的长度。")]),t._v(" "),a("li",[t._v('举例来说,"sensor_1" 这个字符串将被存储为 '),a("code",[t._v("00 00 00 08")]),t._v(' + "sensor_1" (ASCII编码)。')]),t._v(" "),a("li",[t._v('另外需要注意的一点是文件签名 "TsFile000001" ('),a("code",[t._v("Magic String")]),t._v(" + "),a("code",[t._v("Version")]),t._v("), 因为他的 "),a("code",[t._v("Size(12)")]),t._v(" 和 ASCII 编码值是固定的,所以没有必要在这个字符串前的写入 "),a("code",[t._v("Size")]),t._v(" 值。")])])]),t._v(" "),a("li",[a("strong",[t._v("数据类型")]),t._v(" "),a("ul",[a("li",[t._v("0: BOOLEAN")]),t._v(" "),a("li",[t._v("1: INT32 ("),a("code",[t._v("int")]),t._v(")")]),t._v(" "),a("li",[t._v("2: INT64 ("),a("code",[t._v("long")]),t._v(")")]),t._v(" "),a("li",[t._v("3: FLOAT")]),t._v(" "),a("li",[t._v("4: DOUBLE")]),t._v(" "),a("li",[t._v("5: TEXT ("),a("code",[t._v("String")]),t._v(")")])])]),t._v(" "),a("li",[a("strong",[t._v("编码类型")]),t._v(" "),a("ul",[a("li",[t._v("0: PLAIN")]),t._v(" "),a("li",[t._v("1: DICTIONARY")]),t._v(" "),a("li",[t._v("2: RLE")]),t._v(" "),a("li",[t._v("3: DIFF")]),t._v(" "),a("li",[t._v("4: TS_2DIFF")]),t._v(" "),a("li",[t._v("5: BITMAP")]),t._v(" "),a("li",[t._v("6: GORILLA_V1")]),t._v(" "),a("li",[t._v("7: REGULAR")]),t._v(" "),a("li",[t._v("8: GORILLA")])])]),t._v(" "),a("li",[a("strong",[t._v("压缩类型")]),t._v(" "),a("ul",[a("li",[t._v("0: UNCOMPRESSED")]),t._v(" "),a("li",[t._v("1: SNAPPY")]),t._v(" "),a("li",[t._v("7: LZ4")])])]),t._v(" "),a("li",[a("strong",[t._v("预聚合信息")]),t._v(" "),a("ul",[a("li",[t._v("0: min_value")]),t._v(" "),a("li",[t._v("1: max_value")]),t._v(" "),a("li",[t._v("2: first_value")]),t._v(" "),a("li",[t._v("3: last_value")]),t._v(" "),a("li",[t._v("4: sum_value")])])])]),t._v(" "),a("h3",{attrs:{id:"_1-2-tsfile-概述"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-2-tsfile-概述"}},[t._v("#")]),t._v(" 1.2 TsFile 概述")]),t._v(" "),a("p",[t._v("TsFile 整体分为两大部分:"),a("strong",[t._v("数据区")]),t._v("和"),a("strong",[t._v("索引区")]),t._v("。")]),t._v(" "),a("p",[a("strong",[t._v("数据区")]),t._v("所包含的概念由小到大有如下三个:")]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("Page数据页")]),t._v(":一段时间序列,是数据块被反序列化的最小单元;")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("Chunk数据块")]),t._v(":包含一条时间序列的多个 Page ,是数据块被IO读取的最小单元;")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("ChunkGroup数据块组")]),t._v(":包含一个实体的多个 Chunk。")])])]),t._v(" "),a("p",[a("strong",[t._v("索引区")]),t._v("分为三部分:")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("按时间序列组织的 "),a("strong",[t._v("TimeseriesIndex")]),t._v(",包含1个头信息和数据块索引(ChunkIndex)列表。头信息记录文件内某条时间序列的数据类型、统计信息(最大最小时间戳等);数据块索引列表记录该序列各Chunk在文件中的 offset,并记录相关统计信息(最大最小时间戳等);")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("IndexOfTimeseriesIndex")]),t._v(",用于索引各TimeseriesIndex在文件中的 offset;")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("BloomFilter")]),t._v(",针对实体(Entity)的布隆过滤器。")])])]),t._v(" "),a("blockquote",[a("p",[t._v("注:ChunkIndex 旧称 ChunkMetadata;TimeseriesIndex 旧称 TimeseriesMetadata;IndexOfTimeseriesIndex 旧称 TsFileMetadata。v0.13版本起,根据其索引区的特性和实际所索引的内容重新命名。")])]),t._v(" "),a("p",[t._v("下图是关于 TsFile 的结构图。")]),t._v(" "),a("img",{staticStyle:{width:"100%","max-width":"800px","max-height":"600px","margin-left":"auto","margin-right":"auto",display:"block"},attrs:{src:"https://user-images.githubusercontent.com/19167280/123542462-6710c180-d77c-11eb-9afb-a1b495c82ea9.png"}}),t._v(" "),a("p",[t._v("此文件包括两个实体 d1、d2,每个实体分别包含三个物理量 s1、s2、s3,共 6 个时间序列。每个时间序列包含两个 Chunk。")]),t._v(" "),a("p",[t._v("TsFile 的查询流程,以查 d1.s1 为例:")]),t._v(" "),a("ul",[a("li",[t._v("反序列化 IndexOfTimeseriesIndex,得到 d1.s1 的 TimeseriesIndex 的位置")]),t._v(" "),a("li",[t._v("反序列化得到 d1.s1 的 TimeseriesIndex")]),t._v(" "),a("li",[t._v("根据 d1.s1 的 TimeseriesIndex,反序列化其所有 ChunkIndex")]),t._v(" "),a("li",[t._v("根据 d1.s1 的每一个 ChunkIndex,读取其 Chunk 数据")])]),t._v(" "),a("h4",{attrs:{id:"_1-2-1-文件签名和版本号"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-2-1-文件签名和版本号"}},[t._v("#")]),t._v(" 1.2.1 文件签名和版本号")]),t._v(" "),a("p",[t._v('TsFile文件头由 6 个字节的 "Magic String" ('),a("code",[t._v("TsFile")]),t._v(") 和 6 个字节的版本号 ("),a("code",[t._v("000002")]),t._v(")组成。")]),t._v(" "),a("h4",{attrs:{id:"_1-2-2-数据区"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-2-2-数据区"}},[t._v("#")]),t._v(" 1.2.2 数据区")]),t._v(" "),a("h5",{attrs:{id:"chunkgroup-数据块组"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#chunkgroup-数据块组"}},[t._v("#")]),t._v(" ChunkGroup 数据块组")]),t._v(" "),a("p",[a("code",[t._v("ChunkGroup")]),t._v(" 存储了一个实体(Entity) 一段时间的数据。由若干个 "),a("code",[t._v("Chunk")]),t._v(", 一个字节的分隔符 "),a("code",[t._v("0x00")]),t._v(" 和 一个"),a("code",[t._v("ChunkFooter")]),t._v("组成。")]),t._v(" "),a("h5",{attrs:{id:"chunk-数据块"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#chunk-数据块"}},[t._v("#")]),t._v(" Chunk 数据块")]),t._v(" "),a("p",[t._v("一个 "),a("code",[t._v("Chunk")]),t._v(" 存储了一个物理量(Measurement) 一段时间的数据,Chunk 内数据是按时间递增序存储的。"),a("code",[t._v("Chunk")]),t._v(" 是由一个字节的分隔符 "),a("code",[t._v("0x01")]),t._v(", 一个 "),a("code",[t._v("ChunkHeader")]),t._v(" 和若干个 "),a("code",[t._v("Page")]),t._v(" 构成。")]),t._v(" "),a("h5",{attrs:{id:"chunkheader-数据块头"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#chunkheader-数据块头"}},[t._v("#")]),t._v(" ChunkHeader 数据块头")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"center"}},[t._v("成员")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("类型")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("解释")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("measurementID")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("String")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("传感器名称")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("dataSize")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("int")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("chunk 大小")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("dataType")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("TSDataType")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("chunk的数据类型")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("compressionType")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("CompressionType")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("压缩类型")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("encodingType")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("TSEncoding")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("编码类型")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("numOfPages")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("int")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("包含的page数量")])])])]),t._v(" "),a("h5",{attrs:{id:"page-数据页"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#page-数据页"}},[t._v("#")]),t._v(" Page 数据页")]),t._v(" "),a("p",[t._v("一个 "),a("code",[t._v("Page")]),t._v(" 页存储了一段时间序列,是数据块被反序列化的最小单元。 它包含一个 "),a("code",[t._v("PageHeader")]),t._v(" 和实际的数据(time-value 编码的键值对)。")]),t._v(" "),a("p",[t._v("PageHeader 结构:")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"center"}},[t._v("成员")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("类型")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("解释")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("uncompressedSize")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("int")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("压缩前数据大小")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("compressedSize")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("int")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("SNAPPY压缩后数据大小")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("statistics")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("Statistics")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("统计量")])])])]),t._v(" "),a("p",[t._v("这里是"),a("code",[t._v("statistics")]),t._v("的详细信息:")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"center"}},[t._v("成员")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("描述")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("DoubleStatistics")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("FloatStatistics")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("IntegerStatistics")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("LongStatistics")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("BinaryStatistics")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("BooleanStatistics")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("count")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("数据点个数")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("startTime")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("开始时间")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("endTime")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("结束时间")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("minValue")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("最小值")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("double")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("float")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("int")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("maxValue")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("最大值")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("double")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("float")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("int")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("firstValue")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("第一个值")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("double")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("float")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("int")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("Binary")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("boolean")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("lastValue")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("最后一个值")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("double")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("float")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("int")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("Binary")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("boolean")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("sumValue")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("和")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("double")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("double")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("double")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("double")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("extreme")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("极值")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("double")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("float")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("int")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")])])])]),t._v(" "),a("h5",{attrs:{id:"chunkgroupfooter-数据块组结尾"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#chunkgroupfooter-数据块组结尾"}},[t._v("#")]),t._v(" ChunkGroupFooter 数据块组结尾")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"center"}},[t._v("成员")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("类型")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("解释")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("entityID")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("String")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("实体名称")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("dataSize")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("ChunkGroup 大小")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("numberOfChunks")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("int")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("包含的 chunks 的数量")])])])]),t._v(" "),a("h4",{attrs:{id:"_1-2-3-索引区"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-2-3-索引区"}},[t._v("#")]),t._v(" 1.2.3 索引区")]),t._v(" "),a("h5",{attrs:{id:"_1-2-3-1-chunkindex-数据块索引"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-2-3-1-chunkindex-数据块索引"}},[t._v("#")]),t._v(" 1.2.3.1 ChunkIndex 数据块索引")]),t._v(" "),a("p",[t._v("第一部分的索引是 "),a("code",[t._v("ChunkIndex")]),t._v(" :")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"center"}},[t._v("成员")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("类型")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("解释")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("measurementUid")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("String")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("传感器名称")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("offsetOfChunkHeader")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("文件中 ChunkHeader 开始的偏移量")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("tsDataType")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("TSDataType")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("数据类型")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("statistics")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("Statistics")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("统计量")])])])]),t._v(" "),a("h5",{attrs:{id:"_1-2-3-2-timeseriesindex-时间序列索引"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-2-3-2-timeseriesindex-时间序列索引"}},[t._v("#")]),t._v(" 1.2.3.2 TimeseriesIndex 时间序列索引")]),t._v(" "),a("p",[t._v("第二部分的索引是 "),a("code",[t._v("TimeseriesIndex")]),t._v(":")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"center"}},[t._v("成员")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("类型")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("解释")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("measurementUid")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("String")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("物理量名称")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("tsDataType")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("TSDataType")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("数据类型")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("startOffsetOfChunkIndexList")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("文件中 ChunkIndex 列表开始的偏移量")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("ChunkIndexListDataSize")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("int")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("ChunkIndex 列表的大小")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("statistics")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("Statistics")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("统计量")])])])]),t._v(" "),a("h5",{attrs:{id:"_1-2-3-3-indexoftimeseriesindex-时间序列索引的索引-二级索引"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-2-3-3-indexoftimeseriesindex-时间序列索引的索引-二级索引"}},[t._v("#")]),t._v(" 1.2.3.3 IndexOfTimeseriesIndex 时间序列索引的索引(二级索引)")]),t._v(" "),a("p",[t._v("第三部分的索引是 "),a("code",[t._v("IndexOfTimeseriesIndex")]),t._v(":")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"center"}},[t._v("成员")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("类型")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("解释")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("IndexTree")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("IndexNode")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("索引节点")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("offsetOfIndexArea")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("索引区的偏移量")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("bloomFilter")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("BloomFilter")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("布隆过滤器")])])])]),t._v(" "),a("p",[t._v("索引节点 (IndexNode) 的成员和类型具体如下:")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"center"}},[t._v("成员")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("类型")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("解释")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("children")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("List"),a("IndexEntry")],1),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("节点索引项列表")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("endOffset")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("此索引节点的结束偏移量")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("nodeType")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("IndexNodeType")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("节点类型")])])])]),t._v(" "),a("p",[t._v("索引项 (MetadataIndexEntry) 的成员和类型具体如下:")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"center"}},[t._v("成员")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("类型")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("解释")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("name")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("String")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("对应实体或物理量的名字")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("offset")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("偏移量")])])])]),t._v(" "),a("p",[t._v("所有的索引节点构成一棵类B+树结构的"),a("strong",[t._v("索引树(二级索引)")]),t._v(",这棵树由两部分组成:实体索引部分和物理量索引部分。索引节点类型有四种,分别是"),a("code",[t._v("INTERNAL_ENTITY")]),t._v("、"),a("code",[t._v("LEAF_ENTITY")]),t._v("、"),a("code",[t._v("INTERNAL_MEASUREMENT")]),t._v("、"),a("code",[t._v("LEAF_MEASUREMENT")]),t._v(",分别对应实体索引部分的中间节点和叶子节点,和物理量索引部分的中间节点和叶子节点。 只有物理量索引部分的叶子节点("),a("code",[t._v("LEAF_MEASUREMENT")]),t._v(") 指向 "),a("code",[t._v("TimeseriesIndex")]),t._v("。")]),t._v(" "),a("p",[t._v("下面,我们使用四个例子来加以详细说明。")]),t._v(" "),a("p",[t._v("索引树节点的度(即每个节点的最大子节点个数)可以由用户进行配置,配置项为"),a("code",[t._v("max_degree_of_index_node")]),t._v(",其默认值为256。在以下例子中,我们假定 "),a("code",[t._v("max_degree_of_index_node = 10")]),t._v("。")]),t._v(" "),a("ul",[a("li",[t._v("例1:5个实体,每个实体有5个物理量")])]),t._v(" "),a("img",{staticStyle:{width:"100%","max-width":"800px","max-height":"600px","margin-left":"auto","margin-right":"auto",display:"block"},attrs:{src:"https://user-images.githubusercontent.com/19167280/122677230-134e2780-d214-11eb-9603-ac7b95bc0668.png"}}),t._v(" "),a("p",[t._v("在5个实体,每个实体有5个物理量的情况下,由于实体数和物理量数均不超过 "),a("code",[t._v("max_degree_of_index_node")]),t._v(",因此索引树只有默认的物理量部分。在这部分中,每个 IndexNode 最多由10个 IndexEntry 组成。根节点的 IndexNode 是 "),a("code",[t._v("INTERNAL_MEASUREMENT")]),t._v(" 类型,其中的5个 IndexEntry 指向对应的实体的 IndexNode,这些节点直接指向 "),a("code",[t._v("TimeseriesIndex")]),t._v(",是 "),a("code",[t._v("LEAF_MEASUREMENT")]),t._v("。")]),t._v(" "),a("ul",[a("li",[t._v("例2:1个实体,150个物理量")])]),t._v(" "),a("img",{staticStyle:{width:"100%","max-width":"800px","max-height":"600px","margin-left":"auto","margin-right":"auto",display:"block"},attrs:{src:"https://user-images.githubusercontent.com/19167280/122677233-15b08180-d214-11eb-8d09-c741cca59262.png"}}),t._v(" "),a("p",[t._v("在1个实体,实体中有150个物理量的情况下,物理量个数超过了 "),a("code",[t._v("max_degree_of_index_node")]),t._v(",索引树有默认的物理量层级。在这个层级里,每个 IndexNode 最多由10个 IndexEntry 组成。直接指向 "),a("code",[t._v("TimeseriesIndex")]),t._v("的节点类型均为 "),a("code",[t._v("LEAF_MEASUREMENT")]),t._v(";而后续产生的中间节点和根节点不是物理量索引层级的叶子节点,这些节点是 "),a("code",[t._v("INTERNAL_MEASUREMENT")]),t._v("。")]),t._v(" "),a("ul",[a("li",[t._v("例3:150个实体,每个实体有1个物理量")])]),t._v(" "),a("img",{staticStyle:{width:"100%","max-width":"800px","max-height":"600px","margin-left":"auto","margin-right":"auto",display:"block"},attrs:{src:"https://user-images.githubusercontent.com/19167280/122771008-9a64d380-d2d8-11eb-9044-5ac794dd38f7.png"}}),t._v(" "),a("p",[t._v("在150个实体,每个实体中有1个物理量的情况下,实体个数超过了 "),a("code",[t._v("max_degree_of_index_node")]),t._v(",形成索引树的物理量层级和实体索引层级。在这两个层级里,每个 IndexNode 最多由10个 IndexEntry 组成。直接指向 "),a("code",[t._v("TimeseriesIndex")]),t._v(" 的节点类型为 "),a("code",[t._v("LEAF_MEASUREMENT")]),t._v(",物理量索引层级的根节点同时作为实体索引层级的叶子节点,其节点类型为 "),a("code",[t._v("LEAF_ENTITY")]),t._v(";而后续产生的中间节点和根节点不是实体索引层级的叶子节点,因此节点类型为 "),a("code",[t._v("INTERNAL_ENTITY")]),t._v("。")]),t._v(" "),a("ul",[a("li",[t._v("例4:150个实体,每个实体有150个物理量")])]),t._v(" "),a("img",{staticStyle:{width:"100%","max-width":"800px","max-height":"600px","margin-left":"auto","margin-right":"auto",display:"block"},attrs:{src:"https://user-images.githubusercontent.com/19167280/122677241-1a753580-d214-11eb-817f-17bcf797251f.png"}}),t._v(" "),a("p",[t._v("在150个实体,每个实体中有150个物理量的情况下,物理量和实体个数均超过了 "),a("code",[t._v("max_degree_of_index_node")]),t._v(",形成索引树的物理量层级和实体索引层级。在这两个层级里,每个 IndexNode 均最多由10个 IndexEntry 组成。如前所述,从根节点到实体索引层级的叶子节点,类型分别为"),a("code",[t._v("INTERNAL_ENTITY")]),t._v(" 和 "),a("code",[t._v("LEAF_ENTITY")]),t._v(",而每个实体索引层级的叶子节点都是物理量索引层级的根节点,从这里到物理量索引层级的叶子节点,类型分别为"),a("code",[t._v("INTERNAL_MEASUREMENT")]),t._v(" 和 "),a("code",[t._v("LEAF_MEASUREMENT")]),t._v("。")]),t._v(" "),a("p",[t._v("索引采用树形结构进行设计的目的是在实体数或者物理量数量过大时,可以不用一次读取所有的 "),a("code",[t._v("TimeseriesIndex")]),t._v(",只需要根据所读取的物理量定位对应的节点,从而减少 I/O,加快查询速度。有关 TsFile 的读流程将在本章最后一节加以详细说明。")]),t._v(" "),a("h4",{attrs:{id:"_1-2-4-magic-string"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-2-4-magic-string"}},[t._v("#")]),t._v(" 1.2.4 Magic String")]),t._v(" "),a("p",[t._v("TsFile 是以6个字节的magic string ("),a("code",[t._v("TsFile")]),t._v(") 作为结束。")]),t._v(" "),a("p",[t._v("恭喜您, 至此您已经完成了 TsFile 的探秘之旅,祝您玩儿的开心!")]),t._v(" "),a("h3",{attrs:{id:"_1-3-tsfile工具集"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-3-tsfile工具集"}},[t._v("#")]),t._v(" 1.3 TsFile工具集")]),t._v(" "),a("h4",{attrs:{id:"_1-3-1-iotdb-data-directory-快速概览工具"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-3-1-iotdb-data-directory-快速概览工具"}},[t._v("#")]),t._v(" 1.3.1 IoTDB Data Directory 快速概览工具")]),t._v(" "),a("p",[t._v("该工具的启动脚本会在编译 server 之后生成至 "),a("code",[t._v("server\\target\\iotdb-server-0.13.0-SNAPSHOT\\tools\\tsfileToolSet")]),t._v(" 目录中。")]),t._v(" "),a("p",[t._v("使用方式:")]),t._v(" "),a("p",[t._v("For Windows:")]),t._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v(".\\print-iotdb-data-dir.bat <IoTDB数据文件夹路径,如果是多个文件夹用逗号分隔> (<输出结果的存储路径>) \n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("For Linux or MacOs:")]),t._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("./print-iotdb-data-dir.sh <IoTDB数据文件夹路径,如果是多个文件夹用逗号分隔> (<输出结果的存储路径>) \n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("在Windows系统中的示例:")]),t._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("D:\\iotdb\\server\\target\\iotdb-server-0.13.0-SNAPSHOT\\tools\\tsfileToolSet>.\\print-iotdb-data-dir.bat D:\\\\data\\data\n|````````````````````````\nStarting Printing the IoTDB Data Directory Overview\n​|````````````````````````\noutput save path:IoTDB_data_dir_overview.txt\nTsFile data dir num:1\n21:17:38.841 [main] WARN org.apache.iotdb.tsfile.common.conf.TSFileDescriptor - Failed to find config file iotdb-engine.properties at classpath, use default configuration\n|==============================================================\n|D:\\\\data\\data\n|--sequence\n| |--root.ln.wf01.wt01\n| | |--1575813520203-101-0.tsfile\n| | |--1575813520203-101-0.tsfile.resource\n| | | |--device root.ln.wf01.wt01, start time 1 (1970-01-01T08:00:00.001+08:00[GMT+08:00]), end time 5 (1970-01-01T08:00:00.005+08:00[GMT+08:00])\n| | |--1575813520669-103-0.tsfile\n| | |--1575813520669-103-0.tsfile.resource\n| | | |--device root.ln.wf01.wt01, start time 100 (1970-01-01T08:00:00.100+08:00[GMT+08:00]), end time 300 (1970-01-01T08:00:00.300+08:00[GMT+08:00])\n| | |--1575813521372-107-0.tsfile\n| | |--1575813521372-107-0.tsfile.resource\n| | | |--device root.ln.wf01.wt01, start time 500 (1970-01-01T08:00:00.500+08:00[GMT+08:00]), end time 540 (1970-01-01T08:00:00.540+08:00[GMT+08:00])\n|--unsequence\n| |--root.ln.wf01.wt01\n| | |--1575813521063-105-0.tsfile\n| | |--1575813521063-105-0.tsfile.resource\n| | | |--device root.ln.wf01.wt01, start time 10 (1970-01-01T08:00:00.010+08:00[GMT+08:00]), end time 50 (1970-01-01T08:00:00.050+08:00[GMT+08:00])\n|==============================================================\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br")])]),a("h4",{attrs:{id:"_1-3-2-tsfileresource-打印工具"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-3-2-tsfileresource-打印工具"}},[t._v("#")]),t._v(" 1.3.2 TsFileResource 打印工具")]),t._v(" "),a("p",[t._v("该工具的启动脚本会在编译 server 之后生成至 "),a("code",[t._v("server\\target\\iotdb-server-0.13.0-SNAPSHOT\\tools\\tsfileToolSet")]),t._v(" 目录中。")]),t._v(" "),a("p",[t._v("使用方式:")]),t._v(" "),a("p",[t._v("Windows:")]),t._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v(".\\print-tsfile-resource-files.bat <TsFileResource文件夹路径>\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("Linux or MacOs:")]),t._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("./print-tsfile-resource-files.sh <TsFileResource文件夹路径>\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("在Windows系统中的示例:")]),t._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("D:\\iotdb\\server\\target\\iotdb-server-0.13.0-SNAPSHOT\\tools\\tsfileToolSet>.\\print-tsfile-resource-files.bat D:\\data\\data\\sequence\\root.vehicle\n|````````````````````````\nStarting Printing the TsFileResources\n​|````````````````````````\n12:31:59.861 [main] WARN org.apache.iotdb.db.conf.IoTDBDescriptor - Cannot find IOTDB_HOME or IOTDB_CONF environment variable when loading config file iotdb-engine.properties, use default configuration\nanalyzing D:\\data\\data\\sequence\\root.vehicle\\1572496142067-101-0.tsfile ...\ndevice root.vehicle.d0, start time 3000 (1970-01-01T08:00:03+08:00[GMT+08:00]), end time 100999 (1970-01-01T08:01:40.999+08:00[GMT+08:00])\nanalyzing the resource file finished.\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])]),a("h4",{attrs:{id:"_1-3-3-tsfile-描述工具"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-3-3-tsfile-描述工具"}},[t._v("#")]),t._v(" 1.3.3 TsFile 描述工具")]),t._v(" "),a("p",[t._v("该工具的启动脚本会在编译 server 之后生成至 "),a("code",[t._v("server\\target\\iotdb-server-0.13.0-SNAPSHOT\\tools\\tsfileToolSet")]),t._v(" 目录中。")]),t._v(" "),a("p",[t._v("使用方式:")]),t._v(" "),a("p",[t._v("Windows:")]),t._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v(".\\print-tsfile-sketch.bat <TsFile文件路径> (<输出结果的存储路径>) \n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("ul",[a("li",[t._v('注意: 如果没有设置输出文件的存储路径, 将使用 "TsFile_sketch_view.txt" 做为默认值。')])]),t._v(" "),a("p",[t._v("Linux or MacOs:")]),t._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("./print-tsfile-sketch.sh <TsFile文件路径> (<输出结果的存储路径>) \n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("ul",[a("li",[t._v('注意: 如果没有设置输出文件的存储路径, 将使用 "TsFile_sketch_view.txt" 做为默认值。')])]),t._v(" "),a("p",[t._v("在mac系统中的示例:")]),t._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("/iotdb/server/target/iotdb-server-0.13.0-SNAPSHOT/tools/tsfileToolSet$ ./print-tsfile-sketch.sh test.tsfile\n|````````````````````````\nStarting Printing the TsFile Sketch\n|​````````````````````````\nTsFile path:test.tsfile\nSketch save path:TsFile_sketch_view.txt\n-------------------------------- TsFile Sketch --------------------------------\nfile path: test.tsfile\nfile length: 33436\n\n POSITION| CONTENT\n -------- -------\n 0| [magic head] TsFile\n 6| [version number] 000002\n||||||||||||||||||||| [Chunk Group] of root.group_12.d2, num of Chunks:3\n 12| [Chunk] of s_INT64e_RLE, numOfPoints:10000, time range:[1,10000], tsDataType:INT64, \n startTime: 1 endTime: 10000 count: 10000 [minValue:1,maxValue:1,firstValue:1,lastValue:1,sumValue:10000.0]\n | [marker] 1\n | [ChunkHeader]\n | 2 pages\n 677| [Chunk] of s_INT64e_TS_2DIFF, numOfPoints:10000, time range:[1,10000], tsDataType:INT64, \n startTime: 1 endTime: 10000 count: 10000 [minValue:1,maxValue:1,firstValue:1,lastValue:1,sumValue:10000.0]\n | [marker] 1\n | [ChunkHeader]\n | 1 pages\n 1349| [Chunk] of s_INT64e_PLAIN, numOfPoints:10000, time range:[1,10000], tsDataType:INT64, \n startTime: 1 endTime: 10000 count: 10000 [minValue:1,maxValue:1,firstValue:1,lastValue:1,sumValue:10000.0]\n | [marker] 1\n | [ChunkHeader]\n | 2 pages\n 5766| [Chunk Group Footer]\n | [marker] 0\n | [deviceID] root.group_12.d2\n | [dataSize] 5754\n | [num of chunks] 3\n||||||||||||||||||||| [Chunk Group] of root.group_12.d2 ends\n 5799| [Version Info]\n | [marker] 3\n | [version] 102\n||||||||||||||||||||| [Chunk Group] of root.group_12.d1, num of Chunks:3\n 5808| [Chunk] of s_INT32e_PLAIN, numOfPoints:10000, time range:[1,10000], tsDataType:INT32, \n startTime: 1 endTime: 10000 count: 10000 [minValue:1,maxValue:1,firstValue:1,lastValue:1,sumValue:10000.0]\n | [marker] 1\n | [ChunkHeader]\n | 1 pages\n 8231| [Chunk] of s_INT32e_TS_2DIFF, numOfPoints:10000, time range:[1,10000], tsDataType:INT32, \n startTime: 1 endTime: 10000 count: 10000 [minValue:1,maxValue:1,firstValue:1,lastValue:1,sumValue:10000.0]\n | [marker] 1\n | [ChunkHeader]\n | 1 pages\n 8852| [Chunk] of s_INT32e_RLE, numOfPoints:10000, time range:[1,10000], tsDataType:INT32, \n startTime: 1 endTime: 10000 count: 10000 [minValue:1,maxValue:1,firstValue:1,lastValue:1,sumValue:10000.0]\n | [marker] 1\n | [ChunkHeader]\n | 1 pages\n 9399| [Chunk Group Footer]\n | [marker] 0\n | [deviceID] root.group_12.d1\n | [dataSize] 3591\n | [num of chunks] 3\n||||||||||||||||||||| [Chunk Group] of root.group_12.d1 ends\n 9432| [Version Info]\n | [marker] 3\n | [version] 102\n||||||||||||||||||||| [Chunk Group] of root.group_12.d0, num of Chunks:2\n 9441| [Chunk] of s_BOOLEANe_RLE, numOfPoints:10000, time range:[1,10000], tsDataType:BOOLEAN, \n startTime: 1 endTime: 10000 count: 10000 [firstValue:true,lastValue:true]\n | [marker] 1\n | [ChunkHeader]\n | 1 pages\n 9968| [Chunk] of s_BOOLEANe_PLAIN, numOfPoints:10000, time range:[1,10000], tsDataType:BOOLEAN, \n startTime: 1 endTime: 10000 count: 10000 [firstValue:true,lastValue:true]\n | [marker] 1\n | [ChunkHeader]\n | 1 pages\n 10961| [Chunk Group Footer]\n | [marker] 0\n | [deviceID] root.group_12.d0\n | [dataSize] 1520\n | [num of chunks] 2\n||||||||||||||||||||| [Chunk Group] of root.group_12.d0 ends\n 10994| [Version Info]\n | [marker] 3\n | [version] 102\n||||||||||||||||||||| [Chunk Group] of root.group_12.d5, num of Chunks:1\n 11003| [Chunk] of s_TEXTe_PLAIN, numOfPoints:10000, time range:[1,10000], tsDataType:TEXT, \n startTime: 1 endTime: 10000 count: 10000 [firstValue:version_test,lastValue:version_test]\n | [marker] 1\n | [ChunkHeader]\n | 3 pages\n 19278| [Chunk Group Footer]\n | [marker] 0\n | [deviceID] root.group_12.d5\n | [dataSize] 8275\n | [num of chunks] 1\n||||||||||||||||||||| [Chunk Group] of root.group_12.d5 ends\n 19311| [Version Info]\n | [marker] 3\n | [version] 102\n||||||||||||||||||||| [Chunk Group] of root.group_12.d4, num of Chunks:4\n 19320| [Chunk] of s_DOUBLEe_PLAIN, numOfPoints:10000, time range:[1,10000], tsDataType:DOUBLE, \n startTime: 1 endTime: 10000 count: 10000 [minValue:1.1,maxValue:1.1,firstValue:1.1,lastValue:1.1,sumValue:11000.00000000123]\n | [marker] 1\n | [ChunkHeader]\n | 2 pages\n 23740| [Chunk] of s_DOUBLEe_TS_2DIFF, numOfPoints:10000, time range:[1,10000], tsDataType:DOUBLE, \n startTime: 1 endTime: 10000 count: 10000 [minValue:1.1,maxValue:1.1,firstValue:1.1,lastValue:1.1,sumValue:11000.000000002045]\n | [marker] 1\n | [ChunkHeader]\n | 1 pages\n 24414| [Chunk] of s_DOUBLEe_GORILLA, numOfPoints:10000, time range:[1,10000], tsDataType:DOUBLE, \n startTime: 1 endTime: 10000 count: 10000 [minValue:1.1,maxValue:1.1,firstValue:1.1,lastValue:1.1,sumValue:11000.000000002045]\n | [marker] 1\n | [ChunkHeader]\n | 1 pages\n 25054| [Chunk] of s_DOUBLEe_RLE, numOfPoints:10000, time range:[1,10000], tsDataType:DOUBLE, \n startTime: 1 endTime: 10000 count: 10000 [minValue:1.1,maxValue:1.1,firstValue:1.1,lastValue:1.1,sumValue:11000.000000001224]\n | [marker] 1\n | [ChunkHeader]\n | 2 pages\n 25717| [Chunk Group Footer]\n | [marker] 0\n | [deviceID] root.group_12.d4\n | [dataSize] 6397\n | [num of chunks] 4\n||||||||||||||||||||| [Chunk Group] of root.group_12.d4 ends\n 25750| [Version Info]\n | [marker] 3\n | [version] 102\n||||||||||||||||||||| [Chunk Group] of root.group_12.d3, num of Chunks:4\n 25759| [Chunk] of s_FLOATe_GORILLA, numOfPoints:10000, time range:[1,10000], tsDataType:FLOAT, \n startTime: 1 endTime: 10000 count: 10000 [minValue:1.1,maxValue:1.1,firstValue:1.1,lastValue:1.1,sumValue:11000.00023841858]\n | [marker] 1\n | [ChunkHeader]\n | 1 pages\n 26375| [Chunk] of s_FLOATe_PLAIN, numOfPoints:10000, time range:[1,10000], tsDataType:FLOAT, \n startTime: 1 endTime: 10000 count: 10000 [minValue:1.1,maxValue:1.1,firstValue:1.1,lastValue:1.1,sumValue:11000.00023841858]\n | [marker] 1\n | [ChunkHeader]\n | 1 pages\n 28796| [Chunk] of s_FLOATe_RLE, numOfPoints:10000, time range:[1,10000], tsDataType:FLOAT, \n startTime: 1 endTime: 10000 count: 10000 [minValue:1.1,maxValue:1.1,firstValue:1.1,lastValue:1.1,sumValue:11000.00023841858]\n | [marker] 1\n | [ChunkHeader]\n | 1 pages\n 29343| [Chunk] of s_FLOATe_TS_2DIFF, numOfPoints:10000, time range:[1,10000], tsDataType:FLOAT, \n startTime: 1 endTime: 10000 count: 10000 [minValue:1.1,maxValue:1.1,firstValue:1.1,lastValue:1.1,sumValue:11000.00023841858]\n | [marker] 1\n | [ChunkHeader]\n | 1 pages\n 29967| [Chunk Group Footer]\n | [marker] 0\n | [deviceID] root.group_12.d3\n | [dataSize] 4208\n | [num of chunks] 4\n||||||||||||||||||||| [Chunk Group] of root.group_12.d3 ends\n 30000| [Version Info]\n | [marker] 3\n | [version] 102\n 30009| [marker] 2\n 30010| [ChunkMetadataList] of root.group_12.d0.s_BOOLEANe_PLAIN, tsDataType:BOOLEAN\n | [startTime: 1 endTime: 10000 count: 10000 [firstValue:true,lastValue:true]] \n 30066| [ChunkMetadataList] of root.group_12.d0.s_BOOLEANe_RLE, tsDataType:BOOLEAN\n | [startTime: 1 endTime: 10000 count: 10000 [firstValue:true,lastValue:true]] \n 30120| [ChunkMetadataList] of root.group_12.d1.s_INT32e_PLAIN, tsDataType:INT32\n | [startTime: 1 endTime: 10000 count: 10000 [minValue:1,maxValue:1,firstValue:1,lastValue:1,sumValue:10000.0]] \n 30196| [ChunkMetadataList] of root.group_12.d1.s_INT32e_RLE, tsDataType:INT32\n | [startTime: 1 endTime: 10000 count: 10000 [minValue:1,maxValue:1,firstValue:1,lastValue:1,sumValue:10000.0]] \n 30270| [ChunkMetadataList] of root.group_12.d1.s_INT32e_TS_2DIFF, tsDataType:INT32\n | [startTime: 1 endTime: 10000 count: 10000 [minValue:1,maxValue:1,firstValue:1,lastValue:1,sumValue:10000.0]] \n 30349| [ChunkMetadataList] of root.group_12.d2.s_INT64e_PLAIN, tsDataType:INT64\n | [startTime: 1 endTime: 10000 count: 10000 [minValue:1,maxValue:1,firstValue:1,lastValue:1,sumValue:10000.0]] \n 30441| [ChunkMetadataList] of root.group_12.d2.s_INT64e_RLE, tsDataType:INT64\n | [startTime: 1 endTime: 10000 count: 10000 [minValue:1,maxValue:1,firstValue:1,lastValue:1,sumValue:10000.0]] \n 30531| [ChunkMetadataList] of root.group_12.d2.s_INT64e_TS_2DIFF, tsDataType:INT64\n | [startTime: 1 endTime: 10000 count: 10000 [minValue:1,maxValue:1,firstValue:1,lastValue:1,sumValue:10000.0]] \n 30626| [ChunkMetadataList] of root.group_12.d3.s_FLOATe_GORILLA, tsDataType:FLOAT\n | [startTime: 1 endTime: 10000 count: 10000 [minValue:1.1,maxValue:1.1,firstValue:1.1,lastValue:1.1,sumValue:11000.00023841858]] \n 30704| [ChunkMetadataList] of root.group_12.d3.s_FLOATe_PLAIN, tsDataType:FLOAT\n | [startTime: 1 endTime: 10000 count: 10000 [minValue:1.1,maxValue:1.1,firstValue:1.1,lastValue:1.1,sumValue:11000.00023841858]] \n 30780| [ChunkMetadataList] of root.group_12.d3.s_FLOATe_RLE, tsDataType:FLOAT\n | [startTime: 1 endTime: 10000 count: 10000 [minValue:1.1,maxValue:1.1,firstValue:1.1,lastValue:1.1,sumValue:11000.00023841858]] \n 30854| [ChunkMetadataList] of root.group_12.d3.s_FLOATe_TS_2DIFF, tsDataType:FLOAT\n | [startTime: 1 endTime: 10000 count: 10000 [minValue:1.1,maxValue:1.1,firstValue:1.1,lastValue:1.1,sumValue:11000.00023841858]] \n 30933| [ChunkMetadataList] of root.group_12.d4.s_DOUBLEe_GORILLA, tsDataType:DOUBLE\n | [startTime: 1 endTime: 10000 count: 10000 [minValue:1.1,maxValue:1.1,firstValue:1.1,lastValue:1.1,sumValue:11000.000000002045]] \n 31028| [ChunkMetadataList] of root.group_12.d4.s_DOUBLEe_PLAIN, tsDataType:DOUBLE\n | [startTime: 1 endTime: 10000 count: 10000 [minValue:1.1,maxValue:1.1,firstValue:1.1,lastValue:1.1,sumValue:11000.00000000123]] \n 31121| [ChunkMetadataList] of root.group_12.d4.s_DOUBLEe_RLE, tsDataType:DOUBLE\n | [startTime: 1 endTime: 10000 count: 10000 [minValue:1.1,maxValue:1.1,firstValue:1.1,lastValue:1.1,sumValue:11000.000000001224]] \n 31212| [ChunkMetadataList] of root.group_12.d4.s_DOUBLEe_TS_2DIFF, tsDataType:DOUBLE\n | [startTime: 1 endTime: 10000 count: 10000 [minValue:1.1,maxValue:1.1,firstValue:1.1,lastValue:1.1,sumValue:11000.000000002045]] \n 31308| [ChunkMetadataList] of root.group_12.d5.s_TEXTe_PLAIN, tsDataType:TEXT\n | [startTime: 1 endTime: 10000 count: 10000 [firstValue:version_test,lastValue:version_test]] \n 32840| [MetadataIndex] of root.group_12.d0\n 32881| [MetadataIndex] of root.group_12.d1\n 32920| [MetadataIndex] of root.group_12.d2\n 32959| [MetadataIndex] of root.group_12.d3\n 33000| [MetadataIndex] of root.group_12.d4\n 33042| [MetadataIndex] of root.group_12.d5\n 33080| [TsFileMetadata]\n | [num of devices] 6\n | 6 key&TsMetadataIndex\n | [totalChunkNum] 17\n | [invalidChunkNum] 0\n | [bloom filter bit vector byte array length] 32\n | [bloom filter bit vector byte array] \n | [bloom filter number of bits] 256\n | [bloom filter number of hash functions] 5\n 33426| [TsFileMetadataSize] 346\n 33430| [magic tail] TsFile\n 33436| END of TsFile\n\n---------------------------------- TsFile Sketch End ----------------------------------\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br"),a("span",{staticClass:"line-number"},[t._v("53")]),a("br"),a("span",{staticClass:"line-number"},[t._v("54")]),a("br"),a("span",{staticClass:"line-number"},[t._v("55")]),a("br"),a("span",{staticClass:"line-number"},[t._v("56")]),a("br"),a("span",{staticClass:"line-number"},[t._v("57")]),a("br"),a("span",{staticClass:"line-number"},[t._v("58")]),a("br"),a("span",{staticClass:"line-number"},[t._v("59")]),a("br"),a("span",{staticClass:"line-number"},[t._v("60")]),a("br"),a("span",{staticClass:"line-number"},[t._v("61")]),a("br"),a("span",{staticClass:"line-number"},[t._v("62")]),a("br"),a("span",{staticClass:"line-number"},[t._v("63")]),a("br"),a("span",{staticClass:"line-number"},[t._v("64")]),a("br"),a("span",{staticClass:"line-number"},[t._v("65")]),a("br"),a("span",{staticClass:"line-number"},[t._v("66")]),a("br"),a("span",{staticClass:"line-number"},[t._v("67")]),a("br"),a("span",{staticClass:"line-number"},[t._v("68")]),a("br"),a("span",{staticClass:"line-number"},[t._v("69")]),a("br"),a("span",{staticClass:"line-number"},[t._v("70")]),a("br"),a("span",{staticClass:"line-number"},[t._v("71")]),a("br"),a("span",{staticClass:"line-number"},[t._v("72")]),a("br"),a("span",{staticClass:"line-number"},[t._v("73")]),a("br"),a("span",{staticClass:"line-number"},[t._v("74")]),a("br"),a("span",{staticClass:"line-number"},[t._v("75")]),a("br"),a("span",{staticClass:"line-number"},[t._v("76")]),a("br"),a("span",{staticClass:"line-number"},[t._v("77")]),a("br"),a("span",{staticClass:"line-number"},[t._v("78")]),a("br"),a("span",{staticClass:"line-number"},[t._v("79")]),a("br"),a("span",{staticClass:"line-number"},[t._v("80")]),a("br"),a("span",{staticClass:"line-number"},[t._v("81")]),a("br"),a("span",{staticClass:"line-number"},[t._v("82")]),a("br"),a("span",{staticClass:"line-number"},[t._v("83")]),a("br"),a("span",{staticClass:"line-number"},[t._v("84")]),a("br"),a("span",{staticClass:"line-number"},[t._v("85")]),a("br"),a("span",{staticClass:"line-number"},[t._v("86")]),a("br"),a("span",{staticClass:"line-number"},[t._v("87")]),a("br"),a("span",{staticClass:"line-number"},[t._v("88")]),a("br"),a("span",{staticClass:"line-number"},[t._v("89")]),a("br"),a("span",{staticClass:"line-number"},[t._v("90")]),a("br"),a("span",{staticClass:"line-number"},[t._v("91")]),a("br"),a("span",{staticClass:"line-number"},[t._v("92")]),a("br"),a("span",{staticClass:"line-number"},[t._v("93")]),a("br"),a("span",{staticClass:"line-number"},[t._v("94")]),a("br"),a("span",{staticClass:"line-number"},[t._v("95")]),a("br"),a("span",{staticClass:"line-number"},[t._v("96")]),a("br"),a("span",{staticClass:"line-number"},[t._v("97")]),a("br"),a("span",{staticClass:"line-number"},[t._v("98")]),a("br"),a("span",{staticClass:"line-number"},[t._v("99")]),a("br"),a("span",{staticClass:"line-number"},[t._v("100")]),a("br"),a("span",{staticClass:"line-number"},[t._v("101")]),a("br"),a("span",{staticClass:"line-number"},[t._v("102")]),a("br"),a("span",{staticClass:"line-number"},[t._v("103")]),a("br"),a("span",{staticClass:"line-number"},[t._v("104")]),a("br"),a("span",{staticClass:"line-number"},[t._v("105")]),a("br"),a("span",{staticClass:"line-number"},[t._v("106")]),a("br"),a("span",{staticClass:"line-number"},[t._v("107")]),a("br"),a("span",{staticClass:"line-number"},[t._v("108")]),a("br"),a("span",{staticClass:"line-number"},[t._v("109")]),a("br"),a("span",{staticClass:"line-number"},[t._v("110")]),a("br"),a("span",{staticClass:"line-number"},[t._v("111")]),a("br"),a("span",{staticClass:"line-number"},[t._v("112")]),a("br"),a("span",{staticClass:"line-number"},[t._v("113")]),a("br"),a("span",{staticClass:"line-number"},[t._v("114")]),a("br"),a("span",{staticClass:"line-number"},[t._v("115")]),a("br"),a("span",{staticClass:"line-number"},[t._v("116")]),a("br"),a("span",{staticClass:"line-number"},[t._v("117")]),a("br"),a("span",{staticClass:"line-number"},[t._v("118")]),a("br"),a("span",{staticClass:"line-number"},[t._v("119")]),a("br"),a("span",{staticClass:"line-number"},[t._v("120")]),a("br"),a("span",{staticClass:"line-number"},[t._v("121")]),a("br"),a("span",{staticClass:"line-number"},[t._v("122")]),a("br"),a("span",{staticClass:"line-number"},[t._v("123")]),a("br"),a("span",{staticClass:"line-number"},[t._v("124")]),a("br"),a("span",{staticClass:"line-number"},[t._v("125")]),a("br"),a("span",{staticClass:"line-number"},[t._v("126")]),a("br"),a("span",{staticClass:"line-number"},[t._v("127")]),a("br"),a("span",{staticClass:"line-number"},[t._v("128")]),a("br"),a("span",{staticClass:"line-number"},[t._v("129")]),a("br"),a("span",{staticClass:"line-number"},[t._v("130")]),a("br"),a("span",{staticClass:"line-number"},[t._v("131")]),a("br"),a("span",{staticClass:"line-number"},[t._v("132")]),a("br"),a("span",{staticClass:"line-number"},[t._v("133")]),a("br"),a("span",{staticClass:"line-number"},[t._v("134")]),a("br"),a("span",{staticClass:"line-number"},[t._v("135")]),a("br"),a("span",{staticClass:"line-number"},[t._v("136")]),a("br"),a("span",{staticClass:"line-number"},[t._v("137")]),a("br"),a("span",{staticClass:"line-number"},[t._v("138")]),a("br"),a("span",{staticClass:"line-number"},[t._v("139")]),a("br"),a("span",{staticClass:"line-number"},[t._v("140")]),a("br"),a("span",{staticClass:"line-number"},[t._v("141")]),a("br"),a("span",{staticClass:"line-number"},[t._v("142")]),a("br"),a("span",{staticClass:"line-number"},[t._v("143")]),a("br"),a("span",{staticClass:"line-number"},[t._v("144")]),a("br"),a("span",{staticClass:"line-number"},[t._v("145")]),a("br"),a("span",{staticClass:"line-number"},[t._v("146")]),a("br"),a("span",{staticClass:"line-number"},[t._v("147")]),a("br"),a("span",{staticClass:"line-number"},[t._v("148")]),a("br"),a("span",{staticClass:"line-number"},[t._v("149")]),a("br"),a("span",{staticClass:"line-number"},[t._v("150")]),a("br"),a("span",{staticClass:"line-number"},[t._v("151")]),a("br"),a("span",{staticClass:"line-number"},[t._v("152")]),a("br"),a("span",{staticClass:"line-number"},[t._v("153")]),a("br"),a("span",{staticClass:"line-number"},[t._v("154")]),a("br"),a("span",{staticClass:"line-number"},[t._v("155")]),a("br"),a("span",{staticClass:"line-number"},[t._v("156")]),a("br"),a("span",{staticClass:"line-number"},[t._v("157")]),a("br"),a("span",{staticClass:"line-number"},[t._v("158")]),a("br"),a("span",{staticClass:"line-number"},[t._v("159")]),a("br"),a("span",{staticClass:"line-number"},[t._v("160")]),a("br"),a("span",{staticClass:"line-number"},[t._v("161")]),a("br"),a("span",{staticClass:"line-number"},[t._v("162")]),a("br"),a("span",{staticClass:"line-number"},[t._v("163")]),a("br"),a("span",{staticClass:"line-number"},[t._v("164")]),a("br"),a("span",{staticClass:"line-number"},[t._v("165")]),a("br"),a("span",{staticClass:"line-number"},[t._v("166")]),a("br"),a("span",{staticClass:"line-number"},[t._v("167")]),a("br"),a("span",{staticClass:"line-number"},[t._v("168")]),a("br"),a("span",{staticClass:"line-number"},[t._v("169")]),a("br"),a("span",{staticClass:"line-number"},[t._v("170")]),a("br"),a("span",{staticClass:"line-number"},[t._v("171")]),a("br"),a("span",{staticClass:"line-number"},[t._v("172")]),a("br"),a("span",{staticClass:"line-number"},[t._v("173")]),a("br"),a("span",{staticClass:"line-number"},[t._v("174")]),a("br"),a("span",{staticClass:"line-number"},[t._v("175")]),a("br"),a("span",{staticClass:"line-number"},[t._v("176")]),a("br"),a("span",{staticClass:"line-number"},[t._v("177")]),a("br"),a("span",{staticClass:"line-number"},[t._v("178")]),a("br"),a("span",{staticClass:"line-number"},[t._v("179")]),a("br"),a("span",{staticClass:"line-number"},[t._v("180")]),a("br"),a("span",{staticClass:"line-number"},[t._v("181")]),a("br"),a("span",{staticClass:"line-number"},[t._v("182")]),a("br"),a("span",{staticClass:"line-number"},[t._v("183")]),a("br"),a("span",{staticClass:"line-number"},[t._v("184")]),a("br"),a("span",{staticClass:"line-number"},[t._v("185")]),a("br"),a("span",{staticClass:"line-number"},[t._v("186")]),a("br"),a("span",{staticClass:"line-number"},[t._v("187")]),a("br"),a("span",{staticClass:"line-number"},[t._v("188")]),a("br"),a("span",{staticClass:"line-number"},[t._v("189")]),a("br"),a("span",{staticClass:"line-number"},[t._v("190")]),a("br"),a("span",{staticClass:"line-number"},[t._v("191")]),a("br"),a("span",{staticClass:"line-number"},[t._v("192")]),a("br"),a("span",{staticClass:"line-number"},[t._v("193")]),a("br"),a("span",{staticClass:"line-number"},[t._v("194")]),a("br"),a("span",{staticClass:"line-number"},[t._v("195")]),a("br"),a("span",{staticClass:"line-number"},[t._v("196")]),a("br"),a("span",{staticClass:"line-number"},[t._v("197")]),a("br"),a("span",{staticClass:"line-number"},[t._v("198")]),a("br"),a("span",{staticClass:"line-number"},[t._v("199")]),a("br"),a("span",{staticClass:"line-number"},[t._v("200")]),a("br"),a("span",{staticClass:"line-number"},[t._v("201")]),a("br"),a("span",{staticClass:"line-number"},[t._v("202")]),a("br"),a("span",{staticClass:"line-number"},[t._v("203")]),a("br"),a("span",{staticClass:"line-number"},[t._v("204")]),a("br"),a("span",{staticClass:"line-number"},[t._v("205")]),a("br"),a("span",{staticClass:"line-number"},[t._v("206")]),a("br"),a("span",{staticClass:"line-number"},[t._v("207")]),a("br"),a("span",{staticClass:"line-number"},[t._v("208")]),a("br"),a("span",{staticClass:"line-number"},[t._v("209")]),a("br"),a("span",{staticClass:"line-number"},[t._v("210")]),a("br"),a("span",{staticClass:"line-number"},[t._v("211")]),a("br"),a("span",{staticClass:"line-number"},[t._v("212")]),a("br"),a("span",{staticClass:"line-number"},[t._v("213")]),a("br"),a("span",{staticClass:"line-number"},[t._v("214")]),a("br")])]),a("h4",{attrs:{id:"_1-3-4-tsfilesequenceread"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-3-4-tsfilesequenceread"}},[t._v("#")]),t._v(" 1.3.4 TsFileSequenceRead")]),t._v(" "),a("p",[t._v("您可以使用示例中的类 "),a("code",[t._v("example/tsfile/org/apache/iotdb/tsfile/TsFileSequenceRead")]),t._v(" 顺序打印 TsFile 中的内容.")]),t._v(" "),a("h3",{attrs:{id:"_1-4-tsfile-的总览图"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-4-tsfile-的总览图"}},[t._v("#")]),t._v(" 1.4 TsFile 的总览图")]),t._v(" "),a("h4",{attrs:{id:"v0-8"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#v0-8"}},[t._v("#")]),t._v(" v0.8")]),t._v(" "),a("img",{staticStyle:{width:"100%","max-width":"800px","max-height":"600px","margin-left":"auto","margin-right":"auto",display:"block"},attrs:{src:"https://user-images.githubusercontent.com/33376433/65209576-2bd36000-dacb-11e9-9e43-49e0dd01274e.png"}}),t._v(" "),a("h4",{attrs:{id:"v0-9-000001"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#v0-9-000001"}},[t._v("#")]),t._v(" v0.9 / 000001")]),t._v(" "),a("img",{staticStyle:{width:"100%","max-width":"800px","max-height":"600px","margin-left":"auto","margin-right":"auto",display:"block"},attrs:{src:"https://user-images.githubusercontent.com/33376433/69341240-26012300-0ca4-11ea-91a1-d516810cad44.png"}}),t._v(" "),a("h4",{attrs:{id:"v0-10-000002"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#v0-10-000002"}},[t._v("#")]),t._v(" v0.10 / 000002")]),t._v(" "),a("img",{staticStyle:{width:"100%","max-width":"800px","max-height":"600px","margin-left":"auto","margin-right":"auto",display:"block"},attrs:{src:"https://user-images.githubusercontent.com/19167280/95296983-492cc500-08ac-11eb-9f66-c9c78401c61d.png"}})])}),[],!1,null,null,null);e.default=s.exports}}]);