Apache IoTDBシリーズチュートリアル7:時系列データファイル形式TsFile

ビッグデータエコシステムには、Parquet、ORC、Avroなど、多くのファイル形式があり、すべてネストされたデータ用に設計されたファイル形式です。これらのファイル形式には通常、事前定義されたスキーマがあり、データは行に書き込まれ、属性別に整理され、列に格納されます。ただし、これらのファイル形式は通常、時系列データの管理要件を十分に満たすことができません。たとえば、一部の時系列データシナリオでは、通常、各シーケンスは個別に書き込まれ、タイムスタンプは整列されません。クエリ結果もタイムスタンプでソートする必要があります。TsFile(時系列ファイル)は、時系列データシナリオ用に設計したファイル形式です。今日は主に0.10バージョンを中心に使い方を紹介します。

テキストは2587語で、推定読書時間は7分です。

使用するシーン

ファイル形式は比較的軽量であるため、デバイス内、または産業用コンピューターや工場レベルでのエッジでのデータ圧縮パッケージとしての使用に適しています。デバイスで生成されたデータは、いつでもファイルに保存して保存できます。ここで言及する機器は、風速センサー、温度センサーなど、複数の測定ポイントを持つファンの場合があります。各センサーが収集するデータは時系列です。LenovoのIoTプラットフォームは、2017年からTsFileを使用して時系列データを保存しています。

したがって、TsFileのターゲットシナリオは、1つ以上のデバイスの時系列データを管理することです。

設備計測点モデル

デバイス(DeviceId):テーブルに似た概念。

測定ポイント(MeasurementId):デバイスは、テーブルの列の概念と同様に、複数の測定ポイントを持つことができます。

時系列パス(パス):パス(デバイスID、測定ポイントID)は、機器と測定ポイントによって定義できます。

測定点の説明情報(MeasurementSchema):各時系列は、データ型、エンコード方法、圧縮方法などの説明情報に対応しています。

各時系列には、時間列と値列の2つの列があります。

最近絵を描くのが好きです。基本的にはこんな感じです。機器によって測定点が異なる場合があります。

登録メタデータ

TsFileを使用して、最初のステップはメタデータを登録することです。

登録時系列:Path + MeasurementSchema

このようにして、各時系列を登録できます。

時系列を登録するには、パスとMeasurementSchemaを提供する必要があります 

String path = "test.tsfile";
File f = FSFactoryProducer.getFSFactory().getFile(path);
TsFileWriter tsFileWriter = new TsFileWriter(f);
// add measurements into file schema
tsFileWriter.registerTimeseries(new Path("device_1", "measurement_1"),new MeasurementSchema("measurement_1", TSDataType.INT64, TSEncoding.RLE));

0.10より前は、すべてのデバイスがポイントテーブルを共有し、同じ名前の測定スキーマも同じである必要がありました(これは、IoTDBのストレージグループにある同じ名前の測定ポイントタイプに対する同じ制限のソースです)。0.10以降、各時系列は完全に独立しており、互いに干渉しません。

テンプレートによるデバイスの登録:デバイステンプレート+デバイス

上記の1つずつの登録は面倒なので、デバイステンプレートの機能を提供します。各テンプレートは、MeasurementSchemaのセットを定義します(たとえば、10個の測定ポイントがあります)。このテンプレートにデバイスが関連付けられると、10個のシーケンスが自動的に登録されます。

最初にデバイステンプレートを生成し、次にテンプレートを登録します。

Map<String, MeasurementSchema> template = new HashMap<>();
template.put("measurement_1", new MeasurementSchema("measurement_1", TSDataType.INT64, TSEncoding.RLE));
template.put("measurement_2", new MeasurementSchema("measurement_2", TSDataType.DOUBLE, TSEncoding.GORILLA));
tsFileWriter.registerTemplate("template_1", template);

次に、デバイスを登録し、テンプレート名でデバイスをテンプレートに関連付けます。

tsFileWriter.registerDevice("device_1", "template_1");
tsFileWriter.registerDevice("device_2", "template_1");

このようにして、2つの測定ポイントを持つデバイスを2つ登録しました。

テンプレートを登録してリアルタイムでデータを書き込む

これは高度な簡易バージョンです。デバイステンプレートを1つだけ登録する場合、デバイスを登録せずにデータを直接書き込むことができます。書き込み処理中に、このデバイスによって書き込まれたデータが登録されていないことが判明した場合、登録用のテンプレートで同じ名前のMeasurementSchemaを直接検索します。これは、0.9より前のバージョンの伝統も継承しています(0.9より前のバージョンの場合、TsFileは1つのテンプレートしか登録できず、データを書き込むことができます)。

データを書き込む

TsFileデータの書き込みには制限があり、各列は時間単位で書き込む必要があります。そうしないと、正確さが保証されません。

デバイスに従ってデータの行を書き込みます:TSRecord

TSRecordは、デバイス、タイムスタンプ、および複数の測定ポイントの値です。テーブルのデータ行に似ています。

デバイスごとにデータのバッチを書き込む:タブレット

はは、私は再びタブレットを見ました、はい、この構造はTsFileとIoTDBセッションを通過する構造です。サブテーブルと同様に、1つのデバイスの複数のタイムスタンプを持つ複数の測定ポイントの値を表します。このサブテーブルにnull値を含めることはできません。

同様に、この書き込みインターフェースは高速であり、毎秒数千万ポイントの書き込み速度に達する可能性があります。

データを読み取る

クエリインターフェイスは、パスと式(時間フィルタリングと値フィルタリングを実行できます)のバッチを受け取ります。これは、実際にはselect句とwhere句に対応しています。

クエリを実行する場合、TsFileのデフォルトのテーブル構造は、ワイドテーブル、時間、d1.m1、d1.m2、d2.m1、d2.m2です。デフォルトでは、この構造は指定されたクエリPath by Timeを整列させ、条件付きフィルタリングを実行します。

データ

サンプルコード:

https://github.com/apache/incubator-iotdb/blob/master/example/tsfile/

ドキュメンテーション:

http://iotdb.apache.org/zh/UserGuide/V0.10.x/Client/Programming%20-%20TsFile%20API.html

総括する

今日は、時系列ファイル形式TsFileのデータモデル、メタデータ登録、書き込みおよび読み取りプロセスを紹介しました。それでおしまい。皆さん、スターを注文してください!

https://github.com/apache/incubator-iotdb/tree/master

お気に入り!注意!フォワード!

おすすめ

転載: blog.csdn.net/qiaojialin/article/details/107587660