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