Azure SQL 数据仓库中的新增功能 2018 年 5 月

Azure SQL 数据仓库持续得到改进。 本文介绍 2018 年 5 月发行的版本中所引入的新功能和所做的更改。

第 2 代实例

alt Azure SQL 数据仓库计算优化的第 2 代层为云数据仓库制定了新的性能标准。 与当前代次相比,客户现在获得的查询性能提高了 4 倍、并发性提高了 3 倍,计算能力提高了 4 倍。 SQL 数据仓库现在可以处理来自单个群集的 128 个并发查询,是所有云数据仓库服务中最出类拔萃的。

请参阅负责 Azure 数据部门的企业副总裁 Rohan Kumar 撰写的博客通告 Turbocharge cloud analytics with Azure SQL Data Warehouse(使用 Azure SQL 数据仓库推进云分析)。

自动统计

在基于模型成本的优化器(例如 SQL 数据仓库中的引擎)中,统计对于优化查询计划的生成至关重要。 如果事先已知道所有查询,则可以确定需要创建哪些统计对象。 但是,如果系统面对临时查询和随机查询(对于数据仓库工作负荷很常见),则系统管理员可能很难预测需要创建哪些统计,这可能导致查询执行计划的性能欠佳,并延长查询响应时间。 缓解此问题的方法之一是提前在所有表列中创建统计对象。 但是,由于在加载表的过程中需要维护统计对象,导致加载时间变长,因此,这种过程也会造成代价。

SQL 数据仓库现在支持自动创建统计对象,为系统管理员和开发人员提供更高的灵活性、工作效率和易用性,同时可确保系统继续提供优质的执行计划和最佳响应时间。

若要在 SQL 数据仓库中启用或禁用统计的自动创建,请执行以下语句:

ALTER DATABASE { database_name } SET { AUTO_CREATE_STATISTICS { OFF | ON } } [;]

建议将 AUTO_CREATE_STATISTICS 选项设置为 ON,以便符合最佳做法和指导的要求。

Note

默认情况下,将对所有新的数据仓库启用自动创建统计的功能。

有关更多详细信息,请参阅 ALTER DATABASE SET 选项一文。

拒绝行支持

由于数据加载的高性能和并行性,客户通常使用 PolyBase(外部表)将数据载入 SQL 数据仓库。

SQL 数据仓库添加了在 CREATE EXTERNAL TABLE 语句中通过 REJECTED_ROW_LOCATION 参数定义拒绝行位置的功能。 从外部表执行 CREATE TABLE AS SELECT (CTAS) 后,无法加载的所有行将存储在靠近源的某个文件中,供进一步调查。

有关拒绝行行为的更多详细信息,请参阅 Load confidently with SQL Data Warehouse PolyBase Rejected Row Location(使用 SQL 数据仓库 PolyBase 拒绝行位置自信地加载数据)博客。

以下示例演示用于指定拒绝行的新语法。

CREATE EXTERNAL TABLE [dbo].[Reject_Example]
(
    ...
)
WITH
(
    ...
    ,REJECTED_ROW_LOCATION='/Reject_Directory'
)

ALTER VIEW

用户可以使用 ALTER VIEW 修改以前创建的视图,无需对该视图执行 DELETE/CREATE 操作并重新应用权限。

以下示例修改以前创建的视图。

ALTER VIEW test_view AS SELECT 1 [data];

CONCAT_WS

CONCAT_WS() 函数返回端到端串联两个或更多个值后生成的字符串。 它使用第一个参数中指定的分隔符分隔串联值。 CONCAT_WS 函数用于生成逗号分隔值 (CSV) 输出。

以下示例演示如何使用逗号串联一组整数值。

SELECT CONCAT_WS(',', 1, 2, 3) [result];

该语句返回以下结果:

result
---------
1,2,3

以下示例演示如何使用逗号串联一组混合数据类型值。

SELECT CONCAT_WS(',', 1, 2, 'String', NEWID()) [result]

该语句返回以下结果:

result
---------
1,2,String,26E1F74D-5746-44DC-B47F-2FC1DA1B6E49

SP_DATATYPE_INFO

sp_datatype_info 系统存储过程返回有关当前环境支持的数据类型的信息。 通过 ODBC 连接进行连接的工具通常使用它来进行数据类型调查。

以下示例检索 SQL 数据仓库支持的所有数据类型的详细信息。

EXEC sp_datatype_info

包含 ORDER BY 的 SELECT INTO 行为变更

SQL 数据仓库现在会阻止包含 ORDER BY 子句的 SELECT INTO 查询。 以前,此操作先将内存中的数据排序,接着将数据插入目标表,并根据表的形状将数据重新排序,然后就会成功。

以前的行为

以下语句会成功,但是会造成额外的处理开销。

SELECT * INTO table2 FROM table1 ORDER BY 1;

当前行为

以下语句会引发错误,指示 SELECT INTO 语句不支持 ORDER BY 子句。

SELECT * INTO table2 FROM table1 ORDER BY 1;

返回的错误语句:

Msg 104381, Level 16, State 1, Line 1
The ORDER BY clause is invalid in views, CREATE TABLE AS SELECT, INSERT SELECT, SELECT INTO, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.

SET PARSEONLY ON 查询状态(行为变更)

用户可以使用 SET PARSEONLY ON 语法来让 SQL 数据仓库引擎检查每个 T-SQL 语句的语法并返回任何错误消息,而无需编译或执行该语句。 以前,在 sys.dm_pdw_exec_requests 系统视图中,这些语句的状态会始终为 Running 状态。 sys.dm_pdw_exec_requests 视图现在返回的状态将为 Complete