云服务器内容精选

  • 约束与限制 仅当前工作空间的管理员或者拥有DAYU Administrator、Tenant Administrator权限的用户,可新建、修改和删除审批人。 审批人必须为当前工作空间管理员或者拥有DAYU Administrator、Tenant Administrator权限的用户。 当前工作空间为企业模式时,通过任务发布方式进行单据的审批操作,不支持提交脚本或者作业进行审批。 开启审批功能时,相关API的请求体需要增加审批人属性,具体见作业开发API。 审批开关的配置、作业和脚本的审批只能在前台界面进行操作。 有实时Pipeline作业的情况下,不允许打开审批开关。 审批开关打开后,审批中心功能对审批人和单据提交人都可见。审批开关关闭时,仅当前工作空间的管理员或者拥有DAYU Administrator、Tenant Administrator权限的用户可以看到审批中心功能,其他用户不可见。
  • 数据湖 准备 在本示例中,选择 数据湖探索 DLI )服务作为数据底座。为确保 DataArts Studio 与DLI网络互通,在创建DLI队列时区域和企业项目应与DataArts Studio实例保持一致。 当前由于DLI的“default”队列默认Spark组件版本较低,可能会出现无法支持建表语句执行的报错,这种情况下建议您选择自建队列运行业务。如需“default”队列支持建表语句执行,可联系DLI服务客服或技术支持人员协助解决。 DLI的“default”队列为共享队列,仅用于用户体验,用户间可能会出现抢占资源的情况,不能保证每次都可以得到资源执行相关操作。当遇到执行时间较长或无法执行的情况,建议您在业务低峰期再次重试,或选择自建队列运行业务。 开通DLI服务后,您需要在管理中心创建DLI连接,然后通过数据开发组件新建数据库,再执行SQL来创建OBS外表。操作步骤如下: 参考访问DataArts Studio实例控制台,登录DataArts Studio管理控制台。 在DataArts Studio控制台首页,选择对应工作空间的“管理中心”模块,进入管理中心页面。 在“数据连接”页面,单击“创建数据连接”按钮。 图1 数据连接 创建一个到DLI的连接,数据连接类型选择“数据湖探索(DLI)”,数据连接名称设置为“dli”。 完成设置后,单击“测试”,测试成功后单击“确定”,完成DLI数据连接的创建。 图2 创建数据连接 DLI连接创建完成后,跳转到数据开发页面。 图3 跳转到数据开发页面 参见图4,在DLI连接上右键单击,创建一个数据库用于存放数据表,数据库名称为“BI”。 图4 创建数据库 创建一个DLI SQL脚本,以通过DLI SQL语句来创建数据表。 图5 新建脚本 在新建脚本弹出的SQL编辑器中输入如下SQL语句,并单击“运行”来创建数据表。其中,user、product、comment、action为OBS外表,使用指定OBS路径中的 CS V文件来填充数据,用于存放原始数据;top_like_product和top_bad_comment_product为DLI表,用于存放分析结果。 create table user( user_id int, age int, gender int, rank int, register_time string ) USING csv OPTIONS (path "obs://fast-demo/user_data"); create table product( product_id int, a1 int, a2 int, a3 int, category int, brand int ) USING csv OPTIONS (path "obs://fast-demo/product_data"); create table comment( deadline string, product_id int, comment_num int, has_bad_comment int, bad_comment_rate float ) USING csv OPTIONS (path "obs://fast-demo/comment_data"); create table action( user_id int, product_id int, time string, model_id string, type string ) USING csv OPTIONS (path "obs://fast-demo/action_data"); create table top_like_product(brand int, like_count int); create table top_bad_comment_product(product_id int, comment_num int, bad_comment_rate float); 图6 创建数据表 关键参数说明: 数据连接:步骤4中创建的DLI数据连接。 数据库:步骤6中创建的数据库。 资源队列:可使用提供的默认资源队列“default”。 当前由于DLI的“default”队列默认Spark组件版本较低,可能会出现无法支持建表语句执行的报错,这种情况下建议您选择自建队列运行业务。如需“default”队列支持建表语句执行,可联系DLI服务客服或技术支持人员协助解决。 DLI的“default”队列为共享队列,仅用于用户体验,用户间可能会出现抢占资源的情况,不能保证每次都可以得到资源执行相关操作。当遇到执行时间较长或无法执行的情况,建议您在业务低峰期再次重试,或选择自建队列运行业务。 脚本运行成功后,可以通过如下脚本检查数据表是否创建成功。 SHOW TABLES; 确认数据表创建成功后,该脚本后续无需使用,可直接关闭。
  • 约束限制 在使用分区管理功能时,需要满足如下约束: 不支持在小型机、加速集群、单机集群上使用。 支持在8.1.3及以上集群版本中使用。 仅支持行存范围分区表、列存范围分区表、时序表以及冷热表。 分区键唯一且类型仅支持timestamp、timestamptz、date类型。 不支持存在maxvalue分区。 (nowTime - boundaryTime) / period需要小于分区个数上限,其中nowTime为当前时间,boundaryTime为现有分区中最早的分区边界时间。 period、ttl取值范围为1hour ~ 100years。另外,在兼容Teradata或MySQL的数据库中,分区键类型为date时,period不能小于1day。 表级参数ttl不支持单独存在,必须要提前或同时设置period,并且要大于或等于period。 集群在线扩容期间,自动增加分区会失败,但是由于每次增分区时,都预留了足够的分区,所以不影响使用。
  • 分区自动管理 分区管理功能是和表级参数period、ttl绑定的,只要成功设置了表级参数period,即开启了自动创建新分区功能;成功设置了表级参数ttl,即开启了自动删除过期分区功能。第一次自动创建分区或删除分区的时间为设置period或ttl后30秒。 有如下两种开启分区管理功能的方式: 建表时指定period、ttl。 该方式适用于新建分区管理表时使用。新建分区管理表有两种语法:一种是建表时指定分区,另一种是建表时不指定分区。 建分区管理表时如果指定分区,则语法规则和建普通分区表相同,唯一的区别就是会指定表级参数period、ttl。 示例:创建分区管理表CPU1,指定分区。 1 2 3 4 5 6 7 8 9 10 CREATE TABLE CPU1( id integer, IP text, time timestamp ) with (TTL='7 days',PERIOD='1 day') partition by range(time) ( PARTITION P1 VALUES LESS THAN('2023-02-13 16:32:45'), PARTITION P2 VALUES LESS THAN('2023-02-15 16:48:12') ); 建分区管理表时可以只指定分区键不指定分区,此时将创建两个默认分区,这两个默认分区的分区时间范围均为period。其中,第一个默认分区的边界时间是大于当前时间的第一个整时/整天/整周/整月/整年的时间,具体选择哪种整点时间取决于period的最大单位;第二个默认分区的边界时间是第一个分区边界时间加period。假设当前时间是2023-02-17 16:32:45,各种情况的第一个默认分区的分区边界选择如下表: 表2 period参数说明 period period最大单位 第一个默认分区的分区边界 1hour Hour 2023-02-17 17:00:00 1day Day 2023-02-18 00:00:00 1month Month 2023-03-01 00:00:00 13months Year 2024-01-01 00:00:00 创建分区管理表CPU2,不指定分区: 1 2 3 4 5 6 CREATE TABLE CPU2( id integer, IP text, time timestamp ) with (TTL='7 days',PERIOD='1 day') partition by range(time); 使用ALTER TABLE RESET的方式设置period、ttl。 该方式适用于给一张满足分区管理约束的普通分区表增加分区管理功能。 创建普通分区表CPU3: 1 2 3 4 5 6 7 8 9 10 CREATE TABLE CPU3( id integer, IP text, time timestamp ) partition by range(time) ( PARTITION P1 VALUES LESS THAN('2023-02-14 16:32:45'), PARTITION P2 VALUES LESS THAN('2023-02-15 16:56:12') ); 同时开启自动创建和自动删除分区功能: 1 ALTER TABLE CPU3 SET (PERIOD='1 day',TTL='7 days'); 只开启自动创建分区功能: 1 ALTER TABLE CPU3 SET (PERIOD='1 day'); 只开启自动删除分区功能,如果没有提前开启自动创建分区功能,则开启失败: 1 ALTER TABLE CPU3 SET (TTL='7 days'); 通过修改period和ttl修改分区管理功能: 1 ALTER TABLE CPU3 SET (TTL='10 days',PERIOD='2 days'); 关闭分区管理功能。 使用ALTER TABLE RESET语句可以删除表级参数period、ttl,即可关闭相应的分区管理功能。 不能在存在ttl的情况下,单独删除period。 时序表不支持ALTER TABLE RESET。 同时关闭自动创建和自动删除分区功能: 1 ALTER TABLE CPU1 RESET (PERIOD,TTL); 只关闭自动删除分区功能: 1 ALTER TABLE CPU3 RESET (TTL); 只关闭自动创建分区功能,如果该表有ttl参数,则关闭失败: 1 ALTER TABLE CPU3 RESET (PERIOD);
  • 方案说明 DataArts Studio数据开发模块支持以事件触发的方式运行作业,因此通过DIS或者 MRS Kafka作为作业依赖纽带,可以跨空间实现作业调度。 如下图,工作空间A中的job1运行完成后,可以使用DIS Client或Kafka Client发送消息触发中继作业job_agent;job_agent配置事件触发调度,根据DIS Client或Kafka Client发送的消息触发运行后,判断消息是否符合预期,符合则触发job2作业运行,否则不再触发job2运行。 图1 调度方案
  • 配置方法(Kafka Client) 登录DataArts Studio控制台,找到所需要的DataArts Studio实例,单击实例卡片上的“进入控制台”,进入概览页面。 单击第一个工作空间A的“数据开发”,系统跳转至数据开发页面,新建数据开发作业job1。分别选择Dummy节点和Kafka Client节点,选中连线图标并拖动,编排如图7所示的作业。 Dummy节点不执行任何操作,本例选择Dummy节点仅为演示操作,实际使用中您可以用其他作业节点替代。 Kafka Client节点用于发送消息。您需要选择Kafka连接和Topic名称,并将发送数据配置为EL表达式job1,#{DateUtil.getDay(Job.startTime)}。则当本作业执行完成后,将使用Kafka Client发送一条字符串消息:job1,作业执行日期。例如2月15日作业job1执行,实际的消息则为:job1,15。 作业调度等其他作业参数无需配置,保持默认即可。 图7 job1作业Kafka Client节点配置 在另一个工作空间B,新建数据开发作业job_agent。分别选择Dummy节点和Subjob节点,选中连线图标并拖动,编排图8所示的作业。 图8 job_agent作业调度配置 Dummy节点不执行任何操作,本例选择Dummy节点用于设置Dummy节点到Subjob节点之间连线的IF条件。 Subjob节点用于将需要后续执行的作业job2作为子作业引用执行。实际使用中您可以引用已有作业,也可以使用其他作业节点替代Subjob节点。 作业的调度方式设置为“事件驱动调度”,连接名称和Topic选择为工作空间B中的Kafka连接和Topic,需要与工作空间A中job1作业中Kafka Client节点所选择的Kafka连接和Topic相对应,用于通过Kafka消息触发作业运行。 IF判断条件设置,用于校验Kafka Client节点发送的消息是否符合预期,符合才会继续执行Subjob节点,否则跳过。 右键单击连线,选择“设置条件”,在弹出的“编辑参数表达式”文本框中输入IF判断条件,失败策略保持默认即可。IF判断条件为通过EL表达式语法填写三元表达式,当三元表达式结果为true的时候,才会执行连线后面的节点,否则后续节点将被跳过。 #{StringUtil.equals(StringUtil.split(Job.eventData,',')[1],'21')} 该IF判断条件表示,仅当从Kafka通道获取的消息逗号后的部分为“21”时,即每月21日时,才执行后续的作业节点。 如果您需要匹配多条消息记录,可以添加多个Dummy节点并分别添加到Subjob节点的IF条件,然后将数据开发组件配置项中的“多IF策略”设置为“逻辑或”即可。 图9 编辑参数表达式 测试运行作业job_agent,在工作空间A的作业job1未运行的情况下,前往实例监控中查看执行结果是否符合预期。 由于作业job1未运行即未发送消息,则job_agent作业中的Subjob节点被跳过,证明IF条件判断生效。 图10 Subjob节点被跳过 启动调度job_agent。然后测试运行工作空间A作业job1,待job1实例运行成功后,前往工作空间B实例监控中查看作业运行结果是否符合预期。 job_agent被触发运行。 如果当天日期和IF条件中的日期匹配,则job_agent作业中的Subjob节点成功运行、子作业job2也执行完成。否则Subjob节点被跳过。 图11 Subjob节点成功运行
  • 配置方法(DIS Client) 登录DataArts Studio控制台,找到所需要的DataArts Studio实例,单击实例卡片上的“进入控制台”,进入概览页面。 单击第一个工作空间A的“数据开发”,系统跳转至数据开发页面,新建数据开发作业job1。分别选择Dummy节点和DIS Client节点,选中连线图标并拖动,编排如图2所示的作业。 Dummy节点不执行任何操作,本例选择Dummy节点仅为演示操作,实际使用中您可以用其他作业节点替代。 DIS Client节点用于发送消息。您需要选择DIS所属Region和通道,并将发送数据配置为EL表达式job1,#{DateUtil.getDay(Job.startTime)}。则当本作业执行完成后,将使用DIS Client发送一条字符串消息:job1,作业执行日期。例如2月15日作业job1执行,实际的消息则为:job1,15。 作业调度等其他作业参数无需配置,保持默认即可。 图2 job1作业DIS Client节点配置 在另一个工作空间B,新建数据开发作业job_agent。分别选择Dummy节点和Subjob节点,选中连线图标并拖动,编排图3所示的作业。 图3 job_agent作业调度配置 Dummy节点不执行任何操作,本例选择Dummy节点用于设置Dummy节点到Subjob节点之间连线的IF条件。 Subjob节点用于将需要后续执行的作业job2作为子作业引用执行。实际使用中您可以引用已有作业,也可以使用其他作业节点替代Subjob节点。 作业的调度方式设置为“事件驱动调度”,DIS通道名称选择为工作空间A中job1作业中DIS Client节点所选择的通道,用于通过DIS消息触发作业运行。 IF判断条件设置,用于校验DIS Client节点发送的消息是否符合预期,符合才会继续执行Subjob节点,否则跳过。 右键单击连线,选择“设置条件”,在弹出的“编辑参数表达式”文本框中输入IF判断条件,失败策略保持默认即可。IF判断条件为通过EL表达式语法填写三元表达式,当三元表达式结果为true的时候,才会执行连线后面的节点,否则后续节点将被跳过。 #{StringUtil.equals(StringUtil.split(Job.eventData,',')[1],'21')} 该IF判断条件表示,仅当从DIS通道获取的消息逗号后的部分为“21”时,即每月21日时,才执行后续的作业节点。 如果您需要匹配多条消息记录,可以添加多个Dummy节点并分别添加到Subjob节点的IF条件,然后将数据开发组件配置项中的“多IF策略”设置为“逻辑或”即可。 图4 编辑参数表达式 测试运行作业job_agent,在工作空间A的作业job1未运行的情况下,前往实例监控中查看执行结果是否符合预期。 由于作业job1未运行即未发送消息,则job_agent作业中的Subjob节点被跳过,证明IF条件判断生效。 图5 Subjob节点被跳过 启动调度job_agent。然后测试运行工作空间A作业job1,待job1实例运行成功后,前往工作空间B实例监控中查看作业运行结果是否符合预期。 job_agent被触发运行。 如果当天日期和IF条件中的日期匹配,则job_agent作业中的Subjob节点成功运行、子作业job2也执行完成。否则Subjob节点被跳过。 图6 Subjob节点成功运行
  • 数据开发中的对象 数据连接:定义访问数据实体存储(计算)空间所需信息的集合,包括连接类型、名称和登录信息等。 解决方案:解决方案为用户提供便捷的、系统的方式管理作业,更好地实现业务需求和目标。每个解决方案可以包含一个或多个业务相关的作业,一个作业可以被多个解决方案复用。 作业:作业由一个或多个节点组成,执行作业可以完成对数据的一系列操作。 脚本:脚本(Script)是一种批处理文件的延伸,是一种纯文本保存的程序,一般来说的计算机脚本程序是确定的一系列控制计算机进行运算操作动作的组合,在其中可以实现一定的逻辑分支等。 节点:定义对数据执行的操作。 资源:用户可以上传自定义的代码或文本文件作为资源,以便在节点运行时调用。 表达式:数据开发作业中的节点参数可以使用表达式语言(Expression Language,简称EL),根据运行环境动态生成参数值。数据开发EL表达式包含简单的算术和逻辑计算,引用内嵌对象,包括作业对象和一些工具类对象。 环境变量:环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所使用到的信息。 补数据:手工触发周期方式调度的作业任务,生成某时间段内的实例。
  • 数据开发的主要功能 表1 数据开发的主要功能 支持的功能 说明 数据管理 支持管理DWS、DLI、MRS Hive等多种 数据仓库 。 支持可视化和DDL方式管理数据库表。 脚本开发 提供在线脚本编辑器,支持多人协作进行SQL、Shell、Python脚本在线代码开发和调测。 支持使用变量和函数。 作业开发 提供图形化设计器,支持拖拉拽方式快速构建数据处理工作流。 预设数据集成、SQL、Shell等多种任务类型,通过任务间依赖完成复杂数据分析处理。 支持导入和导出作业。 资源管理 支持统一管理在脚本开发和作业开发使用到的file、jar、archive类型的资源。 作业调度 支持单次调度、周期调度和事件驱动调度,周期调度支持分钟、小时、天、周、月多种调度周期。调度周期配置为小时,系统支持按间隔小时和离散小时配置调度周期。 运维监控 支持对作业进行运行、暂停、恢复、终止等多种操作。 支持查看作业和其内各任务节点的运行详情。 支持配置多种方式报警,作业和任务发生错误时可及时通知相关人,保证业务正常运行。
  • 解决方案 请确认当前Hive SQL和Spark SQL脚本使用的数据连接为“MRS API连接”还是“通过代理连接”。 “MRS API连接”模式下DataArts Studio通过API把脚本提交给MRS,然后查询是否执行完成;而MRS不会将具体的错误原因反馈到DataArts Studio,因此导致数据开发脚本执行界面只能显示执行成功还是失败。 “通过代理连接”模式下DataArts Studio提交脚本并运行,查看脚本是否执行完成,同时在数据开发脚本执行界面,日志中会显示具体错误信息和脚本执行的结果。 如果需要查看具体的错误原因,则需要到MRS的作业管理界面进行查看。
  • 数据清洗说明 在做日志接入创建日志空间时可以配置算子清洗策略完成日志数据清洗,如图2所示,算子清洗功能及使用样例请参见算子清洗功能介绍。 图2 算子清洗 清洗规则:选择“算子清洗”。 日志样例:使用典型日志,用来做清洗验证。 解析脚本:配置解析脚本,将日志样例清洗为字段显示。解析脚本中不支持使用中划线,支持使用下划线。 清洗字段:配置解析脚本后单击“配置解析脚本”,自动生成清洗自动,查看字段是否符合预期。
  • 解决方案 本章节介绍如何通过AppStage运维中心完成对业务实时数据的接入、处理、开发与应用。 图1 数据开发与应用流程 数据接入 AppStage运维中心支持接入虚拟机日志和容器日志,您可以根据日志类型选择日志接入方式。 虚拟机日志接入:通过日志配置下发任务部署filebeat,并根据日志采集配置设置,通过filebeat采集虚拟机上的业务日志。 容器日志接入:安装daemonset插件,通过daemonset实现容器日志接入。 (可选)如果需要将原始日志转化为JSON格式,可以在日志接入时选择算子清洗方式对日志数据做清洗,数据清洗如数据清洗说明所示。 数据导流 接入的日志数据存在于对应的Topic中,需要创建导流任务,将数据存储在对应的数据库中才能进行日志检索、日志数据的管理和后续开发。 (可选)数据汇聚:当日志量较大且不需要关注原始日志时可以对实时日志进行日志汇聚。 数据开发 可以使用存入数据库中的数据进行报表开发、实时监控或者异常告警等应用,可以直接写SQL,但是不同数据源写SQL的方式有差异,且有一定难度,AppStage支持使用运维数仓的方式,会自动根据不同数据源生成对应的SQL。 创建逻辑主体:使用运维数仓时首先需要创建逻辑主体。 创建指标:逻辑主体创建成功后,需要创建数据指标。 (可选)创建视图:为需要计算的指标创建查询视图,也可以在查询视图的基础上创建持久化视图或长期存储视图。 数据应用 使用报表对业务进行实时监控:使用运维数仓中的指标或视图创建业务报表,实时监控业务数据。 通过日志检索进行问题定位:日志接入并创建导流任务后,可以对已接入的日志进行检索,定位业务异常问题。 数据异常告警:支持通过异常检测上报告警和配置虚拟机异常告警,根据业务需要进行配置。
  • 背景信息 随着业务数量增多,业务的数据开发需求也逐渐增多, 数据开发人员不能快速支撑业务的开发需求,了解业务的人员设计和开发业务的数据资产可以使数据发挥最大价值,因此需要业务人员来主导业务的 数据治理 开发工作。 数据治理的核心就是管理好业务的数据资产,随着业务特性和业务复杂度快速增长,面临的不再是无数据的时代,面临的问题是如何在数据世界中获取到准确且有价值的信息,例如同一个指标在不同的应用场景,哪个才是准确的?这么多数据我的业务监控是否都覆盖了?以及是否有无价值和未合理使用的数据等,因此如何有效管理数据资产成了当前重点关注的问题。
  • 基本原理 在 GaussDB (DWS)中,CU是列存表存储数据的最小单元。列存表每列默认存储60000行数据为一个CU,CU生成后数据固定不可更改。无论是向列存表中插入1条还是60000条数据,都只会生成一个CU,在多次插入少量数据时,由于不能有效利用列存压缩能力,从而导致数据膨胀影响查询性能和磁盘使用率。 由于CU文件数据不能更改只能追加写,对CU中的数据做更新或删除都不会真正更改这个CU。删除是将老数据在字典中标记为作废,更新是标记老数据删除后,再写入一条新记录到新CU。在对列存表进行多次更新/删除操作,会导致列存表空间膨胀,大量空间无法有效利用。 列存Delta表解决了小批量入库产生的小CU问题,但无法解决同一个CU上的并发更新产生的锁冲突问题。而实时入库的场景下,需要将insert+upsert+update操作实时并发入库,数据来源于上游的其他数据库或者应用,同时要求入库后的数据要能及时查询,且对于查询的效率要求很高。 HStore表则采用附加delta表的形式,批量插入的数据会直接写入CU,具有与列存一致的压缩优势,而被更新的列、小批量插入的数据会序列化后压缩,同时定期merge到主表CU。
  • 使用场景 GaussDB(DWS)中的HStore表, 在使用列存储格式尽量降低磁盘占用的同时,支持高并发的更新操作入库以及高性能的查询效率。因此对于实时入库和实时查询有较强诉求,以及要求具备处理传统TP事务能力的场景建议使用HStore表。 GaussDB(DWS)在8.3.0.100版本对HStore表做了优化,为保持前向兼容,保留了老的HStore表,优化后的HStore表为HStore_opt表。除了微批copy无更新入库性能要求高的场景外,HStore表的场景都可以使用HStore_opt表代替,性能更优。