表格存储 Go SDK 开发入门

本文涉及的产品
表格存储 Tablestore,50G 2个月
简介: 本文将结合电商订单场景为例,介绍表格存储 Tablestore Go SDK 的基本使用方法。

准备工作

在您开始Tablestore SDK开发前,需确保已开通表格存储服务并且已创建表格存储实例。

您需要提前获取到以下几个参数


开发简介

开发示例中将以订单场景为例,使用Tablestore SDK实现如下几个功能。

  • 订单表创建。
  • 订单插入。
  • 订单号查询。
  • 订单搜索。


字段名

字段类型

字段描述

order_id

String

主键

订单号

customer_name

String

属性列

消费者姓名

product_name

String

属性列

产品名

product_type

String

属性列

产品类型

order_time

String

属性列

下单时间

pay_time

String

属性列

支付时间

订单表

开发步骤

初始化连接

Tablestore支持Http/Https协议访问服务端,使用Go SDK发起请求前,您需要初始化一个OTSClinet实例,初始化需要获取到服务地址(endpoint)、实例名(instanceName)、密钥(accessKeyId、accessSecret)等信息。代码如下

funcmain() {
client :=tablestore.NewClient("https://order-instance.cn-beijing.ots.aliyuncs.com",//your endpoint,此处可选择公网地址"order-instance",//your instance name"",//your accessKeyId"")//your accessSecretcreateOrderTable(client)
}

创建数据表

示例代码中创建了一张订单数据表order。

funccreateOrderTable(client*tablestore.TableStoreClient)  {
createtableRequest :=new(tablestore.CreateTableRequest)
tableMeta :=new(tablestore.TableMeta)
tableMeta.TableName="order1"//设置表名tableMeta.AddPrimaryKeyColumn("order_id", tablestore.PrimaryKeyType_STRING)//设置主键tableOption :=new(tablestore.TableOption)
tableOption.TimeToAlive=-1tableOption.MaxVersion=1reservedThroughput :=new(tablestore.ReservedThroughput)
reservedThroughput.Readcap=0reservedThroughput.Writecap=0createtableRequest.TableMeta=tableMetacreatetableRequest.TableOption=tableOptioncreatetableRequest.ReservedThroughput=reservedThroughputclient.CreateTable(createtableRequest)//发送创建数据表请求fmt.Println("create table succeed")
}

写入数据

示例代码中写入了一条订单数据,订单号order_id为“o1”。样例中模拟了一万条订单数据,这里不作展示。

funcputOrder(client*tablestore.TableStoreClient)  {
putRowRequest :=new(tablestore.PutRowRequest)
putRowChange :=new(tablestore.PutRowChange)
putRowChange.TableName="order1"//设置表名putPk :=new(tablestore.PrimaryKey)
//添加主键值。主键顺序与数据类型需与表结构保持一致。putPk.AddPrimaryKeyColumn("order_id", "o1")
putRowChange.PrimaryKey=putPk//添加属性列putRowChange.AddColumn("customer_name", "消十一")
putRowChange.AddColumn("product_name", "iphone 6")
putRowChange.AddColumn("product_type", "手机")
putRowChange.AddColumn("order_time", "2021-10-25 09:20:01")
putRowChange.AddColumn("pay_time", "2017-10-25 10:00:01")
//更新前置条件,默认可以设置为RowExistenceExpectation_IGNOREputRowChange.SetCondition(tablestore.RowExistenceExpectation_IGNORE)
putRowChange.ReturnType=tablestore.ReturnType_RT_PKputRowRequest.PutRowChange=putRowChangeclient.PutRow(putRowRequest)
fmt.Println("put order succeed")
}

查询数据

示例代码中查询订单号order_id为“o1”的记录

funcgetOrder(client*tablestore.TableStoreClient)  {
getRowRequest :=new(tablestore.GetRowRequest)
criteria :=new(tablestore.SingleRowQueryCriteria)
putPk :=new(tablestore.PrimaryKey)
putPk.AddPrimaryKeyColumn("order_id", "o1")//设置读取的主键criteria.PrimaryKey=putPkgetRowRequest.SingleRowQueryCriteria=criteriagetRowRequest.SingleRowQueryCriteria.TableName="order"//设置表名getRowRequest.SingleRowQueryCriteria.MaxVersion=1getResp, _ :=client.GetRow(getRowRequest)
fmt.Println("get row result is :",getResp.PrimaryKey, getResp.Columns[0].ColumnName, getResp.Columns[0].Value)
}

创建多元索引

示例代码中创建了一个多元索引order_index。分别设置customer_name字符串类型、order_time字符串类型、pay_time字符串类型、product_name分词类型、product_type字符串类型。关于索引字段类型的介绍请参考多元索引概述

funccreateSearchIndex(client*tablestore.TableStoreClient){
request :=&tablestore.CreateSearchIndexRequest{}
request.TableName="order"//设置数据表名称。request.IndexName="order_index"//设置多元索引名称。schemas := []*tablestore.FieldSchema{}
field1 :=&tablestore.FieldSchema{
FieldName: proto.String("customer_name"), //设置字段名FieldType: tablestore.FieldType_KEYWORD, //设置字段类型。Index:     proto.Bool(true), //设置开启索引。EnableSortAndAgg: proto.Bool(true), //设置开启排序与统计聚合功能。     }
field2 :=&tablestore.FieldSchema{
FieldName: proto.String("order_time"),
FieldType: tablestore.FieldType_KEYWORD,
Index:     proto.Bool(true),
EnableSortAndAgg: proto.Bool(true),
     }
field3 :=&tablestore.FieldSchema{
FieldName: proto.String("pay_time"),
FieldType: tablestore.FieldType_KEYWORD,
Index:     proto.Bool(true),
EnableSortAndAgg: proto.Bool(true),
     }
field4 :=&tablestore.FieldSchema{
FieldName: proto.String("product_name"),
FieldType: tablestore.FieldType_TEXT,
Index:     proto.Bool(true),
EnableSortAndAgg: proto.Bool(false),
     }
field5 :=&tablestore.FieldSchema{
FieldName: proto.String("product_type"),
FieldType: tablestore.FieldType_KEYWORD,
Index:     proto.Bool(true),
EnableSortAndAgg: proto.Bool(true),
     }
schemas=append(schemas,field1,field2,field3,field4,field5)
request.IndexSchema=&tablestore.IndexSchema{
FieldSchemas: schemas, //设置多元索引包含的字段。     }
client.CreateSearchIndex(request) //调用client创建多元索引。fmt.Println("CreateSearchIndex finished")
}

搜索数据

示例代码中查询产品类型为“手机”的订单,并统计了符合条件的行数。

funcsearchQuery1(client*tablestore.TableStoreClient){
searchRequest :=&tablestore.SearchRequest{}
searchRequest.SetTableName("order1").//设置表名SetIndexName("order_index").//设置多元索引名SetSearchQuery(search.NewSearchQuery().SetQuery(&search.TermQuery{"product_type","手机"}).SetLimit(10).SetGetTotalCount(true))
//设置返回所有列searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{
ReturnAll: true,
     })
searchResponse, _ :=client.Search(searchRequest)
for_, row :=rangesearchResponse.Rows {
jsonBody, err :=json.Marshal(row)
iferr!=nil {
panic(err)
        }
fmt.Println("Row: ", string(jsonBody))
     }
}

示例代码中搜索产品名包含“iphone”的订单,并统计了符合条件的行数。

funcsearchQuery2(client*tablestore.TableStoreClient){
searchRequest :=&tablestore.SearchRequest{}
searchRequest.SetTableName("order")
searchRequest.SetIndexName("order_index")
query :=&search.MatchQuery{} //设置查询类型为MatchQuery。query.FieldName="product_name"//设置要匹配的字段。query.Text="iphone"//设置要匹配的值。searchQuery :=search.NewSearchQuery()
searchQuery.SetQuery(query)
searchQuery.SetGetTotalCount(true)
//设置返回所有列searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{
ReturnAll:true,
     })
