赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 表格存储
  4. 操作指南
  5. SQL查询
  6. 使用方式
  7. Go语言驱动

Go语言驱动

  • 使用方式
  • 发布于 2025-04-22
  • 0 次阅读
文档编辑
文档编辑

表格存储提供了Go语言驱动用于使用SQL访问表格存储数据。本文介绍如何使用Go语言驱动连接表格存储。

注意事项

目前支持SQL查询功能的地域包括华东1(杭州)、华东2(上海)、华北2(北京)、华北3(张家口)、华北6(乌兰察布)、华南1(深圳)、西南1(成都)、中国香港、日本(东京)、新加坡、马来西亚(吉隆坡)、印度尼西亚(雅加达)、德国(法兰克福)、英国(伦敦)、美国(硅谷)、美国(弗吉尼亚)。

前提条件

  • 如果要使用RAM用户进行操作,请确保已创建RAM用户,并为RAM用户授予所有SQL操作权限,即在自定义权限策略中配置"Action": "ots:SQL*"。具体操作,请参见通过RAM Policy为RAM用户授权。

  • 已获取AccessKey(包括AccessKey ID和AccessKey Secret)。具体操作,请参见创建AccessKey。

  • 已创建数据表并为数据表创建映射关系。具体操作,请分别参见创建数据表和创建表的映射关系。

使用流程

步骤一:安装Go语言驱动

进入项目目录后,执行以下命令安装Go语言驱动。

go get github.com/aliyun/aliyun-tablestore-go-sql-driver

步骤二:使用Go语言驱动直连

表格存储的Go语言驱动是database/sql/driver接口的实现,导入包后即可使用database/sql访问表格存储。

  • 参数说明

    使用Go语言驱动访问表格存储时,需要设置Go语言驱动名称和表格存储DSN(数据源名称)。具体参数说明请参见下表。

    参数

    示例

    说明

    driverName

    ots

    表格存储的Go语言驱动名称。固定取值为ots。

    dataSourceName

    https://************************:********************************@myinstance.cn-hangzhou.ots.aliyuncs.com/myinstance

    表格存储数据源名称。格式为schema://accessKeyId:accessKeySecret@endpoint/instanceName[?param1=value1&...&paramN=valueN]。主要字段说明如下:

    • schema(必选):表格存储驱动使用的协议,一般设置为https。

    • accessKeyId:accessKeySecret(必选):阿里云账号或者RAM用户的AccessKey ID和AccessKey Secret。

    • endpoint(必选):实例的服务地址。更多信息,请参见服务地址。

    • instanceName(必选):实例名称。

    其他常用配置项的说明,请参见配置项。

  • 示例

    import (
        "database/sql"
        _ "github.com/aliyun/aliyun-tablestore-go-sql-driver"
    )
    
    // 设置Go语言驱动名称和表格存储数据源名称。
    db, err := sql.Open("ots", "https://access_key_id:access_key_secret@endpoint/instance_name")
    if err != nil {
        panic(err)    // 处理错误。
    }

步骤三:查询数据

表格存储的Go语言驱动支持直接使用Query方法执行查询语句,也支持使用Prepare创建一个Stmt进行查询。

重要

获取查询结果时,接收字段数据的变量类型必须和表格存储中字段数据类型相匹配。关于数据类型映射的更多信息,请参见数据类型映射。

使用Query方法查询

// 设置SQL语句,此处以查询test_table表中pk1列、col1列和col2列的数据为例介绍,请根据实际需要设置。
rows, err := db.Query("SELECT pk1, col1, col2 FROM test_table WHERE pk1 = ?", 3)
if err != nil {
    panic(err)    // 处理错误。
}
for rows.Next() {
    var pk1 int64
    var col1 float64
    var col2 string
    err := rows.Scan(&pk1, &col1, &col2)
    if err != nil {
        panic(err)    // 处理错误。
    }
}

使用Prepare创建一个Stmt查询

// 设置SQL语句,此处以查询test_table表中pk1列、col1列和col2列的数据为例介绍,请根据实际需要设置。
stmt, err := db.Prepare("SELECT pk1, col1, col2 FROM test_table WHERE pk1 = ?")
if err != nil {
    panic(err)    // 处理错误。
}
rows, err := stmt.Query(3)
if err != nil {
    panic(err)    // 处理错误。
}
for rows.Next() {
    var pk1 int64
    var col1 float64
    var col2 string
    err := rows.Scan(&pk1, &col1, &col2)
    if err != nil {
        panic(err)    // 处理错误。
    }
}

完整示例

