# 串流資料

上線程序會從來源傳輸資料，並將其儲存在 Iceberg 表格中。串流資料來源中的變更會近乎即時地持續套用於儲存表格。

## 上線資料

資料會在管道專案中上線，而資料集則儲存在專案設定中定義的 S3 位置。

1. 在專案中，按一下建立，然後按一下上線資料。

2. 為上線新增任務名稱和選用描述。

   按一下下一步。

3. 選取來源連線。

   您可以選取現有串流來源連線，也可以建立與來源的新連線。

   如需詳細資訊，請參閱 [連接資料串流](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/SourcesConnections/Connecting-Data-Streams.htm)

   按一下 下一步，並追蹤以下適用於您資料來源的指示。

### 選取資料

#### Apache Kafka

此清單會顯示來源連線中定義之叢集的可用的 Kafka 主題。

選取主題時，您可以選取特定的資料集。您也可以使用選取規則以納入或排除資料集群組：

* 使用 % 作為萬用字元，為資料集定義選取標準。

如果使用選取規則選取主題，您可以選擇將所有資料集載入相同的目標表格，或為每個來源主題建立個別的目標表格：

* 依預設，目標 Iceberg 表格名稱衍生自主題名稱，並依據命名慣例進行格式化，例如小寫、移除空格、將破折號取代為底線。在 定義目標資料集名稱 中，您可以編輯目標表格的名稱

* 當使用選取規則將多個主題載入單一資料表時，您必須提供目標名稱。

* 當使用選取規則且資料載入個別資料表 (每個主題一個資料集) 時，預設目標名稱為主題名稱。在此階段，您無法在精靈中編輯名稱，但稍後可以在登陸任務中完成此操作。

* 如果規則設定為選取要擷取的主題，則任何符合規則條件的新主題也會登陸，如果登陸任務設定中結構描述演進下的新主題 &gt; 新增至目標選項已勾選。

選取一或多個資料集，或使用選取規則，然後按一下 新增。按一下下一步。

#### Amazon Kinesis

此清單會顯示來源連線中定義的可用 Kinesis 串流。

選取一或多個資料集，然後按一下新增。您可在選取的串流之下看見新增的資料集。按一下下一步。

#### Amazon S3

目錄瀏覽器會顯示位於來源連線的 S3 值區中的所有目錄清單。

資訊備註使用資料模式選取目錄可改善效能。

* 選取登陸資料時要納入的目錄：

  * 針對每個目錄，在新增路徑中，輸入路徑和檔案名稱模式：

    * 使用 \* 作為萬用字元以比對任何字元。

    * 若要輸入日期模式，請使用 &lt;yyyy&gt; 作為四位數年份的預留位置、&lt;MM&gt; 作為兩位數月份的預留位置、&lt;dd&gt; 作為兩位數日期的預留位置，以及 &lt;HH&gt; 作為兩位數小時的預留位置。例如︰

      * MyDir3/&lt;yyyy&gt;\_&lt;MM&gt;\_&lt;dd&gt;\_&lt;HH&gt;\_訂單.csv

      * MyDir3/&lt;yyyy&gt;/&lt;MM&gt;/&lt;dd&gt;/&lt;HH&gt;\_訂單.csv

* 按一下 預覽 以開啟 預覽資料 對話方塊。已包含和已排除檔案的清單會顯示。

* 按一下 驗證，檢查路徑和檔案名稱模式是否正確且正常運作。

* 在 定義目標資料集名稱 中，提供名稱以將主題對應至目標 Iceberg 表格。按一下下一步。

### 選取內容類型

選擇來源事件內容類型。

* 在 選擇資料事件類型 中選取您正在擷取的事件類型。

* 如需詳細資訊，請參閱[連接資料串流](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/SourcesConnections/Connecting-Data-Streams.htm)。

  選取的內容類型適用於所有主題、資料集或資料事件。您必須針對您要擷取的每個內容類型建立新任務。

