SQL クエリ機能は、Tablestore の複数のデータエンジンへの一元的なアクセスインターフェースを提供し、MySQL のクエリ構文と互換性があります。SQL クエリ機能を使用してテーブル内のデータをクエリする前に、テーブルのマッピングテーブルを作成する必要があります。
このトピックでは、SQL クエリ機能を使用してデータテーブル内のデータをクエリする方法について説明します。SQL クエリ機能を使用して時系列データをクエリする方法については、SQL を使用して時系列データをクエリするを参照してください。
使用上の注意
SQL クエリ機能は、中国 (杭州)、中国 (上海)、中国 (北京)、中国 (張家口)、中国 (ウランチャブ)、中国 (深セン)、中国 (成都)、中国 (香港)、日本 (東京)、シンガポール、マレーシア (クアラルンプール)、英国 (ロンドン)、米国 (シリコンバレー)、インドネシア (ジャカルタ)、ドイツ (フランクフルト)、SAU (リヤド - パートナーリージョン)、および米国 (バージニア) の各リージョンで使用できます。
前提条件
RAM ユーザーとしてデータをクエリする場合、RAM ユーザーが作成され、すべての SQL 操作権限が RAM ユーザーに付与されます。RAM ユーザーにアタッチされたカスタムポリシーで
"Action": "ots:SQL*"
を設定することで、RAM ユーザーにすべての SQL 操作権限を付与できます。詳細については、RAM ポリシーを使用して RAM ユーザーに権限を付与するを参照してください。AccessKey ID と AccessKey シークレットで構成される AccessKey ペアを取得します。詳細については、AccessKey ペアを作成するを参照してください。
データテーブルが作成されます。
OTSClient インスタンスが初期化されます。詳細については、OTSClient インスタンスを初期化するを参照してください。
手順
Tablestore SDK for Java、Tablestore SDK for Go、Tablestore SDK for Python、Tablestore SDK for Node.js、Tablestore SDK for .NET、または Tablestore SDK for PHP を使用して、SQL ステートメントを実行することでデータをクエリできます。この例では、Tablestore SDK for Java を使用します。
CREATE TABLE ステートメントを実行して既存のテーブルのマッピングテーブルを作成した後、SELECT ステートメントを実行して既存のテーブル内のデータをクエリできます。
CREATE TABLE ステートメントを実行して、既存のテーブルのマッピングテーブルを作成します。
次のサンプルコードは、
create table test_table (pk varchar(1024), long_value bigint(20), double_value double, string_value mediumtext, bool_value bool, primary key(pk))
ステートメントを実行して、test_table という名前のテーブルのマッピングテーブルを作成する方法の例を示しています。private static void createTable(SyncClient client) { // SQL リクエストを作成します。 SQLQueryRequest request = new SQLQueryRequest("create table test_table (pk varchar(1024), long_value bigint(20), double_value double, string_value mediumtext, bool_value bool, primary key(pk))"); client.sqlQuery(request); }
SELECT ステートメントを実行して、テーブル内のデータをクエリします。
次のサンプルコードは、
select pk, long_value, double_value, string_value, bool_value from test_table limit 20
ステートメントを実行して、test_table という名前のテーブル内のデータをクエリし、最大 20 行のデータを返す方法の例を示しています。システムは、リクエストタイプ、返された結果のスキーマ、およびクエリステートメントの返された結果を返します。private static void queryData(SyncClient client) { // SQL リクエストを作成します。 SQLQueryRequest request = new SQLQueryRequest("select pk, long_value, double_value, string_value, bool_value from test_table limit 20"); // SQL リクエストへのレスポンスを取得します。 SQLQueryResponse response = client.sqlQuery(request); // SQL リクエストタイプを取得します。 System.out.println("response type: " + response.getSQLStatementType()); // SQL リクエストの返された結果のスキーマを取得します。 SQLTableMeta tableMeta = response.getSQLResultSet().getSQLTableMeta(); System.out.println("response table meta: " + tableMeta.getSchema()); // SQL リクエストの返された結果を取得します。 SQLResultSet resultSet = response.getSQLResultSet(); System.out.println("response resultset:"); while (resultSet.hasNext()) { SQLRow row = resultSet.next(); System.out.println(row.getString(0) + ", " + row.getString("pk") + ", " + row.getLong(1) + ", " + row.getLong("long_value") + ", " + row.getDouble(2) + ", " + row.getDouble("double_value") + ", " + row.getString(3) + ", " + row.getString("string_value") + ", " + row.getBoolean(4) + ", " + row.getBoolean("bool_value")); } }
サンプルレスポンス:
response type: SQL_SELECT response table meta: [pk:STRING, long_value:INTEGER, double_value:DOUBLE, string_value:STRING, bool_value:BOOLEAN] response resultset: binary_null, binary_null, 1, 1, 1.0, 1.0, a, a, false, false bool_null, bool_null, 1, 1, 1.0, 1.0, a, a, null, null double_null, double_null, 1, 1, null, null, a, a, true, true long_null, long_null, null, null, 1.0, 1.0, a, a, true, true string_null, string_null, 1, 1, 1.0, 1.0, null, null, false, false
FAQ
参考資料
Tablestore コンソール、Tablestore CLI、Java Database Connectivity (JDBC)、または Tablestore driver for Go を使用して、SQL クエリ機能を使用できます。詳細については、Tablestore コンソールで SQL クエリ機能を使用する、Tablestore CLI で SQL クエリ機能を使用する、JDBC を使用する、Tablestore driver for Go を使用して SQL ステートメントを実行することでデータをクエリする を参照してください。
SQL ステートメントを実行することでデータクエリと計算を高速化する場合、セカンダリインデックスまたは検索インデックスを作成できます。詳細については、インデックス選択ポリシー および 計算プッシュダウン を参照してください。
MaxCompute、Spark、Hive、HadoopMR、Function Compute、Flink、PrestoDB などの計算エンジンを使用して、テーブル内のデータを計算および分析することもできます。詳細については、概要 を参照してください。
データを視覚化するには、Grafana を使用できます。たとえば、Grafana を使用して Tablestore データをグラフに表示できます。詳細については、Tablestore を Grafana に接続する を参照してください。