跳转到主要内容

技术指南

开始与达美住表

开始与达美住表”>
                </picture>
                <noscript>
                 <picture>
                  <source type= 开始与达美住表”>
                 </picture>
                </noscript>
               </div>
              </div>
             </div>
            </figure>
           </div>
          </section>
         </div>
        </div>
        <div data-cy=

介绍

本指南将演示如何三角洲生活表允许您开发可伸缩的、可靠的数据管道符合Lakehouse架构的数据质量标准。

我们首先描述一个常见的场景。我们已经从各种OLTP系统在云数据对象存储如S3, ADLS或gc。一些数据集是定期更新,有些历史源系统的快照。我们有一个大致了解消费者的数据和转换,我们将按照Lakehouse架构部分数据质量为原料,精制,和聚合层:

Lakehouse架构段数据质量为原料,精制、聚合层”>
                   </picture>
                   <noscript>
                    <picture>
                     <source type= Lakehouse架构段数据质量为原料,精制、聚合层”>
                    </picture>
                   </noscript>
                  </div>
                 </div>
                </div>
               </figure>
              </div>
             </div>
            </div>
            <div data-cy=

这些黄金表可以多样化的消费者,从BI报告培训机器学习模型,因此这个数据从源到黄金之旅层会有不同的需求,我们关心数据工程师:

  • 延迟:当我们摄取的新数据,它必须是可见的在5秒内银表”
  • 成本:“我们不能固定容量集群运行24/7支持这些更新”
  • 精度:“我应该占多少晚到达在我的实时数据源的数据吗?”

乍一看,这些需求可能看起来简单在管道上面的引用。然而,尽管lakehouse管道是故意优雅而简单,在现实中我们常常并不处理一个简单的线性流。在现实中它通常看起来像这样:

规模与额外的数据来源丰富我们的分析环境”>
                   </picture>
                   <noscript>
                    <picture>
                     <source type= 规模与额外的数据来源丰富我们的分析环境”>
                    </picture>
                   </noscript>
                  </div>
                 </div>
                </div>
               </figure>
              </div>
             </div>
            </div>
            <div data-cy=

当我们开始规模与额外的数据来源丰富我们的分析环境,赋予新见解,ETL复杂度成倍增加,和下面的挑战导致这些管道变得极其脆弱:

  • 错误处理和恢复是费力由于没有明确的表之间的依赖关系
  • 数据质量差,执行和监督约束是一个手动过程
  • 数据沿袭无法追踪,或沉重的实现是必要的
  • 在细粒度的可观测性,单个批处理/流水平是不可能的
  • 很难占到批处理和流在一个统一的管道

注:批处理和流?

火花能够使用批处理和流媒体模式有一个API,和三角洲湖使并发批处理和流操作在一个数据集从而消除权衡或再加工需要两层λ架构,仍然有大量的工作,实施和监控流,特别是在ETL过程相结合的流数据集之间作为单独的啤酒花和批处理作业。

声明式ETL

当编程ETL管道、数据转换通常是“程序”执行。这意味着操作上执行数据表达ETL引擎进行一系列的计算步骤。在许多情况下,即使您使用的是一个编排工具如气流或Azure数据工厂,工作是推出了含有程序逻辑。虽然协调器可能需要注意的工作之间的依赖关系,他们是不透明的ETL转换和业务逻辑。

另一方面,声明ETL涉及的用户描述期望的结果管道没有显式列出命令必须执行步骤,得出结果。声明意味着专注于“什么”是我们的理想目标,利用智能引擎像DLT找出“如何”计算框架应该执行这些过程。

你可能想到的过程和声明式ETL定义像给别人一步一步的行驶方向和向他们提供GPS包括城市的地图和交通流信息。

行驶方向将为司机提供的步骤达到目的地,但不能提供他们一个埃塔,他们不会知道哪个社区传递的方式。另外,如果需要绕道路线,一步一步的方向现在没用,但GPS地图能够重新路由迂回。

在这个比喻中,地图是你的DLT管道。DLT引擎可以解释的GPS地图,确定最佳路线和为您提供ETA等指标。关于社区中遍历路径的详细信息就像数据沿袭,绕行和事故(或错误)是依赖分辨率和模块化的结果提供的声明式DLT的性质。

你的第一个管道

在本指南中,我们将实现一个管道遭受这些挑战,将使用这个作为一个机会来教你如何DLT的声明式发展模式可以简化ETL开发和改进质量,整个lakehouse血统,可观测性。

