Qlik 開放湖倉庫 中的資料集架構
串流來源在 Qlik 開放湖倉庫 中有其專屬架構,因為它們不需要 Data Movement gateway 將資料載入登陸值區,而是由 lakehouse 叢集提供支援。
當您從檔案名稱中包含資料模式的檔案內嵌資料時,這可讓 lakehouse 叢集在 S3 中執行目標清單作業,從而大幅加快讀取檔案清單的時間。此外,Qlik 開放湖倉庫 可以根據日期模式預測到達的檔案。串流登陸工作不必每次都列出整個值區,而是可以要求 S3 中特定日期範圍內的檔案。較小的檔案清單可帶來更好的效能。可選的 載入後刪除 設定可用於維持較少的檔案數量。不執行完整載入,第一批記錄會被視為插入的變更。
在 Qlik 開放湖倉庫 中,串流轉換工作會取代儲存工作。此工作用於將登陸的資料轉換並儲存為 Iceberg 表格。串流轉換工作只能在串流登陸工作之後新增。串流轉換工作支援兩種更新記錄的模式:
- 僅附加:新增記錄而不修改現有資料,如果到達複製的記錄,則不會強制執行索引鍵條件約束。
-
套用變更 (合併):根據索引鍵欄位更新現有記錄並插入新記錄。此模式讓您可以選擇使用軟刪除,或保留歷史資料 (類型 2)。
串流轉換工作是基於目標的工作,可在來源和目標之間進行對應,並包含架構演進功能。它提供擴充的轉換功能,包括巢狀結構的取消巢狀和陣列的壓平。如需有關可在串流轉換工作中使用的函數的詳細資訊,請參閱 轉換函數。
當您從串流來源內嵌時,您可以設定 Iceberg 分割、保留管理、排序欄、快照到期以控制儲存成本,並最佳化查詢效能。
僅附加模式下串流 Qlik 開放湖倉庫 資料管道的架構

合併模式下串流 Qlik 開放湖倉庫 資料管道的架構

