益、基本概念介紹
1.1 Apache IoTDB
Apache IoTDB是一款專為工業物聯網設計的時序數據庫管理系統,集數據收集、存儲、管理與分析于一體,滿足海量數據存儲、高速讀取及復雜數據分析需求。其架構包括時序文件(TsFile)、數據庫引擎和分析引擎三部分。TsFile是IoTDB自研的時序數據文件格式,支持高效壓縮與查詢。
1.2 SeaTunnel
SeaTunnel是一個分布式、高性能、易擴展的數據集成平臺,用于海量數據的離線與實時同步和轉化。它通過抽象API從多種數據源讀取數據并寫入多種目標數據源,依賴Connector連接器(由Source和Sink構成)實現數據的讀取與寫入。
二、IoTDB Connector功能特性
2.1 Source功能特性
- ?批量讀取?:支持通過group by device等SQL語法批量讀取設備數據。
- ?字段投影?:默認投影time或device列,支持自定義投影列。
- ?數據類型映射?:支持IoTDB數據類型到SeaTunnel數據類型的映射。
- ?并行讀取?:利用時間戳劃分范圍實現并行讀取。
- ?狀態恢復?:根據split位置信息恢復讀取狀態。
2.2 Sink功能特性
- ?元數據提取?:支持從SeaTunnelRow中提取metadata、device等元數據。
- ?批量提交?:支持配置批量提交的條數與間隔。
- ?異常重試?:支持配置重試次數與等待間隔。
三、IoTDB Connector數據讀取解析
3.1 數據類型映射
IoTDB數據類型需轉換為SeaTunnel數據類型,包括BOOLEAN、INT32、INT64等類型的映射。
3.2 字段投影
讀取IoTDB數據時,可自動映射Time字段,并支持部分數據映射到SeaTunnel。通過SQL提取列碼,只提取所需列,并在SeaTunnel上指定列映射后的名字和類型。
3.3 批量讀取device
支持align by device語法,批量讀取相同結構的數據。
3.4 并行讀取
通過time列范圍劃分,設置lower_bound、upper_bound和num_partitions參數實現并行讀取。根據split ID向reader取模分配讀取任務。
3.5 狀態恢復
通過reader將未讀取的split信息存入state,引擎定期做快照保留,恢復時從最后一次快照繼續讀取。
四、IoTDB Connector數據寫入解析
4.1 數據類型映射
與讀取相反,需將SeaTunnel數據類型轉換為IoTDB類型,涉及TINYINT和SMALLINT的數據類型提升。
4.2 元數據動態注入
支持從每行數據中提取device、measurement、time等元數據,并配置storage group。
4.3 批量提交與異常重試
支持配置批量提交的條數與間隔,以及重試次數與等待間隔。
五、典型使用場景
5.1 從IoTDB導出數據
示例:從IoTDB并行讀取數據并導出到Console,設置并行度、批次數和時間范圍。
5.2 導入數據到IoTDB
示例:將外部數據庫表數據導入IoTDB,配置批量寫入頻次、元數據提取等。
5.3 IoTDB之間同步數據
示例:在IoTDB之間同步數據,變更存儲組和數據列指標名稱。
通過以上解析與示例,讀者可深入了解如何使用IoTDB Connector在SeaTunnel中實現數據同步,并應用于實際生產環境。