目录

(一)前言

(二)基础概念

1. Azure Synapse Analytics概念

2. Synapse SQL 体系结构组件

3. Azure 存储

4. 控制节点

5. 计算节点

6. 数据移动服务

(三)分发

(四)三种分布策略

1. 哈希分布表(hash)

2. 轮循分布表(round_robin)

3. 复制表(replicated)


(一)前言

通常情况下,我们在Azure上需要建数仓时会采用先创建Azure SQL Server资源,然后再建立专用 SQL 池(旧称为 "SQL DW"),对应的英文称法分别为Dedicated SQL pool (formerly SQL DW)。本篇中我将从专用SQL池的简单介绍入手,详细展开Azure中数仓的三种分布策略。

(二)基础概念

1. Azure Synapse Analytics概念

Azure Synapse Analytics 是一种分析服务,它将企业数据仓库和大数据分析结合在一起。 它使你可以自由地根据你的条件查询数据。

2. Synapse SQL 体系结构组件

专用 SQL 池(旧称为 "SQL DW")利用横向扩展体系结构将数据的计算处理分布在多个节点上。 缩放单位是计算能力(称为数据仓库单位)的抽象概念。 计算与存储分离开来,以便用户能够独立于系统中的数据进行缩放计算。

专用 SQL 池(以前称为 SQL DW)使用基于节点的体系结构。 应用程序连接到控制节点并将 T-SQL 命令发送到控制节点。 控制节点托管分布式查询引擎(用于优化并行处理查询),然后将操作传递给计算节点以完成并行工作。

计算节点将所有用户数据存储在 Azure 存储中并运行并行查询。 数据移动服务 (DMS) 是一项系统级内部服务,它根据需要在节点间移动数据以并行运行查询和返回准确的结果。

使用分离的存储和计算,用户可以在使用专用 SQL 池(以前称为 SQL DW)时执行以下操作:

  • 无论存储需求如何,都可独立计算大小。
  • 在专用 SQL 池(以前称为 SQL DW)中增加或减少计算能力,无需移动数据。
  • 在保持数据不受影响的情况下暂停计算容量,因此只需为存储付费。
  • 在操作期间恢复计算容量。

3. Azure 存储

专用 SQL 池 SQL(以前称为 SQL DW)利用 Azure 存储来保持用户数据安全。 由于数据通过 Azure 存储进行存储和管理,因此会对存储消耗单独收费。 将数据分片到“分布区”中来优化系统性能。 可选择在定义表时用于分布数据的分片模式。 支持以下分片模式:

  • 哈希
  • 轮循机制
  • 复制

4. 控制节点

控制节点是体系结构的核心。 它是与所有应用程序和连接进行交互的前端。 分布式查询引擎在控制节点上运行,可优化和协调并行查询。 提交 T-SQL 查询时,控制节点会将其转换为可针对每个分布区并行运行的查询。

5. 计算节点

计算节点提供计算能力。 分布区映射到计算节点以进行处理。 当你为更多计算资源付费时,分布区将重新映射到可用的计算节点。 计算节点数的范围是 1 到 60,它由 Synapse SQL 的服务级别确定。

每个计算节点均有一个节点 ID,该 ID 会显示在系统视图中。 在名称以 sys.pdw_nodes 开头的系统视图中找到 node_id 列即可查看计算节点 ID。 有关这些系统视图的列表,可以到官方文档去参阅。这里提供如下地址:

目录视图 - Azure Synapse Analytics and Analytics Platform System (PDW) | Microsoft Docs

6. 数据移动服务

数据移动服务 (DMS) 是一项数据传输技术,它可协调计算节点间的数据移动。 某些查询需要移动数据以确保并行查询返回准确的结果。 需要移动数据时,DMS 可确保正确的数据到达正确的位置。

(三)分发

分布区是存储和处理针对分布式数据运行的并行查询的基本单位。 Synapse SQL 运行查询时,工作会被分割成 60 个并行运行的小型查询。

每个小型查询各在一个数据分布区上运行。 每个计算节点管理其中一个或多个分布区。 具有最多计算资源的专用 SQL 池(以前称为 SQL DW)的每个分布区占 1 个计算节点。 具有最小计算资源的专用 SQL 池(以前称为 SQL DW)的所有分布区都在 1 个计算节点上。

(四)三种分布策略

1. 哈希分布表(hash)

哈希分布表可为大型表上的联接和聚合提供最高查询性能。

为了将数据分片到哈希分布式表中,使用哈希函数明确将 1 个行分配到 1 个分布区。 在表定义中,可以将一个列指定为分布列。 哈希函数使用分布列中的值将 1 个行分配到 1 个分布区。

下图说明了如何将完整的非分布式表存储为哈希分布表。

  • 一个行属于一个分布区。
  • 通过确定性哈希算法将一个行分配到一个分布区。
  • 不同大小的表显示,每个分布区的表行的数目各不相同。

选择分布列时需考虑到性能,例如特异性、数据倾斜,以及在系统上运行的查询类型。

2. 轮循分布表(round_robin)

轮循机制表是最简单的表,在被用作负载临时表时,它可创造和提供高速性能。

轮循机制分布表在表中均匀分布数据,但不会进行进一步优化。 首先随机选择一个分布区,然后将行的缓冲区按顺序分配给分布区。 将数据加载到轮循机制表速度很快,但就查询性能而言,哈希分布式表的性能更佳。 轮循机制表上的联接要求重新安排数据,这需要花费更多时间。

