アイデンティティ列とは? アイデンティティ列とは、データベース内の列で、新しいデータ行ごとに一意のID番号を自動生成するものです。この番号は、行の内容とは関係ありません。 アイデンティティ列は代理キーの一種です。データウェアハウスでは、各行を一意に識別し、データの変更を追跡するために、代理キーと呼ばれる追加のキーを使用するのが一般的です。さらに、自然キーよりも代理キーの使用が推奨されます。代理キーはシステムによって生成され、行の一意性を識別するために複数のフィールドに依存しません。 したがって、アイデンティティ列は代理キーを作成するために使用され、データウェアハウスやデータマートの次元モデリングにおいて主キーおよび外部キーとして機能します。以下に示すように、これらのキーは、スター スキーマのような従来の次元モデルで、異なるテーブル同士を接続する列です。 スター スキーマの例 データレイクでの代理キー生成の従来のアプローチ ほとんどのビッグデータテクノロジーは、パフォーマンスを向上させるために、タスクを同時に完了できる小さな部分に分割する機能である並列処理を使用しています。データレイクの初期の頃は、マシン グループ全体で一意のシーケンスを作成する簡単な方法がありませんでした。このため、一部のデータ エンジニアは、適切な機能なしで代理キーを生成するために、信頼性の低い方法を使用していました。たとえば、次のような方法です。 monotonically_increasing_id(), row_number(), Rank OVER, ZipWithIndex(), ZipWithUniqueIndex(), hash()を使用した行ハッシュ、および md5()を使用した行ハッシュ。 これらの関数は特定の状況下で役立ちますが、シーケンスの疎な設定、大規模なパフォーマンスの問題、同時トランザクションの問題に関する多くの警告や注意点が含まれていることがよくあります。 データベースでは、中央化されたトランザクション マネージャーの助けを借りて、行データを一意に識別する代理キーを生成するために、初期の頃からシーケンスを生成できるようになっていました。ただし、典型的な実装ではロックとトランザクション コミットが必要であり、管理が困難になる場合があります。 Delta Lake のアイデンティティ列により代理キー生成が容易に アイデンティティ列は、上記の問題を解決し、代理キーを生成するためのシンプルでパフォーマンスの高いソリューションを提供します。Delta Lake は、代理キー生成のためにアイデンティティ列を有効にした最初のデータレイク プロトコルです。 Delta Lake は現在、新しい行が読み込まれるときに一意の自動インクリメント ID 番号を自動生成できる IDENTITY 列の作成をサポートしています。これらの ID 番号は連続していない場合がありますが、Delta はギャップを可能な限り小さく保つよう最善を尽くします。この機能を使用して、データウェアハウスのワークロードの代理キーを簡単に作成できます。 SQL と Delta Lake を使用してアイデンティティ列で代理キーを作成する方法 [推奨] Always As Identity を生成 SQL でアイデンティティ列を作成するのは、Delta Lake テーブルを作成するのと同じくらい簡単です。列を宣言するときに、BIGINT データ型で id という名前の列(または好きな名前)を追加し、GENERATED ALWAYS AS IDENTITY と入力します。 これで、このテーブルに対してデータを挿入する操作を実行するたびに、この列を挿入から除外すると、Delta Lake は挿入された各行に対して IDENTITY 列に一意の値を自動生成します。 Delta Lake でアイデンティティ列を使用する簡単な例を次に示します。 CREATE OR REPLACE TABLE demo ( id BIGINT GENERATED ALWAYS AS IDENTITY, product_type STRING, sales BIGINT ); 今後、「id」というタイトルのアイデンティティ列は、テーブルに新しいレコードを挿入するたびに自動的にインクリメントされます。その後、次のように新しいデータを挿入できます。 INSERT INTO demo (product_type, sales) VALUES ("Batteries", 150000); 「id」というタイトルの代理キー列が INSERT ステートメントの部分にないことに注意してください。Delta Lake は、テーブルをクラウド オブジェクト ストレージ (例: AWS S3、Azure Data Lake Storage、Google Cloud Storage) に書き込むときに代理キーを生成します。詳細については、ドキュメントを参照してください。 Generate by DEFAULT GENERATED BY DEFAULT AS IDENTITY オプションもあり、これは ALWAYS オプションとは異なり、アイデンティティ挿入をオーバーライドできます。 この新しい機能を採用する際には、いくつか注意すべき点があります。アイデンティティ列は既存のテーブルに追加できません。テーブルは、新しいアイデンティティ列を追加して再作成する必要があります。これを行うには、新しいアイデンティティ列を持つ新しいテーブル DDL を作成し、既存の列を新しいテーブルに挿入するだけで、新しいテーブルに代理キーが生成されます。 Databricks SQL の Delta Lake でアイデンティティ列を使い始める アイデンティティ列は、Databricks Runtime 10.4+ および Databricks SQL 2022.17+ で一般提供 (GA) されるようになりました。アイデンティティ列を使用すると、Photon によって高速化されたレイクハウス アーキテクチャのすべてのメリットを、すべてのデータウェアハウス ワークロードで有効にできるようになります。今すぐ Databricks SQL でアイデンティティ列をお試しください。 (このブログ記事はAI翻訳ツールを使用して翻訳されています) 原文記事