すべてのプロダクト
Search
ドキュメントセンター

Tablestore:Go 用 Tablestore ドライバーを使用して SQL ステートメントを実行してデータをクエリする

最終更新日:Dec 28, 2024

Tablestore は、SQL ステートメントを実行して Tablestore にアクセスできるように、Go 用 Tablestore ドライバーを提供しています。このトピックでは、Go 用 Tablestore ドライバーを使用して Tablestore にアクセスする方法について説明します。

使用上の注意

SQL クエリ機能は、中国 (杭州)、中国 (上海)、中国 (北京)、中国 (張家口)、中国 (ウランチャブ)、中国 (深セン)、中国 (成都)、中国 (香港)、日本 (東京)、シンガポール、マレーシア (クアラルンプール)、英国 (ロンドン)、米国 (シリコンバレー)、インドネシア (ジャカルタ)、ドイツ (フランクフルト)、SAU (リヤド - パートナーリージョン)、および米国 (バージニア) の各リージョンで使用できます。

前提条件

手順

手順 1: Go 用 Tablestore ドライバーをインストールする

プロジェクトディレクトリに移動し、次のコマンドを実行して Go 用 Tablestore ドライバーをインストールします。

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

手順 2: Go 用 Tablestore ドライバーを使用して Tablestore にアクセスする

Go 用 Tablestore ドライバーは、database/sql/driver インターフェースに基づいて実装されています。Go 用 Tablestore ドライバーパッケージをインポートした後、database/sql を使用して Tablestore にアクセスできます。

  • パラメーター

    Go 用 Tablestore ドライバーを使用して Tablestore にアクセスする場合、ドライバーの名前と Tablestore データソースの名前を指定する必要があります。次の表にパラメーターを示します。

    パラメーター

    説明

    driverName

    ots

    Go 用 Tablestore ドライバーの名前。名前は ots で、変更できません。

    dataSourceName

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

    schema://accessKeyId:accessKeySecret@endpoint/instanceName[?param1=value1&...&paramN=valueN] 形式の Tablestore データソースの名前。名前には次のフィールドが含まれています。

    • schema: 必須。このフィールドは、Tablestore ドライバーで使用されるプロトコルを指定します。ほとんどの場合、このフィールドは https に設定されます。

    • accessKeyId:accessKeySecret: 必須。このフィールドは、Alibaba Cloud アカウントまたは RAM ユーザーのアクセスキー ID とアクセスキーシークレットを指定します。

    • endpoint: 必須。このフィールドは、インスタンスのエンドポイントを指定します。詳細については、エンドポイント を参照してください。

    • instanceName: 必須。このフィールドは、インスタンスの名前を指定します。

    その他の設定項目については、設定項目 を参照してください。

  • サンプルコード

    import (
        "database/sql"
        _ "github.com/aliyun/aliyun-tablestore-go-sql-driver"
    )
    
    // Go 用 Tablestore ドライバーの名前と Tablestore データソースの名前を指定します。
    db, err := sql.Open("ots", "https://access_key_id:access_key_secret@endpoint/instance_name")
    if err != nil {
        panic(err)    // エラーを処理します。
    }

手順 3: データをクエリする

Go 用 Tablestore ドライバーでは、Query メソッドを使用してクエリステートメントを実行し、Prepare を使用してデータをクエリするステートメントを作成できます。

重要

クエリ結果のフィールドのデータ型は、Tablestore のフィールドのデータ型と一致する必要があります。データ型マッピングの詳細については、データ型マッピング を参照してください。

Query メソッドを使用してデータをクエリする

// ビジネス要件に基づいて SQL ステートメントを指定します。この例では、test_table テーブルの pk1、col1、および col2 列のデータをクエリする SQL ステートメントが指定されています。
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 を使用してデータをクエリするステートメントを作成する

// ビジネス要件に基づいて SQL ステートメントを指定します。この例では、test_table テーブルの pk1、col1、および col2 列のデータをクエリする SQL ステートメントが指定されています。
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)    // エラーを処理します。
    }
}

完全なサンプルコード

次のサンプルコードは、中国 (杭州) リージョンの 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 用 Tablestore ドライバーを使用して、Go 用 Tablestore SDK の設定項目を変更できます。次の表に、一般的な設定項目を示します。

設定項目

説明

retryTimes

10

許可される再試行回数。デフォルト値: 10。

connectionTimeout

15

接続設定のタイムアウト期間。デフォルト値: 15。単位: 秒。値 0 は無期限を指定します。

requestTimeout

30

リクエスト送信のタイムアウト期間。デフォルト値: 30。単位: 秒。

maxRetryTime

5

再試行がトリガーされる最大期間。デフォルト値: 5。単位: 秒。

maxIdleConnections

2000

アイドル接続の最大数。デフォルト値: 2000。

データ型マッピング

次の表に、Tablestore のフィールドと Go 用 Tablestore ドライバー間のデータ型マッピングを示します。Tablestore のフィールドのデータ型が Go 用 Tablestore ドライバーのフィールドのデータ型と一致しない場合、エラーが発生します。

Tablestore のデータ型

Go 用 Tablestore ドライバーのデータ型

Integer

int64

Binary

[]byte

String

string

Double

float64

Boolean

bool

参考資料