快速开始,我们在这里举办完成管道的结果三角洲生活表笔记本回购。你可以复制这个SQL笔记本到你的砖部署供参考,也可以跟随导游。

本指南将专注于SQL管道但是如果你宁愿运行相同的管道在Python中,使用这个笔记本

先决条件

为了最有效的指导,你应该有一个基本的熟悉:

  • SQL
  • ETL开发管道和/或处理大数据系统
  • 砖互动的笔记本和集群
  • 你必须能够访问一个砖工作区与权限创建新集群,运行工作,并将数据保存到一个外部云对象存储或位置DBFS

数据集

在你的第一个管道,我们将使用retail-org数据集在databricks-datasets伴随着每一个工作区。三角洲生活表提供了技术处理青铜的细微差别(即表。Lakehouse原始数据)。您将使用自动加载程序功能加载数据逐步从云对象存储。

青铜数据集:摄入数据集使用云文件

青铜数据集代表了原始的质量。我们经常会使最小的调整从原点,利用云存储的成本效益来创建一个原始的来源,我们可以验证提炼数据,访问字段,通常我们可能不会报告,或创建新的管道。常见的模式在这个阶段是不断摄取新的数据云存储的位置。

“流媒体更新”、“连续处理,”vs。DLT的“流”

虽然这些术语可以互换的俗话说,他们在DLT有截然不同的含义。读者有火花经验结构化流可能还要注意一些重载的术语。在这里我们试图消除歧义这些术语:

  • 流媒体是一种处理模式,数据集被视为无限
  • 增量是一个更新模式中最小的更改目的地数据
  • 连续指管道一直运行,直到停在任意时间,而不是停止一次基于源数据管道开始时的状态

你可能会注意到一些重叠无界流处理这样的框架在DLT引发结构化流和流数据集。事实上,DLT的流数据集利用结构化流火花的基本面和δ事务日志,但抽象的复杂性,使开发人员能够专注于满足处理需求而不是系统性重任。

我们将讨论如何DLT的流数据集和DLT的连续方式交互的黄金部分本指南。

* *警告:“连续”一词也用来引用一个实验触发模式在火花结构化流micro-batches由单一的记录。这是一个比“连续”DLT不同的定义

作为一个例子,让我们看看一个青铜的表我们会摄取。

