华为云用户手册

  • 功能介绍 部署资源栈(DeployStack) 此API用于部署一个已有的资源栈 用户可以使用此API更新模板、参数等并触发一个新的部署 此API会直接触发部署,如果用户希望先确认部署会发生的时间,请使用执行计划,即使用CreateExecutionPlan以创建执行计划、使用GetExecutionPlan以获取执行计划 此API为全量API,即用户每次部署都需要给予所想要使用的template、vars的全量 当触发的部署失败时,如果资源栈开启了自动回滚,会触发自动回滚的流程,否则就会停留在部署失败时的状态
  • 响应参数 状态码: 400 表4 响应Body参数 参数 参数类型 描述 error_code String 响应码 最小长度:11 最大长度:11 error_msg String 响应消息 encoded_authorization_message String 包含有关未经授权请求的信息。 状态码: 401 表5 响应Body参数 参数 参数类型 描述 error_code String 响应码 最小长度:11 最大长度:11 error_msg String 响应消息 encoded_authorization_message String 包含有关未经授权请求的信息。 状态码: 403 表6 响应Body参数 参数 参数类型 描述 error_code String 响应码 最小长度:11 最大长度:11 error_msg String 响应消息 encoded_authorization_message String 包含有关未经授权请求的信息。 状态码: 404 表7 响应Body参数 参数 参数类型 描述 error_code String 响应码 最小长度:11 最大长度:11 error_msg String 响应消息 encoded_authorization_message String 包含有关未经授权请求的信息。 状态码: 500 表8 响应Body参数 参数 参数类型 描述 error_code String 响应码 最小长度:11 最大长度:11 error_msg String 响应消息 encoded_authorization_message String 包含有关未经授权请求的信息。
  • 请求示例 删除指定资源栈下的执行计划 DELETE https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans/my_first_execution_plan 删除指定资源栈下的执行计划,并提供资源栈id和执行计划id以校验是否与当前资源栈和执行计划匹配 DELETE https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans/my_first_execution_plan?stack_id=ea6a4f0e-ee8a-494e-b12a-8be4a1e65af2&execution_plan_id=fb5e781e-a27d-46e2-9954-242753857a9f
  • URI DELETE /v1/{project_id}/stacks/{stack_name}/execution-plans/{execution_plan_name} 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID,可以从调用API处获取,也可以从控制台获取。 项目ID获取方式 最小长度:3 最大长度:64 stack_name 是 String 资源栈的名称。此名字在domain_id+区域+project_id下应唯一,可以使用中文、大小写英文、数字、下划线、中划线。首字符需为中文或者英文,区分大小写。 最小长度:1 最大长度:128 execution_plan_name 是 String 执行计划的名称。此名字在domain_id+区域+project_id+stack_id下应唯一,可以使用中文、大小写英文、数字、下划线、中划线。首字符需为中文或者英文,区分大小写。 最小长度:1 最大长度:128 表2 Query参数 参数 是否必选 参数类型 描述 stack_id 否 String 资源栈(stack)的唯一Id。 此Id由资源编排服务在生成资源栈的时候生成,为UUID。 由于资源栈名仅仅在同一时间下唯一,即用户允许先生成一个叫HelloWorld的资源栈,删除,再重新创建一个同名资源栈。 对于团队并行开发,用户可能希望确保,当前我操作的资源栈就是我认为的那个,而不是其他队友删除后创建的同名资源栈。因此,使用ID就可以做到强匹配。 资源编排服务保证每次创建的资源栈所对应的ID都不相同,更新不会影响ID。如果给予的stack_id和当前资源栈的ID不一致,则返回400 最小长度:36 最大长度:36 execution_plan_id 否 String 执行计划(execution_plan)的唯一Id。 此Id由资源编排服务在生成执行计划的时候生成,为UUID。 由于执行计划名仅仅在同一时间下唯一,即用户允许先生成一个叫HelloWorld的执行计划,删除,再重新创建一个同名执行计划。 对于团队并行开发,用户可能希望确保,当前我操作的执行计划就是我认为的那个,而不是其他队友删除后创建的同名执行计划。因此,使用ID就可以做到强匹配。 资源编排服务保证每次创建的执行计划所对应的ID都不相同,更新不会影响ID。如果给予的execution_plan_id和当前执行计划的ID不一致,则返回400 最小长度:36 最大长度:36
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 versions Array of TemplateVersion objects 模板版本列表 数组长度:0 - 100 表5 TemplateVersion 参数 参数类型 描述 template_id String 模板的唯一ID,由模板服务随机生成 最小长度:36 最大长度:36 template_name String 用户希望创建的模板名称 最小长度:1 最大长度:128 version_description String 模板版本的描述。可用于客户识别自己的模板版本 最小长度:0 最大长度:1024 create_time String 版本创建时间,格式遵循RFC3339,即yyyy-mm-ddTHH:MM:SSZ,如1970-01-01T00:00:00Z version_id String 模板模板版本ID 最小长度:2 最大长度:11 状态码: 400 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表9 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 429 表10 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表11 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 响应示例 状态码: 200 列举模板版本成功 { "versions" : [ { "template_id" : "69f8d5ea-eaa4-4a3b-a96d-bae9230e97c8", "template_name" : "my_first_template", "version_description" : "当前模板的第二个版本", "create_time" : "2023-05-09T08:01:24Z", "version_id" : "V2" }, { "template_id" : "69f8d5ea-eaa4-4a3b-a96d-bae9230e97c8", "template_name" : "my_first_template", "version_description" : "当前模板的第一个版本", "create_time" : "2023-05-09T08:01:23Z", "version_id" : "V1" } ] }
  • 请求示例 列举当前模板的所有的模板版本信息 GET https://{endpoint}/v1/c364070ab35041ddae68cf8b4839b60f/templates/my_template/versions 列举当前模板的所有的模板版本信息,并提供模板id以校验是否与当前模板匹配 GET https://{endpoint}/v1/c364070ab35041ddae68cf8b4839b60f/templates/my_template/versions?template_id=1b15e005-bdbb-4bd7-8f9a-a09b6774b4b3
  • 功能介绍 列举模板版本信息(ListTemplateVersions) 此API用于列举模板下所有的模板版本信息 默认按照生成时间降序排序,最新生成的模板排列在最前面 注意:目前返回全量模板版本信息,即不支持分页 如果没有任何模板版本,则返回空list template_id是模板的唯一Id。此Id由资源编排服务在生成模板的时候生成,为UUID。由于模板名仅仅在同一时间下唯一,即用户允许先生成一个叫HelloWorld的模板,删除,再重新创建一个同名模板。对于团队并行开发,用户可能希望确保,当前我操作的模板就是我认为的那个,而不是其他队友删除后创建的同名模板。因此,使用ID就可以做到强匹配。资源编排服务保证每次创建的模板所对应的ID都不相同,更新不会影响ID。如果给予的template_id和当前模板管理的ID不一致,则返回400 如果模板不存在则返回404 ListTemplateVersions返回的信息只包含模板版本摘要信息(具体摘要信息见ListTemplateVersionsResponseBody),如果用户需要了解模板版本内容,请调用ShowTemplateVersionContent
  • URI GET /v1/{project_id}/templates/{template_name}/versions 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID,可以从调用API处获取,也可以从控制台获取。 项目ID获取方式 最小长度:3 最大长度:64 template_name 是 String 用户希望创建的模板名称 最小长度:1 最大长度:128 表2 Query参数 参数 是否必选 参数类型 描述 template_id 否 String 模板的ID。当template_id存在时,模板服务会检查template_id是否和template_name匹配,不匹配会返回400 最小长度:36 最大长度:36
  • 支持审计操作的关键列表 云审计服务是安全解决方案中专业的日志审计服务,记录了数据库和应用迁移 UGO的相关操作事件,方便您日后的查询、审计和回溯。 表1 云审计服务支持的UGO操作列表 操作名称 资源类型 事件名称 创建数据库评估项目 evaluate createEvaluationJob 创建对象迁移项目 migrate createMigrationJob 数据库评估项目测试连接 evaluate testConnection 对象迁移项目测试连接 migrate testConnection 删除数据库评估项目 evaluate deleteEvaluationJob 删除对象迁移项目 migrate deleteMigrationJob 开始对象迁移验证 migrate startVerify 停止对象迁移验证 migrate stopVerify 开始对象迁移 migrate startMigrate 停止对象迁移 migrate stopMigrate 停止数据库评估项目 evaluate stopEvaluationJob 恢复数据库评估项目 evaluate resumeEvaluationJob 确认目标库 evaluate confirmEvaluationJob 重新开始数据库评估 evaluate reanalyzeEvaluation 预检查 evaluate preCheck 上传证书 evaluate uploadCertFile 测试网络稳定性 evaluate testNetwork 父主题: 对接云审计服务
  • 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类型。 父主题: 配置说明
  • 环境配置 在“服务环境配置”页面,选择左侧导航栏的“服务关联”。 在环境配置区域,选择待配置环境的环境名称。 单击“新增”,新增环境配置,具体参数如表2所示。 表2 环境配置参数 参数 说明 部门 选择已录入的部门。 产品 选择已录入的产品。 服务 选择已录入的服务。 华为公有云账号名 选择用户的华为云账号名。 区域 选择使用的区域。 容灾区域 选择使用的容灾区域。 模式 单云 双云 单击“确定”,完成环境配置。 配置的环境会显示在环境配置列表中。
  • 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消费详情。
  • 问题 运行一个Spark Streaming任务,确认有数据输入后,发现没有任何处理的结果。打开Web界面查看Spark Job执行情况,发现如下图所示:有两个Job一直在等待运行,但一直无法成功运行。 图1 Active Jobs 继续查看已经完成的Job,发现也只有两个,说明Spark Streaming都没有触发数据计算的任务(Spark Streaming默认有两个尝试运行的Job,就是图中两个) 图2 Completed Jobs
  • 回答 经过定位发现,导致这个问题的原因是:Spark Streaming的计算核数少于Receiver的个数,导致部分Receiver启动以后,系统已经没有资源去运行计算任务,导致第一个任务一直在等待,后续任务一直在排队。从现象上看,就是如问题中的图1中所示,会有两个任务一直在等待。 因此,当Web出现两个任务一直在等待的情况,首先检查Spark的核数是否大于Receiver的个数。 Receiver在Spark Streaming中是一个常驻的Spark Job,Receiver对于Spark是一个普通的任务,但它的生命周期和Spark Streaming任务相同,并且占用一个核的计算资源。 在调试和测试等经常使用默认配置的场景下,要时刻注意核数与Receiver个数的关系。
  • 回答 造成该现象的原因是NodeManager重启。使用ExternalShuffle的时候,Spark将借用NodeManager传输Shuffle数据,因此NodeManager的内存将成为瓶颈。 在当前版本的FusionInsight中,NodeManager的默认内存只有1G,在数据量比较大(1T以上)的Spark任务下,内存严重不足,消息响应缓慢,导致FusionInsight健康检查认为NodeManager进程退出,强制重启NodeManager,导致上述问题产生。 解决方式: 调整NodeManager的内存,数据量比较大(1T以上)的情况下,NodeManager的内存至少在4G以上。
  • 语法 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}即可。
  • 操作场景 在日常使用ClickHouse时,如果出现一些异常故障,需要紧急重启恢复业务,在紧急重启之前,需要及时转储ClickHouse各系统表状态信息,用于问题定位,提升ClickHouse问题定位的效率。 针对不同的系统表日志可以分为实时转储和一键转储,如下表所示: 系统表转储日志 系统表 实时转储系统表日志 system.asynchronous_metrics system.clusters system.distribution_queue system.events system.grants system.mutations system.processes system.metrics system.part_moves_between_shards system.replicas system.replicated_fetches system.replication_queue 一键转储系统表日志 system.distributed_ddl_queue system.errors system.parts system.parts_columns system.query_log system.query_thread_log system.trace_log
  • 收集一键转储系统表日志 使用root用户后台登录任一ClickHouseServer节点,进入到sbin目录下。 cd ${BIGDATA_HOME}/FusionInsight_ClickHouse_*/*_*_ClickHouseServer/install/clickhouse/sbin 执行如下命令获取转储日志: ./clickhouse_systemtable_dump.sh 1 "收集开始时间" "收集结束时间" 例如:./clickhouse_systemtable_dump.sh 1 "2023-08-04 12:00:00" "2023-08-04 16:37:20" 进入“/var/log/Bigdata/clickhouse/systemTableDump/oneclickTable”目录,查看一键转储压缩日志。
  • 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的数据节点。
共100000条