You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2020/07/21 13:09:09 UTC
[incubator-iotdb] 02/04: delete old-version python example.
This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch rel/0.10
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit f2e0c7acca6238f8376e570b1dc40a6fb09ac39e
Author: Zekun Li <lz...@gmail.com>
AuthorDate: Tue Jul 21 12:26:04 2020 +0800
delete old-version python example.
---
client-py/src/client_example.py | 359 ----------------------------------------
1 file changed, 359 deletions(-)
diff --git a/client-py/src/client_example.py b/client-py/src/client_example.py
deleted file mode 100755
index ca9f8cb..0000000
--- a/client-py/src/client_example.py
+++ /dev/null
@@ -1,359 +0,0 @@
-# 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 sys
-import struct
-
-# If you generate IoTDB python library manually, add it to your python path
-
-#for example, if you run compile.sh, you can use the following code:
-# sys.path.append("../target")
-
-#if you use maven to compile the thrift api, just use the follwoing code:
-sys.path.append("../../service-rpc/target/generated-sources-python")
-
-#if you have already install apache-iotdb using `pip3 install apache-iotdb`, use the following:
-#import iotdb
-
-from thrift.protocol import TBinaryProtocol, TCompactProtocol
-from thrift.transport import TSocket, TTransport
-
-from iotdb.rpc.TSIService import Client, TSCreateTimeseriesReq, TSInsertRecordReq, \
- TSInsertTabletReq, TSExecuteStatementReq, TSOpenSessionReq, TSQueryDataSet, \
- TSFetchResultsReq, TSCloseOperationReq, \
- TSCloseSessionReq
-from iotdb.rpc.ttypes import TSProtocolVersion, TSFetchMetadataReq
-
-TSDataType = {
- 'BOOLEAN': 0,
- 'INT32': 1,
- 'INT64': 2,
- 'FLOAT': 3,
- 'DOUBLE': 4,
- 'TEXT': 5
-}
-
-TSEncoding = {
- 'PLAIN': 0,
- 'PLAIN_DICTIONARY': 1,
- 'RLE': 2,
- 'DIFF': 3,
- 'TS_2DIFF': 4,
- 'BITMAP': 5,
- 'GORILLA': 6,
- 'REGULAR': 7
-}
-
-Compressor = {
- 'UNCOMPRESSED': 0,
- 'SNAPPY': 1,
- 'GZIP': 2,
- 'LZO': 3,
- 'SDT': 4,
- 'PAA': 5,
- 'PLA': 6
-}
-
-
-class Enum:
- def __init__(self):
- pass
-
-
-MetaQueryTypes = Enum()
-MetaQueryTypes.CATALOG_COLUMN = "COLUMN"
-MetaQueryTypes.CATALOG_TIMESERIES = "SHOW_TIMESERIES"
-MetaQueryTypes.CATALOG_STORAGE_GROUP = "SHOW_STORAGE_GROUP"
-MetaQueryTypes.CATALOG_DEVICES = "SHOW_DEVICES"
-MetaQueryTypes.CATALOG_CHILD_PATHS = "SHOW_CHILD_PATHS"
-
-
-# used to do `and` operation with bitmap to judge whether the value is null
-flag = 0x80
-
-INT32_BYTE_LEN = 4
-BOOL_BYTE_LEN = 1
-INT64_BYTE_LEN = 8
-FLOAT_BYTE_LEN = 4
-DOUBLE_BYTE_LEN = 8
-
-
-def is_null(bitmap_bytes, rowNum):
- bitmap = bitmap_bytes[rowNum // 8]
- shift = rowNum % 8
- return ((flag >> shift) & bitmap) == 0
-
-
-def convertQueryDataSet(queryDataSet, dataTypeList):
- time_bytes = queryDataSet.time
- value_bytes_list = queryDataSet.valueList
- bitmap_list = queryDataSet.bitmapList
- row_count = len(time_bytes) // 8
- time_unpack_str = '>' + str(row_count) + 'q'
- records = []
- times = struct.unpack(time_unpack_str, time_bytes)
- for i in range(row_count):
- records.append([times[i]])
-
- for i in range(len(dataTypeList)):
- value_type = dataTypeList[i]
- value_bytes = value_bytes_list[i]
- bitmap = bitmap_list[i]
- # the actual number of value
- if value_type == 'BOOLEAN':
- value_count = len(value_bytes) // BOOL_BYTE_LEN
- values_list = struct.unpack('>' + str(value_count) + '?', value_bytes)
- elif value_type == 'INT32':
- value_count = len(value_bytes) // INT32_BYTE_LEN
- values_list = struct.unpack('>' + str(value_count) + 'i', value_bytes)
- elif value_type == 'INT64':
- value_count = len(value_bytes) // INT64_BYTE_LEN
- values_list = struct.unpack('>' + str(value_count) + 'q', value_bytes)
- elif value_type == 'FLOAT':
- value_count = len(value_bytes) // FLOAT_BYTE_LEN
- values_list = struct.unpack('>' + str(value_count) + 'f', value_bytes)
- elif value_type == 'DOUBLE':
- value_count = len(value_bytes) // DOUBLE_BYTE_LEN
- values_list = struct.unpack('>' + str(value_count) + 'd', value_bytes)
- elif value_type == 'TEXT':
- values_list = []
-
- # current index for value in values_list
- value_index = 0
- for j in range(row_count):
- if is_null(bitmap, j):
- records[j].append('null')
- else:
- if value_type != 'TEXT':
- records[j].append(values_list[value_index])
- else:
- size = value_bytes[:4]
- value_bytes = value_bytes[4:]
- size = struct.unpack('>i', size)[0]
- records[j].append(value_bytes[:size])
- value_bytes = value_bytes[size:]
- value_index += 1
-
- return records
-
-def valueListToBytes(values, dataTypes):
- valueByte = bytearray();
- for value, dataType in enumerate(values, dataTypes):
- pass
- return valueByte
-
-
-if __name__ == '__main__':
- ip = "127.0.0.1"
- port = "6667"
- username = 'root'
- password = 'root'
- # Make socket
- transport = TSocket.TSocket(ip, port)
-
- #in v0.10 we use TBufferedTransport. from v0.11 on, we use TFramedTransport
- transport = TTransport.TBufferedTransport(transport)
-
- # Wrap in a protocol
- # use TCompactProtocol if the server enable thrift compression,
- # otherwise use TBinaryProtocol
- protocol = TBinaryProtocol.TBinaryProtocol(transport)
-
- # Create a client to use the protocol encoder
- client = Client(protocol)
-
- # Connect!
- transport.open()
-
- # Authentication
- clientProtocol = TSProtocolVersion.IOTDB_SERVICE_PROTOCOL_V2
- resp = client.openSession(TSOpenSessionReq(client_protocol=clientProtocol,
- username=username,
- password=password))
- if resp.serverProtocolVersion != clientProtocol:
- print('Inconsistent protocol, server version: %d, client version: %d'
- % (resp.serverProtocolVersion, clientProtocol))
- if resp.serverProtocolVersion > clientProtocol:
- exit()
- sessionId = resp.sessionId
-
- # This is necessary for resource control
- stmtId = client.requestStatementId(sessionId)
-
- # create a storage group
- status = client.setStorageGroup(sessionId, "root.group1")
- print(status.message)
-
- # create timeseries
- status = client.createTimeseries(TSCreateTimeseriesReq(sessionId,
- "root.group1.s1",
- TSDataType['INT64'],
- TSEncoding['PLAIN'],
- Compressor['UNCOMPRESSED']))
- print(status.message)
- status = client.createTimeseries(TSCreateTimeseriesReq(sessionId,
- "root.group1.s2",
- TSDataType['INT32'],
- TSEncoding['PLAIN'],
- Compressor['UNCOMPRESSED']))
- print(status.message)
- status = client.createTimeseries(TSCreateTimeseriesReq(sessionId,
- "root.group1.s3",
- TSDataType['DOUBLE'],
- TSEncoding['PLAIN'],
- Compressor['UNCOMPRESSED']))
- print(status.message)
- status = client.createTimeseries(TSCreateTimeseriesReq(sessionId,
- "root.group1.s4",
- TSDataType['FLOAT'],
- TSEncoding['PLAIN'],
- Compressor['UNCOMPRESSED']))
- print(status.message)
- status = client.createTimeseries(TSCreateTimeseriesReq(sessionId,
- "root.group1.s5",
- TSDataType['BOOLEAN'],
- TSEncoding['PLAIN'],
- Compressor['UNCOMPRESSED']))
- print(status.message)
- status = client.createTimeseries(TSCreateTimeseriesReq(sessionId,
- "root.group1.s6",
- TSDataType['TEXT'],
- TSEncoding['PLAIN'],
- Compressor['UNCOMPRESSED']))
- print(status.message)
-
- deviceId = "root.group1"
- measurements = ["s1", "s2", "s3", "s4", "s5", "s6"]
-
- # insert a single row
- values = [1, 11, 1.1, 11.1, True, "text0"]
- dataTypes = [TSDataType['INT64'], TSDataType['INT32'], TSDataType['DOUBLE'],
- TSDataType['FLOAT'], TSDataType['BOOLEAN'], TSDataType['TEXT']]
-
- value_pack_str = '>hqhihdhfh?hi'+ str(len(values[5])) +'s'
- encoding = 'utf-8'
- valueByte = bytearray()
-
- valueByte.extend(struct.pack(value_pack_str,dataTypes[0], values[0],
- dataTypes[1], values[1],
- dataTypes[2], values[2],
- dataTypes[3], values[3],
- dataTypes[4], values[4],
- dataTypes[5], len(values[5]),
- bytes(values[5], encoding)))
- timestamp = 1
- print("isnertRecord()...")
- status = client.insertRecord(TSInsertRecordReq(sessionId, deviceId, measurements, valueByte, timestamp))
- print(status.message)
-
-
- # insert multiple rows, this interface is more efficient
- values = bytearray()
- times = bytearray()
-
- rowCnt = 3
-
- # the first 3 belong to 's1', the second 3 belong to 's2'... the last 3
- # belong to 's6'
- # to transfer a string, you must first send its length and then its bytes
- # (like the last 3 'i7s'). Text values should start and end with ' or ".
- # IoTDB use big endian in rpc
- value_pack_str = '>3q3i3d3f3bi5si5si5s'
- time_pack_str = '>3q'
- encoding = 'utf-8'
- values.extend(struct.pack(value_pack_str,
- 2, 3, 4, #s1
- 22, 33, 44, #s2
- 2.2, 3.3, 4.4, #s3
- 22.2, 33.3, 44.4, #s4
- True, True, False, #s5
- len(bytes('text1', encoding)),
- bytes('text1', encoding),
- len(bytes('text2', encoding)),
- bytes('text2', encoding),
- len(bytes('text3', encoding)),
- bytes('text3', encoding)))
- # warning: the data in batch must be sorted by time
- times.extend(struct.pack(time_pack_str, 2, 3, 4))
- print("insertTablet()...")
- resp = client.insertTablet(TSInsertTabletReq(sessionId,deviceId,
- measurements, values,
- times, dataTypes, rowCnt))
- status = resp.statusList
- print(status)
-
- print("SQL delete..")
- # execute deletion (or other statements)
- resp = client.executeStatement(TSExecuteStatementReq(sessionId, "DELETE FROM "
- "root.group1 where time < 2", stmtId))
- status = resp.status
- print(status)
-
- print("SQL select..")
- # query the data
- stmt = "SELECT * FROM root.group1"
- fetchSize = 2
- # this is also for resource control, make sure different queries will not use the same id at the same time
- resp = client.executeQueryStatement(TSExecuteStatementReq(sessionId, stmt, stmtId))
- # headers
- dataTypeList = resp.dataTypeList
- print(resp.columns)
- print(dataTypeList)
-
- status = resp.status
- print(status)
-
- queryId = resp.queryId
- while True:
- rst = client.fetchResults(TSFetchResultsReq(sessionId, stmt, fetchSize,
- queryId, True)).queryDataSet
- records = convertQueryDataSet(rst, dataTypeList)
- if len(records) == 0:
- break
- for record in records:
- print(record)
-
- # do not forget to close it when a query is over
- closeReq = TSCloseOperationReq(sessionId)
- closeReq.queryId = queryId
- client.closeOperation(closeReq)
-
- # query metadata
- metaReq = TSFetchMetadataReq(sessionId=sessionId, type=MetaQueryTypes.CATALOG_DEVICES)
- print(client.fetchMetadata(metaReq).status)
-
- metaReq = TSFetchMetadataReq(sessionId=sessionId,
- type=MetaQueryTypes.CATALOG_TIMESERIES,
- columnPath='root')
- #print(client.fetchMetadata(metaReq).timeseriesList)
-
- metaReq = TSFetchMetadataReq(sessionId=sessionId,
- type=MetaQueryTypes.CATALOG_CHILD_PATHS,
- columnPath='root')
- #print(client.fetchMetadata(metaReq).childPaths)
-
- metaReq = TSFetchMetadataReq(sessionId=sessionId, type=MetaQueryTypes.CATALOG_STORAGE_GROUP)
- #print(client.fetchMetadata(metaReq).storageGroups)
-
- metaReq = TSFetchMetadataReq(sessionId=sessionId,
- type=MetaQueryTypes.CATALOG_COLUMN,
- columnPath='root.group1.s1')
- print(client.fetchMetadata(metaReq).dataType)
-
- # and do not forget to close the session before exiting
- client.closeSession(TSCloseSessionReq(sessionId))