* 展開 驗證事件已正確載入 以確認資料可被剖析。建議在此階段確保資料正確無誤，否則您需要重新建立管道並再次載入資料。使用 選取資料集 來檢查特定資料集，並檢查任何可能影響資料載入的警告。按一下任何結構欄旁的眼睛圖示以檢視資料。

* 按一下下一步。

資訊備註如果資料集未偵測到任何事件，則會在登陸中顯示訊息。當有事件可供讀取時，您將需要執行任務，且欄將會自動新增。

### 設定擷取屬性

設定管道的組態：

* 讀取資料自

  * 從最早的事件開始：擷取所有歷史資料。

  * 從現在開始：擷取管道啟動時到達的新資料。

* 欄取消巢狀

  * 保留巢狀欄：不套用任何轉換。

  * 解除巢狀結構為個別欄：資料會分割成個別欄。

* 新資料集的載入設定

  * 僅附加：通常是事件資料的最佳選項，因為其生命週期通常很短且不會更新，例如訂單。

  * 套用變更：這最適合隨時間更新的資料，例如客戶。更新現有記錄並根據索引鍵欄位插入新的記錄。您之後需要在定義任務時指定索引鍵欄位。

* 目標表格分割

  目標表格分割選項適用於管道中的所有表格。您稍後可以在表格層級覆寫此設定，以定義自訂分割。

  資訊備註只有在載入設定中選取僅附加時，此選項才可用。

  * 無分割：將會建立沒有任何分割的表格。

  * 依事件擷取日期分割：將會透過擷取事件的日期分割表格。

    資訊備註當此選項與 hdr\_\_from\_timestamp 標頭欄選項一起選取時，hdr\_\_from\_timestamp 將用作預設分割區欄。如需新增 hdr\_\_from\_timestamp 標頭欄至標準檢視的資訊，請參閱 [資料表定義](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Lakehouse/storing-data-streaming.htm#Table)。

* 資料變更處理

  資訊備註只有在 載入設定 中選取 套用變更 時，此選項才可用。

  * 包含軟刪除：輸入運算式以定義要標記為刪除的記錄。

  * 建立歷史資料存放區 (類型 2)：這將保留已變更記錄的先前版本。

* 按一下下一步。

### 摘要

摘要畫面會以視覺方式顯示您的管道：

* 您可以選擇性地針對串流登陸和串流轉換任務，按一下 編輯名稱和描述 以提供新值。

* 選取您希望在 管道建立後 執行的選項。

* 設定所有設定後，按一下 建立 以建立串流管道。

* 專案顯示後，您可以準備並執行每個任務以開始擷取資料。

  * 準備和執行串流登陸任務。

    如需詳細資訊，請參閱[將串流資料登陸至 Qlik 開放湖倉庫](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Lakehouse/landing-data-streaming.htm)。

  * 準備和執行串流轉換任務。

    如需詳細資訊，請參閱[儲存串流資料集](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Lakehouse/storing-data-streaming.htm)。

## 資料類型對應

初始來源結構描述是根據在建立管道專案時，於 PREPARE 階段之前擷取的資料樣本，且結構描述演進會在讀取時處理。不支援 STRUCT 和 ARRAY 的鏡像任務和其他下游任務會使用 JSON 類型。資料可使用 SQL 進行剖析。

下列資料類型對應適用於所有支援的資料來源，但會依據來源檔案類型而異，且應注意下列事項：

* 資料類型是從正在上線的資料樣本推斷而來。例如，如果欄位在樣本中只包含整數值，它會在串流登陸和轉換任務中建立為 INT8。如果後續資料包含雙精確度小數值，登陸檔案會包含這些值；然而，在串流轉換任務中，如果 變更欄位資料類型 設定為 忽略，欄位會維持 INT8 且小數值會被截斷。為避免意外截斷，請確保樣本資料在上線前包含所有預期值的完整範圍，或在早期階段將變更欄位資料類型設定為停止任務，並視需要調整資料類型。

* 如果在來源的結構中新增欄位，則該欄位一律會新增至登陸目標。對於串流轉換，行為會根據串流轉換任務設定 &gt; 結構描述演進 &gt; 將欄位新增至結構 (套用至目標、忽略、停止任務) 中選擇的選項來套用。

* 如果特定記錄中缺少欄位，或陣列為空，則會將其視為 null。

* 如果資料集由陣列扁平化，且記錄到達時該陣列為空或 null，系統會建立一個資料列，且扁平化欄位為 null。它不會自動排除。如果您要排除這些列，請手動新增篩選器，例如array\_element IS NOT NULL。

* UI 中顯示的資料類型反映選取的資料集精細度。對於扁平化陣列，會顯示個別元素的資料類型，而非陣列結構本身。

* 無法在巢狀 JSON 欄位內的結構中新增屬性，只能在根層級新增。

* 在串流轉換任務中，僅支援單層陣列的扁平化。當扁平化套用至多層陣列時，例如 ARRAY&lt;ARRAY&lt;STRUCT&gt;&gt;，只會扁平化外部陣列，產生 ARRAY&lt;STRUCT&gt;，而非完全扁平化的 STRUCT。此外，目前的 UI 僅允許在欄位層級設定扁平化。因此，選取多層陣列會隱含地將扁平化套用至第一個陣列層級。

* 當您參考基本類型陣列時，如果粒度是陣列，則使用元素的資料類型。否則，將使用陣列資料類型。

  在此範例中，OrderDetails 具有資料類型為 INT 的 CustomerID 陣列。OrderDetailsCustomerID 表示 INT 如果粒度是 OrderDetails。CustomerID 和 ARRAY&lt;INT&gt; 如果粒度是 OrderDetails。

### JSON

在 JSON 檔案中，來源中的數值決定目標資料類型：

* INT8 用於符合支援的整數範圍且不包含小數部分的整數值。

* REAL8 (DOUBLE) 用於值包含小數部分 (浮點數) 的情況。

* STRING 用於數值超出支援的最大整數範圍的情況。

資料類型對應如下：

| 來源資料類型 | Qlik Talend Data Integration資料類型 |
| --- | --- |
| 字串 | 字串 |
| NUMBER | INT8 |
| NUMBER | REAL8 |
| NUMBER | 字串 |
| 布林值 | 布林值 |
| 陣列 | 陣列 |
| 物件 | STRUCT |

### CSV、TSV、REGEX 和 SPLIT

預設情況下，所有來源資料類型都會被擷取為字串。使用選項 自動推斷類型，以對應來源和目標類型，如下所示：

| 來源資料類型 | Qlik資料類型 |
| --- | --- |
| 數字 | INT8/REAL8 |
| 真/TRUE/真/假/FALSE/假 | 布林值 |
| 時間戳記 | 格式為 yyyy-MM-dd HH:mm:ss 或 yyyy-MM-ddTHH:mm:ssz 的時間戳記會剖析為日期時間類型。如果包含時區，該值會被解析為字串。 |

### Parquet

Parquet 檔案支援實體和邏輯資料類型。實體資料類型定義值在磁碟上的儲存方式，例如 INT32、DOUBLE 或 BYTE\_ARRAY。邏輯資料類型在實體表示之上提供語義，例如，識別整數值是否代表日期。當邏輯類型附加到 Parquet 欄位並在 Qlik 開放湖倉庫 中受支援 (如下所列) 時，串流登陸任務會在定義目標結構描述時使用邏輯類型，而不是底層的實體類型。這可確保資料正確解譯，保留預期的語意 (例如精確度、小數位數和時間意義)，並在將資料寫入下游格式時產生更精確的結構描述。

從 Parquet 檔案取得的資料對應如下：

| 來源資料類型 | 邏輯類型 | Qlik Talend Data Integration資料類型 |
| --- | --- | --- |
| 布林值 | 布林值 |  |
| INT32 | INT8 |  |
| INT64 | INT8 |  |
| INT96 | 日期時間 |  |
| 浮動 | REAL8 |  |
| 雙重 | REAL8 |  |
| BYTE\_ARRAY | 字串 (以 Base64 編碼) |  |
| FIXED\_LEN\_BYTE\_ARRAY | 字串 (以 Base64 編碼) |  |
| BYTE\_ARRAY | 字串 | 字串 |
| BYTE\_ARRAY | ENUM | 字串 |
| INT32 | 小數 | INT8 |
| INT64 | 小數 | INT8 |
| FIXED\_LEN\_BYTE\_ARRAY | 小數 | INT8/REAL8 (以 Base64 編碼) |
| BYTE\_ARRAY | 小數 | INT8/REAL8 (以 Base64 編碼) |
| INT32 | 日期 | 日期 |
| INT32 | 時間(毫秒,true) | INT8 |
| INT64 | 時間(微秒,true) | 時間 |
| INT64 | TIMESTAMP(MICROS,true) | 日期時間 |
| INT64 | TIMESTAMP(MILLIS,true) | 日期時間 |
| 巢狀類型 | STRUCT |  |
| 列示 | 陣列 |  |
| 地圖 | 陣列&lt;STRUCT&gt;。代表鍵值對的結構陣列。 |  |

### Avro

下列對應適用於具有結構描述登錄檔的 Avro 檔案。

| 來源資料類型 | 邏輯類型 | Qlik Talend Data Integration資料類型 |
| --- | --- | --- |
| 布林值 | 布林值 |  |
| INT | INT8 |  |
| LONG | INT8 |  |
| 浮動 | REAL8 |  |
| 雙重 | REAL8 |  |
| 位元組 | 字串 |  |
| 字串 | 字串 |  |
| RECORD | STRUCT |  |
| ENUM | 字串 |  |
| 陣列 | 陣列 |  |
| 地圖 | 陣列&lt;結構&gt; |  |
| 聯集 |  |  |
| 固定式 | 字串 |  |
| 位元組 | 小數 | 小數 |
| 固定式 | 小數 | 小數 |
| INT | 日期 | 日期 |
| INT | TIME-MILLIS | INT8 |
| INT | TIME-MICROS | 時間 |
| LONG | TIMESTAMP-MILLIS | 日期時間 |
| LONG | TIMESTAMP-MICROS | 日期時間 |

### ORC

下列對應適用於 ORC 檔案。

| 來源資料類型 | Qlik Talend Data Integration資料類型 |
| --- | --- |
| 布林值 | 布林值 |
| 位元組 | INT8 |
| 短 | INT8 |
| INT | INT8 |
| LONG | INT8 |
| 日期 | 日期 |
| 浮動 | REAL8 |
| 雙重 | REAL8 |
| 時間戳記 | 日期時間 |
| 二進位 | 字串 |
| 小數 | REAL8 |
| 字串 | 字串 |
| VARCHAR | 字串 |
| CHAR | 字串 |
| 列示 | 陣列 |
| 地圖 | 陣列&lt;STRUCT&gt;。代表鍵值對的結構陣列。 |
| STRUCT | STRUCT |
| 聯集 |  |

## 限制和考慮事項

* 如果結構或陣列在登陸中透過自動結構描述演進修改，則非由 Qlik Talend Cloud 串流任務建立的下游檢視可能需要更新，以免過時。

* 如果任務有剖析錯誤，它將不會進入錯誤狀態，也不會被標記為需要注意。由於剖析錯誤是持續增加的指標，因此錯誤狀態沒有退出準則。

* 只有在沒有任務使用該叢集功能的情況下，才允許移除叢集功能。

* 對具有相同主索引鍵的記錄進行更新和刪除時，不得跨越分割區界限，也就是說，它們需要對應到相同的分割區。

* 如果來源包含大量資料行，則在任務和目錄中只會顯示依頻率排序的前 500 個資料行。所有資料行都會儲存到 S3 登陸中的 Avro 檔案，但只有前 500 個資料行會儲存在 Iceberg 資料表中。在結構描述演進中，如果新增資料行，即使該資料行很常用，也不會將其新增到熱門資料行。

  資訊備註從 SQL Server 擷取稀疏資料行時，500 個計數包含 Qlik 標頭資料行。