云服务器内容精选

  • 区域支持 区域支持指的是应用遵守文化偏好的问题,包括字母表、排序、数字格式等。区域是在使用initdb创建一个数据库时自动被初始化的。默认情况下,initdb将会按照它的执行环境的区域设置初始化数据库,即系统已经设置好的区域。如果想要使用其他的区域,可以使用手工指定(initdb –locale=xx)。 如果想要将几种区域的规则混合起来,可以使用以下区域子类来控制本地化规则的某些方面。这些类名转换成initdb的选项名来覆盖某个特定分类的区域选择。 表1 区域支持 字段 描述 LC_COLLATE 字符串排序顺序。 LC_CTYPE 字符分类(什么是一个字符?它的大写形式是否等效?) LC_MESSAGES 消息使用的语言Language of messages。 LC_MONETARY 货币数量使用的格式。 LC_NUMERIC 数字的格式。 LC_TIME 日期和时间的格式。
  • 字符集 PG里面的字符集支持各种字符集存储文本,包括单字节字符集,比如ISO 8859系列,以及多字节字符集,比如EUC(扩展Unix编码Extended Unix Code)、UTF-8和Mule内部编码。MPPDB中目前主要使用的字符集包括GBK、UTF-8和LATIN1。所有被支持的字符集都可以被客户端透明地使用,但少数只能在服务器上使用(即作为一种服务器端编码,GBK编码在PG中只是客户端编码,不是服务端编码,MPPDB将GBK引入到服务端编码,这是很多问题的根源)。默认的字符集是在使用initdb初始化PG数据库时选择的。在创建一个数据库实例时可以重载字符集,因此可能会有多个数据库实例并且每一个使用不同的字符集。一个重要的限制是每个数据库的字符集必须和数据库LC_CTYPE(字符分类)和LC_COLLATE (字符串排序顺序)设置兼容。对于C或POSIX,任何字符集都是允许的,但是对于其他区域只有一种字符集可以正确工作。不过,在Windows上UTF-8编码可以和任何区域配合使用。 SQL_ASCII设置与其他设置表现得相当不同。如果服务器字符集是SQL_ASCII,服务器把字节值0-127根据ASCII标准解释,而字节值128-255则当作无法解析的字符。如果设置为SQL_ASCII,就不会有编码转换。因此,这个设置基本不是用来声明所使用的指定编码,因为这个声明会忽略编码。在大多数情况下,如果使用了任何非ASCII数据,那么使用SQL_ASCII设置都是不明智的,因为PG将无法帮助你转换或者校验非ASCII字符。 数据库系统支持某种编码,主要涉及三个方面:数据库服务器支持,数据访问接口支持以及客户端工具支持。 数据库服务器字符编码 数据库服务器支持某种编码,是指数据库服务器能够从客户端接收、存储以及向客户端提供该种编码的字符(包括标识符、字符型字段值),并能将该种编码的字符转换到其它编码(如UTF-8编码转到GBK编码)。 指定数据库服务器编码:创建数据库时指定:CREATE DATABASE … ENCODING … //可以取ASCII、UTF-8、EUC_CN、……; 查看数据库编码:show server_encoding。 数据库访问接口编码 数据库访问接口支持某种编码,是指数据库访问接口要做到能对该种编码的字符进行正确读写,不应出现数据丢失、数据失真等情况。以JDBC接口为例: JDBC接口一般根据JVM的file.encoding设置client_encoding:set client_encoding to file_encoding; 将String转换成client_encoding编码的字节流,传给服务器端:原型String.getBytes(client_encoding) ; 收到服务器的字节流后,使用client_encoding构造String对象作为getString的返回值给应用程序:原型String(byte[], …, client_encoding)。 客户端编码 客户端工具支持某种编码,是指客户端工具能够显示从数据库读取该种编码的字符,也能通过本工具将该种编码的字符提交到服务器端。 指定会话的客户端编码:SET CLIENT_ENCODING TO 'value'; 查看数据库编码:Show client_encoding。
  • 原因分析 创建OBS外表语句中的访问密钥AK和SK错误,会出现如下所示的错误信息: 1 ERROR: Fail to connect OBS in node:cn_5001 with error code: AccessDenied 账户OBS权限不足,对OBS桶没有读、写权限,会出现如下所示的错误信息: 1 dn_6001_6002: Datanode 'dn_6001_6002' fail to read OBS object bucket:'obs-bucket-name' key:'xxx/xxx/xxx.csv' with OBS error code:AccessDenied message: Access Denied 默认情况下,您不具备访问其他账号的OBS数据的权限,此外, IAM 用户(相当于子用户)也不具备访问其所属账号的OBS数据的权限。
  • 处理方法 创建OBS外表语句中的访问密钥AK和SK错误 请获取正确的访问密钥AK和SK,写入创建OBS外表的SQL语句中。获取访问密钥的步骤如下: 登录 GaussDB (DWS)管理控制台。 将鼠标移至右上角的用户名,单击“我的凭证”。 进入“我的凭证”后,在左侧导航树单击“访问密钥”。 在访问密钥页面,可以查看已有的访问密钥ID(即AK)。 如果要同时获取AK和SK,单击“新增访问密钥”创建并下载访问密钥。 账户OBS权限不足,对OBS桶没有读、写权限 您必须给指定的用户授予所需的OBS访问权限: 通过OBS外表导入数据到GaussDB(DWS)时,执行导入操作的用户必须具备数据源文件所在的OBS桶和对象的读取权限。 通过OBS外表导出数据时,执行导出操作的用户必须具备数据导出路径所在的OBS桶和对象的读取和写入权限。 有关配置OBS权限的具体操作,请参见《 对象存储服务 控制台指南》中的配置桶ACL和“配置对象ACL”章节。
  • 解决方案 建议根据实际情况调整客户端的并发写入请求数(调整到一个合适的阈值),另外被rejected的http请求ES-Hadoop是有重试机制的,可修改以下参数: “es.batch.write.retry.count”:默认重试3次。 “es.batch.write.retry.wait”:每次重试等待时间10s。 如果对查询的实时性级别要求不高的话,可以调整下分片刷新的时间(默认是每秒刷新一次),提高写入速度。 PUT /my_logs { "settings": { "refresh_interval": "30s" } }