SQL クエリ機能は、Tablestore の複数のデータエンジンへの一元的なアクセス インターフェイスを提供し、MySQL のクエリ構文と互換性があります。SQL クエリ機能を使用してテーブル内のデータをクエリする前に、テーブルのマッピングテーブルを作成する必要があります。
このトピックでは、SQL クエリ機能を使用してデータテーブル内のデータをクエリする方法について説明します。 SQL クエリ機能を使用して時系列データをクエリする方法については、「SQL を使用して時系列データをクエリする」をご参照ください。
使用上の注意
SQL クエリ機能は、中国 (杭州)、中国 (上海)、中国 (北京)、中国 (張家口)、中国 (ウランチャブ)、中国 (深セン)、中国 (成都)、中国 (香港)、日本 (東京)、シンガポール、マレーシア (クアラルンプール)、英国 (ロンドン)、米国 (シリコンバレー)、インドネシア (ジャカルタ)、ドイツ (フランクフルト)、SAU (リヤド - パートナーリージョン)、および米国 (バージニア) の各リージョンでご利用いただけます。
前提条件
RAM ユーザーとしてデータをクエリする場合、RAM ユーザーが作成され、すべての SQL 操作権限が RAM ユーザーに付与されます。 RAM ユーザーにアタッチされているカスタムポリシーで
"Action": "ots:SQL*"を設定することで、すべての SQL 操作権限を RAM ユーザーに付与できます。 詳細については、「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 ドライバー for Go を使用して、SQL クエリ機能を使用できます。 詳細については、「Tablestore コンソールの使用」、「Tablestore CLI での SQL クエリ機能の使用」、「JDBC の使用」、および「Tablestore ドライバー for Go の使用」をご参照ください。
Tablestore インスタンスを DataWorks または Data Management (DMS) に接続し、SQL 文を実行して Tablestore データをクエリおよび分析することもできます。 詳細については、「Tablestore インスタンスを DataWorks に接続する」および「Tablestore を DMS に接続する」をご参照ください。
SQL 文を実行することでデータクエリと計算を高速化したい場合は、セカンダリインデックスまたは 多次元インデックス を作成できます。 詳細については、「インデックス選択ポリシー」および「プッシュダウンの計算」をご参照ください。
MaxCompute、Spark、Hive、HadoopMR、Function Compute、Flink、PrestoDB などの計算エンジンを使用して、テーブル内のデータを計算および分析することもできます。 詳細については、「概要」をご参照ください。
データを視覚化するには、Grafana を使用できます。 たとえば、Grafana を使用して Tablestore データをチャートに表示できます。 詳細については、「Tablestore を Grafana に接続する」をご参照ください。