blob: 683d07d1bad72d101f061f22c5262d8175100d78 [file] [log] [blame]
(window.webpackJsonp=window.webpackJsonp||[]).push([[527],{1096:function(s,e,a){"use strict";a.r(e);var t=a(70),n=Object(t.a)({},(function(){var s=this,e=s.$createElement,a=s._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h2",{attrs:{id:"tsfile-api"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tsfile-api"}},[s._v("#")]),s._v(" TsFile API")]),s._v(" "),a("p",[s._v("TsFile 是在 IoTDB 中使用的时间序列的文件格式。在这个章节中,我们将介绍这种文件格式的用法。")]),s._v(" "),a("h3",{attrs:{id:"安装-tsfile-library"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#安装-tsfile-library"}},[s._v("#")]),s._v(" 安装 TsFile library")]),s._v(" "),a("p",[s._v("在您自己的项目中有两种方法使用 TsFile .")]),s._v(" "),a("ul",[a("li",[s._v("使用 jar 包: 编译源码生成 jar 包")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("git clone https://github.com/apache/iotdb.git\ncd tsfile/\nmvn clean package -Dmaven.test.skip=true\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("p",[s._v("命令执行完成之后,所有的 jar 包都可以从 "),a("code",[s._v("target/")]),s._v(" 目录下找到。之后您可以在自己的工程中导入 "),a("code",[s._v("target/tsfile-0.12.0-SNAPSHOT.jar")]),s._v(".")]),s._v(" "),a("ul",[a("li",[s._v("使用 Maven 依赖:")])]),s._v(" "),a("p",[s._v("编译源码并且部署到您的本地仓库中需要 3 步:")]),s._v(" "),a("ol",[a("li",[s._v("下载源码")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("git clone https://github.com/apache/iotdb.git\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("ol",{attrs:{start:"2"}},[a("li",[s._v("编译源码和部署到本地仓库")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("cd tsfile/\nmvn clean install -Dmaven.test.skip=true\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("ol",{attrs:{start:"3"}},[a("li",[s._v("在您自己的工程中增加依赖:")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("<dependency>\n <groupId>org.apache.iotdb</groupId>\n <artifactId>tsfile</artifactId>\n <version>0.12.0</version>\n</dependency>\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("p",[s._v("或者,您可以直接使用官方的 Maven 仓库:")]),s._v(" "),a("ol",[a("li",[s._v("首先,在"),a("code",[s._v("${username}\\.m2\\settings.xml")]),s._v("目录下的"),a("code",[s._v("settings.xml")]),s._v("文件中"),a("code",[s._v("<profiles>")]),s._v("\n节中增加"),a("code",[s._v("<profile>")]),s._v(",内容如下:")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("<profile>\n <id>allow-snapshots</id>\n <activation><activeByDefault>true</activeByDefault></activation>\n <repositories>\n <repository> \n <id>apache.snapshots</id>\n <name>Apache Development Snapshot Repository</name>\n <url>https://repository.apache.org/content/repositories/snapshots/</url>\n <releases>\n <enabled>false</enabled>\n </releases>\n <snapshots>\n <enabled>true</enabled>\n </snapshots>\n </repository>\n </repositories>\n</profile>\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br")])]),a("ol",{attrs:{start:"2"}},[a("li",[s._v("之后您可以在您的工程中增加如下依赖:")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("<dependency>\n <groupId>org.apache.iotdb</groupId>\n <artifactId>tsfile</artifactId>\n <version>0.10.0</version>\n</dependency>\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("h3",{attrs:{id:"tsfile-的使用"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tsfile-的使用"}},[s._v("#")]),s._v(" TsFile 的使用")]),s._v(" "),a("p",[s._v("本章节演示TsFile的详细用法。")]),s._v(" "),a("p",[s._v("时序数据(Time-series Data)\n一个时序是由4个序列组成,分别是 device, measurement, time, value。")]),s._v(" "),a("ul",[a("li",[a("p",[a("strong",[s._v("measurement")]),s._v(": 时间序列描述的是一个物理或者形式的测量(measurement),比如:城市的温度,一些商品的销售数量或者是火车在不同时间的速度。\n传统的传感器(如温度计)也采用单次测量(measurement)并产生时间序列,我们将在下面交替使用测量(measurement)和传感器。")])]),s._v(" "),a("li",[a("p",[a("strong",[s._v("device")]),s._v(": 一个设备指的是一个正在进行多次测量(产生多个时间序列)的实体,例如,\n​ ​ ​ 一列正在运行的火车监控它的速度、油表、它已经运行的英里数,当前的乘客每个都被传送到一个时间序列。")])])]),s._v(" "),a("p",[a("strong",[s._v("单行数据")]),s._v(": 在许多工业应用程序中,一个设备通常包含多个传感器,这些传感器可能同时具有多个值,这称为一行数据。")]),s._v(" "),a("p",[s._v("在形式上,一行数据包含一个"),a("code",[s._v("device_id")]),s._v(",它是一个时间戳,表示从 1970年1月1日 00:00:00 开始的毫秒数,\n以及由"),a("code",[s._v("measurement_id")]),s._v("和相应的"),a("code",[s._v("value")]),s._v("组成的几个数据对。一行中的所有数据对都属于这个"),a("code",[s._v("device_id")]),s._v(",并且具有相同的时间戳。\n如果其中一个度量值"),a("code",[s._v("measurements")]),s._v("在某个时间戳"),a("code",[s._v("timestamp")]),s._v("没有值"),a("code",[s._v("value")]),s._v(",将使用一个空格表示(实际上 TsFile 并不存储 null 值)。\n其格式如下:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("device_id, timestamp, <measurement_id, value>...\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("示例数据如下所示。在本例中,两个度量值(measurement)的数据类型分别是"),a("code",[s._v("INT32")]),s._v("和"),a("code",[s._v("FLOAT")]),s._v("。")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("device_1, 1490860659000, m1, 10, m2, 12.12\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("h4",{attrs:{id:"写入-tsfile"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#写入-tsfile"}},[s._v("#")]),s._v(" 写入 TsFile")]),s._v(" "),a("p",[s._v('TsFile可以通过以下三个步骤生成,完整的代码参见"写入 TsFile 示例"章节。')]),s._v(" "),a("ol",[a("li",[a("p",[s._v("构造一个"),a("code",[s._v("TsFileWriter")]),s._v("实例。")]),s._v(" "),a("p",[s._v("以下是可用的构造函数:")]),s._v(" "),a("ul",[a("li",[s._v("没有预定义 schema")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("public TsFileWriter(File file) throws IOException\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("ul",[a("li",[s._v("预定义 schema")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("public TsFileWriter(File file, Schema schema) throws IOException\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("这个是用于使用 HDFS 文件系统的。"),a("code",[s._v("TsFileOutput")]),s._v("可以是"),a("code",[s._v("HDFSOutput")]),s._v("类的一个实例。")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("public TsFileWriter(TsFileOutput output, Schema schema) throws IOException \n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("如果你想自己设置一些 TSFile 的配置,你可以使用"),a("code",[s._v("config")]),s._v("参数。比如:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v('TSFileConfig conf = new TSFileConfig();\nconf.setTSFileStorageFs("HDFS");\nTsFileWriter tsFileWriter = new TsFileWriter(file, schema, conf);\n')])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("p",[s._v("在上面的例子中,数据文件将存储在 HDFS 中,而不是本地文件系统中。如果你想在本地文件系统中存储数据文件,你可以使用"),a("code",[s._v('conf.setTSFileStorageFs("LOCAL")')]),s._v(",这也是默认的配置。")]),s._v(" "),a("p",[s._v("您还可以通过"),a("code",[s._v("config.setHdfsIp(...)")]),s._v("和"),a("code",[s._v("config.setHdfsPort(...)")]),s._v("来配置 HDFS 的 IP 和端口。默认的 IP是"),a("code",[s._v("localhost")]),s._v(",默认的"),a("code",[s._v("RPC")]),s._v("端口是"),a("code",[s._v("9000")]),s._v(".")]),s._v(" "),a("p",[a("strong",[s._v("参数:")])]),s._v(" "),a("ul",[a("li",[s._v("file : 写入 TsFile 数据的文件")]),s._v(" "),a("li",[s._v("schema : 文件的 schemas,将在下章进行介绍")]),s._v(" "),a("li",[s._v("config : TsFile 的一些配置项")])])]),s._v(" "),a("li",[a("p",[s._v("添加测量值(measurement)")]),s._v(" "),a("p",[s._v("你也可以先创建一个"),a("code",[s._v("Schema")]),s._v("类的实例然后把它传递给"),a("code",[s._v("TsFileWriter")]),s._v("类的构造函数")]),s._v(" "),a("p",[a("code",[s._v("Schema")]),s._v("类保存的是一个映射关系,key 是一个 measurement 的名字,value 是 measurement schema.")]),s._v(" "),a("p",[s._v("下面是一系列接口:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("// Create an empty Schema or from an existing map\npublic Schema()\npublic Schema(Map<String, MeasurementSchema> measurements)\n// Use this two interfaces to add measurements\npublic void registerMeasurement(MeasurementSchema descriptor)\npublic void registerMeasurements(Map<String, MeasurementSchema> measurements)\n// Some useful getter and checker\npublic TSDataType getMeasurementDataType(String measurementId)\npublic MeasurementSchema getMeasurementSchema(String measurementId)\npublic Map<String, MeasurementSchema> getAllMeasurementSchema()\npublic boolean hasMeasurement(String measurementId)\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("p",[s._v("你可以在"),a("code",[s._v("TsFileWriter")]),s._v("类中使用以下接口来添加额外的测量(measurement):\n​")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("public void addMeasurement(MeasurementSchema measurementSchema) throws WriteProcessException\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[a("code",[s._v("MeasurementSchema")]),s._v("类保存了一个测量(measurement)的信息,有几个构造函数:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("public MeasurementSchema(String measurementId, TSDataType type, TSEncoding encoding)\npublic MeasurementSchema(String measurementId, TSDataType type, TSEncoding encoding, CompressionType compressionType)\npublic MeasurementSchema(String measurementId, TSDataType type, TSEncoding encoding, CompressionType compressionType, \nMap<String, String> props)\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])]),a("p",[a("strong",[s._v("参数:")]),s._v("\n​")]),s._v(" "),a("ul",[a("li",[a("p",[s._v("measurementID: 测量的名称,通常是传感器的名称。")])]),s._v(" "),a("li",[a("p",[s._v("type: 数据类型,现在支持六种类型: "),a("code",[s._v("BOOLEAN")]),s._v(", "),a("code",[s._v("INT32")]),s._v(", "),a("code",[s._v("INT64")]),s._v(", "),a("code",[s._v("FLOAT")]),s._v(", "),a("code",[s._v("DOUBLE")]),s._v(", "),a("code",[s._v("TEXT")]),s._v(";")])]),s._v(" "),a("li",[a("p",[s._v("encoding: 编码类型.")])]),s._v(" "),a("li",[a("p",[s._v("compression: 压缩方式. 现在支持 "),a("code",[s._v("UNCOMPRESSED")]),s._v(" 和 "),a("code",[s._v("SNAPPY")]),s._v(".")])]),s._v(" "),a("li",[a("p",[s._v("props: 特殊数据类型的属性。比如说"),a("code",[s._v("FLOAT")]),s._v("和"),a("code",[s._v("DOUBLE")]),s._v("可以设置"),a("code",[s._v("max_point_number")]),s._v(","),a("code",[s._v("TEXT")]),s._v("可以设置"),a("code",[s._v("max_string_length")]),s._v('。\n可以使用Map来保存键值对,比如("max_point_number", "3")。')])])]),s._v(" "),a("blockquote",[a("p",[a("strong",[s._v("注意:")]),s._v(" 虽然一个测量(measurement)的名字可以被用在多个deltaObjects中, 但是它的参数是不允许被修改的。比如:\n不允许多次为同一个测量(measurement)名添加不同类型的编码。下面是一个错误示例:")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v('// The measurement "sensor_1" is float type\naddMeasurement(new MeasurementSchema("sensor_1", TSDataType.FLOAT, TSEncoding.RLE));\n// This call will throw a WriteProcessException exception\naddMeasurement(new MeasurementSchema("sensor_1", TSDataType.INT32, TSEncoding.RLE));\n')])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])])]),s._v(" "),a("li",[a("p",[s._v("插入和写入数据。")]),s._v(" "),a("p",[s._v("使用这个接口创建一个新的"),a("code",[s._v("TSRecord")]),s._v("(时间戳和设备对)。")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("public TSRecord(long timestamp, String deviceId)\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("然后创建一个"),a("code",[s._v("DataPoint")]),s._v("(度量(measurement)和值的对应),并使用 addTuple 方法将数据 DataPoint 添加正确的值到 TsRecord。")]),s._v(" "),a("p",[s._v("用下面这种方法写")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("public void write(TSRecord record) throws IOException, WriteProcessException\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])])]),s._v(" "),a("li",[a("p",[s._v("调用"),a("code",[s._v("close")]),s._v("方法来完成写入过程。")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("public void close() throws IOException\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])])])]),s._v(" "),a("p",[s._v("我们也支持将数据写入已关闭的 TsFile 文件中。")]),s._v(" "),a("ol",[a("li",[a("p",[s._v("使用"),a("code",[s._v("ForceAppendTsFileWriter")]),s._v("打开已经关闭的文件。")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("public ForceAppendTsFileWriter(File file) throws IOException\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])])]),s._v(" "),a("li",[a("p",[s._v("调用 "),a("code",[s._v("doTruncate")]),s._v(" 去掉文件的Metadata部分")])]),s._v(" "),a("li",[a("p",[s._v("使用 "),a("code",[s._v("ForceAppendTsFileWriter")]),s._v(" 构造另一个"),a("code",[s._v("TsFileWriter")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("public TsFileWriter(TsFileIOWriter fileWriter) throws IOException\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])])])]),s._v(" "),a("p",[s._v("请注意 此时需要重新添加测量值(measurement) 再进行上述写入操作。")]),s._v(" "),a("h4",{attrs:{id:"写入-tsfile-示例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#写入-tsfile-示例"}},[s._v("#")]),s._v(" 写入 TsFile 示例")]),s._v(" "),a("p",[s._v("您需要安装 TsFile 到本地的 Maven 仓库中。")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("mvn clean install -pl tsfile -am -DskipTests\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("如果存在"),a("strong",[s._v("非对齐")]),s._v("的时序数据(比如:不是所有的传感器都有值),您可以通过构造"),a("strong",[s._v("TSRecord")]),s._v("来写入。")]),s._v(" "),a("p",[s._v("更详细的例子可以在")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("/example/tsfile/src/main/java/org/apache/iotdb/tsfile/TsFileWriteWithTSRecord.java\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("中查看")]),s._v(" "),a("p",[s._v("如果所有时序数据都是"),a("strong",[s._v("对齐")]),s._v("的,您可以通过构造"),a("strong",[s._v("Tablet")]),s._v("来写入数据。")]),s._v(" "),a("p",[s._v("更详细的例子可以在")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("/example/tsfile/src/main/java/org/apache/iotdb/tsfile/TsFileWriteWithTablet.java\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("中查看")]),s._v(" "),a("p",[s._v("在已关闭的TsFile 文件中写入新数据的详细例子可以在")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("/example/tsfile/src/main/java/org/apache/iotdb/tsfile/TsFileForceAppendWrite.java\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("中查看")]),s._v(" "),a("h4",{attrs:{id:"读取-tsfile-接口"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#读取-tsfile-接口"}},[s._v("#")]),s._v(" 读取 TsFile 接口")]),s._v(" "),a("ul",[a("li",[s._v("路径的定义")])]),s._v(" "),a("p",[s._v('路径是一个点(.)分隔的字符串,它唯一地标识 TsFile 中的时间序列,例如:"root.area_1.device_1.sensor_1"。\n最后一部分"sensor_1"称为"measurementId",其余部分"root.area_1.device_1"称为deviceId。\n正如之前提到的,不同设备中的相同测量(measurement)具有相同的数据类型和编码,设备也是唯一的。')]),s._v(" "),a("p",[s._v("在read接口中,参数"),a("code",[s._v("paths")]),s._v("表示要选择的测量值(measurement)。\nPath实例可以很容易地通过类"),a("code",[s._v("Path")]),s._v("来构造。例如:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v('Path p = new Path("device_1.sensor_1");\n')])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("我们可以为查询传递一个 ArrayList 路径,以支持多个路径查询。")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v('List<Path> paths = new ArrayList<Path>();\npaths.add(new Path("device_1.sensor_1"));\npaths.add(new Path("device_1.sensor_3"));\n')])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("blockquote",[a("p",[a("strong",[s._v("注意:")]),s._v(" 在构造路径时,参数的格式应该是一个点(.)分隔的字符串,最后一部分是measurement,其余部分确认为deviceId。")])]),s._v(" "),a("ul",[a("li",[a("p",[s._v("定义 Filter")]),s._v(" "),a("ul",[a("li",[a("p",[s._v("使用条件过滤\n在 TsFile 读取过程中使用 Filter 来选择满足一个或多个给定条件的数据。")])]),s._v(" "),a("li",[a("p",[s._v("IExpression\n"),a("code",[s._v("IExpression")]),s._v("是一个过滤器表达式接口,它将被传递给系统查询时调用。\n我们创建一个或多个筛选器表达式,并且可以使用"),a("code",[s._v("Binary Filter Operators")]),s._v("将它们连接形成最终表达式。")])])])]),s._v(" "),a("li",[a("p",[a("strong",[s._v("创建一个Filter表达式")])]),s._v(" "),a("p",[s._v("有两种类型的过滤器。")]),s._v(" "),a("ul",[a("li",[s._v("TimeFilter: 使用时序数据中的"),a("code",[s._v("time")]),s._v("过滤。")])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("IExpression timeFilterExpr = new GlobalTimeExpression(TimeFilter);\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])])])]),s._v(" "),a("p",[s._v("使用以下关系获得一个"),a("code",[s._v("TimeFilter")]),s._v("对象(值是一个 long 型变量)。")]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",[s._v("Relationship")]),s._v(" "),a("th",[s._v("Description")])])]),s._v(" "),a("tbody",[a("tr",[a("td",[s._v("TimeFilter.eq(value)")]),s._v(" "),a("td",[s._v("选择时间等于值的数据")])]),s._v(" "),a("tr",[a("td",[s._v("TimeFilter.lt(value)")]),s._v(" "),a("td",[s._v("选择时间小于值的数据")])]),s._v(" "),a("tr",[a("td",[s._v("TimeFilter.gt(value)")]),s._v(" "),a("td",[s._v("选择时间大于值的数据")])]),s._v(" "),a("tr",[a("td",[s._v("TimeFilter.ltEq(value)")]),s._v(" "),a("td",[s._v("选择时间小于等于值的数据")])]),s._v(" "),a("tr",[a("td",[s._v("TimeFilter.gtEq(value)")]),s._v(" "),a("td",[s._v("选择时间大于等于值的数据")])]),s._v(" "),a("tr",[a("td",[s._v("TimeFilter.notEq(value)")]),s._v(" "),a("td",[s._v("选择时间不等于值的数据")])]),s._v(" "),a("tr",[a("td",[s._v("TimeFilter.not(TimeFilter)")]),s._v(" "),a("td",[s._v("选择时间不满足另一个时间过滤器的数据")])])])]),s._v(" "),a("ul",[a("li",[s._v("ValueFilter: 使用时序数据中的"),a("code",[s._v("value")]),s._v("过滤。")])]),s._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",[a("code",[s._v("```\nIExpression valueFilterExpr = new SingleSeriesExpression(Path, ValueFilter);\n```\n")])])]),a("p",[a("code",[s._v("ValueFilter")]),s._v("的用法与"),a("code",[s._v("TimeFilter")]),s._v("相同,只是需要确保值的类型等于measurement(在路径中定义)的类型。")]),s._v(" "),a("ul",[a("li",[a("p",[a("strong",[s._v("Binary Filter Operators")])]),s._v(" "),a("p",[s._v("Binary filter operators 可以用来连接两个单独的表达式。")]),s._v(" "),a("ul",[a("li",[s._v("BinaryExpression.and(Expression, Expression): 选择同时满足两个表达式的数据。")]),s._v(" "),a("li",[s._v("BinaryExpression.or(Expression, Expression): 选择满足任意一个表达式值的数据。")])])])]),s._v(" "),a("p",[s._v("Filter Expression 示例")]),s._v(" "),a("ul",[a("li",[a("strong",[s._v("TimeFilterExpression 示例")])])]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("IExpression timeFilterExpr = new GlobalTimeExpression(TimeFilter.eq(15)); // series time = 15\n\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("IExpression timeFilterExpr = new GlobalTimeExpression(TimeFilter.ltEq(15)); // series time <= 15\n\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("IExpression timeFilterExpr = new GlobalTimeExpression(TimeFilter.lt(15)); // series time < 15\n\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("IExpression timeFilterExpr = new GlobalTimeExpression(TimeFilter.gtEq(15)); // series time >= 15\n\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("IExpression timeFilterExpr = new GlobalTimeExpression(TimeFilter.notEq(15)); // series time != 15\n\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("IExpression timeFilterExpr = BinaryExpression.and(new GlobalTimeExpression(TimeFilter.gtEq(15L)),\n new GlobalTimeExpression(TimeFilter.lt(25L))); // 15 <= series time < 25\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("IExpression timeFilterExpr = BinaryExpression.or(new GlobalTimeExpression(TimeFilter.gtEq(15L)),\n new GlobalTimeExpression(TimeFilter.lt(25L))); // series time >= 15 or series time < 25\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("ul",[a("li",[s._v("读取接口")])]),s._v(" "),a("p",[s._v("首先,我们打开 TsFile 并从文件路径"),a("code",[s._v("path")]),s._v("中获取一个"),a("code",[s._v("ReadOnlyTsFile")]),s._v("实例。")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("TsFileSequenceReader reader = new TsFileSequenceReader(path);\nReadOnlyTsFile readTsFile = new ReadOnlyTsFile(reader);\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("p",[s._v("接下来,我们准备路径数组和查询表达式,然后通过这个接口得到最终的"),a("code",[s._v("QueryExpression")]),s._v("对象:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("QueryExpression queryExpression = QueryExpression.create(paths, statement);\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("ReadOnlyTsFile类有两个"),a("code",[s._v("query")]),s._v("方法来执行查询。")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("public QueryDataSet query(QueryExpression queryExpression) throws IOException\npublic QueryDataSet query(QueryExpression queryExpression, long partitionStartOffset, long partitionEndOffset) throws IOException\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("p",[s._v("此方法是为高级应用(如 TsFile-Spark 连接器)设计的。")]),s._v(" "),a("ul",[a("li",[a("strong",[s._v("参数")]),s._v(" : 对于第二个方法,添加了两个额外的参数来支持部分查询(Partial Query):\n"),a("ul",[a("li",[a("code",[s._v("partitionStartOffset")]),s._v(": TsFile 的开始偏移量")]),s._v(" "),a("li",[a("code",[s._v("partitionEndOffset")]),s._v(": TsFile 的结束偏移量")])])])]),s._v(" "),a("blockquote",[a("p",[s._v("什么是部分查询?")])]),s._v(" "),a("blockquote",[a("p",[s._v('在一些分布式文件系统中(比如:HDFS), 文件被分成几个部分,这些部分被称为"Blocks"并存储在不同的节点中。在涉及的每个节点上并行执行查询可以提高效率。因此需要部分查询(Partial Query)。部分查询(Partial Query)仅支持查询 TsFile 中被'),a("code",[s._v("QueryConstant.PARTITION_START_OFFSET")]),s._v("和"),a("code",[s._v("QueryConstant.PARTITION_END_OFFSET")]),s._v("分割的部分。")])]),s._v(" "),a("ul",[a("li",[s._v("QueryDataset 接口")])]),s._v(" "),a("p",[s._v("上面执行的查询将返回一个"),a("code",[s._v("QueryDataset")]),s._v("对象。")]),s._v(" "),a("p",[s._v("以下是一些用户常用的接口:")]),s._v(" "),a("ul",[a("li",[a("p",[a("code",[s._v("bool hasNext();")])]),s._v(" "),a("p",[s._v("如果该数据集仍然有数据,则返回true。")])]),s._v(" "),a("li",[a("p",[a("code",[s._v("List<Path> getPaths()")])]),s._v(" "),a("p",[s._v("获取这个数据集中的路径。")])]),s._v(" "),a("li",[a("p",[a("code",[s._v("List<TSDataType> getDataTypes();")])]),s._v(" "),a("p",[s._v("获取数据类型。")])]),s._v(" "),a("li",[a("p",[a("code",[s._v("RowRecord next() throws IOException;")])]),s._v(" "),a("p",[s._v("获取下一条记录。")]),s._v(" "),a("p",[a("code",[s._v("RowRecord")]),s._v("类包含一个"),a("code",[s._v("long")]),s._v("类型的时间戳和一个"),a("code",[s._v("List<Field>")]),s._v(",用于不同传感器中的数据,我们可以使用两个getter方法来获取它们。")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("long getTimestamp();\nList<Field> getFields();\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("p",[s._v("要从一个字段获取数据,请使用以下方法:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("TSDataType getDataType();\nObject getObjectValue();\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])])])]),s._v(" "),a("h4",{attrs:{id:"读取现有-tsfile-示例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#读取现有-tsfile-示例"}},[s._v("#")]),s._v(" 读取现有 TsFile 示例")]),s._v(" "),a("p",[s._v("您需要安装 TsFile 到本地的 Maven 仓库中。")]),s._v(" "),a("p",[s._v("有关查询语句的更详细示例,请参见\n"),a("code",[s._v("/tsfile/example/src/main/java/org/apache/iotdb/tsfile/TsFileRead.java")])]),s._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("package")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[s._v("org"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("apache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("iotdb"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("tsfile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[s._v("java"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("IOException")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[s._v("java"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("util"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ArrayList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[s._v("org"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("apache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("iotdb"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("tsfile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("read"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ReadOnlyTsFile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[s._v("org"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("apache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("iotdb"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("tsfile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("read"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TsFileSequenceReader")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[s._v("org"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("apache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("iotdb"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("tsfile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("read"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("common"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Path")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[s._v("org"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("apache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("iotdb"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("tsfile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("read"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("expression"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("IExpression")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[s._v("org"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("apache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("iotdb"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("tsfile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("read"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("expression"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("QueryExpression")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[s._v("org"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("apache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("iotdb"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("tsfile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("read"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("expression"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("impl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("BinaryExpression")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[s._v("org"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("apache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("iotdb"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("tsfile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("read"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("expression"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("impl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("GlobalTimeExpression")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[s._v("org"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("apache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("iotdb"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("tsfile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("read"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("expression"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("impl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SingleSeriesExpression")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[s._v("org"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("apache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("iotdb"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("tsfile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("read"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("filter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TimeFilter")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[s._v("org"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("apache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("iotdb"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("tsfile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("read"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("filter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ValueFilter")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[s._v("org"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("apache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("iotdb"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("tsfile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("read"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("query"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("dataset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("QueryDataSet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/**\n * The class is to show how to read TsFile file named "test.tsfile".\n * The TsFile file "test.tsfile" is generated from class TsFileWrite.\n * Run TsFileWrite to generate the test.tsfile first\n */')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TsFileRead")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("queryAndPrint")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ArrayList")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Path")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" paths"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ReadOnlyTsFile")]),s._v(" readTsFile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("IExpression")]),s._v(" statement"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throws")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("IOException")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("QueryExpression")]),s._v(" queryExpression "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("QueryExpression")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("paths"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" statement"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("QueryDataSet")]),s._v(" queryDataSet "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" readTsFile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("queryExpression"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("while")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("queryDataSet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("hasNext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("System")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("out"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("println")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("queryDataSet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("next")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("System")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("out"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("println")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"------------"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("main")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throws")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("IOException")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// file path")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" path "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test.tsfile"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// create reader and get the readTsFile interface")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TsFileSequenceReader")]),s._v(" reader "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TsFileSequenceReader")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("path"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ReadOnlyTsFile")]),s._v(" readTsFile "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ReadOnlyTsFile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("reader"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// use these paths(all sensors) for all the queries")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ArrayList")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Path")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" paths "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ArrayList")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n paths"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Path")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"device_1.sensor_1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n paths"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Path")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"device_1.sensor_2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n paths"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Path")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"device_1.sensor_3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// no query statement")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("queryAndPrint")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("paths"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" readTsFile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//close the reader when you left")]),s._v("\n reader"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("close")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br")])]),a("h3",{attrs:{id:"修改-tsfile-配置项"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#修改-tsfile-配置项"}},[s._v("#")]),s._v(" 修改 TsFile 配置项")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("TSFileConfig config = TSFileDescriptor.getInstance().getConfig();\nconfig.setXXX();\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])])])}),[],!1,null,null,null);e.default=n.exports}}]);