3. 复制表(replicated)

复制表为小型表提供最快查询性能。

复制表在每个计算节点上缓存表的完整副本。 因此复制表以后,无需在执行联接或聚合前在计算节点中间传输数据。 复制表尤为适用于小型表。 它需要额外存储并且在写入数据时会产生额外开销,因此不适用于大型表。

下图显示会在每个计算节点的第一个分布区上缓存复制表。

Azure数据仓库表中的数据经常使用的三种分布策略(hash、round_robin 或 replicated)简介相关推荐

  1. 数据库-表中导入数据-insert

    表中导入数据 在表中导入数据的方式有两种 第一种:将以上数据整理成SQL语句,insert into pet.... 第二种:通过加载文件的方式将数据导入到表中 1.创建一个pet.txt的文件(注: ...

  2. 数据仓库Hive编程——HiveQL的数据操作(一):向管理表中装载数据

    既然Hive没有行级别的数据插入.数据更新和删除操作,那么往表中装载数据的唯一途径就是使用一种"大量"的数据装载操作.或者通过其他方式仅仅将文件写入到正确的目录下. 在<Hi ...

  3. azure云数据库_在Azure SQL数据库中保护数据的五种方法

    azure云数据库 When storing data in the cloud the main concern companies generally have is whether or not ...

  4. mysql杠杆加号什么意思_对tb_book表中的数据,按ID序号进行升序排列,查询语句是什么?_学小易找答案...

    [单选题]修改数据库表结构用以下哪一项 ( ) [单选题]对于一个微小物理量,通常采用将其进行放大的方法实现测量,以下哪个不是物理实验方法? [单选题]扭摆实验中,为了测出金属匀质细杆绕质心对称轴的转 ...

  5. oracle显示多表数据,Oracle DB 使用连接显示多个表中的数据

    在Oracle9i之前的发行版中,该联接语法与美国国家标准协会(ANSI) 的标准不同.与以前发行版中的Oracle 专用联接语法相比,符合SQ • 编写SELECT语句,以使用等值联接和非等值联接访 ...

  6. 本地MySQL数据库要访问远程MySQL数据库的表中的数据的实现

    转自: http://blog.csdn.net/jenminzhang/article/details/9872647 1.实现基本思路:借助 MySQL的 federated 存储引擎实现 fed ...

  7. 表间数据复制--SELECT表中的数据插入到新的表中(ORACLE,MSSQL)

    表间数据复制--SELECT表中的数据插入到新的表中 --在Oracle 9i中 CREATE TABLE scott.test AS (SELECT DISTINCT empno,ename,hir ...

  8. 《Oracle SQL疑难解析》——1.6 批量地从一个表中复制数据到另一个表

    本节书摘来自异步社区出版社<Oracle SQL疑难解析>一书中的第1章,第1.6节,作者: [美]Grant Allen , Bob Bryla , Darl Kuhn,更多章节内容可以 ...

  9. mysql中数据表如何关联_mysql 如何导入/导出2个关联表中的数据

    mysql 怎么导入/导出2个关联表中的数据 表一 id student 1 S1 2 S2 表二 id sid scord order 1 1 100 1 2 1 60 2 3 1 80 3 4 2 ...

最新文章

  1. FlasCC例子研究之Animation
  2. Android 图形架构
  3. java的super是什么意思_java中Super到底是什么意思?必须举例说明!
  4. 基于Python的电子教室软件中远程关机功能的原理与实现
  5. python建立sqlite数据库_5分钟快速入门,用Python做SQLite数据库开发,附代码适合初学...
  6. python爬取了百万知乎,并做数据分析
  7. 完美解决github访问速度慢
  8. bzoj 1046: [HAOI2007]上升序列
  9. 12v直流电机并联多大电容_对电容的理解
  10. energy plus matlab,EnergyPlus EMS和ExternalInterface入门学习 [第一篇——简介]
  11. 伺服舵机匀加速和匀减速运动Demo
  12. 操作系统-处理机调度(调度层次、基本准则、先来先服务、最短作业优先、高响应比、时间片轮转、优先级调度、多级反馈队列)
  13. MLX90614红外测温模块的使用
  14. Flex ANE制作打包流程
  15. Java freemarker 生成word文档
  16. johnny仔向您推荐的三个专业微信交流QQ群,欢迎加入!
  17. 风机疲劳载荷谱转SACS疲劳载荷定义文件
  18. 【机器学习】线性判别式(LDA/FLD)
  19. 视频教程-Oracle12数据库管理/DBA/数据库工程师培训-Oracle
  20. tplink支持Linux的无线网卡,Ubuntu 8.04下安装TP-Link TL-WN-322G+ 1.0 无线网卡

热门文章

  1. Android设置box-shadow
  2. Duplicate class xxxx found in modules
  3. 技术分享 | 半监督学习介绍
  4. compilation debug=true targetFramework=4.0的解决
  5. 27个阿里 Java 开源项目,很全面!
  6. group by字段后,其他字段的合并处理
  7. 09New Radio Numerology and Waveform Evaluation for Satellite Integration into 5G Terrestrial Network
  8. win10服务器未能登录怎么办,win10系统开机提示Group policy Client服务未能登陆的解决技巧...
  9. 深入理解Linux文件系统之VFS
  10. 3.网络爬虫的组成结构(一个爬虫框架)