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

Lindorm:データバージョニング

最終更新日:Apr 21, 2026

このトピックでは、LindormTable SQL のヒントを使用してデータバージョニングのタイムスタンプを設定する方法について説明します。

サポートされるエンジンとバージョン

このヒント構文は、LindormTable エンジンバージョン 2.3.1 以降でのみ使用できます。

説明

現在のバージョンを確認またはアップグレードする方法については、「LindormTable のリリースノート」および「マイナーバージョンのアップグレード」をご参照ください。

仕組み

LindormTable では、各列の値は書き込み時にタイムスタンプを受け取ります。デフォルトでは、このタイムスタンプは書き込み操作のサーバー時間であり、列のバージョン識別子として機能します。タイムスタンプが大きいほど、新しいバージョンを示します。カスタムタイムスタンプを指定することもできます。ワイドカラムテーブルに複数バージョンのデータを格納する場合は、テーブルの作成時にバージョン属性 'VERSIONS' = 'n' を設定する必要があります。ここで、n は各列で保持するバージョンの最大数です。複数バージョンのデータをクエリするには、クエリで適切なヒントを指定する必要があります。次の表に、データバージョニングで使用されるヒントを示します。

ヒント

説明

適用可能な文

_l_ts_(N)

指定されたタイムスタンプでデータを読み書きします。

UPSERT、SELECT

_l_versions_(N)

結果セット内で最新の N 個のバージョンのデータを返します。

SELECT

_l_ts_min_(N)

結果セットをフィルタリングし、タイムスタンプが N 以上のデータを返します。

SELECT

_l_ts_max_(N)

結果セットをフィルタリングし、タイムスタンプが N 未満のデータを返します。

SELECT

操作手順

タイムスタンプの設定とデータのクエリ

LindormTable では、プライマリキー以外の列にタイムスタンプを設定し、そのタイムスタンプを使用して特定のデータバージョンをクエリできます。

  1. テストテーブルを作成し、保持するバージョン数を指定します。

    CREATE TABLE t_test_versions_2 (c1 INT , c2 INT, c3 VARCHAR(50), PRIMARY KEY(c1)) WITH(VERSIONS='5');
    説明

    ALTER TABLE table_name SET 'VERSIONS' = 'num'; 文を実行して、テーブルのバージョン数を指定または変更できます。ここで、table_name はテーブル名、num はバージョン数です。

  2. タイムスタンプを設定するには、適切なヒントを指定する必要があります。例:

    UPSERT /*+ _l_ts_(1000)  */ INTO t_test_versions_2(c1, c3) values (1, '11');
    UPSERT /*+ _l_ts_(2001)  */ INTO t_test_versions_2(c1, c3) values (1, '22');
    UPSERT /*+ _l_ts_(1000)  */ INTO t_test_versions_2(c1, c2) values (1, 1);
    UPSERT /*+ _l_ts_(2001)  */ INTO t_test_versions_2(c1, c2) values (2, 1);
    UPSERT /*+ _l_ts_(2002)  */ INTO t_test_versions_2(c1, c2) values (2, 2);
    UPSERT /*+ _l_ts_(2003)  */ INTO t_test_versions_2(c1, c2) values (2, 3);
    UPSERT /*+ _l_ts_(2004)  */ INTO t_test_versions_2(c1, c2) values (2, 4);
    UPSERT /*+ _l_ts_(2005)  */INTO t_test_versions_2(c1, c2) values (2, 5);
    UPSERT /*+ _l_ts_(2006)  */ INTO t_test_versions_2(c1, c2) values (2, 6);
  3. タイムスタンプを使用して特定のデータバージョンをクエリします。列のタイムスタンプを表示するには、クエリでその列と拡張列を指定する必要があります。拡張列の名前は、column_name_l_ts という形式に従います。

    例えば、列 c3 のタイムスタンプを表示するには、SELECT 文に c3c3_l_ts の両方を含める必要があります。

    重要

    バージョン情報をクエリする際に、バージョン関連のヒントを含めずに拡張列 (例:'c3_l_ts') を選択した場合、結果セットの拡張列は null を返します。したがって、クエリ文には /*+ _l_versions_(1) *//*+ _l_ts_min_(N) */ のようなバージョン関連のヒントも含める必要があります。

    • 例 1:タイムスタンプ 1000 のデータを返します。

      SELECT /*+ _l_ts_(1000) */ c1, c3, c3_l_ts FROM t_test_versions_2 WHERE c1 = 1;

      次の結果が返されます。

      +----+----+---------+
      | c1 | c3 | c3_l_ts |
      +----+----+---------+
      | 1  | 11 | 1000    |
      +----+----+---------+
    • 例 2:タイムスタンプが [1000,2001) の範囲にあるデータをクエリします。

      SELECT /*+ _l_ts_min_(1000), _l_ts_max_(2001)  */ c1, c3, c3_l_ts FROM t_test_versions_2 WHERE c1 = 1;

      次の結果が返されます。

      +----+----+---------+
      | c1 | c3 | c3_l_ts |
      +----+----+---------+
      | 1  | 11 | 1000    |
      +----+----+---------+
    • 例 3:_l_versions_(N) ヒントを使用して、最新の N 個のバージョンのデータを返します。

      SELECT /*+ _l_versions_(1) */ c1, c3, c3_l_ts FROM t_test_versions_2 WHERE c1 = 1;

      次の結果が返されます。

      +----+----+---------+
      | c1 | c3 | c3_l_ts |
      +----+----+---------+
      | 1  | 22 | 2001    |
      +----+----+---------+
    • 各列の最新 2 バージョンを返します。同じタイムスタンプを持つバージョンは 1 つの行にグループ化されます。_l_versions_(N) ヒントは、すべてのプライマリキー以外の列のタイムスタンプデータを取得します。

      SELECT /*+ _l_versions_(2)  */ c1, c2, c3, c2_l_ts, c3_l_ts FROM t_test_versions_2;

      次の結果が返されます。

      +----+------+------+---------+---------+
      | c1 |  c2  |  c3  | c2_l_ts | c3_l_ts |
      +----+------+------+---------+---------+
      | 1  | null | 22   | null    | 2001    |
      | 1  | 1    | 11   | 1000    | 1000    |
      | 2  | 6    | null | 2006    | null    |
      | 2  | 5    | null | 2005    | null    |
      +----+------+------+---------+---------+
    • 例 5:返されるバージョン数は、テーブルの 'VERSIONS' 属性によって上限が設定されます。例えば、このクエリは _l_versions_(6) で 6 つのバージョンをリクエストしていますが、テーブルが 'VERSIONS'='5' で作成されているため、5 つしか返されません。

      SELECT /*+ _l_versions_(6)  */ c1, c2, c2_l_ts FROM t_test_versions_2 WHERE c1=2;

      次の結果が返されます。

      +----+----+---------+
      | c1 | c2 | c2_l_ts |
      +----+----+---------+
      | 2  | 6  | 2006    |
      | 2  | 5  | 2005    |
      | 2  | 4  | 2004    |
      | 2  | 3  | 2003    |
      | 2  | 2  | 2002    |
      +----+----+---------+