blob: 70f9730e2d0032e6662d46e2fcf2228422e23b79 [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 numpy as np
from iotdb.table_session import TableSession, TableSessionConfig
from iotdb.utils.BitMap import BitMap
from iotdb.utils.IoTDBConstants import TSDataType
from iotdb.utils.Tablet import Tablet, ColumnType
from iotdb.utils.NumpyTablet import NumpyTablet
from datetime import date
from .iotdb_container import IoTDBContainer
# Test inserting tablet data
def test_insert_use_tablet():
with IoTDBContainer("iotdb:dev") as db:
db: IoTDBContainer
config = TableSessionConfig(
node_urls=[f"{db.get_container_host_ip()}:{db.get_exposed_port(6667)}"]
)
session = TableSession(config)
# Preparation before testing
session.execute_non_query_statement(
"create database test_insert_relational_tablet_tablet"
)
session.execute_non_query_statement("use test_insert_relational_tablet_tablet")
session.execute_non_query_statement(
"create table table_a("
'"地区" STRING TAG, "厂号" STRING TAG, "设备号" STRING TAG, '
'"日期" string attribute, "时间" string attribute, "负责人" string attribute,'
'"测点1" BOOLEAN FIELD, "测点2" INT32 FIELD, "测点3" INT64 FIELD, "测点4" FLOAT FIELD, "测点5" DOUBLE FIELD,'
'"测点6" TEXT FIELD, "测点7" TIMESTAMP FIELD, "测点8" DATE FIELD, "测点9" BLOB FIELD, "测点10" STRING FIELD)'
)
session.execute_non_query_statement(
"create table table_b("
"tag1 STRING TAG, tag2 STRING TAG, tag3 STRING TAG, "
"attr1 string attribute, attr2 string attribute, attr3 string attribute,"
"BOOLEAN BOOLEAN FIELD, INT32 INT32 FIELD, INT64 INT64 FIELD, FLOAT FLOAT FIELD, DOUBLE DOUBLE FIELD,"
"TEXT TEXT FIELD, TIMESTAMP TIMESTAMP FIELD, DATE DATE FIELD, BLOB BLOB FIELD, STRING STRING FIELD)"
)
# 1、General scenario
expect = 10
table_name = "table_b"
column_names = [
"tag1",
"tag2",
"tag3",
"attr1",
"attr2",
"attr3",
"BOOLEAN",
"INT32",
"INT64",
"FLOAT",
"DOUBLE",
"TEXT",
"TIMESTAMP",
"DATE",
"BLOB",
"STRING",
]
data_types = [
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.BOOLEAN,
TSDataType.INT32,
TSDataType.INT64,
TSDataType.FLOAT,
TSDataType.DOUBLE,
TSDataType.TEXT,
TSDataType.TIMESTAMP,
TSDataType.DATE,
TSDataType.BLOB,
TSDataType.STRING,
]
column_types = [
ColumnType.TAG,
ColumnType.TAG,
ColumnType.TAG,
ColumnType.ATTRIBUTE,
ColumnType.ATTRIBUTE,
ColumnType.ATTRIBUTE,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
]
timestamps = []
values = []
for row_b in range(10):
timestamps.append(row_b)
values.append(
[
"tag1:" + str(row_b),
"tag2:" + str(row_b),
"tag3:" + str(row_b),
"attr1:" + str(row_b),
"attr2:" + str(row_b),
"attr3:" + str(row_b),
False,
0,
0,
0.0,
0.0,
"1234567890",
0,
date(1970, 1, 1),
"1234567890".encode("utf-8"),
"1234567890",
]
)
values.append(
[
"tag1:" + str(row_b),
"tag2:" + str(row_b),
"tag3:" + str(row_b),
"attr1:" + str(row_b),
"attr2:" + str(row_b),
"attr3:" + str(row_b),
True,
-2147483648,
-9223372036854775808,
-0.12345678,
-0.12345678901234567,
"abcdefghijklmnopqrstuvwsyz",
-9223372036854775808,
date(1000, 1, 1),
"abcdefghijklmnopqrstuvwsyz".encode("utf-8"),
"abcdefghijklmnopqrstuvwsyz",
]
)
values.append(
[
"tag1:" + str(row_b),
"tag2:" + str(row_b),
"tag3:" + str(row_b),
"attr1:" + str(row_b),
"attr2:" + str(row_b),
"attr3:" + str(row_b),
True,
2147483647,
9223372036854775807,
0.123456789,
0.12345678901234567,
"!@#$%^&*()_+}{|:'`~-=[];,./<>?~",
9223372036854775807,
date(9999, 12, 31),
"!@#$%^&*()_+}{|:`~-=[];,./<>?~".encode("utf-8"),
"!@#$%^&*()_+}{|:`~-=[];,./<>?~",
]
)
values.append(
[
"tag1:" + str(row_b),
"tag2:" + str(row_b),
"tag3:" + str(row_b),
"attr1:" + str(row_b),
"attr2:" + str(row_b),
"attr3:" + str(row_b),
True,
1,
1,
1.0,
1.0,
"没问题",
1,
date(1970, 1, 1),
"没问题".encode("utf-8"),
"没问题",
]
)
values.append(
[
"tag1:" + str(row_b),
"tag2:" + str(row_b),
"tag3:" + str(row_b),
"attr1:" + str(row_b),
"attr2:" + str(row_b),
"attr3:" + str(row_b),
True,
-1,
-1,
1.1234567,
1.1234567890123456,
"!@#¥%……&*()——|:“《》?·【】、;‘,。/",
11,
date(1970, 1, 1),
"!@#¥%……&*()——|:“《》?·【】、;‘,。/".encode("utf-8"),
"!@#¥%……&*()——|:“《》?·【】、;‘,。/",
]
)
values.append(
[
"tag1:" + str(row_b),
"tag2:" + str(row_b),
"tag3:" + str(row_b),
"attr1:" + str(row_b),
"attr2:" + str(row_b),
"attr3:" + str(row_b),
True,
10,
11,
4.123456,
4.123456789012345,
"1234567890abcdefghijklmnopqrstuvwsyz!@#$%^&*()_+}{|:'`~-=[];,./<>?~!@#¥%……&*()——|:“《》?·【】、;‘,。/没问题",
11,
date(1970, 1, 1),
"1234567890abcdefghijklmnopqrstuvwsyz!@#$%^&*()_+}{|:`~-=[];,./<>?~!@#¥%……&*()——|:“《》?·【】、;‘,。/没问题".encode(
"utf-8"
),
"1234567890abcdefghijklmnopqrstuvwsyz!@#$%^&*()_+}{|:`~-=[];,./<>?~!@#¥%……&*()——|:“《》?·【】、;‘,。/没问题",
]
)
values.append(
[
"tag1:" + str(row_b),
"tag2:" + str(row_b),
"tag3:" + str(row_b),
"attr1:" + str(row_b),
"attr2:" + str(row_b),
"attr3:" + str(row_b),
True,
-10,
-11,
12.12345,
12.12345678901234,
"test01",
11,
date(1970, 1, 1),
"Hello, World!".encode("utf-8"),
"string01",
]
)
values.append(
[
"tag1:" + str(row_b),
"tag2:" + str(row_b),
"tag3:" + str(row_b),
"attr1:" + str(row_b),
"attr2:" + str(row_b),
"attr3:" + str(row_b),
None,
None,
None,
None,
None,
"",
None,
date(1970, 1, 1),
"".encode("utf-8"),
"",
]
)
values.append(
[
"tag1:" + str(row_b),
"tag2:" + str(row_b),
"tag3:" + str(row_b),
"attr1:" + str(row_b),
"attr2:" + str(row_b),
"attr3:" + str(row_b),
True,
-0,
-0,
-0.0,
-0.0,
" ",
11,
date(1970, 1, 1),
" ".encode("utf-8"),
" ",
]
)
values.append(
[
"tag1:" + str(row_b),
"tag2:" + str(row_b),
"tag3:" + str(row_b),
"attr1:" + str(row_b),
"attr2:" + str(row_b),
"attr3:" + str(row_b),
True,
10,
11,
1.1,
10011.1,
"test01",
11,
date(1970, 1, 1),
"Hello, World!".encode("utf-8"),
"string01",
]
)
tablet = Tablet(
table_name, column_names, data_types, values, timestamps, column_types
)
session.insert(tablet)
# Calculate the number of rows in the actual time series
actual = 0
with session.execute_query_statement(
"select * from table_b"
) as session_data_set:
print(session_data_set.get_column_names())
while session_data_set.has_next():
print(session_data_set.next())
actual = actual + 1
# Determine whether it meets expectations
assert expect == actual
# 2、Including Chinese scenes
expect = 10
table_name = "table_a"
column_names = [
"地区",
"厂号",
"设备号",
"日期",
"时间",
"负责人",
"测点1",
"测点2",
"测点3",
"测点4",
"测点5",
"测点6",
"测点7",
"测点8",
"测点9",
"测点10",
]
data_types = [
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.BOOLEAN,
TSDataType.INT32,
TSDataType.INT64,
TSDataType.FLOAT,
TSDataType.DOUBLE,
TSDataType.TEXT,
TSDataType.TIMESTAMP,
TSDataType.DATE,
TSDataType.BLOB,
TSDataType.STRING,
]
column_types = [
ColumnType.TAG,
ColumnType.TAG,
ColumnType.TAG,
ColumnType.ATTRIBUTE,
ColumnType.ATTRIBUTE,
ColumnType.ATTRIBUTE,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
]
timestamps = []
values = []
for row_a in range(10):
timestamps.append(row_a)
values.append(
[
"tag1:" + str(row_a),
"tag2:" + str(row_a),
"tag3:" + str(row_a),
"attr1:" + str(row_a),
"attr2:" + str(row_a),
"attr3:" + str(row_a),
False,
0,
0,
0.0,
0.0,
"1234567890",
0,
date(1970, 1, 1),
"1234567890".encode("utf-8"),
"1234567890",
]
)
values.append(
[
"tag1:" + str(row_a),
"tag2:" + str(row_a),
"tag3:" + str(row_a),
"attr1:" + str(row_a),
"attr2:" + str(row_a),
"attr3:" + str(row_a),
True,
-2147483648,
-9223372036854775808,
-0.12345678,
-0.12345678901234567,
"abcdefghijklmnopqrstuvwsyz",
-9223372036854775808,
date(1000, 1, 1),
"abcdefghijklmnopqrstuvwsyz".encode("utf-8"),
"abcdefghijklmnopqrstuvwsyz",
]
)
values.append(
[
"tag1:" + str(row_a),
"tag2:" + str(row_a),
"tag3:" + str(row_a),
"attr1:" + str(row_a),
"attr2:" + str(row_a),
"attr3:" + str(row_a),
True,
2147483647,
9223372036854775807,
0.123456789,
0.12345678901234567,
"!@#$%^&*()_+}{|:'`~-=[];,./<>?~",
9223372036854775807,
date(9999, 12, 31),
"!@#$%^&*()_+}{|:`~-=[];,./<>?~".encode("utf-8"),
"!@#$%^&*()_+}{|:`~-=[];,./<>?~",
]
)
values.append(
[
"tag1:" + str(row_a),
"tag2:" + str(row_a),
"tag3:" + str(row_a),
"attr1:" + str(row_a),
"attr2:" + str(row_a),
"attr3:" + str(row_a),
True,
1,
1,
1.0,
1.0,
"没问题",
1,
date(1970, 1, 1),
"没问题".encode("utf-8"),
"没问题",
]
)
values.append(
[
"tag1:" + str(row_a),
"tag2:" + str(row_a),
"tag3:" + str(row_a),
"attr1:" + str(row_a),
"attr2:" + str(row_a),
"attr3:" + str(row_a),
True,
-1,
-1,
1.1234567,
1.1234567890123456,
"!@#¥%……&*()——|:“《》?·【】、;‘,。/",
11,
date(1970, 1, 1),
"!@#¥%……&*()——|:“《》?·【】、;‘,。/".encode("utf-8"),
"!@#¥%……&*()——|:“《》?·【】、;‘,。/",
]
)
values.append(
[
"tag1:" + str(row_a),
"tag2:" + str(row_a),
"tag3:" + str(row_a),
"attr1:" + str(row_a),
"attr2:" + str(row_a),
"attr3:" + str(row_a),
True,
10,
11,
4.123456,
4.123456789012345,
"1234567890abcdefghijklmnopqrstuvwsyz!@#$%^&*()_+}{|:'`~-=[];,./<>?~!@#¥%……&*()——|:“《》?·【】、;‘,。/没问题",
11,
date(1970, 1, 1),
"1234567890abcdefghijklmnopqrstuvwsyz!@#$%^&*()_+}{|:`~-=[];,./<>?~!@#¥%……&*()——|:“《》?·【】、;‘,。/没问题".encode(
"utf-8"
),
"1234567890abcdefghijklmnopqrstuvwsyz!@#$%^&*()_+}{|:`~-=[];,./<>?~!@#¥%……&*()——|:“《》?·【】、;‘,。/没问题",
]
)
values.append(
[
"tag1:" + str(row_a),
"tag2:" + str(row_a),
"tag3:" + str(row_a),
"attr1:" + str(row_a),
"attr2:" + str(row_a),
"attr3:" + str(row_a),
True,
-10,
-11,
12.12345,
12.12345678901234,
"test01",
11,
date(1970, 1, 1),
"Hello, World!".encode("utf-8"),
"string01",
]
)
values.append(
[
"tag1:" + str(row_a),
"tag2:" + str(row_a),
"tag3:" + str(row_a),
"attr1:" + str(row_a),
"attr2:" + str(row_a),
"attr3:" + str(row_a),
None,
None,
None,
None,
None,
"",
None,
date(1970, 1, 1),
"".encode("utf-8"),
"",
]
)
values.append(
[
"tag1:" + str(row_a),
"tag2:" + str(row_a),
"tag3:" + str(row_a),
"attr1:" + str(row_a),
"attr2:" + str(row_a),
"attr3:" + str(row_a),
True,
-0,
-0,
-0.0,
-0.0,
" ",
11,
date(1970, 1, 1),
" ".encode("utf-8"),
" ",
]
)
values.append(
[
"tag1:" + str(row_a),
"tag2:" + str(row_a),
"tag3:" + str(row_a),
"attr1:" + str(row_a),
"attr2:" + str(row_a),
"attr3:" + str(row_a),
True,
10,
11,
1.1,
10011.1,
"test01",
11,
date(1970, 1, 1),
"Hello, World!".encode("utf-8"),
"string01",
]
)
tablet = Tablet(
table_name, column_names, data_types, values, timestamps, column_types
)
session.insert(tablet)
# Calculate the number of rows in the actual time series
actual = 0
with session.execute_query_statement(
"select * from table_a"
) as session_data_set:
print(session_data_set.get_column_names())
while session_data_set.has_next():
print(session_data_set.next())
actual = actual + 1
# Determine whether it meets expectations
assert expect == actual
session.close()
# Test inserting NumpyTablet data
def test_insert_relational_tablet_use_numpy_tablet():
with IoTDBContainer("iotdb:dev") as db:
db: IoTDBContainer
config = TableSessionConfig(
node_urls=[f"{db.get_container_host_ip()}:{db.get_exposed_port(6667)}"]
)
session = TableSession(config)
# Preparation before testing
session.execute_non_query_statement(
"create database test_insert_relational_tablet_use_numpy_tablet"
)
session.execute_non_query_statement(
"use test_insert_relational_tablet_use_numpy_tablet"
)
session.execute_non_query_statement(
"create table table_b("
"tag1 STRING TAG, tag2 STRING TAG, tag3 STRING TAG, "
"attr1 string attribute, attr2 string attribute, attr3 string attribute,"
"BOOLEAN BOOLEAN FIELD, INT32 INT32 FIELD, INT64 INT64 FIELD, FLOAT FLOAT FIELD, DOUBLE DOUBLE FIELD,"
"TEXT TEXT FIELD, TIMESTAMP TIMESTAMP FIELD, DATE DATE FIELD, BLOB BLOB FIELD, STRING STRING FIELD)"
)
session.execute_non_query_statement(
"create table table_d("
"tag1 STRING TAG, tag2 STRING TAG, tag3 STRING TAG, "
"attr1 string attribute, attr2 string attribute, attr3 string attribute,"
"BOOLEAN BOOLEAN FIELD, INT32 INT32 FIELD, INT64 INT64 FIELD, FLOAT FLOAT FIELD, DOUBLE DOUBLE FIELD,"
"TEXT TEXT FIELD, TIMESTAMP TIMESTAMP FIELD, DATE DATE FIELD, BLOB BLOB FIELD, STRING STRING FIELD)"
)
# 1、No null
expect = 10
table_name = "table_b"
column_names = [
"tag1",
"tag2",
"tag3",
"attr1",
"attr2",
"attr3",
"BOOLEAN",
"INT32",
"INT64",
"FLOAT",
"DOUBLE",
"TEXT",
"TIMESTAMP",
"DATE",
"BLOB",
"STRING",
]
data_types = [
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.BOOLEAN,
TSDataType.INT32,
TSDataType.INT64,
TSDataType.FLOAT,
TSDataType.DOUBLE,
TSDataType.TEXT,
TSDataType.TIMESTAMP,
TSDataType.DATE,
TSDataType.BLOB,
TSDataType.STRING,
]
column_types = [
ColumnType.TAG,
ColumnType.TAG,
ColumnType.TAG,
ColumnType.ATTRIBUTE,
ColumnType.ATTRIBUTE,
ColumnType.ATTRIBUTE,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
]
np_timestamps = np.arange(0, 10, dtype=np.dtype(">i8"))
np_values = [
np.array(["tag1:{}".format(i) for i in range(0, 10)]),
np.array(["tag2:{}".format(i) for i in range(0, 10)]),
np.array(["tag3:{}".format(i) for i in range(0, 10)]),
np.array(["attr1:{}".format(i) for i in range(0, 10)]),
np.array(["attr2:{}".format(i) for i in range(0, 10)]),
np.array(["attr3:{}".format(i) for i in range(0, 10)]),
np.array(
[False, True, False, True, False, True, False, True, False, True],
TSDataType.BOOLEAN.np_dtype(),
),
np.array(
[0, -2147483648, 2147483647, 1, -1, 10, -10, -0, 10, 10],
TSDataType.INT32.np_dtype(),
),
np.array(
[
0,
-9223372036854775808,
9223372036854775807,
1,
-1,
10,
-10,
-0,
10,
10,
],
TSDataType.INT64.np_dtype(),
),
np.array(
[
0.0,
-0.12345678,
0.123456789,
1.0,
1.1234567,
4.123456,
12.12345,
-0.0,
1.1,
1.1,
],
TSDataType.FLOAT.np_dtype(),
),
np.array(
[
0.0,
-0.12345678901234567,
0.12345678901234567,
1.0,
1.1234567890123456,
4.123456789012345,
12.12345678901234,
-0.0,
1.1,
1.1,
],
TSDataType.DOUBLE.np_dtype(),
),
np.array(
[
"1234567890",
"abcdefghijklmnopqrstuvwsyz",
"!@#$%^&*()_+}{|:'`~-=[];,./<>?~",
"没问题",
"!@#¥%……&*()——|:“《》?·【】、;‘,。/",
"1234567890abcdefghijklmnopqrstuvwsyz!@#$%^&*()_+}{|:'`~-=[];,./<>?~!@#¥%……&*()——|:“《》?·【】、;‘,。/没问题",
"",
" ",
"test01",
"test01",
],
TSDataType.TEXT.np_dtype(),
),
np.array(
[
0,
-9223372036854775808,
9223372036854775807,
1,
-1,
10,
-10,
-0,
10,
10,
],
TSDataType.TIMESTAMP.np_dtype(),
),
np.array(
[
date(1970, 1, 1),
date(1000, 1, 1),
date(9999, 12, 31),
date(1970, 1, 1),
date(1970, 1, 1),
date(1970, 1, 1),
date(1970, 1, 1),
date(1970, 1, 1),
date(1970, 1, 1),
date(1970, 1, 1),
],
TSDataType.DATE.np_dtype(),
),
np.array(
[
"1234567890".encode("utf-8"),
"abcdefghijklmnopqrstuvwsyz".encode("utf-8"),
"!@#$%^&*()_+}{|:`~-=[];,./<>?~".encode("utf-8"),
"没问题".encode("utf-8"),
"!@#¥%……&*()——|:“《》?·【】、;‘,。/".encode("utf-8"),
"1234567890abcdefghijklmnopqrstuvwsyz!@#$%^&*()_+}{|:`~-=[];,./<>?~!@#¥%……&*()——|:“《》?·【】、;‘,。/没问题".encode(
"utf-8"
),
"".encode("utf-8"),
" ".encode("utf-8"),
"1234567890".encode("utf-8"),
"1234567890".encode("utf-8"),
],
TSDataType.BLOB.np_dtype(),
),
np.array(
[
"1234567890",
"abcdefghijklmnopqrstuvwsyz",
"!@#$%^&*()_+}{|:'`~-=[];,./<>?~",
"没问题",
"!@#¥%……&*()——|:“《》?·【】、;‘,。/",
"1234567890abcdefghijklmnopqrstuvwsyz!@#$%^&*()_+}{|:'`~-=[];,./<>?~!@#¥%……&*()——|:“《》?·【】、;‘,。/没问题",
"",
" ",
"test01",
"test01",
],
TSDataType.STRING.np_dtype(),
),
]
np_tablet = NumpyTablet(
table_name,
column_names,
data_types,
np_values,
np_timestamps,
column_types=column_types,
)
session.insert(np_tablet)
# Calculate the number of rows in the actual time series
actual = 0
with session.execute_query_statement(
"select * from table_b"
) as session_data_set:
print(session_data_set.get_column_names())
while session_data_set.has_next():
print(session_data_set.next())
actual = actual + 1
# Determine whether it meets expectations
assert expect == actual
# 2、Contains null
expect = 10
table_name = "table_d"
column_names = [
"tag1",
"tag2",
"tag3",
"attr1",
"attr2",
"attr3",
"BOOLEAN",
"INT32",
"INT64",
"FLOAT",
"DOUBLE",
"TEXT",
"TIMESTAMP",
"DATE",
"BLOB",
"STRING",
]
data_types = [
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.BOOLEAN,
TSDataType.INT32,
TSDataType.INT64,
TSDataType.FLOAT,
TSDataType.DOUBLE,
TSDataType.TEXT,
TSDataType.TIMESTAMP,
TSDataType.DATE,
TSDataType.BLOB,
TSDataType.STRING,
]
column_types = [
ColumnType.TAG,
ColumnType.TAG,
ColumnType.TAG,
ColumnType.ATTRIBUTE,
ColumnType.ATTRIBUTE,
ColumnType.ATTRIBUTE,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
]
np_timestamps = np.arange(0, 10, dtype=np.dtype(">i8"))
np_values = [
np.array(["tag1:{}".format(i) for i in range(0, 10)]),
np.array(["tag2:{}".format(i) for i in range(0, 10)]),
np.array(["tag3:{}".format(i) for i in range(0, 10)]),
np.array(["attr1:{}".format(i) for i in range(0, 10)]),
np.array(["attr2:{}".format(i) for i in range(0, 10)]),
np.array(["attr3:{}".format(i) for i in range(0, 10)]),
np.array(
[False, True, False, True, False, True, False, True, False, True],
TSDataType.BOOLEAN.np_dtype(),
),
np.array(
[0, -2147483648, 2147483647, 1, -1, 10, -10, -0, 10, 10],
TSDataType.INT32.np_dtype(),
),
np.array(
[
0,
-9223372036854775808,
9223372036854775807,
1,
-1,
10,
-10,
-0,
10,
10,
],
TSDataType.INT64.np_dtype(),
),
np.array(
[
0.0,
-0.12345678,
0.123456789,
1.0,
1.1234567,
4.123456,
12.12345,
-0.0,
1.1,
1.1,
],
TSDataType.FLOAT.np_dtype(),
),
np.array(
[
0.0,
-0.12345678901234567,
0.12345678901234567,
1.0,
1.1234567890123456,
4.123456789012345,
12.12345678901234,
-0.0,
1.1,
1.1,
],
TSDataType.DOUBLE.np_dtype(),
),
np.array(
[
"1234567890",
"abcdefghijklmnopqrstuvwsyz",
"!@#$%^&*()_+}{|:'`~-=[];,./<>?~",
"没问题",
"!@#¥%……&*()——|:“《》?·【】、;‘,。/",
"1234567890abcdefghijklmnopqrstuvwsyz!@#$%^&*()_+}{|:'`~-=[];,./<>?~!@#¥%……&*()——|:“《》?·【】、;‘,。/没问题",
"",
" ",
"test01",
"test01",
],
TSDataType.TEXT.np_dtype(),
),
np.array(
[
0,
-9223372036854775808,
9223372036854775807,
1,
-1,
10,
-10,
-0,
10,
10,
],
TSDataType.TIMESTAMP.np_dtype(),
),
np.array(
[
date(1970, 1, 1),
date(1000, 1, 1),
date(9999, 12, 31),
date(1970, 1, 1),
date(1970, 1, 1),
date(1970, 1, 1),
date(1970, 1, 1),
date(1970, 1, 1),
date(1970, 1, 1),
date(1970, 1, 1),
],
TSDataType.DATE.np_dtype(),
),
np.array(
[
"1234567890".encode("utf-8"),
"abcdefghijklmnopqrstuvwsyz".encode("utf-8"),
"!@#$%^&*()_+}{|:`~-=[];,./<>?~".encode("utf-8"),
"没问题".encode("utf-8"),
"!@#¥%……&*()——|:“《》?·【】、;‘,。/".encode("utf-8"),
"1234567890abcdefghijklmnopqrstuvwsyz!@#$%^&*()_+}{|:`~-=[];,./<>?~!@#¥%……&*()——|:“《》?·【】、;‘,。/没问题".encode(
"utf-8"
),
"".encode("utf-8"),
" ".encode("utf-8"),
"1234567890".encode("utf-8"),
"1234567890".encode("utf-8"),
],
TSDataType.BLOB.np_dtype(),
),
np.array(
[
"1234567890",
"abcdefghijklmnopqrstuvwsyz",
"!@#$%^&*()_+}{|:'`~-=[];,./<>?~",
"没问题",
"!@#¥%……&*()——|:“《》?·【】、;‘,。/",
"1234567890abcdefghijklmnopqrstuvwsyz!@#$%^&*()_+}{|:'`~-=[];,./<>?~!@#¥%……&*()——|:“《》?·【】、;‘,。/没问题",
"",
" ",
"test01",
"test01",
],
TSDataType.STRING.np_dtype(),
),
]
np_bitmaps_ = []
for i in range(len(column_types)):
np_bitmaps_.append(BitMap(len(np_timestamps)))
np_bitmaps_[5].mark(9)
np_bitmaps_[6].mark(8)
np_bitmaps_[7].mark(9)
np_bitmaps_[8].mark(8)
np_bitmaps_[9].mark(9)
np_bitmaps_[10].mark(8)
np_bitmaps_[11].mark(9)
np_bitmaps_[12].mark(8)
np_bitmaps_[13].mark(9)
np_bitmaps_[14].mark(8)
np_tablet = NumpyTablet(
table_name,
column_names,
data_types,
np_values,
np_timestamps,
bitmaps=np_bitmaps_,
column_types=column_types,
)
session.insert(np_tablet)
# Calculate the number of rows in the actual time series
actual = 0
with session.execute_query_statement(
"select * from table_d"
) as session_data_set:
print(session_data_set.get_column_names())
while session_data_set.has_next():
print(session_data_set.next())
actual = actual + 1
# Determine whether it meets expectations
assert expect == actual
session.close()
# Test automatic creation
def test_insert_relational_tablet_auto_create():
with IoTDBContainer("iotdb:dev") as db:
db: IoTDBContainer
config = TableSessionConfig(
node_urls=[f"{db.get_container_host_ip()}:{db.get_exposed_port(6667)}"]
)
session = TableSession(config)
# Preparation before testing
session.execute_non_query_statement(
"create database test_insert_relational_tablet_use_numpy_tablet"
)
session.execute_non_query_statement(
"use test_insert_relational_tablet_use_numpy_tablet"
)
# 1、Test inserting tablet data(Insert 10 times)
for i in range(1, 10):
table_name = "t" + str(i)
column_names = [
"tag1",
"tag2",
"tag3",
"attr1",
"attr2",
"attr3",
"BOOLEAN",
"INT32",
"INT64",
"FLOAT",
"DOUBLE",
"TEXT",
"TIMESTAMP",
"DATE",
"BLOB",
"STRING",
]
data_types = [
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.BOOLEAN,
TSDataType.INT32,
TSDataType.INT64,
TSDataType.FLOAT,
TSDataType.DOUBLE,
TSDataType.TEXT,
TSDataType.TIMESTAMP,
TSDataType.DATE,
TSDataType.BLOB,
TSDataType.STRING,
]
column_types = [
ColumnType.TAG,
ColumnType.TAG,
ColumnType.TAG,
ColumnType.ATTRIBUTE,
ColumnType.ATTRIBUTE,
ColumnType.ATTRIBUTE,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
]
timestamps = []
values = []
for row in range(10):
timestamps.append(row)
values.append(
[
"tag1:" + str(row),
"tag2:" + str(row),
"tag3:" + str(row),
"attr1:" + str(row),
"attr2:" + str(row),
"attr3:" + str(row),
False,
0,
0,
0.0,
0.0,
"1234567890",
0,
date(1970, 1, 1),
"1234567890".encode("utf-8"),
"1234567890",
]
)
values.append(
[
"tag1:" + str(row),
"tag2:" + str(row),
"tag3:" + str(row),
"attr1:" + str(row),
"attr2:" + str(row),
"attr3:" + str(row),
True,
-2147483648,
-9223372036854775808,
-0.12345678,
-0.12345678901234567,
"abcdefghijklmnopqrstuvwsyz",
-9223372036854775808,
date(1000, 1, 1),
"abcdefghijklmnopqrstuvwsyz".encode("utf-8"),
"abcdefghijklmnopqrstuvwsyz",
]
)
values.append(
[
"tag1:" + str(row),
"tag2:" + str(row),
"tag3:" + str(row),
"attr1:" + str(row),
"attr2:" + str(row),
"attr3:" + str(row),
True,
2147483647,
9223372036854775807,
0.123456789,
0.12345678901234567,
"!@#$%^&*()_+}{|:'`~-=[];,./<>?~",
9223372036854775807,
date(9999, 12, 31),
"!@#$%^&*()_+}{|:`~-=[];,./<>?~".encode("utf-8"),
"!@#$%^&*()_+}{|:`~-=[];,./<>?~",
]
)
values.append(
[
"tag1:" + str(row),
"tag2:" + str(row),
"tag3:" + str(row),
"attr1:" + str(row),
"attr2:" + str(row),
"attr3:" + str(row),
True,
1,
1,
1.0,
1.0,
"没问题",
1,
date(1970, 1, 1),
"没问题".encode("utf-8"),
"没问题",
]
)
values.append(
[
"tag1:" + str(row),
"tag2:" + str(row),
"tag3:" + str(row),
"attr1:" + str(row),
"attr2:" + str(row),
"attr3:" + str(row),
True,
-1,
-1,
1.1234567,
1.1234567890123456,
"!@#¥%……&*()——|:“《》?·【】、;‘,。/",
11,
date(1970, 1, 1),
"!@#¥%……&*()——|:“《》?·【】、;‘,。/".encode("utf-8"),
"!@#¥%……&*()——|:“《》?·【】、;‘,。/",
]
)
values.append(
[
"tag1:" + str(row),
"tag2:" + str(row),
"tag3:" + str(row),
"attr1:" + str(row),
"attr2:" + str(row),
"attr3:" + str(row),
True,
10,
11,
4.123456,
4.123456789012345,
"1234567890abcdefghijklmnopqrstuvwsyz!@#$%^&*()_+}{|:'`~-=[];,./<>?~!@#¥%……&*()——|:“《》?·【】、;‘,。/没问题",
11,
date(1970, 1, 1),
"1234567890abcdefghijklmnopqrstuvwsyz!@#$%^&*()_+}{|:`~-=[];,./<>?~!@#¥%……&*()——|:“《》?·【】、;‘,。/没问题".encode(
"utf-8"
),
"1234567890abcdefghijklmnopqrstuvwsyz!@#$%^&*()_+}{|:`~-=[];,./<>?~!@#¥%……&*()——|:“《》?·【】、;‘,。/没问题",
]
)
values.append(
[
"tag1:" + str(row),
"tag2:" + str(row),
"tag3:" + str(row),
"attr1:" + str(row),
"attr2:" + str(row),
"attr3:" + str(row),
True,
-10,
-11,
12.12345,
12.12345678901234,
"test01",
11,
date(1970, 1, 1),
"Hello, World!".encode("utf-8"),
"string01",
]
)
values.append(
[
"tag1:" + str(row),
"tag2:" + str(row),
"tag3:" + str(row),
"attr1:" + str(row),
"attr2:" + str(row),
"attr3:" + str(row),
None,
None,
None,
None,
None,
"",
None,
date(1970, 1, 1),
"".encode("utf-8"),
"",
]
)
values.append(
[
"tag1:" + str(row),
"tag2:" + str(row),
"tag3:" + str(row),
"attr1:" + str(row),
"attr2:" + str(row),
"attr3:" + str(row),
True,
-0,
-0,
-0.0,
-0.0,
" ",
11,
date(1970, 1, 1),
" ".encode("utf-8"),
" ",
]
)
values.append(
[
"tag1:" + str(row),
"tag2:" + str(row),
"tag3:" + str(row),
"attr1:" + str(row),
"attr2:" + str(row),
"attr3:" + str(row),
True,
10,
11,
1.1,
10011.1,
"test01",
11,
date(1970, 1, 1),
"Hello, World!".encode("utf-8"),
"string01",
]
)
tablet = Tablet(
table_name, column_names, data_types, values, timestamps, column_types
)
session.insert(tablet)
# 2、Test inserting NumpyTablet data(Insert 10 times)
for i in range(1, 10):
table_name = "t" + str(i)
column_names = [
"tag1",
"tag2",
"tag3",
"attr1",
"attr2",
"attr3",
"BOOLEAN",
"INT32",
"INT64",
"FLOAT",
"DOUBLE",
"TEXT",
"TIMESTAMP",
"DATE",
"BLOB",
"STRING",
]
data_types = [
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.BOOLEAN,
TSDataType.INT32,
TSDataType.INT64,
TSDataType.FLOAT,
TSDataType.DOUBLE,
TSDataType.TEXT,
TSDataType.TIMESTAMP,
TSDataType.DATE,
TSDataType.BLOB,
TSDataType.STRING,
]
column_types = [
ColumnType.TAG,
ColumnType.TAG,
ColumnType.TAG,
ColumnType.ATTRIBUTE,
ColumnType.ATTRIBUTE,
ColumnType.ATTRIBUTE,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
ColumnType.FIELD,
]
np_timestamps = np.arange(0, 10, dtype=np.dtype(">i8"))
np_values = [
np.array(["tag1:{}".format(i) for i in range(0, 10)]),
np.array(["tag2:{}".format(i) for i in range(0, 10)]),
np.array(["tag3:{}".format(i) for i in range(0, 10)]),
np.array(["attr1:{}".format(i) for i in range(0, 10)]),
np.array(["attr2:{}".format(i) for i in range(0, 10)]),
np.array(["attr3:{}".format(i) for i in range(0, 10)]),
np.array(
[False, True, False, True, False, True, False, True, False, True],
TSDataType.BOOLEAN.np_dtype(),
),
np.array(
[0, -2147483648, 2147483647, 1, -1, 10, -10, -0, 10, 10],
TSDataType.INT32.np_dtype(),
),
np.array(
[
0,
-9223372036854775808,
9223372036854775807,
1,
-1,
10,
-10,
-0,
10,
10,
],
TSDataType.INT64.np_dtype(),
),
np.array(
[
0.0,
-0.12345678,
0.123456789,
1.0,
1.1234567,
4.123456,
12.12345,
-0.0,
1.1,
1.1,
],
TSDataType.FLOAT.np_dtype(),
),
np.array(
[
0.0,
-0.12345678901234567,
0.12345678901234567,
1.0,
1.1234567890123456,
4.123456789012345,
12.12345678901234,
-0.0,
1.1,
1.1,
],
TSDataType.DOUBLE.np_dtype(),
),
np.array(
[
"1234567890",
"abcdefghijklmnopqrstuvwsyz",
"!@#$%^&*()_+}{|:'`~-=[];,./<>?~",
"没问题",
"!@#¥%……&*()——|:“《》?·【】、;‘,。/",
"1234567890abcdefghijklmnopqrstuvwsyz!@#$%^&*()_+}{|:'`~-=[];,./<>?~!@#¥%……&*()——|:“《》?·【】、;‘,。/没问题",
"",
" ",
"test01",
"test01",
],
TSDataType.TEXT.np_dtype(),
),
np.array(
[
0,
-9223372036854775808,
9223372036854775807,
1,
-1,
10,
-10,
-0,
10,
10,
],
TSDataType.TIMESTAMP.np_dtype(),
),
np.array(
[
date(1970, 1, 1),
date(1000, 1, 1),
date(9999, 12, 31),
date(1970, 1, 1),
date(1970, 1, 1),
date(1970, 1, 1),
date(1970, 1, 1),
date(1970, 1, 1),
date(1970, 1, 1),
date(1970, 1, 1),
],
TSDataType.DATE.np_dtype(),
),
np.array(
[
"1234567890".encode("utf-8"),
"abcdefghijklmnopqrstuvwsyz".encode("utf-8"),
"!@#$%^&*()_+}{|:`~-=[];,./<>?~".encode("utf-8"),
"没问题".encode("utf-8"),
"!@#¥%……&*()——|:“《》?·【】、;‘,。/".encode("utf-8"),
"1234567890abcdefghijklmnopqrstuvwsyz!@#$%^&*()_+}{|:`~-=[];,./<>?~!@#¥%……&*()——|:“《》?·【】、;‘,。/没问题".encode(
"utf-8"
),
"".encode("utf-8"),
" ".encode("utf-8"),
"1234567890".encode("utf-8"),
"1234567890".encode("utf-8"),
],
TSDataType.BLOB.np_dtype(),
),
np.array(
[
"1234567890",
"abcdefghijklmnopqrstuvwsyz",
"!@#$%^&*()_+}{|:'`~-=[];,./<>?~",
"没问题",
"!@#¥%……&*()——|:“《》?·【】、;‘,。/",
"1234567890abcdefghijklmnopqrstuvwsyz!@#$%^&*()_+}{|:'`~-=[];,./<>?~!@#¥%……&*()——|:“《》?·【】、;‘,。/没问题",
"",
" ",
"test01",
"test01",
],
TSDataType.STRING.np_dtype(),
),
]
np_tablet = NumpyTablet(
table_name,
column_names,
data_types,
np_values,
np_timestamps,
column_types=column_types,
)
session.insert(np_tablet)
session.close()