华为云用户手册

  • DDL 【建议】在GaussDB中,建议DDL(建表、comments等)操作统一执行,在批处理作业中尽量避免DDL操作。避免大量并发事务对性能的影响。 【建议】在非日志表(unlogged table)使用完后,立即执行数据清理(truncate)操作。因为在异常场景下,GaussDB不保证非日志表(unlogged table)数据的安全性。 【建议】临时表和非日志表的存储方式建议和基表相同。当基表为行存(列存)表时,临时表和非日志表也推荐创建为行存(列存)表,可以避免行列混合关联带来的高计算代价。 【建议】索引字段的总长度不超过50字节。否则,索引大小会膨胀比较严重,带来较大的存储开销,同时索引性能也会下降。 【建议】不要使用DROP…CASCADE方式删除对象,除非已经明确对象间的依赖关系,以免误删。
  • 数据加载和卸载 【建议】在insert语句中显式给出插入的字段列表。例如: 1 INSERT INTO task(name,id,comment) VALUES ('task1','100','第100个任务'); 【建议】在批量数据入库之后,或者数据增量达到一定阈值后,建议对表进行analyze操作,防止统计信息不准确而导致的执行计划劣化。 【建议】如果要清理表中的所有数据,建议使用truncate table方式,不要使用delete table方式。delete table方式删除性能差,且不会释放那些已经删除了的数据占用的磁盘空间。
  • 参数说明 server_name server的名称。 取值范围:长度必须小于等于63。 fdw_name 指定外部数据封装器的名称。 取值范围:dist_fdw,log_fdw,file_fdw。 OPTIONS ( { option_name ' value ' } [, ...] ) 这个子句为服务器指定选项。这些选项通常定义该服务器的连接细节,但是实际的名称和值取决于该服务器的外部数据包装器。 用于指定外部服务器的各类参数,详细的参数说明如下所示。 encrypt 是否对数据进行加密,该参数仅支持type为OBS时设置。默认值为on。 取值范围: on表示对数据进行加密,使用HTTPS协议通信。 off表示不对数据进行加密,使用HTTP协议通信。 access_key OBS访问协议对应的AK值(OBS云服务界面由用户获取),创建外表时AK值会加密保存到数据库的元数据表中。该参数仅支持type为OBS时设置。 secret_access_key OBS访问协议对应的SK值(OBS云服务界面由用户获取),创建外表时SK值会加密保存到数据库的元数据表中。该参数仅支持type为OBS时设置。 除了libpq支持的连接参数外,还额外提供以下参数: fdw_startup_cost 执行一个外表扫描时的启动耗时估算。这个值通常包含建立连接、远端对请求的分析和生成计划的耗时。默认值为100。 fdw_typle_cost 在远端服务器上对每一个元组进行扫描时的额外消耗。这个值通常表示数据在server间传输的额外消耗。默认值为0.01。
  • 修订记录 发布日期 修订记录 2024-05-20 第八次正式发布。 新增如下内容: 添加AD认证源 2024-03-29 第七次正式发布。 新增如下内容: 申请组织成员配额 移交组织 域名管理 2023-10-25 第六次正式发布。 优化如下内容: 使用前必读 开通OrgID 2023-09-08 第五次正式发布。 新增如下章节: 数据报表 优化如下章节: 使用前必读 登录场景介绍 2023-07-14 第四次正式发布。 新增如下章节: 开通联邦认证 用户组管理 查看三方认证用户 优化如下章节: 成员管理 授权管理配置 2023-06-09 第三次正式发布。 优化如下章节: 配置组织社交认证源 添加组织认证源 我的审批 2023-05-27 第二次正式发布。 新增如下章节: 我的审批 用户属性配置 优化如下章节: 使用前必读 开通OrgID 成员管理 添加组织认证源 2023-05-04 第一次正式发布。
  • 操作步骤 登录管理中心。 选择左侧导航栏的“应用管理”。 在“全部应用”页签,单击待修改的应用操作列的“配置”。 单击“授权管理”,进入“授权管理”页签。 单击“授权设置”,在“授权设置”界面中选择被授权成员信息,单击“下一步”。 选择可用成员范围,可勾选“全员可用”或“自定义人员范围”,勾选“自定义人员范围”后还需要选择指定的部门与人员或者用户组。单击“确认”。 设置后,应用授权范围中会显示授权部门、授权人员或授权用户组信息。同时,授权用户列表中也会展示授权帐号的详细情况(包括姓名、帐号名、应用侧角色、来源、更新时间和同步状态),支持按照帐号名进行过滤查询。
  • (可选)同步集成配置 当需要同步应用的数据给第三方系统时,可开启同步集成开关,详细的同步数据请参见联营Kit接口描述。 配置相关参数,参数说明如表2所示。 表2 同步集成配置参数说明 参数名称 参数说明 回调URL 用于同步该应用的数据给其他第三方系统的URL。 签名密钥 用于对回调消息体内容签名。 加密密钥 用于传输ClientSecret的加密公钥。 摘要算法 选择加密算法,如:SHA256或SHA1。 注意: SHA1安全强度不高,不建议使用。
  • 授权管理配置 单击“授权设置”,在“授权设置”界面中选择被授权成员信息,单击“下一步”。 选择可用成员范围,可勾选“全员可用”或“自定义人员范围”,勾选“自定义人员范围”后还需要选择指定的部门与人员或者用户组。单击“确认”。 设置后,应用授权范围中会显示授权部门、授权人员或授权用户组信息。同时,授权用户列表中也会展示授权帐号的详细情况(包括姓名、帐号名、应用侧角色、来源、更新时间和同步状态),支持按照时间或帐号名进行过滤查询。
  • (可选)访问控制策略配置 当需要控制用户在指定的时间或区域范围内访问应用时,可开启访问控制开关。 配置默认策略。默认策略可选择“允许所有用户访问”或“拒绝所有用户访问”。 默认策略用于访问该应用时无法匹配到应用访问策略的用户。 单击“添加策略”,配置策略参数,参数说明如表3所示。 表3 添加策略参数说明 参数名称 参数说明 策略名称 应用访问策略的名称。 描述 可选项,应用访问策略的描述信息。 访问时间 可选择任意时间、指定星期范围内或指定日期范围内。 区域范围 可选择不限定或指定ip段。 选择指定ip段后,需先添加区域范围,包括设置区域名称、区域网段和描述信息。然后选择已添加的区域范围即可。 访问策略 勾选访问策略。 允许访问:符合设置的访问时间或区域范围的用户允许访问该应用。 拒绝:符合设置的访问时间或区域范围的用户无法访问该应用。 二次验证:符合设置的访问时间或区域范围的用户可以使用手机验证码进行验证,验证通过后即可访问该应用。 策略添加完成后,可单击“是否生效”列的开启策略。开启后可单击“是否生效”列的关闭策略。
  • (可选)登录配置 (可选)如果需要获取首页URL或管理员登录地址供其他用户使用,可单击获取。 管理员登录地址为空即表示在5中未配置管理员登录地址。 (可选)如果已进行认证源管理,可选择开启认证源。根据开启的认证源类型不同,界面操作不同,具体如下。 开启组织社交认证源(钉钉、企业微信或Welink):开启后,界面提示“保存成功”即成功开启。 开启组织认证源(OAuth、CAS、SAML、OIDC或AD):开启后,需要选择关联的认证源,单击“保存”,界面提示“保存成功”即成功开启。 开启后,登录页会新增“其他方式登录”选项,可选择使用该认证源登录应用,支持开启多个。
  • 应用基本信息配置 登录管理中心。 选择左侧导航栏的“应用管理”。 单击“添加自建应用”。 输入应用名称,如“自建App”。 上传应用图标,图标要求必须为JPG或PNG格式,大小不超过20KB,尺寸240*240px。 选择应用类型,当前仅支持选择“Web”。 设置应用负责人,输入并选择成员姓名,将成员设置为应用负责人。 应用负责人即该应用的应用管理员,只有应用管理员才能更新该应用配置,其他管理员没有操作该应用的权限。 普通成员不能成为应用负责人,需先成为组织管理员、部门管理员才能被设置为应用负责人。 单击“确定”,进入认证集成页面。
  • 认证集成配置 选择认证集成方式:OAuth2、OIDC、SAML、CAS3,选择后不支持修改。 根据选择的认证集成方式不同,需要配置不同的参数,参数说明如表1所示。配置完成后,单击“保存”。 表1 认证集成配置参数说明 认证集成方式 参数名称 参数说明 OAuth2 首页URL 应用首页的URL地址,例:https://xx.xx。 支持设置多个首页的URL地址,可单击“新建URL”,添加新的URL地址。 管理员登录URL 可选项,管理员登录应用的URL地址。 退出地址 可选项,应用的退出地址,请以http或https开头,例:https://xxx.xxx.xxx/logout。 Refresh Token有效期(秒) 允许用户在多久时间内不用重新登录应用的时间。 Access Token有效期(秒) 允许用户在多久时间内保持登录应用的时间。 OIDC 首页URL 应用首页的URL地址,例:https://xx.xx。 管理员登录URL 可选项,管理员登录应用的URL地址。 退出地址 可选项,应用的退出地址,请以http或https开头,例:https://xxx.xxx.xxx/logout。 授权码模式 可选项,是否开启授权码模式,默认开启。 TOKEN签名算法 支持选择:RS256、RS384、RS512。 Access Token有效期(秒) 允许用户在多久时间内保持登录应用的时间。 Refresh Token有效期(秒) 允许用户在多久时间内不用重新登录应用的时间。 SAML SP Entity ID SP唯一标识,对应SP元数据文件中的“Entity ID”的值。 断言消费地址(ACS URL) SP回调地址(断言消费服务地址),对应SP元数据文件中“AssertionConsumerService”的值,即当认证成功后响应返回的值。 Name ID 用户在应用系统中的帐号名对应字段,支持选择:邮箱、手机号、用户名、用户ID、帐号名。 NameID Format 可选项,SP支持的用户名称标识格式。对应SP元数据文件中“NameIDFormat”的值。支持选择: urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress urn:oasis:names:tc:SAML:2.0:nameid-format:transient urn:oasis:names:tc:SAML:2.0:nameid-format:persistent Audience URI 可选项,允许使用SAML断言的资源,默认和SP Entity ID相同。 Single Logout URL 可选项,服务提供商提供会话注销功能,用户在OrgID注销会话后返回绑定的地址。对应SP元数据文件中“SingleLogoutService” 的值。“SingleLogoutService” 需要支持HTTP Redirect或HTTP POST方式。 默认Relay State 可选项,使用在IdP发起的认证中,作为默认的一个值。 支持ForceAuth 可选项,如果SP要求重新认证,则强制用户再次认证。 Response签名 可选项,是否对SAML Response使用IdP的证书签名。 断言签名 可选项,断言需使用IdP的证书签名,对应SP元数据文件中“WantAssertionsSigned”值。 数字签名算法 可选项,SAML Response或者断言签名的算法。支持RSA_SHA256、RSA_SHA512、RSA_RIPEMD160,可在下拉框选择。 数字摘要算法 可选项,SAML Response或者断言的数字摘要算法。支持SHA256、SHA512、RIPEMD160,可在下拉框选择。 断言加密 可选项,是否对断言进行加密。 验证请求签名 可选项,是否对SAML Request签名进行验证,对应SP元数据文件中“AuthnRequestsSigned”值。 CAS3 首页URL 应用首页的URL地址,例:https://xx.xx。 管理员登录URL 可选项,管理员登录应用的URL地址。 退出地址 可选项,应用的退出地址,请以http或https开头,例:https://xxx.xxx.xxx/logout。 (可选)如果需要关联OrgID和自建应用的用户属性,可选择“映射配置”页签,单击“添加映射”,选择关联属性和映射属性,单击“确定”保存映射,单击“测试”,测试映射关系是否成立。 需要修改映射时,可单击操作列的“编辑”进行修改。
  • 开启/关闭认证源 登录管理中心。 选择左侧导航栏的“应用管理”。 在“全部应用”页签,单击待修改的应用操作列的“配置”。 单击“登录配置”,进入“登录配置”页签。 在“认证方式”模块,开启/关闭指定认证源操作列的开关即可。 开启后,登录页会新增“其他方式登录”选项,可选择使用该认证源登录应用,支持开启多个。根据开启的认证源类型不同,界面操作不同,具体如下: 开启组织社交认证源(钉钉、企业微信或Welink):开启后,界面提示“保存成功”即成功开启。 开启组织认证源(OAuth、CAS、SAML、OIDC或AD):开启后,需要选择关联的认证源,单击“保存”,界面提示“保存成功”即成功开启。
  • 管理中心首页功能介绍 管理中心首页不仅提供了完善组织架构、配置组织应用和探索更多操作的常用功能入口,还展示了组织的统计数据和应用管理的快捷入口,如图1所示。组织创建者或组织管理员可以通过管理中心快速访问所需功能,并了解组织的整体信息。 图1 管理中心首页 具体快捷功能如下: 完善组织架构:可快速访问成员管理页面。 配置组织应用:可快速访问应用管理页面。 查看组织信息:可快速访问组织信息界面。 配置:可快速访问对应应用的配置页面。
  • 用户中心首页介绍 在用户中心首页,您可以查看组织的全部应用及最近使用应用、查看登录登出日志或退出登录等操作。 图1 用户中心首页 用户中心首页主要包含以下部分: 最近使用:展示您近期使用的应用,可单击应用直接免登录访问应用。 全部应用:展示组织的所有应用,可单击应用直接免登录访问应用。 登录登出日志:展示您的登录登出日志详情,包括时间、操作者、操作类型和IP地址。 帐号的下拉菜单:支持退出登录。 父主题: 普通用户指南
  • 操作步骤 登录管理中心。 选择左侧导航栏的“应用管理”。 在“全部应用”页签,单击待修改的应用操作列的“配置”。 单击“认证集成”,进入“认证集成”页签。 根据选择的认证集成方式不同,需要配置不同的参数,参数说明如表1所示。配置完成后,单击“保存”。 表1 认证集成配置参数说明 认证集成方式 参数名称 参数说明 OAuth2 首页URL 应用首页的URL地址,例:https://xx.xx。 支持设置多个首页的URL地址,可单击“新建URL”,添加新的URL地址。 管理员登录URL 可选项,管理员登录应用的URL地址。 退出地址 可选项,应用的退出地址,请以http或https开头,例:https://xxx.xxx.xxx/logout。 Refresh Token有效期(秒) 允许用户在多久时间内不用重新登录应用的时间。 Access Token有效期(秒) 允许用户在多久时间内保持登录应用的时间。 OIDC 首页URL 应用首页的URL地址,例:https://xx.xx。 管理员登录URL 可选项,管理员登录应用的URL地址。 退出地址 可选项,应用的退出地址,请以http或https开头,例:https://xxx.xxx.xxx/logout。 授权码模式 可选项,是否开启授权码模式,默认开启。 TOKEN签名算法 支持选择:RS256、RS384、RS512。 Access Token有效期(秒) 允许用户在多久时间内保持登录应用的时间。 Refresh Token有效期(秒) 允许用户在多久时间内不用重新登录应用的时间。 SAML SP Entity ID SP唯一标识,对应SP元数据文件中的“Entity ID”的值。 断言消费地址(ACS URL) SP回调地址(断言消费服务地址),对应SP元数据文件中“AssertionConsumerService”的值,即当认证成功后响应返回的值。 Name ID 用户在应用系统中的帐号名对应字段,支持选择:邮箱、手机号、用户名、用户ID、帐号名。 NameID Format 可选项,SP支持的用户名称标识格式。对应SP元数据文件中“NameIDFormat”的值。支持选择: urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress urn:oasis:names:tc:SAML:2.0:nameid-format:transient urn:oasis:names:tc:SAML:2.0:nameid-format:persistent Audience URI 可选项,允许使用SAML断言的资源,默认和SP Entity ID相同。 Single Logout URL 可选项,服务提供商提供会话注销功能,用户在OrgID注销会话后返回绑定的地址。对应SP元数据文件中“SingleLogoutService” 的值。“SingleLogoutService” 需要支持HTTP Redirect或HTTP POST方式。 默认Relay State 可选项,使用在IdP发起的认证中,作为默认的一个值。 支持ForceAuth 可选项,如果SP要求重新认证,则强制用户再次认证。 Response签名 可选项,是否对SAML Response使用IdP的证书签名。 断言签名 可选项,断言需使用IdP的证书签名,对应SP元数据文件中“WantAssertionsSigned”值。 数字签名算法 可选项,SAML Response或者断言签名的算法。支持RSA_SHA256、RSA_SHA512、RSA_RIPEMD160,可在下拉框选择。 数字摘要算法 可选项,SAML Response或者断言的数字摘要算法。支持SHA256、SHA512、RIPEMD160,可在下拉框选择。 断言加密 可选项,是否对断言进行加密。 验证请求签名 可选项,是否对SAML Request签名进行验证,对应SP元数据文件中“AuthnRequestsSigned”值。 CAS3 首页URL 应用首页的URL地址,例:https://xx.xx。 管理员登录URL 可选项,管理员登录应用的URL地址。 退出地址 可选项,应用的退出地址,请以http或https开头,例:https://xxx.xxx.xxx/logout。 (可选)如果需要关联OrgID和自建应用的用户属性,可选择“映射配置”页签,单击“添加映射”,选择关联属性和映射属性,单击“确定”保存映射,单击“测试”,测试映射关系是否成立。 需要修改映射时,可单击操作列的“编辑”进行修改。
  • 操作步骤 登录管理中心。 选择左侧导航栏的“应用管理”。 在“全部应用”页签,单击待修改的应用操作列的“配置”。 单击“访问控制”,进入“访问控制”页签。 开启/关闭访问控制开关:在“基础设置”中开启/关闭访问控制开关即可。 开启后需配置默认策略,请参见步骤6。 配置默认策略。默认策略可选择“允许所有用户访问”或“拒绝所有用户访问”。 默认策略用于访问该应用时无法匹配到应用访问策略的用户。 根据所需,修改、新增或删除策略。 修改策略:单击指定策略操作列的“编辑”,修改策略参数,参数说明如表1所示。 新增策略: 单击“添加策略”,配置策略参数,参数说明如表1所示。 表1 添加策略参数说明 参数名称 参数说明 策略名称 应用访问策略的名称。 描述 可选项,应用访问策略的描述信息。 访问时间 可选择任意时间、指定星期范围内或指定日期范围内。 区域范围 可选择不限定或指定ip段。 选择指定ip段后,需先添加区域范围,包括设置区域名称、区域网段和描述信息。然后选择已添加的区域范围即可。 访问策略 勾选访问策略。 允许访问:符合设置的访问时间或区域范围的用户允许访问该应用。 拒绝:符合设置的访问时间或区域范围的用户无法访问该应用。 二次验证:符合设置的访问时间或区域范围的用户可以使用手机验证码进行验证,验证通过后即可访问该应用。 删除策略:单击指定策略操作列的“删除”,单击“确认”。 删除后,该策略的数据将被删除且不可恢复,请谨慎操作。
  • 操作步骤 登录管理中心。 选择左侧导航栏的“应用管理”。 在“全部应用”页签,单击待修改的应用操作列的“配置”。 单击“同步集成”,进入“同步集成”页签。 配置相关参数,参数说明如表1所示。 表1 同步集成配置参数说明 参数名称 参数说明 回调URL 用于同步该应用的数据给其他第三方系统的URL。 签名密钥 用于对回调消息体内容签名。 加密密钥 用于传输ClientSecret的加密公钥。 摘要算法 选择加密算法,如:SHA256或SHA1。 注意: SHA1安全强度不高,不建议使用。
  • 步骤3:创建DWS数据库和表 参考使用gsql命令行客户端连接DWS集群连接已创建的DWS集群。 执行以下命令连接DWS集群的默认数据库“gaussdb”: gsql -d gaussdb -h DWS集群连接地址 -U dbadmin -p 8000 -W password -r gaussdb:DWS集群默认数据库。 DWS集群连接地址:请参见获取集群连接地址进行获取。如果通过公网地址连接,请指定为集群“公网访问地址”或“公网访问域名”,如果通过内网地址连接,请指定为集群“内网访问地址”或“内网访问域名”。如果通过弹性负载均衡连接,请指定为“弹性负载均衡地址”。 dbadmin:创建集群时设置的默认管理员用户名。 password :默认管理员用户的密码。 在命令行窗口输入以下命令创建数据库“testdwsdb”。 CREATE DATABASE testdwsdb; 执行以下命令,退出gaussdb数据库,连接新创建的数据库“testdwsdb”。 \q gsql -d testdwsdb -h DWS集群连接地址 -U dbadmin -p 8000 -W password -r 执行以下命令创建表。 create schema test; set current_schema= test; drop table if exists qualified_cars; CREATE TABLE qualified_cars ( car_id VARCHAR, car_owner VARCHAR, car_age INTEGER , average_speed FLOAT8, total_miles FLOAT8 );
  • 整体作业开发流程 整体作业开发流程参考图1。 图1 作业开发流程 步骤1:创建队列:创建DLI作业运行的队列。 步骤2:创建Kafka的Topic:创建Kafka生产消费数据的Topic。 步骤3:创建DWS数据库和表:创建DWS数据库和表信息。 步骤4:创建增强型跨源连接:DLI上创建连接Kafka和DWS的跨源连接,打通网络。 步骤5:运行作业:DLI上创建和运行Flink OpenSource作业。 步骤6:发送数据和查询结果:Kafka上发送流数据,在RDS上查看运行结果。
  • 步骤6:发送数据和查询结果 使用Kafka客户端向步骤2:创建Kafka的Topic中的Topic发送数据,模拟实时数据流。 Kafka生产和发送数据的方法请参考DMS - 连接实例生产消费信息。 发送样例数据如下: {"car_id":"3027", "car_owner":"lilei", "car_age":"7", "average_speed":"76", "total_miles":"15000"} {"car_id":"3028", "car_owner":"hanmeimei", "car_age":"6", "average_speed":"92", "total_miles":"17000"} {"car_id":"3029", "car_owner":"Ann", "car_age":"10", "average_speed":"81", "total_miles":"230000"} 连接已创建的DWS集群。 具体操作请参考使用gsql命令行客户端连接DWS集群。 执行以下命令连接DWS集群的默认数据库“testdwsdb”: gsql -d testdwsdb -h DWS集群连接地址 -U dbadmin -p 8000 -W password -r 查询DWS的表数据。 select * from test.qualified_cars; 查询结果参考如下: car_id car_owner car_age average_speed total_miles 3027 lilei 7 76.0 15000.0
  • 开发流程 DLI下UDF函数开发流程参考如下: 图1 开发流程 表2 开发流程说明 序号 阶段 操作界面 说明 1 新建Maven工程,配置pom文件 IntelliJ IDEA 参考操作步骤说明,编写UDF函数代码。 2 编写UDF函数代码 3 调试,编译代码并导出Jar包 4 上传Jar包到OBS OBS控制台 将生成的UDF函数Jar包文件上传到OBS目录下。 5 创建DLI的UDF函数 DLI控制台 在DLI控制台的SQL作业管理界面创建使用的UDF函数。 6 验证和使用DLI的UDF函数 DLI控制台 在DLI作业中使用创建的UDF函数。
  • 开发流程 DLI下UDAF函数开发流程参考如下: 图1 UDAF开发流程 表2 开发流程说明 序号 阶段 操作界面 说明 1 新建Maven工程,配置pom文件 IntelliJ IDEA 参考操作步骤说明,编写UDAF函数代码。 2 编写UDAF函数代码 3 调试,编译代码并导出Jar包 4 上传Jar包到OBS OBS控制台 将生成的UDAF函数Jar包文件上传到OBS目录下。 5 创建DLI程序包 DLI控制台 选择刚上传到OBS的UDAF函数的Jar文件,由DLI进行纳管。 6 创建DLI的UDAF函数 DLI控制台 在DLI控制台的SQL作业管理界面创建使用的UDAF函数。 7 验证和使用DLI的UDAF函数 DLI控制台 在DLI作业中使用创建的UDAF函数。
  • 环境准备 在进行UDAF开发前,请准备以下开发环境。 表1 UDAF开发环境 准备项 说明 操作系统 Windows系统,支持Windows7以上版本。 安装JDK JDK使用1.8版本(访问Java官网)。 安装和配置IntelliJ IDEA IntelliJ IDEA为进行应用开发的工具,版本要求使用2019.1或其2019.1往后的版本。 安装Maven 开发环境的基本配置(下载并安装 Maven)。用于项目管理,贯穿软件开发生命周期。
  • 开发流程 DLI下UDTF函数开发流程参考如下: 图1 UDTF开发流程 表2 开发流程说明 序号 阶段 操作界面 说明 1 新建Maven工程,配置pom文件 IntelliJ IDEA 参考操作步骤说明,编写UDTF函数代码。 2 编写UDTF函数代码 3 调试,编译代码并导出Jar包 4 上传Jar包到OBS OBS控制台 将生成的UDTF函数Jar包文件上传到OBS目录下。 5 创建DLI的UDTF函数 DLI控制台 在DLI控制台的SQL作业管理界面创建使用的UDTF函数。 6 验证和使用DLI的UDTF函数 DLI控制台 在DLI作业中使用创建的UDTF函数。
  • 场景描述 本示例场景对用户购买商品的数据信息进行分析,将满足特定条件的数据结果进行汇总输出。购买商品数据信息为数据源发送到Kafka中,再将Kafka数据的分析结果输出到Elasticsearch中。 例如,输入如下样例数据: {"order_id":"202103241000000001", "order_channel":"webShop", "order_time":"2021-03-24 10:00:00", "pay_amount":"100.00", "real_pay":"100.00", "pay_time":"2021-03-24 10:02:03", "user_id":"0001", "user_name":"Alice", "area_id":"330106"} {"order_id":"202103241606060001", "order_channel":"appShop", "order_time":"2021-03-24 16:06:06", "pay_amount":"200.00", "real_pay":"180.00", "pay_time":"2021-03-24 16:10:06", "user_id":"0002", "user_name":"Jason", "area_id":"330106"} DLI从Kafka读取数据写入Elasticsearch,在Elasticsearch集群的Kibana中查看相应结果。
  • 整体作业开发流程 整体作业开发流程参考图1。 图1 作业开发流程 步骤1:创建队列:创建DLI作业运行的队列。 步骤2:创建Kafka的Topic:创建Kafka生产消费数据的Topic。 步骤3:创建Elasticsearch搜索索引:创建Elasticsearch搜索索引用于接收结果数据。 步骤4:创建增强型跨源连接:DLI上创建连接Kafka和CSS的跨源连接,打通网络。 步骤5:运行作业:DLI上创建和运行Flink OpenSource作业。 步骤6:发送数据和查询结果:Kafka上发送流数据,在CSS上查看运行结果。
  • 步骤6:发送数据和查询结果 Kafaka端发送数据。 使用Kafka客户端向步骤2:创建Kafka的Topic中的Topic发送数据,模拟实时数据流。 Kafka生产和发送数据的方法请参考:DMS - 连接实例生产消费信息。 发送样例数据如下: {"order_id":"202103241000000001", "order_channel":"webShop", "order_time":"2021-03-24 10:00:00", "pay_amount":"100.00", "real_pay":"100.00", "pay_time":"2021-03-24 10:02:03", "user_id":"0001", "user_name":"Alice", "area_id":"330106"} {"order_id":"202103241606060001", "order_channel":"appShop", "order_time":"2021-03-24 16:06:06", "pay_amount":"200.00", "real_pay":"180.00", "pay_time":"2021-03-24 16:10:06", "user_id":"0002", "user_name":"Jason", "area_id":"330106"} 查看Elasticsearch端数据处理后的相应结果。 发送成功后,在CSS集群的Kibana中执行下述语句并查看相应结果: GET shoporders/_search 查询结果返回如下: { "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "shoporders", "_type" : "_doc", "_id" : "6fswzIAByVjqg3_qAyM1", "_score" : 1.0, "_source" : { "order_id" : "202103241000000001", "order_channel" : "webShop", "order_time" : "2021-03-24 10:00:00", "pay_amount" : 100.0, "real_pay" : 100.0, "pay_time" : "2021-03-24 10:02:03", "user_id" : "0001", "user_name" : "Alice", "area_id" : "330106" } }, { "_index" : "shoporders", "_type" : "_doc", "_id" : "6vs1zIAByVjqg3_qyyPp", "_score" : 1.0, "_source" : { "order_id" : "202103241606060001", "order_channel" : "appShop", "order_time" : "2021-03-24 16:06:06", "pay_amount" : 200.0, "real_pay" : 180.0, "pay_time" : "2021-03-24 16:10:06", "user_id" : "0002", "user_name" : "Jason", "area_id" : "330106" } } ] } }
  • 常见问题 问题一:查询OBS分区表报错,报错信息如下: DLI.0005: There should be at least one partition pruning predicate on partitioned table `xxxx`.`xxxx`.; 问题根因:查询OBS分区表时没有携带分区字段。 解决方案:查询OBS分区表时,where条件中至少包含一个分区字段。 问题二:使用DataSource语法指定OBS文件路径创建OBS表,insert数据到OBS表,显示作业运行失败,报:“DLI.0007: The output path is a file, don't support INSERT...SELECT” 错误。 问题示例语句参考如下: CREATE TABLE testcsvdatasource (name string, id int) USING csv OPTIONS (path "obs://dli-test-021/data/test.csv"); 问题根因:创建OBS表指定的OBS路径为具体文件,导致不能插入数据。例如上述示例中的OBS路径为:"obs://dli-test-021/data/test.csv"。 解决方案:使用DataSource语法创建OBS表指定的OBS文件路径改为文件目录即可,后续即可通过insert插入数据。上述示例,建表语句可以修改为: CREATE TABLE testcsvdatasource (name string, id int) USING csv OPTIONS (path "obs://dli-test-021/data"); 问题三:使用Hive语法创建OBS分区表时,提示语法格式不对。例如,如下使用Hive语法创建以classNo为分区的OBS表: CREATE TABLE IF NOT EXISTS testtable(name STRING, score DOUBLE, classNo INT) PARTITIONED BY (classNo) STORED AS TEXTFILE LOCATION 'obs://dli-test-021/data7'; 问题根因:使用Hive语法创建OBS分区表时,分区字段不能出现在表名后的字段列表中,只能定义在PARTITIONED BY后。 解决方案:使用Hive语法创建OBS分区表时,分区字段指定在PARTITIONED BY后。例如: CREATE TABLE IF NOT EXISTS testtable(name STRING, score DOUBLE) PARTITIONED BY (classNo INT) STORED AS TEXTFILE LOCATION 'obs://dli-test-021/data7';
  • 使用DataSource语法创建OBS表 以下通过创建CSV格式的OBS表举例,创建其他数据格式的OBS表方法类似,此处不一一列举。 创建OBS非分区表 指定OBS数据文件,创建csv格式的OBS表。 按照以下文件内容创建“test.csv”文件,并将“test.csv”文件上传到OBS桶“dli-test-021”的根目录下。 Jordon,88,23 Kim,87,25 Henry,76,26 登录DLI管理控制台,选择“SQL编辑器”,在SQL编辑器中“执行引擎”选择“spark”,“队列”选择已创建的SQL队列,数据库选择“testdb”,执行以下命令创建OBS表。 CREATE TABLE testcsvdatasource (name STRING, score DOUBLE, classNo INT ) USING csv OPTIONS (path "obs://dli-test-021/test.csv"); 如果是通过指定的数据文件创建的OBS表,后续不支持在DLI通过insert表操作插入数据。OBS文件内容和表数据保持同步。 查询已创建的“testcsvdatasource”表数据。 select * from testcsvdatasource; 图1 查询结果 本地修改原始的OBS表文件“test.csv”,增加一行“Aarn,98,20”数据,重新替换OBS桶目录下的“test.csv”文件。 Jordon,88,23 Kim,87,25 Henry,76,26 Aarn,98,20 在DLI的SQL编辑器中再次查询“testcsvdatasource”表数据,DLI上可以查询到新增的“Aarn,98,20”数据。 select * from testcsvdatasource; 图2 查询结果 指定OBS数据文件目录,创建csv格式的OBS表。 指定的OBS数据目录不包含数据文件。 在OBS桶“dli-test-021”根目录下创建数据文件目录“data”。 登录DLI管理控制台,选择“SQL编辑器”,在SQL编辑器中“执行引擎”选择“spark”,“队列”选择已创建的SQL队列,数据库选择“testdb”。在DLI的“testdb”数据库下创建OBS表“testcsvdata2source”。 CREATE TABLE testcsvdata2source (name STRING, score DOUBLE, classNo INT) USING csv OPTIONS (path "obs://dli-test-021/data"); 通过insert语句插入表数据。 insert into testcsvdata2source VALUES('Aarn','98','20'); insert作业运行成功后,查询OBS表“testcsvdata2source”数据。 select * from testcsvdata2source; 图3 查询结果 在OBS桶的“obs://dli-test-021/data”目录下刷新后查询,生成了csv数据文件,文件内容为insert插入的数据内容。 图4 查询结果 指定的OBS数据目录包含数据文件。 在OBS桶“dli-test-021”根目录下创建数据文件目录“data2”。创建如下内容的测试数据文件“test.csv”,并上传文件到“obs://dli-test-021/data2”目录下。 Jordon,88,23 Kim,87,25 Henry,76,26 登录DLI管理控制台,选择“SQL编辑器”,在SQL编辑器中“执行引擎”选择“spark”,“队列”选择已创建的SQL队列,数据库选择“testdb”。在DLI的“testdb”数据库下创建OBS表“testcsvdata3source”。 CREATE TABLE testcsvdata3source (name STRING, score DOUBLE, classNo INT) USING csv OPTIONS (path "obs://dli-test-021/data2"); 通过insert语句插入表数据。 insert into testcsvdata3source VALUES('Aarn','98','20'); insert作业运行成功后,查询OBS表“testcsvdata3source”数据。 select * from testcsvdata3source; 图5 查询结果 在OBS桶的“obs://dli-test-021/data2”目录下刷新后查询,生成了一个csv数据文件,内容为insert插入的表数据内容。 图6 查询结果 创建OBS分区表 创建单分区OBS表 在OBS桶“dli-test-021”根目录下创建数据文件目录“data3”。 登录DLI管理控制台,选择“SQL编辑器”,在SQL编辑器中“执行引擎”选择“spark”,“队列”选择已创建的SQL队列,数据库选择“testdb”。在DLI的“testdb”数据库下创建以“classNo”列为分区的OBS分区表“testcsvdata4source”,指定OBS目录“obs://dli-test-021/data3”。 CREATE TABLE testcsvdata4source (name STRING, score DOUBLE, classNo INT) USING csv OPTIONS (path "obs://dli-test-021/data3") PARTITIONED BY (classNo); 在OBS桶的“obs://dli-test-021/data3”目录下创建“classNo=25”的分区目录。根据以下文件内容创建数据文件“test.csv”,并上传到OBS的“obs://dli-test-021/data3/classNo=25”目录下。 Jordon,88,25 Kim,87,25 Henry,76,25 在SQL编辑器中执行以下命令,导入分区数据到OBS表“testcsvdata4source ”。 ALTER TABLE testcsvdata4source ADD PARTITION (classNo = 25) LOCATION 'obs://dli-test-021/data3/classNo=25'; 查询OBS表“testcsvdata4source ”classNo分区为“25”的数据: select * from testcsvdata4source where classNo = 25; 图7 查询结果 插入如下数据到OBS表“testcsvdata4source ”: insert into testcsvdata4source VALUES('Aarn','98','25'); insert into testcsvdata4source VALUES('Adam','68','24'); 查询OBS表“testcsvdata4source ”classNo分区为“25”和“24”的数据。 分区表在进行查询时where条件中必须携带分区字段,否则会查询失败,报:DLI.0005: There should be at least one partition pruning predicate on partitioned table。 select * from testcsvdata4source where classNo = 25; 图8 查询结果 select * from testcsvdata4source where classNo = 24; 图9 查询结果 在OBS桶的“obs://dli-test-021/data3”目录下点击刷新,该目录下生成了对应的分区文件,分别存放新插入的表数据。 图10 OBS上classNo分区为“25”文件数据 图11 OBS上classNo分区为“24”文件数据 创建多分区OBS表 在OBS桶“dli-test-021”根目录下创建数据文件目录“data4”。 登录DLI管理控制台,选择“SQL编辑器”,在SQL编辑器中“执行引擎”选择“spark”,“队列”选择已创建的SQL队列,数据库选择“testdb”。在“testdb”数据库下创建以“classNo”和“dt”列为分区的OBS分区表“testcsvdata5source”,指定OBS目录“obs://dli-test-021/data4”。 CREATE TABLE testcsvdata5source (name STRING, score DOUBLE, classNo INT, dt varchar(16)) USING csv OPTIONS (path "obs://dli-test-021/data4") PARTITIONED BY (classNo,dt); 给 testcsvdata5source表插入如下测试数据: insert into testcsvdata5source VALUES('Aarn','98','25','2021-07-27'); insert into testcsvdata5source VALUES('Adam','68','25','2021-07-28'); 根据classNo分区列查询testcsvdata5source数据。 select * from testcsvdata5source where classNo = 25; 图12 查询结果 根据dt分区列查询testcsvdata5source数据。 select * from testcsvdata5source where dt like '2021-07%'; 图13 查询结果 在OBS桶“obs://dli-test-021/data4”目录下刷新后查询,会生成如下数据文件: 文件目录1:obs://dli-test-021/data4/xxxxxx/classNo=25/dt=2021-07-27 图14 查询结果 文件目录2:obs://dli-test-021/data4/xxxxxx/classNo=25/dt=2021-07-28 图15 查询结果 在OBS桶的“obs://dli-test-021/data4”目录下创建“classNo=24”的分区目录,再在“classNo=24”目录下创建子分区目录“dt=2021-07-29”。根据以下文件内容创建数据文件“test.csv”,并上传到OBS的“obs://dli-test-021/data4/classNo=24/dt=2021-07-29”目录下。 Jordon,88,24,2021-07-29 Kim,87,24,2021-07-29 Henry,76,24,2021-07-29 在SQL编辑器中执行以下命令,导入分区数据到OBS表“testcsvdata5source ”。 ALTER TABLE testcsvdata5source ADD PARTITION (classNo = 24,dt='2021-07-29') LOCATION 'obs://dli-test-021/data4/classNo=24/dt=2021-07-29'; 根据classNo分区列查询testcsvdata5source数据。 select * from testcsvdata5source where classNo = 24; 图16 查询结果 根据dt分区列查询所有“2021-07”月的所有数据。 select * from testcsvdata5source where dt like '2021-07%'; 图17 查询结果
  • DataSource和Hive两种语法创建OBS表的区别 DataSource语法和Hive语法主要区别在于支持的表数据存储格式范围、支持的分区数等有差异。两种语法创建OBS表主要差异点参见表1。 表1 DataSource语法和Hive语法创建OBS表的差异点 语法 支持的数据类型范围 创建分区表时分区字段差异 支持的分区数 DataSource语法 支持ORC,PARQUET,JSON,CSV,AVRO类型 创建分区表时,分区字段在表名和PARTITIONED BY后都需要指定。具体可以参考DataSource语法创建单分区OBS表。 单表分区数最多允许7000个。 Hive语法 支持TEXTFILE, AVRO, ORC, SEQUENCEFILE, RCFILE, PARQUET 创建分区表时,指定的分区字段不能出现在表后,只能通过PARTITIONED BY指定分区字段名和类型。具体可以参考Hive语法创建OBS分区表。 单表分区数最多允许100000个。 创建OBS表的DataSource语法可以参考使用DataSource语法创建OBS表。 创建OBS表的Hive语法可以参考使用Hive语法创建OBS表。
共100000条