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

Tablestore:Tablestore SDK の使用

最終更新日:Jan 27, 2025

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 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

参考資料