example/table/table_session_example.go (140 lines of code) (raw):

/* * 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. */ package main import ( "flag" "github.com/apache/iotdb-client-go/client" "github.com/apache/iotdb-client-go/common" "log" "math/rand" "strconv" "time" ) func main() { flag.Parse() config := &client.Config{ Host: "127.0.0.1", Port: "6667", UserName: "root", Password: "root", Database: "test_session", } session, err := client.NewTableSession(config, false, 0) if err != nil { log.Fatal(err) } defer session.Close() checkError(session.ExecuteNonQueryStatement("create database test_db")) checkError(session.ExecuteNonQueryStatement("use test_db")) checkError(session.ExecuteNonQueryStatement("create table t1 (tag1 string tag, tag2 string tag, s1 text field, s2 text field)")) insertRelationalTablet(session) showTables(session) query(session) } func getTextValueFromDataSet(dataSet *client.SessionDataSet, columnName string) string { if isNull, err := dataSet.IsNull(columnName); err != nil { log.Fatal(err) } else if isNull { return "null" } v, err := dataSet.GetString(columnName) if err != nil { log.Fatal(err) } return v } func insertRelationalTablet(session client.ITableSession) { tablet, err := client.NewRelationalTablet("t1", []*client.MeasurementSchema{ { Measurement: "tag1", DataType: client.STRING, }, { Measurement: "tag2", DataType: client.STRING, }, { Measurement: "s1", DataType: client.TEXT, }, { Measurement: "s2", DataType: client.TEXT, }, }, []client.ColumnCategory{client.TAG, client.TAG, client.FIELD, client.FIELD}, 1024) if err != nil { log.Fatal("Failed to create relational tablet {}", err) } ts := time.Now().UTC().UnixNano() / 1000000 for row := 0; row < 16; row++ { ts++ tablet.SetTimestamp(ts, row) tablet.SetValueAt("tag1_value_"+strconv.Itoa(row), 0, row) tablet.SetValueAt("tag2_value_"+strconv.Itoa(row), 1, row) tablet.SetValueAt("s1_value_"+strconv.Itoa(row), 2, row) tablet.SetValueAt("s2_value_"+strconv.Itoa(row), 3, row) tablet.RowSize++ } checkError(session.Insert(tablet)) tablet.Reset() for row := 0; row < 16; row++ { ts++ tablet.SetTimestamp(ts, row) tablet.SetValueAt("tag1_value_1", 0, row) tablet.SetValueAt("tag2_value_1", 1, row) tablet.SetValueAt("s1_value_"+strconv.Itoa(row), 2, row) tablet.SetValueAt("s2_value_"+strconv.Itoa(row), 3, row) nullValueColumn := rand.Intn(4) tablet.SetValueAt(nil, nullValueColumn, row) tablet.RowSize++ } checkError(session.Insert(tablet)) } func showTables(session client.ITableSession) { timeout := int64(2000) dataSet, err := session.ExecuteQueryStatement("show tables", &timeout) defer dataSet.Close() if err != nil { log.Fatal(err) } for { hasNext, err := dataSet.Next() if err != nil { log.Fatal(err) } if !hasNext { break } value, err := dataSet.GetString("TableName") if err != nil { log.Fatal(err) } log.Printf("tableName is %v", value) } } func query(session client.ITableSession) { timeout := int64(2000) dataSet, err := session.ExecuteQueryStatement("select * from t1", &timeout) defer dataSet.Close() if err != nil { log.Fatal(err) } for { hasNext, err := dataSet.Next() if err != nil { log.Fatal(err) } if !hasNext { break } log.Printf("%v %v %v %v", getTextValueFromDataSet(dataSet, "tag1"), getTextValueFromDataSet(dataSet, "tag2"), getTextValueFromDataSet(dataSet, "s1"), getTextValueFromDataSet(dataSet, "s2")) } } func checkError(status *common.TSStatus, err error) { if err != nil { log.Fatal(err) } if status != nil { if err = client.VerifySuccess(status); err != nil { log.Println(err) } } }