# 表达式标头

在列表达式中使用标头来保留变更元数据，例如操作名称或源数据流位置。

`Q_H_` 标头在 SaaS 管理的登陆、湖登陆和复制任务中可用。当 [构建表达式](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Building-expressions.htm) 时，从编辑器的 Headers 列表中插入页眉。下表说明了在满负载和变更处理期间源端点的适用性和值。

## 所有源端点的标头

通用标头和处理阶段值

| 标头和数据类型 | 变更处理期间的值 | 满负载期间的值 |
| --- | --- | --- |
| `Q_H_CHANGE_SEQ`<br><br>`STRING(50)` | 在任务的各个变更表中单调递增的变更序列。将时间戳与带零前缀的变更计数器相结合，以对任务内的变更进行排序。 | 留空 |
| `Q_H_STREAM_POSITION`<br><br>`STRING(50)` | 源变更数据流中的位置，通常为 SCN 或 LSN。标识源数据流位置，而非时间戳或跨任务可比的序列。 | 空字符串。 |
| `Q_H_TIMESTAMP`<br><br>`DATETIME(0)` | 变更操作的时间戳。这是操作时间戳，而不是事务提交时间戳。 | 当前时间戳。 |
| `Q_H_TRANSACTION_ID`<br><br>`STRING(50)` | 包含该更改的事务，表示为十六进制 128 位事务 ID。该 ID 不保证唯一。 | 留空 |
| `Q_H_COMMIT_TIMESTAMP`<br><br>`DATETIME(0)` | 源事务提交时间戳，由处理运行时表示。不同于 `Q_H_DB_COMMIT_TIMESTAMP` 中的源数据库服务器时间。 | 当前时间戳。 |
| `Q_H_DB_COMMIT_TIMESTAMP`<br><br>`DATETIME(0)` | 基于源数据库服务器时间的源事务提交时间戳。 | Null |
| `Q_H_OPERATION`<br><br>`STRING(50)` | `INSERT`、`UPDATE` 或 `DELETE`。 | `INSERT`. |

变更序列将格式为 `YYYYMMDDHHmmSShh` 的时间戳与 19 位以零为前缀的变更计数器结合在一起。时间戳字段包括年、月、日、小时、分钟、秒以及百分之一秒。时间戳部分可以重复，而计数器递增。声明的 `STRING(50)` 容量不是序列格式的长度。

请勿依赖 `Q_H_TRANSACTION_ID` 作为唯一键。使用 `Q_H_CHANGE_SEQ` 进行任务级变更排序，而不是仅比较时间戳。

## 特定于源的标头

以下源限制适用于命名端点。这并不意味着支持其他 SQL Server 变体或其他文件源。

特定于源的标头和处理阶段值

| 标头和数据类型 | 源端点 | 变更处理期间的值 | 满负载期间的值 |
| --- | --- | --- | --- |
| `Q_H_USER`<br><br>`STRING(50)` | Microsoft SQL Server；Microsoft Azure SQL Managed Instance；Amazon RDS for SQL Server；IBM Informix；IBM DB2 for z/OS；IBM DB2 for LUW；Oracle；文件；SAP Sybase ASE。 | 进行源更改的用户。 | 留空 |
| `Q_H_JOB_NAME`<br><br>`STRING(50)` | 仅限 IBM DB2 for iSeries。 | 做出源更改的作业。 | 留空 |
| `Q_H_PROGRAM_NAME`<br><br>`STRING(50)` | 仅限 IBM DB2 for iSeries。 | 进行源更改的程序。 | 留空 |
| `Q_H_XACT_ID`<br><br>`STRING(50)` | Microsoft SQL Server；Microsoft Azure SQL 托管的实例；Amazon RDS for SQL Server。 | 事务时间标识符：服务器上一个分布式事务的第一条记录的 LSN。事务中的所有记录共享此 ID。这与 `Q_H_TRANSACTION_ID` 不同，后者是从物理事务日志中获取的。 | 留空 |

## 使用操作元数据

添加一列并插入 `Q_H_OPERATION` 以记录源操作。在满负载期间，其值为 `INSERT`。在变更处理期间，更新的值为 `UPDATE`。

操作标头描述了该操作；它不会更改目标删除处理。若要返回源操作的自定义标志，请参阅 [表达式函数](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Expression-functions.htm) 中的 `$OPERATION_INDICATOR`。

## 流式登陆标头列

流式转换任务使用源列，例如 `hdr__kafka_partition`、`hdr__kinesis_offset` 或 `hdr__file_name`。这些不是 `Q_H_` 标头的别名。从 列 中选择流式登陆标头。有关特定于源的列表，请参阅 [登陆表](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Lakehouse/lakehouse-datasets-architecture-streaming.htm#Landing)。