データテーブル内の Integer 型または String 型のデータを、データテーブル用に作成された検索インデックス内のさまざまな形式の日付型のデータにマッピングできます。検索インデックスを使用して範囲クエリを実行する場合、日付型は文字列型よりも高いパフォーマンスを提供します。
精度と範囲
日付データの最大精度はナノ秒です。日付データの値の範囲は ["1970-01-01 00:00:00.000000000", "2262-04-11 23:47:16.854775807"]
です。
日付形式
データテーブルの Integer 型または String 型のフィールドを、データテーブル用に作成された検索インデックスの日付型のフィールドにマッピングし、日付型のフィールドの形式を指定できます。次の表に、形式を示します。
データテーブルのフィールド型 | 検索インデックスの日付型のフィールドの形式 |
Integer | 定義済みの形式を使用できます。次の定義済み形式が提供されています。
|
String | カスタム形式がサポートされています。よく使用される日付形式を以下に示します。
上記の形式では、yyyy は4桁の年、MM は月、dd は日、HH は24時間表記の時、mm は分、ss は秒、SSS は秒の精度、X はタイムゾーンのオフセットを指定します。 詳細については、カスタム日付形式 を参照してください。 |
カスタム日付形式
文字 | 説明 | 例 |
y | 年。 |
|
M | 月。 |
|
d | 月の何日目か。 |
|
a | 1日の時間帯。12時間制では、1日は午前(AM)と午後(PM)の2つの期間に分けられます。AM は正午の前、PM は正午の後を指定します。 |
|
K | 午前または午後の時間。有効な値:0~11。 |
|
H | 24時間制での1日の時間。有効な値:0~23。 |
|
m | 分。 |
|
s | 秒。 |
|
S | 秒の精度。精度は1~9桁まで含めることができます。 |
|
X | タイムゾーンのオフセット。 |
|
x | タイムゾーンのオフセット。 |
|
' | カスタム修飾子。 | 文字を使用してカスタム修飾子を定義できます。文字列を修飾子として使用する場合は、文字列を一対の単一引用符('')で囲む必要があります。 重要 スペースとハイフン(-)は単一引用符で囲む必要はありません。 |
'' | エスケープ文字。 | '' |
日付形式を確認する
日付形式を使用してデータをクエリする前に、TermQuery または JDK 8 以降の DateTimeFormatter を使用して、日付形式が有効かどうかを確認することをお勧めします。
TermQuery を使用する
指定した日付形式のフィールドを含む検索インデックスを作成し、TermQuery を使用して日付形式を確認します。エラーが返されない場合、日付形式は有効です。
public void testDateFormat(SyncClient client, String tableName, String indexName) {
// 検索インデックスを作成します。
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
new FieldSchema("col_date", FieldType.DATE)
.setIndex(true)
.setEnableSortAndAgg(true)
.setDateFormats(Arrays.asList("yyyy-MM-dd HH:mm:ss.SSS"))
));
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);
// 日付形式を確認します。エラーが返されない場合、日付形式は有効です。
client.search(SearchRequest.newBuilder()
.tableName(tableName)
.indexName(indexName)
.searchQuery(SearchQuery
.newBuilder()
.query(QueryBuilders.term("col_date", "2022-12-12 12:10:03.123")).build())
.build());
}
DateTimeFormatter を使用する
このメソッドを使用して特定のタイムゾーンの日付形式を確認すると、エラーが発生する可能性があります。
JDK 8 以降がインストールされていることを確認してください。
JDK の DateTimeFormatter メソッドを呼び出して、日付形式を確認します。エラーが返されない場合、日付形式は有効です。
import java.time.format.DateTimeFormatter;
public void testFormatByJdk8() {
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS").parse("2022-12-12 12:10:03.123");
}
参照
日付型のデータを使用するには、Tablestore コンソールで、または Tablestore SDK を使用して検索インデックスを作成するときに、日付フィールドを設定できます。詳細については、検索インデックスを作成する を参照してください。
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます。用語クエリ、用語クエリ、すべて一致クエリ、一致クエリ、一致フレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、あいまいクエリ、ブールクエリ、地理クエリ、ネストされたクエリ、KNNベクトル検索クエリ、存在クエリ。ビジネス要件に基づいてクエリメソッドを選択し、多次元からデータをクエリできます。
並べ替えとページング機能を使用して、クエリ条件を満たす行を並べ替えたりページングしたりできます。詳細については、並べ替えとページングを実行する を参照してください。
折りたたみ(重複排除)機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。このようにして、指定された型のデータはクエリ結果に一度だけ表示されます。詳細については、折りたたみ(重複排除) を参照してください。
データテーブルのデータを分析する場合は、検索操作の集計機能を使用するか、SQL ステートメントを実行できます。たとえば、最小値、最大値、合計、行の総数などを取得できます。詳細については、集計 および SQL クエリ を参照してください。
行を並べ替えることなく、クエリ条件を満たすすべての行を取得する場合は、ParallelScan および ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。詳細については、並列スキャン を参照してください。