数据类型

✅ Azure 流分析 ✅ 构造事件流

每个记录都有一个相关的数据类型。 数据类型描述(并约束)该类型的记录可以保存的值集或该类型的表达式可以生成。

请注意,它是具有类型而不是列的记录。 列的每个记录可以具有不同的类型。 如果这对于大多数应用程序而言是透明的,则它允许直接处理架构偏移方案和其他异常的键入模式。

支持的数据类型

下面是支持的数据类型列表。

数据类型 说明
bigint 范围 -2^63(-9,223,372,036,854,775,808)到 2^63-1 的整数(9,223,372,036,854,775,807)。
float 范围内的浮点数 - 1.79E+308 到 -2.23E-308、0 和 2.23E-308 到 1.79E+308。 浮点十进制值通常没有完全相同的二进制表示形式。 可以体验精度损失。 这并非特定于 Azure 流分析,而是在所有浮点数实现中发生。
nvarchar(max) 文本值,由 Unicode 字符组成。 注意:不支持除 max 以外的值。
日期/时间 定义一个日期,该日期与以秒(7 位数字、100 纳秒精度)(基于 24 小时制和相对于 UTC(时区偏移量 0)的时间组合在一起。
可取值为 1、0 或 NULL 的整数。 兼容级别 1.2 及更高版本支持此功能。
记录 名称/值对集。 值必须支持数据类型。
数组 值的有序集合。 值必须支持数据类型。

可以联接(或比较)bigint 和 float 数据类型。 除无法表示的大写值外,它在所有情况下都能正常工作。

注释

在范围之外读取 bigint 数据类型时,Azure 流分析支持,流分析作业将无法使用错误消息反序列化事件: InputDeserializationError。 可以预处理数据并将其转换为字符串。 一个选项是使用 Azure 函数预处理数据并将此类大整数转换为字符串。

类型转换

以下是控制 数据类型转换的规则:

  • 在输入读取和输出写入作期间没有精度损失的转换是隐式的,并且始终成功
  • 输出写入作内的精度丢失和溢出由配置的错误策略处理(设置为“删除”或“重试”)
  • 错误策略处理输出写入作期间发生的类型转换错误
  • 输入读取作期间发生的类型转换错误导致作业删除事件

将值转换为浮点数时,可能会丢失精度。 它不特定于 Azure 流分析,而是特定于一般浮点数据类型。 因此,它不被视为错误。 在需要保存每个数字的情况下,应将数据读取为字符串。

强制转换数据

流式处理 SQL 语言中有四个函数可用于观察和调整数据的数据类型。

  • CAST :将单个列强制转换为给定类型 - 如果转换错误,作业将失败
  • TRY_CAST :将单个列强制转换为给定类型 - 错误以 NULL 形式提供。 请参阅 输入验证 ,了解如何最好地使用 TRY_CAST
  • CREATE TABLE :定义输入的单个显式架构。 从流中删除了转换错误的行
  • GetType :返回列的类型

对于大多数用例,建议的选项是使用 TRY_CAST。 此函数通过确保输出类型来保护下游处理,同时通过将错误值替换为 NULL 来防止数据丢失。 不会删除该行,并且原始值仍可在另一列中投影。

为了获得强有力的保证,建议的选项是使用 CREATE TABLE。 此方法允许通知作业给定输入的架构,且没有偏差风险。 权衡的是,只能在给定输入上定义单个架构,并且将删除不合规的行。

如果可能,应通过这些函数显式执行所有强制转换作,而不是在其他函数中隐式执行(无提示)。 这可以避免强类型输出(如 SQL 数据库)的类型不匹配、意外行为和插入错误。 请参阅 输入验证 ,了解如何保护主查询逻辑免受此类错误的影响。

转换为位

值将使用以下规则在 float 和 bit 之间转换:

来自
(BIT) 1 (FLOAT) 1.0
(BIT) 0 (FLOAT) 0.0
(BIT)零 (FLOAT)零
(FLOAT) 0.0 (BIT) 0
(FLOAT) 任何其他值 (BIT) 1
(FLOAT)零 (BIT)零

类型映射和序列化格式

数据类型 CSV in CSV out JSON in JSON out Avro in Avro out
bigint 转换为 64 位有符号整数的字符串 使用作业区域性转换为字符串的 64 位有符号整数 数字:转换为 64 位有符号整数的整数;

布尔 值:在兼容级别 1.1 及更低版本的“false”中转换为 0,“true”转换为 1
数字:整数 long 和 int 转换为 64 位有符号整数;

布尔值:在 兼容级别 1.1 和更低 false 中转换为 0,true 转换为 1
长整型
漂浮 转换为 64 位有符号浮点数的字符串 使用作业区域性转换为字符串的 64 位有符号浮点数 数字:转换为 64 位有符号浮点数的分数 数字:分数 double 和 float 转换为 64 位有符号浮点数 翻倍
nvarchar(max) 字符串 字符串 字符串 字符串 字符串 字符串
日期/时间 在 ISO 8601 标准之后转换为日期/时间的字符串 使用 ISO 8601 标准的字符串 在 ISO 8601 标准之后转换为日期/时间的字符串 使用 ISO 8601 标准转换为字符串的 datetime 在 ISO 8601 标准之后转换为日期/时间的字符串 使用 ISO 8601 标准转换为字符串的 datetime
bit兼容性级别 1.2 及更高版本) 字符串“true”、“false”或“null”将相应地转换为整数值 1、0 或 null 转换为字符串“true”或“false” 布尔值:“false”转换为 0,“true”转换为 1 布尔值:布尔值 布尔值:false 转换为 0,true 转换为 1 布尔
记录 不支持,输出“Record”字符串 JSON 对象 JSON 对象 Avro 记录类型 Avro 记录类型
数组 不支持,输出“Array”字符串 JSON 对象 JSON 对象 Avro 记录类型 Avro 记录类型

注释

Parquet 不需要任何数据类型转换。

写入结构化数据存储时的类型映射

数据类型 SQL Power BI Azure Cosmos DB PostgreSQL Azure 数据资源管理器
bigint bigint、int、smallint、tinyint、all string types(ntext、nvarchar、char、...) 是的 numeric: integer bigint dynamic、int、long
漂浮 float, real, decimal, numeric, all string types ( ntext, nvarchar, char, ...) 是的 数字:分数 双精度,数字。 限制为 1.78E+308 动态、真实、双精度
nvarchar(max) 所有字符串类型(ntext、nvarchar、char、uniqueidentifier...) 是的 字符串 字符变化,文本 动态,字符串
日期/时间 datetime、datetime2、datetimeoffset、所有字符串类型(ntext、nvarchar、char、...) 是的 使用 ISO 8601 标准转换为字符串的 datetime 时间戳,时间。 支持时区选项,但不会提供时区 动态、字符串、日期时间
bit兼容性级别 1.2 及更高版本) bigint、int、smallint、tinyint、bit、所有字符串类型(ntext、nvarchar、char、...) 是的 布尔值:1 转换为 true,0 转换为 false dynamic、bool
记录 不支持,输出“Record”字符串 不支持,输出“Record”字符串 JSON 对象 不支持 dynamic, bool, long, datetime, byte array, real, double, string
数组 不支持,输出“Array”字符串 不支持,输出“Array”字符串 JSON 对象 不支持 动态,字符串