CREATE TABLE

✅ Azure 流分析 ✅ 构造事件流

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 只能用于显式通知编译器预期类型,因此可以从流中删除偏差。 如果需要进行转换,则应使用 CASTTRY_CAST在后面的查询步骤中完成转换。

语法

CREATE TABLE   
    table_name   
    ( column_name <data_type> [ ,...n ] );  
  

论据

  • 表名

    数据来自的输入流的名称。 此名称需要匹配在 Azure 流分析门户的“添加输入”部分中创建的输入别名。

  • column_name

    传入事件有效负载中的列的名称。 如果有效负载中没有列名,则列 1、column2 的默认名称... 由系统生成,应在 CREATE TABLE 语句中在此处使用。

  • 数据类型

    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)