CREATE TABLE(流分析)
CREATE TABLE 语句用于定义传入 Azure 流分析的事件的有效负载的架构。 这使得用户可以为传入事件的负载明确定义每个指定列的数据类型。 这将通知输入架构的作业,并阻止类型推理。
注意
若要比较可用于类型转换的不同选项,请参阅 强制转换数据
请务必了解 CREATE TABLE 实际上不会创建任何表。 CREATE TABLE 仅定义输入别名的有效负载中每个列的数据类型。 此输入别名是在门户的“添加输入”部分中创建的别名。 如果没有此类声明,则编译器将推断列的数据类型。
如果出现转换错误,CREATE TABLE 将从流中删除行。 出现错误的行将移动到具有以下分类的诊断日志:
"Type": "DataError",
"DataErrorType": "InputDeserializerError.InvalidData",
"BriefMessage": "Could not deserialize the input event(s) from resource ... . Some possible reasons: 1) Malformed events 2) Input source configured with incorrect serialization format",
"ErrorCode": "InputDeserializationError",
"ErrorCategory": "DataError"
这意味着 CREATE TABLE 不能用于在原始格式 (CSV JSON 之间转换类型。) 和新的。 CREATE TABLE 只能用于显式通知编译器预期的类型,因此可以从流中删除偏差。 如果需要进行转换,应在后面的查询步骤中使用 CAST 或 TRY_CAST 完成转换。
语法
CREATE TABLE
table_name
( column_name <data_type> [ ,...n ] );
参数
table_name
数据来自的输入流的名称。 此名称需要与在 Azure 流分析门户的“添加输入”部分中创建的输入别名匹配。
column_name
传入事件的负载中的列名称。 如果有效负载中没有列名称,则默认名称 column1、column2、 ... 由系统生成,应在 CREATE TABLE 语句中使用。
data_type
Azure 流分析支持的数据类型。 请参阅 Azure 流分析 (数据类型) 。
示例
使用以下输入架构 (JSON) :
{
"TollId":1,
"EntryTime":"2014-09-10T12:11:00.0000000Z",
"LicensePlate":"NJB 1006",
"State":"CT",
"Make":"Ford",
"Model":"Focus",
"VehicleType":1,
"VehicleWeight":0,
"Toll":4.5,
"Tag":678912345
}
可以使用以下 CREATE TABLE 语句:
CREATE TABLE Entry (
TollId bigint,
EntryTime datetime,
LicensePlate nvarchar(max),
State nvarchar(max),
Make nvarchar(max),
Model nvarchar(max),
VehicleType bigint,
VehicleWeight float,
Toll float,
Tag bigint
);
SELECT
DATEADD(hour,-1,System.Timestamp()) AS WindowStart,
System.Timestamp AS WindowEnd,
TollId,
SUM(Toll) AS TollTotal -- guaranteed to be a float
INTO MyOutput
FROM Entry TIMESTAMP BY EntryTime -- guaranteed to be a timestamp
GROUP BY TollId, Tumbling(hour,1)