以下示例用于查询华东1(杭州)地域下myinstance实例中test_table的所有数据。

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/aliyun/aliyun-tablestore-go-sql-driver"
)

func main() {
    db, err := sql.Open("ots", "https://************************:********************************@myinstance.cn-hangzhou.ots.aliyuncs.com/myinstance")
    if err != nil {
        panic(err)
    }
    rows, err := db.Query("SELECT * FROM test_table")
    if err != nil {
        panic(err)
    }
    for rows.Next() {
        // 获取所有列。
        columns, err := rows.Columns()
        if err != nil {
            panic(err)
        }
        // 创建存放数据的数组和指针。
        values := make([]interface{}, len(columns))
        pointers := make([]interface{}, len(columns))
        for i := range values {
            pointers[i] = &values[i]
        }
        // 扫描数据行。
        err = rows.Scan(pointers...)
        if err != nil {
            panic(err)
        }
        fmt.Println(values...)
    }
    rows.Close()
    db.Close()
}

配置项

通过表格存储Go语言驱动支持修改Go SDK的配置项。常用配置项的详细说明请参见下表。

配置项

示例值

说明

retryTimes

10

重试次数。默认值为10。

connectionTimeout

15

建立连接的超时时间。默认值为15。单位为秒。0表示无限等待。

requestTimeout

30

发送请求的超时时间。默认值为30。单位为秒。

maxRetryTime

5

最大触发重试时间。默认值为5。单位为秒。

maxIdleConnections

2000

最大空闲连接数。默认值为2000。

数据类型映射

表格存储和Go语言中字段数据类型的对应关系请参见下表。如果字段数据类型不匹配,则会产生错误。

表格存储中字段数据类型

Go语言中字段数据类型

Integer

int64

Binary

[]byte

String

string

Double

float64

Boolean

bool

相关文档

  • 如果要加速SQL数据查询和计算,您可以通过创建二级索引或者多元索引实现。更多信息,请参见索引选择策略和计算下推。

  • 您还可以通过MaxCompute、Spark、Hive或者HadoopMR、函数计算、Flink、PrestoDB等计算引擎实现表中数据的计算与分析。具体操作,请参见计算与分析。

  • 如果要以图表等形式可视化展示数据,您可以通过对接Grafana实现。更多信息,请参见对接Grafana。

  • 使用宽表模型可以实现元数据、大数据等多种场景的解决方案,例如搭建海量智能元数据管理系统、亿量级订单管理方案、基于多元索引搭建亿量级店铺搜索系统、表格存储结合Spark流批处理实现一体化存储和计算、表格存储结合实时计算Flink进行大数据分析。更多方案介绍,请参见快速玩转Tablestore入门与实战。

  • 使用时序模型可以实现设备时序数据开发等方案。更多方案介绍,请参见快速玩转Tablestore入门与实战。

  • SQL查询可应用在表格存储物联网存储IoTstore解决方案中作为不同类型数据的统一查询接口。更多信息,请参见物联网存储简介。

    物联网存储IoTstore是表格存储基于物联网场景中多源异构数据存储、高并发吞吐、海量数据高性价比存储、多维度数据处理与分析等需求推出的一站式物联网解决方案,可为物联网设备元数据、消息数据、时序轨迹等海量数据提供存储、查询、检索、分析、同步等能力。

相关文章

控制台 2025-04-22 14:41

表格存储支持使用SQL查询功能快速查询数据。使用控制台创建映射关系后,您可以执行SELECT语句快速查询所需数据。 前提条件 <

SDK 2025-04-22 14:41

SQL查询为表格存储的多数据引擎提供统一的访问接口,兼容MySQL的查询语法。使用SQL查询数据前,您需要创建表的映射关系。 重要

JDBC 2025-04-22 14:41

表格存储可以使用JDBC进行连接和访问,支持JDBC直连、Hibernate和MyBatis方式进行SQL查询。 连接方式

通过JDBC直连使用SQL查询 2025-04-22 14:41

表格存储提供了JDBC驱动用于使用SQL访问表格存储数据。本文介绍如何使用JDBC直连访问表格存储。 注意事项

通过Hibernate使用SQL查询 2025-04-22 14:41

Hibernate是面向Java环境的对象/关系映射(ORM)解决方案,您可以通过Hibernate使用表格存储的JDBC驱动来快速访问表格存储。 背景信息

通过MyBatis使用SQL查询 2025-04-22 14:41

MyBatis是一个Java数据持久层框架,支持自定义SQL、存储过程以及高级映射。您可以通过MyBatis使用表格存储的JDBC驱动来快速访问表格存储。 背景信息

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号