✅ 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 对象 | 不支持 | 动态,字符串 |