searchRequest.SetSearchQuery(searchQuery)
searchResponse, _ :=client.Search(searchRequest)
for_, row :=rangesearchResponse.Rows {
jsonBody, err :=json.Marshal(row)
iferr!=nil {
panic(err)
        }
fmt.Println("Row: ", string(jsonBody))
     }
}

示例代码中查询了消费者姓名为“消十一”并且下单时间在“2021-10-24 00:00:00”之间的订单。并统计了行数。

funcsearchQuery3(client*tablestore.TableStoreClient) {
searchRequest :=&tablestore.SearchRequest{}
searchRequest.SetTableName("order")
searchRequest.SetIndexName("order_index")
//设置返回所有列searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{
ReturnAll: true,
     })
termQuery :=&search.TermQuery{}
termQuery.FieldName="customer_name"termQuery.Term="消十一"rangeQuery :=&search.RangeQuery{}
rangeQuery.FieldName="order_time"rangeQuery.LT("2021-10-24 00:00:00")
     {
boolQuery :=&search.BoolQuery{
MustQueries: []search.Query{
termQuery,
rangeQuery,
       },
        }
searchQuery :=search.NewSearchQuery()
searchQuery.SetQuery(boolQuery)
searchRequest.SetSearchQuery(searchQuery)
searchResponse, _ :=client.Search(searchRequest)
for_, row :=rangesearchResponse.Rows {
jsonBody, err :=json.Marshal(row)
iferr!=nil {
panic(err)
       }
fmt.Println("Row: ", string(jsonBody))
        }
     }
}

