华为云用户手册

  • 设置应用说明 参考如何登录新版应用设计器中操作,登录新版应用设计器。 在左侧导航栏中,选择“设置”,进入应用设置页面。 在应用信息中,单击“编辑使用说明”。 为应用添加使用说明,支持多语言,即不同语言下的应用说明。 “用户访问时是否自动弹出”设置为“不弹出”,运行该应用后,用户访问时不会弹出应用使用说明页。 “用户访问时是否自动弹出”设置为“可勾选下次不再弹出”,运行该应用后,用户首次访问时会弹出应用说明页,且弹出页会显示参数“下次不再弹出”供用户勾选。 图3 编辑应用使用说明 配置完成后,用户访问应用时,会提示图4中应用说明。关闭该应用说明后,如需要重新查看,可单击应用名称(如Astro轻应用开发者调查问卷),选择“应用说明”,再次查看。 图4 查看说明
  • 使用说明 应用创建完成后,支持开发人员将某个开发中的应用克隆出一个新的应用。执行克隆操作的用户,需要有“查看应用”的权限。 若待克隆的应用依赖了其他应用中的资源,即克隆A应用时,A应用中有脚本依赖B应用中的对象。克隆应用前,需要先执行如下操作(三选一执行即可),否则克隆应用会失败。 (推荐)方式一:新版设计器提供了单个资源的克隆以及把应用A中的资源移动到应用B中的功能,故克隆应用前,可以先把应用中的各个资源单独克隆一下,然后再移动到新创建的应用中。 方式二:克隆前,把依赖其他应用对象的内容先去掉,克隆完成后再重新建立依赖。 方式三:把依赖其他应用的对象通过导入已有对象的方式,导入到当前应用,然后再执行克隆操作。
  • 设置出厂数据 参考如何登录新版应用设计器中操作,登录新版应用设计器。 在左侧导航栏中,选择“数据”。 单击对象后的,选择“编辑”,进入对象设计器。 在对象设计器中,单击对象中的,进入对象详情页。 在“数据”页签,单击“设置出厂数据”。 设置出厂数据,单击“保存”。 请选择要包含的出厂数据:应用包中,最多允许总共包含1万条出厂数据。 全部选择:当前对象里的所有数据,都包含在应用包中。选择全部后,打包时会包含对象当前所有的记录。 手工选择:逐条勾选对象里的数据,打包时会包含这些已选择的记录。 请选择出厂数据的安装策略。 增量数据:对象里包含的出厂数据,会增量添加到环境中,仅添加新记录,环境上已有重复记录则跳过。例如,设备管理应用中,增加了几种设备规格,需要添加到环境中。 如果环境中已存在相同ID的数据,则看是否是出厂数据。如果是,则看是否被更新过。只有未更新过的出厂数据会被覆盖。 如果环境中不存在此数据,则作为增量的新数据写入到环境中。 固定数据:对象里包含的出厂数据是应用本身的一部分,载入环境后这些数据不可被更改、删除。每次应用升级时,会用应用包里新的出厂数据直接覆盖环境上的数据。例如,客户管理应用中预置了个人客户、组织客户两种客户类型数据。 环境中该对象仍然可以插入其他业务数据。 应用升级时,固定数据会全部替换成新的出厂数据。例如,环境上已有A、B、C三条固定数据,新版本应用包中包含A、B、D三条固定数据。升级后,C会被删除,D会被新增。 样例数据:对象里包含的出厂数据,仅在应用首次安装到环境时载入,后续应用升级时不再更新。该策略用来支撑应用在各种演示环境上的安装,如调查问卷应用首次安装时,携带了样例问卷。 字段设置为出厂数据后,在编辑修改出厂数据时,界面会提示:“此数据为出厂数据,请谨慎修改”。 图1 修改出厂数据提示 开发应用时,如果修改了某个对象的出厂数据安装策略。在应用升级时,会以新的安装策略为准,即对包含在出厂数据里的记录ID做变更,变更规则如表1所示。 表1 变更规则 安装策略 样例数据(新) 固定数据(新) 增量数据(新) 样例数据(旧) - 如果环境上之前是样例数据,不管是否修改过,升级时根据ID完全覆盖为固定数据。如果出厂数据中,不包含该ID,则不处理。 如果环境上之前是样例数据,不管是否修改过,升级时根据ID完全覆盖为增量数据。如果出厂数据中,不包含该ID,则不处理。 固定数据(旧) 因为是升级,所以不会写入新样例数据。而出厂数据已经不是固定数据了,因此直接删除之前的全部固定数据。 - 环境上数据如果在出厂数据中,则覆盖为增量数据且状态为未修改。如果不在出厂数据中,则直接删除。 增量数据(旧) 因为是升级,所以不会写入新样例数据,仅清除该环境数据的策略。 环境上数据如果出现在出厂数据中,则覆盖为固定数据。如果不在出厂数据中,则仅清除该环境数据的策略。 - (可选)如果需要修改出厂数据,再次单击“设置出厂数据”,在右侧属性面板中进行修改即可。 通过“手动选择”,取消部分数据的勾选。 修改“安装策略”,重新选定策略即可。 单击属性面板中的“清除”,表示取消全部数据的出厂设置。 应用打包。 导出的安装包,默认包含出厂数据。 图2 导出安装包 导出的补丁包,出厂数据在打包过程中选择。 图3 导出补丁包 图4 添加出厂数据
  • 支持创建的应用类型 在低代码平台中,支持创建如下几种类型的应用: 新建空白应用:从零开始新建应用,更多介绍请参见新建空白应用。 使用模板新建:选择合适的模板新建应用,更多介绍请参见使用模板创建应用。 新建扩展应用:当需要基于已有应用或解决方案(不是单一的应用,某一解决方案会涉及到多个应用)进行定制时,可选择创建扩展类型应用。更多介绍,请参见创建扩展应用。 新建BO:业务对象(Business Object,简称BO),是封装了完整的数据模型、业务逻辑、页面展现的软件单元,一个BO提供一个完整场景的服务,为上层应用提供特定服务。用户可基于BO,如魔方一样创建功能各异的应用。更多介绍,请参见业务对象(BO)。 新建原生服务:开发者在低代码平台外开发了一些服务,服务运行在Docker容器中。若希望将这些服务集成到AstroZero中,供AstroZero内部应用或其他第三方系统调用时,可选择创建原生服务。更多介绍,请参见原生服务。
  • 应用的生命周期 应用的开发阶段 应用是一个工程,可以创建对象模型,编辑标准页面和高级页面,开发服务编排和脚本逻辑,开发商业应用业务流程等。在应用的开发环境里,可以快速实现底层逻辑。 应用的部署阶段 低代码新版设计器,提供了一键部署应用的功能,支持将应用一键打包发布到运行环境或者沙箱环境。使部署操作化繁为简,降低部署门槛,提升部署体验,同时提供可视化的部署进度和部署结果。 应用的运行阶段 应用是一个可预览的运行界面。
  • 样例代码解读 通过以下详细的脚本代码内容解读,对脚本有一个更具体的认识。 一般情况下,编写脚本的大致流程为: 按需引入平台标准库。 图11 引入平台标准库 定义出参、入参结构。 图12 定义入参 图13 定义出参 定义方法以及使用的对象。 图14 定义方法及使用对象 进行数据库操作。 图15 数据库相关操作 以下将通过解读一个脚本样例,带您了解脚本的总体结构框架及编写要求。 import * as decimal from 'decimal'; @action.object({type: "param"}) export class ActionInput { @action.param({type: 'String', required: true, label: 'your name', description: 'please input your name'}) name: string; @action.param({type: 'Number', required: true, min: 1, max: 100, message: 'age must during [1, 100]'}) age: decimal.Decimal; @action.param({type: 'Date', pattern: 'yyyy-MM-dd'}) birthday: Date; @action.param({type: 'String', isCollection: true}) schools: string[]; @action.param({type: 'Boolean'}) married: boolean; @action.param({type: 'MyObject'}) obj: MyObject; } @action.object({type: "param"}) export class MyObject { @action.param({type: 'String'}) something: string; @action.param({type: 'Number'}) otherthing: decimal.Decimal; } @action.object({type: "param"}) export class ActionOutput { @action.param({type: 'String', isCollection: true}) greets: string[]; } @action.object({type: "method"}) export class ActionDemo { @action.method({ label: 'greeting something', description: 'greeting something.', input: 'ActionInput', output: 'ActionOutput' }) public greet(inarg: ActionInput): ActionOutput { console.log('name = ', inarg.name); console.log('age = ', inarg.age); console.log('birthday = ', inarg.birthday); console.log('schools = ', inarg.schools); console.log('married = ', inarg.married); console.log('obj = ', inarg.obj); let out = new ActionOutput(); out.greets = ['hello', 'hi', 'how are you', 'how old are you', 'long time no see']; return out; } } 上述示例脚本主要分为如下三部分: 导入标准库或其他模块。 上例中,第1行表示使用平台提供的decimal库。 import * as decimal from 'decimal'; 除了平台预置的标准库,还可以声明对其他自定义模块的引用。例如,已提前开发了一个脚本cirle,可以用如下方式加载它。 import * as circle from './circle'; 定义输入、输出变量。 脚本可以有多个输入、输出参数,也可以没有。所有的输入或输出参数,必须封装在一个class中,作为实例成员。 本例中,脚本有6个输入参数,被封装为ActionInput。每个参数都必须定义其参数类型,同时还可以定义是否必填、标签、最大值、最小值等可选属性。 @action.object({type: "param"}) export class ActionInput { @action.param({type: 'String', required: true, label: 'your name', description: 'please input your name'}) name: string; @action.param({type: 'Number', required: true, min: 1, max: 100, message: 'age must during [1, 100]'}) age: decimal.Decimal; @action.param({type: 'Date', pattern: 'yyyy-MM-dd'}) birthday: Date; @action.param({type: 'String', isCollection: true}) schools: string[]; @action.param({type: 'Boolean'}) married: boolean; @action.param({type: 'MyObject'}) obj: MyObject; } 因为第6个输入参数“obj”的参数类型为自定义对象,所以还需要给出“ MyObject”的定义。 @action.object({type: "param"}) export class MyObject { @action.param({type: 'String'}) something: string; @action.param({type: 'Number'}) otherthing: decimal.Decimal; } 脚本中有1个输出参数,被封装为ActionOutput。 @action.object({type: "param"}) export class ActionOutput { @action.param({type: 'String', isCollection: true}) greets: string[]; } 定义方法 样例中,ActionDemo是外部调用的class,使用export导出。ActionDemo定义了一个action method,使用action.method装饰,表明调用脚本时从此方法入口。greet是class的实例方法,其输入、输出参数就是前面定义的ActionInput和ActionOutput。在一个脚本文件中,action.method只能使用一次。 @action.object({type: "method"}) export class ActionDemo { @action.method({ label: 'greeting something', description: 'greeting something.', input: 'ActionInput', output: 'ActionOutput' }) public greet(inarg: ActionInput): ActionOutput { console.log('name = ', inarg.name); console.log('age = ', inarg.age); console.log('birthday = ', inarg.birthday); console.log('schools = ', inarg.schools); console.log('married = ', inarg.married); console.log('obj = ', inarg.obj); let out = new ActionOutput(); out.greets = ['hello', 'hi', 'how are you', 'how old are you', 'long time no see']; return out; } } 脚本编辑页面不支持单步调试,样例里的console.log可实现在日志里打印过程输出,方便代码调试。
  • 3、选择一个场景,开始您的开发之旅 以需求场景为开发起点,一路引导,让开发旅程更顺畅。 标准页面:标准页面是一种将一个或多个组件拖进画布,进行低代码甚至无代码的配置,即可快速完成业务功能的前端页面。对于一般的业务应用系统,例如请假电子流、出差报销、在线投票等企业常见业务场景,其功能主要是针对业务数据的增、删、改、查,且前端界面的样式相对简单的页面,可以使用AstroZero提供的标准页面。 高级页面:高级页面是由一个或者多个组件拼装而成。高级页面可以使用Widget组件进行组装和配置,方便用户实现自己想要的效果。高级页面支持多种框架,支持代码开发,比较自由,多用于对页面效果要求高的场景。 工作流:工作流即业务流程管理,源自业界BPMN 2.0标准。低代码平台基于该规范实现了自己的业务流程管理系统,由于工作流本身已成为了业界一套行业规范,因此在低代码平台中称实现此类流程的引擎为工作流。 报表:AstroZero对内部数据提供了一种汇总方式的视图,即报表。利用报表功能,可以让数据进行可视化的展示,并进行分析与洞察,更好的了解业务现存的问题与机遇。 对象:AstroZero中的对象(也可以称为Object)相当于传统方式开发业务系统时,数据库中创建一个表。每个对象对应一张数据库表,用于保存业务系统需要的配置数据和业务数据。 开放接口:通过定义服务的API,可快速定制所需的业务接口,并将该接口服务注册到网关,供第三方使用。 定时任务:通过创建定时任务,让系统自动执行某脚本、服务编排完成业务功能。例如,系统中存在一个定时任务,在每天凌晨3点,定时将到期的商品进行下架处理。 消息接入:当需要从外部数据源获取数据,按照需求对数据进行一系列处理,然后转化成内部事件,输出给Kafka或者ROMA Connect时,可通过配置“数据接入”来实现整个流程。
  • 2、创建低代码应用 在低代码平台中,您可以通过如下方式,开发各个场景的应用,以满足千行百业的各种需求。 新建空白应用:从零开始新建应用,更多介绍请参见新建空白应用。 使用模板新建:当业务与应用模板中的场景相似度较高时,可以尝试使用应用模板创建,并在模板应用的基础上继续改造应用。更多介绍,请参见使用模板创建应用。 新建扩展应用:当需要基于已有应用或解决方案(不是单一的应用,某一解决方案会涉及到多个应用)进行定制时,可选择创建扩展类型应用。更多介绍,请参见创建扩展应用。 新建BO:商业对象(Business Object,简称BO),是封装了完整的数据模型、业务逻辑、页面展现的软件单元,一个BO提供一个完整场景的服务,为上层应用提供特定服务。用户可基于BO,如魔方一样创建功能各异的应用。更多介绍,请参见业务对象(BO)。 新建原生服务:租户在低代码平台外开发了一些服务,服务运行在Docker容器中。若希望将这些服务集成到AstroZero中,供AstroZero内部应用或其他第三方系统调用时,可选择创建原生服务。更多介绍,请参见原生服务。
  • 删除字段 只支持删除自定义字段,系统预置字段不支持删除。 参考如何登录新版应用设计器中操作,登录新版应用设计器。 在左侧导航栏中,选择“数据”。 单击对象后的,选择“编辑”,进入对象设计器。 在对象设计器中,单击对象中的,进入对象详情页。 在“字段”页签中,选择待删除的字段。 在右侧字段属性设置中,单击“删除字段”。 在弹出的确认框中,单击“删除”,即可删除该字段。 字段删除后不可恢复,请谨慎操作。
  • 添加字段 参考如何登录新版应用设计器中操作,登录新版应用设计器。 在左侧导航栏中,选择“数据”。 单击对象后的,选择“编辑”,进入对象设计器。 在对象设计器中,单击对象中的。 您也可以单击,直接进入图3页面,为对象添加字段。 图1 为对象添加字段 在对象详情页面,单击“添加”,为对象添加字段。 图2 对象详情页 设置字段的基本信息,单击“确认”。 图3 添加字段 显示名称:新建字段的名称,用于在页面显示。 唯一标识:字段在系统中的唯一标识,创建后不支持修改。 字段类型:单击,在弹出的页面中,选择字段类型。 描述:新建字段的描述信息,建议设置为字段功能。
  • 编辑字段 只支持修改自定义字段,预置的标准字段,仅支持修改显示名称。 参考如何登录新版应用设计器中操作,登录新版应用设计器。 在左侧导航栏中,选择“数据”。 单击对象后的,选择“编辑”,进入对象设计器。 在对象设计器中,单击对象中的,进入对象详情页。 在“字段”页签中,单击已添加的字段。 在右侧字段属性中,修改字段属性。 显示名称:字段在页面显示的名称。 唯一标识:字段在系统中存储的唯一标识,创建后不支持修改。 字段类型:字段的格式与内容规则,创建后不支持修改。 字段帮助:字段提示的帮助信息。 描述:字段的描述信息。 更多信息:显示自定义字段的创建人、创建时间、最近修改人和最近修改时间,由系统自动生成,不支持修改。 字段设置 是否唯一:勾选,表示该字段唯一。 是否必填:勾选,表示该字段为必填字段。 是否可搜:是否能在前端开发者控制台或脚本中,使用search语句搜索该字段。search语句可以理解为sql语句的子集,系统支持大部分常用的sql查询语句。只需把sql查询语句开头的select关键词,修改为search即可。search语句特点和限制如下: search语句当前对分组、通配符、去重distinct等功能暂不支持。 search语句不支持通配符,in查询可进行模糊查询。 search语句除了聚合函数(AVG、COUNT、MAX、MIN和SUM),其他必须带有where从句,否则报错。 字符串类型默认都转为es中text类型,因此可以实现分词的倒排索引。由于默认未设置Fielddata=on(会很耗性能),所以字符串类型无法排序。 不支持search语句where从句中,有非可搜索字段,如不支持search from myobject where t1 = 'abc' (此处t1为非可搜字段)。 search语句目前只可进行单表搜索。 search语句不支持HAVING子句、OFFSET。 search语句不支持同时普通查询和聚合,例如不支持“search count(列名),列名 from 列表名;”。 search语句不支持列表别名后“.*”全部查询,例如不支持“search T.* from table as T where ...;”。 text类型采用了英语分词器,因此大小写单复数不敏感,“movie”可匹配“Movies”。 同sql语句一样,search语句也大小写不敏感。 大小写敏感:大小写是否敏感,例如,“ABC”和“abc”为相同值,表示大小写不敏感,“ABC”和“abc”为不同值,则表示大小写敏感。 数据长度:字段的字符长度。 默认值:字段默认取值,默认值长度需小于等于数据长度。 设置完成后,单击“保存”。
  • 设置任务清单 参考如何登录新版应用设计器中操作,登录新版应用设计器。 在左侧导航栏中,选择“数据”。 单击对象后的,选择“编辑”,进入对象设计器。 在对象设计器中,单击对象中的,进入对象详情页。 在“清理”页签中,单击“启动任务清单”。 图1 启用任务清单 在任务清单中,指定根据哪个日期字段来进行清理。 仅支持选择当前对象的,所有日期类型的字段。 图2 指定字段 指定待存留时间。 当该记录的指定字段值超过了该期限后,清理任务自动处理该记录。 单击“新增”,指定记录匹配条件,仅清除符合条件的记录。 图3 指定匹配条件 匹配条件可设置“且”、“或”组合关系。 输入条件的值,要匹配字段类型。例如,日期类型则用日期输入框。 设置清理动作,单击“保存”。 选择动作为删除任务,即清理任务直接删除符合条件的记录。 图4 清理动作
  • Oracle To RDS for MySQL/ GaussDB (for MySQL)配置项使用说明 问题描述 配置建议 建议值 MySQL不支持AUTHID CURRENT_USER或AUTHID DEFINER 建议配置“允许使用定义者或调用者的权限”解决该类问题 注释AUTHID CURRENT_USER或AUTHID DEFINER。 MySQL不支持SQL PLUS命令 建议配置“SQL PLUS”解决该类问题 注释SQL PLUS命令。 Mysql不支持层次查询。 建议配置“层次查询”解决该类问题 此配置将转换层次查询,并使用其他方式创建查询。Mysql8.0及以上建议选择此配置项。 MySQL不支持超过65535个字符的表 建议配置“大表”,将超出范围的字符串列迁移成TEXT和BLOB解决该类问题 如果字符串列使用的字符数之和超过65535,字符串列转换为TEXT,RAW列转换为BLOB。由于该存储大小可能会稍微增加,性能可能会稍微降低。 MySQL不支持多列表分区中包含不支持的分区类型 建议配置“多列表分区中包含不支持的分区类型”解决该类问题 生成虚拟列替换原来不支持的类型分区。 MySQL不支持分区表外键 建议配置“分区表外键”解决该类问题 MYSQL分区不支持分区表外键。此配置忽略迁移,脚本保持不变,并记录错误信息。 MySQL不支持全局临时表 建议配置“全局临时表”解决该类问题 注释create global temporary table语句中的global关键字。 MySQL不支持全局临时表事物提交时删除行 建议配置“全局临时表事物提交时删除行”解决该类问题 注释CREATE TABLE语句中的ON COMMIT DELETE ROWS子句。 MySQL不支持部分特殊字符或者关键字对象名 建议配置“设置SQL模式处理特殊字符或者关键字对象名”解决该类问题 将单引号(')或者双引号(")作为前缀和后缀添加到对象名中。 Oracle的表varchar列的最大长度大于MySQL的最大长度 建议配置“设置表varchar列的最大长度”解决该类问题 将char类型列存储的默认上限设置为64000,超过该上限的char类型都将转换为TEXT数据类型。 MySQL不支持自动分区 建议配置“自动分区”解决该类问题 注释掉INTERVAL自动分区。 Oracle的float数据类型默认的最大精度为126,大于MySQL的53 建议配置“float数据类型”解决该类问题 将FLOAT类型转换为DOUBLE类型。 MySQL不支持BFILE类型 建议配置“BFILE类型”解决该类问题 迁移脚本,将BFILE转换为LONGTEXT。 MySQL不支持XMLTYPE类型 建议配置“XMLTYPE类型”解决该类问题 迁移脚本,将XMLTYPE转换为LONGTEXT。 MySQL不支持GRANT语句 建议配置“GRANT语句”解决该类问题 迁移脚本,注释整个GRANT语句。 MySQL不支持表空间 建议配置“表空间”解决该类问题 注释表空间子句。 MySQL不支持具有主键或唯一键的表分区场景 建议配置“具有主键或唯一键的表分区场景”解决该类问题 将分区键添加到唯一约束(主键和唯一键)中。 MySQL不支持DBMS_UTILITY.FORMAT_ERROR_BACKTRACE系统包 建议配置“DBMS_UTILITY.FORMAT_ERROR_BACKTRACE系统包函数转换”解决该类问题 通过MySQL中的系统变量RETURNED_SQLSTATE、MYSQL_ERRNO和MESSAGE_TEXT生成错误消息。 MySQL不支持设置PL/SQL分隔符 建议配置“设置PL/SQL分隔符”解决该类问题 设置PL/SQL块的默认分隔符,该分隔符将存储过程、函数和触发器作为一个单元执行。 MySQL不支持包名分隔符 建议配置“设置包名分隔符”解决该类问题 此参数用于Oracle 包迁移。用户应设置分隔符,使其组成包中子对象新名称。 MySQL不支持编辑视图子句 建议配置“编辑视图子句”解决该类问题 注释视图语句中的EDITIONING关键字。 MySQL不支持bitmap索引 建议配置“bitmap索引”解决该类问题 BITMAP索引将迁移成BTREE索引。 MySQL不支持unusable索引 建议配置“unusable索引”解决该类问题 迁移成MySQL不可见索引。 MySQL不支持长索引 建议配置“长索引”解决该类问题 减小索引表达式的长度。 Oracle的索引列的最大长度大于MySQL的最大长度 建议配置“设置索引支持列的最大长度”解决该类问题 如果索引长度大于3072,将其减小到MySQL支持的大小(3072)。 MySQL不支持Externally和Globally用户 建议配置“Externally和Globally用户”解决该类问题 迁移脚本中,将Externally和Globally用户转换为普通数据库用户。 MySQL不支持PROFILE 建议配置“PROFILE”解决该类问题 迁移脚本,注释掉PROFILE子句。 MySQL不支持调试权限 建议配置“调试权限”解决该类问题 注释脚本,注释调试权限。 MySQL不支持角色 建议配置“角色”解决该类问题 说明: 仅RDS for MySQL-5.7版本可配置该参数。 迁移脚本,注释掉角色语句。 MySQL不支持授权语句中的委托选项 建议配置“授权语句中的委托选项”解决该类问题 迁移脚本,注释授权语句中的委托选项。 MySQL不支持系统角色 建议配置“系统角色”解决该类问题 迁移脚本,注释整个GRANT语句。 MySQL不支持用户名大小写 建议配置“用户名大小写”解决该类问题 迁移成小写的用户名。 MySQL不支持序列对象 建议配置“是否迁移序列”解决该类问题 使用自定义函数来替换序列操作。 MySQL区分角色名大小写 建议配置“角色名大小写”解决该类问题 说明: 仅GaussDB(for MySQL)-8.0版本可配置该参数。 迁移成大写或小写的角色名。 MySQL不支持角色授权 建议配置“角色授权”解决该类问题 说明: 仅GaussDB(for MySQL)-8.0版本可配置该参数。 迁移脚本,注释掉用户授权语句。 MySQL不支持授权语句的IDENTIFIED BY子句 建议配置“授权语句的IDENTIFIED BY子句”解决该类问题 说明: 仅GaussDB(for MySQL)-8.0版本可配置该参数。 注释IDENTIFIED BY语句。 MySQL没有与Oracle的 TIMESTAMP WITH TIME ZONE对应的数据类型。 建议配置“TIMESTAMP WITH TIME ZONE类型转换”解决该类问题。 将TIMESTAMP WITH TIME ZONE类型转换为DATETIME。 MySQL没有与Oracle的 TIMESTAMP WITH LOCAL TIME ZONE对应的数据类型。 建议配置“TIMESTAMP WITH LOCAL TIME ZONE类型转换”解决该类问题。 将TIMESTAMP WITH LOCAL TIME ZONE类型转换为TIMESTAMP。 影响:MySQL的TIMESTAMP范围最大为2038年,超过了该日期只能使用DATETIME类型。 父主题: 配置说明
  • Color 函数 bar(x, width) 描述:使用默认的低频红色和高频绿色渲染ANSI条形图中的单个条形。例如,如果将25%的x和40的宽度传递给此函数。将绘制一个10个字符的红色条形,后跟30个空格,以创建一个40个字符的条形。 bar(x, width, low_color, high_color) 描述:在ANSI条形图中以指定宽度绘制一条直线。参数x是0到1之间的一个双精度值。x的值超出[0,1]范围将被截断为0或1值。low_color和high_color捕获用于水平条形图任一端的颜色。例如,如果x为0.5,宽度为80,low_color为0xFF0000,high_color为0x00FF00,则此函数将返回一个40个字符的条形,该条形由红色(0xFF0000)和黄色(0xFFFF00)组成,其余80个字符条为用空格填充。 select bar(0.75,80,rgb(255,0,0),rgb(0,255,0)); render(b) 描述:根据布尔值返回对错符号。 select render(true),render(false); 父主题: SQL函数和操作符
  • 查看Broker 进入KafkaUI,请参考访问KafkaUI。 单击“Brokers”,进入Broker详情页面。 在“Broker Summary”一栏可查看Broker的“Broker ID”、“Host”、“Rack”、“Disk(Used|Total)”和“Memory(Used|Total)”。 在“Brokers Metrics”处可查看Broker节点数据流量的jmx指标,包括在不同时段的时间窗口内,Broker节点平均每秒流入消息条数, 每秒流入消息字节数, 每秒流出消息字节数,每秒失败的请求数,每秒总的请求数和每秒生产的请求数。
  • 固定精度型 名称 描述 存储空间 取值范围 字面量 DECIMAL 固定精度的十进制数。精度最高支持到38位,但精度小于18位能保障性能最好。 Decimal有两个输入参数: precision:总位数,默认38 scale:小数部分的位数,默认0 说明: 如果小数位为零,即十进制(38,0),则支持最高19位精度。 64位 DECIMAL NUMERIC 同DECIMAL 128位 NUMERIC 表1 字面量示例 字面量示例 数据类型 DECIMAL '0' DECIMAL(1) DECIMAL '12345' DECIMAL(5) DECIMAL '0000012345.1234500000' DECIMAL(20, 10) --创建具有DECIMAL类型数据的表 CREATE TABLE decimal_t1 (dec_col1 DECIMAL(10,3)) ; --插入具有DECIMAL类型数据 insert into decimal_t1 values (DECIMAL '5.325'); --查看数据 SELECT * FROM decimal_t1; dec_col1 --------- 5.325 (1 row) --反例:小数位数超出定义长度,sql执行失败 insert into decimal_t1 values (DECIMAL '5.3253'); Query 20201126_034601_00053_tq98i@default@HetuEngine failed: Insert query has mismatched column types: Table: [decimal(10,3)], Query: [decimal(5,4)] --删除表 DROP TABLE decimal_t1; --创建NUMERIC 类型表 CREATE TABLE tb_numberic_hetu(col1 NUMERIC(9,7)); CREATE TABLE --插入数据 INSERT INTO tb_numberic_hetu values(9.12); INSERT: 1 row --查看数据 SELECT * FROM tb_numberic_hetu; col1 ------------ 9.1200000 (1 row) 父主题: 数据类型
  • 查看消费组 进入KafkaUI,请参考访问KafkaUI。 单击“Consumers”,进入消费组详情页面,可以查看当前集群内的所有ConsumerGroups,并可以查看各个ConsumerGroups Coordinator所在节点IP,在页面右上角,用户可以输入ConsumerGroup来搜索指定的ConsumerGroup信息。 在Consumer Summary一栏,可查看当前集群已存在的消费组,单击消费组名称,可查看该消费组所消费过的Topic,消费过的Topic有两种状态:“pending”和“running”,分别表示“曾经消费过但现在未消费”和“现在正在消费”,在弹框右上角,可以输入Topic名来进行过滤。 单击Topic名称,进入Consumer Offsets页面,可查看Topic消费详情。
  • 语法 INSERT { INTO | OVERWRITE } [TABLE] table_name [(column_list)] [ PARTITION (partition_clause)] {select_statement | VALUES (value [, value ...]) [, (value [, value ...]) ...] } FROM from_statement INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement FROM from_statement INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) select_statement
  • 示例 创建fruit和fruit_copy表: create table fruit (name varchar,price double); create table fruit_copy (name varchar,price double); 向fruit表中插入一行数据: insert into fruit values('LIchee',32); -- 兼容写法示例,带上table关键字 insert into table fruit values('Cherry',88); 向fruit表中插入多行数据: insert into fruit values('banana',10),('peach',6),('lemon',12),('apple',7); 将fruit表中的数据行加载到fruit_copy表中,执行后表中有5条记录: insert into fruit_copy select * from fruit; 先清空fruit_copy表,再将fruit中的数据加载到表中,执行之后表中有2条记录: insert overwrite fruit_copy select * from fruit limit 2; 对于varchar类型,仅当目标表定义的列字段长度大于源表的实际字段长度时,才可以使用INSERT... SELECT...的形式从源表中查数据并且插入到目标表: create table varchar50(c1 varchar(50)); insert into varchar50 values('hetuEngine'); create table varchar100(c1 varchar(100)); insert into varchar100 select * from varchar50; 分区表使用insert overwrite语句时,只会清理插入值所在分区的数据,而不是整个表: --创建表 create table test_part (id int, alias varchar) partitioned by (dept_id int, status varchar); insert into test_part partition(dept_id=10, status='good') values (1, 'xyz'), (2, 'abc'); select * from test_part order by id; id | alias | dept_id | status ----|-------|---------|-------- 1 | xyz | 10 | good 2 | abc | 10 | good (2 rows) --清理分区partition(dept_id=25, status='overwrite'),并插入一条数据 insert overwrite test_part (id, alias, dept_id, status) values (3, 'uvw', 25, 'overwrite'); select * from test_part ; id | alias | dept_id | status ----|-------|---------|----------- 1 | xyz | 10 | good 2 | abc | 10 | good 3 | uvw | 25 | overwrite --清理分区partition(dept_id=10, status='good'),并插入一条数据 insert overwrite test_part (id, alias, dept_id, status) values (4, 'new', 10, 'good'); select * from test_part ordr; id | alias | dept_id | status ----|-------|---------|----------- 3 | uvw | 25 | overwrite 4 | new | 10 | good (2 rows) --分区表插入数据 create table test_p_1(name string, age int) partitioned by (provice string, city string); create table test_p_2(name string, age int) partitioned by (provice string, city string); -- 填充数据到test_p_1 insert into test_p_1 partition (provice = 'hebei', city= 'baoding') values ('xiaobei',15),( 'xiaoming',22); -- 根据test_p_1 插入数据到test_p_2 -- 方式一 from test_p_1 insert into table test_p_2 partition (provice = 'hebei', city= 'baoding') select name,age; -- 方式二 insert into test_p_2 partition(provice = 'hebei', city= 'baoding') select name,age from test_p_1;
  • 描述 向表中插入新的数据行。 如果指定了列名列表,那么这些列名列表必须与query语句产生列列表名完全匹配。表中不在列名列表中的每一列,其值会设置为null。 如果没有指定列名列表,则query语句产生的列必须与将要插入的列完全匹配。 使用insert into时,会往表中追加数据,而使用insert overwrite时,如果表属性“auto.purge”被设置为“true”,直接删除原表数据,再写入新的数据。 如果对象表是分区表时,insert overwrite会删除对应分区的数据而非所有数据。 insert into后面的table关键字为可选,以兼容hive语法。
  • 典型场景 通过Hue界面对Hive进行创建表的操作如下: 单击Hue的WebUI界面左上角的,选择要操作的Hive实例,进入Hive命令的执行页面。 在命令输入框内输入一条HQL语句,例如: create table hue_table(id int,name string,company string) row format delimited fields terminated by ',' stored as textfile; 单击执行HQL。 图1 执行语句 在命令输入框内输入: show tables; 单击,查看“结果”中有创建的表hue_table。 图2 查看结果
  • 元数据浏览器使用介绍 访问Hue WebUI。 查看Hive表的元数据 在左侧导航栏单击表,单击某一表名称,界面将显示Hive表的元数据信息。 管理Hive表的元数据 在Hive表的元数据信息界面: 单击右上角的“导入”可导入数据。 单击“概述”,在“属性”域可查看表文件的位置信息。 可查看Hive表各列字段的信息,并手动添加描述信息,注意此处添加的描述信息并不是Hive表中的字段注释信息(comment)。 单击“样本”可浏览数据。 管理Hive元数据表 单击左侧列表中的可在数据库中根据上传的文件创建一个新表,也可手动创建一个新表。 Hue界面主要用于文件、表等数据的查看与分析,禁止通过Hue界面对操作对象进行删除等高危管理操作。如需操作,建议在确认对业务没有影响后通过各组件的相应操作方法进行处理,例如使用HDFS客户端对HDFS文件进行操作,使用Hive客户端对Hive表进行操作。
  • Distributed表引擎 Distributed表引擎本身不存储任何数据,而是作为数据分片的透明代理,能够自动路由数据到集群中的各个节点,分布式表需要和其他本地数据表一起协同工作。分布式表会将接收到的读写任务分发到各个本地表,而实际上数据的存储在各个节点的本地表中。 图1 Distributed Distributed表引擎的创建模板: ENGINE = Distributed(cluster_name, database_name, table_name, [sharding_key]) Distributed表参数解析如下: cluster_name:集群名称,在对分布式表执行读写的过程中,使用集群的配置信息查找对应的ClickHouse实例节点。 database_name:数据库名称。 table_name:数据库下对应的本地表名称,用于将分布式表映射到本地表上。 sharding_key:分片键(可选参数),分布式表会按照这个规则,将数据分发到各个本地表中。 Distributed表引擎使用示例: --先创建一个表名为test的ReplicatedMergeTree本地表 CREATE TABLE default.test ON CLUSTER default_cluster_1 ( `EventDate` DateTime, `id` UInt64 ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/default/test', '{replica}') PARTITION BY toYYYYMM(EventDate) ORDER BY id --基于本地表test创建表名为test_all的Distributed表 CREATE TABLE default.test_all ON CLUSTER default_cluster_1 ( `EventDate` DateTime, `id` UInt64 ) ENGINE = Distributed(default_cluster_1, default, test, rand()) 分布式表创建规则: 创建Distributed表时需加上on cluster cluster_name,这样建表语句在某一个ClickHouse实例上执行一次即可分发到集群中所有实例上执行。 分布式表通常以本地表加“_all”命名。它与本地表形成一对多的映射关系,之后可以通过分布式表代理操作多张本地表。 分布式表的表结构尽量和本地表的结构一致。如果不一致,在建表时不会报错,但在查询或者插入时可能会发生异常。
  • Replicated*MergeTree引擎 ClickHouse中的所有MergeTree家族引擎前面加上Replicated就成了支持副本的合并树引擎。 Replicated系列引擎借助ZooKeeper实现数据的同步,创建Replicated复制表时通过注册到ZooKeeper上的信息实现同一个分片的所有副本数据进行同步。 Replicated表引擎的创建模板: ENGINE = Replicated*MergeTree('ZooKeeper存储路径','副本名称', ...) Replicated表引擎需指定两个参数: ZooKeeper存储路径:ZooKeeper中该表相关数据的存储路径,建议规范化,如:/clickhouse/tables/{shard}/数据库名/表名。 副本名称,一般用{replica}即可。
  • CarbonData关键技术和优势 快速查询响应:高性能查询是CarbonData关键技术的优势之一。CarbonData查询速度大约是Spark SQL查询的10倍。CarbonData使用的专用数据格式围绕高性能查询进行设计,其中包括多种索引技术和多次的Push down优化,从而对TB级数据查询进行最快响应。 高效率数据压缩:CarbonData使用轻量级压缩和重量级压缩的组合压缩算法压缩数据,可以减少60%~80%数据存储空间,很大程度上节省硬件存储成本。
  • CarbonData结构 CarbonData作为Spark内部数据源运行,不需要额外启动集群节点中的其他进程,CarbonData Engine在Spark Executor进程之中运行。 图2 CarbonData结构 存储在CarbonData Table中的数据被分成一些CarbonData数据文件,每一次数据查询时,CarbonData Engine模块负责执行数据集的读取、过滤等实际任务。CarbonData Engine作为Spark Executor进程的一部分运行,负责处理数据文件块的一个子集。 Table数据集数据存储在HDFS中。同一Spark集群内的节点可以作为HDFS的数据节点。
  • CarbonData特性 SQL功能:CarbonData与Spark SQL完全兼容,支持所有可以直接在Spark SQL上运行的SQL查询操作。 简单的Table数据集定义:CarbonData支持易于使用的DDL(数据定义语言)语句来定义和创建数据集。CarbonData DDL十分灵活、易于使用,并且足够强大,可以定义复杂类型的Table。 便捷的数据管理:CarbonData为数据加载和维护提供多种数据管理功能。CarbonData支持加载历史数据以及增量加载新数据。加载的数据可以基于加载时间进行删除,也可以撤销特定的数据加载操作。 CarbonData文件格式是HDFS中的列式存储格式。该格式具有许多新型列存储文件的特性,例如,分割表和数据压缩。CarbonData具有以下独有的特点: 伴随索引的数据存储:由于在查询中设置了过滤器,可以显著加快查询性能,减少I/O扫描次数和CPU资源占用。CarbonData索引由多个级别的索引组成,处理框架可以利用这个索引来减少需要安排和处理的任务,也可以通过在任务扫描中以更精细的单元(称为blocklet)进行skip扫描来代替对整个文件的扫描。 可选择的数据编码:通过支持高效的数据压缩,可基于压缩/编码数据进行查询,在将结果返回给用户之前,才将编码转化为实际数据,这被称为“延迟物化”。 支持一种数据格式应用于多种用例场景:例如,交互式OLAP-style查询,顺序访问(big scan),随机访问(narrow scan)。
  • 查看Topic详情 进入KafkaUI,请参考访问KafkaUI。 单击“Topics”,进入Topic管理页面。 在“Topic List”栏可查看当前集群已创建的Topic的名称、状态、分区数量、创建时间和副本个数等信息。 单击Topic名称可进入Topic详情页面。在该页面可查看Topic与分区的详细信息。 在“Producer Message”栏可根据业务需求选择“Day”、“Week”、“Month”不同时段查看此Topic生产数据条数。
  • 操作步骤 访问Hue WebUI,请参考访问Hue的WebUI。 在左侧导航栏单击编辑器,然后选择“Hive”。 在“Database”右侧下拉列表选择一个Hive中的数据库,默认数据库为“default”。 系统将自动显示数据库中的所有表。可以输入表名关键字,系统会自动搜索包含此关键字的全部表。 单击指定的表名,可以显示表中所有的列。 在HiveQL语句编辑区输入HiveQL语句。 create table hue_table(id int,name string,company string) row format delimited fields terminated by ',' stored as textfile; 单击 开始执行HiveQL语句。 图1 执行语句 在命令输入框内输入show tables;,单击按钮,查看“结果”中有5创建的表hue_table。
  • 简介 Loader是实现 MRS 与关系型数据库、文件系统之间交换数据和文件的ETL工具,支持将数据或者文件从MRS系统中导出到关系型数据库或文件系统中。 Loader支持如下数据导出方式: 从HDFS/OBS中导出数据到SFTP服务器 从HDFS/OBS中导出数据到关系型数据库 从HBase中导出数据到SFTP服务器 从HBase中导出数据到关系型数据库 从Phoenix表导出数据到SFTP服务器 从Phoenix表导出数据到关系型数据库 从Hive中导出数据到SFTP服务器 从Hive中导出数据到关系数据库 从同一集群内HBase导出数据到HDFS/OBS MRS与外部数据源交换数据和文件时需要连接数据源。系统提供以下连接器,用于配置不同类型数据源的连接参数: generic-jdbc-connector:关系型数据库连接器。 hdfs-connector:HDFS数据源连接器。 oracle-connector:Oracle数据库专用连接器,使用row_id作为分区列,相对generic-jdbc-connector来说,Map任务分区更均匀,并且不依赖区分列是否有创建索引。 mysql-fastpath-connector:MySQL数据库专用连接器,使用MySQL的mysqldump和mysqlimport工具进行数据的导入导出,相对generic-jdbc-connector来说,导入导出速度更快。 sftp-connector:SFTP数据源连接器。 oracle-partition-connector:支持Oracle分区特性的连接器,专门对Oracle分区表的导入导出进行优化。 建议将SFTP服务器和数据库服务器与Loader部署在独立的子网中,以保障数据安全地导出。 与关系数据库连接时,可以选择通用数据库连接器(generic-jdbc-connector)或者专用数据库连接器(oracle-connector、oracle-partition-connector、mysql-fastpath-connector),专用数据库连接器特别针对具体数据库类型进行优化,相对通用数据库连接器来说,导出、导入速度更快。 使用mysql-fastpath-connector时,要求在NodeManager节点上有MySQL的mysqldump和mysqlimport命令,并且此两个命令所属MySQL客户端版本与MySQL服务器版本兼容,如果没有这两个命令或版本不兼容,请参考http://dev.mysql.com/doc/refman/5.7/en/linux-installation-rpm.html,安装MySQL client applications and tools。 使用oracle-connector时,要求给连接用户赋予如下系统表或者视图的select权限: dba_tab_partitions、dba_constraints、dba_tables 、dba_segments 、v$version、dba_objects、v$instance、dba_extents、 dba_tab_partitions、dba_tab_subpartitions。 使用oracle-partition-connector时,要求给连接用户赋予如下系统表的select权限:dba_objects、dba_extents。
共100000条