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

Tablestore:日付データ型

最終更新日:Dec 28, 2024

データテーブル内の Integer 型または String 型のデータを、データテーブル用に作成された検索インデックス内のさまざまな形式の日付型のデータにマッピングできます。検索インデックスを使用して範囲クエリを実行する場合、日付型は文字列型よりも高いパフォーマンスを提供します。

精度と範囲

日付データの最大精度はナノ秒です。日付データの値の範囲は ["1970-01-01 00:00:00.000000000", "2262-04-11 23:47:16.854775807"] です。

日付形式

データテーブルの Integer 型または String 型のフィールドを、データテーブル用に作成された検索インデックスの日付型のフィールドにマッピングし、日付型のフィールドの形式を指定できます。次の表に、形式を示します。

データテーブルのフィールド型

検索インデックスの日付型のフィールドの形式

Integer

定義済みの形式を使用できます。次の定義済み形式が提供されています。

  • "epoch_second": タイムスタンプを秒単位で指定します。たとえば、秒単位のタイムスタンプ "1218197720""2008-08-08 20:15:20" を指定します。

  • "epoch_millis": タイムスタンプをミリ秒単位で指定します。たとえば、ミリ秒単位のタイムスタンプ "1218197720123""2008-08-08 20:15:20.123" を指定します。

  • "epoch_micros": タイムスタンプをマイクロ秒単位で指定します。たとえば、マイクロ秒単位のタイムスタンプ "1218197720123456""2008-08-08 20:15:20.123456" を指定します。

  • "epoch_nanos": タイムスタンプをナノ秒単位で指定します。たとえば、ナノ秒単位のタイムスタンプ "1218197720123456789""2008-08-08 20:15:20.123456789" を指定します。

String

カスタム形式がサポートされています。よく使用される日付形式を以下に示します。

  • yyyy-MM-dd HH:mm:ss.SSS

  • yyyyMMdd HHmmss

  • yyyy-MM-dd'T'HH:mm:ss.SSSX

上記の形式では、yyyy は4桁の年、MM は月、dd は日、HH は24時間表記の時、mm は分、ss は秒、SSS は秒の精度、X はタイムゾーンのオフセットを指定します。

詳細については、カスタム日付形式 を参照してください。

カスタム日付形式

文字

説明

y

年。

  • yyyy: 2008.

  • yy: 08.

M

月。

  • M: 7.

  • MM: 07.

d

月の何日目か。

  • d: 8.

  • dd: 08.

a

1日の時間帯。12時間制では、1日は午前(AM)と午後(PM)の2つの期間に分けられます。AM は正午の前、PM は正午の後を指定します。

  • a: AM.

  • a: PM.

K

午前または午後の時間。有効な値:0~11。

  • K: 0.

  • KK: 00.

H

24時間制での1日の時間。有効な値:0~23。

  • H: 0.

  • HH: 00.

m

分。

  • m: 1.

  • mm: 01.

s

秒。

  • s: 1.

  • ss: 01.

S

秒の精度。精度は1~9桁まで含めることができます。

  • S: 3.

  • SSS: 234.

  • SSSSSSSSS: 123456789.

X

タイムゾーンのオフセット。

  • X: +01;Z.

  • XX: +0130;Z.

  • XXX: +01:30;Z

  • XXXX: +013015;Z.

  • XXXXX: +01:30:15;Z.

x

タイムゾーンのオフセット。

  • x: +01;+00.

  • xx: +0130;+0000.

  • xxx: +01:30;+00:00.

  • xxxx: +013015;+0000.

  • xxxxx: +01:30:15.

'

カスタム修飾子。

文字を使用してカスタム修飾子を定義できます。文字列を修飾子として使用する場合は、文字列を一対の単一引用符('')で囲む必要があります。

重要

スペースとハイフン(-)は単一引用符で囲む必要はありません。

''

エスケープ文字。

''

日付形式を確認する

日付形式を使用してデータをクエリする前に、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");
}

参照