Teradata-hashing-algorithm
提供:Dev Guides
Teradata-ハッシュアルゴリズム
行は、プライマリインデックス値に基づいて特定のAMPに割り当てられます。 Teradataはハッシュアルゴリズムを使用して、行を取得するAMPを決定します。
以下は、ハッシュアルゴリズムの高レベルの図です。
以下は、データを挿入する手順です。
- クライアントはクエリを送信します。
- パーサーはクエリを受信し、レコードのPI値をハッシュアルゴリズムに渡します。
- ハッシュアルゴリズムはプライマリインデックス値をハッシュし、Row Hashと呼ばれる32ビットの数値を返します。
- 行ハッシュの上位ビット(最初の16ビット)は、ハッシュマップエントリを識別するために使用されます。 ハッシュマップには1つのAMP#が含まれます。 ハッシュマップは、特定のAMP#を含むバケットの配列です。
- BYNETは、識別されたAMPにデータを送信します。
- AMPは32ビットの行ハッシュを使用して、ディスク内の行を特定します。
- 同じ行ハッシュを持つレコードがある場合、32ビットの数値である一意性IDを増やします。 新しい行ハッシュの場合、一意性IDは1として割り当てられ、同じ行ハッシュを持つレコードが挿入されるたびに増分されます。
- 行ハッシュと一意性IDの組み合わせは、行IDと呼ばれます。
- 行IDは、ディスク内の各レコードの前に付けられます。
- AMPの各テーブル行は、行IDによって論理的にソートされます。
テーブルの保存方法
テーブルは、行ID(行ハッシュと一意性ID)で並べ替えられ、AMP内に保存されます。 行IDは各データ行とともに保存されます。
Row Hash | Uniqueness ID | EmployeeNo | FirstName | LastName |
---|---|---|---|---|
2A01 2611 | 0000 0001 | 101 | Mike | James |
2A01 2612 | 0000 0001 | 104 | Alex | Stuart |
2A01 2613 | 0000 0001 | 102 | Robert | Williams |
2A01 2614 | 0000 0001 | 105 | Robert | James |
2A01 2615 | 0000 0001 | 103 | Peter | Paul |