blob: cae992b2855f58f6237b8a5dc8fad09d813eb758 [file] [log] [blame]
# 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.
#
import os
import pytest
from tsfile import TsFileWriter, TimeseriesSchema, DeviceSchema, ColumnCategory
from tsfile import ColumnSchema, TableSchema
from tsfile import Tablet, RowRecord, Field
from tsfile import TSDataType
def test_row_record_write():
try:
writer = TsFileWriter("record_write.tsfile")
timeseries = TimeseriesSchema("level1", TSDataType.INT64)
writer.register_timeseries("root.device1", timeseries)
record = RowRecord("root.device1", 10,[Field("level1", 10, TSDataType.INT64)])
writer.write_row_record(record)
writer.close()
finally:
if os.path.exists("record_write.tsfile"):
os.remove("record_write.tsfile")
def test_tablet_write():
try:
writer = TsFileWriter("tablet_write.tsfile")
timeseries1 = TimeseriesSchema("level1", TSDataType.INT64)
timeseries2 = TimeseriesSchema("level2", TSDataType.DOUBLE)
device = DeviceSchema("root.device1", [timeseries1, timeseries2])
writer.register_device(device)
tablet = Tablet(["level1", "level2"], [TSDataType.INT64, TSDataType.DOUBLE], 100)
tablet.set_table_name("root.device1")
for i in range(100):
tablet.add_timestamp(i, i)
tablet.add_value_by_index(0, i, i + 1)
tablet.add_value_by_name("level2", i, i * 0.1)
writer.write_tablet(tablet)
writer.close()
finally:
if os.path.exists("tablet_write.tsfile"):
os.remove("tablet_write.tsfile")
def test_tablet_write():
try:
writer = TsFileWriter("tablet_write.tsfile")
timeseries1 = TimeseriesSchema("level1", TSDataType.INT64)
timeseries2 = TimeseriesSchema("level2", TSDataType.DOUBLE)
device = DeviceSchema("root.device1", [timeseries1, timeseries2])
writer.register_device(device)
tablet = Tablet(["level1", "level2"], [TSDataType.INT64, TSDataType.DOUBLE], 100)
tablet.set_table_name("root.device1")
for i in range(100):
tablet.add_timestamp(i, i)
tablet.add_value_by_index(0, i, i + 1)
tablet.add_value_by_name("level2", i, i * 0.1)
writer.write_tablet(tablet)
writer.close()
finally:
if os.path.exists("tablet_write.tsfile"):
os.remove("tablet_write.tsfile")
def test_table_write():
try:
with TsFileWriter("table_write.tsfile") as writer:
column1 = ColumnSchema("device", TSDataType.STRING, ColumnCategory.TAG)
column2 = ColumnSchema("sensor", TSDataType.STRING, ColumnCategory.TAG)
column3 = ColumnSchema("value1", TSDataType.DOUBLE)
column4 = ColumnSchema("value2", TSDataType.INT32, ColumnCategory.FIELD)
table = TableSchema("test_table", [column1, column2, column3, column4])
writer.register_table(table)
row_num = 100
tablet = Tablet( ["device", "sensor", "value1", "value2"],
[TSDataType.STRING, TSDataType.STRING, TSDataType.DOUBLE, TSDataType.INT32],
row_num)
tablet.set_table_name("test_table")
for i in range(100):
tablet.add_timestamp(i, i)
tablet.add_value_by_name("device", i, "device" + str(i))
tablet.add_value_by_name("sensor", i, "sensor" + str(i))
tablet.add_value_by_name("value1", i, i * 10.1)
tablet.add_value_by_index(3, i, 1 * 100)
writer.write_table(tablet)
finally:
if os.path.exists("table_write.tsfile"):
os.remove("table_write.tsfile")
def test_flush():
file_name = "table_flush.tsfile"
try:
with TsFileWriter(file_name) as writer:
origin_size = os.path.getsize(file_name)
column1 = ColumnSchema("item_id", TSDataType.STRING, ColumnCategory.TAG)
column2 = ColumnSchema("value", TSDataType.DOUBLE)
table = TableSchema("test_flush", [column1, column2])
writer.register_table(table)
row_num = 100
tablet = Tablet(["item_id", "value"],
[TSDataType.STRING, TSDataType.DOUBLE],
row_num)
tablet.set_table_name("test_flush")
for i in range(100):
tablet.add_timestamp(i, i)
tablet.add_value_by_name("item_id", i, str(i))
tablet.add_value_by_name("value", i, i * 10.1)
writer.write_table(tablet)
assert os.path.getsize(file_name) == origin_size
writer.flush()
assert os.path.getsize(file_name) > origin_size
finally:
if os.path.exists(file_name):
os.remove(file_name)