创建流媒体直播sales_orders_raw评论”的原始销售订单,摄取/ databricks-datasets。”TBLPROPERTIES(“质量”=“青铜”)作为选择*cloud_files (“/ databricks-datasets / retail-org sales_orders /”、“json”(“cloudFiles地图。inferColumnTypes”、“真正的”);

SQL语句使用自动加载程序来创建一个名为sales_orders_raw的流媒体直播表从json文件。

cloud_files:调用自动加载器和云存储路径和格式作为参数。(注意,API比cloudFiles调用外部的DLT略有不同)。
现在,让我们创建一个管道来摄取来自云对象存储的数据。
打开你的空间

  1. 创建您的第一个DLT管道笔记本
  2. 为你创建一个新的笔记本DLT管道如“dlt_retail_sales_pipeline”
  3. 将下面的代码复制到第一个单元格:

    创建流媒体直播客户评论”客户购买成品,从/ databricks-datasets摄取。”TBLPROPERTIES(“质量”=“映射”)作为选择*cloud_files (“/ databricks-datasets / retail-org /客户/”、“csv”);创建流媒体直播sales_orders_raw评论”的原始销售订单,摄取/ databricks-datasets。”TBLPROPERTIES(“质量”=“青铜”)作为选择*cloud_files (“/ databricks-datasets / retail-org sales_orders /”、“json”(“cloudFiles地图。inferColumnTypes”、“真正的”);

注:管道笔记本
DLT管道笔记本是特别的,即使他们使用标准砖笔记本。目前我们不阻止你附加管道笔记本一个集群,集群附加永远不会使用的DLT管道运行。作为一个最佳实践,我们建议你把管道笔记本处于分离状态,并使用第二个划痕笔记本在开发运行任意命令。如果你运行一个管道笔记本对附加的集群中,您将看到类似于这个…


  1. 在新选项卡中打开工作或窗口,并选择“三角洲生活表”
  2. 选择“创建管道”来创建一个新的管道
  3. 指定一个名称,如“销售订单管道”
  4. 笔记本路径指定为在步骤2中创建的笔记本。这是一个必要的步骤,但可以修改为指向一个儿童图书馆在未来。
  5. 目标是可选的,但是建议您这样做,因为目标是目标数据库授权的其他成员可以访问结果的数据管道。
  6. 一个存储位置是可选的,但是建议您这样做。您可以指定一个外部blob存储位置如果您已经配置了一个。这就是DLT将产生数据和元数据日志的管道。提示:如果没有指定存储,所有数据和日志产生的DLT管道将存储在一个存储由DLT DBFS根路径。你可以找到的路径编辑设置JSON文件。在外部存储数据和日志(即non-DBFS根)位置,您必须指定存储位置的DLT管道。
  7. 管道模式设置为触发
  8. 设置最小和最大数量的工人使用集群规模
  9. 选择“开始”
  10. 您已经创建了您的第一个管道!

管道日志

现在,您将看到一段以下图,其中包括管道运行的日志。这是一节可能是什么样子。

DLT油”>
                   </picture>
                   <noscript>
                    <picture>
                     <source type= DLT油”>
                    </picture>
                   </noscript>
                  </div>
                 </div>
                </div>
               </figure>
              </div>
             </div>
            </div>
            <div data-cy=

首先摄取代码解释

图标代表DLT数据集,在这种情况下表。这两个表我们考虑铜表。具体地说,它们是增量表和生活我们摄取他们使用自动加载程序功能使用cloud_files函数

DLT图形首先摄取代码”>
                   </picture>
                   <noscript>
                    <picture>
                     <source type= DLT图形首先摄取代码”>
                    </picture>
                   </noscript>
                  </div>
                 </div>
                </div>
               </figure>
              </div>
             </div>
            </div>
            <div data-cy=

DLT视图和表中

DLT,视图类似于一个临时视图在SQL和一些计算一个别名。一个视图允许您将一个复杂的查询分解成更小的或更容易查询。视图还可以重用一个给定的转换作为多个表的来源。视图可以从管道内交互,不能查询。

在DLT,表是类似传统的物化视图。三角洲住在三角洲格式表运行时自动创建表并确保那些表更新最新创建的表的查询的结果。

消费者可以读取这些数据的表和视图Lakehouse三角洲与标准表(例如报告在SQL或数据科学在Python中),但它们被DLT引擎更新和管理。更多细节,请参见章节目标在下面。

线数据集:预期和高质量的数据

在本节中,我们将把您缰绳来开发一个端到端的管道如下演示的DAG。现在我们已经创建了青铜数据集和银,金,概述Lakehouse架构在2020年CIDR数据库会议上发表的论文并使用每一层教你DLT新概念。


银层都是高质量,多样化,和可访问的数据集。这些可能不符合一个特定的用例,如服务生产报告在低延迟,但他们已经洁净了,改变了,和策划,以便数据科学家和分析师可以轻松和自信地使用这些表快速执行预处理,探索性分析和工程特性,这样他们就可以把剩余时间花在机器学习和洞察力。

最大的生产力杀手这些消费者不仅仅是数据访问和预处理,但信心他们正在使用的数据的质量。出于这个原因,我们将使用DLT,确保这些数据集符合特定的质量标准,并明确标注数据集。两个数据消费者和决策者可以使用生成的编目和质量监控,来自的正确使用约束和评论。

  1. 打开你的管道笔记本和创建一个新的细胞。
  2. 将下面的代码复制到一个新的细胞:

    创建流媒体直播sales_orders_cleaned (约束valid_order_number期望(order_number)违反下降)分区通过(order_date)评论“清洁和有效的销售订单order_number (s)和分区order_datetime。”TBLPROPERTIES(“质量”=“银”)作为选择f.customer_id,f.customer_name,f。number_of_line_items,时间戳(from_unixtime (((f.order_datetime作为长))))作为order_datetime,日期(from_unixtime (((f.order_datetime作为长))))作为order_date,f。order_number f。ordered_products c。状态,c。城市,c。朗,c。lat, c。units_purchased, c.loyalty_segment流(LIVE.sales_orders_raw) f加入生活。客户cc.customer_id=f.customer_idc.customer_name=f.customer_name
  3. 返回到管道“销售订单管道”在左边的导航条,导航到工作选择“三角洲住表”并选择管道上一步创建的
  4. 旁边的下拉选择启动/停止开关,然后选择“完整的刷新

约束:约束允许您定义数据质量的期望。他们声明,解决任何火花过滤谓词,以及承担失败的动作。一个动作可以保留,下降,失败,或隔离。为更多的细节在这里看到的。所有的约束都记录到启用流线型的质量监控。

Tblproperties:的键值对列表可以是三角洲湖属性,DLT管道属性,或任意的。任意tblproperties就像标记可用于数据编目。在这个例子中,“质量”:“银”是一个任意的函数作为一个标签的属性。

备注:一个字符串简要描述表的目的,在未来使用数据编目

黄金数据集:完成与流媒体/连续vs触发

许多聚合不能执行增量和必须执行完整的再加工,即使新的数据处理增量上游聚合的铜和银层。然而,有重要的价值在获得实时或“快速”尚未聚合的数据。与传统的λ架构需要一个复杂的双重基础设施过程快速和慢速数据,Lakehouse架构允许一个单一的管道实时增量的“快速”的铜和银层,和一批更新金层(由强一致性保证三角洲湖存储)。

在实践中,这种模式可能是具有挑战性的程序性ETL中需要部署独立的流和批处理作业和每个单独维护。为了解决这个问题,DLT允许你选择管道中的每个数据集是否完整或增量,以最小的更改其他的管道。这使它容易规模管道涉及的铜和银实时数据与黄金组合聚合层。

泡沫:一些引发聚合可以逐步执行,如计数、min,马克斯和总和。在一些简单的情况下,它可能是有意义的黄金数据集的增量。然而,即使是简单的数量和金额可能会变得效率低下,不建议如果您使用多个分组(例如GROUP BY col1, col2 col3)。

在这种情况下我们的黄金表,我们在创建完整的金银聚合数据表的表由城市:

  1. 打开你的管道笔记本和创建一个新的细胞。
  2. 将下面的代码复制到一个新的细胞:

    创建生活sales_order_in_la评论“销售订单在洛杉矶。”TBLPROPERTIES(“质量”=“黄金”)作为选择城市、order_date customer_id、customer_name ordered_products_explode.curr,总和(ordered_products_explode.price)作为销售,总和(ordered_products_explode.qty)作为qantity,(ordered_products_explode.id)作为product_count(选择的城市,日期(order_datetime)作为order_date、customer_id customer_name,爆炸(ordered_products)作为ordered_products_explodeLIVE.sales_orders_cleaned在哪里城市=“洛杉矶”)集团通过order_date、城市、customer_id customer_name ordered_products_explode.curr;创建生活sales_order_in_chicago在芝加哥发表评论“销售订单”。TBLPROPERTIES(“质量”=“黄金”)作为选择城市、order_date customer_id customer_name,ordered_products_explode.curr,总和(ordered_products_explode.price)作为销售,总和(ordered_products_explode.qty)作为qantity,(ordered_products_explode.id)作为product_count(选择的城市,日期(order_datetime)作为order_date、customer_id customer_name,爆炸(ordered_products)作为ordered_products_explodeLIVE.sales_orders_cleaned在哪里城市=“芝加哥”)集团通过order_date、城市、customer_id customer_name ordered_products_explode.curr;
  3. 返回到管道“销售订单管道”在左边的导航条,导航到工作选择“三角洲住表”并选择管道上一步创建的
  4. 旁边的下拉选择启动/停止开关,并选择“刷新”

连续vs引发管道模式

DLT,而单个数据集可以增量或完成,整个管道可能引发或连续的。当连续管道开始,它将自旋向上的基础设施和管道继续摄取新的数据,直到停止手动或通过API。引发管道将消耗源一旦和所有新数据将自动旋转下的基础设施。引起管道通常会安排运行在生产中使用一个协调器或砖多任务的工作。

之间切换触发和连续模式,打开你的管道,并选择“编辑设置”。连续will be a boolean in the JSON. Setting "continuous": false" is equivalent to setting the pipeline to Triggered mode.

这使您可以灵活地慢慢成熟为连续处理模式没有显著重构您的代码。这是一个常见的模式组织开始实现实时的见解的价值不用花费高额成本的不断运行的云基础设施。经验丰富的火花工程师可以使用以下矩阵了解DLT的功能:

读: 写: 连续模式 触发模式
完整的 完整的 再加工一个预定义的时间间隔 单再加工(删除和替换)
完整的 增量 不可能的 不可能的
增量 完整的 再加工一个预定义的时间间隔 再加工物化流的结果
增量 增量 流使用默认触发 Trigger.once()流

Productionization

我们已经定义了管道。我们可以总结以下步骤:

  1. 设置一个目标数据库方便消费者查询管线的数据集
  2. 将管道设置为生产方式
  3. 如果您选择使用触发模式,您可以安排管道使用多任务工作

管道可观测性和数据质量监控

在砖试试这个笔记本

事件日志

DLT发出所有管道管道中的日志一个预定义的三角洲湖表的存储位置,可用于监测、血统和数据质量报告。可以导入这个通用的日志分析笔记本检查事件日志,或使用dbutils访问三角洲表{{你的存储位置}}/系统/事件。

大多数有用的信息在日志表的“详细信息”栏。这里有不同类型的行为,将导致DLT发出一个日志,和一些相关的领域内的事件,你会发现在“细节”:

  • user_action:事件发生时采取行动就像创建管道
  • flow_definition:事件发生时管道部署或更新,并有血统,模式和执行计划的信息
    • output_datasetinput_datasets——输出表/视图及其上游表(s) /视图(s)
    • flow_type——这是一个完整的或附加流
    • explain_text——引发解释计划
  • flow_progress:事件发生时数据流开始跑步或者结束处理一批数据
    • 指标——目前包含num_output_rows
    • data_quality -包含一个数组的数据质量规则的结果这个特定的数据集
      • dropped_records
      • 预期
        • 名称、数据集、passed_records failed_records

数据质量监控(需要砖SQL)

因为DLT日志公开为一个三角洲表,和日志包含数据预期指标,很容易生成报告监测数据质量与BI工具的选择。我们建议使用砖的SQL因为它是与三角洲和砖平台紧密集成,提供极快的查询速度通过易于管理计算端点。bob体育客户端下载

使用砖SQL数据质量报告”>
                   </picture>
                   <noscript>
                    <picture>
                     <source type= 使用砖SQL数据质量报告”>
                    </picture>
                   </noscript>
                  </div>
                 </div>
                </div>
               </figure>
              </div>
             </div>
            </div>
            <div data-cy=

创建一个使用砖SQL数据质量报告,遵循这些步骤:

  1. 注意“存储位置”为您的管道通过导航到你的管道,选择编辑设置,和复制的值“storage_location”
  2. 注册metastore使用以下示例中的日志表和存储位置从步骤1:

    创建{{my_pipeline_logs}}作为选择*三角洲。”{{管道存储位置}}/系统/事件”
  3. 在左上方的下拉框中,切换到“SQL”工作区(你应该在“数据科学与工程”工作空间在开发DLT管道)
  4. 在左边的导航条,选择“查询”
  5. 选择“创建查询”
  6. 复制下面的SQL查询,取代{{my_pipeline_logs}}与您在步骤2中创建的表的名称:

    all_expectations作为(选择爆炸(from_json (细节:flow_progress: data_quality:预期,schema_of_json(“[{“名称”:“力量”,“数据集”:“力量”,“passed_records”:“int”、“failed_records”:“int”}]”)))作为期望{{my_pipeline_logs}}在哪里细节:flow_progress.metrics)选择expectation_name X_Axis,总和(Y_Axis)作为Y_Axis(选择expectation.name作为expectation_name,“通过”作为X_Axis, expectation.passed_records作为Y_Axisall_expectations联盟所有选择expectation.name作为expectation_name,“失败”作为X_Axis, expectation.failed_records作为Y_Axisall_expectations)集团通过expectation_name, X_Axis
  7. 运行该查询,您应该看到类似下面的反应:
  1. 选择“添加可视化”
  2. 选择一个可视化类型为“图”和图表类型为“馅饼”。Set the X and Y columns, and set grouping to expectation_name:
砖SQL饼图的可视化”>
                   </picture>
                   <noscript>
                    <picture>
                     <source type= 砖SQL饼图的可视化”>
                    </picture>
                   </noscript>
                  </div>
                 </div>
                </div>
               </figure>
              </div>
             </div>
            </div>
            <div class=

现在,您可以尝试使用不同的图表和/或在Redash可视化类型。一般来说,对于图表,您可以使用group by expectation_name X_axis Y_axis和创建仪表板为不同质量监控的目的

结论

既然你已经走到你的第一个三角洲生活表管道和学到一些关键概念,我们迫不及待地想看到您创建的管道!δ生活表上的更多信息,请参阅我们的DLT文档,观看演示,或下载的笔记本!