106 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
| package main
 | |
| 
 | |
| import (
 | |
| 	"database/sql"
 | |
| 	"fmt"
 | |
| 	"log"
 | |
| 	"math/rand"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/taosdata/driver-go/v3/common"
 | |
| 	"github.com/taosdata/driver-go/v3/common/param"
 | |
| 	_ "github.com/taosdata/driver-go/v3/taosRestful"
 | |
| 	"github.com/taosdata/driver-go/v3/ws/stmt"
 | |
| )
 | |
| 
 | |
| func main() {
 | |
| 	host := "127.0.0.1"
 | |
| 	numOfSubTable := 10
 | |
| 	numOfRow := 10
 | |
| 
 | |
| 	taosDSN := fmt.Sprintf("root:taosdata@http(%s:6041)/", host)
 | |
| 	db, err := sql.Open("taosRestful", taosDSN)
 | |
| 	if err != nil {
 | |
| 		log.Fatalln("Failed to connect to " + taosDSN + "; ErrMessage: " + err.Error())
 | |
| 	}
 | |
| 	defer db.Close()
 | |
| 	// prepare database and table
 | |
| 	_, err = db.Exec("CREATE DATABASE IF NOT EXISTS power")
 | |
| 	if err != nil {
 | |
| 		log.Fatalln("Failed to create database power, ErrMessage: " + err.Error())
 | |
| 	}
 | |
| 	_, err = db.Exec("CREATE STABLE IF NOT EXISTS power.meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (groupId INT, location BINARY(24))")
 | |
| 	if err != nil {
 | |
| 		log.Fatalln("Failed to create stable power.meters, ErrMessage: " + err.Error())
 | |
| 	}
 | |
| 
 | |
| 	config := stmt.NewConfig(fmt.Sprintf("ws://%s:6041", host), 0)
 | |
| 	config.SetConnectUser("root")
 | |
| 	config.SetConnectPass("taosdata")
 | |
| 	config.SetConnectDB("power")
 | |
| 	config.SetMessageTimeout(common.DefaultMessageTimeout)
 | |
| 	config.SetWriteWait(common.DefaultWriteWait)
 | |
| 
 | |
| 	connector, err := stmt.NewConnector(config)
 | |
| 	if err != nil {
 | |
| 		log.Fatalln("Failed to create stmt connector,url: " + taosDSN + "; ErrMessage: " + err.Error())
 | |
| 	}
 | |
| 	// prepare statement
 | |
| 	sql := "INSERT INTO ? USING meters TAGS(?,?) VALUES (?,?,?,?)"
 | |
| 	stmt, err := connector.Init()
 | |
| 	if err != nil {
 | |
| 		log.Fatalln("Failed to init stmt, sql: " + sql + ", ErrMessage: " + err.Error())
 | |
| 	}
 | |
| 	err = stmt.Prepare(sql)
 | |
| 	if err != nil {
 | |
| 		log.Fatal("Failed to prepare sql, sql: " + sql + ", ErrMessage: " + err.Error())
 | |
| 	}
 | |
| 	for i := 1; i <= numOfSubTable; i++ {
 | |
| 		tableName := fmt.Sprintf("d_bind_%d", i)
 | |
| 		tags := param.NewParam(2).AddInt(i).AddBinary([]byte(fmt.Sprintf("location_%d", i)))
 | |
| 		tagsType := param.NewColumnType(2).AddInt().AddBinary(24)
 | |
| 		columnType := param.NewColumnType(4).AddTimestamp().AddFloat().AddInt().AddFloat()
 | |
| 		// set tableName
 | |
| 		err = stmt.SetTableName(tableName)
 | |
| 		if err != nil {
 | |
| 			log.Fatal("Failed to set table name, tableName: " + tableName + "; ErrMessage: " + err.Error())
 | |
| 		}
 | |
| 		// set tags
 | |
| 		err = stmt.SetTags(tags, tagsType)
 | |
| 		if err != nil {
 | |
| 			log.Fatal("Failed to set tags, ErrMessage: " + err.Error())
 | |
| 		}
 | |
| 		// bind column data
 | |
| 		current := time.Now()
 | |
| 		for j := 0; j < numOfRow; j++ {
 | |
| 			columnData := make([]*param.Param, 4)
 | |
| 			columnData[0] = param.NewParam(1).AddTimestamp(current.Add(time.Millisecond*time.Duration(j)), common.PrecisionMilliSecond)
 | |
| 			columnData[1] = param.NewParam(1).AddFloat(rand.Float32() * 30)
 | |
| 			columnData[2] = param.NewParam(1).AddInt(rand.Intn(300))
 | |
| 			columnData[3] = param.NewParam(1).AddFloat(rand.Float32())
 | |
| 			err = stmt.BindParam(columnData, columnType)
 | |
| 			if err != nil {
 | |
| 				log.Fatal("Failed to bind params, ErrMessage: " + err.Error())
 | |
| 			}
 | |
| 		}
 | |
| 		// add batch
 | |
| 		err = stmt.AddBatch()
 | |
| 		if err != nil {
 | |
| 			log.Fatal("Failed to add batch, ErrMessage: " + err.Error())
 | |
| 		}
 | |
| 		// execute batch
 | |
| 		err = stmt.Exec()
 | |
| 		if err != nil {
 | |
| 			log.Fatal("Failed to exec, ErrMessage: " + err.Error())
 | |
| 		}
 | |
| 		// get affected rows
 | |
| 		affected := stmt.GetAffectedRows()
 | |
| 		// you can check exeResult here
 | |
| 		fmt.Printf("Successfully inserted %d rows to %s.\n", affected, tableName)
 | |
| 	}
 | |
| 	err = stmt.Close()
 | |
| 	if err != nil {
 | |
| 		log.Fatal("Failed to close stmt, ErrMessage: " + err.Error())
 | |
| 	}
 | |
| }
 |