管理数据类型
当您更改列的数据类型或数据类型大小时,这可能会对使用数据集的任务产生影响。
支持的数据类型和转换因目标平台而异。有关目标平台的具体文档,请参阅 建立与目标的连接。
了解更改数据类型的影响
更改数据类型大小或切换到不同数据类型有两种常见用例:
- 摄入不适合当前数据类型的数据。
- 对更高数值精度的要求。例如将 SMALLINT 更改为 DECIMAL (p,s)。
在大多数情况下,更改数据类型将导致修改表操作,从而防止数据丢失。例如,如果之前的数据类型是 STRING (25),而新的数据类型为 STRING (50),则具有新数据类型的列中的数据将被更新而不会出现任何问题。但是,在某些情况下,更改数据类型会导致表被删除并重新创建。例如,如果前一列的数据类型为 NUMBER,而您将其更改为 DATE,则该表将被删除并重新创建,因为无法将数字转换为日期。同样地,如果目标平台不支持修改表操作(如 Databricks),该表将被删除并重新创建。
在某些情况下,理论上可以更改表,但由于底层的复杂性,数据任务将删除并重新创建表。最后,在某些情况下,潜在的数据丢失而不是实际的数据丢失会触发删除和重新创建操作。例如,如果将 STRING(25) 更改为 STRING(1),并且摄入的数据不适合 STRING(1),则会发生数据丢失。然而,STRING(25) 可能总是只包含一个字符,因此在实践中不会发生数据丢失,但由于潜在的数据丢失,仍将删除并重新创建表。
需要删除和重新创建表的数据类型更改,无论目标平台为何
更改以下数据类型将导致表被删除并重新创建:
- BYTES
- BLOB
- CLOB
- NCLOB
目标平台支持更改数据类型大小,而无需删除和重新创建表
使用 Snowflake、Google BigQuery、Amazon Redshift、Microsoft SQL Server 和 Azure Synapse Analytics 时,您可以更改某些数据类型的大小,而无需删除和重新创建表。下表列出了上述每个平台支持的数据类型。
| 数据类型 | Snowflake | Google BigQuery | Azure Synapse Analytics | Microsoft SQL Server | Amazon Redshift |
|---|---|---|---|---|---|
|
INT1 |
不支持 |
支持 |
支持 |
支持 |
不支持 |
|
INT2 |
不支持 |
支持 |
支持 |
支持 |
不支持 |
|
INT4 |
不支持 |
支持 |
支持 |
支持 |
不支持 |
|
INT8 |
不支持 |
支持 |
支持 |
支持 |
不支持 |
|
REAL4 |
不支持 |
不支持 |
支持 |
支持 |
不支持 |
|
REAL8 |
不支持 |
不支持 |
支持 |
支持 |
不支持 |
|
UINT1 |
不支持 |
支持 |
支持 |
支持 |
不支持 |
|
UINT2 |
不支持 |
支持 |
支持 |
支持 |
不支持 |
|
UNIT4 |
不支持 |
支持 |
支持 |
支持 |
不支持 |
|
UNIT8 |
不支持 |
支持 |
支持 |
支持 |
不支持 |
|
NUMERIC |
支持 |
支持 |
支持 |
支持 |
不支持 |
|
STRING |
支持 |
支持 |
支持 |
支持 |
支持 |
|
WSTRING |
不支持 |
支持 |
支持 |
支持 |
不支持 |
支持将数据类型更改为 STRING 而无需删除和重新创建表的目标平台
将数据移动到 Microsoft SQL Server 和 Azure Synapse Analytics 时,您可以将以下数据类型更改为 STRING,而无需删除并重新创建表:
- BOOLEAN
- DATE
- TIME
- DATETIME
- INT1
- INT2
- INT4
- INT8
- REAL4
- REAL8
- UINT1
- UINT2
- UNIT4
- UNIT8
- NUMERIC
- WSTRING(仅对 Azure Synapse Analytics 支持)
管理 JSON 数据
Qlik 于 2025 年引入了对 JSON 数据类型的支持。在引入之前创建的任务中,不支持 JSON 数据类型。在新任务中,包含 JSON 数据的列将转换为目标平台指定的数据类型。如果您使用的是客户端管理的网关,则需要 Data Movement gateway 2024.11.78 或更高版本才能在登陆任务中发现 JSON 数据类型。
转换 JSON 数据时,可能会创建这些新的全局转换规则。
-
QLIK__PARSE_TO_JSON
此规则在 Snowflake 项目中创建,其中登陆正在将数据加载到湖登陆。该规则在登陆后添加到存储任务中,以将所有 JSON 列解析为 Snowflake 中的 JSON。
-
QLIK__JSON_AS_VARCHAR
此规则在 Snowflake 项目中创建,其中数据登陆到 Snowflake,并且存储创建 Snowflake 管理的 Iceberg 表。该规则将 JSON 转换为 Varchar,因为 Iceberg 不支持 Variant 类型。
管理在引入 JSON 数据类型支持之前创建的任务中的现有 JSON 数据
-
如果您的数据平台中现有任务的 JSON、VARIANT 或 SUPER 数据已转换为其他数据类型(例如 BLOB),您可能需要考虑将列转换为目标平台中用于 JSON 的数据类型。您可以使用转换规则执行此操作。如果您需要在下游任务中将新列与现有列一起使用,则可能需要这样做。
-
另一种选择是将新任务中的列转换为现有数据类型中使用的相同数据类型,以保持向后兼容性。
非物化数据集中的数据类型
对于非物化数据集,数据平台在运行时决定列类型。逻辑类型仅供参考,可能与实际类型不同。
-
要查看最终类型,请检查生成的数据库工件。
-
要强制类型,请在列表达式中添加显式转换。