Tablestore SDK for Java は、既存のデータテーブルまたは検索インデックスのマッピングテーブルを作成し、データへの SQL アクセスを有効にします。
前提条件
Tablestore SDK for Java をインストールし、クライアントを初期化しておきます。
Tablestore SDK for Java 5.13.0 以降を使用します。
マッピングテーブルの作成対象となるデータテーブルを作成しておきます。 検索インデックスのマッピングテーブルを作成するには、まず検索インデックスを作成しておきます。
説明
sqlQuery メソッドを呼び出して CREATE TABLE ステートメントを実行し、既存のデータテーブルまたは検索インデックスのマッピングテーブルを作成します。
SQLQueryResponse sqlQuery(SQLQueryRequest request)
データテーブルの場合、マッピングテーブルはデータテーブルと同じ名前である必要があります。 フィールド名では大文字と小文字が区別されず、フィールドタイプはデータテーブルのフィールドタイプに対応している必要があります。 検索インデックスの場合、マッピングテーブル名をカスタマイズし、ENGINE と ENGINE_ATTRIBUTE を使用してデータテーブルと検索インデックスを指定できます。
CREATE TABLE ステートメントの構文、フィールドタイプ、パラメーターの詳細については、「DDL 操作」をご参照ください。
次の例では、文字列型のプライマリキー列と 4 つの属性列を含む example_table データテーブルのマッピングテーブルを作成します。
String query = "CREATE TABLE example_table ("
+ "pk VARCHAR(1024), "
+ "long_value BIGINT, "
+ "double_value DOUBLE, "
+ "string_value MEDIUMTEXT, "
+ "bool_value BOOL, "
+ "PRIMARY KEY(pk))";
SQLQueryRequest request = new SQLQueryRequest(query);
client.sqlQuery(request);
パラメーター
SQLQueryRequest には、次のパラメーターがあります。
|
名前 |
タイプ |
説明 |
|
query (必須) |
String |
マッピングテーブル名、フィールド、プライマリキー、クエリエンジンを定義する |
シナリオ例
検索インデックスのマッピングテーブルの作成
検索インデックスのマッピングテーブルを作成するには、ENGINE を searchindex に設定し、ENGINE_ATTRIBUTE でデータテーブルと検索インデックスを指定します。 次の例では、example_search_table という名前のマッピングテーブルを、example_table データテーブルの example_index 検索インデックスに対して作成します。
String tableName = "example_table";
String indexName = "example_index";
String mappingTableName = "example_search_table";
String query = String.format(
"CREATE TABLE %s (pk MEDIUMTEXT, long_value BIGINT, "
+ "double_value DOUBLE, string_value MEDIUMTEXT, "
+ "bool_value BOOL) ENGINE='searchindex' "
+ "ENGINE_ATTRIBUTE='{\"index_name\":\"%s\","
+ "\"table_name\":\"%s\"}'",
mappingTableName, indexName, tableName);
SQLQueryRequest request = new SQLQueryRequest(query);
client.sqlQuery(request);
よくある質問
マッピングテーブル作成時に「Table 'instance.table' doesn't exist」エラーが返される
原因:指定されたデータテーブルまたは検索インデックスが存在しません。 CREATE TABLE ステートメントは、既存のデータテーブルまたは検索インデックスのマッピングテーブルのみを作成します。 データテーブルや検索インデックス自体は作成しません。
解決策:データテーブルまたは検索インデックス名が正しいことと、それらが存在することを確認してください。 その後、CREATE TABLE ステートメントを再実行してください。
マッピングテーブル作成時に「Table 'instance.table' already exists」エラーが返される
原因:マッピングテーブルがすでに存在します。 CREATE TABLE ステートメントによって作成されたか、明示的なマッピングテーブルなしで DESCRIBE または SELECT ステートメントが実行されたときに自動的に作成された可能性があります。 自動的に作成されたマッピングテーブルには、データテーブルのプライマリキー列のみが含まれます。
解決策:
マッピングテーブルがすでに存在する場合にエラーが発生しないようにするには、
CREATE TABLEステートメントにIF NOT EXISTSを追加してください。マッピングテーブルのスキーマを変更する場合は、まず
DESCRIBEステートメントを実行してスキーマを表示してください。CREATE TABLEステートメントで作成されたマッピングテーブルは、ALTER TABLEステートメントを使用して変更できます。 自動的に作成されたマッピングテーブルは変更できません。 ワークロードへの影響を評価した後、DROP TABLEステートメントを実行してマッピングテーブルを削除し、再作成してください。