登陸表格
下列標頭欄位會新增至登陸表格。這些欄位始終存在於登陸資料中,但預設不包含在下游串流轉換工作中。您可以使用 從來源新增欄 將它們新增至串流轉換工作,或在新增或編輯欄時於運算式建立器中參考它們。
| 欄位 | 類型 | 描述 |
|---|---|---|
| hdr__kafka_partition | Long | Kafka 分割區 |
| hdr__kafka_topic | String | Kafka 主題 |
| hdr__kafka_offset | Long | 分割區中的執行值 |
| hdr__kafka_key | String | Base64 編碼的索引鍵。如果無法使用,則設為 NULL 字串。 |
| hdr__kafka_headers | String |
包含所有訊息標頭的 JSON。如果無法使用,則設為 NULL 字串。 |
| 欄位 | 類型 | 描述 |
|---|---|---|
| hdr__kinesis_stream | String | Amazon Kinesis 串流 |
| hdr__kinesis_shard | String | Amazon Kinesis 碎片 |
| hdr__kinesis_offset | String | Amazon Kinesis 位移 |
| 欄位 | 類型 | 描述 |
|---|---|---|
| hdr__file_name | String | 檔案名稱 |
| hdr__file_size | Long | 檔案大小 (位元組)。 |
架構
成品會在內部架構和資料工作架構中產生。
-
內部架構包含具有多個分割區的實體表格。
-
資料工作架構包含可用於取用資料的檢視。
當架構與多個資料工作關聯時,每個資料工作必須為表格和檢視使用唯一的前置詞。您可以在資料工作設定中設定前置詞。
僅會檢查內部架構是否有命名衝突。對於其他架構,您必須確保表格名稱中沒有命名衝突。最佳實務是將內部架構命名為與資料工作架構相同的名稱,並加上 _internal。這可確保每個架構和前置詞組合都是唯一的。
表格
對於每個來源表格,會在內部架構中建立一個帶有 _internal 尾碼的表格,格式如下:
<INTERNAL_SCHEMA>.<TABLE_NAME>_internal
此表格在 套用變更 (合併) 模式下包含五個分割區,每個分割區在資料處理和儲存方式上都有不同的用途。每個分割區根據其在資料生命週期中的角色,利用表格欄的子集。在 僅附加 模式下,表格沒有分割區,其行為類似於 Current 分割區 (ODS)。
內部資料集的結構旨在有效管理來自來源系統的傳入資料,支援即時內嵌和歷史追蹤。 資料流程透過幾個專門的分割區進行管理,每個分割區的描述如下:
-
Changes 分割區 – 即時內嵌
來自來源系統的所有變更 (插入、更新和刪除) 都會首先附加到 Changes 分割區。
-
作為原始變更記錄,該分割區在發生任何轉換之前提供來源活動的完整摘要。
-
每個變更都標記有類型 (I、U 或 D),指出其處理方式。
-
事件在發生時從來源擷取。分割區會以近乎即時的方式更新。
-
當在 Lake 登陸資料工作中套用下列設定時,可以使用 Changes 分割區。
-
在 一般 索引標籤中,更新方法 設為 CDC。
-
已啟用完整載入。
-
-
-
Asset_state 分割區 - 追蹤進度
隨著變更的內嵌,Asset_state 分割區會記錄兩個關鍵時間戳記:
-
上次將變更附加到 Changes 分割區的時間。
-
上次將變更套用到 Current 分割區的時間。
這提供了對同步管道的完整可見性,並有助於監控或疑難排解延遲。
-
-
Current 分割區 (ODS) – 來源的最新複本
來自 Changes 分割區的變更會定期套用到 Current 分割區,以維護來源資料的最新、查詢最佳化副本。
-
背景工作會自動執行以套用這些更新。這是基於累積變更的數量,而不是固定的排程。
-
初始完整載入會直接寫入 Current 分割區。
-
此分割區反映資料的目前狀態,專為高效查詢而設計。
-
-
Prior 分割區 (HDS) – 歷史資料
當記錄在 Current 分割區中更新或刪除時,先前版本的副本會寫入 Prior 分割區。
-
記錄包含中繼資料,包括變更歷史記錄和資料有效的日期範圍。
-
這支援類型 2 緩慢變更維度 (SCD2)。
-
當在儲存資料工作設定的 一般 索引標籤中啟用 保留歷史記錄和變更記錄的封存 時,可以使用 Prior 分割區。
-
當記錄的更新版本進入 Current 分割區時,先前的記錄會移至 Prior 分割區以進行歷史追蹤。
-
-
Reload 分割區
Reload 分割區在手動或排程的完整重新載入期間充當暫存區域:
-
新資料會首先寫入 Reload 分割區。
-
定期維護工作會在暫停之前清除任何暫停的變更。
-
將資料與 Current 分割區進行比較,並且僅將差異移至 Current 分割區。
-
作業完成時,會清除 Reload 分割區。
此程序可確保在完整重新載入作業期間對主要資料集的干擾降至最低。
-
Current 分割區
| 欄位 | 類型 | 描述 |
|---|---|---|
| hdr__key_hash | VARBINARY (20) | 所有記錄主索引鍵的雜湊。雜湊格式為 SHA1。欄以退格字元分隔。 |
| hdr__from_timestamp | TIMESTAMP |
UTC 時間戳記:
|
| hdr__operation | VARCHAR (1) |
此記錄的最新作業。
|
| hdr__inserted_timestamp | TIMESTAMP | 首次新增索引鍵的 UTC 時間戳記。使用完整載入時,為完整載入的開始時間。 |
| hdr__modified_timestamp | TIMESTAMP | 上次進行更新時的 UTC 時間戳記。 |
Prior 分割區
| 欄位 | 類型 | 描述 |
|---|---|---|
| hdr__key_hash | VARBINARY (20) | 所有記錄主索引鍵的雜湊。 |
| hdr__from_timestamp | TIMESTAMP | UTC 時間戳記。 |
| hdr__to_timestamp | TIMESTAMP | UTC 時間戳記。 |
| hdr__operation | STRING (1) |
此記錄的最新作業。
|
| hdr__was_current_from_timestamp | TIMESTAMP | 記錄首次成為目前記錄的 UTC 時間戳記。 |
| hdr__was_current_to_timestamp | TIMESTAMP | 記錄最後一次成為目前記錄的 UTC 時間戳記。 |
Changes 分割區
| 欄位 | 類型 | 描述 |
|---|---|---|
| hdr__change_identifier | VARCHAR (50) |
變更識別碼是包含兩個部分的字串:
|
| hdr__operation | VARCHAR (1) |
此記錄的最新作業。
|
| hdr__timestamp | TIMESTAMP | UTC 時間戳記。 |
| hdr__key_hash | BINARY (20) | 所有記錄主索引鍵的雜湊。 |
| hdr__inserted_timestamp | TIMESTAMP | Qlik 處理變更時的 UTC 時間戳記。 |
Asset_state 分割區
| 欄位 | 類型 | 描述 |
|---|---|---|
| hdr__apply_change_identifier | VARCHAR (50) | 套用到 Current 分割區的最新變更的變更識別碼。 |
| hdr__copy_change_identifier | VARCHAR (50) | 附加到 Changes 分割區的最新變更的變更識別碼。 |
Reload 分割區
Reload 分割區使用的欄與 Current 分割區相同。
檢視
建立的所有檢視都會以近乎即時的方式更新。下列檢視可用於簡化查詢和報告:
Current
Current 檢視反映資料的最新狀態。此檢視代表來源表格的複本,以近乎即時的方式更新。它合併了來自 Current 和 Changes 分割區的資料。
名稱:<EXTERNAL_SCHEMA>.[<PREFIX>]<TABLE_NAME>
沒有標頭欄新增至表格結構。
History
當在資料工作設定中啟用 History 時,會在資料資產架構中為每個選取的來源表格產生 History 檢視。History 檢視合併了來自 Prior 和 Changes 分割區的資料。它提供了完整的變更時間軸,非常適合稽核或歷史分析。
名稱:<EXTERNAL_SCHEMA>.[<PREFIX>]<TABLE_NAME>_<Suffix for history views>
下列標頭欄位會新增至 History 檢視:
| 欄位 | 類型 | 描述 |
|---|---|---|
| hdr__key_hash | BINARY (20) | 所有記錄主索引鍵的雜湊。 |
| hdr__from_timestamp | TIMESTAMP | 變更在來源系統中發生時的時間戳記。這反映了使用者最初進行變更的時間。 |
| hdr__to_timestamp | TIMESTAMP | 變更在來源系統中被還原或更新時的時間戳記。 |
| hdr__store | VARCHAR (10) |
這指出記錄所在的位置:
|
| hdr__operation | STRING (1) |
此記錄的最新作業。
|
| hdr__deleted | BIT | 根據 hdr__operation 是否為 D 或 d,指出記錄是否被軟刪除。 |
| hdr__was_current_from_timestamp | TIMESTAMP | 此列進入 Current 分割區的時間 (UTC)。這通常是儲存工作執行並套用變更的時間。 |
| hdr__was_current_to_timestamp | TIMESTAMP | 從 Current 表格中移除該列的時間 (UTC),例如,由於有較新的版本。 |