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

Tablestore:Tablestore SDK を使用して SQL クエリ機能を使用する

最終更新日:Dec 28, 2024

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 JavaTablestore SDK for GoTablestore SDK for PythonTablestore SDK for Node.jsTablestore SDK for .NET、または Tablestore SDK for PHP を使用して、SQL ステートメントを実行することでデータをクエリできます。この例では、Tablestore SDK for Java を使用します。

CREATE TABLE ステートメントを実行して既存のテーブルのマッピングテーブルを作成した後、SELECT ステートメントを実行して既存のテーブル内のデータをクエリできます。

  1. 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);
    }
  2. 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

参考資料