华为云用户手册

  • 路径和表名的时间宏变量 如图1所示,如果将: 源端的“表名”配置为“ CDM _/${dateformat(yyyy-MM-dd)}”。 目的端的“写入目录”配置为“/opt/ttxx/${timestamp()}”。 经过宏定义转换,这个作业表示:将Oracle数据库的“SQOOP.CDM_20171016”表中数据,迁移到HDFS的“/opt/ttxx/1508115701746”目录中。 图1 源表名和写入目录配置为时间宏变量 目前也支持一个表名或路径名中有多个宏定义变量,例如“/opt/ttxx/${dateformat(yyyy-MM-dd)}/${timestamp()}”,经过转换后为“/opt/ttxx/2017-10-16/1508115701746”。
  • dateformat dateformat支持两种形式的参数: dateformat(format) format表示返回日期的格式,格式定义参考"java.text.SimpleDateFormat.java"中的定义。 例如当前日期为“2017-10-16 09:00:00”,则"yyyy-MM-dd HH:mm:ss"表示“2017-10-16 09:00:00”。 dateformat(format, dateOffset, dateType) format表示返回日期的格式。 dateOffset表示日期的偏移量。 dateType表示日期的偏移量的类型。 目前dateType支持以下几种类型:SECOND(秒),MINUTE(分钟),HOUR(小时),DAY(天),MONTH(月),YEAR(年)。 其中MONTH(月),YEAR(年)的偏移量类型存在特殊场景: 对于年、月来说,若进行偏移后实际没有该日期,则按照日历取该月最大的日期。 不支持在源端和目的端的“时间过滤”参数中的起始时间、终止时间使用年、月的偏移。 例如当前日期为"2023-03-01 09:00:00",则: "dateformat(yyyy-MM-dd HH:mm:ss, -1, YEAR)"表示当前时间的前一年,也就是"2022-03-01 09:00:00"。 "dateformat(yyyy-MM-dd HH:mm:ss, -3, MONTH)"表示当前时间的前三月,也就是"2022-12-01 09:00:00"。 "dateformat(yyyy-MM-dd HH:mm:ss, -1, DAY)"表示当前时间的前一天,也就是"2023-02-28 09:00:00"。 "dateformat(yyyy-MM-dd HH:mm:ss, -1, HOUR)"表示当前时间的前一小时,也就是"2023-03-01 08:00:00"。 "dateformat(yyyy-MM-dd HH:mm:ss, -1, MINUTE)"表示当前时间的前一分钟,也就是"2023-03-01 08:59:00"。 "dateformat(yyyy-MM-dd HH:mm:ss, -1, SECOND)"表示当前时间的前一秒,也就是"2023-03-01 08:59:59"。
  • 发布记录 表1 SDK C发布 版本号 变更时间 更新说明 1.2.0 功能增强 新增SDK测试代码及Demo,优化代码使用。 1.1.5 功能增强 更新OTA升级传输格式 1.1.4 功能增强 修复远程登录报文上报超时问题 1.1.3 功能增强 更新conf\rootcert.pem证书 1.1.2 新功能 增加规则引擎、M2M、gn编译文件、异常检测、日志打印时间戳、MQTT_DEBUG、国密算法、远程配置、端 云安全 通信(软总线)功能 1.1.1 新功能 新增SSH远程运维功能 1.1.0 新功能 增加MQTT5.0功能,优化代码,修复内存溢出问题 1.0.1 功能增强 增加mqtts不校验平台公钥场景、TLS版本为V1.2、增加消息存储样例等场景 0.9.0 新功能 增加网关更新子设备状态接口 0.8.0 功能增强 更换新的接入 域名 (iot-mqtts.cn-north-4.myhuaweicloud.com)和根证书。 如果设备使用老域名(iot-acc.cn-north-4.myhuaweicloud.com)接入,请使用 v0.5.0版本的SDK 0.5.0 功能增强 sdk预置了设备接入地址及华为 物联网平台 配套的CA证书,支持对接华为云物联网平台。
  • 如何开发网关 网关是一个特殊的设备,除具备一般设备功能之外,还具有子设备管理、子设备消息转发的功能。SDK提供了AbstractGateway抽象类来简化网关的实现。该类提供了子设备管理功能,需要从平台获取子设备信息并保存(需要子类提供子设备持久化接口)、子设备下行消息转发功能(需要子类实现转发处理接口)、以及上报子设备列表、上报子设备属性、上报子设备状态、上报子设备消息等接口。 使用AbstractGateway类 继承该类,在构造函数里提供子设备信息持久化接口,实现其下行消息转发的抽象接口: 1 2 3 4 5 6 7 public abstract void onSubdevCommand(String requestId, Command command); public abstract void onSubdevPropertiesSet(String requestId, PropsSet propsSet); public abstract void onSubdevPropertiesGet(String requestId, PropsGet propsGet); public abstract void onSubdevMessage(DeviceMessage message); iot-gateway-demo代码介绍 工程iot-gateway-demo基于AbstractGateway实现了一个简单的网关,它提供tcp设备接入能力。关键类: SimpleGateway:继承自AbstractGateway,实现子设备管理和下行消息转发 StringTcpServer:基于netty实现一个TCP server,本例中子设备采用TCP协议,并且首条消息为鉴权消息 SubDevicesFilePersistence:子设备信息持久化,采用json文件来保存子设备信息,并在内存中做了缓存 Session:设备会话类,保存了设备id和TCP的channel的对应关系 SimpleGateway类 添加或删除子设备处理 添加子设备:AbstractGateway的onAddSubDevices接口已经完成了子设备信息的保存。我们不需要再增加额外处理,因此SimpleGateway不需要重写onAddSubDevices接口 删除子设备:我们不仅需要修改持久化信息,还需要断开当前子设备的连接。所以我们重写了onDeleteSubDevices接口,增加了拆链处理,然后调用父类的onDeleteSubDevices。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 @Override public int onDeleteSubDevices(SubDevicesInfo subDevicesInfo) { for (DeviceInfo subdevice : subDevicesInfo.getDevices()) { Session session = nodeIdToSesseionMap.get(subdevice.getNodeId()); if (session != null) { if (session.getChannel() != null) { session.getChannel().close(); channelIdToSessionMap.remove(session.getChannel().id().asLongText()); nodeIdToSesseionMap.remove(session.getNodeId()); } } } return super.onDeleteSubDevices(subDevicesInfo); } 下行消息处理 网关收到平台下行消息时,需要转发给子设备。平台下行消息分为三种:设备消息、属性读写、命令。 设备消息:这里我们需要根据deviceId获取nodeId,从而获取session,从session里获取channel,就可以往channel发送消息。在转发消息时,可以根据需要进行一定的转换处理。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 @Override public void onSubdevMessage(DeviceMessage message) { //平台接口带的都是deviceId,deviceId是由nodeId和productId拼装生成的,即 //deviceId = productId_nodeId String nodeId = IotUtil.getNodeIdFromDeviceId(message.getDeviceId()); if (nodeId == null) { return; } //通过nodeId获取session,进一步获取channel Session session = nodeIdToSesseionMap.get(nodeId); if (session == null) { log.error("subdev is not connected " + nodeId); return; } if (session.getChannel() == null){ log.error("channel is null " + nodeId); return; } //直接把消息转发给子设备 session.getChannel().writeAndFlush(message.getContent()); log.info("writeAndFlush " + message); } 属性读写: 属性读写包括属性设置和属性查询。 属性设置: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 @Override public void onSubdevPropertiesSet(String requestId, PropsSet propsSet) { if (propsSet.getDeviceId() == null) { return; } String nodeId = IotUtil.getNodeIdFromDeviceId(propsSet.getDeviceId()); if (nodeId == null) { return; } Session session = nodeIdToSesseionMap.get(nodeId); if (session == null) { return; } //这里我们直接把对象转成string发给子设备,实际场景中可能需要进行一定的编解码转换 session.getChannel().writeAndFlush(JsonUtil.convertObject2String(propsSet)); //为了简化处理,我们在这里直接回响应。更合理做法是在子设备处理完后再回响应 getClient().respondPropsSet(requestId, IotResult.SUC CES S); log.info("writeAndFlush " + propsSet); } 属性查询: 1 2 3 4 5 6 7 @Override public void onSubdevPropertiesGet(String requestId, PropsGet propsGet) { //不建议平台直接读子设备的属性,这里直接返回失败 log.error("not supporte onSubdevPropertiesGet"); deviceClient.respondPropsSet(requestId, IotResult.FAIL); } 命令:处理流程和消息类似,实际场景中可能需要不同的编解码转换。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 @Override public void onSubdevCommand(String requestId, Command command) { if (command.getDeviceId() == null) { return; } String nodeId = IotUtil.getNodeIdFromDeviceId(command.getDeviceId()); if (nodeId == null) { return; } Session session = nodeIdToSesseionMap.get(nodeId); if (session == null) { return; } //这里我们直接把command对象转成string发给子设备,实际场景中可能需要进行一定的编解码转换 session.getChannel().writeAndFlush(JsonUtil.convertObject2String(command)); //为了简化处理,我们在这里直接回命令响应。更合理做法是在子设备处理完后再回响应 getClient().respondCommand(requestId, new CommandRsp(0)); log.info("writeAndFlush " + command); } 上行消息处理 上行处理在StringTcpServer的channelRead0接口里。如果会话不存在,需要先创建会话: 如果子设备信息不存在,这里会创建会话失败,直接拒绝连接 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 @Override protected void channelRead0(ChannelHandlerContext ctx, String s) throws Exception { Channel incoming = ctx.channel(); log.info("channelRead0" + incoming.remoteAddress() + " msg :" + s); //如果是首条消息,创建session //如果是首条消息,创建session Session session = simpleGateway.getSessionByChannel(incoming.id().asLongText()); if (session == null) { String nodeId = s; session = simpleGateway.createSession(nodeId, incoming); //创建会话失败,拒绝连接 if (session == null) { log.info("close channel"); ctx.close(); } } 如果会话存在,则进行消息转发: 1 2 3 4 5 6 7 else { //如果需要上报属性则调用reportSubDeviceProperties DeviceMessage deviceMessage = new DeviceMessage(s); deviceMessage.setDeviceId(session.getDeviceId()); simpleGateway.reportSubDeviceMessage(deviceMessage, null); } 到这里,网关的关键代码介绍完了,其他的部分看源代码。整个demo是开源的,用户可以根据需要进行扩展。比如修改持久化方式、转发中增加消息格式的转换、实现其他子设备接入协议。 iot-gateway-demo的使用 创建子设备的产品,步骤可参考创建产品。 在创建的产品中定义模型,添加服务,服务ID为parameter。并且新增alarm和temperature两个属性,如下图所示 图9 模型定义-子设备产品 修改StringTcpServer的main函数,替换构造参数,然后运行该类。 1 2 3 simpleGateway = new SimpleGateway(new SubDevicesFilePersistence(), "ssl://iot-acc.cn-north-4.myhuaweicloud.com:8883", "5e06bfee334dd4f33759f5b3_demo", "mysecret"); 在平台上看到该网关在线后,添加子设备。 图10 设备-添加子设备 表1 子设备参数 参数名称 参数描述 所属产品 子设备所属的产品,选择步骤1创建的产品。 设备名称 即device_name,可自定义,如subdev_name 设备标识码 即node_id,填写subdev。 设备ID 即devicee_id,可不填写,自动生成。 此时网关上日志打印: 2024-04-16 21:00:01 INFO SubDevicesFilePersistence:112 - add subdev, the nodeId is subdev 运行TcpDevice类,建立连接后,输入步骤3中注册的子设备的nodeId,如subdev。 图11 子设备连接 此时网关设备日志打印: 2024-04-16 21:00:54 INFO StringTcpServer:196 - initChannel: /127.0.0.1:21889 2024-04-16 21:01:00 INFO StringTcpServer:137 - channelRead0 is /127.0.0.1:21889, the msg is subdev 2024-04-16 21:01:00 INFO SimpleGateway:100 - create new session ok, the session is Session{nodeId='subdev', channel=[id: 0xf9b89f78, L:/127.0.0.1:8080 - R:/127.0.0.1:21889], deviceId='subdev_deviceId'} 在平台上看到子设备上线。 图12 设备列表-设备在线 子设备上报消息 图13 子设备上报消息 查看日志看到上报成功 2024-04-16 21:02:36 INFO StringTcpServer:137 - channelRead0 is /127.0.0.1:21889, the msg is hello 2024-04-16 21:02:36 INFO MqttConnection:299 - publish message topic is $oc/devices/5e06bfee334dd4f33759f5b3_demo/sys/messages/up, msg = {"name":null,"id":null,"content":"hello","object_device_id":"subdev_deviceId"] 2024-04-16 21:02:36 INFO MqttConnection:299 - publish message topic is $oc/devices/5e06bfee334dd4f33759f5b3_demo/sys/gateway/sub_devices/properties/report, msg = {"devices":[{"services":[{"properties":{"temprature":2,"alarm":1},"service_id":"parameter","event_time":null}],"device_id":"subdev_deviceId"}]] 查看消息跟踪 在平台上找到网关,选择 设备详情-消息跟踪,打开消息跟踪。继续让子设备发送数据,等待片刻后看到消息跟踪: 图14 消息跟踪-直连设备
  • 创建产品 为了方便体验,我们提供了一个烟感的产品模型,烟感会上报烟雾值、温度、湿度、烟雾报警、还支持响铃报警命令。以烟感例,体验消息上报、属性上报等功能。 访问 设备接入服务 ,单击“管理控制台”进入设备接入控制台,选择您的实例,单击实例卡片进入。查看MQ TTS 设备接入域名,保存该地址。 单击左侧导航栏“产品”,单击页面左侧的“创建产品”。 根据页面提示填写参数,然后单击“确定”完成产品的创建。 基本信息 所属资源空间 平台自动将新创建的产品归属在默认资源空间下。如需归属在其他资源空间下,下拉选择所属的资源空间。如无对应的资源空间,请先创建资源空间。 产品名称 自定义。支持字母、数字、下划线(_)、连字符(-)的字符组合。 协议类型 选择“MQTT”。 数据格式 选择“JSON”。 设备类型选择 选择”自定义类型” 设备类型 填写“smokeDetector” 高级配置 产品ID 不填写 产品描述 请根据实际情况填写。
  • 准备工作 开发环境要求:已经安装JDK(版本1.8以上)和maven 访问SDK下载页面,下载SDK,整个工程包含以下子工程: iot-device-sdk-java:sdk代码 iot-device-demo:普通直连设备的demo代码 iot-gateway-demo:网关设备的demo代码 iot-bridge-sdk:网桥的sdk代码 iot-bridge-demo:网桥的demo代码,用来演示如何将tcp设备桥接到平台 iot-bridge-sample-tcp-protocol:子设备使用tcp协议链接网桥的样例 iot-device-code-generator:设备代码生成器,可以根据产品模型自动生成设备代码 编译安装:进入到SDK根目录,执行mvn install
  • 设备初始化 创建设备时,需要写入在注册设备时获取的设备ID、密码,以及1中获取的设备对接信息,注意格式为ssl://域名信息:端口号 或 ssl://IP地址:端口号 1 2 3 4 5 6 // 获取证书路径:加载iot平台的ca证书,进行服务端校验,使用sdk默认的ca.jks即可。 URL resource = MessageSample.class.getClassLoader().getResource("ca.jks"); File file = new File(resource.getPath()); //例如在iot-device-demo文件 MessageSample.java中修改以下参数 IoTDevice device = new IoTDevice("ssl://域名信息:8883", "5e06bfee334dd4f33759f5b3_demo", "mysecret", file); 所有涉及设备ID和密码的文件均需要修改成对应的信息。 建立连接。调用init接口,该接口是阻塞调用,如果建立连接成功会返回0。 1 2 3 if (device.init() != 0) { return; } 如果连接成功就会打印: 1 2023-07-17 17:22:59 INFO MqttConnection:105 - Mqtt client connected. address :ssl://域名信息:8883 创建设备并连接成功后,可以开始使用设备进行通信。调用IoT Device 的getClient接口获取设备客户端,客户端提供了消息、属性、命令等通讯接口。
  • 使用说明 已安装Python 3.11.4 已安装第三方类库paho-mqtt:2.0.0 (必需) 已安装第三方类库schedule: 1.2.2 (必需) 已安装第三方类库apscheduler: 3.10.4 (必需) 已安装第三方类库requests: 2.32.2 (可选,在网关与子设备管理demo演示中使用) 已安装第三方类库tornado: 6.3.3 (可选,在网关与子设备管理demo演示中使用)
  • 版本说明 表1 Python版本说明 版本 变更类型 说明 1.2.0 新增功能 增加规则引擎、设备发放功能、自定义断线重连功能、升级组件版本。 1.1.4 新增功能 OTA升级支持网关模式 1.1.3 功能增强 更新服务端ca证书 1.1.2 新增功能 增加micropython支持和对应demo,从OBS下载OTA,以及说明文档。 1.1.1 新增功能 提供对接华为云IoT物联网平台能力,方便用户实现安全接入、设备管理、数据采集、命令下发等业务场景。
  • 版本更新说明 表1 C#语言SDK版本更新说明 版本号 变更类型 功能描述说明 1.3.4 功能增强 优化日志打印; oc开头SubscribeTopic返回topic; demo优化; 网关接口bug修复; 升级目标框架; 其它优化。 1.3.3 新增功能 OTA升级支持网关模式 1.3.2 功能增强 更新服务器ca证书 1.3.1 修复 修复空指针异常,MQTT对象未释放等问题。 1.3.0 新功能 支持通过OBS升级软固件包 1.2.0 新功能 增加泛协议功能 1.1.1 功能增强 添加网关删除子设备功能,完善中英文描述。 1.1.0 新功能 新增网关与物模型功能 1.0.0 第一次发布 提供基础的设备接入能力,sdk预置了设备接入地址及华为IoTDA平台配套的CA证书。
  • 概述 自定义鉴权是指用户可以通过函数服务自定义实现鉴权逻辑,以对接入平台的设备进行身份认证。 在设备接入物联网平台前,用户可以通过应用服务调用控制台配置自定义鉴权信息,然后通过调用函数服务(FunctionGraph)配置自定义鉴权函数。在设备接入物联网平台时,物联网平台会获取设备ID和自定义鉴权函数名称等参数,并向FunctionGraph发起发起鉴权请求,由用户实现鉴权逻辑以完成设备的接入鉴权。
  • 约束与限制 使用自定义鉴权功能,要求设备必须使用TLS同时支持SNI(Server Name Indication),SNI中需要携带平台分配的域名。 每个用户默认最多支持10个自定义鉴权的配置。 自定义鉴权的函数最大处理时间为5秒,5秒内函数没返回结果,则认为鉴权失败。 每个用户总鉴权请求的TPS限制参考产品规格说明,自定义鉴权为总鉴权TPS的50%(不包含设备自注册)。 若用户开启了缓存FunctionGraph的鉴权结果,则在相同参数下,函数服务的修改生效时间需在缓存超期后才能生效。 在所有的设备接入鉴权方式中,当满足自定义鉴权条件时(匹配到设备携带的自定义鉴权器名称或用户配置了默认自定义鉴权器),优先采用自定义鉴权方式进行设备接入。
  • 计费示例 假设您在2023/03/08 15:50:04购买了一个包年/包月DDS副本集实例(规格:2 vCPUs 4GB,节点数量:3个,存储:40GB,备份存储:50GB(赠送40GB,后续收费空间10GB)),计费资源包括实例规格(vCPU、内存、节点数量)、存储空间、备份空间、公网带宽。购买时长为一个月,并在到期前手动续费1个月,则: 第一个计费周期为:2023/03/08 15:50:04 ~ 2023/04/08 23:59:59 第二个计费周期为:2023/04/08 23:59:59 ~ 2023/05/08 23:59:59 2023/04/08 23:59:59~2023/05/01 23:59:59期间,使用免费空间20GB。 2023/05/01 23:59:59~2023/05/08 23:59:59期间,使用计费空间10GB,计费时长168小时。 图1给出了上述示例配置的费用计算过程。 图中价格仅供参考,实际计算请以DDS价格详情中的价格为准。 图1 包年/包月DDS费用计算示例 按需计费模式下,各计费项的计费示例请参见计费示例。
  • 计费说明 文档数据库服务(Document Database Service,简称DDS)的计费项由实例规格费用、存储空间费用、备份空间费用组成。具体内容如表1所示。 标 * 的计费项为必选计费项。 表1 文档数据库服务DDS计费项 计费项 计费项说明 适用的计费模式 计费公式 * 实例规格 计费因子:vCPU、内存和节点数量,不同规格的实例类型提供不同的计算和存储能力。 包年/包月、按需计费 实例规格单价 * 购买时长 实例规格单价请参见DDS价格详情中的“规格费用”。 * 存储空间 计费因子:存储空间,按统一标准进行计费。 包年/包月、按需计费 存储空间单价 * 存储容量 * 购买时长 存储空间单价请参见DDS价格详情中的“磁盘空间计费信息”。 * 备份空间 计费因子:备份空间,按统一标准进行计费。 按需计费 备份空间单价 * 备份收费容量 * 计费时长 存储空间单价请参见DDS价格详情中的“备份空间计费信息”。 说明: 计费时长:备份超过免费空间大小的使用时长。 跨区域备份(可选) 计费因子:存储空间,按统一标准进行计费。 按需计费 存储空间单价 x 存储容量 x 购买时长 存储空间单价:0.0009 元/GB/小时 计费因子:跨Region备份流量,按统一标准进行计费。 按存储容量计费 跨Region备份流量单价 x 存储容量 跨Region备份流量单价:0.5 元/GB 公网带宽 如有互联网访问需求,您需要购买弹性公网IP。 计费因子:带宽费、流量费和IP保有费。 包年/包月计费模式支持按带宽计费方式,收取带宽费。 按需计费模式支持按带宽计费、按流量计费和加入共享带宽三种计费方式,分别收取带宽费+IP保有费、流量费+IP保有费、带宽费+IP保有费。 包年/包月、按需计费 带宽费支持使用带宽加油包抵扣,流量费支持使用共享流量包抵扣。 按固定带宽值采用阶梯计费 0Mbit/s~5Mbit/s(含):均为一个统一的单价 大于5Mbit/s:按每Mbit/s计费 公网带宽单价请参见弹性 云服务器价格 详情中的“带宽价格”,或者弹性公网IP价格详情。 审计日志 计费因子:审计日志存储空间,按统一标准进行计费。 按需计费 审计日志存储空间单价 * 存储容量 * 计费时长 实例规格单价请参见DDS价格详情中的“审计日志空间计费信息”。
  • 开发规范 如果用户在APP的开发中,使用了连接池机制,那么需要遵循如下规范: 如果在连接中设置了GUC参数,那么在将连接归还连接池之前,必须使用“SET SESSION AUTHORIZATION DEFAULT;RESET ALL;”将连接的状态清空。 如果使用了临时表,那么在将连接归还连接池之前,必须将临时表删除。 否则,连接池里面的连接就是有状态的,会对用户后续使用连接池进行操作的正确性带来影响。 父主题: 使用JDBC或ODBC进行 GaussDB (DWS)二次开发
  • 基于JDBC开发 JDBC(Java Database Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问接口,应用程序可基于它操作数据。 GaussDB(DWS)库提供了对JDBC 4.0特性的支持,需要使用JDK1.6及以上版本编译程序代码,不支持JDBC桥接ODBC方式。 JDBC包与驱动类 开发流程 加载驱动 连接数据库 执行SQL语句 处理结果集 关闭连接 示例:常用操作 示例:重新执行应用SQL 示例:通过本地文件导入导出数据 示例:从MySQL向GaussDB(DWS)进行数据迁移 示例:应用端加工RoaringBitmap结果集并入库GaussDB(DWS) JDBC接口参考 父主题: 使用JDBC或ODBC进行GaussDB(DWS)二次开发
  • 编辑器功能描述 编辑器上面一栏可进行数据源、数据库、模式进行切换操作。 编写SQL语句,提供高亮、基本语法提示、数据库、模式和表、字段的相关提示信息。SQL编写的语法请参考:SQL语法参考。 提供格式化和查询执行计划等功能,注意PERFORMANCE执行计划时对应的SQL语句也会执行,所以如果查看操作类SQL的执行计划请谨慎。 如果编写了大量的SQL语句,可以单击保存,将语句保存到对应的OBS桶中。 最下面会展示查询的结果,结果分页,且可以选择图标,根据不同的字段来生成饼图,折线图和柱状图,查询的结果支持根据查到的内容导出excel文件。在“SQL执行记录”页签可查看近半年非查询SQL语句记录。 切换至脚本面板,显示目录文件夹。脚本文件保存至创建的目录文件中,详情请参见新增目录。目前编辑器提供两级目录,每层目录可新增10个文件夹,每个文件夹下面可保存100个脚本文件,脚本文件选择对应的OBS桶文件目录进行保存,OBS桶文件地址可全局设置,详情请参见全局设置。 图1 SQL编辑器界面
  • 前提条件 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。 curl ip:port 返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。
  • 前提条件 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。 curl ip:port 返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。
  • 前提条件 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。 curl ip:port 返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。
  • 连接代码 SSL开启 import ssl from pymongo import MongoClient conn_urls="mongodb://rwuser:rwuserpassword@ip:port/{mydb}?authSource=admin" connection = MongoClient(conn_urls,connectTimeoutMS=5000,ssl=True, ssl_cert_reqs=ssl.CERT_REQUIRED,ssl_match_hostname=False,ssl_ca_certs=${path to certificate authority file}) dbs = connection.database_names() print "connect database success! database names is %s" % dbs SSL关闭 import ssl from pymongo import MongoClient conn_urls="mongodb://rwuser:rwuserpassword@ip:port/{mydb}?authSource=admin" connection = MongoClient(conn_urls,connectTimeoutMS=5000) dbs = connection.database_names() print "connect database success! database names is %s" % dbs
  • 前提条件 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。 curl ip:port 返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。 在弹性云服务器上安装Python以及第三方安装包pymongo。推荐使用pymongo2.8版本。 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。
  • 连接代码 SSL开启 import ssl from pymongo import MongoClient conn_urls="mongodb://rwuser:rwuserpassword@ip:port/{mydb}?authSource=admin&replicaSet=replica" connection = MongoClient(conn_urls,connectTimeoutMS=5000,ssl=True, ssl_cert_reqs=ssl.CERT_REQUIRED,ssl_match_hostname=False,ssl_ca_certs=${path to certificate authority file}) dbs = connection.database_names() print "connect database success! database names is %s" % dbs SSL关闭 import ssl from pymongo import MongoClient conn_urls="mongodb://rwuser:rwuserpassword@ip:port/{mydb}?authSource=admin&replicaSet=replica" connection = MongoClient(conn_urls,connectTimeoutMS=5000) dbs = connection.database_names() print "connect database success! database names is %s" % dbs URL中的认证数据库必须为“admin”,即“authSource=admin”。 SSL方式连接,需要手动生成trustStore文件。 认证数据库必须为“admin”,之后再切换至业务数据库。
  • 前提条件 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。 curl ip:port 返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。 在弹性云服务器上安装Python以及第三方安装包pymongo。推荐使用pymongo2.8版本。 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。
  • 前提条件 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。 curl ip:port 返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。 在弹性云服务器上安装Python以及第三方安装包pymongo。推荐使用pymongo2.8版本。 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。
  • 连接代码 SSL开启 import ssl from pymongo import MongoClient conn_urls="mongodb://rwuser:rwuserpassword@ip:port/{mydb}?authSource=admin" connection = MongoClient(conn_urls,connectTimeoutMS=5000,ssl=True, ssl_cert_reqs=ssl.CERT_REQUIRED,ssl_match_hostname=False,ssl_ca_certs=${path to certificate authority file}) dbs = connection.database_names() print "connect database success! database names is %s" % dbs SSL关闭 import ssl from pymongo import MongoClient conn_urls="mongodb://rwuser:rwuserpassword@ip:port/{mydb}?authSource=admin" connection = MongoClient(conn_urls,connectTimeoutMS=5000) dbs = connection.database_names() print "connect database success! database names is %s" % dbs
  • 非SSL方式 使用非SSL方式连接,请务必关闭SSL连接,否则会出现报错。如何关闭SSL连接,请参见开启和关闭SSL连接。 打开Robo 3T工具,在连接信息页面,单击“Create”。 图8 连接信息 在弹出的“Connection Settings”窗口,设置新建连接的参数。 在“Connection”页签,“Name”填写自定义的新建连接的名称,“Address”填写集群实例绑定的弹性IP和实例的数据库端口。 图9 Connection 在“Authentication”页签,“Database”填写admin,“User Name”填写rwuser,“Password”填写您创建集群实例时设置的管理员密码。 图10 Authentication 在“TLS”页签,勾选“Use TLS protocol”,“Authentication Method”选择“Self-signed Certificate”。 图11 SSL 设置完成后,单击“Save”。 在连接信息页面,单击“Connect”,开始连接单节点实例。 图12 单节点连接信息 成功连接单节点实例,工具界面显示如图13所示。 图13 单节点连接成功
  • SSL方式 使用SSL方式连接,请务必开启SSL连接,否则会报错。关于如何开启SSL连接,请参见开启和关闭SSL连接。 打开Robo 3T工具,在连接信息页面,单击“Create”。 图2 连接信息 在弹出的“Connection Settings”窗口,设置新建连接的参数。 在“Connection”页签,“Name”填写自定义的新建连接的名称,“Address”填写集群实例绑定的弹性IP和实例的数据库端口。 图3 Connection 在“Authentication”页签,“Database”填写admin,“User Name”填写rwuser,“Password”填写您创建集群实例时设置的管理员密码。 图4 Authentication 在“TLS”页签,勾选“Use TLS protocol”,“Authentication Method”选择“Self-signed Certificate”。 图5 SSL 设置完成后,单击“Save”。 在连接信息页面,单击“Connect”,开始连接单节点实例。 图6 单节点连接信息 成功连接单节点实例,工具界面显示如图7所示。 图7 单节点连接成功
  • SSL方式 使用SSL方式连接,请务必开启SSL连接,否则会报错。关于如何开启SSL连接,请参见开启和关闭SSL连接。 打开Robo 3T工具,在连接信息页面,单击“Create”。 图2 连接信息 在弹出的“Connection Settings”窗口,设置新建连接的参数。 在“Connection”页签,“Name”填写自定义的新建连接的名称,“Address”填写集群实例绑定的弹性IP和实例的数据库端口。 图3 Connection 在“Authentication”页签,“Database”填写admin,“User Name”填写rwuser,“Password”填写您创建集群实例时设置的管理员密码。 图4 Authentication 在“TLS”页签,勾选“Use TLS protocol”,“Authentication Method”选择“Self-signed Certificate”。 图5 SSL 设置完成后,单击“Save”。 在连接信息页面,单击“Connect”,开始连接集群实例。 图6 集群连接信息 成功连接集群实例,工具界面显示如图7所示。 图7 集群连接成功
  • 非SSL方式 使用非SSL方式连接,请务必关闭SSL连接,否则会出现报错。如何关闭,请参见开启和关闭SSL连接。 打开Robo 3T工具,在连接信息页面,单击“Create”。 图8 连接信息 在弹出的“Connection Settings”窗口,设置新建连接的参数。 在“Connection”页签,“Name”填写自定义的新建连接的名称,“Address”填写集群实例绑定的弹性IP和实例的数据库端口。 图9 Connection 在“Authentication”页签,“Database”填写admin,“User Name”填写rwuser,“Password”填写您创建集群实例时设置的管理员密码。 图10 Authentication 设置完成后,单击“Save”。 在连接信息页面,单击“Connect”,开始连接集群实例。 图11 集群连接信息 成功连接集群实例,工具界面显示如图12所示。 图12 集群连接成功
共100000条