blob: c94b690c7fc90bb07a9aab43d96415b5aed06d4e [file] [view]
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
# 接口定义 - Python
## 数据模式
```Python
class TSDataType(IntEnum):
"""
TsFile 当前支持的数据类型枚举。
"""
BOOLEAN = 0
INT32 = 1
INT64 = 2
FLOAT = 3
DOUBLE = 4
TEXT = 5
TIMESTAMP = 8
DATE = 9
BLOB = 10
STRING = 11
class TSEncoding(IntEnum):
"""
写入器支持的值编码。每个成员后的注释列出其可用于哪些数据类型。
"""
PLAIN = 0 # 所有类型
DICTIONARY = 1 # STRING、TEXT
RLE = 2 # INT32、INT64、TIMESTAMP、DATE
TS_2DIFF = 4 # INT32、INT64、TIMESTAMP、DATE、FLOAT、DOUBLE
GORILLA = 8 # INT32、INT64、TIMESTAMP、DATE、FLOAT、DOUBLE
ZIGZAG = 9 # INT32、INT64
SPRINTZ = 12 # INT32、INT64、FLOAT、DOUBLE
class Compressor(IntEnum):
"""
写入器支持的压缩,默认值为 LZ4。
"""
UNCOMPRESSED = 0
SNAPPY = 1
GZIP = 2
LZO = 3
LZ4 = 7
class ColumnCategory(IntEnum):
"""
TsFile 中的列类别枚举。
TAG:标签列
FIELD:测点列,存储测量值。
ATTRIBUTE / TIME:保留的列角色。
"""
TAG = 0
FIELD = 1
ATTRIBUTE = 2
TIME = 3
class ColumnSchema:
"""定义表中某一列的模式(名称、数据类型、类别)。"""
column_name = None
data_type = None
category = None
def __init__(self, column_name: str, data_type: TSDataType,
category: ColumnCategory = ColumnCategory.FIELD)
class TableSchema:
"""表结构的模式定义。"""
table_name = None
columns = None
def __init__(self, table_name: str, columns: List[ColumnSchema])
class ResultSetMetaData:
"""查询结果集的元数据容器(列名、类型、表名)。"""
column_list = None
data_types = None
table_name = None
def __init__(self, column_list: List[str], data_types: List[TSDataType])
```
## 写入接口
### TsFileWriter
```python
class TsFileTableWriter:
"""
用于将结构化表格数据写入具有指定模式的 TsFile。
"""
"""
:param path: tsfile 文件路径,如果不存在则会创建。
:param table_schema: 描述要写入表的结构信息。
:param memory_threshold: 触发自动刷盘前缓冲的字节数(默认 128MB)。
:return: 无返回值。
"""
def __init__(self, path: str, table_schema: TableSchema,
memory_threshold: int = 128 * 1024 * 1024)
"""
将一个 Tablet 写入 TsFile 中的表中。
:param tablet: 存储表的批量数据。
:return: 无返回值。
"""
def write_table(self, tablet: Tablet)
"""
将一个 pandas DataFrame 写入表中。列的编码/压缩遵循表 schema(或引擎默认值)。
:param dataframe: 要写入的数据。
:return: 无返回值。
"""
def write_dataframe(self, dataframe: pandas.DataFrame)
"""
将缓冲数据刷新到磁盘。
:return: 无返回值。
"""
def flush(self)
"""
关闭 TsFileTableWriter,并自动刷新数据。
:return: 无返回值。
"""
def close(self)
# 可作为上下文管理器使用:
# with TsFileTableWriter(path, schema) as w:
# w.write_table(tablet)
def __enter__(self)
def __exit__(self, exc_type, exc_val, exc_tb)
```
### Tablet definition
```Python
class Tablet(object)
"""
一个为批量数据预分配的列式数据容器,具有类型约束。
它会创建时间戳缓冲区和带类型的数据列,并对数值类型执行有效值范围校验。
初始化参数:
:param column_name_list: 数据列的名称列表。
:param type_list: 每列允许的数据类型(TSDataType 枚举值)。
:param max_row_num: 预分配的最大行数(默认值为 1024)。
:return: 无返回值。
"""
def __init__(self, column_name_list: list[str], type_list: list[TSDataType],
max_row_num: int = 1024)
```
### dataframe_to_tsfile
```python
def dataframe_to_tsfile(dataframe: pd.DataFrame,
file_path: str,
table_name: Optional[str] = None,
time_column: Optional[str] = None,
tag_column: Optional[list[str]] = None)
"""
将 pandas DataFrame 写入 TsFile。
:param dataframe: 要写入的数据。
:param file_path: 目标 .tsfile 路径。
:param table_name: 输出表名。
:param time_column: 用作时间戳列的列名。
:param tag_column: 作为 TAG 列处理的列名列表。
"""
```
## 配置
全局写入默认值——包括各类型的默认编码、默认压缩、时间列编码/压缩——以一个字典暴露。
请在创建写入器 **之前** 修改它们。
```python
from tsfile import get_tsfile_config, set_tsfile_config
from tsfile import TSEncoding, Compressor
cfg = get_tsfile_config() # -> 包含所有配置项的 dict
# 例如 cfg["default_compression_type_"]、cfg["int64_encoding_type_"]、
# cfg["time_encoding_type_"]、cfg["time_compress_type_"] 等。
set_tsfile_config({
"default_compression_type_": Compressor.LZ4,
"int64_encoding_type_": TSEncoding.TS_2DIFF,
})
```
`set_tsfile_config` 会校验每个取值,且只更新你传入的键。编码/压缩取值为 `TSEncoding` / `Compressor`
成员。各数据类型允许的编码,以及不修改时使用的默认值:
| 数据类型 | 允许的编码 | 默认值 |
|---|---|---|
| `BOOLEAN` | `PLAIN` | `PLAIN` |
| `INT32`、`INT64`、`DATE` | `PLAIN`、`TS_2DIFF`、`GORILLA`、`ZIGZAG`、`RLE`、`SPRINTZ` | `TS_2DIFF` |
| `FLOAT`、`DOUBLE` | `PLAIN`、`TS_2DIFF`、`GORILLA`、`SPRINTZ` | `GORILLA` |
| `STRING`、`TEXT` | `PLAIN`、`DICTIONARY` | `PLAIN` |
压缩适用于所有数据类型:`UNCOMPRESSED`、`SNAPPY`、`GZIP`、`LZO`、`LZ4`(默认 `LZ4`)。
## 读取接口
### TsFileReader
```python
class TsFileReader:
"""
从 TsFile 中查询表格数据。
"""
"""
初始化指定路径的 TsFile 读取器。
:param pathname: TsFile 文件的路径。
:return: 无返回值。
"""
def __init__(self, pathname)
"""
对指定的表和列执行时间范围查询。
:param table_name: 要查询的表名。
:param column_names: 要检索的列名列表。
:param start_time: 查询范围的起始时间(默认:int64 最小值)。
:param end_time: 查询范围的结束时间(默认:int64 最大值)。
:return: 查询结果集处理器。
"""
def query_table(self, table_name : str, column_names : List[str],
start_time : int = np.iinfo(np.int64).min,
end_time: int = np.iinfo(np.int64).max) -> ResultSet
"""
按行查询表,支持偏移量/行数限制下推与可选的标签过滤。标签谓词把查询限定到
标签列取值满足条件的设备。用 tsfile.tag_filter 中的辅助函数构造过滤器
(tag_eq、tag_neq、tag_lt、tag_lteq、tag_gt、tag_gteq、tag_between 等),
并用 &、| 和 ~ 组合。
:param table_name: 要查询的表名。
:param column_names: 要检索的列名列表。
:param offset: 需要跳过的起始行数(默认 0)。
:param limit: 最多返回的行数;< 0 表示不限制。
:param tag_filter: 可选的标签谓词(TagFilter),None 表示不过滤。
:param batch_size: <= 0 逐行返回;> 0 按该大小返回数据块。
:return: 查询结果集处理器。
"""
def query_table_by_row(self, table_name : str, column_names : List[str],
offset : int = 0, limit : int = -1,
tag_filter = None, batch_size : int = 0) -> ResultSet
"""
获取指定表的模式信息。
:param table_name: 表名。
:return: 指定表的模式信息。
"""
def get_table_schema(self, table_name : str) -> TableSchema
"""
获取 TsFile 中所有表的模式信息。
:return: 一个将表名映射到其模式的字典。
"""
def get_all_table_schemas(self) -> dict[str, TableSchema]
"""
关闭 TsFile 读取器。如果读取器中有活动的结果集,它们将失效。
"""
def close(self)
```
### ResultSet
```python
class ResultSet:
"""
用于从查询结果集中获取数据。当执行查询时,将返回一个结果集处理器。
如果读取器被关闭,该结果集将失效。
"""
"""
检查并移动到查询结果集中的下一行。
:return: 如果存在下一行则返回 True,否则返回 False。
"""
def next(self) -> bool
"""
获取结果集的列信息。
:return: 一个字典,键为列名,值为对应的数据类型。
"""
def get_result_column_info(self) -> dict[str, TsDataType]
"""
从查询结果集中读取下一个 DataFrame。
:param max_row_num: 要读取的最大行数,默认值为 1024。
:return: 包含查询结果数据的 DataFrame。
"""
def read_data_frame(self, max_row_num : int = 1024) -> DataFrame
"""
从查询结果集中按索引获取值。
:param index: 要获取值的索引,1 <= index <= column_num。
:return: 指定索引处的值。
"""
def get_value_by_index(self, index : int)
"""
从查询结果集中按列名获取值。
:param column_name: 要获取值的列名。
:return: 指定列的值。
"""
def get_value_by_name(self, column_name : str)
"""
获取结果集的元数据信息。
:return: 结果集的元数据,类型为 ResultSetMetadata 对象。
"""
def get_metadata(self) -> ResultSetMetadata
"""
检查结果集中指定索引位置的字段是否为 null。
:param index: 要检查的字段索引,1 <= index <= column_num。
:return: 若字段为 null 返回 True,否则返回 False。
"""
def is_null_by_index(self, index : int)
"""
检查结果集中指定列名的字段是否为 null。
:param name: 要检查的列名。
:return: 若字段为 null 返回 True,否则返回 False。
"""
def is_null_by_name(self, name : str)
"""
关闭结果集并释放相关资源。
"""
def close(self)
```
### to_dataframe
```Python
def to_dataframe(file_path: str,
table_name: Optional[str] = None,
column_names: Optional[list[str]] = None,
start_time: Optional[int] = None,
end_time: Optional[int] = None,
max_row_num: Optional[int] = None,
as_iterator: bool = False) -> Union[pd.DataFrame, Iterator[pd.DataFrame]]:
"""
从 TsFile 中读取数据,并将其转换为 Pandas DataFrame
或 DataFrame 迭代器。
用户可以通过表名、列名、时间范围以及最大行数对数据进行过滤。
Parameters
----------
file_path : str
要读取的 TsFile 文件路径。
table_name : Optional[str], default None
表模型 TsFile 中要查询的表名。
如果为 None 且文件为表模型,
将使用 schema 中找到的第一个表。
column_names : Optional[list[str]], default None
要查询的列名/测点名列表。
- 如果为 None,则返回所有列。
- 在表模型 TsFile 中会校验列是否存在。
start_time : Optional[int], default None
查询的起始时间戳。
如果为 None,则使用 int64 的最小值。
end_time : Optional[int], default None
查询的结束时间戳。
如果为 None,则使用 int64 的最大值。
max_row_num : Optional[int], default None
读取的最大行数。
- 如果为 None,则返回所有可用数据。
- 当 `as_iterator` 为 False 时,
若结果行数超过该值,DataFrame 将被截断。
as_iterator : bool, default False
是否返回 DataFrame 迭代器,而不是单个合并后的 DataFrame。
- True:返回按批次生成 DataFrame 的迭代器
- False:返回单个 Pandas DataFrame
Returns
-------
Union[pandas.DataFrame, Iterator[pandas.DataFrame]]
- 当 `as_iterator` 为 False 时,返回 Pandas DataFrame
- 当 `as_iterator` 为 True 时,返回 Pandas DataFrame 迭代器
Raises
------
TableNotExistError
当指定的表名在表模型 TsFile 中不存在时抛出。
ColumnNotExistError
当指定的列在表结构中不存在时抛出。
"""
```