blob: e6f82e18ce116daca02eb971f4d123065d100494 [file] [log] [blame]
(window.webpackJsonp=window.webpackJsonp||[]).push([[311],{875:function(t,e,a){"use strict";a.r(e);var s=a(68),n=Object(s.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: PLAIN_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的结构图。")]),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"}}),t._v(" "),a("p",[t._v("此文件包括两个设备 d1、d2,每个设备包含两个测点 s1、s2,共 4 个时间序列。每个时间序列包含两个 Chunk。")]),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/98808354-ed2f0080-2456-11eb-8e7f-b11a4759d560.png"}}),t._v(" "),a("p",[t._v("此文件包括两个设备 d1、d2,每个设备包含三个测点 s1、s2、s3,共 6 个时间序列。每个时间序列包含两个 Chunk。")]),t._v(" "),a("p",[t._v("元数据分为三部分")]),t._v(" "),a("ul",[a("li",[t._v("按时间序列组织的 ChunkMetadata 列表")]),t._v(" "),a("li",[t._v("按时间序列组织的 TimeseriesMetadata")]),t._v(" "),a("li",[t._v("TsFileMetadata")])]),t._v(" "),a("p",[t._v("查询流程:以查 d1.s1 为例")]),t._v(" "),a("ul",[a("li",[t._v("反序列化 TsFileMetadata,得到 d1.s1 的 TimeseriesMetadata 的位置")]),t._v(" "),a("li",[t._v("反序列化得到 d1.s1 的 TimeseriesMetadata")]),t._v(" "),a("li",[t._v("根据 d1.s1 的 TimeseriesMetadata,反序列化其所有 ChunkMetadata")]),t._v(" "),a("li",[t._v("根据 d1.s1 的每一个 ChunkMetadata,读取其 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("p",[t._v("TsFile文件的内容可以划分为两个部分: 数据(Chunk)和元数据(XXMetadata)。数据和元数据之间是由一个字节的 "),a("code",[t._v("0x02")]),t._v(" 做为分隔符。")]),t._v(" "),a("p",[a("code",[t._v("ChunkGroup")]),t._v(" 存储了一个 "),a("em",[t._v("设备(device)")]),t._v(" 一段时间的数据。")]),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(" 由若干个 "),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(" 存储了一个 "),a("em",[t._v("测点(measurement)")]),t._v(" 一段时间的数据,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("Chunk")]),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("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("deviceID")]),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-chunkmetadata"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-2-3-1-chunkmetadata"}},[t._v("#")]),t._v(" 1.2.3.1 ChunkMetadata")]),t._v(" "),a("p",[t._v("第一部分的元数据是 "),a("code",[t._v("ChunkMetadata")])]),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-timeseriesmetadata"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-2-3-2-timeseriesmetadata"}},[t._v("#")]),t._v(" 1.2.3.2 TimeseriesMetadata")]),t._v(" "),a("p",[t._v("第二部分的元数据是 "),a("code",[t._v("TimeseriesMetadata")]),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("startOffsetOfChunkMetadataList")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("文件中 ChunkMetadata 列表开始的偏移量")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("chunkMetaDataListDataSize")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("int")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("ChunkMetadata 列表的大小")])]),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-tsfilemetadata"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-2-3-3-tsfilemetadata"}},[t._v("#")]),t._v(" 1.2.3.3 TsFileMetaData")]),t._v(" "),a("p",[t._v("第三部分的元数据是 "),a("code",[t._v("TsFileMetaData")]),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("MetadataIndex")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("MetadataIndexNode")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("元数据索引节点")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("totalChunkNum")]),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("invalidChunkNum")]),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("versionInfo")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("List<Pair<Long, Long>>")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("版本信息映射")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[t._v("metaOffset")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("long")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("MetaMarker.SEPARATOR偏移量")])]),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("元数据索引节点 (MetadataIndexNode) 的成员和类型具体如下:")]),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("MetadataIndexEntry")],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("MetadataIndexNodeType")]),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("所有的元数据索引节点构成一棵"),a("strong",[t._v("元数据索引树")]),t._v(",这棵树最多由两个层级组成:设备索引层级和传感器索引层级,在不同的情况下会有不同的组成方式。元数据索引节点类型有四种,分别是"),a("code",[t._v("INTERNAL_DEVICE")]),t._v("、"),a("code",[t._v("LEAF_DEVICE")]),t._v("、"),a("code",[t._v("INTERNAL_MEASUREMENT")]),t._v("、"),a("code",[t._v("LEAF_MEASUREMENT")]),t._v(",分别对应设备索引层级的中间节点和叶子节点,和传感器索引层级的中间节点和叶子节点。\n只有传感器索引层级的叶子节点("),a("code",[t._v("LEAF_MEASUREMENT")]),t._v(") 指向 "),a("code",[t._v("TimeseriesMetadata")]),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(",其默认值为1024。在以下例子中,为了简化,我们假定 "),a("code",[t._v("max_degree_of_index_node = 10")]),t._v("。")]),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/81935219-de3fd080-9622-11ea-9aa1-a59bef1c0001.png"}}),t._v(" "),a("p",[t._v("在5个设备,每个设备有5个传感器的情况下,由于设备数和传感器树均不超过 "),a("code",[t._v("max_degree_of_index_node")]),t._v(",因此元数据索引树只有默认的传感器层级。在这个层级里,每个 MetadataIndexNode 最多由10个 MetadataIndexEntry 组成。根节点的 MetadataIndexNode 是 "),a("code",[t._v("INTERNAL_MEASUREMENT")]),t._v(" 类型,其中的5个 MetadataIndexEntry 指向对应的设备的 MetadataIndexNode,这些节点直接指向 "),a("code",[t._v("TimeseriesMetadata")]),t._v(",是 "),a("code",[t._v("LEAF_MEASUREMENT")]),t._v("。")]),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/81935210-d97b1c80-9622-11ea-8a69-2c2c5f05a876.png"}}),t._v(" "),a("p",[t._v("在1个设备,设备中有150个传感器的情况下,传感器个数超过了 "),a("code",[t._v("max_degree_of_index_node")]),t._v(",元数据索引树有默认的传感器层级。在这个层级里,每个 MetadataIndexNode 最多由10个 MetadataIndexEntry 组成。直接指向 "),a("code",[t._v("TimeseriesMetadata")]),t._v("的节点类型均为 "),a("code",[t._v("LEAF_MEASUREMENT")]),t._v(";而后续产生的中间节点和根节点不是传感器索引层级的叶子节点,这些节点是 "),a("code",[t._v("INTERNAL_MEASUREMENT")]),t._v("。")]),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/95592841-c0fd1a00-0a7b-11eb-9b46-dfe8b2f73bfb.png"}}),t._v(" "),a("p",[t._v("在150个设备,每个设备中有1个传感器的情况下,设备个数超过了 "),a("code",[t._v("max_degree_of_index_node")]),t._v(",形成元数据索引树的传感器层级和设备索引层级。在这两个层级里,每个 MetadataIndexNode 最多由10个 MetadataIndexEntry 组成。直接指向 "),a("code",[t._v("TimeseriesMetadata")]),t._v(" 的节点类型为 "),a("code",[t._v("LEAF_MEASUREMENT")]),t._v(",传感器索引层级的根节点同时作为设备索引层级的叶子节点,其节点类型为 "),a("code",[t._v("LEAF_DEVICE")]),t._v(";而后续产生的中间节点和根节点不是设备索引层级的叶子节点,因此节点类型为 "),a("code",[t._v("INTERNAL_DEVICE")]),t._v("。")]),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/81935138-b6e90380-9622-11ea-94f9-c97bd2b5d050.png"}}),t._v(" "),a("p",[t._v("在150个设备,每个设备中有150个传感器的情况下,传感器和设备个数均超过了 "),a("code",[t._v("max_degree_of_index_node")]),t._v(",形成元数据索引树的传感器层级和设备索引层级。在这两个层级里,每个 MetadataIndexNode 均最多由10个 MetadataIndexEntry 组成。如前所述,从根节点到设备索引层级的叶子节点,类型分别为"),a("code",[t._v("INTERNAL_DEVICE")]),t._v(" 和 "),a("code",[t._v("LEAF_DEVICE")]),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("TimeseriesMetadata")]),t._v(",只需要根据所读取的传感器定位对应的节点,从而减少 I/O,加快查询速度。有关 TsFile 的读流程将在本章最后一节加以详细说明。")]),t._v(" "),a("h5",{attrs:{id:"_1-2-3-4-tsfilemetadatasize"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-2-3-4-tsfilemetadatasize"}},[t._v("#")]),t._v(" 1.2.3.4 TsFileMetadataSize")]),t._v(" "),a("p",[t._v("在TsFileMetaData之后,有一个int值用来表示TsFileMetaData的大小。")]),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.10.0\\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.12.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.10.0\\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.10.0\\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.10.0\\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.10.0/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=n.exports}}]);