华为云用户手册

  • 注意事项 列存表与HStore表都暂不支持SELECT FOR UPDATE语法。 对HStore表执行SELECT查询时,会扫描列存主表CU上的数据、delta表上的I记录中的数据、内存中每行数据更新信息,并将三种信息合并后返回。 在通过主键索引或唯一索引查询数据的场景中: 对于传统列存表,唯一索引会同时存储行存Delta表上的数据位置信息(blocknum,offset)与列存主表的数据位置信息(cuid,offset),数据MERGE到主表后又会插入新的索引元组,索引会持续膨胀。 对于HStore表,由于实现了全局CUID的统一分配,索引元组中始终只存储(cuid,offset), 数据MERGE后不会产生新的索引元组。
  • 示例 创建表reason_update: 1 2 3 4 5 6 CREATE TABLE reason_update ( TABLE_SK INTEGER , TABLE_ID VARCHAR(20) , TABLE_NA VARCHAR(20) )WITH(ORIENTATION=COLUMN, ENABLE_HSTORE=ON); 向表reason_update中插入数据: 1 INSERT INTO reason_update VALUES (1, 'S01', 'StudentA'),(2, 'T01', 'TeacherA'),(3, 'T02', 'TeacherB'); 对表reason_update执行UPDATE操作: 1 UPDATE reason_update SET TABLE_NA = 'TeacherD' where TABLE_SK = 3;
  • 参数说明 plan_hint子句 以/*+ */的形式在关键字后,用于对指定语句块生成的计划进行hint调优,详细用法请参见使用Plan Hint进行调优 table_name 要更新的表名,可以使用模式修饰。 取值范围:已存在的表名称。 alias 目标表的别名。 取值范围:字符串,符合标识符命名规范。 expression 赋给字段的值或表达式。 DEFAULT 用对应字段的缺省值填充该字段。 如果没有缺省值,则为NULL。 from_list 一个表的表达式列表,允许在WHERE条件里使用其他表的字段。与在一个SELECT语句的FROM子句里声明表列表类似。 目标表绝对不能出现在from_list里,除非在使用一个自连接(此时它必须以from_list的别名出现)。 condition 一个返回boolean类型结果的表达式。只有这个表达式返回true的行才会被更新。
  • 语法格式 1 2 3 4 UPDATE [/*+ plan_hint */] [ ONLY ] table_name [ * ] [ [ AS ] alias ] SET {column_name = { expression | DEFAULT } |( column_name [, ...] ) = {( { expression | DEFAULT } [, ...] ) |sub_query }}[, ...] [ FROM from_list] [ WHERE condition ];
  • 注意事项 通过ALTER修改enable_hstore值可以将列存表变成HStore表,或者将HStore修改成列存表。但需要注意enable_delta为on时,无法设置enable_hstore为on。 对于部分ALTER操作(修改列类型,分区合并,添加NOT NULL约束,添加主键约束),HStore表需要先将数据MERGE到主表然后再执行原有的ALTER逻辑,这可能会带来额外的性能开销, 性能影响大小与delta表的数据量相关。 当需要增加列时, 建议不要与其它类型的ALTER(比如修改列类型等)组合使用,在一条ALTER里只有ADD COLUMN情况下,由于不需要做FULL MERGE, 性能会有很大提升。 不支持修改存储参数ORIENTATION。
  • 注意事项 如果需要删除表上的所有数据,建议使用TRUNCATE语法, 可以有效提高性能同时减少空间膨胀。 HStore表上的单条Delete操作,会往Delta中插入一条type是D的记录,同时在更新内存更新链用于管理并发。 HStore表上的批量Delete操作,对于每个CU上的连续delete,会插入一条type是D的记录。 对于并发delete场景, 传统列存储格式由于同时操作相同CU时会阻塞所以并发性能较差, 对于HStore表由于不需要阻塞等待,并发delete性能可达到列存的百倍以上。 语法完全兼容列存,更多信息可以参考UPDATE语法。
  • 示例 创建表reason_t2: 1 2 3 4 5 6 7 CREATE TABLE reason_t2 ( TABLE_SK INTEGER , TABLE_ID VARCHAR(20) , TABLE_NA VARCHAR(20) )WITH(ORIENTATION=COLUMN, ENABLE_HSTORE=ON); INSERT INTO reason_t2 VALUES (1, 'S01', 'StudentA'),(2, 'T01', 'TeacherA'),(3, 'T02', 'TeacherB'); 使用WHERE 条件删除: 1 2 DELETE FROM reason_t2 WHERE TABLE_SK = 2; DELETE FROM reason_t2 AS rt2 WHERE rt2.TABLE_SK = 2; 使用IN语法删除: 1 DELETE FROM reason_t2 WHERE TABLE_SK in (1,3);
  • hstore_full_merge(rel_name text) 描述:该函数用于手动对HStore表进行全量清理操作。 返回值类型:int 执行该操作会强制将DELTA表上的所有可见操作Merge到主表,然后建一张新的空Delta表, 期间持有该表的八级锁。 该操作的耗时长度与DELTA表上的数据量有关,务必打开HStore的清理线程,确保HStore表的及时清理。 示例: 1 SELECT hstore_full_merge('reason_select');
  • 注意事项 当单次插入的数据量大于等于表级参数DELTAROW_THRESHOLD时,数据会直接插入主表生成CU(Compress Unit)。 当插入的数据量小于表级参数DELTAROW_THRESHOLD时,会在辅助Delta表上插入一条类型为I的记录,同时将数据序列化存储到这条记录的values字段。 插入到Delta表的数据跟主表使用全局统一分配的cuid。 插入到delta表的数据依赖autovacuum 来merge到主表CU。
  • 示例 创建表reason_t1: 1 2 3 4 5 6 7 -- 创建表reason_t1。 CREATE TABLE reason_t1 ( TABLE_SK INTEGER , TABLE_ID VARCHAR(20) , TABLE_NA VARCHAR(20) )WITH(ORIENTATION=COLUMN, ENABLE_HSTORE=ON); 向表中插入一条记录: 1 INSERT INTO reason_t1(TABLE_SK, TABLE_ID, TABLE_NA) VALUES (1, 'S01', 'StudentA'); 向表中插入多条记录: 1 2 3 4 5 6 7 8 INSERT INTO reason_t1 VALUES (1, 'S01', 'StudentA'),(2, 'T01', 'TeacherA'),(3, 'T02', 'TeacherB'); SELECT * FROM reason_t1 ORDER BY 1; TABLE_SK | TABLE_ID | TABLE_NAME ----------+----------+------------ 1 | S01 | StudentA 2 | T01 | TeacherA 3 | T02 | TeacherB (3 rows)
  • 语法格式 1 2 3 INSERT [/*+ plan_hint */] [ IGNORE | OVERWRITE ] INTO table_name [ AS alias ] [ ( column_name [, ...] ) ] { DEFAULT VALUES | VALUES {( { expression | DEFAULT } [, ...] ) }[, ...] | query }
  • 语法格式 表1 UPSERT语法格式 语法格式 冲突更新 冲突忽略 第一种:不指定索引 INSERT INTO ON DUPLICATE KEY UPDATE INSERT IGNORE INSERT INTO ON CONFLICT DO NOTHING 第二种:从指定列名或者约束上可以推断唯一约束 INSERT INTO ON CONFLICT(...) DO UPDATE SET INSERT INTO ON CONFLICT ON CONSTRAINT con_name DO UPDATE SET INSERT INTO ON CONFLICT(...) DO NOTHING INSERT INTO ON CONFLICT ON CONSTRAINT con_name DO NOTHING
  • 参数说明 第一种不指定索引。会在所有主键或唯一索引上检查冲突,有冲突就会忽略或者更新。 第二种指定索引。会从ON CONFLICT子句中指定列名、包含列名的表达式或者约束名上推断主键或者唯一索引。 唯一索引推断 对于第二种语法形式,通过指定列名或者约束名推断主键或者唯一索引。列名可以是单一列名,或者由多个列名组成的表达式,比如column1,column2,column3。 UPDATE子句 UPDATE子句可以通过VALUES(colname)或者EXCLUDED.colname引用插入的数据。EXCLUDED表示因冲突原本该排除的数据行。 WHERE子句 用于在数据冲突时,判断是否满足指定条件。如果满足,则更新冲突数据。否则忽略。 只有第二种语法形式的冲突更新语法可以指定WHERE子句。即 INSERT INTO ON CONFLICT(...) DO UPDATE SET WHERE
  • 示例 创建表reason_upsert并向表中插入数据: 1 2 3 4 5 6 7 CREATE TABLE reason_upsert ( a int primary key, b int, c int )WITH(ORIENTATION=COLUMN, ENABLE_HSTORE=ON); INSERT INTO reason_upsert VALUES (1, 2, 3); 忽略冲突的数据: 1 INSERT INTO reason_upsert VALUES (1, 4, 5),(2, 6, 7) ON CONFLICT(a) DO NOTHING; 更新冲突的数据: 1 INSERT INTO reason_upsert VALUES (1, 4, 5),(3, 8, 9) ON CONFLICT(a) DO UPDATE SET b = EXCLUDED.b, c = EXCLUDED.c;
  • 步骤一:注册主账号(操作主体:IT负责人) 有独立法人资格的集团公司、子公司(如子公司C、子公司D)、孙公司(如孙公司D1),分别由各自指定的IT负责人在华为云上分别注册自己的主账号,独立制定华为云的预算并充值,并在华为云上建立独立的组织结构(参照步骤二)。不要把子公司的账号关联为集团公司的子账号。 涉及到的操作如下: 注册华为账号 并开通华为云业务:注册华为账号并开通华为云业务后,基本信息、订单信息、费用信息等都和该账号相关联。 开通企业中心功能:开通后该账号即成为企业主账号,可以执行关联子账号等操作。 进入企业中心页面:提供多入口,方便您进入企业中心。 父主题: 云上IT治理最佳实践
  • 步骤七:统一财务管控(操作主体:财务管理组成员) 使用主账号的财务管理组成员登录华为云,进入费用中心,为主账号进行充值、汇款认领、激活代金券、设置余额预警、开票、合同管理。 涉及到的操作如下: 账户充值:当创建新账户或账户余额不足时,主账号可以对现金账户进行充值操作。 汇款认领:主账号线下使用通用充值账号汇款到华为云时,需要进行汇款认领,认领成功后的金额会充值到客户的华为云账户中。 激活代金券:主账号可以使用线下获取的16位激活码,激活生成代金券。 设置余额预警:开通余额预警后,当可用额度、通用代金券和现金券的总金额低于预警阈值时,系统会自动给联系人发送短信和邮件提醒。 开具华为云发票:主账号想要对华为云消费的金额进行报销等操作时,可以申请开具发票。 合同管理:主账号可以根据需求申请线上/纸质合同等。 进入企业中心的“资金拨款与开票”页面,将主账号账户余额、信用额度和代金券划拨给各个子账号。为确保资金安全,需要在企业中心开启资金安全设置,当执行拨款、回收等敏感操作时需要输入验证码。 涉及到的操作如下: 划拨账户余额/信用余额/代金券:企业主账号可以将自己的账户余额/信用额度/代金券划拨给子账号。 回收账户余额/信用余额/代金券:企业主账号可以将自己划拨的账户余额/信用额度/代金券进行回收。 设置资金安全:开启资金安全二次验证功能,可确保资金安全。 主账号财务管理员需要定期审视子账号的资金、信用额度和代金券的使用情况,及时回收各个子账号未使用的资金。也需要定期核算整个企业在华为云的消费情况,进行成本控制,定期(每月、每季、每年)统计华为云消费汇总并计入企业财务报表。 主账号和子账号的财务管理员要协同项目经理,根据资金使用成本和项目需求确定各类云资源的计费模式,是按需计费,还是包月、包季、包年等,以降低云资源租用成本。 各子账号财务管理员需要到费用中心持续监控资源到期情况,及时对快到期的资源进行续费。也需要持续监控子账号的账户余额,如果发现账户余额不足够续费时,及时联系主账号的财务管理员进行资金划拨。为防止项目成员过度订购云服务,建议限定各个企业项目在华为云上订购云服务的资金配额限制和余额预警。 各子账号的财务管理员也要定期到费用中心的费用分析页面,按照企业项目、产品类型、区域、计费模式等维度进行成本统计和分析,结合资源利用率分析结果设计成本优化方案,如按需计费改为包周期、资源整合、订购套餐包等,并制定下一周期的成本预算。 进行成本统计时,可以建立企业项目群将逻辑上相关的几个企业项目放在一起。以集团公司的部门A为例,进入“企业项目群管理”界面,创建两个企业项目群:项目群A1、项目群A2,将三个逻辑相关的企业项目“A1生产”、“A1开发”、“A1测试”放到项目群A1,将另外三个逻辑相关的企业项目“A2生产”、“A2开发”、“A2测试”放到项目群A2,然后就可以按照项目群A1、A2进行成本统计了。 涉及到的操作如下: 创建企业项目群:开通了企业项目的用户可以将其账号下的企业项目进行分类,同一类型的企业项目加入到同一企业项目群中,方便用户按企业项目群对企业项目进行财务管理。 查看企业项目群的消费统计:可查看近12个月的月度消费金额和消费信息等。 父主题: 云上IT治理最佳实践
  • onRemoteMicrophoneStateChanged void onRemoteMicrophoneStateChanged(const char* userId, HRTCRemoteMicState state); 【功能说明】 远端麦克风设备状态变更通知。 【回调参数】 userId:远端用户userId。 state:麦克风设备状态,具体请参见HRTCRemoteMicState。
  • onUserNetworkQualityNotify void onUserNetworkQualityNotify(const char *roomId, const char* userId, HRTCNetworkQualityLevel txQuality, HRTCNetworkQualityLevel rxQuality); 【功能说明】 支持用户上报各自与近端SFU间的上下行网络质量,基于用户级,使本地用户能获取同房间内远端用户与其近端SFU间的网络质量。CMD广播时为房间级,将广播给订阅了此主播流的用户或者此主播被选为TOPN用户且观众订阅了该TOPN用户。 【回调参数】 roomId:用户所在房间号。 userId: 上报的用户id,0为本地,非0为远端。 txQuality:该用户的上行网络质量,具体请参见HRTCNetworkQualityLevel。 rxQuality:该用户的下行网络质量,具体请参见HRTCNetworkQualityLevel。 此接口不支持跨房场景、WebRTC场景。 不支持RTSA。
  • onRenderExternalVideoFrame virtual void onRenderExternalVideoFrame(const char* roomId, HRTCMediaDirection direction, const char* userId, HRTCVideoFrame& videoFrame) 【功能说明】 视频自渲染回调。需要调用setExternalVideoFrameOutput接口开启视频自渲染,从而触发该回调。 【回调参数】 roomId:房间ID。 direction:数据源,本地数据,远端数据,具体请参见HRTCMediaDirection。 userId:视频数据对应的远端用户ID。 videoFrame:视频帧详情,具体请参见HRTCVideoFrame。
  • onStartAllRemoteViewResult virtual void onStartAllRemoteViewResult(int errCode, const char* errMsg, unsigned int counts, const HR TCS etupRemoteViewResult* results) 【功能说明】 批量选看结果回调。 【回调参数】 errCode:错误码。 errMsg:错误信息。 counts:results数组大小。 results:批量选看结果,具体请参见HRT CS etupRemoteViewResult。
  • onMultiRoomMediaRelayStateChanged void onMultiRoomMediaRelayStateChanged(const char *roomId, HRTCMultiRoomMediaRelayState state, HRTCMultiRoomMediaRelayStateCode code); 【功能说明】 跨房状态回调。 【回调参数】 roomId:跨房房间号。 state:状态类型,具体请参见HRTCMultiRoomMediaRelayState。 code:状态的具体原因,具体请参见HRTCMultiRoomMediaRelayStateCode。
  • onPlaybackExternalAudioFrame virtual void onPlaybackExternalAudioFrame(const char* roomId, HRTCMediaDirection direction, HRTCAudioFrame& audioFrame) 【功能说明】 音频自渲染回调。需要调用setExternalAudioFrameOutput接口开启音频自渲染,从而触发该回调。 【回调参数】 roomId:房间ID。 direction:数据源,本地数据,远端数据,具体请参见HRTCMediaDirection。 audioFrame:音频帧详情,具体请参见HRTCAudioFrame。
  • onLocalVideoStateChangedNotify virtual void onLocalVideoStateChangedNotify(HRTCLocalVideoStreamState state, HRTCLocalVideoStreamStateReason reason) 【功能说明】 本地视频状态改变,触发此回调。 【回调参数】 state:本地视频状态,具体请参见HRTCLocalVideoStreamState。 reason:本地视频状态改变原因,具体请参见HRTCLocalVideoStreamStateReason。
  • onNetworkQualityNotify virtual void onNetworkQualityNotify(HRTCQualityInfo* localQuality, unsigned int localQualityCount, HRTCQualityInfo* remoteQuality, unsigned int remoteQualityCount) 【功能说明】 房间内客户端基于流级别的网络质量实时上报,默认开启,每2s上报一次,有数据流时才会回调,音频流、视频流分开回调。 【回调参数】 localQuality:本地上行网络质量,该参数暂时不使用。 localQualityCount:正在上报的网络质量数量,该参数暂时不使用。 remoteQuality:(本地下行)远端各路流的网络质量,具体请参见HRTCQualityInfo。 remoteQualityCount:正在上报的流的数量,集合的大小。
  • onUserVolumeStatsNotify virtual void onUserVolumeStatsNotify(const HRTCVolumeInfo* userVolumes, unsigned int userVolumesCount, unsigned int totalVolume) 【功能说明】 用户音量状态回调。通过enableUserVolumeNotify开启并设置回调周期,定时上报。 【回调参数】 userVolumes:用户信息,具体请参见HRTCVolumeInfo。 userVolumesCount:上报的用户人数,包含本地用户。 totalVolume:总音量。
  • onLocalAudioStateChangedNotify virtual void onLocalAudioStateChangedNotify(HRTCLocalAudioStreamState state, HRTCLocalAudioStreamStateReason reason) 【功能说明】 本地音频状态改变,触发此回调。 【回调参数】 state:本地音频状态,具体请参见HRTCLocalAudioStreamState。 reason:本地音频状态改变的原因,具体请参见HRTCLocalAudioStreamStateReason。
  • onMediaConnectStateChangedNotify virtual void onMediaConnectStateChangedNotify(HRTCMediaConnStateTypes state, HRTCMediaConnChangeReason reason, const char* description) 【功能说明】 媒体服务器连接状态变更通知。 【回调参数】 state:与媒体服务器连接状态,具体请参见HRTCMediaConnStateTypes。 reason:连接状态变化的原因,具体请参见HRTCMediaConnChangeReason。 description:连接状态变化原因描述。 加入房间过后,收到媒体服务的数据包时,返回Connected消息,超过6s没有收到包,则返回Failed消息。
  • onLocalVideoStatsNotify virtual void onLocalVideoStatsNotify(const HRTCLocalVideoStats *localStats, unsigned int localStatsCount) 【功能说明】 本地视频流详情,2s触发一次回调。 【回调参数】 localStats:本地视频收流统计,具体请参见HRTCLocalVideoStats。 localStatsCount:localStats数组长度。
  • onStreamPublishStateChange void onStreamPublishStateChange(int code, const char* taskId, const HRTCUrlStatusList * urlStatu); 【功能说明】 RTMP推流状态回调。 【回调参数】 code:错误码,成功为0,失败请参考错误码HRTCErrorCode。 taskId:任务Id。 urlStatu:推流的url状态,具体请参见HRTCUrlStatusList。
  • onRemoteVideoStatsNotify virtual void onRemoteVideoStatsNotify(const HRTCRemoteVideoStats *remoteStats, unsigned int remoteStatsCount) 【功能说明】 远端视频流详情,2s触发一次回调。 【回调参数】 remoteStats:远端视频收流统计,具体请参见HRTCRemoteVideoStats。 remoteStatsCount:remoteStats数组长度。
共100000条