Tablestore は、SQL 文を実行して Tablestore にアクセスできるように、Go 用 Tablestore ドライバーを提供しています。このトピックでは、Go 用 Tablestore ドライバーを使用して Tablestore にアクセスする方法について説明します。
使用上の注意
SQL クエリ機能は、中国 (杭州)、中国 (上海)、中国 (北京)、中国 (張家口)、中国 (ウランチャブ)、中国 (深セン)、中国 (成都)、中国 (香港)、日本 (東京)、シンガポール、マレーシア (クアラルンプール)、英国 (ロンドン)、米国 (シリコンバレー)、インドネシア (ジャカルタ)、ドイツ (フランクフルト)、SAU (リヤド - パートナーリージョン)、および米国 (バージニア) の各リージョンでご利用いただけます。
前提条件
RAM ユーザーとしてデータをクエリする場合、RAM ユーザーが作成され、すべての SQL 操作権限が RAM ユーザーに付与されます。RAM ユーザーにアタッチされているカスタムポリシーで
"Action": "ots:SQL*"を設定することで、すべての SQL 操作権限を RAM ユーザーに付与できます。詳細については、「RAM ポリシーを使用して RAM ユーザーに権限を付与する」をご参照ください。AccessKey ID と AccessKey シークレットで構成される AccessKey ペアを取得します。詳細については、「AccessKey ペアを作成する」をご参照ください。
データテーブルを作成し、データテーブルのマッピングテーブルを作成します。詳細については、「ステップ 3: データテーブルを作成する」および「テーブルのマッピングテーブルを作成する」をご参照ください。
手順
ステップ 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
次の形式の Tablestore データソースの名前:
schema://accessKeyId:accessKeySecret@endpoint/instanceName[?param1=value1&...¶mN=valueN]。名前には次のフィールドが含まれています。schema: 必須。このフィールドは、Tablestore ドライバーが使用するプロトコルを指定します。ほとんどの場合、このフィールドは https に設定されます。
accessKeyId:accessKeySecret: 必須。このフィールドは、Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID と AccessKey シークレットを指定します。
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 |
関連情報
SQL 文を実行してデータクエリと計算を高速化する場合、セカンダリインデックスまたは 多次元インデックス を作成できます。詳細については、「インデックス選択ポリシー」および「プッシュダウンの計算」をご参照ください。
MaxCompute、Spark、Hive、HadoopMR、Function Compute、Flink、PrestoDB などの計算エンジンを使用して、テーブル内のデータを計算および分析することもできます。詳細については、「概要」をご参照ください。
データを視覚化するには、Grafana を使用できます。たとえば、Grafana を使用して Tablestore データをグラフに表示できます。詳細については、「Tablestore を Grafana に接続する」をご参照ください。