删除多元索引

示例代码中展示了删除订单表order中的order_index多元索引。

funcdeleteSearchIndex(client*tablestore.TableStoreClient)  {
request :=&tablestore.DeleteSearchIndexRequest{}
request.TableName="order"//设置数据表名称。request.IndexName="order_index"//设置多元索引名称。client.DeleteSearchIndex(request) //调用client删除多元索引。fmt.Println("DeleteSearchIndex finished")
}

删除数据表

示例代码中展示了删除订单表order。删除表之前需确保先删除表中的多元索引。

funcdeleteTable(client*tablestore.TableStoreClient){
deleteTableRequest :=new(tablestore.DeleteTableRequest)
deleteTableRequest.TableName="order"//设置表名client.DeleteTable(deleteTableRequest)//发送删除数据表请求fmt.Println("Delete table finished")
}

更多关于Tablestore Go SDK的介绍请参考Tablestore Go SDK

若有收获,就点个赞吧

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
阿里云表格存储使用教程
表格存储(Table Store)是构建在阿里云飞天分布式系统之上的分布式NoSQL数据存储服务,根据99.99%的高可用以及11个9的数据可靠性的标准设计。表格存储通过数据分片和负载均衡技术,实现数据规模与访问并发上的无缝扩展,提供海量结构化数据的存储和实时访问。 产品详情:https://www.aliyun.com/product/ots
目录
相关文章
|
2月前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
124 1
|
2月前
|
存储 监控 开发工具
Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱
Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱
51 0
|
2月前
|
Shell Go 开发工具
【Azure Developer】Go语言调用Azure SDK如何登录到中国区Azure环境
【Azure Developer】Go语言调用Azure SDK如何登录到中国区Azure环境
|
3月前
|
JSON Java Serverless
函数计算产品使用问题之如何使用Go SDK从HTTP上下文中提取JSON数据
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
3月前
|
NoSQL 开发工具 数据库
开发与运维测试问题之应用启动报 Can not load this fake sdk class 的异常如何解决
开发与运维测试问题之应用启动报 Can not load this fake sdk class 的异常如何解决
|
3月前
|
分布式计算 大数据 Go
MaxCompute操作报错合集之使用go sdk调用GetTunnelEndpoint出现报错:InvalidAction.NotFoundSpecified api is not found,该如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
5月前
|
开发工具 CDN 容器
基于Html+腾讯云播SDK开发的m3u8播放器
周末业余时间在家无事,学习了一下腾讯的云播放sdk,并制作了一个小demo(m3u8播放器),该在线工具是基于腾讯的云播sdk开发的,云播sdk非常牛,可以支持多种播放格式。
229 1
|
4月前
|
API 开发工具
抖音sdk,抖音开发api接口
抖音sdk,抖音开发api接口
|
5月前
|
安全 Go 开发工具
对象存储OSS产品常见问题之go语言SDK client 和 bucket 并发安全如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
125 9
|
5月前
|
Java 开发工具 Maven
Android SDK开发的那些事(1),已整理成文档
Android SDK开发的那些事(1),已整理成文档

热门文章

最新文章